1

我正在就如何在我的项目中的 4 个目标之间共享资产寻求建议:A.app、B.app、C.app、D.app


方法 1 - 最佳情况。我试过这个没有成功

  1. 创建一个 Assets.bundle 目标。
  2. 在“运行脚本”阶段,将 Assets.bundle 中的文件复制到 *.app 目标中,如下所示:

    cd "${BUILT_PRODUCTS_DIR}" ls Assets.bundle | sed '/Info.plist/d' | xargs -t -I {} cp -r Assets.bundle/{} "${CONTENTS_FOLDER_PATH}/"

但是,当我运行该应用程序时,用户界面看起来不对。.xib 被加载,但没有图像被加载!图像文件和 nib 文件似乎已正确复制到 .app 文件夹中。我的假设是编译的 .nib 文件假定它位于 Assets.bundle 文件夹内,从而解释了为什么它位于 Assets.bundle 文件夹外时不起作用。

我在这种方法中遗漏了什么吗?


方法 2 - 未经测试

创建一个由 {A,B,C,D}.app 目标#imported 的 Assets.xcconfig 文件。


方法 3 - 未经测试

将 A.app 目标中的“复制捆绑资源”镜像到 {B,C,D}.app 目标

使用 ruby​​ 脚本,我可以更新“project.pbxproj”文件。


方法 4 - 我目前的方法

在 {A,B,C,D}.app 目标上手动维护“复制捆绑资源”。

编辑:我想放弃这种“目标会员”方法,因为它是一个大项目,并且有很多人在做出贡献。


方法 5 - 最坏情况

  1. 创建一个 Assets.bundle 目标。
  2. 将 Assets.bundle 文件夹复制到 *.app 目标中。
  3. 更改所有 [NSBundle mainBundle] 代码,因此它使用 Assets.bundle 代替。

在这个项目中,我有 >1000 个图像文件和 >150 个 .xib 文件。有很多遗留代码使用硬编码路径查找。返工需要时间。我在小项目上做了这个改变。这是一个非常优雅的解决方案。然而,这种规模的返工将花费大量时间。

4

2 回答 2

4

为什么不直接使用 XCode 的集成处理?选择资产,在右侧实用程序面板的“目标成员资格”部分中选择应包含的目标。我用它在免费和付费版本之间切换 xib、图形等,至少对此非常有用。

忘了提一下:如果您包含同名文件的变体,为了更容易将它们放在文件夹或捆绑包中,以便将它们分开。然后使用包/文件夹名称向目标添加定义,以便您可以从任何路径自动加载它们。

于 2012-12-11T10:11:04.797 回答
2

我知道这是一个老问题,但我遇到了同样的问题,所以我发现了一种使用xcodeproj图书馆的方法。如果您愿意,可以在以下位置查看:https ://github.com/dalu93/DLSharedBundleResources/

它将两个目标作为参数(一个作为“完成”目标,另一个作为“完成目标”)并添加丢失的文件。如果您打开.rb文件,您还会发现一个blacklistvar,您可以在其中插入要从“合并”中排除的文件名数组。

希望对你有帮助

于 2015-07-15T17:20:51.060 回答