如何为支持iOS 7+的swift项目创建框架?

时间:2014-12-15 05:09:42

标签: swift ios-frameworks

我需要为我们计划在组织中的多个iOS项目中使用的共享公共实用工具集创建框架。实用程序类是用swift编写的,框架需要支持iOS 7及更高版本的项目。我正在使用Xcode 6.1.1。

我尝试创建'Cocoa Touch Framework'和'Cocoa Touch Static Library',但似乎无法让它适用于iOS 7版本。

使用'Cocoa Touch Framework',我收到警告'嵌入式dylibs /框架仅在iOS 8或更高版本上运行',虽然我可以让它运行,但在iTunesconnect步骤中它失败了,项目的部署错误目标不得低于8.0(我的是7.0)。

我尝试使用'{3}}中给出的'Cocoa Touch Static Library',但它不是用swift文件构建的。当我删除所有swift文件并添加Obj-C文件时,它可以正常工作。

非常感谢任何帮助。如何为支持iOS 7+的swift项目创建框架?

由于

2 个答案:

答案 0 :(得分:8)

不幸的是,你做不到。这是关于斯威夫特的更令人失望的因素之一。

documentation所示,您无法在iOS 8+中支持使用swift和动态库的静态框架/库。

我建议的唯一选择是为iOS 7开发Objective-C静态框架,然后在希望放弃iOS 7支持时开始使用swift。这不是最理想的情况,但因为你能够在动态框架中拥有mixed languages,这意味着你不必浪费时间重写代码(当然,除非你想要)。

答案 1 :(得分:6)

Apple在iOS 8之前不支持纯Swift框架,这有点伤害了Swift的采用率。

我不是在提倡以下解决方案作为最佳实践。老实说,这是一个非常有缺陷的黑客。我们有一个庞大的纯Swift框架,可以完成工作中的大部分繁重工作。而且,我们需要在iOS 7.1 +上运行的产品中使用该框架。

这是hack - 目录层次结构非常重要。在理想情况下,项目和框架是目录树中的兄弟。在项目中创建一个组。在Finder中,shift / command从框架中选择所有源文件,并将它们放入新创建的组中。确保不要复制文件。您告诉Xcode只需将文件添加到项目文件中,即可创建相对路径链接。

现在框架应该直接编译到您的项目中。我无法强调这个解决方案有多脆弱。随着文件被添加到您的框架中,它们也必须添加/链接到您“链接嵌入”框架的任何项目中。

此“解决方案”仅应作为最后手段使用。不得不在多个项目中重复框架平等是愚蠢的。如果时间过去,项目保持静态,框架不断发展,请将框架转储到项目中,然后重新添加。转储/重新添加框架只需不到一分钟,并减少出错的可能性。

Apple,请帮助我们,以便我们保持最佳实践。我很尴尬地分享这个解决方案,因为它只是一种可怕的方式来解决Apple不支持的问题。