brew로 swiftlist 설치▼ CocoaPods을 사용해서 설치 할게 아니라면 brew를 실행해서 swiftlint를 설치한다.brew install swiftlint .swiftlint.yml 파일 생성▼ Xcode에서 Empty 파일을 생성하고 파일명을 .swiftlint.yml 으로 지정한다. 파일 숨김 처리를 함으로 Xcode에서 경고창이 ㄸ는데 Use "." 로 선택하고 창을 닫는다.다음은 프로젝트 룰에서 제거할 목록이다.disabled_rules: - colon - comma - control_statement - identifier_name - shorthand_operator - empty_count - line_length - type_name - force_cast..
스위프트 UI를 하면서 느끼는 장단점이 많이 있지만 최대의 장점을 꼽으라면 아마도 프리뷰로 개발 화면을 실시간으로 확인할 수 있다는 점일 것 같습니다. 프로젝트가 점점 커질 수록 빌드해서 확인하는 시간이 늘어나기 마련인데 스위프트 UI로 아직까지 커다란 프로젝트를 진행해본적이 없어서 모르겠으나 화면 개발에 있어서 Preview는 정말 유용한 것은 사실입니다. 그런데 다른 컴퓨터 환경에서 코드를 받아 진행하려고 하면 프리뷰 크래시가 많이 일어나는 것을 확인할 수 있습니다. 코드에 문제로 크래쉬가 일어날 수도 있지만 때로는 원인을 알 수 없이 문제가 생기는 경우도 있습니다. 보통 뷰 모델을 사용해서 작업하면서 데이터를 프리뷰에 제대로 전달하지 않아서 발생하는 문제는 작업자의 문제이니 그 밖에 해결 방법을 알..
iOS 다크모드 아이폰 개발시 다크모드(Dark Mode)를 사용하면 디자인에 많은 제약이 생깁니다. 그래서 개인적으로는 처음에는 Light 모드로 만들고 앱을 다 만든 뒤 다크모드를 적용하는 것이 더 편리한 것 같습니다. ▼ Info.plist 파일을 열어서 Appearance 값을 추가하고 값을 Light로 지정하면 라이트모드로만 앱이 실행됩니다. 키값은 UIUserInterfaceStyle 입니다. UIUserInterfaceStyle Light FirebaseAppDelegateProxyEnabled UILaunchScreen UIImageName logo ITSAppUsesNonExemptEncryption UIBackgroundModes remote-notification
다국어 앱 스키마 언어 설정 Xcode로 다국어 앱을 제작할 때 여러 언어로 테스트해보기가 쉽지 않은데 Xcode에서 간단한 설정으로 다국어 테스트를 해볼 수 있습니다. 다만 실제 단말에서 테스트하기 위해서는 직접 단말에 시스템 설정에서 Region이나 App Language를 바꿔야 합니다. 하지만 단순히 언어의 Localization을 확인하기 위해서는 시뮬레이터를 여러 개 만들어서 사용해 보기 편리합니다. ▼ 프로젝트 파일을 열고 타겟이 아닌 프로젝트 메뉴에서 해당 프로젝트를 선택하고 하단에 Localizations 영역을 확인합니다. ▼ Xcode 상단바에서 프로젝트 아이콘을 눌러 Edit Scheme 메뉴를 선택합니다. ▼ Run 스키마의 Options 메뉴에서 App Languages를 Eng..
Xcode 14.3 (14E222b) 기존 엑스코드 버전에서는 문제가 되지 않지만 새롭게 변경된 Xcode에서 빌드를 하면 코코아 팟 에러가 발생합니다. 다음과 같이 libarclite_iphoneos.a 파일을 찾을 수 없다고 하며 앱을 빌드할 수 없는데 이럴 때는 코코아 팟에 빌드 타깃을 변경해주어야 합니다. File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a 플러터(Flutter) 개발에서도 이와 같은 버그가 많이 생기는 것 같고 이 때 역시 빌드 타깃을 변경해주면 해결되는 것 같습니다. 우선 다음과 같이 PodFile 에..
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에서 빌드를 해서 앱을 설치할 수 있게 됩..
테스트 플라이트 (TestFlight) 수출 규정 관리 문서 앱을 개발하다 테스트 플라이트에 앱을 배포할 일이 많이 있습니다. 사실 앱스토어에 앱을 업데이트 하기 전에 한번은 거처야 하는 과정입니다. 그런데 앱을 배포할 때마다 "수출 규정 관리 문서 누락"이란 메시지를 만나게 됩니다. 물론 관리에서 설정을 해주면 제출 준비 완료 상태로 변하면서 앱을 테스트 할 수 있는 상태가 됩니다. ▼ 다음과 같은 화면이 나오면 관리 버튼을 눌러서 암호화 되지 않음으로 선택해야 제출준비상태가 되고 그제서야 테스터들이 테스트 할 수 있습니다. ▼ 이제 프로젝트로 가서 info.plist 파일을 찾아 다음과 같이 App Uses Non-Exempt Excription 을 No(false) 값으로 변경해줍니다. ▼ 만약 코..
CocodPods Podfile.lock CocoaPods 를 사용하면 Podfile.lock이라는 파일을 확인할 수 있습니다. 이는 일반적으로 .gitignore에 포함되지 않습니다. 그 이유는 여러 사용자(개발자)가 동일한 소스 서드파티 라이브러리를 공유하고 사용하기 위해서 입니다. repo를 업데이트 하거나 deintegrate 명령을 통해 파일을 변경할 수 있지만 해당 lock 파일이 고정 됨으로써 모두 동일한 소스를 사용한다고 보장할 수 있습니다. Package.resolved 이와 비슷하게 Xcode의 Swift Package Manager(이하 SPM)를 사용하면 다음과 같이 git에 commit 할 때 포함 여부를 묻습니다. 대체적으로 userdata 같은 경우는 Xcode에 포함하지 않는..