如何在主项目xcode 4.1中包含一个包

Leo*_*rdo 31 workspace xcode bundle xcode4

[更新03/04/2015]

这个问题现在已经有4年了,适用于我现在在主题中指定的特定版本的XCode.


我已经搜索了很多这个论点,但我找不到解决方案,我甚至发布了stackoverflow,但我很快就删除了这个问题,因为访问量很少.现在我再试一次.

我有一个工作区,有两个不同的项目A和B.

B有两个目标,一个构建静态库Blib.a,另一个构建一个束B.bundle.所有这些都构建在派生目录中.

在项目AI中,可以轻松地从构建阶段添加静态库.但是我找不到包含捆绑包的方法.从A中的"复制资源"选项卡看不到B.bundle.因此,我需要手动添加所有这些含义.我还考虑过使用脚本,但我想将它作为最后一个选项.

有人为此解决了问题吗?我错过了什么 ?

谢谢

Leo*_*rdo 19

经过长时间的调查,它出现了没有简单的方法来做到这一点.B.bundle永远不会对A项目可见,并且工作空间中没有设置可以更改它.此时有三种解决方案:

  • 从"复制资源 - >其他"手动包含捆绑包,我从这开始,但每次有更改,你必须删除并再次包括捆绑
  • 创建一个在构建阶段运行的脚本,如果所有内容都内置在PRODUCTS目录中,您可以轻松找到该捆绑包并自动复制到app.bundle中.这不是一个糟糕的解决方案.如果您正在使用svn,则脚本已包含在项目中,并且用户可以免费使用该脚本而无需额外的工作.
  • 根据Apple技术支持的建议,使用文件夹references.Build捆绑B到一个文件夹,并使用"为任何添加的文件夹创建文件夹参考"选项将此类文件夹添加到项目A. 每次构建时,Xcode 4都会将您的软件包更新到该文件夹​​中.添加的文件夹将在项目A中显示为蓝色.

这就是它,我个人使用脚本,因为如果你使用标准的xcode引用变量,如BUILT_PRODUCTS_DIR等,这个解决方案是路径独立的,而shell脚本只是一个cp -rf

[更新03/04/2015]

我想指出这个问题现在已经有4年了.当时没有太多"官方"选择.我甚至采访过Apple技术支持,它提出了解决方案3作为唯一可用的解决方案.当然,事情现在很可能已经改变了,而且有更好的解决方案.只是说,我还想补充一点,上面的三个不是"黑客"而是"解决方案",可能在技术上已经过时,但它们现在仍然可以使用.我打算将"黑客"视为"黑客",这意味着它可能无法在未来的软件版本中发挥作用.

  • 提示:我使用了类似`cp -R -f $ BUILT_PRODUCTS_DIR/MyBundle.bundle $ BUILT_PRODUCTS_DIR/$ CONTENTS_FOLDER_PATH /`的东西,它运行得很好. (3认同)
  • 在使用`cp`命令确保遵循符号链接时,使用`-L`选项很重要.否则,当您尝试归档二进制文件时,验证将失败,*.bundle资源将无法在*.app文件中使用.示例:`cp -R -L -f $ BUILT_PRODUCTS_DIR/resource.bundle $ BUILT_PRODUCTS_DIR/$ CONTENTS_FOLDER_PATH /` (3认同)

0xc*_*ced 8

我就是这样做的.

  1. 拖放B.bundle从项目B→产品→B.bundle到复制包资源建设项目A你的应用程序的阶段(选择创建组当被问及选项).这将添加B.bundle到项目A大纲的根目录中.如果您愿意,可以将其移动到附近的Frameworks目录中Blib.a.

  2. Identity and Type右侧面板(Utilities区域)中选择B.bundle并检查其位置.默认情况下,Xcode选择Relative to Project.这是错误的,请选择相对于构建产品.

  3. 现在的路径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; };
    
    Run Code Online (Sandbox Code Playgroud)
  4. 保存project.pbxproj文件.Xcode会自动重新加载您的项目,您的应用程序应该构建得很好.