프로젝트에 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
ARM은 Advanced RISC(Reduced Instruction Set Computer) Machine 의 약자로 임베디드 기기에 주로 사용되는 32bit 프로세서이다.
기존 맥북은 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_64와 arm64 두 개의 Architecture 를 지원하기 시작했다.
보통 arm64는 타겟 디바이스용으로 배포할 때만 썼는데 M1에서는 시뮬레이터용으로도 사용되기 시작했고, Xcode 시뮬레이터가 x86_64와 arm64 를 구분하지 못해서 생기는 오류이다.
즉, Intel Mac과 M1 이 공존하게 되면서 생긴 문제다.
✅ 시도 1
^^.. 응 안돼
이렇게 하면 된다는데.. 난 안됨..^^
새로운 오류 발생..⭐️
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_64와 arm64 두 개의 Architecture 를 지원한다고 하지 않은가?
위와 같은 이유에서인지, SnapKit이나 FSCalendar, SwiftLint 등은 오류가 나지 않는다.
왜 Google Maps, NMapsMap 등 일부 FrameWork에서만 오류가 나는 것인가..?
✅ 시도
먼저 Google Maps과 Google Place 가 arm64를 지원하지 않는건 아닐까? 라는 생각에 lipo -info
명령어로 지원하는 아키텍처를 조회해봤다.
위 이미지의 마지막 줄과 같이 x86_64와 arm64 둘 다 지원하는것을 확인..
결론적으로, 여기 저기 물어봤지만 답을 찾지 못했다.
궁금증을 해결하진 못했지만 오류도 해결했고, 노력도 많이 했으니 위 궁금증 해소는 미래의 내게 맡기기로..!