관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - Swift] 1. Build Setting 개념 - Architecture (archs, EXCLUDED_ARCHS, excluded architecture ONLY_ACTIVE_ARCH, Valid Architectures, arm64, x86_64) 본문

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

목차) Build Setting 목차 링크

Architecture란?

  • 디바이스 및 맥북의 CPU를 의미
    • 실물 디바이스 - 대부분 arm64 (아이폰 5s이상은 모두 arm64)
    • 시뮬레이터 - 맥북의 아키텍쳐에 따라감 (인텔 맥북은 x86_64, Apple Silicon 맥북은 arm64)

그림 출처: https://jusung.github.io/Xcode12-Build-Error/

  • 시뮬레이터에 관한 아키텍쳐는 디폴트로 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/

https://help.apple.com/xcode/mac/11.4/#/itcaec37c2a6

https://developer.apple.com/library/archive/documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html

Comments