TIL(Today I Learned)
4월 22일(목)
학습내용
- 솔이 퀴즈
- 클로저와 클래스 인스턴스는 Heap에 할당된다.
- 실행중인 app을 foreground에서 background로 이동시, applicationWillResignActive → applicationDidEnterBackground 순으로 메소드가 호출된다.
- UITableView는 cell뿐만 아니라 HeaderView, FooterView도 재사용이 가능하다.
- UICollectionViewFlowLayout은 layout 전체적인 수치(아이템 크기, 간격 등)를 정할때 사용한다. 그리고UICollectionViewDelegateFlowLayout은 collectionview의 어떤 특정 아이템의 수치(크기와 간격)을 정하기 위한 프로토콜이다.
- UITableViewCell에서 accessoryView의 영역은 contentView에 포함되지 않는다.
- 뷰를 회전시키면 frame은 뷰의 전체 영역을 감싸는 사각형의 좌표로 바뀌지만, bounds는 변하지 않는다.
- LLDB formatter를 사용하지 않는 LLDB 명령어는 po이다.
- 접근토큰의 수명이 끝난 후 사용자의 인증절차 없이 소비자가 서비스제공자로부터 접근토큰을 재발급받을 수 있게 하는 토큰은 refresh token이다.
- 오글 퀴즈
- SceneDelegate.swift가 없어도 앱은 동작할 수 있다.
- HTTPS는 HTTP 프로토콜에서 SSL 프로토콜을 사용하여 세션 데이터를 암호화한다.
- CPU에서 실행되고 있는 프로그램이 프로세스이다.
- UIScene은 UIView를 상속받지 않고 UIResponder만 상속한다.
- UIViewController는 NSObject를 상속받는다.
- Responder 객체가 Event를 핸들링 할때, UITextField, UIViewController, UIWindow, UIApplicationDelegate 순으로 이벤트가 전달된다.
- 특정 뷰를 언어권에 상관없이 왼쪽에 고정시키려면 leftAnchor를 사용하여 레이아웃을 설장한다.
- OCP - 개방폐쇄 원칙, ISP - 인터페이스 분리 원칙 , LSP - 리스코프 치환 원칙, SRP - 단일 책임 원칙, DIP - 의존관계 역전 원칙.
- NSCache는 Memory cache이다.
- git commit —amend -m
를 입력하면 가장 최근 커밋의 메세지를 수정할 수 있다. - git reset
명령어를 사용하면 커밋 이력만 삭제되고 Working Directory는 그대로 유지된다. - Swift의 기본 데이터 타입은 모두 struct로 구성되어 있다. (Cocoa touch framework는 보통 class로 구성되어있다.)
- Xcode Help
- Jump Bar의 검색기능을 통해 해당 코드로 이동할 수 있다.
- static analyzer가potential flaws (보라색표시)를 알려준다. (항상 정확한 것은 아니다.)
- scheme은 프로젝트 빌드를 위한 target, build configuration, 실행 환경 등에 대한 설정 모음이다.
- target은 빌드를 위한 product를 상세한 것이다.
- Build Configuration을 Debug, Release로 설정할 수 있다. assert함수는 Debug모드일때만 작동한다.
- Code Signing
- 앱을 최초에 누가 서명을 했는지 확인하고, 서명 이후에 앱이 변질되지 않았음을 확인하기 위한 절차.
- Team
- 애플에서 승인한 개발자 팀 정보
- Bundle Identifier
- 시스템에서 앱을 구분하기 위한 ID.
- Provisionig Profile
- Provisioning profile은 기기와 개발자를 이어주는 역할을 한다. 애플에게 앱에 대한 승인을 받기 전에 앱을 테스트하려는 기기의 정보를 포함하고 있다. App ID, Development Certificate, Device ID를 포함하고 있다.
- Signing Certificate
- 앱을 signing 하기위해 애플에서 발행하는 인증서. public key와 private key를 포함한다.
문제점/고민한점
- Targets vs Scheme
- Frame vs Bounds
- Bundle 이란?
- Product 란?
해결방법
- Targets vs Scheme
- target은 product 자체에 대한 build 세팅이고, scheme은 실행 환경에 대한 설정값 들이다. 보통 scheme은 디버깅할때 사용된다고 생각하면 된다.
- Frame vs Bounds
- Frame은 상위뷰의 좌표시스템에서 View의 위치와 크기를 나타내는 사각형, Bounds는 자신만의 좌표시스템 내에서 위치와 크기를 나타내는 사각형이다.
- Bundle 이란?
- 번들은 실행가능한 코드와 관련 리소스(이미지, 사운드 등)을 한 공간에 묶는 파일시스템에 있는 디렉토리이다
- Product 란?
- 빌드된 결과물.
참고
- https://help.apple.com/xcode
- https://abhimuralidharan.medium.com/what-is-a-provisioning-profile-in-ios-77987a7c54c2
- https://zeddios.tistory.com/203
- https://sihyungyou.github.io/iOS-app-bundle/
- https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple_ref/doc/uid/10000123i-CH101-SW1