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內編譯纔可以。假設項目中包含庫中同一個類,不會發生衝突,獨立運行的。

總結:如果不考慮代碼衝突,可以建立staticLibrary,因爲這個可以減小包的大小。

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.a

/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就完成了。 

本文寫的比較繁瑣,只是想讓新手,能夠更好的理解。

博文原地址:http://blog.csdn.net/lovesnow0220/article/details/71124350

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章