iOS端SDK開發(fā)總結(jié)和注意點
一、概念
靜態(tài)庫:以.a 和 .framework為文件后綴名。
動態(tài)庫:以.tbd(之前叫.dylib) 和 .framework 為文件后綴名。
二、區(qū)別
靜態(tài)庫:鏈接時會被完整的復制到可執(zhí)行文件中,被多次使用就有多份拷貝。
動態(tài)庫:鏈接時不復制,程序運行時由系統(tǒng)動態(tài)加載到內(nèi)存,系統(tǒng)只加載一次,多個程序共用(如系統(tǒng)的UIKit.framework等),節(jié)省內(nèi)存。
注意: 但是蘋果不讓使用自己的動態(tài)庫,否則審核就無法通過。所有我們制作SDK通常都是指靜態(tài)庫
三、制作流程
度娘一搜,啥都有,這里就不寫了。主要就做一下注意點和總結(jié)。
注意點
1、項目名、里面的各種類名、文件名和方法名最好都 帶上自己的前綴。
2、SDK的文件分層要以模塊和功能進行劃分。
3、在進行資源操作如圖片加載、文件讀取時,要對對應的方法進行封裝處理,方便對資源的統(tǒng)一處理,如對UIImageView 設置圖片的方法進行二次封裝。
4、能不使用第三方類庫就不使用,假如真的需要就最好是對第三方類庫進行重命名和方法名修改,以防止SDK使用方的項目中類庫文件和方法沖突。
5、要對SDK中需要用到的依賴文件進行記錄以方便做文檔。
6、SDK中盡量不要使用分類Category,因為會涉及到一個資源加載的問題,會使得SDK包變大。使用起來當然也是沒有任何問題,只需要添加-all_load或-ObjC就可以。
7、制作的SDK需要注意debug模式和Realease模式,debug模式只是一般的測試,Realease才可進行上商店。
備注:
關于-ObjC
這個flag告訴鏈接器把庫中定義的Objective-C類和Category都加載進來,這樣編譯之后的app會變大(因為加載了其他的objc代碼進來)但是如果靜態(tài)庫中有類和category的話只有加入這個flag才行
關于-all_load
這個flag是專門處理-ObjC的一個bug的。用了-ObjC以后,如果類庫中只有category沒有類的時候這些category還是加載不進來。變通方法就是加入-all_load或者-force-load。-all_load會強制鏈接器把目標文件都加載進來,即使沒有objc代碼。-force_load在xcode3.2后可用。但是-force_load后面必須跟一個只想靜態(tài)庫的路徑。
關于-force_load
如果有多個三方庫,有的需要加,有的不需要,用-all_load到最后duplicate symbol錯誤此時可以用-force_load + 路徑方式
免費的iOS SDK和ipa加固和蘋果審核被拒群:289533769,群里有免費的iOS SDK和工程的混淆加固工具,每天都分享蘋果最新提審過包策略,歡迎大家進來一起交流一起進步一起過包!