如何使用 XCode 构建 iOS 框架 6

How to build iOS framework with XCode 6

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

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

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

示例: 在框架内包含 non-modular header,等等。

我知道这不是它所说的,而且无论我做什么,都缺少一些步骤。 older tricks 可能对每个人都有效,但在 XCode 6.

之后我根本找不到要遵循的方法

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

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

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

我发现 Objective-C 的过程非常简单且有据可查,所以我将跳过这个。

至于Swift,有几点需要考虑。首先,Swift 静态库不受支持,因此在将应用程序链接到库时,您必须专门使用框架(又名动态库)。

步骤如下:

  1. 使用 IOS > Framework & Library 下的 New > Project 创建框架,select Cocoa Touch Framework

  2. 为了避免 "ld: warning: directory not found for option..." 转到目标构建设置中的库搜索路径并删除路径。

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

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

  5. 我也在Build Settings中selectCLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES=YES解决'include of non-modular header inside framework module'。这似乎有效

  6. 我确保生成的头文件被标记为 Public(不是项目)。单击该文件,您将在 'Target Membership'

  7. 下的检查器中看到 selection

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