【问题标题】:Share same assets between multiple targets在多个目标之间共享相同的资产
【发布时间】:2023-03-27 05:16:03
【问题描述】:

我正在就如何在我的项目中的 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 文件。有很多遗留代码使用硬编码路径查找。返工需要时间。我在小项目上做了这个改变。这是一个非常优雅的解决方案。但是,这种尺寸的返工需要很多时间。

【问题讨论】:

  • “目标会员”不能满足您的需求吗?
  • @ArtGillespie 'Target Membership' 是我目前的方法(方法 4),风险太大。团队中的某个人可能会忘记向其中一个目标添加资产。我需要保证所有目标的资产都是相同的。

标签: ios xcode nsbundle run-script


【解决方案1】:

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

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

希望对你有帮助

【讨论】:

  • 非常有帮助!我为你的项目加注了星标。 :)
【解决方案2】:

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

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

【讨论】:

  • 这是我目前的方法(方法 4)。我正在从事的项目非常庞大,我们是一个庞大的团队。重要的是资产完全相同。如果团队中的某个人忘记添加资产,则应用程序可能会不同步。我想尽量减少这种风险。
  • 这是一个很好的解决方案,可以在同一个项目中的多个目标之间共享资产(这是原始发布者所要求的)。不幸的是,它似乎不适用于同一工作区中不同项目中的目标,这是我目前正在尝试做的。
猜你喜欢
  • 2021-07-13
  • 2012-07-22
  • 1970-01-01
  • 2015-10-16
  • 2020-07-09
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 2019-10-07
相关资源
最近更新 更多