iOS Xcode9 封裝生成.framework

從上面我們可以看出.a 和.framework的區(qū)別就是.a+.h+soureFile=.framework闻丑,這樣的話,我們還是直接封裝個.framework比較好勋锤。

封裝framework步驟

1叁执、打開xcode矮冬,新建工程

這里我使用的是Xcode9验夯,選擇Cocoa Touch Framework熊户,然后點(diǎn)next该肴。

2滋恬、創(chuàng)建功能類或者拖入已有的功能類

這里我創(chuàng)建的是ShowResult類恢氯。

3勋拟、實(shí)現(xiàn)功能類的功能

.h文件中

.m文件中

4、更改Xcode項(xiàng)目配置

在TARGETS下選中工程>Build Setting>搜索linking苦银,然后幾個需要設(shè)置的選項(xiàng)都顯現(xiàn)出來幔虏。

1想括、首先是Dead Code Stripping設(shè)置為NO瑟蜈,網(wǎng)上對此項(xiàng)的解釋如下,大致意思是如果開啟此項(xiàng)就會對代碼中的”dead”焙格、”unreachable”的代碼過濾眷唉,不過這個開關(guān)是否關(guān)閉冬阳,似乎沒有多大影響肝陪,不過為了完整還原framework中的代碼氯窍,將此項(xiàng)關(guān)閉也未曾不可。

2狼讨、然后將Link With Standard Libraries關(guān)閉播聪,我想可能是為了避免重復(fù)鏈接

3离陶、最后將Mach-O Type設(shè)為Static Library招刨,framework可以是動態(tài)庫也可以是靜態(tài)庫术吝,對于系統(tǒng)的framework是動態(tài)庫沦寂,而用戶制作的framework只能是靜態(tài)庫淘衙。

5毯侦、增加armv7s

更改后:

設(shè)置Headers

將你要公開的頭文件拖至Public下侈离,要隱藏的放在Private或者Project下卦碾,當(dāng)然起宽,隱藏的頭文件就無法再被引用坯沪。

然后需要在FrameworkTest.h(必須是公開的叉弦,否則無法引用)中將你所有要公開的.h引入。

打包

打包有兩種方式 一種是手動打包,另一種是用腳本,這里我用手動打包的方式潘拱。

1芦岂、選中模擬器禽最,編譯程序command+B

2川无、選中測試機(jī)懦趋,編譯程序command+B

3仅叫、在finder中找到framework文件

找到下圖中的FrameworkTest文件诫咱,這里有兩個同名文件竟痰,一個是Debug-iphoneos(真機(jī))下的幻锁,一個是Debug-iphonesimulator(模擬器)下的假消。

4、通過終端命令將兩個framework合為一個模擬器和真機(jī)都可使用的framework岭接。

打開終端富拗,輸入lipo -create命令臼予,將

Debug-iphoneos下FrameworkTest.framework目錄下的FrameworkTest文件

拖拽到終端中,會自動有空格啃沪。然后將Debug-iphonesimulator下FrameworkTest.framework目錄下的FrameworkTest文件

拖拽進(jìn)來粘拾,也會自動有空格,然后輸入 -output创千,敲空格缰雇,在引入一個新的路徑。最后敲回車追驴,這樣就合并了暇咆。

上面這段命令就是把真機(jī)和模擬器中的FrameworkTest合并成一個新的文件放在和newTest同級的文件夾new下扯旷,這個新文件后綴是.lipo,并不是我們要的FrameworkTest文件惰瓜,怎么辦呢洲拇?我們的操作是按照人家說的把合成后的文件名字改成FrameworkTest替換原來的。而且蛾绎,把后綴.lipo去掉顽爹!然后將新生成的這個FrameworkTest替換原來的FrameworkTest。進(jìn)行下一步涉馅。

這里終端會有一個error

error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: can't move temporary file: /Users/lgj/Desktop/new/newTest to file: /Users/lgj/Desktop/new/newTest.lipo (Is a directory)

5朱灿、將修改后的framework拷貝出來就是我們最終制作的framework了。

使用

將我們封裝的framework拖拽到新的工程里面。

我們打開這個framework看看咏雌,發(fā)現(xiàn)只有Headers,里面有兩個.h房匆,其中一個是FrameworkTest.h另一個就是ShowResult.h文件。

引入頭文件:

運(yùn)行得到[ShowResult show];的結(jié)果

至此举户,完成framework的封裝和使用。

總結(jié)

1、在制作framework或者lib的時(shí)候,如果使用了category,則使用改FMWK的程序運(yùn)行時(shí)會crash泳桦,此時(shí)需要在該工程中 other linker flags添加兩個參數(shù) -ObjC -all_load梧奢。(這點(diǎn)沒有親測)

2鸟顺、帶有圖片資源的需要把圖片打包成Bundle文件,和framework一起拷貝到相應(yīng)的項(xiàng)目中。

3、公開的類中如果引用的private的類,打包以后對外會報(bào)錯,找不到那個private的類魂迄,可以把那個private的.h放到(也沒親測)

4湿酸、namespace 沖突铁坎。靜態(tài)庫用了某第三方庫犁苏,項(xiàng)目也用了同樣的第三方庫,在編譯的時(shí)候就會有 duplicate symbol 錯誤围详,因?yàn)橛袃煞萃瑯拥牡谌綆熳嫫痢=鉀Q辦法就是把用到的第三方庫加上自定義前綴袁勺,包括類名咐汞、delegate 協(xié)議、常量名掠手,尤其需要注意 Category 的方法名要修改混槐。

5揣苏、圖片等資源文件用 bundle 方式打包茫经。一個簡單制作 bundle 的方法:新建文件夾卸伞,重命名為 YourSDK.bundle,然后 Show Package Contents 打開锉屈,加入圖片荤傲。使用圖片的時(shí)候需要指明 bundle: [UIImage imageNamed:@"YourSDK.bundle/img.png"]。也可以用 Target 方式制作 bundle颈渊,比如 iOS Library With Resources

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末遂黍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子俊嗽,更是在濱河造成了極大的恐慌雾家,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绍豁,死亡現(xiàn)場離奇詭異芯咧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)竹揍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進(jìn)店門唬党,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鬼佣,你說我怎么就攤上這事∷。” “怎么了晶衷?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長阴孟。 經(jīng)常有香客問我晌纫,道長,這世上最難降的妖魔是什么永丝? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任锹漱,我火速辦了婚禮,結(jié)果婚禮上慕嚷,老公的妹妹穿的比我還像新娘哥牍。我一直安慰自己毕泌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布嗅辣。 她就那樣靜靜地躺著撼泛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪澡谭。 梳的紋絲不亂的頭發(fā)上愿题,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機(jī)與錄音蛙奖,去河邊找鬼潘酗。 笑死,一個胖子當(dāng)著我的面吹牛雁仲,可吹牛的內(nèi)容都是我干的仔夺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼伯顶,長吁一口氣:“原來是場噩夢啊……” “哼囚灼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起祭衩,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤灶体,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后掐暮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝎抽,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年路克,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了樟结。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡精算,死狀恐怖瓢宦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情灰羽,我是刑警寧澤驮履,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站廉嚼,受9級特大地震影響玫镐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜怠噪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一恐似、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧傍念,春花似錦矫夷、人聲如沸葛闷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孵运。三九已至,卻和暖如春蔓彩,著一層夾襖步出監(jiān)牢的瞬間治笨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工赤嚼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旷赖,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓更卒,卻偏偏與公主長得像等孵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蹂空,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評論 2 359

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