iOS中的dynamic linking

1. 库的链接

静态库

静态库可以理解成目标文件的存档
当链接静态库时, static linker会把库中的目标文件跟应用程序目标代码打包成一个可执行文件

动态库

动态库可以按需load(称为动态加载库)。可以在启动时load, 也可以是在运行时 (称为动态连接库)

framework

对苹果开发者来说,framework可以理解成一个包含了动态库、头文件、以及资源文件的bundle

我的理解

库是可执行的代码;framework包含了动态库、头文件、资源文件等

2. ios上的动态库

Every Apple framework that you link into your application contains a dynamic shared library. Can you imagine what the size of the executable would be if you had to statically link UIKit and other frameworks into every single application?

在iOS上构建动态库

通过实验,可以构建动态库、framework, 以及plugin, 并在在模拟器上运行

3. 在设备上运行会怎样

动态库

在设备上运行时, xcode会提示你dynamic library和framework需要被签名

用跟主app一样的签名来签名之后,启动app崩溃

framework

在设备上运行时,只要用来给framework签名的证书,以及相应的配置文件合适(包含设备), framework就可以被dyld加载, app可以正确运行。注意,给framework签名的证书不需要与主app的证书一致

plugin

与framework情况类似

4. 提交app store会是怎样的呢?

framework和plugin都应该使用跟主app一样的发布证书签名, 并被苹果签名。实际上,Mac App Store就是这么干的。
但现在iOS App Store还不支持 framework和plugin。xcode 6发布后发生了变化

我的理解

应用提交苹果审核通过后,苹果会用私钥对应用签名,用fairplay对应用进行加密。只有这样的应用才能安装在用户的设备上(非越狱)。
被苹果签名的意思是:被苹果签名、加密后
更新:xcode 6发布后,支持创建动态framework。
从服务端下载的framework显然是没经过苹果签名的;但是打包在app例的framework,用跟主app一样的发布证书签名,可以通过审核么???待验证

原文链接:http://realmacsoftware.com/blog/dynamic-linking

posted @ 2015-04-15 17:40  敏迪  阅读(536)  评论(0编辑  收藏  举报