如何在Xcode中将构建阶段复制到另一个目标?

14

我有一个包含200个资源的Copy Bundle Resources构建阶段。现在我需要创建一个不同类型的新目标(从应用程序到静态库)。所以很遗憾,我不能只是复制目标:(

无论如何,逐个手工添加每个资源都是无意义的。我曾经试图一次性复制它们,但所有尝试都失败了。我打开了一个新窗口,试图将它们拖到新目标的阶段中,但这行不通。

我该如何将Copy Bundle Resources构建阶段复制到另一个目标?该目标位于同一项目中,因此没有文件引用问题。


你尝试过复制目标,然后将“NewTarget->Build Settings->Linking->Mach-O Type”设置为“Static Library”,并将“NewTarget->Build Settings->Deployment->SkipInstall”设置为“NO”吗? - Michał Zygar
我尝试了上述方法,但Xcode抱怨我设置了错误的类型(即静态库)。我还尝试在我的复制目标上转换了各种其他设置,但似乎没有什么效果。 - Michael
我会尝试比较项目文件的二进制代码,看看能否复制粘贴。先试一个,看看能否复制成功。 - johndpope
Eonil:如果你解决了这个问题,也许你可以回答自己的问题。未回答的问题是没有帮助的。如果你找到了解决方案,请分享! - Warren P
@WarrenP 我自2012年以来没有尝试过这个,所以我不知道可行的答案。据我记得,最后一个部分工作的解决方法是选择文件并在相应菜单上使用 Reveal in Project Navigator 功能。有时会起作用,但如果我有很多文件,它很容易失败。 - eonil
2个回答

3

我通过在文本编辑器中打开.pbxproj文件并查找与我的目标相关的正确行来解决这个问题。

这很棘手,因为Xcode使用id系统来填充项目文件(顺便说一句,我是在从Cocoapods迁移到Carthage时这样做的,所以我没有使用那个设置)

需要一些努力才能找到您的目标id,但在Xcode 9中,您应该有类似于下面的内容:

targets = ( EDBC6D6D1E0150850033868B /* target 1 */, EDF960C71E1963E0001A29CE /* fancy target */, EDF960D71E196DF3001A29CE /* Service Extension */, );

在描述项目的/* Begin PBXProject section */部分。搜索.pbxproj文件以查找您的id,以查找列出目标构建阶段id的类似结构的buildPhases

buildPhases = ( 47120FBF1F4343A900C27821 /* Sources */, 4712100B1F4343A900C27821 /* Frameworks */, 4712100D1F4343A900C27821 /* Resources */, 471210251F4343A900C27821 /* ShellScript */, 476673451F5F1ACD00567450 /* Embed App Extensions */, );

现在,找到所需的id(在OP的情况下为Resources),您将找到资源列表。您可以将其与源目标的列表进行比较并复制粘贴。


1
非常感谢!在Xcode 10中,我使用的唯一有效的东西。 - Renata Faria

0

Xcode 的版本是多少?新目标是从模板开始还是空白的?

静态库具有“复制捆绑资源”构建阶段是什么意思?它不会使用它链接到的东西的资源吗?


这个问题我很难回忆起当时的解决方法,因为我已经不在处理这个项目了。而且,这是一个关于2012年Xcode的旧问题(可能是版本4.x)。自那以后,Xcode已经发生了很多变化,所以这个问题可能不适用于当前版本的Xcode。 - eonil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接