iOS 응용 (swift)
[iOS - Swift] 1. Build Setting 개념 - Architecture (archs, EXCLUDED_ARCHS, excluded architecture ONLY_ACTIVE_ARCH, Valid Architectures, arm64, x86_64)
jake-kim
2022. 12. 16. 01:12
Architecture란?
- 디바이스 및 맥북의 CPU를 의미
- 실물 디바이스 - 대부분 arm64 (아이폰 5s이상은 모두 arm64)
- 시뮬레이터 - 맥북의 아키텍쳐에 따라감 (인텔 맥북은 x86_64, Apple Silicon 맥북은 arm64)

- 시뮬레이터에 관한 아키텍쳐는 디폴트로 arm64, x86_64를 제공
- terminal에서 시뮬레이터 관한 정보 확인 방법
open /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/SDKSettings.json

Architecture 세팅 방법
- Valid Architectures - 예전에는 Xcode의 Build Setting항목에 존재했던 것이며, 활성화하고싶은 아키텍쳐를 이곳에 기입했지만 현재(Xcode14) 부터는 deprecated
- ONLY_ACTIVE_ARCH (Build Active Architecture Only) 옵션
- 만약 내 iPhone14를 Xcode에 연결하고 빌드할 경우, arm64, armv7 바이너리 파일을 모두 만들 필요 없이 arm64만 만들면 되는데, 이 옵션을 활성화하면 해당 아키텍쳐 바이너리 파일만 생성
- debug모드에서 arm64만 쓴다고 생각할 때, 이 옵션을 활성화하여 사용 (이미 디버그 모드는 Yes가 디폴트)

EXCLUDED_ARCHS(excluded architecture) 옵션
- 예전에는 Valid Architectures라는 옵션이 있어서 활성화하고 싶은 아키텍쳐를 나열했다면 현재는 제외하고 싶은 아키텍쳐만 적용
- 일반적으로 디폴트로 두는게 맞지만, 최적화를 원할때 (시뮬레이터 빌드 시 팀원들이 모두 apple silicon 맥북이라면 x86_64를 제외하는 방법 사용)
ex) 팀원들이 모두 Apple Silicon 맥북을 사용할 때, simulator 빌드 최적화를 위해 x86_64 제외하는 방법
= 인텔 맥북에서 시뮬레이터 빌드 x
- Xcode > Target > EXCLUDED_ARCHS 검색

- Debug 오른쪽 + 버튼 클릭
- Any SDK 생성

- x86_64 기입하면 완료

Cocoapods에서 EXCLUDED_ARCHS 사용 방법
- 인텔 맥북에서 시뮬레이터 중지
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings["ONLY_ACTIVE_ARCH"] = "YES"
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "x86_64"
end
end
end
- Apple Silicon 맥북에서 시뮬레이터 중지
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings["ONLY_ACTIVE_ARCH"] = "YES"
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
end
end
end
* 전체 코드: https://github.com/JK0369/ExApp
* 참고
https://jusung.github.io/Xcode12-Build-Error/