Xcode10 Archive Error - Multiple command ... 'xxx/Info.plist' 解決方案

報(bào)錯(cuò)信息

:-1: Multiple commands produce '/Users/XXX/Library/Developer/Xcode/DerivedData/XXX-cqedfsiaqyswfpdkffoiytinrkcj/Build/Intermediates.noindex/ArchiveIntermediates/XXX/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/Info.plist':
1) Target 'XXX' (project 'Pods') has copy command from '/Users/XXX/Documents/SourceCode//XXX/Pods/XXX/XXX/Info.plist' to '/Users/XXX/Library/Developer/Xcode/DerivedData/XXX-cqedfsiaqyswfpdkffoiytinrkcj/Build/Intermediates.noindex/ArchiveIntermediates/XXX/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/Info.plist'
2) Target 'XXX' (project 'Pods') has copy command from '/Users/XXX/Documents/SourceCode//XXX/Pods/XXX/XXX/Info.plist' to '/Users/XXX/Library/Developer/Xcode/DerivedData/XXX-cqedfsiaqyswfpdkffoiytinrkcj/Build/Intermediates.noindex/ArchiveIntermediates/XXX/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/Info.plist'
3) Target 'XXX' (project 'Pods') has copy command from '/Users/XXX/Documents/SourceCode/XXX/Pods/XXX/XXX/Info.plist' to '/Users/XXX/Library/Developer/Xcode/DerivedData/XXX-cqedfsiaqyswfpdkffoiytinrkcj/Build/Intermediates.noindex/ArchiveIntermediates/XXX/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/Info.plist'
4) Target 'XXX' (project 'Pods') has copy command from '/Users/XXX/Documents/SourceCode/XXX/Pods/XXX/XXX/Info.plist' to '/Users/XXX/Library/Developer/Xcode/DerivedData/XXX-cqedfsiaqyswfpdkffoiytinrkcj/Build/Intermediates.noindex/ArchiveIntermediates/XXX/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/Info.plist'

原因

Xcode10使用了新的task的build方式,之前在做私有庫的時(shí)候沒有很嚴(yán)格,將私有庫的Info.plist文件也放在了Pod-Spec文件中引入到工程了,所以新的打包方式將這些Info.plist和主工程的都copy到相同的地方發(fā)生了報(bào)錯(cuò)。

解決方案

原因知道了那么解決方案就很清楚--將這些Info.plist從工程中刪除掉:

  1. 修改私有庫的spec文件,然后升級每一個(gè)私有庫。這是最正確的但是有很多時(shí)候項(xiàng)目私有庫很多,依賴很復(fù)雜,升級一次成本很高。
  2. 既然使用了Pod那就在Pod腳本上想想辦法,很顯然可有在Podfile的Hook方法,post_install里面講pod庫的Info.plist引用刪除掉,代碼如下:
### HOOK POST
post_install do |installer|
    installer.pods_project.native_targets.each do |natviTarget|
        natviTarget.build_phases.each do |buildPhase|
            info_plist_ref = buildPhase.files.find { |f| f.file_ref.to_s == "Info.plist" }
            if info_plist_ref
               buildPhase.remove_reference(info_plist_ref)
            end
        end
    end
end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容