ignoring file /Users/유저이름/프로젝트이름/ios/모듈이름, building for iOS Simulator-x86_64 but attempting to link with file built for iOS-arm64
이 오류 메시지는 xcode 14가 ios 시뮬레이터-arm64버전으로 빌드된 파일에 연결하려고 시도하고 있지만
현재 ios 시뮬레이터-x86_64버전으로 빌드되었다는 내용입니다.
따라서 아키텍처 불일치로 빌드가 실패된 것입니다.
이러한 오류가 발생한 이유는 xcode 14가 올바른 아키텍처에 맞게 빌드하도록 설정되지 않았기 때문입니다.
아이폰14프로는 arm64 아키텍처를 사용하기 때문에 해당 아키텍처에 맞게 빌드되도록 xcode를 설정해야 합니다.
$ open /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/
해당하는 ios버전 디렉터리 > SDKSettings.json 파일에서 "Archs"
값으로 ["arm64","x86_64"]
인 것을 확인할 수 있는데,
이는 시뮬레이터에 관한 아키텍처는 디폴트로 arm64, x86_64를 제공한다는 뜻입니다.
ONLY_ACTIVE_ARCH (Build Active Architecture Only) 옵션
만약 아이폰14 실제 기기를 xcode에 연결하고 빌드할 때, arm64, armv7 바이너리 파일을 모두 만들 필요없이 arm64만 만들면 되는데 이 옵션을 활성화하면 해당 아키텍처 바이너리만 생성됩니다.
debug 모드에서 arm64만 사용한다고 했을 때, 해당 옵션을 활성화해서 사용하면 됩니다 (디버그에서는 디폴트로 활성화되어있음)
EXCLUDED_ARCHS (Excluded Architectures) 옵션
일반적으로 디폴트로 두는 것이 맞지만, 시뮬레이터 빌드할 때 팀원들이 모두 애플 실리콘 맥북일 때 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
애플 실리콘 맥북에서 시뮬레이터 빌드 중지
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
결국 위의 내용을 종합해보면
즉, 시뮬레이터는 두 아키텍처 모두 상관이 없지만 Xcode가 다른 아키텍처로 연결해서 발생한 이슈라고 생각됩니다.
에러 잡기 1: 'ld: building for iOS Simulator, but linking in dylib built for iOS, file for architecture arm64'의 내용을 인용하자면, 리액트 네이티브 프로젝트를 빌드할때마다 터미널에서 pod install을 하는데, 여기서도 pod의 Excluded Architecture를 설정해야 적용이 되는 것 같습니다.
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