CocoaPods在M1芯片Mac上的问题-2021-04-20-周二

问题

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

指令集不匹配.png

原因

  • TNGNotificationService确实是Pod管理的framework,在Podfile中的内容如下:
target 'TNGNotificationService' do
  platform :ios, '10.0'
  pod 'CleverTap-iOS-SDK', '3.7.2'
  pod 'CTNotificationService'
end
  • 查看工程配置
CocoaPods管理的工程配置.png

从工程配置可以看出,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上使用。

使用Rosetta打开

其他的什么都不用改,工程就能在XCode的模拟器上运行了。

参考文章

在Apple Silicon(M1)芯片的Mac上打开只支持Intel的软件

M1上模拟器无法运行的项目,可以用Rosetta打开

你可能感兴趣的:(CocoaPods在M1芯片Mac上的问题-2021-04-20-周二)