iOS SDK

一比驻、SDK簡介

庫是程序代碼的集合檀咙,是可執(zhí)行代碼的二進制格式,可以被載入內(nèi)存中執(zhí)行

根據(jù)源代碼的公開與否嫁佳,可以分為開源庫和閉源庫

開源庫公開源代碼挨队,可以看到具體實現(xiàn),如AFNetworking蒿往、SDWebImage等

閉源庫不公開源代碼盛垦,是經(jīng)過編譯的二進制文件,如微信SDK瓤漏,騰訊地圖SDK等

閉源庫又分為靜態(tài)庫和動態(tài)庫

靜態(tài)庫腾夯,鏈接時會被復制到可執(zhí)行文件中,文件形式為.a或.framework蔬充,使用靜態(tài)庫可減少編譯時間蝶俱。

動態(tài)庫,鏈接時不復制饥漫,程序運行時由系統(tǒng)動態(tài)加載到內(nèi)存中榨呆,文件形式為.dylib.或framework,使用動態(tài)庫可減小包大小庸队。

二积蜻、SDK常用命令

設(shè)備的CPU架構(gòu):

1、模擬器:

4s-5:i386

5s-皿哨?:x86_64

2浅侨、真機

3gs-4s:armv7

5-5c ? ?:armv7s

5s-? ? :arm64

lipo -info XXX.a

lipo -create Debug-iphoneos/XXX.a Debug-iphonesimulator/XXX.a -output?XXX.a

lipo?XXX.a -thin arm64 -output?XXX-arm64.a

info常用于對外輸出檢查靜態(tài)庫的架構(gòu)信息证膨,create常用于合并真機和模擬器版本如输,一般寫在自動打包的腳本中

三、SDK對外輸出

對外輸出SDK時央勒,必要的元素包括通過測試的SDK本身不见、Demo、接入文檔崔步、測試報告等稳吮。

1、接入文檔

接入文檔中需說明SDK的接入方式和依賴的系統(tǒng)動態(tài)庫

接入文檔中需說明SDK需要的工程配置井濒,如SDK中包括類別方法灶似,需在Build Setting選項卡中Other Linker Flags中加入-ObjC或-force_load等配置

接入文檔中需說明SDK需要的權(quán)限配置列林,如NSLocationWhenInUseUsageDescription、NSFaceIDUsageDescription等

接入文檔中需說明SDK編譯環(huán)境

2酪惭、SDK

SDK必須使用官方正式版Xcode編譯(15年XcodeGhost)

SDK必須使用Release模式編譯(優(yōu)化代碼希痴,Debug模式包含NSLog和測試功能入口)

SDK必須包含真機和模擬器(避免宿主模擬器編譯報錯)

SDK必須支持應有架構(gòu)

SDK應該支持bitcode

SDK應該在頭文件或info中包含靜態(tài)版本號(便于排查問題)

SDK應該提供版本號的查詢API(便于接入方進行版本差異化處理)

SDK如果以.a靜態(tài)庫形式輸出,應包括.h和.a春感,如果有資源還應包括bundle(均不限于一個)

SDK如果以.framework靜態(tài)庫形式輸出砌创,宿主工程需額外引入bundle

SDK如果以.framework動態(tài)庫形式輸出,還需提供對應的dSYM符號文件

四鲫懒、SDK開發(fā)原則

1嫩实、必須加類前綴

iOS沒有命名空間,Apple建議開發(fā)者為自己的項目添加統(tǒng)一的類前綴窥岩,避免和iOS的某些系統(tǒng)符號沖突甲献,但目前沒有強制校驗,App體量增長后統(tǒng)一的前綴也不容易貫徹執(zhí)行颂翼。

開發(fā)SDK為避免與宿主App或系統(tǒng)符號沖突竟纳,必須添加類前綴。

其他iOS內(nèi)的頂級符號也需注意疚鲤,如全局變量、C函數(shù)名等缘挑。

如果SDK包含資源集歇,資源命名也需注意。

2语淘、 類別方法名必須加前綴

因為類別方法也會在類加載過程中被添加到類的方法列表中诲宇,且后添加的先被找到。所以SDK內(nèi)的類別方法如果和宿主App同名惶翻,會有覆蓋或者被覆蓋的情況出現(xiàn)姑蓝。

3、禁止使用Runtime替換系統(tǒng)方法實現(xiàn)吕粗。

部分App選擇使用Runtime替換系統(tǒng)方法實現(xiàn)的方式完成自動化埋點等需求纺荧,如ViewController生命周期方法、按鈕點擊颅筋、手勢等宙暇,如果SDK替換了系統(tǒng)方法實現(xiàn),會導致宿主App此部分功能異常议泵。

4占贫、禁止調(diào)用Apple私有方法

調(diào)用Apple私有方法會導致宿主App有被拒的風險,如使用prefs:root=引導用戶進入各個權(quán)限設(shè)置頁面等功能先口。

5型奥、盡量避免在load方法中加入邏輯

啟動時間是衡量一個App性能的重要指標瞳收,如無必要,盡量避免在SDK開發(fā)中出現(xiàn)使用load方法的情況

五厢汹、工程搭建

開發(fā)SDK螟深,SDK工程的產(chǎn)物為.a或.framework,導入App Demo工程進行聯(lián)調(diào)或測試坑匠,以.a為例血崭,如圖:

Projects

由于Demo中Debug較復雜,實際開發(fā)中厘灼,會選擇更便捷的工程組合進行聯(lián)調(diào):

1夹纫、子工程方式,如圖:


subProject

需要修改Demo工程Build Settings選項卡Header Search Paths设凹,添加頭文件的相對路徑舰讹。

需要修改Demo工程Build Phases選項卡Link Binary With Libraries,添加SDK闪朱。

2月匣、單工程多Target方式,如圖:


targets

需要修改Demo工程Build Phases選項卡Link Binary With Libraries奋姿,添加SDK锄开。

因為在同一個工程目錄內(nèi),Header Search Paths無需配置称诗。

3萍悴、Workspace方式,如圖:


workspace

Demo工程配置與子工程方式相同寓免。

4癣诱、Pod

pod lib create JDPLibrary

Pod

幾種方式各有利弊,如何選擇需從項目規(guī)模袜香、工程配置撕予、打包腳本和最重要的業(yè)務(wù)等方面綜合考慮。

六蜈首、第三方庫

原則上实抡,SDK開發(fā)中盡量少使用或者不使用第三方庫,以避免外部的依賴和不可控因素疾就。實際開發(fā)中澜术,由于工期、穩(wěn)定性等因素猬腰,不可避免得使用一些成熟的第三方庫鸟废。為了避免與宿主App可能出現(xiàn)的符號沖突,有幾種方式可以選擇:

1姑荷、改名

優(yōu)點:改名后通過測試既代表比較穩(wěn)定了盒延,后續(xù)不會因為宿主升級第三方庫對自身造成影響

缺點:修改類名缩擂、全局變量名、枚舉名添寺、C方法名等工作量較繁瑣胯盯;SDK包含一份第三方庫的代碼,如果宿主App也依賴计露,這部分屬于冗余代碼博脑。

改名方式:Xcode->Rename;宏命令

2票罐、編譯時不包含第三方庫

優(yōu)缺點與前一種方式相反叉趣,SDK可能受到宿主App升級或修改第三方庫的影響,但無冗余代碼该押。

編譯方式:編譯時只引入頭文件疗杉,對外輸出時,額外輸出一個依賴庫的全集蚕礼,并在接入文檔中寫明版本號烟具。

3、Pods管理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奠蹬,一起剝皮案震驚了整個濱河市朝聋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌囤躁,老刑警劉巖玖翅,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異割以,居然都是意外死亡,警方通過查閱死者的電腦和手機应媚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門严沥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人中姜,你說我怎么就攤上這事消玄。” “怎么了丢胚?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵翩瓜,是天一觀的道長。 經(jīng)常有香客問我携龟,道長兔跌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任峡蟋,我火速辦了婚禮坟桅,結(jié)果婚禮上华望,老公的妹妹穿的比我還像新娘。我一直安慰自己仅乓,他們只是感情好赖舟,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著夸楣,像睡著了一般宾抓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上豫喧,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天石洗,我揣著相機與錄音,去河邊找鬼嘿棘。 笑死劲腿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的鸟妙。 我是一名探鬼主播焦人,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼重父!你這毒婦竟也來了花椭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤房午,失蹤者是張志新(化名)和其女友劉穎矿辽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體郭厌,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡袋倔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了折柠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宾娜。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扇售,靈堂內(nèi)的尸體忽然破棺而出前塔,到底是詐尸還是另有隱情,我是刑警寧澤承冰,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布华弓,位于F島的核電站,受9級特大地震影響困乒,放射性物質(zhì)發(fā)生泄漏寂屏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凑保。 院中可真熱鬧冈爹,春花似錦、人聲如沸欧引。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芝此。三九已至憋肖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間婚苹,已是汗流浹背岸更。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留膊升,地道東北人怎炊。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像廓译,于是被迫代替她去往敵國和親评肆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1非区、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,988評論 3 119
  • 基本類型數(shù)組只聲明不new 引用類型數(shù)組堆棧分配 多維數(shù)組棧分配
    不再餓肚子給人送飯閱讀 295評論 0 0
  • 文/甜心 洛陽花園坐落在西湖田園一交叉路口瓜挽。 走近洛陽花園,柵欄的圍墻征绸,原木的門框久橙,簡易木門,赫然醒目的對聯(lián)用純白...
    F芳子閱讀 107評論 0 0
  • 愿善良遇見善良 文/蔚蘭 最近看了一部很感人的埃及微電影《鞋子》管怠。一個窮困的小男孩淆衷,走在街上時,鞋子突然破了渤弛,完全...
    空谷幽蘭7666閱讀 676評論 0 0