在 XCode 5 中使用多个资产目录的问题
Posted
技术标签:
【中文标题】在 XCode 5 中使用多个资产目录的问题【英文标题】:Issue with using multiple asset catalogs in XCode 5 【发布时间】:2013-10-21 13:26:56 【问题描述】:我有一个应用程序有 2 个变体,只是品牌不同。对于每个版本,我在资产目录中都有一个 AppIcon 和 LaunchImage。我为每个版本创建了不同的目标。在第二个版本中,当我尝试在第二个资产目录中选择 AppIcon 时,它只是默认为第一个。删除第一个资产目录似乎可以解决它,但我更喜欢一个不那么“hacky”的解决方案。
【问题讨论】:
我不知道您是否这样做,但每个目标应该只有一个目录(在您的情况下)。您可以在项目的构建设置中更改哪个目标获取哪个目录。 这两个资产目录位于不同的目标中,但都显示在两个目标的常规部分(应用程序图标和启动图像)中。 我发现,如果您将第二个资产目录中的冲突资产重命名,它似乎可以工作,即将 AppIcon 重命名为 AppIcon1 Xcode project with multiple targets and multiple assets catalogs的可能重复 【参考方案1】:我认为迄今为止我想出的最佳解决方案是在后续资产目录中重命名资产。例如,您可能有 2 个资产目录,其中包含名为 AppIcon 和 LaunchImage 的资产。在第二个资产目录中,我将 AppIcon 和 LaunchImage 重命名为 AppIcon1 和 LaunchImage1。所以现在我可以在目标构建设置的“常规”部分中选择它们。
【讨论】:
如果您将 2 个具有不同名称的不同图像分别放入其 2 个资产目录之一,并调用不应包含在目标中的代码图像,您会发现它意外地存在.如何避免? 找到解决方案 - 我的问题发生是因为我使用的是 CocoaPods,并且他们的脚本编译了所有 .xcassets 文件夹。解决方案在这里:***.com/questions/19488580/…. @DisableR 我只是重命名 AppIcon 和 LaunchImage 以便您可以从目标设置的“常规”部分的下拉列表中选择它。其他图像可以保持不变。【参考方案2】:-
对两个目标使用相同的资产目录。
检查它是否包含在两个目标中(使用文件检查器检查目标成员资格)。
在每个目标上选择适当的资产名称(图标)。
这应该可行,我将它与 8 个目标一起使用,所以...
顺便说一句,我发现有时启动图像在使用少数目标时不起作用,因此您可能需要复制然后选择它(Xcode 错误)。
【讨论】:
您是说您有一个资产目录,其中包含所有目标的所有资产,即第一个目标的 AppIcon,第二个目标的 AppIcon2?如果是这样,我不确定这是一个好主意。每个应用程序都将包含它不使用的资产,并且 iPad 的启动图像很大。 @MarkHorgan 是的,这就是我所拥有的。我认为你是对的,但其他方法对我来说问题太多了......直到 Xcode 5 会更好...... 我的错误没有包含在两个目标中。【参考方案3】:就我而言,我使用的是可可豆荚。可可豆荚脚本Pods-resources.sh
不知何故导致了这个问题。从脚本中删除资产部分解决了这个问题。
确保清理您的项目并删除派生数据文件夹。
要删除的部分可以在这里找到:
https://***.com/a/21309102/832111
【讨论】:
从Pods-resources.sh
中删除这些部分后,用于检查每个资产目录的目标的小窗口不会出现。这是预期的吗?如果是这样,我现在如何设置它们?
这个!查看这个 CocoaPods 问题以了解解决方法。 jinthagerman 的 post_install 钩子是一个很好的解决方案:github.com/CocoaPods/CocoaPods/issues/1546【参考方案4】:
在经历了很多挫折之后,我拥有了干净、成功、独立的图像资产。这对我有用:
我使用 XCode 为第一个目标(文件、新建、文件、资产)创建图像目录。它 仅具有该目标的成员资格。正如马克霍根建议的那样,我 命名内部 appIcon 和 launchImages,如果只是为了使它更容易 为了我自己。
接下来,我使用 删除参考的选项。
我重复了第 1 步并为第二个目标创建了一个图像目录。它有第二个会员资格 仅限目标。将目录分配给我的目标很棘手,因为 XCode 仅提供“不使用图像目录”作为选项。我选择了那个选项,然后 XCode 提供了“使用资产目录”。我选择了我的新catagot。我再次将内部 appIcon 和 launchImages 命名为 参考第二个目标,所以我可以识别它。
与 2 中一样,我使用删除引用删除删除了目录。
离开 XCode 片刻,我打开了一个 Finder 窗口并找到了我的两个 不同的 images.xcassets 文件已放在不同的 XCode 的目录。我将这些文件重命名为每个引用他们的 目标。 (我也将它们移到主文件夹中,但当然 这是一个偏好。)
回到 XCode,我(重新)添加了 xcasset 文件,一次一个,确保它们被适当地添加到 他们的目标并复制到资源。
然后在 XCode 中我选择了 每个目标并使用常规选项卡正确指定图像 每个目标的目录。
【讨论】:
【参考方案5】:我正在运行多个目标,每个目标都有自己的资产目录文件,包括 AppIcon、LaunchImage 和我在故事板中用于背景的自定义。
听起来我遇到了同样的问题,在为 App Icons 和 Launch Images 选择资产目录时,它在构建时使用了错误的目录。我通过修改每个资产目录(.xcassets 文件)的“目标成员资格”来解决它。它已设置为每个 xcassets 文件只有与其相关的目标。因此,每个资产目录只选择一个目标。现在,每个目标都可以使用正确的 AppIcon 和 LaunchImage。
【讨论】:
请在下面查看我对 Mark Horgan 回答的评论。【参考方案6】:我使用了@user216661 解决方案,但就我而言,我不必执行步骤 2-7。
我为特定目标创建了一个具有特定名称的资产文件夹(在我的例子中,每个目标一个资产文件夹)。然后我通过从 Finder 拖放图像将图像添加到那些 xcassets 文件夹中。图标和启动图像也是如此。我不必为每个目标自定义图形名称。
在此解决方案中,您不会在资产文件夹之外存储任何图形。
【讨论】:
【参考方案7】:在构建设置选项中修改资产怎么样。对我来说,它有效。
【讨论】:
以上是关于在 XCode 5 中使用多个资产目录的问题的主要内容,如果未能解决你的问题,请参考以下文章
如何告诉资产目录 (.xcassets) 对多个图像井使用相同的图像?