[更新03/04/2015]
这个问题现在已经有4年了,适用于我现在在主题中指定的特定版本的XCode。
我已经搜索了很多这个论点,但我找不到解决方案,我甚至发布了stackoverflow,但我很快就删除了这个问题,因为访问量很少。 现在我再试一次。
我有一个工作区,有两个不同的项目A和B.
B有两个目标,一个构建静态库Blib.a,另一个构建一个捆绑B.bundle。所有这些都构建在派生目录中。
在项目A中,我可以轻松地从构建阶段添加静态库。但是我找不到包含捆绑包的方法。 A中的“复制资源”选项卡不显示B.bundle。 因此,我需要手动添加所有含义。 我也考虑过使用脚本,但我想将它作为最后一个选项使用。
有人为此解决了问题吗?我错过了什么吗?
感谢
答案 0 :(得分:19)
经过长时间的调查后,发现这并不容易。 B.bundle永远不会对A项目可见,并且工作空间中没有设置可以更改它。 此时有三种解决方案:
就是这样,我个人使用脚本,因为如果你使用标准的xcode引用变量(例如BUILT_PRODUCTS_DIR等),这个解决方案是路径独立的,而shell脚本只是一个cp -r-f
[更新03/04/2015]
我想指出这个问题现在已经有4年了。当时没有太多“官方”选择。我甚至采访过Apple技术支持,它提出了解决方案3作为唯一可用的解决方案。当然,事情现在很可能已经改变了,而且有更好的解决方案。只是说,我还想补充一点,上面的三个不是“黑客”而是“解决方案”,可能在技术上已经过时,但它们现在仍然可以使用。我打算将“黑客”视为“黑客”,这意味着它可能无法在未来的软件版本中发挥作用。
答案 1 :(得分:8)
我是这样做的。
将项目B中的B.bundle
→产品→B.bundle拖放到项目A中应用程序的复制包资源构建阶段(选择创建当被问及时,分组选项。这将在项目A大纲的根目录中添加B.bundle
。如果您愿意,可以将其移动到Blib.a
附近的 Frameworks 目录中。
选择B.bundle
并在身份和类型右侧面板(Utilities area)中查看其位置。默认情况下,Xcode选择 Relative to Project 。这是错误的,请选择相对于构建产品。
B.bundle
的路径现在看起来像../../../../../../../../Projects/MyApp/B.bundle
。这不是你想要的,但你可以很容易地解决它。在文本编辑器中打开ProjectA.xcodeproj/project.pbxproj
,搜索此路径并删除B.bundle
以外的所有内容。您的project.pbxproj
应如下所示:
explicitFileType = wrapper.cfbundle; name = B.bundle; path = "B.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
保存您的project.pbxproj
文件。 Xcode会自动重新加载您的项目,您的应用程序应该构建得很好。
答案 2 :(得分:4)
在搜索了很长时间并且多次失败之后,我发现这个资源是一个非常好的教程,可以创建静态库并在主项目中包含bundle,甚至可以分发给可能使用你的库的第三方开发人员。
绝对推荐:
答案 3 :(得分:1)
在项目A中,项目B的产品是您的方案的构建操作中的依赖项吗?我认为您可能必须设置此依赖项(有时禁用自动依赖项发现选项最好),以使其显示并可用于复制到另一个目标。我相信这是因为它在构建之前并不存在(如图像资源文件),并且Xcode需要确保在从另一个目标处理它之前构建它。
答案 4 :(得分:1)
从Xcode 5.1.1开始,我能够将B.bundle从Project Navigator拖放到项目A Build Phases的Copy Bundle Resources列表中。我认为创建B.bundle目标不是问题。
答案 5 :(得分:0)
Generic iOS Device
。创建非模拟器参考需要执行此步骤。.bundle
拖到另一个项目的Copy Bundle Resources
。.bundle
中选择Project navigator
,然后将其Location
更改为Relative to Build Products
确保将
.bundle
添加到静态库的Target Dependencies