앱 빌드시 생성되는 바이너리는 CPU의 영향을 받는데 기존 맥북은 i5, i7과 같이 인텔 CPU를 사용하고 이 CPU는 x86_64 아키텍쳐를 사용합니다. 그리고 Xcode 12버전 이전에는 시뮬레이터로 앱을 빌드하면 자동으로 x86_64를 사용하도록 설정되어 있어 아무런 문제가 없었죠.
그런데 새롭게 출시되는 맥북은 CPU가 애플 자사에서 생산하는 ARM을 기반으로 합니다. 즉, CPU가 달라졌으니 빌드 할 때 사용되는 CPU의 아키텍처도 변하게 되는 것이죠. 여기서 사용하는 아키텍처가 바로 arm64입니다.
결과적으로 인텔 CPU 맥북과 ARM 맥북이 공존하게 되면서 맥북의 CPU에 맞게 시뮬레이터를 사용할 때 arm64를 사용할 것인지 x86_64를 사용할 것인지 설정을 해줄필요가 생긴 것입니다.
우선, Bulid Settings으로 이동합니다.
아래의 이미지와 같이 Bulid Settings의 Excluded Architectures에서 Debug 부분에 빌드에 사용할 시뮬레이터를 추가하고 arm64를 입력해줍니다.
이렇게 설정을 하면 Build Configuration이 Debug로 설정되어 있을 때, 시뮬레이터로 프로젝트 빌드시 arm64를 사용하지 못하게 함으로서 인텔 CPU의 x86_64아키텍처에 맞게 바이너리를 생성하게 됩니다.
Bulid Settings의 User-Defined에서 VALID_ARCHS를 삭제해줍니다. VALID_ARCHS란 위에서 설명한 Excluded_ACHS와 반대로 빌드시 사용가능한 아키텍처를 설정하는 것을 의미합니다. 12버전 이전의 Xcode에서는 Excluded_ACHS대신에 VALID_ARCHS를 사용했었습니다. 12버전으로 오면서 "사용가능한 아키텍쳐"를 설정하는 대신 "사용하지 말아야할 아키텍쳐"를 설정하는 방식으로 바뀐 것이죠.
VALID_ARCHS를 Xcode에서 지울 수 없는 경우에는 project.pbxproj 를 열어 "VALID_ARCHS"로 검색하여 VALID_ARCHS에 해당되는 코드를 삭제해주면 됩니다.(아래 이미지 참고)
project.pbxproj은 아래 이미지와 같이 패키지 내용보기를 하시면 확인하 실 수 있습니다.
project.pbxproj을 열어 "VALID_ARCHS"로 검색하여 VALID_ARCHS에 해당되는 코드를 모두 삭제해줍니다.