源起
公司有幾個私有pod庫,一直使用的是:git =>'https://xxxx.git'
這種方式集成的磺箕,但是每次 pod update
的時候都需要下載一遍搂捧,而且公司的網(wǎng)太慢了卵贱,十分不爽(*  ̄︿ ̄)
公司的網(wǎng)確實奇怪滥沫,網(wǎng)易云音樂聽歌一點都不卡,一旦和工作有關(guān)的網(wǎng)就特別慢键俱。兰绣。。老板你聽我解釋···
意外的事情
有一些只能在真機運行的庫编振,在pod lib lint
階段就不能通過缀辩,直接報錯 , 原先做的pod都是模擬器可以運行的,所以就
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
** BUILD FAILED **
The following build commands failed:
Ld /Users/lzh/Library/Developer/Xcode/DerivedData/App-gaskduvrghhdcwcbkdqpuxupzbfv/Build/Intermediates/App.build/Release-iphonesimulator/App.build/Objects-normal/i386/App normal i386
Ld /Users/lzh/Library/Developer/Xcode/DerivedData/App-gaskduvrghhdcwcbkdqpuxupzbfv/Build/Intermediates/App.build/Release-iphonesimulator/App.build/Objects-normal/x86_64/App normal x86_64
(2 failures)
解決方法
第一種:文人操作
- 第一種
- 在 podspec 文件中添加
s.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 arm64' }
雌澄,如果項目已經(jīng)設(shè)置pod_target_xcconfig
斋泄,添加到已有值的后面。
僅編譯64位镐牺,嘗試是否可以解決炫掐。
感謝評論區(qū)[傲慢的孑然]
的新建議, 我在cocoapods1.8.4 嘗試??
- 或第二種
- 在 podspec 文件中添加
s.pod_target_xcconfig = { 'ARCHS[sdk=iphonesimulator*]' => '$(ARCHS_STANDARD_64_BIT)' }
,如果項目已經(jīng)設(shè)置pod_target_xcconfig
睬涧,添加到已有值的后面募胃。
僅編譯64位,嘗試是否可以解決畦浓。
- 或第三種
-
在 podspec 文件中添加
s.pod_target_xcconfig = { 'VALID_ARCHS[sdk=iphonesimulator*]' => '' }
痹束,如果項目已經(jīng)設(shè)置pod_target_xcconfig
,添加到已有值的后面讶请。設(shè)置此處將在 模擬器編譯時不產(chǎn)生二進制文件祷嘶。 -
pod lint
命令添加--skip-import-validation
參數(shù),lint 將跳過驗證 pod 是否可以導(dǎo)入夺溢。 -
pod repo push
命令添加--skip-import-validation
參數(shù)论巍,push 將跳過驗證 pod 是否可以導(dǎo)入。 O雞兒K风响,可以試試嘉汰,不成功還有【第二種:張飛操作】
第二種:張飛操作
不就是編譯不通過嗎?
直接改源碼状勤,將編譯檢測跳過去鞋怀,老子不編了,
檢測的源碼在 validator.rb
文件 如何找到它持搜?
1. 終端 gem which cocoapods
輸出:/usr/local/lib/ruby/gems/2.3.0/gems/cocoapods-1.3.0.beta.2/lib/cocoapods.rb
2. 終端 open /usr/local/lib/ruby/gems/2.3.0/gems/cocoapods-1.3.0.beta.2/lib/
將第一步命令輸出的結(jié)果去掉最后的文件名cocoapods.rb
密似,將前面的路徑加到 open
命令的后面, 執(zhí)行命令后會在Finder打開一個lib
文件夾
3. 在當(dāng)前lib
目錄下有個cocoapods
文件夾,進入朵诫,validator.rb
文件就在這個文件夾里
如何修改它辛友?
找到下面的代碼
改成下面的樣子
這樣每次向倉庫推送podspec文件的時候,都會直接打印一下xcodebuild --help
然后就算作通過驗證了
接下來你就可以安心的 push 你的代碼了
像一些x86_64剪返,i386,不支持模擬器啦邓梅,這種都是小case脱盲,所有編譯錯誤都可以解決
注意
-
此方法因為太叼,不到萬不得已日缨,不能使用钱反,過分依賴容易走火入魔
- 一定在本地先以
:path
、:git
等的方式集成一下,確認沒問題后再往倉庫推 - 搞完以后記得改回到原來的代碼面哥,畢竟做庫是為了項目使用的哎壳,多點檢測也是為了保證質(zhì)量
第三種:正常卻又有點麻煩的操作
模擬器 32 位處理器測試需要 i386 架構(gòu),
模擬器 64 位處理器測試需要 x86_64 架構(gòu)尚卫,
真機 32 位處理器需要 armv7 ,或者 armv7s 架構(gòu)归榕,
真機 64 位處理器需要 arm64 架構(gòu)。
第二種方法可以將驗證的命令替換為 xcodebuild --help
吱涉,那么也就可以替換為正常的真機校驗命令:
command += %w(-sdk iphoneos12.2 -destination=generic/iOS ONLY_ACTIVE_ARCH=YES ARCHS=armv64)
刹泄。
將驗證的設(shè)備改為通用 iOS 設(shè)備 generic/iOS
,sdk 根據(jù)自己電腦 xcode 版本來設(shè)置 iphoneos12.2
怎爵,ARCHS 根據(jù)自己支持的真機選擇架構(gòu) arm64
特石,可以根據(jù)自己的電腦,仿照上面的命令進行更改鳖链。
此命令會驗證 pod 庫在真機上的表現(xiàn)姆蘸,效果應(yīng)該是最接近原本 cocoapods 命令的本意,但是里面的 sdk 版本 和 cocoapods 版本 在升級時都需要重新設(shè)置芙委。
參考文章
- cocoapods的github上有個issues
- 待解決 pod lib lint pod不支持i386編譯環(huán)境逞敷,如何避開