天天看点

iOS组件化中.framework静态库的制作学习记录

1.创建一个Cocoa Touch Framework的工程。

iOS组件化中.framework静态库的制作学习记录

2.选择编译的方式 TARGETS-> Build Setting -> Mach-O Type ,选择编译方式为Static Framework,默认为Dynamic Framework

iOS组件化中.framework静态库的制作学习记录

3.修改编译成库时的架构,TARGETS->Build Setting ->Build Active Architecture Only,为了避免多次编译各个架构,无论是在Debug模式还是在Release模式下,都勾选成NO,支持多架构编译。

iOS组件化中.framework静态库的制作学习记录

4.添加要打包成静态库.framework的资源文件。

此时,资源包含两种,如果是要打包的.h,.m,以及.bundle文件需要勾选 Add to targets ,如果此时需要引入依赖的.framework,不需要勾选Add to targets

iOS组件化中.framework静态库的制作学习记录

5.设置要公开的头文件,如果你希望该A.h头文件在工程中能够被引用使用,需要把Project中的A.h文件拖拽到Public 中。

iOS组件化中.framework静态库的制作学习记录

6.添加依赖于系统的库文件,在组件化.framework的过程中,可能会需要依赖一些系统的.framework,或者.tbd文件,可以在TARGETS->Build Phases ->Link Binary With Librraies中引用。

iOS组件化中.framework静态库的制作学习记录

7.勾选Debug模式或者Release模式,在Edit Scheme中,勾选Debug或者Release,

在Debug模式,会编译出 真机和模拟器两个.framework,

在Release模式下,会编译出真机和模拟器两个.framework库文件,Release模式的文件通常会小一些,因为系统做了一些编译的优化。

iOS组件化中.framework静态库的制作学习记录

8.合成Release模式或者Debug模式的两个.framework,一个是支持真机的,一个是支持模拟器的,两个是独立的,在没有合并的时候,真机不支持模拟器运行,模拟器也不支持真机运行。

iOS组件化中.framework静态库的制作学习记录

下图是Debug模式下的真机和模拟器下的.framework文件。

iOS组件化中.framework静态库的制作学习记录

在终端,合并两个二进制文件,使用lipo -create A文件路径 B文件路径 -output C文件路径

iOS组件化中.framework静态库的制作学习记录

遇见的坑1.在静态库的编译工程中,CGFloat成了未知的数据类型

iOS组件化中.framework静态库的制作学习记录

解决方案:在类文件中引入#import<UIKit/UIKit.h>

遇见的坑2:组件A 依赖于组件B,组件B中包含.a或者.framework的静态库,podfile中使用了use_frameworks!,在执行pod install时报错,

[!] The 'Pods-GMThirdLibrary_Example' target has transitive dependencies that include static binaries: (/Users/xiaofeiniao/GMThirdLibrary/Example/Pods/UMCCommon/UMCommon.framework)

iOS组件化中.framework静态库的制作学习记录

解决方案:在组件的xxx.podspec文件中,配置s.static_framework = true,就是在编译成.framework

参考博客:https://www.jianshu.com/p/3a002aa5b5d6

遇见的坑3:在使用repo push 推送组件.podspec到组件库时报错

pod repo push error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54 fatal: The remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed ) during validation.

解决办法:可能是git http.postBuffer默认的设置太小了 git config --global http.postBuffer 157286400

参考博客:https://github.com/CocoaPods/CocoaPods/issues/7025

学习博客:

https://www.jianshu.com/p/5c2c154cafae

http://www.cocoachina.com/articles/19136

https://blog.csdn.net/jia12216/article/details/88247838

https://blog.csdn.net/iostiannan/article/details/81007691