问题
Target 'Pods-TNGNotificationService' of project 'Pods' was rejected as an implicit dependency for 'Pods_TNGNotificationService.framework' because its architectures 'x86_64 i386' didn't contain all required architectures 'arm64'
大概的意思就是Pods_TNGNotificationService.framework
只包含了x86_64 i386
这两种指令集;但是要求的指令集是arm64
原因
-
TNGNotificationService
确实是Pod
管理的framework
,在Podfile
中的内容如下:
target 'TNGNotificationService' do
platform :ios, '10.0'
pod 'CleverTap-iOS-SDK', '3.7.2'
pod 'CTNotificationService'
end
- 查看工程配置
从工程配置可以看出,Pods
管理的工程,如果是模拟器,那么就自动排除了arm64
指令集。原因也很好猜,以前arm
指令集都是手机的,而PC
的指令集一般是x86
的。
但是M1
芯片的Mac
,指令集就是arm64
的,模拟器其实就是PC
的指令集,这样就出现了编译不过的问题。
方案1:真机运行
CocoaPods
的工程管理配置中只是在模拟器的情况下才会排除arm64
,但是在真机的情况下是不会的。因为手机的指令集一直是arm64
的。
那么解决方案就很简单,不用模拟器,直接用真机调试运行就可以了。
实际试了一下,用真机果然能正常运行。
方案2:Rosetta方式打开
为了解决Intel x86
芯片的软件在M1
芯片的arm64
指令下不能运行的问题,macOS Big Sur
中内置了Rosetta
。
Rosetta
本质上将为英特尔处理器编写的指令“翻译”为苹果芯片可以理解的命令。开发人员无需对其旧应用程序进行任何更改,他们就能在macOS Big Sur
系统上最新的M1
芯片的Mac
上使用。
其他的什么都不用改,工程就能在XCode
的模拟器上运行了。