TL; DR;
릴리스 모드 에서도 라이브러리 / 앱에 대해 "Build Active Architecture Only ( ONLY_ACTIVE_ARCH)"를 예로 설정하십시오.
문제의 근본 원인을 확인하는 동안 Xcode 12에 대한 재미있는 사실을 깨달았습니다.
Xcode 12는 안타깝게도 아직 사용할 수없는 Apple Silicon의 디딤돌입니다. 그러나이 플랫폼을 사용하면 현재 Intel 기반 x86_64 아키텍처와 달리 시뮬레이터가 arm64 아키텍처에서도 실행되는 arm64 기반 macOS를 얻을 수 있습니다.
Xcode는 일반적으로 라이브러리 / 앱을 빌드하기 위해 "실행 대상"에 의존합니다. 따라서 시뮬레이터가 "실행 대상"으로 선택되면 사용 가능한 시뮬레이터 아키텍처에 대한 앱을 빌드하고 장치가 "실행 대상"으로 선택되면 장치가 지원하는 아키텍처에 대해 빌드합니다 ( arm*).
xcodebuild, Xcode 12+ 빌드 시스템 arm64에서 시뮬레이터의 유효한 아키텍처로 간주 합니다. 따라서 시뮬레이터가 실행 대상으로 선택되면 잠재적 arm64으로 기반 시뮬레이터 에 대해 libs / apps를 컴파일 / 링크 할 수 있습니다 (아직 사용할 수 없음). 따라서 <architecture>-<os>-<sdk>-<platform> 형식과 clang(++)같은 일부 -target 플래그를 보내고 arm64-apple-ios13.0-simulatorclang은 결국 Intel 기반 Mac에서 실패하는 arm64 기반 시뮬레이터에 대해 빌드 / 링크를 시도합니다.
그러나 릴리스 빌드 xcodebuild에만 이것을 시도 합니다. 왜? "Build Active Architecture Only ( )"빌드 설정은 일반적으로 "Release"구성에 대해서만 "No"로 설정되기 때문입니다. 즉 , 릴리스 빌드를 위해 선택한 실행 대상에 대한 libs / apps의 모든 아키텍처 변형을 빌드하려고합니다. 그리고 시뮬레이터 실행 대상에 대해, 그것은 모두 포함 의지 와 지금을, 이후 엑스 코드 12 +도 시뮬레이터에 대해 지원되는 아키텍처에 애플 실리콘을 지원합니다.ONLY_ACTIVE_ARCHxcodebuildx86_64arm64arm64
간단히 말해서 Xcode는 명령 줄 xcodebuild(기본적으로 릴리스 빌드, 프로젝트 설정의 일반 탭 참조)을 시도 하거나 실행 대상에서 지원하는 모든 아키텍처 변형을 빌드하려고 할 때마다 앱 빌드에 실패 합니다 . 따라서이 문제에 대한 간단한 해결 방법 은 릴리스 모드의 경우에도 라이브러리 / 앱에서 "Build Active Architecture Only ( ONLY_ACTIVE_ARCH)"를 예로 설정하는 것입니다.

라이브러리가 Pod로 포함되어 있고 액세스 권한이있는 경우 .podspec다음을 간단히 설정할 수 있습니다.
spec.pod_target_xcconfig = { 'ONLY_ACTIVE_ARCH'=> 'YES'}
spec.user_target_xcconfig = { 'ONLY_ACTIVE_ARCH'=> 'YES'} # 권장하지 않음
포드가 대상 프로젝트를 오염시키지 않아야 하고 대상 설정 자체에서 재정의 될 수 있기 때문에 개인적으로 두 번째 줄이 마음에 들지 않습니다 . 따라서 어떤 방식 으로든 설정을 재정의하는 것은 소비자 프로젝트의 책임이어야합니다. 그러나 이것은 podspec의 성공적인 linting을 위해 필요할 수 있습니다.
그러나에 대한 액세스 권한이없는 경우 .podspec포드를 설치하는 동안 언제든지 설정을 업데이트 할 수 있습니다.
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings["ONLY_ACTIVE_ARCH"] = "YES"
end
end
end
내가 실제로 libs / apps를 보관할 때 이것의 영향에 대해 걱정했던 한 가지는. 앱을 보관하는 동안 일반적으로 "Release"구성을 사용하며 현재 실행 대상의 활성 아키텍처 만 고려하여 릴리스 빌드를 생성하므로이 접근 방식을 사용하면 대상 빌드에서 armv7, armv7s 등의 슬라이스가 손실 될 수 있습니다. 그러나 문서에는 특정 아키텍처를 정의하지 않았기 때문에 "Generic iOS Device / Any Device"를 실행 대상으로 선택하면이 설정이 무시된다는 내용이 있습니다 (첨부 된 그림에서 강조 표시됨). 따라서 실행 대상으로 선택하여 앱을 보관하면 좋을 것 같습니다.