iOS开发之多工程联编以及iOS Framwork静态库与动态库问题归纳

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,仍然需要被分别签名,打包和加载。

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注