스위프트 UI를 하면서 느끼는 장단점이 많이 있지만 최대의 장점을 꼽으라면 아마도 프리뷰로 개발 화면을 실시간으로 확인할 수 있다는 점일 것 같습니다. 프로젝트가 점점 커질 수록 빌드해서 확인하는 시간이 늘어나기 마련인데 스위프트 UI로 아직까지 커다란 프로젝트를 진행해본적이 없어서 모르겠으나 화면 개발에 있어서 Preview는 정말 유용한 것은 사실입니다. 그런데 다른 컴퓨터 환경에서 코드를 받아 진행하려고 하면 프리뷰 크래시가 많이 일어나는 것을 확인할 수 있습니다. 코드에 문제로 크래쉬가 일어날 수도 있지만 때로는 원인을 알 수 없이 문제가 생기는 경우도 있습니다. 보통 뷰 모델을 사용해서 작업하면서 데이터를 프리뷰에 제대로 전달하지 않아서 발생하는 문제는 작업자의 문제이니 그 밖에 해결 방법을 알..
iOS 다크모드 아이폰 개발시 다크모드(Dark Mode)를 사용하면 디자인에 많은 제약이 생깁니다. 그래서 개인적으로는 처음에는 Light 모드로 만들고 앱을 다 만든 뒤 다크모드를 적용하는 것이 더 편리한 것 같습니다. ▼ Info.plist 파일을 열어서 Appearance 값을 추가하고 값을 Light로 지정하면 라이트모드로만 앱이 실행됩니다. 키값은 UIUserInterfaceStyle 입니다. UIUserInterfaceStyle Light FirebaseAppDelegateProxyEnabled UILaunchScreen UIImageName logo ITSAppUsesNonExemptEncryption UIBackgroundModes remote-notification
iOS 개발시 AppDelegate의 applicationWillTerminate 호출이 되지 않거나 macOS의 NSApplicationWillTerminateNotification이 호출되지 않을 때 다음과 같이 Info.plist에서 해당 값을 확인해 볼 필요가 있습니다. 해당 값을 NO 로 설정하고 앱을 재실행하면 terminator가 잘 호출 되는 것을 확인 할 수 있습니다. Application can be killed immediately when user is shutting down or logging out NSSupportsSuddenTermination ▼ 아래 코드는 위젯 상태를 업데이트 하기 위해서 applicationWillTerminate 호출시 로그아웃 명령을 하는 코드로 ..
Cocoapods 최근에 나온 맥으로 Cocoapods를 설치하면 문제가 되는데 이유를 알아보면 m1을 통해 gem으로 설치하면 특정한 명령을 추가하거나 로제타로 터미널을 실행해야 정상동작합니다. 때문에 최근에는 새로운 m1 맥북에서는 가급적이면 Homebrew의 brew 명령어를 사용해서 Cocoapods를 설치합니다. ▼ 우선 gem을 이용한 설치 방법입니다. 다음과 같이 터미널을 열고 명령어를 입력하면 설치가 됩니다. ▼ 이번에는 Homebrew 패키지 매니저의 brew 명령을 통해서 cocoapods를 설치해보겠습니다. sudo 권한이 필요 없이 바로 설치가 가능합니다. ▼ 만약 Homebrew 패키지 매니저가 설치되지 않았다면 다음 명령을 통해서 설치가 가능합니다. 위의 명령어가 실행되지 않는다..
Xcode DeviceSupport Xcode를 사용하다보면 새로운 iOS 버전이 출시될 때마다 Xcode를 다운로드 업데이트해야 새로운 iOS 버전을 빌드 할 수가 있습니다. 하지만 지원 버전이 낮은 서비스를 위해서는 Xcode를 매번 업데이트 할 수 없습니다. 다른 IDE와 다르게 매우 불편할 수 있는데 이를 해결하기 위해서는 해당 단말기의 DeviceSupport DiskImage를 다운로드해서 기존 Xcode 라이브러리 폴더에 추가해서 동작시킬 수 있습니다. Xcode 빌드시 다음 문구를 보셨다면 Xcode를 지원하지않는 장치를 사용했기 때문인데 베타 버전이거나 최신 Xcode에서도 지원하지 않는 버전이 아니라면 해당 절차를 통해서 실행 시킬 수 있습니다. Could not locate devic..
LaunchOptions 디버깅 아이폰은 안드로이드와 달리 Xcode에서 디버깅을 할 때 일반적으로 앱이 종료된 상태에서 디버깅을 할 수가 없습니다. 즉 최초 실행 시 앱이 빌드된 상태에서 Console 로그도 볼 수 없으니 푸시 노티피케이션 같은 서비스를 최초 실행 할 때 테스트가 힘들 수 있습니다. 그래서 Xcode에서 간단한 스키마 설정으로 디버깅 타임을 미룰 수 있고 푸시나 기타 LaunchOptions 값을 제어해할 경우에 쉽게 디버깅을 할 수 있습니다. ▼ 우선 프로젝트에서 Edit Scheme... 메뉴를 선택합니다. ▼ 다음으로 Run 스키마에 Launch 옵션을 Wait for the executable to be lauched 옵션으로 변경합니다. 이 옵션을 사용하게 되면 앱을 실행하는..
Xcode 개발자 모드 아이폰 개발을 위해서 새로운 아이폰을 맥에 연결하고 Xcode에서 디바이스를 설정하면 사용할 수 없는 단말로 설정이 됩니다. 때문에 아이폰 개발을 위해서는 단말을 개발자 모드로 변경해야 합니다. ▼ 아이폰 설정앱으로 들어가서 개인정보 보호 및 보안 매뉴로 진입합니다. 그리고 맨 아래로 스크롤 하면 개발자 모드라는 메뉴를 볼 수 있는데 개발자 모드로 들어가서 모드의 스위치를 활성화 해주면 핸드폰이 개발자 모드로 변하게 됩니다. ▼ 만약 개발자 모드로 변했다면 아이폰 설정앱 중간 쯤에 개발자 라는 메뉴가 생긴 것을 볼 수 있습니다. ▼ 개발자 설정 메뉴에서 다양한 개발자 설정을 할 수 있습니다. 이제 개발자 모드로 핸드폰을 설정했다면 Xcode에서 빌드를 해서 앱을 설치할 수 있게 됩..
idleTimerDisabled 아이폰 프로젝트를 진행하면서 증권 앱이나 게임 화면의 경우 idleTimerDisabled 옵션을 true로 변환해서 화면이 계속 켜져 있도록 할 수 있습니다. 하지만 저전력 모드나 절전 모드를 활용하는 사용자에게 해당 옵션을 줄 경우 앱이 계속 켜져 있기 때문에 대기 모드나 화면 절전모드로 넘어가지 않습니다. ▼ 다음은 아이폰의 디스플레이 및 밝기 설정의 자동 잠금 옵션입니다. 만약 idleTimerDisabled를 true로 한다면 자동잠금을 안 함으로 한 것과 동일한 효과를 줄 수 있습니다. ▼ 다음과 같이 idleTimerDisabled 옵션을 단순히 true 로 하고 AppDelegate에서 실행하면 해당 앱은 홈 버튼을 눌러서 종료하지 않는 이상 꺼지지 않습니다..
xcframework 오류 앱스토어에 앱을 올릴때 라이브러리에 문제가 있다면 앱스토어에서 업로드를 거부합니다. 기존에 다양한 라이브러리들이 존재하지만 새롭게 추가된 xcframework의 경우 처음 추가해보기 때문에 문제가 발생해도 어떻게 처리해야 할지 난감하더군요. 다음은 에러에 대한 내용입니다. Asset validation failed Invalid bundle structure. The "AIA.app/Frameworks/sdk.framework/Frameworks/native_engine.framework/native_engine" binary file is not permitted. Your app cannot contain standalone executables or libraries, o..
Objective-C로 아이폰 앱을 만들 때는 #pragma mark - 주석 내용을 포함해서 주석을 나타내던 것이 Swift로 넘어오면서 MARK로 변경되었습니다. 기존의 #pragma라는 부분을 더 이상 쓰지 않아도 됩니다. 또한 TODO, FIXME와 같은 구문도 추가할 수 있습니다. 다른 언어 C++, C에서는 보통 전처리 구문으로 인식하는 #pragma는 define이나 include와 같이 사용됩니다. 하지만 Xcode에서는 이를 전처리 구문으로 쓰기보다는 메서드의 구역을 나눌 때 보통 사용합니다. 스위프트 같은 경우에는 extension이라는 문법이 추가돼서 메서드의 구분을 줄 때 extension을 사용하기도 합니다. 영역 구분관련 주석의 종류 // MARK : 설명 // TODO : 할 ..
Xcode로 화면을 작업하는 일은 많은 노하우가 필요합니다. 다른 UI 툴에 비해서 기능도 많고 사용 방법도 굉장히 자유도가 높습니다. 제가 지금까지 몰랐던 기능이 있어서 소개해드립니다. 오토레이아웃을 사용하거나 SwiftUI를 사용하게 되면 라이브러리 기능을 많이 사용하게 되는데요. 단축키는 다음과 같습니다. Command + Shift + L ▼ 아니면 다음과 같이 디자인 화면 우측 상단에 + 버튼을 눌러도 라이브러리 창이 뜹니다. 그런데 문제는 이 창이 한 번 사용하고 마우스 포커스를 잃으면 창이 사라지는 단점이 있죠. 물론 바로 사라져서 다음 작업을 이어서 하기 때문에 편리한 점도 있습니다. 그런데 만약 다음과 같이 Option 키를 추가해서 단축키를 사용한다면 창이 분리되는 것을 확인하실 수 있..