IOS打包封裝Framework

若是咱們但願與別人共享某些函數,卻又不肯意暴露實現的細節,怎麼辦呢?架構

這時候能夠將咱們的代碼封裝成framework,對外提供接口而不暴露實現;app

不只如此,將代碼整合成framework還有不少其餘的好處,這裏就不一一列舉。iphone

 

下面就來看看如何打包成 framework 吧。函數

一、 建立工程測試


經過OS X > Framework&Library > Bundle 建立工程:ui

           

 

二、添加 Headersspa

 


在 Build Phases 中添加 Headers:.net

Headers 展開後是這樣的:code

 

三、添加項目代碼接口


將須要封裝打包的文件加入項目中,這裏最好用 copy 的方式加入:

         

 

 

四、合併頭文件


爲了方便別人使用 framework,最好建立一個頭文件,而且在頭文件下包含你全部想要公開的類,如此,當別人使用你的 framework 時只須要導入這一個頭文件就能夠了。

 

五、公開類


當代碼加入了項目後,全部的 .h 文件都會自動出如今 Headers  的 Project 下面,而後,咱們將須要公開的類拖到 Public 下面。

          

這裏須要注意:Private 仍然是公開的而不是私有的,不要被它的名字誤導了,私有類保留在 Project 下就好。

 

六、更改一些設置:


6.1  info.plist > Bundle OS Type code = FMWK

6.2  Build Settings > Base SDK = Latest iOS,選擇最新的

6.3  Build Settings > Linking :

  • Dead Code Stripping            = NO;

  • Link With Standard Libraries = NO;

  • Mach-O Type                       = Static Library.

對於Mach-O Type可能有兩種狀況:(1)選擇 Static Library 打出來的是靜態庫;(2)選擇 Relocatable Object File 打出來是動態庫。

這裏建議使用靜態庫,動態庫在提交 AppStore 審覈的時候貌似會被拒;可是網上看了一些資料說動態庫也是能夠的,不過會有一些機審的規則須要注意下,好比不要把x86/i386的包和arm架構的包lipo在一塊兒,就單純使用真機包。(關於這個沒有測試過,也不知道是否是真的,若是有朋友測試過的但願告知下,謝謝!)

6.4  Build Settings > Packaging > Wrapper Extension = framework.

 

七、修改輸出路徑


7.1  爲了方便找到運行後生成的framework,咱們提早在項目目錄下建立一個目錄 build,用來存放運行後生成的文件;

7.2  而後,須要修改下輸出路徑:

Build Settings > Per-configuration Build Products Path = $(SRCROOT)/build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

 

八、編譯


8.1  選擇 Generic iOS Device, 編譯;

8.2  選擇模擬器,編譯。

8.3  編譯成功後,會在 build 下產生2個文件夾,一個是 device 編譯生成的,一個是 simulator 編譯生成的,他們裏面存放着對應的 framework。

 

九、合併


此時,已經有了適用於設備和模擬器的2個framework,接下來,須要將他們合併,使其同時適用於設備與模擬器。

9.1  這裏合併的並非2個framework,而是各自的二進制文件,以下圖中的 JJFramework;

9.2  那麼如何合併呢?首先,打開終端,cd 到 build 文件夾;而後輸入命令:

lipo -create 設備二進制文件 模擬器二進制文件 -output 合成文件的名字 ;

注意:(1)注意空格。(2)合成後的文件名字須要和合成前的名字同樣,不然使用framework時會報錯。

如上圖,合併2個 JJFramework 輸入以下命令:

lipo -create Debug-iphoneos/JJFramework.framework/JJFramework Debug-iphonesimulator/JJFramework.framework/JJFramework -output JJFramework。

build 文件夾下的 JJFramework 就是合成後的二進制文件了。

9.3  將設備或模擬器運行生成的framework移出來,用合成的二進制文件替換本來二進制文件

          

 

十、刪除 info.plist 


到這裏就基本上大功告成了。
另外,若是framework中沒有用到過 info.plist,能夠將其刪除以避免發生衝突。(我就遇到過一次這坑爹的狀況)

 

OK, framework打包完成。

 

其實封裝 framework 有不少種方法,以上只是其中一種;並且應該還有更簡單的方法,有時間的話,後續會補上。

相關文章
相關標籤/搜索