Xcode 빌드에러 (Architecture arm64)

Jee.e (황지희)·2022년 9월 14일
1
post-custom-banner

프로젝트에 GoogleMaps를 사용하려고, 코코아팟으로 설치를 했다.
코드를 다 적고 빌드를 하는데 오류가 발생했다.

에러 내용은 아래와 같고, architecture arm64 에러가 발생했다는 것이다.

building for iOS Simulator, but linking in object file built for iOS, file '/Users/jiheesmac/개발/Airbnb/Airbnb/Pods/GoogleMaps/Maps/Frameworks/GoogleMaps.framework/GoogleMaps' for architecture arm64


❓ 여기서 arm64 이란?

ARM은 Advanced RISC(Reduced Instruction Set Computer) Machine 의 약자로 임베디드 기기에 주로 사용되는 32bit 프로세서이다.

  • Apple이 Mac 제품에 ARM Architecture 기반의 CPU를 사용
  • iOS도 iPhone 5s, iPad4 부터 arm64 사용
  • Arm Architecture의 64bit 확장 버전임
  • M1의 Silicon의 프로세서 아키텍처는 arm64 기반



❓ 위와 같은 에러가 왜 발생하는가?

기존 맥북은 x86_64 Architecture 를 사용했다.

근데 새롭게 Apple Silicon을 사용하는 M1이 나타남에 따라 Mac의 CPU가 변경되었고, 빌드 시 사용되는 CPU의 Architecture 도 변경이 됐다. (이게 arm64)

Xcode Version 12 이전에는 시뮬레이터로 앱 빌드 시, 자동으로 x86_64를 사용하도록 설정이 되어있었지만,
Xcode Version 12 이후부터 Intel칩을 사용하는 Intel Mac과 Apple Silicon을 사용하는 M1 에서 실행되는 시뮬레이터를 실행시키기 위해, Xcode는 x86_64arm64 두 개의 Architecture 를 지원하기 시작했다.

보통 arm64는 타겟 디바이스용으로 배포할 때만 썼는데 M1에서는 시뮬레이터용으로도 사용되기 시작했고, Xcode 시뮬레이터가 x86_64arm64 를 구분하지 못해서 생기는 오류이다.

즉, Intel Mac과 M1 이 공존하게 되면서 생긴 문제다.




✔️ 해결

✅ 시도 1

  • x86_64 기반으로 동작하도록 Build Settings의 Excluded Architectures에서 Debug 부분에 빌드에 사용할 시뮬레이터를 추가하고 arm64를 입력
  • 이렇게 설정하면, Build Configuration 이 프로젝트 빌드 시 arm64를 사용하지 못하게 해 x86_64 Architecture에 맞게 바이너리를 생성함

^^.. 응 안돼
이렇게 하면 된다는데.. 난 안됨..^^
새로운 오류 발생..⭐️


The linked framework 'Pods_Airbnb.framework' is missing one or more architectures required by this target: x86_64.

필요한 아키텍처가 하나 이상 누락되었다..


✅ 시도 2

아래와 같이 Targets → General → Frameworks, Libraries, and Embedded Content에서 문제가 발생하는 프레임워크 제거


응 또 안도ㅐ~
이번엔 Pod으로 설치한 Framework들을 못찾음..ㅎ


✅ 시도 3
pod deintegrate 로 설치되어있는 Pods 제거 및 Podfile에 arm64를 제외하는 코드 적용

post_install do |installer|
      installer.pods_project.targets.each do |target|
            target.build_configurations.each do |config|
                  config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64'
            end
end
end

해결 완,,⭐️
해결은 됐으나.. 풀리지 않은 궁금증 하나가 생겼다.




✔️ 궁금증

왜 오류가 발생하는지는 이해했다.

근데 Xcode Version 12 이후부터 x86_64arm64 두 개의 Architecture 를 지원한다고 하지 않은가?

위와 같은 이유에서인지, SnapKit이나 FSCalendar, SwiftLint 등은 오류가 나지 않는다.

왜 Google Maps, NMapsMap 등 일부 FrameWork에서만 오류가 나는 것인가..?


✅ 시도

먼저 Google MapsGoogle Place 가 arm64를 지원하지 않는건 아닐까? 라는 생각에 lipo -info 명령어로 지원하는 아키텍처를 조회해봤다.

위 이미지의 마지막 줄과 같이 x86_64arm64 둘 다 지원하는것을 확인..


결론적으로, 여기 저기 물어봤지만 답을 찾지 못했다.
궁금증을 해결하진 못했지만 오류도 해결했고, 노력도 많이 했으니 위 궁금증 해소는 미래의 내게 맡기기로..!

profile
교훈없는 경험은 없다고 생각하는 2년차 iOS 개발자입니다.
post-custom-banner

0개의 댓글