动态库 VS 静态库
Static frameworks are linked at compile time. Dynamic frameworks are linked at runtime
.framework VS .a
.a 是一个纯二进制文件,不能直接拿来使用,需要配合头文件、资源文件一起使用。在iOS中是最为静态库的文件名后缀。
.framework 中除了二进制文件还有资源文件,可以拿来直接使用。
*在不能开发开发静态库的时候,.framework =.a+.h+hundle。 而当 Xcode 6 出来以后,我们可以开发动态库后 .framework = 静态库/动态库 + .h + bundle
.tbd VS .dylib & .a
.a 静态库的后缀名。
.dylib 动态库的后缀名。
.tbd Xcode7后我们在导入系统动态库是,不在有.dylib了,取而代之的是.tbd, 而 .tbd 其实是一个YAML本文文件,描述了需要链接的动态库的信息。主要目的是为了减少app 的下载大小。
Embedded VS Linked(??)
Embedded frameworks are placed within an app’s sandbox and are only available to that app. System frameworks are stored at the system-level and are available to all apps.
- OK,前面说了那么多,那么如果我们自己开发了一个动态framework 怎么把它复制到 dyld 的共享缓存 里面呢?
- 一般来说,用正常的方式是不能滴,苹果也不允许你这么做。(当然不排除一些搞逆向的大神通过一些 hack 手段达到目的)
- 那么,我们应该如何开发并使用我们自己开发的 动态framework 呢?
- 那就是 Embedded Binaries。
- Embedded 的意思是嵌入,但是这个嵌入并不是嵌入 app 可执行文件,而是嵌入 app 的 bundle 文件。当一个 app 通过 Embedded 的方式嵌入一个 app 后,在打包之后解压 ipa 可以在包内看到一个 framework 的文件夹,下面都是与这个应用相关的动态framework。在 Xcode 可以在这里设置,图中红色部分:
- 那么问题又来了,下面的 linded feameworks and libraries 又是什么呢?
- 首先在 linded feameworks and libraries 这个下面我们可以连接系统的动态库、自己开发的静态库、自己开发的动态库。对于这里的静态库而言,会在编译链接阶段连接到app可执行文件中,而对这里的动态库而言,虽然不会链接到app可执行文件中,但是会在启动的时候就去加载这里设置的所有动态库。(ps.理论上应该是这样,但是在我实际测试中似乎加载不加载都和这个没关系。可能我的姿势不对。