iOS動(dòng)態(tài)庫和靜態(tài)庫(轉(zhuǎn)載)

iOS動(dòng)態(tài)庫垮庐、靜態(tài)庫及使用場(chǎng)景、方式:http://www.reibang.com/p/4e0fd0214152

iOS開發(fā)中的靜態(tài)庫和動(dòng)態(tài)庫: ?http://www.reibang.com/p/57a63261046e

//轉(zhuǎn)載:https://www.jb51.net/article/210671.htm

iOS 合并 .a 文件嗡午,生成通用靜態(tài)庫:http://www.reibang.com/p/dacf924246fa

合并時(shí)報(bào)錯(cuò)處理: http://www.reibang.com/p/781795e98444

一闷旧、什么是庫仁堪?

二媳纬、靜態(tài)庫和動(dòng)態(tài)庫的好處

使用靜態(tài)庫的好處:

動(dòng)態(tài)庫使用有如下好處:

三、iOS里靜態(tài)庫和動(dòng)態(tài)庫形式纹磺?

四帖烘、framework為什么既是靜態(tài)庫又是動(dòng)態(tài)庫?

五橄杨、a與.framework有什么區(qū)別秘症?

六照卦、為什么要使用靜態(tài)庫?

七乡摹、制作靜態(tài)庫時(shí)的幾點(diǎn)注意:

一役耕、什么是庫?

庫是共享程序代碼的方式聪廉,一般分為靜態(tài)庫和動(dòng)態(tài)庫瞬痘。

靜態(tài)庫:鏈接時(shí)完整地拷貝至可執(zhí)行文件中,被多次使用就有多份冗余拷貝板熊。

動(dòng)態(tài)庫:鏈接時(shí)不復(fù)制框全,程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存,供程序調(diào)用干签,系統(tǒng)只加載一次津辩,多個(gè)程序共用,節(jié)省內(nèi)存容劳。

二喘沿、靜態(tài)庫和動(dòng)態(tài)庫的好處

使用靜態(tài)庫的好處:

1、模塊化竭贩,分工合作

2蚜印、避免少量改動(dòng)經(jīng)常導(dǎo)致大量的重復(fù)編譯連接

3、也可以重用留量,注意不是共享使用

動(dòng)態(tài)庫使用有如下好處:

1晒哄、使用動(dòng)態(tài)庫,可以將最終可執(zhí)行文件體積縮小

2肪获、使用動(dòng)態(tài)庫,多個(gè)應(yīng)用程序共享內(nèi)存中得同一份庫文件柒傻,節(jié)省資源

3孝赫、使用動(dòng)態(tài)庫,可以不重新編譯連接可執(zhí)行程序的前提下红符,更新動(dòng)態(tài)庫文件達(dá)到更新應(yīng)用程序的目的青柄。

從1可以得出,將整個(gè)應(yīng)用程序分模塊预侯,團(tuán)隊(duì)合作致开,進(jìn)行分工,影響比較小萎馅。

從2可以看出双戳,其實(shí)動(dòng)態(tài)庫應(yīng)該叫共享庫,那么從這個(gè)意義上來說糜芳,蘋果禁止iOS開發(fā)中使用動(dòng)態(tài)庫就可以理解了:

因?yàn)樵诂F(xiàn)在的iPhone飒货,iPodTouch魄衅,iPad上面程序都是單進(jìn)程的,也就是某一時(shí)刻只有一個(gè)進(jìn)程在運(yùn)行塘辅,那么你寫個(gè)共享庫晃虫,

----共享給誰?(你使用的時(shí)候只有你一個(gè)應(yīng)用程序存在扣墩,其他的應(yīng)該被掛起了哲银,即便是可以同時(shí)多個(gè)進(jìn)程運(yùn)行,別人能使用你的共享庫里的東西嗎呻惕?你這個(gè)是給你自己的程序定制的荆责。)

----目前蘋果的AppStore不支持模塊更新,無法更新某個(gè)單獨(dú)文件(除非自己寫一個(gè)更新機(jī)制:有自己的服務(wù)端放置最新動(dòng)態(tài)庫文件)

至于蘋果為啥禁止ios開發(fā)使用動(dòng)態(tài)庫我就猜到上面?zhèn)z原因

三蟆融、iOS里靜態(tài)庫和動(dòng)態(tài)庫形式草巡?

靜態(tài)庫:.a和.framework

動(dòng)態(tài)庫:.dylib和.framework

四、framework為什么既是靜態(tài)庫又是動(dòng)態(tài)庫型酥?

系統(tǒng)的.framework是動(dòng)態(tài)庫山憨,我們自己建立的.framework是靜態(tài)庫。

五弥喉、a與.framework有什么區(qū)別郁竟?

.a是一個(gè)純二進(jìn)制文件,.framework中除了有二進(jìn)制文件之外還有資源文件由境。

.a文件不能直接使用棚亩,至少要有.h文件配合,.framework文件可以直接使用虏杰。

.a + .h + sourceFile = .framework讥蟆。

建議用.framework.

六、為什么要使用靜態(tài)庫纺阔?

方便共享代碼瘸彤,便于合理使用。

實(shí)現(xiàn)iOS程序的模塊化笛钝≈士觯可以把固定的業(yè)務(wù)模塊化成靜態(tài)庫。

和別人分享你的代碼庫玻靡,但不想讓別人看到你代碼的實(shí)現(xiàn)结榄。

開發(fā)第三方sdk的需要。

七囤捻、制作靜態(tài)庫時(shí)的幾點(diǎn)注意:

1 注意理解:無論是.a靜態(tài)庫還.framework靜態(tài)庫臼朗,我們需要的都是二進(jìn)制文件+.h+其它資源文件的形式,不同的是,.a本身就是二進(jìn)制文件依溯,需要我們自己配上.h和其它文件才能使用老厌,而.framework本身已經(jīng)包含了.h和其它文件,可以直接使用黎炉。

2 圖片資源的處理:兩種靜態(tài)庫枝秤,一般都是把圖片文件單獨(dú)的放在一個(gè).bundle文件中,一般.bundle的名字和.a或.framework的名字相同慷嗜。.bundle文件很好弄淀弹,新建一個(gè)文件夾,把它改名為.bundle就可以了庆械,右鍵薇溃,顯示包內(nèi)容可以向其中添加圖片資源。

3 category是我們實(shí)際開發(fā)項(xiàng)目中經(jīng)常用到的缭乘,把category打成靜態(tài)庫是沒有問題的沐序,但是在用這個(gè)靜態(tài)庫的工程中,調(diào)用category中的方法時(shí)會(huì)有找不到該方法的運(yùn)行時(shí)錯(cuò)誤(selector not recognized)堕绩,解決辦法是:在使用靜態(tài)庫的工程中配置other linker flags的值為-ObjC策幼。

4 如果一個(gè)靜態(tài)庫很復(fù)雜,需要暴露的.h比較多的話奴紧,就可以在靜態(tài)庫的內(nèi)部創(chuàng)建一個(gè).h文件(一般這個(gè).h文件的名字和靜態(tài)庫的名字相同)特姐,然后把所有需要暴露出來的.h文件都集中放在這個(gè).h文件中,而那些原本需要暴露的.h都不需要再暴露了黍氮,只需要把.h暴露出來就可以了唐含。

以上就是ios動(dòng)態(tài)庫和靜態(tài)庫的區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于ios動(dòng)態(tài)庫和靜態(tài)庫的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章沫浆!


知識(shí)儲(chǔ)備:

一.庫(Library)

什么是庫捷枯?

? ? ?庫是程序代碼的集合,是程序共享代碼的一種方式专执。根據(jù)源代碼的公開情況淮捆,庫可以分為開源庫和閉源庫。比如SDWebImage,AFNetworking,等可以看源碼的叫開源庫他炊。閉源庫,不公開源代碼已艰,是經(jīng)過編譯后的二進(jìn)制文件痊末,看不到具體的實(shí)現(xiàn)。閉源庫又可以分為靜態(tài)庫和動(dòng)態(tài)庫哩掺。庫說白了就是一段編譯好的二進(jìn)制代碼凿叠,加上頭文件就可以供別人使用。

二.靜態(tài)庫和動(dòng)態(tài)庫

和多數(shù)人所熟悉的動(dòng)態(tài)語言和靜態(tài)語言一樣,這里的所謂靜態(tài)和動(dòng)態(tài)是相對(duì)編譯期和運(yùn)行期的

存在形式

? ? ?靜態(tài)庫:.a 和 .framework ? ?動(dòng)態(tài)庫: .dylib 和 .framework盒件。 所以很多人誤以為.a就是靜態(tài)庫蹬碧,.framework就是動(dòng)態(tài)庫,不過系統(tǒng)的.framework都是動(dòng)態(tài)庫

靜態(tài)庫和動(dòng)態(tài)庫使用上的區(qū)別

靜態(tài)庫:鏈接時(shí)炒刁,靜態(tài)庫會(huì)被完整地復(fù)制到可執(zhí)行文件中恩沽,被多次使用就有多份冗余拷貝。編譯完成后翔始,庫文件實(shí)際上就沒有作用了罗心,也這是它的優(yōu)勢(shì)。當(dāng)然其缺點(diǎn)也很明顯城瞎,就是會(huì)明顯增大程序的體積渤闷。

動(dòng)態(tài)庫:鏈接時(shí)不復(fù)制,程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存脖镀,供程序調(diào)用飒箭,系統(tǒng)只加載一次,供多個(gè)程序調(diào)用蜒灰,節(jié)省內(nèi)存弦蹂。由此可見動(dòng)態(tài)庫又可以叫共享庫。注意:ios 8之前蘋果禁止iOS開發(fā)中使用自己創(chuàng)建的動(dòng)態(tài)庫卷员。原因估計(jì)是現(xiàn)在的iPhone盈匾,iPodTouch,iPad上面程序都是單進(jìn)程的毕骡,也就是某一時(shí)刻只有一個(gè)進(jìn)程在運(yùn)行削饵,那么你寫個(gè)共享庫,共享給誰呢未巫?你使用的時(shí)候只有你一個(gè)應(yīng)用程序存在窿撬,其他的應(yīng)該被掛起了,即便是可以同時(shí)多個(gè)進(jìn)程運(yùn)行叙凡,別人能使用你的共享庫里的東西嗎劈伴?但是iOS8之后,出現(xiàn)了Extension握爷,動(dòng)態(tài)庫有了用武之地跛璧,而且swift只支持動(dòng)態(tài)庫的使用,造成這個(gè)原因主要是swift的運(yùn)行庫沒有被包含在iOS系統(tǒng)中新啼,而是會(huì)被打包進(jìn)App中(這也是造成Swift App體積大的原因)追城,靜態(tài)庫會(huì)導(dǎo)致最終的目標(biāo)程序中包含重復(fù)的運(yùn)行庫(這是蘋果自家的解釋)。

Framework

framework實(shí)際上是一種打包方式燥撞,將庫的二進(jìn)制文件座柱,頭文件和有關(guān)的資源文件打包到一起迷帜,方便管理和分發(fā)。.framework文件可以直接扔到程序直接使用色洞。

作者:小生不怕

鏈接:http://www.reibang.com/p/57a63261046e

來源:簡書

著作權(quán)歸作者所有戏锹。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處火诸。

iOS 合并 .a 文件锦针,生成通用靜態(tài)庫

在桌面上面新建文件夾,用來保存導(dǎo)出來的模擬器文件和真機(jī)文件惭蹂;

cd 到當(dāng)前保存的文件目錄伞插,如: cd /users/******/Deskop/sdk.a文件

打開 mac 終端,在終端中輸入以下命令

lipo -create iphoneos/libShouMiPaySDK.a iphonesimulator/libShouMiPaySDK.a -output ShouMiPaySDK.a

其中 iphoneos/libShouMiPaySDK.a 為導(dǎo)出的真機(jī)文件盾碗,

iphonesimulator/libShouMiPaySDK.a 為導(dǎo)出的模擬器文件

-output ShouMiPaySDK.a 為合并之后的通用靜態(tài)庫

需要注意的是當(dāng)編譯.a文件之前媚污,需要將 debug 和 release 設(shè)置為 NO

注意

需要更改 Build Settings-Build Active Architecture Only 設(shè)為 No

Debug:Yes 表示只編譯選中模擬器對(duì)應(yīng)的架構(gòu), No 則為編譯所有模擬器支持的 cup 架構(gòu)(Debug的 Yes 狀態(tài)改為 No 即可)

4人點(diǎn)贊

NJY Mac

作者:NapoleonY

鏈接:http://www.reibang.com/p/dacf924246fa

來源:簡書

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)廷雅,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處耗美。


Xcode 12打包framework 報(bào)錯(cuò):have the same architectures (arm64) and can't be in the same fat output file

猿逗比關(guān)注

0.4772021.05.12 14:18:29字?jǐn)?shù) 462閱讀 1,771

解決此問題的時(shí)候走了很多彎路,在這就不多說了航缀。

解決方案:

在?Target->BuildSetting->Architectures->Excluded Architectures?中

點(diǎn)擊箭頭展開

點(diǎn)擊右側(cè)加號(hào)商架,添加Any iOS Simulator SDK

在Any iOS Simulator SDK 后面添加arm64

這樣編譯出來的包中就不會(huì)包含arm64了。

模擬器忽略arm64.jpg

針對(duì)這個(gè)問題芥玉,詳細(xì)說明一下:

正常我們打包framework都會(huì)需要支持i386蛇摸、armv7、x86_64灿巧、arm64等赶袄,因?yàn)樾枰瑫r(shí)滿足真機(jī)和模擬器的運(yùn)行。所以我們正常都用將編譯后的framework進(jìn)行合并抠藕,命令行如下:

lipo -create 真機(jī)文件路徑 模擬器文件路徑 -output 真機(jī)文件路徑

文件路徑見圖:

framework工程位置.jpg

framework在Finder位置.jpg

但是Xcode 12以后模擬器編譯生成的framework中也會(huì)包含arm64饿肺,因此在合并的時(shí)候就會(huì)出現(xiàn)have the same architectures (arm64) and can't be in the same fat output file的報(bào)錯(cuò),而我們一開始的方式就能解決這個(gè)問題盾似。

此處補(bǔ)充一個(gè)查看framework包含內(nèi)容的命令:

lipo -info framework路徑

說到這里就會(huì)有別的問題了(可能是跟我換電腦有關(guān))敬辣,換了個(gè)M1的Mac之后編譯的模擬器framework只有arm64了,x86_64的沒有了零院。

此時(shí)需要用到另一個(gè)設(shè)置了溉跃,依然在Target->BuildSetting中,搜索VALID_ARCHS,在這里是描述你編譯時(shí)需要包含哪些架構(gòu)的告抄,在后面添加上x86_64即可撰茎。

添加x86_64.jpg

寫的可能不是太條理,大致的問題就是這么回事玄妈,有不明白的可以留言乾吻。

補(bǔ)充目前為止Apple移動(dòng)設(shè)備默認(rèn)指令集:

armv6:iPhone2G/3G、iPod 1G/2G

armv7:iPhone 3GS/4/4s拟蜻、iPod 3G/4G绎签、iPad 1G/2G/3G、iPad mini

armv7s:iPhone5酝锅、iPhone5c诡必、iPad4

arm64:iPhone5s及以后、iPad Air搔扁、iPad mini2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末爸舒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子稿蹲,更是在濱河造成了極大的恐慌扭勉,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苛聘,死亡現(xiàn)場(chǎng)離奇詭異涂炎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)设哗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門唱捣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人网梢,你說我怎么就攤上這事震缭。” “怎么了战虏?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵拣宰,是天一觀的道長。 經(jīng)常有香客問我活烙,道長徐裸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任啸盏,我火速辦了婚禮重贺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘回懦。我一直安慰自己气笙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布怯晕。 她就那樣靜靜地躺著潜圃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舟茶。 梳的紋絲不亂的頭發(fā)上谭期,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天堵第,我揣著相機(jī)與錄音,去河邊找鬼隧出。 笑死踏志,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的胀瞪。 我是一名探鬼主播针余,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼凄诞!你這毒婦竟也來了圆雁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤帆谍,失蹤者是張志新(化名)和其女友劉穎伪朽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汛蝙,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡驱负,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了患雇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跃脊。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖苛吱,靈堂內(nèi)的尸體忽然破棺而出酪术,到底是詐尸還是另有隱情,我是刑警寧澤翠储,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布绘雁,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜降铸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挪略。 院中可真熱鬧,春花似錦滔岳、人聲如沸杠娱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摊求。三九已至,卻和暖如春刘离,著一層夾襖步出監(jiān)牢的瞬間室叉,已是汗流浹背睹栖。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留茧痕,地道東北人磨淌。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像凿渊,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缚柳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

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