【问题标题】:How to build iOS framework with XCode 6如何使用 XCode 6 构建 iOS 框架
【发布时间】:2015-08-18 13:41:45
【问题描述】:

我知道familiar tutorials 在这方面,但框架 XCode 6 模板的引入改变了游戏规则。

我已经看过 WWDC 2014 video 关于构建现代框架的内容,但它更多地讨论了在单个项目中构建扩展、框架和应用程序。它没有说明我用它制作的框架是否真的可以在任何项目中重用。

我正在以 XCode 6 方式构建框架(文件->新项目->框架和库->Cocoa Touch 框架),但是当我将它导入我的测试应用程序项目(与框架项目分开)时 - 我不断得到各种错误。

示例:在框架内包含非模块化标头,等等。

我知道这不是它所说的,而且无论我在做什么,都缺少一些步骤。 older tricks 可能对每个人都有效,但我根本找不到在 XCode 6 之后遵循哪种方式。

例如,一个框架需要some folder structure,但 XCode 6 在构建它时不符合它。这样对吗?如果没有,如何更改 XCode 构建框架文件夹层次结构的方式?

我是回到老学校还是我在 XCode 6 中搞砸了一些我无法创建可重用框架的小东西?

【问题讨论】:

  • 使用捆绑包创建了一个框架和 nib。但是 nib 无法从 xcasset 加载图像。如何强制 nib 从其自己的 xcasset 加载图像(xcasset 不是捆绑或框架的一部分 - 即使您想通过复制捆绑资源阶段来实现)

标签: ios ios8 frameworks xcode6


【解决方案1】:

我不确定您是否尝试使用 Objective-C 或 Swift 构建框架,因为您的问题没有说明。我遇到了你提到的 Swift 错误,所以我会告诉你我构建 Swift 框架的方法。

我发现 Objective-C 的过程非常简单且有据可查,因此我将跳过此部分。

对于 Swift,有几件事情需要考虑。首先,不支持 Swift 静态库,因此在将应用程序链接到库时,您必须专门使用框架(也称为动态库)。

步骤如下:

  1. 使用New > Project under IOS > Framework & Library 创建Framework,选择Cocoa Touch Framework

  2. 为避免出现“ld: 警告:找不到选项...的目录”,请在构建设置中为您的目标转到库搜索路径并删除路径。

  3. 您不能将 Objective-C 与 Swift 混合使用,因此甚至不要考虑在您的代码中添加 Swift-Header 桥接文件。

  4. 在某些情况下,您需要从未公开的框架中导入代码。我已经成功使用框架内的模块映射来处理这些情况。

  5. 我还在构建设置中选择 CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES 来解决“在框架模块中包含非模块化头文件”。这似乎有效

  6. 我确保生成的头文件被标记为公共(不是项目)。单击该文件,您将在检查器中的“目标成员”下看到选择

您在构建时可能会遇到一些奇怪的错误消息。当您的代码无法正确编译导致链接器需要输出其二进制文件的文件丢失时,Xcode 倾向于报告链接器错误。有时 XCode 不会在您正在编译的文件中显示错误,您需要手动处理构建输出并返回文件。其他时候,您会遇到需要删除缓存的问题。我将这些问题称为 XCode 忧郁症并不断处理。我发现在构建库时这种类型的问题更经常发生。其余的应该按预期工作。

【讨论】:

  • +1 感谢库搜索路径 - 它有效。我正在建设目标c。在按照 Apple 的说明构建文件夹结构后,我摆脱了旧的错误。但是现在我的客户端应用程序无法找到我从框架中导出的视图控制器的目标文件。我不认为它是作为框架的一部分构建的。我找到的只是标题和笔尖。有什么想法吗?
  • 您是否将文件添加到特定目标的编译源部分?确保单击目标并仔细检查。此外,请确保在目标应用程序中包含二进制文件。进入项目设置,选择目标的常规选项卡。在“嵌入式​​二进制文件”部分添加框架
  • 完成了。但我想框架包中缺少一些输出文件。当 Viewcontroller.h 是公共标头之一时,我不知道为什么它不会包含 Viewcontroller.o。
  • 糟糕。我在你回复的时候编辑了。检查我之前评论中的第一句话。
  • 是的,这也是我的第一次检查 - viewcontroller.m 在要编译的文件列表中。
猜你喜欢
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多