본문 바로가기

iOS41

[iOS] CaseIterable CaseIterable 프로토콜에 관해 기록합니다. protocol CaseIterable CaseIterable 프로토콜을 사용하면 Collection과 같이 enum의 값들을 순회할 수 있도록 해준다. enum CompassDirection: CaseIterable { case north, south, east, west } print("There are \(CompassDirection.allCases.count) directions.") // Prints "There are 4 directions." let caseList = CompassDirection.allCases .map({ "\($0)" }) .joined(separator: ", ") // caseList == "north, sout.. 2021. 6. 27.
[iOS] Outlets은 왜 옵셔널일까? Outlets은 왜 암시적 추출 옵셔널인지 기록합니다. 이를 설명하기 위해 전제가 있다. 클래스 또는 구조체의 인스턴스는 초기화를 마치기 전에 모든 저장 프로퍼티를 초기화시켜야 한다. 만약 초기화할 때 저장 프로퍼티가 가져야 할 값을 모른다면 default 값을 할당하거나 암시적 추출 옵셔널을 사용하여 선언할 수 있다. 이는 outlets이 왜 암시적 추출 옵션으로 선언해야 하는 이유가 된다. outlet의 값은 초기화되면서 설정할 수 없다. 그 이유는 뷰 컨트롤러가 초기화되어야 뷰가 로드되기 때문이다. 이 말은 뷰 컨트롤러의 초기화 직후에 모든 outlets은 값이 없다는 것을 의미한다. 그래서 암시적 추출 옵셔널로 선언해서 편리하게 인터페이스를 빌드하는데 사용한다. 하지만 암시적 추출 옵셔널은 런타임.. 2021. 6. 18.
[iOS] UIView & CALayer UIView와 CALayer에 관한 내용을 기록합니다. UIView 화면에서 직사각형 영역에 대한 content를 관리하는 객체이다. class UIView: UIResponder UIView 객체는 직사각형 영역 내 content를 만들고 content와의 상호작용을 처리한다. 앱이 사용자와 상호작용하는 주된 방식이므로 다음과 같은 여러 가지 역할이 있다. Drawing and animation UIkit 또는 Core Graphics를 사용해서 직사각형 영역에 content를 그린다. 일부 프로퍼티를 애니메이션화할 수 있다. Layout and subview management 0 또는 그 이상의 subview를 갖고 있다. subview의 위치와 크기를 조정할 수 있다. 뷰의 우선순위에 따라 크기와.. 2021. 6. 1.
[iOS] Notification Center NotificationCenter & Notification에 관해 기록합니다. NotificationCenter 등록된 observer에게 동시에 Notification을 전달하는 클래스이다. Notification 클래스는 Notification을 발송하면 NotificationCenter에서 메시지를 전달한 observer가 처리될 때까지 대기한다. → 동기적(synchronous)인 흐름 Notification을 비동기적으로 사용하라면 NotificationQueue를 사용한다. Getting the Default NotificationCenter class var `default`: NotificationCenter 애플리케이션의 기본 Notification Adding and Removing .. 2021. 5. 27.
[iOS] Foundation Foundation Framework에 관한 내용을 기록합니다. Foundation Framework Access essential data types, collections, and operating-system services to define the base layer of functionality for your app. 원시 데이터 타입(Int, Double, String), 컬렉션 타입(Array, Dictionary, Set) 및 운영체제 서비스에 접근하여 데이터 저장 및 지속성, 텍스트 처리, 날짜 및 시간 계산, 정렬 및 필터링, 네트워킹을 포함한 앱의 기본 기능을 관리하는 프레엠워크이다. 코코아 터치 프레임워크에 포함된 프레임워크이다. 앱의 기본 층을 구성하는 필수적인 데이터 타입, c.. 2021. 5. 22.
[iOS] App Bundle iOS 앱 번들에 관한 내용을 기록합니다. Bundle 실행가능한 코드와 관련 리소스(앱 아이콘, 이미지 등)를 한 공간에 묶는 디렉토리 모음 Application Bundles 개발자들에 의해 생성되는 가장 흔한 번들 앱이 정상적으로 작동하기 위해 필요한 모든 것들 플랫폼에 따라 상세한 구조는 다르지만 번들을 사용하는 방법은 동일하다. Application Bundle에 포함되어 있는 파일들 Info.plist file: 앱에 대한 구성(configuration) 정보(bundle ID, version number 등)를 포함한 파일 Excutable: 모든 앱은 실행 가능 파일이 있어야 하고 앱의 메인 진입점과 정적으로 앱 타겟에 연결된 코드가 포함한다. Resources files: 앱의 실행가능한.. 2021. 5. 14.
[iOS/Xcode] Provisioning profiles 삭제하기 프로비저닝 프로파일이 꼬일 때가 있어 삭제하고 다시 다운로드할 필요가 있을 때 참고합니다. 터미널에서 아래의 경로로 이동해서 삭제해주시면 됩니다. cd ~/Library/MobileDevice/Provisioning Profiles 참고: stackoverflow.com/questions/45625347/xcode-provisioning-profiles-location 2021. 3. 15.
[iOS] FSCalendar Custom Header Swift FSCalendar에서 스와이프를 통해 달을 변경할 수 있지만, 따로 헤더에 버튼 부분이 없기 때문에 방법을 공유하고자 기록하겠습니다. 우선 아래와 같이 스토리보드에서 calendarView 위에 버튼, 라벨, 버튼으로 되어 있는 스택뷰를 추가한다. 그리고 해당 뷰컨트롤러에 아래 코드와 같이 연결해준다. @IBOutlet weak var calendarView: FSCalendar! @IBOutlet weak var headerLabel: UILabel! @IBAction func prevBtnTapped(_ sender: UIButton) { scrollCurrentPage(isPrev: true) } @IBAction func nextBtnTapped(_ sender: UIButton) { scrol.. 2021. 3. 10.
[iOS] Firebase와 Google 로그인 연동하기 Firebase를 이용해서 구글 로그인을 구현하는 방법을 기록해보겠습니다. 아래의 그림을 보면서 먼저 동작 원리를 살펴보자면, 구글에 로그인을 하면 구글 토큰을 받게 되고 구글 사용자임을 증명하는 구글 토큰을 이용해서 파이어베이스 로그인을 시도합니다. 그리고 성공하게 되면 파이어베이스 토큰을 얻습니다. Firebase에서 프로젝트를 만들고 Xcode 프로젝트를 등록했다는 전제하에 시작하겠습니다. Podfile에 아래 두 줄을 추가하고 pod install로 설치해줍니다. pod 'Firebase/Auth' pod 'GoogleSignIn' 그리고 프로젝트에 복사해놨던 GoogleService-Info.plist의 RESERVED_CLIENT_ID를 복사해서 아래의 그림에서 URL Schemes에 붙여줍니.. 2021. 2. 2.
[iOS] Apple 로그인 구현 iOS 앱을 앱스토어에 베포 시 소셜 로그인을 사용하기 위해서는 아래 그림과 같이 Apple 로그인을 구현해야 하는 가이드라인이 생겨서 Apple 로그인 구현에 대해 기록해보겠습니다. 먼저, 프로젝트를 생성하고 "Signing & Capabilities" 창에서 Command + Shift + L을 눌러서 Sign in with Apple을 추가해줍니다. 그리고 프로젝트의 bundle ID와 Team이 설정되어 있어야 합니다. 그리고 애플 문서에서 제공하는 예제에 따라 스토리보드에서 아래 그림과 같이 StackView를 하나 만들어줍니다. 실행 시 아래 오른쪽 그림과 같이 버튼이 생깁니다. 그 후, ViewController로 넘어가서 아래 코드를 작성해줍니다. "import AuthenticationS.. 2021. 2. 1.