【问题标题】:How to create a framework for a swift project with iOS 7+ support?如何为支持 iOS 7+ 的 swift 项目创建框架?
【发布时间】:2014-12-15 05:09:42
【问题描述】:

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

我尝试同时创建一个“Cocoa Touch 框架”和一个“Cocoa Touch 静态库”,但似乎无法使其适用于 iOS 7 版本。

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

我也使用http://www.raywenderlich.com/65964/create-a-framework-for-ios 中给出的步骤尝试使用“Cocoa Touch 静态库”,但它不能使用 swift 文件构建。当我删除所有 swift 文件并添加 Obj-C 文件时,它可以正常工作。

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

谢谢

【问题讨论】:

    标签: swift ios-frameworks


    【解决方案1】:

    很遗憾,你不能。这是 Swift 最令人失望的因素之一。

    如documentation 所示,您无法使用 swift 制作静态框架/库,而动态库仅在 iOS 8+ 中支持。

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

    【讨论】:

    • 您能否指出文档中的哪些地方不能使用 Swift 生成低于 iOS 8 的框架?我对你的回答很有信心,但我需要一些正式的东西才能带给客户。
    【解决方案2】:

    Apple 在 iOS 8 之前不支持纯 Swift 框架在一定程度上影响了 Swift 的采用率。

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

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

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

    这个“解决方案”只能作为最后的手段。必须在多个项目中重复框架奇偶校验是愚蠢的。如果随着时间流逝,项目保持静态,而框架不断发展,则将框架转储到项目中,然后重新添加。转储/重新添加框架只需不到一分钟的时间,并减少出错的机会。

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

    【讨论】:

    • 有时你必须做你必须做的事
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多