在多个目标之间共享相同的资产

neo*_*eye 1 xcode nsbundle ios run-script

我正在寻求有关如何在项目中的 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' | 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 文件。有许多遗留代码使用硬编码路径查找。返工需要时间。我已经在小项目上做了这个改变。这是一个非常优雅的解决方案。然而,如此规模的返工将需要大量时间。

pso*_*ice 5

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

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