组件化开发资源文件打包报错
问题
CocoaPods组件化开发打包报错 xcode multiple commands produce …/xxx/Assets.car
我在pod组件里面使用方法
s.resources = ['DLImageTest/Assets/*.xcassets','DLImageTest/Assets/*.png']
s.resources = ['DLImageTest/Assets/*.png']
s.resources = ['DLImageTest/Assets/*.xcassets']
这三种方式都会在打包的时候提示资源文件被多次生成,报错信息如下:
Multiple commands produce '/Users/luowei/Library/Developer/Xcode/DerivedData/LWAudioPlayer-ebxyxcdiplyaeucipfqphpogtkzh/Build/Products/Debug-iphonesimulator/LWAudioPlayer_Example.app/Assets.car':
1) Target 'LWAudioPlayer_Example' (project 'LWAudioPlayer') has compile command with input '/Users/luowei/projects/libs/mybinlibs/LWAudioPlayer/Example/LWAudioPlayer/Images.xcassets'
2) That command depends on command in Target 'LWAudioPlayer_Example' (project 'LWAudioPlayer'): script phase “[CP] Copy Pods Resources”
这是使用s.resources = [‘DLImageTest/Assets/.xcassets’]得到的提示,如果使用s.resources = ['DLImageTest/Assets/.png’]会提示xcode multiple commands produce …/xxx/x.png被多次生成。
解决方案
方案一
使用s.resource_bundles方式加载pod资源
s.resource_bundles = {
'DLImageTest' => ['DLImageTest/Assets/*.xcassets','DLImageTest/Assets/*.png']
}
这种方式加载资源不会提示资源重复加载,资源会被加载到DLImageTest.bundles里面,但如果项目是组件化开发有上百个pod组件的话,这种方式会引起包体积的增加。
方案二
在Podfile文件中最前面添加以下代码解决:
install! 'cocoapods', :disable_input_output_paths => true
方案三
在Podfile文件中最前面添加以下代码解决:
use_frameworks!
当使用了use_framework!之后,CocoaPods会对每个Pod单独建立一个动态链接库的Target,每个Pod最后会直接以Framework集成到App中。而资源方面,由于Framework本身就能承载资源,所有的资源都会被拷贝到Framework文件夹中而不再使用单独的脚本处理