1. Frozen Enum과 Non-frozen Enumenum Menu { case chiken case pizza}위와 같은 열거형이 있다고 가정해 봅시다.열거형에 case를 계속해서 추가할 수 있는 열거형을 `Non-frozen Enumeration`(얼지 않은 열거형)라고 합니다.일반적으로 가장 많이 사용하는 유형이죠.@frozen enum Menu { case chiken case pizza}그렇다면 반대로 enum 선언 시 `@frozen` 키워드를 넣어 열거형을 정의하면 `Frozen Enumeration`(얼은 열거형)이 되어 더 이상 case가 추가되지 않을 것을 암시함과 더불어 컴파일 성능이 향상된다고 합니다. case가 더 이상 추가 되지 않을 것이 확실하다면 `..
오늘은 야곰님의 Swift 프로그래밍 책을 보며 처음 보는 열거형이 있어서 정리하는 글을 작성하려고 한다.1. 순환 열거형 이란?순환 열거형은 열거형 케이스의 연관 값이 열거형 자신의 값이고자 할 때 사용합니다. 재귀적으로 해당 열거형 케이스를 반복하게 되므로 `indirect` 키워드를 사용하여 명시하도록 한다.Swift에서 열거형은 n개의 case를 생성할 수 있고 그 case는 연관 값(parameter)를 가질 수 있다는 건 알고 있을 것이다.위 말을 풀어보면 case의 parmeter로 `자기 자신`이 사용된다는 의미이다.텍스트만 보면 이해가 잘 안될 수도 있는데(내가 그랬음) 예제를 하나하나 뜯어보면 쉽게 알 수 있다.2. 예제다음은 간단한 산술 표현식을 저장하는 열거형이다.이 열거형은 숫자,..
안녕하세요, 여러분! 차니 기술 블로그의 Channy입니다. 오늘은 Apple의 개발자 컨퍼런스인 WWDC 2023에서 발표된 주요 내용을 함께 살펴보려고 합니다. 현대 기술의 최전선에 서 있는 Apple은 어떤 혁신을 선보였을까요? 자세한 내용을 확인해보세요! iOS 17 및 iPadOS 17Apple은 iOS 17과 iPadOS 17에서 새로운 기능과 개선 사항을 선보였습니다. 이번 업데이트에서는 다중 작업 환경이 개선되어 사용자들이 멀티태스킹을 더욱 효율적으로 수행할 수 있게 되었습니다. 또한 향상된 Siri 기능과 더 빠른 성능이 기대됩니다. 사용자 경험을 향상시키는 다양한 변화가 예상되며, 더욱 편리한 모바일 환경을 제공할 것입니다. macOS 13 MontereymacOS 13 M..
iOS에서 위치 테스트 시 번거로운 점 안드로이드와 달리 Fake GPS 사용이 불가하기 때문에 실제로 발품을 팔아야함 실시간 로그를 볼 수 없기 때문에 문제 발생 시 원인 파악이 어렵다 사소한 수정이 발생해도 빌드 후 다시 발품을 팔아야함 하여 실제 단말기에서는 방법은 없었지만 시뮬레이터에서 가상 위치로 테스트할 수 있는 방법을 공유드립니다. 하기 예제는 애플 공식 문서를 참고하여 지오펜싱(Geofencing : 지리와 울타리의 합성어)으로 준비하였습니다. 1. 위치 서비스 코드 작성 1-1. Project - Signing & Capabilities 위치 사용을 위해 Background Modes 추가 후 Location updates 항목을 체크해주세요. 1-2. Info.plist 위치 권한 팝업..
1. Retain Cycle Retain Cycle이란 메모리가 해제되지 않고 유지되어 메모리 누수가 발생하는 현상을 말합니다. 클래스간 참조는 default로 강한(strong) 참조이기 때문에 각각의 클래스에서 참조가 발생한다면 강한 참조로 인해 메모리에서 해제되어야 할 상황에도 해제되지 않는 현상이 발생합니다. 이는 곧 메모리 누수(Memory Leak)로 이어집니다 2. Delegate 2-1. delegate를 weak var로 선언해야하는 이유 Retain Cycle이 발생하기 때문입니다. 이러한 상황을 방지하고자 하는 것이 delegate 참조 수준을 weak로 낮추는 방법입니다. 2-2. weak var 적용 적용 전 코드 import UIKit protocol CustomDelegate ..
aab 포맷으로 빌드한 앱을 스토어 배포 전 테스트 할 일이 있어서 apk 포맷의 설치 파일이 필요했다 그래서 aab에서 apk를 추출할 순 없을까라는 의문에서 찾은 방법을 공유합니다 본 포스팅은 MacOS 기준으로 작성되었습니다. 1. bundle tool 설치 brew install bundletool 번들에서 apk로 변환을 위해 bundletool을 다운받습니다 2. 변환 bundletool build-apks --bundle=app-release.aab --output=release.apks bundle : 변환할 bundle 파일을 명시합니다 output : apks 포맷으로 지정해줍니다 이렇게하면 aab와 같은 경로에 apks 파일이 생겼을텐데 파일 포맷을 apks ➝ zip으로 변환한 뒤 ..
오늘은 UIViewController의 Life-Cycle에 대해 알아보겠습니다 화면의 생애 정도로 봐도 될 것 같네요. 1. init 1-1. init(coder:) 스토리보드를 통해 ViewController 초기화 작업을 하는 메소드입니다. 1-2. init(nibName:bundle:) nib를 통해 init(corder:)를 대신하여 초기화 작업을 하는 메소드입니다. 2. loadView 뷰를 실제로 생성해서 메모리에 로드합니다. 스토리보드나 nib(xib)을 사용하지 않는다면 이 메소드를 오버라이드해서 뷰를 만들고 뷰계층을 구성해야 합니다. 3. viewDidLoad 뷰가 메모리에 로드된 이후 시점에 한 번만 호출됩니다. 뷰가 로드는 되었으나 화면에 뷰가 나타나진 않았으므로 빈 화면에서 발생합..
오늘은 iOS 앱 개발을 한다면 꼭 알아야 할 Delegate Pattern에 대해 정리해보겠습니다. 1. Delegate란 무엇인가? Delegate의 사전적 의미를 보면 대리자, 위임자 정도로 해석이 가능합니다 '뭘 위임한다는 거지...?' 라는 의문이 들 텐데, Swift에서는 Delegate 패턴을 통해 특정 기능을 위임하는 것이 가능합니다 한 객체에서 모든 프로세스를 처리하기엔 가독성, 코드 재사용성 측면에서 많은 손해를 보기 때문입니다 2. 사용법 이제는 델리게이트가 뭔지도 알겠고 왜 쓰는지도 알겠는데 어떻게 쓰는 걸까? delegate를 제대로 사용하기 위해서는 아래 내용들을 이해하고 있어야 합니다 프로토콜 (Protocol) : 대리자가 수신자에게 전달할 내용의 약속(규칙)입니다 수신자 (..
1. pod install pod 'GoogleSignIn' Podfile에 GoogleSignIn 디펜던시를 추가 후 pod install을 진행합니다. 2. ClientID 생성 구글 클라우드 플랫폼에서 프로젝트 생성 후 API 및 서비스 - 사용자 인증 정보 탭으로 이동합니다 사용자 인증 정보 만들기 > OAuth 클라이언트 ID로 이동합니다 OAtuh 동의 화면 설정이 안 되어있다면 순차적으로 진행하시면 됩니다 iOS 항목을 선택하여 생성합니다 클라이언트 ID가 생성되었다면 사전 설정은 완료입니다 3. 프로젝트 설정 프로젝트 설정 > URL Types에 발급받은 ClientID를 역순으로 적어줍니다 func application(_ application: UIApplication, open url..
오늘은 아이폰에서 갤러리 사진을 가져오는 방법에 대해 알아보도록 하겠습니다 UIImagePickerController는 시스템에서 제공하는 갤러리 이미지 픽커입니다 테스트를 위한 화면 생성 과정은 생략합니다! 1. UIImagePickerContoller 초기화 let picker = UIImagePickerController() self.picker.delegate = self self.picker.sourceType = .photoLibrary self.picker.modalPresentationStyle = .fullScreen 픽커를 사용할 ViewController에서 UIImagePickerController 인스턴스 생성 및 초기화를 진행합니다 delegate : 픽커에서 선택한 이미지 정보..