1珠漂,線程問題:如SDK提供的接口功能中崩溪,需要SDK中彈出界面,就要注意線程的使用問題溢谤,因?yàn)殛P(guān)于UI的操作都應(yīng)該在主線程中執(zhí)行瞻凤,所以當(dāng)外部調(diào)用到你的接口后,應(yīng)該在接口內(nèi)部切換到主線程去操作世杀,這樣比較安全阀参。
2,SDK中引入第三方庫:曾經(jīng)在SDK中引入了AF和SDAutoLayout結(jié)果引出了大麻煩瞻坝,當(dāng)客戶端嵌入了SDK且客戶端中也引入了相同的框架蛛壳,編譯后會(huì)發(fā)現(xiàn)報(bào)了幾百個(gè)錯(cuò)誤,“duplicate symbol...”,這個(gè)如果開發(fā)SDK之前考慮到了,就盡量避免不要使用第三方的衙荐,這樣的好處是不但可以避免沖突捞挥,而且還可以減小SDK的負(fù)重,如果使用了也有解決沖突的辦法忧吟,將引入的第三方框架同樣引入測(cè)試程序中(一般開發(fā)SDK都有個(gè)用來自測(cè)的測(cè)試程序)砌函,對(duì)照著報(bào)出來的錯(cuò)誤,一個(gè)一個(gè)的去修改報(bào)沖突的函數(shù)名或者文件名或者屬性名溜族,AF還好說當(dāng)錯(cuò)誤解決完了功能還是正常的讹俊,SD修改完了之后發(fā)現(xiàn),這個(gè)布局框架失去效果了;褪恪仍劈!這是為什么呢,因?yàn)镾D中使用了
+ (void)load
{
? ? staticdispatch_once_tonceToken;
? ? dispatch_once(&onceToken, ^{
? ? ? ? NSArray*selStringsArray =@[@"layoutSubviews"];
? ? ? ? [selStringsArrayenumerateObjectsUsingBlock:^(NSString*selString,NSUIntegeridx,BOOL*stop) {
? ? ? ? ? ? NSString*mySelString = [@"sd_"stringByAppendingString:selString];
? ? ? ? ? ? MethodoriginalMethod =class_getInstanceMethod(self,NSSelectorFromString(selString));
? ? ? ? ? ? Method myMethod = class_getInstanceMethod(self, NSSelectorFromString(mySelString));
? ? ? ? ? ? method_exchangeImplementations(originalMethod, myMethod);
? ? ? ? }];
? ? });
}
可以看到load方法中使用了黑魔法寡壮,交換了layoutSubview和sd_layoutSubview的實(shí)現(xiàn)耳奕,將sd_layoutSubview換個(gè)方法名即可解決問題。
3诬像,引用第三方.framework問題:在開發(fā)SDK過程中難免會(huì)引入一些第三方的東西屋群,但是當(dāng)引入第三方的.framework又打不到靜態(tài)庫中,這無疑給外部提供SDK時(shí)又需要提供第三方的.framework,這很不友好坏挠,解決方法是將第三方的.framework中的二進(jìn)制文件修改后綴為.a芍躏,再將其中的頭文件扣出來,這樣一個(gè).framework就變成了一個(gè)靜態(tài)庫+頭文件降狠,就可以打進(jìn)自己的SDK中了对竣。