我们正在使用新的构建系统和Cocoapods 1.7.5来开发我们的Xcode项目。我们的项目(让我们称它为Y)实际上是一个开发pod,但我们还编写了一些代码来创建应用程序演示(你知道的,为了使构建更快,迭代更快)。这些演示代码(例如
在开发过程中,Y的大部分变化发生在dev pod部分,因此我们需要确保每个更改都包含在X执行
最近我们遇到了一个问题:
经过多次在Google上搜索“多个命令生成assets.car”后,我们终于看到一个靠谱的解释:说明如下所示:
然后我们开始质疑:谁是幕后推手?谁负责将
我们以为我们在错误地使用
AppDelegate.swift
、启动任务等)未包含在开发pod中。其余约90%的源代码和资源文件(如i18n字符串和图像资源)被打包到开发pod中供另一个项目(让我们称之为X)使用。在开发过程中,Y的大部分变化发生在dev pod部分,因此我们需要确保每个更改都包含在X执行
pod install
时。最近我们遇到了一个问题:
error: Multiple commands produce '/Users/x/Library/Developer/Xcode/DerivedData/Y-cawteybtitmeiafweribgqzkuhnr/Build/Products/Debug-iphoneos/Y.app/Assets.car':
1) Target 'Y' (project 'Y') has compile command with input '/Users/name/DEV/workspace/Y/SupportFiles/Assets.xcassets'
2) That command depends on command in Target 'Y' (project 'Y'): script phase “[CP] Copy Pods Resources”
经过多次在Google上搜索“多个命令生成assets.car”后,我们终于看到一个靠谱的解释:说明如下所示:
当我们从*.xcassets的"复制bundle资源"—>Assets.car
* [CP]复制pods资源的*.xcassets—>其他Assets.car
第一个覆盖了新构建系统中的第二个,这就是原因。
[CP] Copy Pods Resource
的输出文件中手动删除${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Assets.car
时,错误消失了,一切正常。但是,每当我们git checkout
到另一个分支,或者运行pod install
或pod update
时,${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Assets.car
再次出现在[CP] Copy Pods Resource
的输出文件中的可能性非常高。我们需要不断地手动删除它,这很繁琐和令人沮丧。然后我们开始质疑:谁是幕后推手?谁负责将
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Assets.car
添加到[CP] Copy Pods Resource
的输出文件中?我们的注意力集中在Y.podspec
上,发现了以下几行: s.resource_bundles = {
'Y' => ['Resources/*'], # assets, lottie etc.
'YAuto' => ['auto_resources/*'] # i18n strings etc.
}
我们以为我们在错误地使用
资源(resources)
包,因此我们再次搜索了谷歌(Google)。令人惊讶的是,在官方文档中推荐使用资源(bundle)
包而不是资源(resources)
。此外,我们没有发现任何关于资源(bundle)
包的不当用法,这使我们无法选择。
有人能帮忙吗?我想也许我们可以在Podfile
的post_install
脚本中修补Y.xcworkspace
,但我不知道怎么做。