iOS靜態庫的封裝

靜態庫和動態庫區別:

  • 靜態庫:連接時完整地拷貝至可執行文件中,被屢次使用就有多份冗餘拷貝。
  • 動態庫:連接時不復制,程序運行時由系統動態加載到內存,供程序調用,系統只加載一次,多個程序共用,節省內存。

.a與.framework有什麼區別

  • .a是一個純二進制文件,.framework中除了有二進制文件以外還有資源文件。
  • .a文件不能直接使用,至少要有.h文件配合,.framework文件能夠直接使用,建議用.framework。
.a + .h + sourceFile = .framework。
複製代碼

.a靜態庫的製做

咱們直接建立調試項目,通常不直接建立靜態庫。由於須要打斷點,等調試成功後再打包相應的靜態庫。git

1.建立一個普通項目

建立項目,而且在項目中添加 static library,最終以下圖所示。github

2.設置可見的.h文件。

Build Phases --> Copy Files 添加.h文件便可。bash

3.修改支持的架構

設置支持全部模擬器架構 Build Settings --> Build Active Architecture Only --> Debug 改成 NO,設置支持全部手機架構。markdown

4.而後編譯

選中PrintTarget,而後分別選擇Generic iOS Device任意一個模擬器各編譯一次,編譯完後,咱們會看到工程中Products文件夾下的libPrint.a由紅色變成了黑色,而後show in finder,看看生成的文件。架構

5.將模擬器和真機的靜態庫合併

  • 可使用lipo-info + 靜態庫名字命令查看靜態庫支持的框架。
  • 若是想要讓模擬器和真機通用一個靜態庫,咱們可使用終端命令來實現。命令格式:lipo -create 第一個.a文件的絕對路徑 第二個.a文件的絕對路徑 -output 最終的.a文件路徑

.framework靜態庫的製做

1.建立一個普通項目

2.修改打包的framework是動態庫仍是靜態庫

framework項目默認是動態庫。 靜態庫配置:Build Settings --> Mach-O Type --> 改成 Static Library。 設置支持全部模擬器架構 Build Settings --> Build Active Architecture Only --> Debug 改成 NO,設置支持全部手機架構。框架

3.編寫代碼,設置可見頭文件

編寫完代碼後,Build Phases --> Headers --> public 添加頭文件。oop

4.而後編譯

選中LibTestTarget,而後分別選擇Generic iOS Device任意一個模擬器各編譯一次,編譯完後,咱們會看到工程中Products文件夾下的LibTest.framework由紅色變成了黑色,而後show in finder,看看生成的文件。ui

5.將模擬器和真機的靜態庫合併

  • 可使用lipo -info framework下的二進制文件名字命令查看靜態庫支持的框架。
  • 若是想要讓模擬器和真機通用一個靜態庫,咱們可使用終端命令來實現。合併的命令爲: lipo -create 第一個framework下二進制文件的絕對路徑 第二個framework下二進制文件的絕對路徑 -output 最終的二進制文件路徑

6.注意

注意: 若是靜態庫中有category類,則在使用靜態庫的項目配置中Other Linker Flags須要添加參數-ObjC或者-all_loadspa

完整Demo地址

github: github.com/CaoXueLiang…調試

相關文章
相關標籤/搜索