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

时间:2012-12-11 09:55:09

标签: ios xcode nsbundle 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'| xargs -t -I {} cp -r Assets.bundle / {}“$ {CONTENTS_FOLDER_PATH} /”

  3. 然而,当我运行应用程序时,UI看起来不对劲。 .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。
    4. 在这个项目中,我有> 1000个图像文件和> 150个.xib文件。有许多遗留代码使用硬编码路径查找。返工需要时间。我在小项目上做了这个改变。这是一个非常优雅的解决方案。但是,这种尺寸的返工会花费很多时间。

2 个答案:

答案 0 :(得分:4)

为什么不使用XCode的集成处理?选择一个资产,在右侧的实用工具面板的“目标成员资格”部分中选择应包含哪些目标。我使用它在免费和付费版本之间切换xibs,图形等,至少对此很有用。

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

答案 1 :(得分:2)

我知道这是一个老问题,但我遇到了同样的问题,因此我发现了使用xcodeproj库执行此操作的方法。如果您需要,可以在以下位置查看:https://github.com/dalu93/DLSharedBundleResources/

它需要两个目标作为参数(一个作为"完成"目标,另一个作为"完成目标")并添加丢失的文件。如果您打开.rb文件,还会找到blacklist var,您可以在其中插入要从" merge"中排除的文件名数组。

我希望它可以帮到你