Overview
iOS 프로그래머로서 개발이 완료되었거나 진행 중인 프로젝트를 만났을 때 헤매었던 주요 포인트를 정리해 본다.
도입 의견
프로젝트의 개발 환경을 구성하면서 문제를 만나지 않는 것이 이상적일 것이다. 프로젝트가 엄격히 관리되고 있어서 문서화까지 잘되어있다면 더욱이 금상첨화이다. 하지만 개발 환경 설정 과정은 단순하지 않다. 항상 문제는 예상치 못한 지점에서 불쑥불쑥 튀어나온다. 예를 들면 다음과 같은 상황이다.
💡 받아온 소스 코드를 빌드했는데 오류가 발생해요! 어떻게 해결해야 하죠?
위 문제에 함축되어 있는 문제를 간략히 분해해 본다. 프로젝트 관리에 사용되는 특정 기술에 관한 해결책보다는 범적으로 적용해 볼 수 있는 문제와 해결책을 정의해보고자 한다.
FAQ
인터넷이 연결되지 않은 환경에서 Xcode를 구성해야 하는 경우
개발 환경이 보안상의 이유로 보통의 인터넷망과 분리되어 운영되는 경우가 있다. 가장 먼저 드는 고민은 Xcode와 iOS 시뮬레이터를 어떻게 설치할지이다. 다행히도 애플은 설치 파일을 활용해 수동으로 설치할 수 있는 방법을 제공한다.
위 파일을 다운로드한 후 Xcode를 처음 실행하면 Xcode 사용에 필요한 CLI 컴포넌트들이 자동으로 설치된다. 컴포넌트들 중에는 simctl
이라는 시뮬레이터 수동 설치 프로그램이 존재한다. 터미널에서 다음의 명령어를 입력하여 이미 다운로드 받은 Simulator Runtime을 수동 설치할 수 있다.
xcode-select -s /Applications/Xcode-beta.app
xcodebuild -runFirstLaunch
xcrun simctl runtime add "~/Downloads/(시뮬레이터 런타임 파일이름).dmg"
다음의 개발자 문서를 함께 참조하면 손쉽게 해결 가능하다.
프로젝트 환경 설정이 개발 중인 컴퓨터 CPU 아키텍처에 의존하는 경우
2020년 애플 컴퓨터 생태계에 혁명적인 사건이 발생한다. 애플 실리콘 칩셋이 등장하면서 애플 컴퓨터의 CPU 아키텍처가 Intel에서 ARM으로 전환되었기 때문이다. CPU 아키텍처가 변화하면서 개발 생태계도 영향을 받았다.
필자가 경험한 사례는 iOS 프로젝트를 iOS 시뮬레이터 환경에서 실행할 목적으로 소스 코드를 빌드할 때였다. 소스 코드가 빌드되는 과정에서 CPU 아키텍처에 알맞은 기계어로 번역된 Object 파일 .o
이 생성된다. 여러 개의 목적 파일을 엮어서 Static 라이브러리 형태로 제공되는 .a 파일이 도출된다. 문제는 .a를 구성하는 .o파일이 모두 Intel x86_64 아키텍처용만 생성되어서 M1 맥북 환경의 iOS 시뮬레이터에서 사용할 수 없게 되는 문제가 발생했다.
이유는 Xcode 프로젝트 파일의 설정값과 연관되어 있다. 프로젝트의 연관 서비스나 빌드 관련 설정값 등을 관리하는 .xcodeproj
파일이 있다. 프로젝트의 빌드 설정 부분을 보면 어떤 아키텍처로 빌드할 것인지 설정해 줄 수 있다. 인터넷을 찾아보니 M1맥이 공개되었던 Xcode 12 쯤에 IDE에 인텔과 애플실리콘 동시 지원 기능이 추가되어 인텔맥에서 빌드 오류를 겪었던 기록을 찾아볼 수 있었으며 솔루션으로 iOS 시뮬레이터 빌듯이 ARM 아키텍처를 제외하도록 설정값을 추가하는 솔루션을 찾게 되었다. 시간이 흘러 같은 맥락에서 ARM 용 목적 파일이 빌드되지 않기에 M1맥에서 소스 코드를 빌드할 수 없는 문제를 마주치게 되었다. 이 문제의 해결 방법은 빌드 제외 명단에서 ARM 아키텍처를 제거해 주는 것이다.
느낀 점이 있다. 프로젝트 빌드 설정은 매우 민감한 설정이라는 점이다. 혹여나 운영체제 파일 시스템 내에서 프로젝트가 위치한 경로에 의존하는 빌드 설정을 만든다면 정말로 다른 개발 환경에 적용하기 힘들어질 수 있다고 생각한다. 따라서 가능한 기본값을 사용하는 것이 이상적이라고 생각한다. 만약 프로젝트 설정값이나 빌드 옵션의 수정 시에는 주의를 기울여야 하며 문서화가 필요하다는 생각이 들었다.
다음의 개발자 문서를 함께 참조하면 좋다.
프로젝트의 빌드 목적에 알맞은 코드 사이닝 인증서가 설치되지 않은 경우
Xcode에서 혼자 토이 프로젝트를 개발하면 코드 사이닝이 자동으로 수행되는 기능이 활성화되어있어서 코드 사이닝이 빌드 오류에 영향을 주는 경우가 많지는 않았다. 실제 운영 중인 프로젝트에서는 애플에 요청해서 받은 코드 사 이닝용 인증서를 활용하여 프로젝트 목적에 알맞은 프로비저닝 파일을 생성한 후 프로젝트의 코드 서명용으로 사용한다. 예를 들면 디버그용 프로파일과 배포용 프로파일을 구분하여 사용하는 것이다.
빌드 오류를 마주쳤는데 프로젝트에 이미 사용되고 있는 프로비저닝 파일이 있다면 프로젝트 관리자에게 문의해야 한다. 개발자 센터에서 팀 설정이 되어있는 경우 주어진 권한에 따라 다를 수는 있으나 Apple Developers Certificate 사이트에서 직접 다운로드할 수도 있다. 추가적으로 프로파일 생성에 사용된 인증서의 개인키를 새로운 개발 환경 mac의 키체인에 등록해주어야 한다.
의존성 관리 도구를 사용한 최종적인 의존성 설치가 진행되지 않은 경우
프로젝트에 코코아팟 등의 의존성 관리 도구가 적용되어 있는 경우가 있다. 프로젝트의 소스 코드를 Git을 통해 형상 관리하고 있다면 gitignore 등을 활용해 의존성 코드 부분은 제외한 순수 프로젝트 코드만 리모트 서버에 올려두게 된다. 이 경우 소스 코드를 내려받은 후 사용되는 의존성 관리 도구 명령어를 활용해 의존성 설치 작업을 진행해야 한다. 예를 들면 코코아팟의 pod install
을 다시 진행해 주는 것을 생각해 볼 수 있다.
마무리
이 글을 통해 프로젝트 개발 환경 구성에 어려움을 겪는 개발자가 의심해 볼 수 있는 지점을 찾을 수 있었다면 역할을 다했다고 본다. 프로젝트에 의존성 관리 도구 등의 관리 기술이 적용된 경우 위 문제와 연관된 기술적 솔루션을 찾아나가면 될 것이다. 프로젝트 환경 설정에 어려움을 겪는 여러분의 건승을 기원한다.
' Apple > iOS Dev Challenges' 카테고리의 다른 글
[Challenge] 3주만에 앱스토어에 앱 출시하기 - 2부 작업 관리 (0) | 2024.02.10 |
---|---|
[Challenge] 3주만에 앱스토어에 앱 출시하기 - 1부 기획과 디자인 (1) | 2024.02.09 |
[Challenge] 라이브러리 관리 기술 살펴보기 (0) | 2023.12.19 |
[Challenge] 데이터 암복호화 모델 개발 (1) | 2023.12.18 |
[Challenge] Objective-C 빠르게 둘러보기 (2) | 2023.12.15 |