iOS 本身封裝的SDK 打包與合併,新手教程!!!

前言
(1)這個時候就得說下靜態庫,動態庫區別。
          靜態庫:1.模塊化,分工合做。2.避免少許改動常常致使大量的重複編譯連接。3.也能夠重用,注意不是共享使用。
          動態庫:1.使用動態庫,能夠將最終可執行文件體積縮小。2.使用動態庫,多個應用程序共享內存中得同一份庫文件,節省資源。3.使用動態庫,能夠不從新編譯鏈接可執行程序的前提下,更新動態庫文件達到更新應用程序的目的。
備註:蘋果禁用動態庫,即你使用了動態庫,審覈也是不讓經過的。
(2)靜態庫又分爲:framework 與static Library(.a )。
        下面說下framework 與static Library的區別和優缺點。
         共同點:都是靜態庫
         區別:1.承載的內容範疇:
                     (1)framework爲一站式分享文案,也能夠說是一個文件夾,其中包含代碼簽名,頭文件,二進制執行文件,靜態資源文件(xib,圖片)等。
                     (2)static Library 就是.a文件,爲二進制執行文件。分享給別人的時候,頭文件,靜態資源文件(xib,圖片)須要另外提供,提供的方式爲Bundle,下面我會介紹如何打bundle的包。  
                  2.頭文件搜索路徑的區別:staticLibrary須要設置頭文件搜索路徑,framework不須要。
                  3.當存在對外部代碼依賴的時候:
                   (1)statciLibrary:可以只引用外部的頭文件,調用公開的方法.而不引入其庫的實現,實現與引用庫的分離部署。假設其項目中包含庫中同一個類,會發生代碼衝突。
                   (2)framework:須要引用外部庫,就必須將此外部庫的實現放入framework內編譯才能夠。假設項目中包含庫中同一個類,不會發生衝突,獨立運行的。ios

總結:若是不考慮代碼衝突,能夠創建staticLibrary,由於這個能夠減少包的大小。iphone

1.首先建立Static Library
這裏寫圖片描述
(1).建立完成,而後咱們把以前封裝好的代碼,所有導入。
而後咱們到Build Settings中找到complie sources這個裏面就是.h與.m的集合。這裏面也能夠理解爲咱們的SDK不外露的東西。
下面咱們還有一個就是copy files 這個裏面就是咱們打完包外漏出來的.h。
備註:能夠憑本身的需求自行添加。
這裏寫圖片描述
(2).咱們再去Build setting裏面找到Base SDK 選取 Latest iOS,由於這裏面有不少類型的,macOS,tvOS…。
這裏寫圖片描述
而後找到Linking other Linker Flags 默認是-Objc的,可是咱們在寫SDK源碼的時候可能不僅是-Objc有可能會有分類等等。要修改成-all_load,要是不修改會崩潰的。
這裏寫圖片描述
(3).最後咱們和正常打包配置同樣斷點,release,別忘了。
這裏寫圖片描述
2.而後咱們就能夠打包了。
打包時候要注意,咱們分兩種.a,一種爲模擬器的.a,另外一種爲真機的.a。
這裏要說明一點,真機的.a只能真機使用,模擬器使用會報錯的。模擬器的.a一樣的到來,若是模擬器的.a用真機使用也會報錯的。這個時候咱們就涉及到一個合併的問題,即真機與模擬器的.a合併。而後提供給使用者。
使用終端,命令以下。
lipo -create /Users/xxx/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/Release-iphonesimulator/xxx.a   /Users/xxx/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/Release-iphoneos/xxx.a  -output /Users/xxx/Desktop/xxx.aide

/Users/xxx/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/Release-iphonesimulator/xxx.a
模擬器路徑,
/Users/xxx/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/Release-iphoneos/xxx.a  
真機路徑。
/Users/xxx/Desktop/xxx.a
合成後輸出路徑。
這裏寫圖片描述
這就合併完成,能夠進行使用。模塊化

3.下面我介紹下bundle的包。
   這個bundle 我在上面有介紹是用來存放靜態資源文件(xib,圖片)的。
首先咱們創建一個bundle
這裏寫圖片描述
而後把他修改成iOS的
這裏寫圖片描述
而後把資源文件導入進去
這裏寫圖片描述
而後就打包就行了。
備註:可能有疑問,爲何要使用bundle,不直接放在.a中。由於在你直接放在.a中打完包,路徑是讀不到的,因此必須使用bundle做爲依託。下面就涉及一個問題就是再.a中如何調用。
這就是在你項目代碼中的實現。你能夠寫成宏,我這裏只是個例子。
這裏寫圖片描述
這樣咱們的一個完整的.a就完成了。
本文寫的比較繁瑣,只是想讓新手,可以更好的理解。ui

相關文章
相關標籤/搜索