IOS SDK開發(fā)之--2.創(chuàng)建自己的SDK

總覽

##一掌测、創(chuàng)建自己的SDK - .a靜態(tài)庫
##二、創(chuàng)建自己的SDK - frameWork靜態(tài)庫

一视粮、創(chuàng)建自己的SDK - .a靜態(tài)庫


這篇教程將只使用一小部分Objective-C代碼采桃,本文主要講解從開始到應用的詳細步驟。
環(huán)境:xcode 8.0(網(wǎng)上的demo大多數(shù)都是老版本的昼弟,發(fā)現(xiàn)很多東西跟現(xiàn)在的不一樣)
下面我們開始操作:

創(chuàng)建一個靜態(tài)庫工程

打開Xcode啤它,點擊File\New\Project,選擇iOS\Framework and Library\Cocoa Touch Static Library新建一個靜態(tài)庫工程.



將工程命名為GGTestSDK舱痘,然后將工程保存到一個空目錄下变骡。



一個靜態(tài)庫工程由頭文件和實現(xiàn)文件組成,這些文件將被編譯為庫本身芭逝。
當創(chuàng)建靜態(tài)庫工程時塌碌,Xcode會自動添加GGTestSDK.h和GGTestSDK.m。你不需要實現(xiàn)文件旬盯,因此右鍵單擊GGTestSDK.m選擇delete台妆,將它刪除到廢紙簍中。

創(chuàng)建一個AlertView控件

其實當前的工程就已經(jīng)可以用了了胖翰,是時候為你的庫添加一些功能了接剩。由于本篇教程的關鍵在于教你怎么樣創(chuàng)建一個GGTestSDK.a,而不是怎么樣構建一個UI控件萨咳,這里你可以使用你自己封裝好的控件懊缺。將你的控件從Finder中拖到Xcode下GGTestSDK目錄下。



這里有一點要注意了某弦,這里一定要勾選以下三個選項:



然后點擊 Finish 進入工程:

對你的控件的頭文件需要做的另一件事是將其添加到庫的主頭文件GGTestSDK.h中桐汤。在這個主頭文件的幫助下,開發(fā)者使用你的庫僅僅需要導入一個頭文件靶壮,如下面的代碼一樣怔毛,而不是自己去選擇自己需要的一塊導入。



接下來就生成靜態(tài)庫
1腾降、靜態(tài)庫分為手機和模擬器兩種(手機端的只有手機能調用拣度,模擬器的只有模擬器能調用)。
首先,構建模擬器的靜態(tài)庫抗果,如圖

然后show in Finder


之后我拿到這個.a文件 還有和他相關的所有.h文件筋帖,存放在一個新的文件夾里(隨便起名越吊越好。我的是:mySDK(我還不想辭職))如下


現(xiàn)在呢冤馏,你就可以拿著這個文件夾去揮霍了日麸。將他拖到你要應用了工程中



你以為這樣就完事了嗎。哼哼逮光,我就知道瞞不住你們代箭,上面已經(jīng)提到了,只能在模擬器上運行涕刚,如果我們鏈接手機:



我滴天嗡综,這都是什么鬼?可怕的報錯信息又來了杜漠。其實沒什么极景,對于這些報錯信息,不要慌驾茴,他都是有關鍵點的盼樟,這個不多說了,有點跑題沟涨。上文說了這是由于我們生成.a文件的時候恤批,是生成的模擬器版本的异吻,想要在手機上用就要生成手機版本的裹赴,那么手機版本的怎生成呢?(我都不好意思說了)看圖吧诀浪,別打我就行棋返。

改成Device 構建構成(command + B)你就會發(fā)現(xiàn) libGGTestSDK.a 變黑了。
重復之前的步驟 就可以在手機上運行了(但是雷猪,模擬器又不能用了睛竣。。求摇。射沟。)
接下來,我們就來生成一個雙方都能用的libGGTestSDK.a
首先与境,打開終端验夯,復制以下命令

lipo -create
模擬器.a文件目錄  
真機.a文件目錄
-output  輸出目錄/文件
image.png

最后拿到的libGGTestSDK.a 就哪里都可以用了!有不對的地方還望各位多多指正摔刁,大家相互溝通交流挥转。

二、創(chuàng)建自己的SDK - frameWork靜態(tài)庫


iOS中經(jīng)常會把你的代碼給第三方使用,但是又不想讓別人看到你實現(xiàn)的源代碼绑谣,這時候會有兩種選擇:把你的代碼打包成靜態(tài)庫或者Framework党窜。在早兩年的時候,靜態(tài)庫毫無疑問十分容易生成借宵,F(xiàn)ramework卻比較難做:所以很多時候如果代碼中的.h文件比較少的話幌衣,用靜態(tài)庫就夠了。然而Framework一直有一個優(yōu)勢:它看上去高大上(是的壤玫,這是我認為它最大的優(yōu)勢)泼掠,讓你的工程看上去更加整潔;它對頭文件隱藏的更好(這是什么鬼垦细?)择镇。開始很多人都用的開源框架iOS-Universal-Framework來生成Framework,然而后來Xcode升級后制作Framework變得非常容易括改,所以這個框架用的人不是非常多了腻豌。進入正題吧。首先嘱能,你需要新建一個框架的模板:


兩個選項對應Framework和.a文件吝梅,選擇第一個

新建工程成功后你發(fā)現(xiàn)目錄下有一個.h和一個plist文件臀晃,先不管它們扎狱。


新建之后

之后粥庄,你需要拖入一個相對完整的功能模塊吗蚌。這里直接創(chuàng)建了兩個新的工具類:

//Tool1.h
- (void)printName:(NSString *)name;
//Tool1.m
- (void)printName:(NSString *)name{ NSLog(@"您的名字為:%@",name);
}
//Tool2.h
- (void)printMyName;
//Tool2.m
#import "Tool1.h"
- (void)printMyName{
 Tool1 *tool1 = [[Tool1 alloc]init];
 [tool1 printName:@"Tony"];
}

之后向項目中加入你所依賴的框架瓣距。


不加的話跑不起來的

隨后在Build Phases->Headers中設置你要暴露的接口唬党。


主要設置Public和Private

這里我把Tool1.h和Tool2.h都移動到了Public中滑频。選擇相應的運行設備:


選個模擬器玩玩

如果你選擇了模擬器腺逛,那么打包出來的框架將能在對應的模擬器上使用著拭;如果你選擇了真機纱扭,那么將能在對應真機上使用。接下來要用到腳本儡遮。所以在Build Phases添加一項Run Script乳蛾。


點擊那個加號

進入Run Script中,


記得這個在Build Phases下哦

加入下面的腳本將模擬器和真機的Framework合并:

if [ "${ACTION}" = "build" ]

then

INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework

DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework

SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework

if [ -d "${INSTALL_DIR}" ]

then

rm -rf "${INSTALL_DIR}"

fi

mkdir -p "${INSTALL_DIR}"

cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"

#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"

lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"

#open "${DEVICE_DIR}"

open "${SRCROOT}/Products"

fi

接下來的工作就十分輕松了鄙币,點擊左上角的運行按鈕肃叶,然后腳本就自動彈出生成的Framework了。不過你要在64位和32位的編譯器上各跑一次來適配不同的設備(比如5和5S)十嘿。


不得不說這個腳本的彈出功能非常贊

好啦因惭!你已經(jīng)看到這個Framework了,你現(xiàn)在可以把他拖到你想要用的地方了详幽∩富叮快去試試吧浸锨!
怎么?你碰到麻煩了版姑?編譯報錯了柱搜。哦,你還需要讓編譯器提前編譯這個二進制文件剥险。進入General->Embedded Binaries,將加入的Framework添加上去聪蘸。


點擊加號加上去

這樣就OK了。
其實制作過程也只是按部就班罷了表制,F(xiàn)ramework的核心在于內部結構的設計健爬。之前和XX銀行合作時,拿到他們的Framework么介,非常整潔娜遵,類名和方法名都極其直觀,完全不用看接口文檔和注釋壤短,一直引以為規(guī)范设拟。然而不管怎么樣,請謹慎設計你的接口久脯,在每個對外暴露的方法中做好注釋纳胧;最后,一份通用的接口文檔也是必須的帘撰。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末跑慕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子摧找,更是在濱河造成了極大的恐慌核行,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慰于,死亡現(xiàn)場離奇詭異钮科,居然都是意外死亡唤衫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門佳励,熙熙樓的掌柜王于貴愁眉苦臉地迎上來休里,“玉大人,你說我怎么就攤上這事赃承∶钍颍” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵瞧剖,是天一觀的道長拭嫁。 經(jīng)常有香客問我可免,道長,這世上最難降的妖魔是什么做粤? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任浇借,我火速辦了婚禮,結果婚禮上怕品,老公的妹妹穿的比我還像新娘妇垢。我一直安慰自己,他們只是感情好肉康,可當我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布闯估。 她就那樣靜靜地躺著,像睡著了一般吼和。 火紅的嫁衣襯著肌膚如雪涨薪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天炫乓,我揣著相機與錄音尤辱,去河邊找鬼。 笑死厢岂,一個胖子當著我的面吹牛光督,可吹牛的內容都是我干的。 我是一名探鬼主播塔粒,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼结借,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了卒茬?” 一聲冷哼從身側響起船老,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎圃酵,沒想到半個月后柳畔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡郭赐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年薪韩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俘陷。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡观谦,死狀恐怖,靈堂內的尸體忽然破棺而出捉偏,到底是詐尸還是另有隱情,我是刑警寧澤夭禽,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布驻粟,位于F島的核電站根悼,受9級特大地震影響蜀撑,放射性物質發(fā)生泄漏。R本人自食惡果不足惜矿卑,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一母廷、第九天 我趴在偏房一處隱蔽的房頂上張望糊肤。 院中可真熱鬧馆揉,春花似錦、人聲如沸升酣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至驯遇,卻和暖如春蓄髓,著一層夾襖步出監(jiān)牢的瞬間会喝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工枉阵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留兴溜,地道東北人耻陕。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓膘怕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親岛心。 傳聞我的和親對象是個殘疾皇子忘古,可洞房花燭夜當晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內容