【发布时间】:2020-03-14 15:52:05
【问题描述】:
我们正在为我们的 Xcode 项目使用新的构建系统和 Cocoapods 1.7.5。我们的项目(我们称之为 Y)实际上是一个开发 pod,但我们也编写了一些代码来创建应用程序演示(您知道,使构建更快,迭代更快)。这些演示代码(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 上搜索 multiple commands produce assets.car 几个小时后,我们终于看到了一个似是而非的 explanation:
*.xcassets of Copy Bundle Resources --> Assets.car
*.xcassets of [CP] Copy Pods Resource --> other Assets.car
New Build System中第一个覆盖第二个,就是这个原因。
当我们从[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.
}
我们认为我们使用了错误的resource_bundles,所以我们再次在 Google 上进行了查找。令人惊讶的是,official documentation 推荐使用 resource_bundles 而不是 resources。此外,我们找不到任何关于resource_bundles 的不当用法,让我们别无选择。
有人可以帮忙吗?我在想也许我们可以在Podfile 的post_install 脚本中修补Y.xcworkspace,但我不知道怎么做。
【问题讨论】:
-
不幸的是,您的链接中提出的解决方案都没有成功解决我的问题。还是谢谢!
-
带有一些变通方法的相关帖子:dev.to/kylefoo/…
标签: ios xcode cocoapods podspec