iOS制作framework技术总结(内部及外部引用第三方库)
https://www.jianshu.com/p/e5726852bb82
iOS开发将一个工程添加到另一个工程中
https://www.jianshu.com/p/60c2c044ef56
iOS开发之多工程联编
https://www.jianshu.com/p/d77ed6629067
https://www.jianshu.com/p/6097efc51ebf
iOS framework之Embed、Signing
https://www.jianshu.com/p/e05b965672c7
命令行进入动态库文件,使用file命令查看输出内容可以看到区别。以静态库文件-MAMapKit.framework与动态库文件-AFNetworking.framework为例。
1. 静态库文件-MAMapKit.framework
cd /Users/***/Desktop/Framework/MAMapKit.framework
file MAMapKit
输出
MAMapKit: Mach-O universal binary with 4 architectures: [arm_v7:current ar archive random library] [arm64]
MAMapKit (for architecture armv7): current ar archive random library
MAMapKit (for architecture i386): current ar archive random library
MAMapKit (for architecture x86_64): current ar archive random library
MAMapKit (for architecture arm64): current ar archive random library
archive表明这是一个静态库
2. 动态库文件-AFNetworking.framework
cd /Users/***/Desktop/Framework/AFNetworking.framework
file AFNetworking
输出
AFNetworking: Mach-O universal binary with 2 architectures: [arm_v7:Mach-O dynamically linked shared library arm_v7] [arm64:Mach-O 64-bit dynamically linked shared library arm64]
AFNetworking (for architecture armv7): Mach-O dynamically linked shared library arm_v7
AFNetworking (for architecture arm64): Mach-O 64-bit dynamically linked shared library arm64
dynamically linked shared library表明这是一个动态库
iOS8之前苹果是不允许第三方框架使用动态库方式实现的,但是iOS8之后添加了App Extesion,Extesion 需要与主App共享代码,而且新加入的Swift的语言机制也需要动态库,于是苹果提出了Embedded Framework概念,这种动态库允许App和App Extension共享代码,但是这份动态库的生命被限定在一个App进程内。简单点可以理解为被阉割的动态库。
与系统的动态Framework 不同,使用 Cocoa Touch Framework 制作的动态库 在打包和提交 App 时资源文件会被放到 App main bundle 的根目录文件下,运行在沙盒里,而不是系统中。所以,不同的 App 即使使用了同样的 Framework,仍然需要被分别签名,打包和加载。
与系统的动态Framework 不同,使用 Cocoa Touch Framework 制作的动态库 在打包和提交 App 时资源文件会被放到 App main bundle 的根目录文件下,运行在沙盒里,而不是系统中。所以,不同的 App 即使使用了同样的 Framework,仍然需要被分别签名,打包和加载。
iOS 系统下 Framework 分类
Static Framework
静态库,用户生成。
Embedded Framework
允许用户生成的“动态库”类型。
- 直接添加Framework
dyld: Library not loaded: @rpath/IFlyMSC_Dylib.framework/IFlyMSC_Dylib
Referenced from: /private/var/containers/Bundle/Application/B1CAB261-A1AE-4797-B0F0-9BBA9C2C78FF/Test.app/Test
Reason: image not found
解决方案:
General->Frameworks,Libraries,and Embedded Content->IFlyMSC_Dylib.framework->Embed&sign
iOS 静态库与动态库的区别 https://www.jianshu.com/p/b0f58bae27db