[Swift] ARM 계열 맥북에서 다음지도 SDK 시뮬레이터 빌드 오류 해결

In DaumMap.framework/DaumMap(HashUtils.o), building for iOS Simulator, but linking in object file built for iOS, file 'DaumMap.framework/DaumMap' for architecture arm64

ARM 계열 맥북에서 다음 지도(카카오 지도) SDK 빌드를 시도하면 위와 같은 오류가 발생한다. 워낙 고통받는 사람들이 많아보여서 글로 기록함

참고로 프로젝트 설정에 따라 해결 방법이 달라짐.

update: 카카오 지도 SDK v2가 release 된 것 같습니다. 해당 글은 v1 대상으로 작성된 글이라 새로운 프로젝트에 도입하실거라면 v2 사용을 권장드려요 😊 (https://apis.map.kakao.com/ios_v2/docs/getting-started/gettingstarted/)

라이브러리를 아무것도 사용하지 않고 다음 지도만 추가해서 사용하는 경우

Targets > Build Settings > Build Active Architecture Only에서 Debug: YES, Excluded Architectures에서 Debug에서 키 하나 추가: Any iOS Simulator SDK : arm64 추가 후 클린 빌드

모든 라이브러리를 CocoaPods로 관리하는 경우

위의 방법 적용 + 아래의 스크립트를 Podfile에 추가

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

Pods에 들어간 라이브러리들도 전부 arm64 아키텍쳐를 제외하고 빌드하겠다는 의미

Swift Package Manager를 사용하는 경우 또는 위 방법이 맘에 안드는 경우

사용중인 라이브러리가 SPM을 사용하고 있거나, 위의 임시 처리 방법이 맘에 안드는 경우인데.. 사실 가장 현실적인 방법은 카카오에서 다음지도 SDK를 xcframework 형태로 제공해주는 것이다 (iOS Simulator 아키텍처를 x86_64, arm64 지원 가능하게..)

혹시라도 개인이 해결할 수 있는 방법이 없나 한번 찾아봤는데… 이미 작정하고 삽을 파고있는 사람을 찾았다..

https://bogo.wtf/arm64-to-sim.html

위의 블로그 내용은 간단히 정리하면 실제로 나타나는 에러는 컴파일러 오류가 아니라 링커 오류이며, framework 파일에 이미 arm64 아키텍처가 포함되어 있으므로 구조적으로 약간의 장난(?)만 한다면 가능할 것이라고 설명하고 있다.

실제로 확인해보니 모든 아키텍처가 다 포함된 상태였다.

차근차근 블로그 글을 따라해서 꼭 필요한 아키텍처만 집어넣은 xcframework로 필자가 리패키징했다.

https://github.com/chorim/DaumMap-XCFramework/files/10924065/DaumMap.xcframework.zip

다운로드는 위의 링크에서 받고 프로젝트에 xcframework를 embed만 해주면 별다른 설정없이 끝!