Xcode 12, iOS 시뮬레이터 용으로 빌드하지만 아키텍처 arm64 용으로 iOS 용으로 빌드 된 오브젝트 파일에서 링크


312

iOS 14를 준비하기 위해 Xcode 12 (베타 5)로 대규모 (그리고 Xcode 11 작업 중!) 프로젝트를 구축하려고합니다. 코드베이스는 이전에 Obj-C 였지만 이제는 Obj-C와 Swift가 모두 포함되어 있으며 다음과 같은 포드를 사용합니다. Obj-C 및 / 또는 Swift도 마찬가지입니다.

Xcode 12 (현재 1.10.0.beta 2)를 지원하는 새로운 cocoapods 베타를 가져 왔습니다.

포드 설치에 성공했습니다. 빌드를 수행 할 때 포드 프레임 워크에서 다음 오류가 발생합니다.

"iOS 시뮬레이터 용으로 빌드하지만 아키텍처 arm64 용으로 iOS 용으로 빌드 된 오브젝트 파일에서 링크"

프레임 워크에서 lipo -info를 실행하면 armv7s armv7 i386 x86_64 arm64가 있습니다.

이전에는 프로젝트의 유효한 아키텍처가 armv7, armv7s 및 arm64로 설정되었습니다.

Xcode 12에서는 Apple의 설명서에 따라 해당 설정이 사라집니다. 아키텍처는 $ (ARCHS_STANDARD)로 설정됩니다. 제외 된 아키텍처에 설정된 것이 없습니다.

누구든지 여기서 무슨 일이 벌어 질지 알고 있습니까? 나는 아직 더 간단한 프로젝트로 이것을 재현 할 수 없었다.



문서를 체크 아웃 : milanpanchal24.medium.com/...을
MilanPanchal

Apple Silicon M1이 있으며 여전히이 arm64 오류가 발생합니다. 왜 그럴까요?
Aspen

답변:


485

기본적으로 arm64프로젝트와 Pod 프로젝트 모두에서 시뮬레이터 아키텍처 를 제외해야합니다 .

  • ,로 이동이 작업을 수행하려면 설정 구축 프로젝트의 및 추가 Any iOS Simulator SDK가치와 arm64내부 Excluded Architecture.

    여기에 이미지 설명 입력

또는

  • 사용자 정의 XCConfig파일을 사용하는 경우 시뮬레이터 아키텍처를 제외하기 위해이 행을 추가 할 수 있습니다.
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64

그때

모든 cocoa pod 공급 업체가 Podspec에 다음을 추가 할 때까지 Pod 프로젝트에 대해 동일한 작업을 수행해야합니다 .

s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

Excluded ArchitechurePod 프로젝트의 Build Settings 에서 수동으로 추가 할 수 있지만 pod install.

대신이 스 니펫을 Podfile. 실행할 때마다 필요한 빌드 설정을 작성합니다.pod install

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

4
여기 CocoaPods에 대한 추가 세부 사항이 좋습니다. [sdk=iphonesimulator*]이후 가 없으면 EXCLUDED_ARCHSXCode는 arm64 용으로 빌드 된 포드가 없으므로 실제 기기 용으로 빌드 할 때 포드를 찾지 못합니다.
mwu

6
나를 위해 일했습니다! post_install do |installer|플리퍼로 인해 대부분의 Podfile에 이미 섹션이 있습니다. 라인 installer.pods_project.build_configurations.each do |config| config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64" end뒤에 내부 섹션을 붙여 넣습니다 flipper_post_install(installer).
Ramon Vermeulen

5
나는 얻고있다 building for iOS Simulator, but linking in object file built for macOS, for architecture x86_64. 그것을 고치는 방법?
Sazzad Hissain Khan 2010 년

3
이 솔루션은 훌륭하며 자신의 포드를 구축하는 경우 "... 모든 코코아 포드 공급 업체가 Podspec에 추가를 완료 할 때까지"이후에 저자가 제안한 2 줄에 특히 주목하십시오. 내 프레임 워크의 Podspec에서 개인 저장소로 푸시하려고 할 때 linting 오류가 발생했습니다. 감사!
Danny

1
이 솔루션에는 포드 사양 작성자가이 솔루션을 찾아 적용했기 때문에 문제를 일으키는 결함이 있습니다. 문제가되는 부분은 user_target_xcconfig. 여러 pod 사양이 서로 다른 값을 정의하기 EXCLUDED_ARCHS때문에 [!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.CocoaPods는 다음 과 같은 경고를 내 보냅니다. podspec 구문 참조에서는이 속성이 "권장되지 않음"이라고 말합니다. guides.cocoapods.org/syntax/podspec.html#user_target_xcconfig
leberwurstsaft

118

TL; DR;

릴리스 모드 에서도 라이브러리 / 앱에 대해 "Build Active Architecture Only ( ONLY_ACTIVE_ARCH)"를 예로 설정하십시오.


문제의 근본 원인을 확인하는 동안 Xcode 12에 대한 재미있는 사실을 깨달았습니다.

  1. Xcode 12는 안타깝게도 아직 사용할 수없는 Apple Silicon의 디딤돌입니다. 그러나이 플랫폼을 사용하면 현재 Intel 기반 x86_64 아키텍처와 달리 시뮬레이터가 arm64 아키텍처에서도 실행되는 arm64 기반 macOS를 얻을 수 있습니다.

  2. Xcode는 일반적으로 라이브러리 / 앱을 빌드하기 위해 "실행 대상"에 의존합니다. 따라서 시뮬레이터가 "실행 대상"으로 선택되면 사용 가능한 시뮬레이터 아키텍처에 대한 앱을 빌드하고 장치가 "실행 대상"으로 선택되면 장치가 지원하는 아키텍처에 대해 빌드합니다 ( arm*).

  3. xcodebuild, Xcode 12+ 빌드 시스템 arm64에서 시뮬레이터의 유효한 아키텍처로 간주 합니다. 따라서 시뮬레이터가 실행 대상으로 선택되면 잠재적 arm64으로 기반 시뮬레이터 에 대해 libs / apps를 컴파일 / 링크 할 수 있습니다 (아직 사용할 수 없음). 따라서 <architecture>-<os>-<sdk>-<platform> 형식과 clang(++)같은 일부 -target 플래그를 보내고 arm64-apple-ios13.0-simulatorclang은 결국 Intel 기반 Mac에서 실패하는 arm64 기반 시뮬레이터에 대해 빌드 / 링크를 시도합니다.

  4. 그러나 릴리스 빌드 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"를 실행 대상으로 선택하면이 설정이 무시된다는 내용이 있습니다 (첨부 된 그림에서 강조 표시됨). 따라서 실행 대상으로 선택하여 앱을 보관하면 좋을 것 같습니다.


1
이것은 Apple의 놀라운 변화이며 Apple이 보상해야한다고 생각하는 데 반나절의 비용이 들었습니다. :). 이것은 문서화 된 업데이트가 아니며 (적어도 내가 아는 한) Xcode 12로 업그레이드하는 모든 사람들에게 확실히 영향을 미칠 것입니다. 나는 모두가 기본 사항을 알게 된 후에는 모두 자신의 방법을 찾길 바랍니다.
Ayan Sengupta

1
여러 pod 사양이 사용 user_target_xcconfig하고 값이 정확히 일치하지 않으면 CocoaPods는 다음과 같은 경고를 표시합니다 [!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.. podspec 구문 참조에 따르면이 속성은 "권장되지 않음" guides.cocoapods.org/syntax/podspec.html#user_target_xcconfig 입니다. 따라서 user_target_xcconfig많은 개발자가 문제를 해결 하기 위해 이것을 사용하지 마십시오 .
leberwurstsaft

2
권리! 그리고 나는 이미 내 대답에서 그것을 언급했다고 생각합니다.
Ayan Sengupta

1
Xcode 11로 빌드를 중단하지 않기 때문에 이것이 최상의 솔루션이라고 생각합니다.이 설정을 전체 프로젝트에 적용한 다음 Pod 또는 대상에 대해 별도로 설정할 필요가 없었습니다. 그리고 Xcode 11.7과 Xcode 12에서 모두 작동합니다. arch 제외 arm64는 Xcode 11.7에서 매핑 x86_64되므로 시뮬레이터의 주요 아키텍처를 제외합니다.
Wojciech Kulik 20.10.21

2
나는 결국 'EXCLUDED_ARCHS [sdk = iphonesimulator *]'=> 'arm64'로 모두 작동하도록 관리했지만 pod_target_xcconfig에서만, 문제 포드 (미리 빌드 된 라이브러리 포함)와 종속 된 단일 포드에서만 작동합니다. 문제 포드. 다른 모든 것은 깨끗하게 남겨졌습니다. 저는이를 액티브 아치 솔루션보다 선호하기로 결정했습니다.
Airsource Ltd

72

해결책을 찾았습니다! https://developer.apple.com/forums/thread/657913

시뮬레이터에 대해 제외 된 아키텍처를 arm64로 설정하면 컴파일됩니다.

시뮬레이터 용 아키텍처 제외


충분히 공평하게, 내가 가지고 있던 문제는 수동으로 연결된 라이브러리에 관한 것이지만 우리가 사용하는 포드에도 문제를 일으키지 않았습니다.
SlashDevSlashGnoll

5
나는에서 테스트 된 릴리스 나도 릴리스에 추가했다, 그래서 모드
MujtabaFR

나는 우리가이 포스트 이후 사업에 돌아온 것 같다. 도와 주셔서 감사합니다.
JBarros35

@btxios 아카이브를 만들 때 "ARCHS [@] : unbound variable"문제가 발생합니다. 이 문제를 해결할 수 있었습니까?
ArdenDev 2011

50

유효한 아키텍처 빌드 설정은 Xcode 12에서 제거되었습니다.이 빌드 설정에 값이있는 경우 문제를 일으키는 것이므로 제거해야합니다.

사용자 정의 빌드 설정 (값 없음)으로 다시 추가하고 실패한 프로젝트를 실행 한 다음 VALID_ARCHS 빌드 설정을 삭제하여 VALID_ARCHS 빌드 설정을 "지울"수있었습니다. 그 후 시뮬레이터에서 실행할 수있었습니다.

내 아키텍처 빌드 설정은 표준 아키텍처입니다.

빌드 설정의 더하기 버튼에서 사용자 정의 설정을 추가 할 수 있습니다.

사용자 정의 설정


9
이것은 받아 들여진 대답이어야합니다. 대상이 아닌 앱 프로젝트가 선택되어 있는지 확인하십시오. 그렇지 않으면 빌드 설정에서 VALID_ARCHS를 삭제할 수 없습니다. :)
Bionicle

2
@trishcode 심지어이 일 후에 내가 어떤 작업 방법 같은 오류 (xcode12 beta4)을 받고 있어요
Sivakrishna 페

3
@SivakrishnaPerla Xcode 11에서 프로젝트를 열 수 있다면 Valid Architectures가 사용되는 대상을 정확히 볼 수 있습니다. Xcode 11에서 설정을 지운 다음 Xcode 12에서 프로젝트를 다시 시도 할 수도 있습니다. 여전히 해결 방법이 필요하고 임베디드 프레임 워크에서 오류가 발생하면 SlashDevSlashGnoll의 답변이 작동합니다. 해결 방법이 필요하고 Cocoapod에서 오류가 발생하면 설치 후 Podfile에서 arm64 아키텍처를 제외하십시오.
trishcode

1
@trishcode 감사합니다. 제외 된 아키텍처에서 arm64를 설정하고 VALID_ARCHS를 제거했습니다.
Sivakrishna Perla

1
VALID_ARCHS를 제거하고 제외 된 아키텍처에 arm64를 추가하면이 오류가 발생합니다. (ARCHS = arm64 x86_64, VALID_ARCHS =, EXCLUDED_ARCHS = (arm64))에 대해 컴파일 할 아키텍처가 없습니다.
nOOb iOS

14

Xcode 12.3

작업 영역 유효성 검사를 예로 설정하여이 문제를 해결했습니다.

여기에 이미지 설명 입력


내 문제를 해결했습니다. 감사합니다!
Declan Land

1
내 문제가 해결되지 않는
아스펜

내 문제를 해결했습니다. 가장 쉬운 수정! 이 문제가 해결되어 기쁘지만 누군가이 문제가 어떻게 해결되는지 설명 할 수 있습니까?
njdeveloper

11

실제 장치가 아닌 시뮬레이터에서 Xcode 12에 문제가있는 경우 더 이상 지원되지 않으므로 VALID_ARCHS 설정 을 제거 해야합니다 . "빌드 설정"으로 이동하여 " VALID_ARCHS "를 검색 하고 사용자 정의 속성을 제거 합니다. 당신이 가진 모든 목표 에서 그것을하십시오 .

그래도 pod가 올바른 아키텍처와 배포 대상으로 컴파일되도록하려면 podfile 하단에 스크립트를 추가해야 할 수 있습니다.

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
      config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
     end
  end
end

VALID_ARCHS내 프로젝트에서 제거하면 잘 작동했습니다. podfile이나 pods 프로젝트에 아무것도 변경하지 않았습니다.
Ángel Téllez

9

Xcode 12로 업그레이드 한 후에도 실제 장치 용으로 빌드 할 수 있었지만 시뮬레이터는 만들 수 없었습니다. Podfile 빌드는 실제 장치에서만 작동했습니다.

빌드 설정> 사용자 정의에서 VALID_ARCHS를 삭제했는데 제대로 작동했습니다! 이것을 찾기 전에 잠시 머리를 두드리는 것.


8

나를 위해 다음 설정이 작동했습니다.

빌드 설정 >> 제외 된 아키텍처

"모든 iOS 시뮬레이터 SDK"옵션의 릴리스 및 디버그 모드에 "arm64"가 추가되었습니다.

여기에 이미지 설명 입력


6

답을 찾았다 고 믿습니다. Xcode 12 베타 6 릴리스 정보에 따라 :

" 빌드 설정 편집기에 더 이상 유효한 아키텍처 빌드 설정 (VALID_ARCHS)이 포함되지 않으며 사용하지 않는 것이 좋습니다. 대신 새 제외 아키텍처 빌드 설정 (EXCLUDED_ARCHS)이 있습니다. 프로젝트에 VALID_ARCHS가 포함 된 경우 설정이 사용자에 표시됩니다. -빌드 설정 편집기의 정의 된 섹션입니다. (15145028) "

프로젝트 파일을 수동으로 편집하고 (Xcode를 사용하여 프로젝트 파일에서 항목을 제거하는 방법을 알 수 없음) VALID_ARCHS를 참조하는 모든 줄을 제거하여이 문제를 해결할 수있었습니다. 그 후 시뮬레이터를 잘 구축 할 수 있습니다.


1
Xcode를 사용하여 VALID_ARCHS는 프로젝트 (타겟 아님)를 선택한 다음 '빌드 설정-> 사용자 정의'에 있습니다. 선택하고 삭제합니다.
Akshay

이 솔루션은 저에게 효과적이었습니다. 다른 사람들이 제안한 솔루션은 '아키텍처 제외'필드에 'arm64'값을 추가하여 생성 된 .app 파일에 대해 '파일 권한'오류를주기 시작했기 때문에 작동하지 않았습니다.
archeopetrix

6

프로젝트 대상과 포드 대상 모두에 대해 "제외 된 아키텍처"에 "arm64"를 추가하여 문제를 해결합니다.

Xcode-> 대상 프로젝트-> 빌드 설정-> 제외 된 아키텍처> "arm64"

Xcode-> 포드 대상-> 빌드 설정-> 제외 된 아키텍처> "arm64"


6

Xcode 12

제거 VALID_ARCH에서 빌드 설정 에서 사용자 정의 나를 위해 그룹 작업.

여기에 이미지 설명 입력


5

당신에서 xxx.framework podspec 파일 추가 구성 방지 포드 패키지에는 arm64 similator 아치가 포함됩니다.

s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

작동했습니다! 그러나 이것은 Pod를 Apple Silicon 기반 Mac에서 사용할 수 없음을 의미합니까?
tomacco

@tomacco가 확인 되었습니까?
Fernando Reynoso

2
@FernandoReynoso 방금 개발자 전환 키트를 받았습니다. (ARM MacMini)는 오늘 늦게 테스트 및보고 할 예정입니다
tomacco

@tomacco 테스트 할 수 있었습니까?
Houman

여러 pod 사양이 사용 user_target_xcconfig하고 값이 정확히 일치하지 않으면 CocoaPods는 다음과 같은 경고를 표시합니다 [!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.. podspec 구문 참조에 따르면이 속성은 "권장되지 않음" guides.cocoapods.org/syntax/podspec.html#user_target_xcconfig 입니다. 따라서 user_target_xcconfig많은 개발자가 문제를 해결 하기 위해 이것을 사용하지 마십시오 .
leberwurstsaft

4

명령 줄에서 프레임 워크를 구축하는 데 문제가있었습니다. 내 프레임 워크는 ARM 기반 시뮬레이터에 대한 지원이 누락 된 다른 프레임 워크에 의존합니다. 종속성을 업그레이드 할 때까지 ARM 기반 시뮬레이터에 대한 지원을 제외했습니다.

EXCLUDED_ARCHS=arm64CLI에서 시뮬레이터 용 프레임 워크를 빌드 할 때 플래그가 필요했습니다 .

xcodebuild archive -project [project] -scheme [scheme] -destination "generic/platform=iOS Simulator" -archivePath "archives/[scheme]-iOS-Simulator" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES EXCLUDED_ARCHS=arm64

1
여기도 마찬가지입니다. 이 시나리오의 핵심 "문제"는 실제로를 통해 일반 대상을 구축하는 것 -destination "generic/platform=iOS Simulator"입니다. 이것은 Xcode 12 이후 arm64를 포함하는 사용 가능한 모든 아키텍처에 대한 빌드로 이어집니다.
Sascha

4

이 스레드에 대한 거의 모든 게시물을 시도하고 애플 개발자 포럼을 읽은 후에 나는 단 하나의 솔루션 만이 효과가 있음을 발견했습니다.

신속한 앱에서 사용되는 범용 프레임 워크를 구축하고 있습니다. 아키텍처 오류없이 시뮬레이터로 빌드 할 수 없습니다.

내 Framework 프로젝트에는 빌드 단계에 Universal Framework 작업이 있습니다.

  • xcodebuild빌드 단계 의 작업에 다음을 추가합니다 . EXCLUDED_ARCHS="arm64"

다음으로 다음 프로젝트를 변경해야합니다 Build Settings.

  • VALID_ARCHS사용자 정의 설정 삭제
  • 설정 ONLY_ACTIVE_ARCHYES***

*** 프레임 워크를 개발 중이고 데모 앱도있는 경우 두 프로젝트 모두에서이 설정을 켜야합니다.


4

업데이트 : 2020 년 10 월

Excluded Architecture arm64에서만 간단히 설정할 수 있습니다 Debug > Simulator - iOS 14.O SDK.

여기에 이미지 설명 입력


3

포드 개발자 용 Podspec에 다음을 추가합니다.

s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

그런 다음 샘플 프로젝트에서 샘플 프로젝트 파일 설정

이 프로젝트에서 작동하는 것을보십시오


여러 pod 사양이 사용 user_target_xcconfig하고 값이 정확히 일치하지 않으면 CocoaPods는 다음과 같은 경고를 표시합니다 [!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.. podspec 구문 참조에 따르면이 속성은 "권장되지 않음" guides.cocoapods.org/syntax/podspec.html#user_target_xcconfig 입니다. 따라서 user_target_xcconfig많은 개발자가 문제를 해결 하기 위해 이것을 사용하지 마십시오 .
leberwurstsaft

2

또한 카르타고를 통해 설치된 특정 라이브러리에서 동일한 문제가 발생했습니다. Carthage를 사용하는 사람들을 위해 Carthage는 Xcode 12에서 기본적으로 작동하지 않으므로이 문서는 대부분의 경우에 작동하는 해결 방법을 안내합니다. 곧 Carthage는 팻 프레임 워크를 빌드합니다. 즉, 프레임 워크에는 지원되는 모든 아키텍처에 대한 바이너리가 포함되어 있습니다. Apple Sillicon이 소개되기 전까지는 모두 잘 작동했지만 이제는 중복 아키텍처 (장치의 경우 arm64, 시뮬레이터의 경우 arm64)가 있기 때문에 충돌이 발생합니다. 이것은 Carthage가 아키텍처 특정 프레임 워크를 단일 팻 프레임 워크에 연결할 수 없음을 의미합니다.

여기에서 지침을 따를 수 있습니다. 카르타고 XCODE 12

그런 다음 카르타고를 구성한 후. 빌드 설정의 "제외 된 아키텍처"에 arm64를 넣습니다. 여기에 이미지 설명 입력

시뮬레이터를 사용하여 프로젝트를 실행 해보십시오. 시뮬레이터는 오류없이 실행되어야합니다.


1

여기서 문제는 Xcode 11의 유효한 아키텍처, Xcode 11에서 프로젝트를 열고 프로젝트, 대상 및 포드 모두에 대해 유효한 아키텍처 값을 $ (ARCHS_STANDARD)로 변경하고 Xcode 12에서 프로젝트를 다시 열고 빌드하는 것입니다.


1

설정 "Build Active Architecture Only"(ONLY_ACTIVE_ARCH)예에 빌드 설정을 xcodearm64 때문에 실리콘 MAC 아키텍처의 arm64 요구된다.

arm64는 Silicon MAC을 지원하기 위해 Xcode12에서 시뮬레이터 아치로 추가되었습니다.

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/SDKSettings.json


실리콘 Mac에서 실행되고 있지 않다면 arm64를 사용하지 않아야합니다.
조나단.

@홍옥. 예, 그렇게해야했지만 현재는 그렇지 않습니다.
Aravind 2011

1

제 경우 : Xcode 12

빈 값을 EXCLUDED_ARCHS설정하고 ONLY_ACTIVE_ARCH디버그 = YES릴리스 = NO 프로젝트의 빌드 설정을 설정합니다.

내 Podfile에 다음을 포함했습니다.

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

시뮬레이터 iPhone 8 (iOS 12) 및 iPhone 11 Pro Max (iOS 14) 및 내 장치 iPhone 7 Plus (iOS 13.4)에서 실행됩니다.


1

에서 Build Settings검색 VALID_ARCH을 눌러 다음 delete. 이것은 Xcode 12.0.1에서 나를 위해 작동합니다.

빌드 설정에 대한 VALID_ARCH


2
찾을 수 없습니다. VALID_ARCH이것은 무엇입니까?
Houman

1

나를 Any iOS Simulator SDK -> x86_64위해 Project's Build Settings -> VALID_ARCHS일하는 것만 추가 하십시오.

Xcode 버전 : 12.1 (12A7403)

여기에 이미지 설명 입력

프로젝트에 x86_64를 지원하지 않는 일부 프레임 워크가 포함 된 경우

  • 이러한 프레임 워크 이름 ( xxx.framework)을 Target -> Build Settings -> Excluded Source File Names -> Debug -> Any iOS Simulator SDK.
  • 그런 다음을 수정하여 Framework Search Paths에 대한 이러한 프레임 워크의 경로를 삭제합니다 Debug -> Any iOS Simulator SDK.

이 두 설정은 시뮬레이터 모드에서 이러한 프레임 워크를 빌드하고 링크하는 Xcode를 방지 할 수 있습니다.

여기에 이미지 설명 입력

여기에 이미지 설명 입력


1

arm64 및 Xcode 12의 문제를 이해하고 iPhone Simulator의 arm64 아키텍처를 제외하거나 릴리스 계획에 ONLY_ACTIVE_ARCH를 설정하여 빌드 문제를 해결할 수있었습니다. 그러나 여전히 pod repo push를 사용하여 프레임 워크를 푸시하는 데 문제가 있습니다.

내 podspec에서 s.pod_target_xcconfig를 설정해도 동일한 podspec에 정의 된 종속성에이 설정이 적용되지 않는다는 것을 알았습니다. Cocoapods가 유효성 검사 중에 생성하는 더미 앱 프로젝트에서 볼 수 있습니다. Cocoapods 유효성 검사는 시뮬레이터에 대한 릴리스 체계를 실행 중이며 하나 이상의 종속성이 arm64를 제외하지 않거나 활성 아키텍처 만 빌드하도록 설정되지 않은 경우 실패합니다.

해결책은 Cocoapods가 프로젝트의 유효성을 검사하는 동안 설치 후 스크립트를 추가하도록하거나 디버그 체계가 활성 아키텍처 만 빌드하기 때문에 디버그 체계를 빌드하도록하는 것입니다.

Xcode 11을 사용하여 유효성 검사를 통과하기 위해 포드를 릴리스했습니다. developer.apple.com에서 Xcode 11을 다운로드하고 응용 프로그램 폴더에 Xcode11.app으로 복사 한 다음 sudo xcode-select --switch /Applications/Xcode11.app/Contents/Developer. 완료되면 다시 전환하는 것을 잊지 마십시오.


1

다른 솔루션을 시도하고 검색 한 후 가장 안전한 방법은 Podfile 끝에 다음 코드를 추가하는 것입니다.

post_install do |pi|
   pi.pods_project.targets.each do |t|
       t.build_configurations.each do |bc|
          bc.build_settings['ARCHS[sdk=iphonesimulator*]'] =  `uname -m`
       end
   end
end

이렇게하면 현재 CPU의 아키텍처로 iOS 시뮬레이터의 컴파일러 아키텍처 만 재정의 할 수 있습니다. 다른 솔루션과 비교할 때이 솔루션은 Apple Silicon이 설치된 컴퓨터에서도 작동합니다 .


누군가가 적어도 문제를 이해하고 iOS 시뮬레이터에 대한 Apple Silicon 지원을 제거 할 것을 제안하지 않는 것을 보는 것은 좋습니다.
Camsoft

0

나의 경우에는:

4 개의 구성 (+ DebugQa 및 ReleaseQa)이 있습니다. Cocoapods는 종속성 관리자로 사용됩니다.

디버그의 경우 장치와 시뮬레이터, qa에서만 장치에 수집했습니다.

PodsProject에서 BuildActiveArchitecture를 yes로 설정하는 데 도움이되었습니다.


0

제 경우에는 Relese 모드에서 watchOS 7 시뮬레이터에서 실행하려고했지만 iOS 14 시뮬레이터는 디버그 모드였습니다.

두 심을 디버그 / 릴리스 모드로 설정하는 것만으로도 문제가 해결되었습니다!


0

빌드 구성을 디버그 모드로 다시 전환하거나 디버그 및 릴리스 모드 모두에 대해 활성 아키텍처 만 빌드를 켭니다. 그 이유는 라이브러리 / 프레임 워크가 새로운 Simulator 아키텍처 ARM64를 지원하지 않기 때문입니다 (Mac에서 Apple Silicon 프로세서로 실행).


0

경로에 "arm64"(따옴표 제외) 줄을 추가합니다. Xcode-> 프로젝트-> 빌드 설정-> 아키텍처-> 제외 된 아키텍처 또한 포드에 대해서도 동일하게 수행합니다. 두 경우 모두 디버그 및 릴리스 필드 모두.

또는 자세히 ...

Xcode 12를 사용하여 시뮬레이터에 배포하는 동안 여기에 언급 된 오류도 저에게 영향을 준 것 중 하나입니다. 각 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 파인더에 표시하고 Atom에서 .xcodeproj를 연 다음 .pbxproj를 통해 모든 VALIDARCHS 설정을 제거하면됩니다. 이것이 나를 위해 일하게 한 것입니다. 내 빌드를 더 많이 얻는 것처럼 보이지만 궁극적으로 또 다른 오류가 발생하는 다른 제안 (arm64 제외, Active Architecture 만 제외)을 시도했습니다. VALIDARCH 설정을 두는 것이 아마도 먼저 확인하는 것이 가장 좋습니다.


0

나를 위해 일한 솔루션을 공유하여 누군가를 도울 수 있습니다.

시뮬레이터 용으로 컴파일 할 때 문제 :

iOS 시뮬레이터 용으로 빌드하지만 아키텍처 arm64 용으로 iOS 용으로 빌드 된 오브젝트 파일에서 링크

XCODE 12.1, POD 1.9.1

내 프로젝트 구조

  • 주요 목표
  • 확장 공유
  • 알림 서비스 확장
  • 서브 모듈, 커스텀 프레임 워크
  • Podfile
  1. arm64빌드 설정에 추가 -> Exclude Architecture모든 대상에서.

여기에 이미지 설명 입력

  1. 제거 arm64에서 VALID_ARCHS와 추가 된 x86_64모든 대상에.

여기에 이미지 설명 입력

  1. 다음 코드를 추가하십시오. podfile

    post_install do |installer|
        installer.pods_project.build_configurations.each do |config|
        config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
     end
    end
    
  2. 나요 pod update, 삭제 podfile.lock및했다pod install

  3. 깨끗한 빌드를하십시오.


0

온라인에서 쓸모없는 답변을 많이 시도한 후. 이것은 나를 위해 작동합니다.

먼저 Pod 프로젝트 용 x86_64 생성 !!!!

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ARCHS'] = "arm64 x86_64"
        end
    end
end

둘째, VALID_ARCHS에 "x86_64"를 추가합니다.

여기에 이미지 설명 입력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.