首先要观察到的事情(这当然不是我的第一次观察!)是你cannot在 iOS 下使用静态库来完成此操作。 Xcode 不会让你在静态框架中使用 Swift 尝试一下。 Xcode 会拒绝你的愿望!
这是我最终完成的过程。我必须处理的两个主要问题是:(i) 使 Xcode 正确链接到 using 项目中的框架,以及 (ii) 访问 using 项目中框架的标头。在苹果公司的开明观点中,这两个问题是分开的。注意讽刺。 ;)。
1)创建一个Cocoa Touch Framework
使用 Xcode。我相信这适用于 Xcode6 和 Xcode7。使用:
文件 > 新建 > 项目 > iOS > 框架和库 > Cocoa Touch
框架
我碰巧使用的是Xcode7。 (做not make a Cocoa Touch Static Library
——就像我上面说的,Xcode 不会让你将 Swift 合并到静态库中)。
2) 对于您的 Swift 类,请确保成员和函数是public。我还没有尝试过这一点,但似乎公共属性对于框架的用户可见的成员和函数是必需的。
3) 将您想要的任何 Swift 类(和 Objective-C)添加到您的框架中。
4) 关闭该框架项目。 (同一个项目不能在Xcode中打开两次,接下来您需要将框架合并到您使用的项目中)。
5) 在 Xcode 中打开您使用的项目。对我来说,这是一个现有的通用应用程序项目。您可能正在创建一个新的使用项目。无论如何,将 Finder 中框架项目的 .xcodeproj 文件拖到您使用的项目中。
6) 在您的使用项目中,打开您的框架项目。并将框架文件拖入Embed Frameworks
在构建阶段(Embed Frameworks
当我第一次开始实验时,构建阶段中不存在该部分,而且我还不知道是什么魔法导致它出现!)。
到目前为止,这些步骤应该使您能够构建和链接,而无需实际集成库代码的使用。
(我正在使用https://github.com/RadiusNetworks/swift-framework-example https://github.com/RadiusNetworks/swift-framework-example用于我的一些测试)。
7) 现在致命一击:Build Settings
, 搜索Framework Search Paths
。并添加:
${TARGET_BUILD_DIR}/YourFrameworkName.framework
(看来你do not必须将其标记为递归)。
8) 在使用该框架的 Swift 代码文件中,您需要在每个文件的顶部添加导入:
import YourFrameworkName
您现在应该能够使用新库进行构建和链接!
9) 还有一个问题:确保你的Deployment Target
您的框架与您的目标项目相匹配。例如,如果您使用的项目是针对 iOS7 构建的,请确保您的框架是针对 iOS7 或更早版本构建的。
10) 第二个陷阱 (10/23/15):我刚刚了解到我的框架有必要将“App-Swift.h”(我为此使用的名称)作为 Build 中的 Objective-C 生成的接口标头名称设置。当我取出这个(Objective-C 生成的接口头)(试图解决另一个问题)时,我在 App-Swift.h 中发现了一些有趣的问题。这些问题看起来像:“找不到 NSObject 的接口声明”? https://stackoverflow.com/questions/8994911/cannot-find-interface-declaration-for-nsobject
11) 第三个陷阱 (10/29/15):当我尝试将我的第一个应用程序上传到使用此框架的 iTunes Connect 时,出现上传错误。错误如下:
错误 ITMS-90206:“捆绑包无效。捆绑包位于
“Your.app/Frameworks/YourFramework.framework”包含不允许的文件
'构架'。”
各种 SO 和其他帖子都遇到了这种错误,对我来说,技巧是,对于框架目标,在构建设置中将“嵌入内容包含 Swift 代码”设置为“否”。 (我的应用程序构建设置已将此标志设置为“否”)。
已完成大部分步骤的示例项目位于https://github.com/crspybits/CocoaTouchFramework.git https://github.com/crspybits/CocoaTouchFramework.git