1、清晰解決的問題和要求
一般而言,新起乙個sdk必然有其深刻的業務背景;研發同學對sdk要解決的問題和sdk的特殊要求,了解地越詳細越好;常見的要求有:
2、選擇合適的開發語言
3、選擇合適的技術方案
4、確立基本**規範
sdk可能長期維護 或 多人開發,確立好基本**規範,能保障sdk的**質量;這些規範本質上是一些共識和約束,如:
1、多模組設計
2、sdk目錄層級
3、公開介面設計
4、**和狀態碼
5、sdk的版本號
6、sdk安全需求
**混淆後,混淆前後的符號間對映一定要保留,否則線上問題堆疊資訊中,出現的sdk混淆後的符號會讓定位問題非常迷惑;可以做成轉化工具,匯入堆疊符號資訊,輸出混淆前正常的符號資訊;
1、提供sdk文件
2、提供demo
demo中不僅有sdk引入辦法、使用辦法;還可以寫一些簡單ui,幫助展示sdk功能;每次sdk公升級,都通過demo自動出包,提供給測試人員和產品去驗證(功能驗證和裝置相容性驗證);
sdk的自動化測試這塊,暫未嘗試;但在是demo中,定義對sdk介面的單元測試是必要的;單元測試要關注:非法傳參case,非主線程呼叫case。
3、規範sdk開發流程
4、幫助業務排查問題
5、溝通plus
建立sdk和業務溝通機制;及時同步sdk最新資訊;sdk的bugfix版本,要及時同步,並幫助業務公升級,儘量減少損失;
為sdk增加**reviewer:sdk重大公升級,最好involve主要業務方的研發進行技術評審和code review
;其實這對業務方是個很高的要求,需要業務方至少有乙個人對sdk有比較全面的了解;
1、注意多執行緒使用
2、使用快取要克制
3、記憶體使用要注意
了解記憶體方面知識可以看:ios記憶體二三事
4、使用單例要注意
在sdk中,一定要保證外部訪問到的是單例物件;除了提供讓外部訪問的類方法,還要重寫+(instancetype)allocwithzone
、-(instancetype)copywithzone
和-(instancetype)mutablecopywithzone
方法,保證永遠都只會分配一次記憶體空間,實現真正的單例;
ios中,乙個物件有且只能有乙個**;如果你的單例物件有需要業務方實現的**方法,根據實際情況判斷,是否需要實現多**;
5、注意巨集定義和條件編譯1、weak symbol
sdk可以用weak symbol提供預設實現,然後業務中利用strong symbol把業務實現注入進來,以此來實現依賴注入;
weak symbol 不做標準方案推薦; 遇到要臨時適配某些業務的特殊case,時間緊急情況下,可以"劍走偏鋒";2、預定義符號
3、section()
函式
4、pre-main和after_main
使用這兩個屬性定義函式示範如下:
__attribute__((constructor)) void before_main_***x()
__attribute__((destructor)) void after_main_***x()
dyld載入過程分四步:load dylibs image
、rebase/bind image
、objc setup
和initializers
;其中+load()
在__attribute__((constructor))
之前,他們都在initializers
階段內完成;initializers
之後就是main
函式執行了;
5、method swizzling
申請即送:如何編寫乙個(不)受歡迎的 ios sdk
聽阿里雲工程師談談如何開發乙個優秀的sdk
埠二三事
最近在看0 1024熟知埠所對應的內容,然後寫了指令碼對iana資料庫所提供的埠和服務對應的關係進行了歸類,發現如下的埠是值得注意的地方。就在處理0 1024埠的時候,出現的值得注意的地方列舉如下。總的來說,有些埠已經加入了對sctp以及dccp的支援。sctp和dccp可以看成分別是對tcp和ud...
今日二三事
上午早起去辦租賃備案,辦完了回來啟用了信用卡並稍微摸索了下,中午和室友一起訂烤魚和小龍蝦,吃完都十二點多,午睡未睡著看了一會漫畫和 去書房三點多,買了一杯咖啡,看看一些前端文章,狀態好的情況下還是可以看進去一些英文文件的。晚飯後繼續看,邊看邊跟老弟聊天,他最近要學python,我打算也學一學,順便帶...
生活二三事
今天遭遇了一系列的事情,這些事情用當前的我個人的認知來說算是衰事吧,乙個倒也見怪不怪,但今天的接憧而至的架勢的的確確給我挫折感。然後呢我不得不散了會步,按照平時的狀態我是極其不喜歡乙個人散步的,因為那樣會感覺很孤獨,畢竟大學校園三五成群,兩兩相依的情景隨處可見,總以別人的眼光來看待自己很是累,恩。路...