天天看點

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