IOS开发-使用OC/Swift开发静态/动态库(SDK开发)
浏览:1218 次

最近,主要工作是使用OC/Swift开发各种SDK。静态库和动态库都很有用。所以我想写一篇文章来记录SDK开发的一些内容,以及我在开发中遇到的陷阱和解决方案。我希望它能帮助你。
当前的开发环境是xcode910.x,Swift版本是4.04.2。
1、 iOS库之间的差异
常见的自建iOS库可以分为两种形式:xxx。a和xxx。框架这两个图书馆有什么区别?
这个库只能是静态库,仅支持OC,并且只能通过使用静态链接导入。呼叫时。h头文件是必需的。资源文件通常由自建文件管理。捆也就是说,最终交付使用的SDK通常包含三个文件,即。一个文件。h文件和。捆绑文件。
这个框架可以是静态库或动态库。它支持OC和Swift。您可以选择静态和动态链接来使用库。事实上。框架是头文件、可执行文件和资源文件的集合。

框架静态库和动态库的区别是什么?
我知道内部链接方法是不同的,即一种是编译时链接,另一种是运行时链接。
如果静态库中使用了任何类别,则必须将-ObjC添加到主项目的“生成设置”中的“其他链接器标志”中,而不是动态库中。
如果在静态库中链接了一些系统库,则主项目需要再次链接这些库。但是,如果动态库链接了一些系统库,则只需要在动态库中进行处理,而不需要在主项目中再次导入。因此,动态库的使用将更加方便。
当静态库依赖于其他静态/动态库时,其可执行文件将合并到其他库中,主项目不需要再次链接静态库。当动态库依赖于其他静态/动态库时,其可执行文件不会被合并,因此主项目需要同时导入依赖库和依赖库。
通常我们框架静态库使用静态链接链接框架和库框架动态库使用动态链接嵌入二进制文件。静态链接和动态链接有什么区别?

在编译的产品中。在ipa包中,解压缩并查看内容(即项目包内容,也是主包),然后选择静态链接的框架。框架不存在。其可执行文件将与主项目的可执行文件合并。框架中直接包含的资源文件不会编译到主项目包中。因此bundle必须用于管理资源文件。
这个选择了动态链接的框架。框架文件独立存在于项目文件的框架文件夹中,但其内部头文件将不再独立存在,因为主项目的捆绑包中不允许存在代码文件。此时,在编译主项目时,头文件已一起转换为可执行文件,而库中的其他文件,包括库的可执行文件和资源,继续存在于可执行文件下。
不管框架库是动态库还是静态库都不会影响上述特性。动态链接和静态链接意味着项目如何链接此库。无论是在编译时以静态方式链接,还是在运行时以动态方式链接。尽管我们通常习惯于使用静态链接的静态库和使用动态链接的动态库,但链接方法和库类型应该分别理解。
我们可以使用此功能解压缩ipa,替换动态库,并重新签署ipa包,这样我们就可以在不重新发布包的情况下更新库,或者提供一些分包要求。
使用Swift开发库和OC有什么区别?
最重要的是,Swift尚未实现ABI的稳定性。苹果的父亲最初表示,Swift 4将实现ABI的稳定性,但票跳到了Swift 5,现在5尚未正式发布。ABI不稳定的结果是什么?

编译库时使用的Swift版本必须与主项目支持的Swift版一致。例如,当前XCode9.09.2的Swift环境为Swift 4.0,XCode9.39.4为4.1,XCode 10.0-10.1为4.2。如果XCode9.4用于编译SDK,但XCode9.2或XCode10用于运行SDK,则编译将失败或报告错误。只有XCode9.3和9.4具有相同的Swfit环境