产生背景:在制作自己私有库的时候依赖了某SDK,该SDK只能在真机编译,即只支持真机指令集不支持模拟器指令集。
pod repo push / pod lib lint 提示如下错误导致podspec验证不通过。
- NOTE | [iOS] xcodebuild: ld: warning: ignoring file xxx/xx/x.a, missing required architecture x86_64 in file xxx/xx/x.a (2 slices)
- NOTE | [iOS] xcodebuild: ld: warning: ignoring file xxx/xx/x.a, missing required architecture i386 in file xxx/xx/x.a (2 slices)
这个错误的原因是依赖的x.a静态包只支持真机指令集(arm64 armv7 armv7s),不支持模拟器指令集(i386 x86_64),而在pod repo push / pod lib lint验证的时候会验证模拟器指令集(i386 x86_64)。
官方说法 CocoaPods/issues
通过 lipo -info + SDK路径
命令查看 SDK 支持的指令集
解决办法两个:
1. x.a支持模拟器指令集,这个一般是难以实现的,毕竟很大可能性是第三方的SDK。
2. pod repo push / pod lib lint 跳过对模拟器指令集的验证
针对方案2具体操作如下:
- 设置VALID_ARCHS在 podspec 文件中添加
s.pod_target_xcconfig = { 'VALID_ARCHS[sdk=iphonesimulator*]' => '' }
或
s.pod_target_xcconfig = { 'VALID_ARCHS' => 'arm64 armv7 armv7s ' }
如果项目已经设置 pod_target_xcconfig,添加到已有值的后面,设置此处将在 模拟器编译时不产生二进制文件。
验证时跳过验证
pod repo lint 命令添加 --skip-import-validation发布更新跳过验证
pod repo push 命令添加 --skip-import-validation