【问题标题】:Managing Static Library project as a module like Framework on iOS project in Xcode4在 Xcode4 中将静态库项目作为模块管理,如 iOS 项目上的框架
【发布时间】:2011-09-18 01:14:48
【问题描述】:

包括我在内的许多人都在尝试为 iOS 制作一种静态库框架来归档某种模块化。框架是执行此操作的最佳方法,但 Apple 不提供它,并且解决方法效果不佳。

https://github.com/kstenerud/iOS-Universal-Framework/tree/master/Fake%20Framework/Templates

  1. 无法从构建阶段的链接选项卡中引用假框架。
  2. 真正的框架需要修改系统设置。仍然无法在每个部分上顺利运行。

问题是静态库需要头文件,如果没有脚本,就不可能在不同项目的另一个位置引用项目的头文件。并且脚本打破了 IDE 的文件管理抽象。

我怎样才能像使用方便的模块方式一样使用静态库项目? (只需将项目拖入另一个项目即可完成嵌入)

【问题讨论】:

    标签: xcode frameworks xcode4 project-management static-libraries


    【解决方案1】:

    解决方案。

    1. 转到项目目标构建设置
    2. 查找 Public Headers 文件夹路径。 (定义名称 = PUBLIC_HEADERS_FOLDER_PATH
    3. 设置为YourLibrary.framework/Headers。我使用${PRODUCT_NAME}.framework/Headers 与项目名称自动同步。
    4. 转到构建阶段并找到复制标题步骤。
    5. 将所有必需的标题移至 Public 窗格。

    现在所有头文件都将像 Framework 一样形成并与产品二进制文件一起复制。 IDE 会将它们作为一个单元复制到某个临时文件夹中,例如应用程序的构建文件夹。所以引用app项目可以自动使用headers。

    这是一个技巧。创建的目录结构不是真正的框架。因为它不包含任何二进制文件。然而,我们不需要真正的框架来归档这个功能。 IDE 与没有任何二进制文件的框架一起工作。而且我不想在没有关于内部结构的文档的情况下破解 IDE。


    这很好用,但是当您存档 时会遇到一些问题。发生这种情况是因为 Xcode4 在归档时表现得特别。这是解决方法。

    1. 对于每个嵌入式库项目,SKIP_INSTALL = YES 在目标构建设置中。
    2. 对于最终产品项目,FRAMEWORK_SEARCH_PATHS = "${OBJROOT}/UninstalledProducts"。注意这个设置应该只为Release构建模式设置。

    现在它会很好地存档。


    在跨平台库的情况下,可以有多个平台的多个项目。但有时 Xcode 会在编译成功的情况下将某些产品显示为红色。

    这是 Xcode 的一个错误。 IDE 显示取决于 Project 构建设置的SDKROOT。因此,如果您在Target 上以不同方式设置SDKROOT,它将不起作用。您可以检查更改 Project 构建设置的SDKROOT 后产品将变为黑色。有关详细信息,请参阅此 Open Radar 条目。

    http://openradar.appspot.com/9636211

    如果您想修复此错误,请将此报告给Apple's Radar。重复的错误会引起 Apple 的注意。只需复制并粘贴我的报告 :)

    【讨论】:

    • 这是出色的侦查,也是我发现的唯一处理 Xcode 无法正确链接到非对等目录的子模块的问题。谢谢。
    【解决方案2】:

    【讨论】:

    • 不幸的是,我找不到引用由嵌入到另一个项目中的项目生成的库的方法。以这种方式配置。以我的方式是可能的:)
    【解决方案3】:

    我已经更新了模板以取消脚本目标。它现在从您的常规目标构建通用框架,因此您可以将其包含在工作区中或作为项目依赖项。

    使用真正的框架目标,您只需将其添加到“Link Binary With Libraries”中,它就会正常显示。

    使用伪造的框架,Xcode 无法识别目标类型,因此您需要手动添加链接命令。例如,假设您的框架名为 Foo:

    1. 展开框架项目的“Products”组,然后将“Foo.framework”拖入应用目标的“Link Binary With Libraries”构建阶段。

    2. 在您的应用目标中,编辑构建设置中的“Other Linker Flags”并添加:“-framework Foo”

    任何不确定我们在说什么的人的框架模板链接:https://github.com/kstenerud/iOS-Universal-Framework

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-10
      • 2015-05-07
      • 2011-07-18
      • 1970-01-01
      • 2012-10-22
      • 2017-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多