为啥 Swift 不支持 iO 中的静态库
Posted
技术标签:
【中文标题】为啥 Swift 不支持 iO 中的静态库【英文标题】:Why doesn't Swift support static libraries in iO为什么 Swift 不支持 iO 中的静态库 【发布时间】:2016-03-20 02:07:35 【问题描述】:为什么是doesn't Swift support static libraries?
我看到了这个解释,但我不明白这个推理。
当前运行时不随操作系统提供,因此静态库会导致最终可执行文件中有多个运行时。为与较新的 OS 或 Swift 兼容而修补静态链接的运行时要困难得多。 . . .运行时在不断变化。我们需要动态链接它,以便能够处理未来的前向部署问题。 — 乔·格罗夫
https://twitter.com/owensd/status/555060783407591424
请解释一下。
【问题讨论】:
在 swift 3 中是否有任何使用静态库的解决方案,我有一个加密库,其中只有两个 .a 文件在供应商样本(用 Objective-c 编写)是工作文件,当我尝试使用那些使用桥接头的库,(显然桥接头配置很好,因为其他objective-c库工作正常),它不能抛出错误。任何人对此问题都有解决方案,然后请发布一些线索。 【参考方案1】:您是否注意到 Swift 应用程序很大?这是因为整个 Swift 运行时嵌入在应用程序中。 Swift 由应用程序中嵌入的库在后台转换为 Objective-C。
这种烦人的策略的原因是 Swift 本身仍在不断变化和发展(Swift 2.2 将在任何一天结束,再次彻底改变语言)。因此,Swift 不能像 Objective-C 那样成为 system 的一部分;它以与系统更新无关的速度和方式独立变化。
这种情况使得与静态库的链接在技术上极其困难。但是动态链接是可能的,因为它是动态的。
稍后,可能在 Swift 3 最终版之后,该语言最终将被冻结并成为 系统 的一部分,就像 Objective-C 一样。然后静态库会更容易支持,比如 Objective-C(Swift 应用程序会变得更小!)。
【讨论】:
那么,Swift doesn't run on the Objective-C runtime?以上是关于为啥 Swift 不支持 iO 中的静态库的主要内容,如果未能解决你的问题,请参考以下文章
iOS 静态库和动态库打包framework流程(纯swift版/swift、OC混编版)