最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

IOS 打包靜態(tài)庫(kù)詳細(xì)介紹

 更新時(shí)間:2016年11月14日 11:17:06   作者:夜_闌珊  
這篇文章主要介紹了IOS 打包靜態(tài)庫(kù)詳細(xì)介紹的相關(guān)資料,這里對(duì)打包靜態(tài)庫(kù)做了詳細(xì)的說(shuō)明,并進(jìn)行了總結(jié),需要的朋友可以參考下

IOS 打包靜態(tài)庫(kù)詳細(xì)介紹

一、前言

前段時(shí)間看的一本書(shū)上說(shuō):“隔著一段距離看,很多有趣的知識(shí)看起來(lái)都很唬人。”比如說(shuō)這篇我要總結(jié)的“靜態(tài)庫(kù)知識(shí)”,在我初出茅廬的時(shí)候著實(shí)覺(jué)得那些后綴名為“.frameworke”、“.a”、“.dylib”的文件很神秘,很高冷。那時(shí)我雖然知道只要導(dǎo)入一個(gè)庫(kù)就能引用庫(kù)里面很多封裝好的東西,但對(duì)這個(gè)“庫(kù)”究竟是什么“鬼”,一直都是云里霧里。好了廢話(huà)不多說(shuō),看下去就知道它是個(gè)什么“鬼”。

二 、一些概念的補(bǔ)充

1、 什么是庫(kù)?

所謂庫(kù)就是程序代碼的集合,是共享程序代碼的一種方式。

2、 庫(kù)的分類(lèi)

根據(jù)程序代碼的開(kāi)源情況,庫(kù)可以分為兩類(lèi)

開(kāi)源庫(kù)

源代碼是公開(kāi)的,你可以看到具體實(shí)現(xiàn)。比如GitHub上比較出名的第三方框架AFNetworking、SDWebImage。

閉源庫(kù)

不公開(kāi)源代碼,只公開(kāi)調(diào)用的接口,看不到具體的實(shí)現(xiàn),是一個(gè)編譯后的二進(jìn)制文件。這種常見(jiàn)于一些公司的SDK包,比如高德地圖SDK、環(huán)信即時(shí)通訊SDK等等。而閉源庫(kù)又分為兩類(lèi):靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)。本篇重點(diǎn)要講的便是其中的靜態(tài)庫(kù)。

3、靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的存在形式和使用區(qū)別

存在形式:

靜態(tài)庫(kù)

以".a"或者“.framework”為文件后綴名

動(dòng)態(tài)庫(kù)

以".dylib"或者“.framework”為文件后綴名

使用區(qū)別:

靜態(tài)庫(kù)鏈接時(shí)會(huì)被完整的復(fù)制到可執(zhí)行文件中,被多次使用就有多份拷貝。


                                                                          靜態(tài)庫(kù)被程序使用時(shí)

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


                                                                       動(dòng)態(tài)庫(kù)被程序使用時(shí)

4、iOS 設(shè)備的CPU架構(gòu)

模擬器:
4s-5: i386
5s-7 Plus: x86_64

真機(jī)(iOS設(shè)備):
armv6: iPhone、iPhone 2、iPhone 3G、iPod Touch(第一代)、iPod Touch(第二代)
armv7: iPhone 3Gs、iPhone 4、iPhone 4s、iPad、iPad 2
armv7s: iPhone 5、iPhone 5c (靜態(tài)庫(kù)只要支持了armv7,就可以在armv7s的架構(gòu)上運(yùn)行)
arm64: iPhone 5s、iPhone 6、iPhone 6 Plus、iPhone 6s、iPhone 6s Plus、iPad Air、iPad Air2、iPad mini2、iPad mini3

:真機(jī)iPhone7、iPhone7 Plus A10處理器到底是什么架構(gòu)暫時(shí)不得而知,沒(méi)查到相關(guān)資料,貌似還沒(méi)公布,但是模擬器是x86_64。

三、打包靜態(tài)庫(kù)

因?yàn)殪o態(tài)庫(kù)存在兩種形式,我們先看.a靜態(tài)庫(kù)的打包

.a文件靜態(tài)庫(kù)打包

1、打開(kāi)Xcode創(chuàng)建一個(gè)新的工程,這里以Xcode8為例,選擇工程如下:


                                                                   創(chuàng)建一個(gè)新的工程

2、創(chuàng)建工程完畢后,再創(chuàng)建一個(gè)工具類(lèi)StaticLibTool,添加一個(gè)方法用于測(cè)試


                                                                     創(chuàng)建一個(gè)工具類(lèi),添加測(cè)試方法

StaticLibTool.m文件實(shí)現(xiàn)如下


                                                   taticLibTool.m文件實(shí)現(xiàn)

3、運(yùn)行工程進(jìn)行打包


                                                               運(yùn)行工程打包

運(yùn)行完畢后,我們會(huì)看到工程中Products文件夾下的libStaticLib.a文件由紅色變成了黑色。右鍵show in finder可以在其目錄下找到它。這就是我們打包好的.a靜態(tài)文件了。


                                                               打包好的.a靜態(tài)文件

但是這樣就完了嗎?當(dāng)然沒(méi)有,我們知道靜態(tài)庫(kù)存在的最大意義是隱藏代碼的具體實(shí)現(xiàn),但是這也隱藏的太徹底了,總要公開(kāi)些接口或者頭文件供人調(diào)用吧。

4、公開(kāi)接口頭文件

targets->Build Phases->Copy Files->"+"你需要公開(kāi)的頭文件

這里我們把新建的測(cè)試類(lèi)StaticLibTool.h公開(kāi)


                                                                    公開(kāi)接口頭文件

公開(kāi)頭文件后,我們?cè)侔瓷鲜?、2、3流程重新運(yùn)行打包,我們會(huì)得到一個(gè)頭文件和一個(gè).a靜態(tài)庫(kù)(如下圖),而這正是我們所需要的。


                                                   重新運(yùn)行打包

5、新建一個(gè)可運(yùn)行的工程,把這兩個(gè)打包好的文件拖入項(xiàng)目測(cè)試


                                                                測(cè)試

選擇Iphone7模擬器運(yùn)行,程序正常運(yùn)行,點(diǎn)擊模擬器屏幕,打印日志如下:


                                                             日志輸出

我們可以看到輸出沒(méi)有問(wèn)題,打包.a靜態(tài)庫(kù)大功告成。

但是,別高興的太早。當(dāng)我把模擬器切換成Iphone5運(yùn)行時(shí),編譯直接不通過(guò),報(bào)錯(cuò)如下:


                                                             iPhone 5模擬器運(yùn)行時(shí)的編譯錯(cuò)誤

上圖“Undefined symbols for architecture i386”是什么意思呢?意思是我們的libStaticLib.a靜態(tài)庫(kù)不支持i386架構(gòu)。那i386又是什么鬼?不清楚的可以拉上去看“iOS 設(shè)備的CPU架構(gòu)”,這里就不多做解釋了。

iPhone 5模擬器正好是i386架構(gòu),而我們打包的靜態(tài)庫(kù)不支持。但是iPhone 7模擬器運(yùn)行卻沒(méi)有問(wèn)題,這說(shuō)明我們打包的靜態(tài)庫(kù)正好支持iPhone 7模擬器 的cpu架構(gòu) x86_64。如何查看靜態(tài)庫(kù)所支持的架構(gòu),請(qǐng)看下一步。

6、終端查看靜態(tài)庫(kù)所支持的架構(gòu)

終端->cd進(jìn)入庫(kù)文件路徑->lipo -info 庫(kù)名


                                               終端查看靜態(tài)庫(kù)所支持的架構(gòu)

上圖可以看到,我們的靜態(tài)庫(kù)僅支持x86_64架構(gòu),也就是說(shuō)此靜態(tài)庫(kù)只可運(yùn)行在iphone5s-iphone7plus之間的模擬器設(shè)備。所以剛才我們運(yùn)行iphone5模擬器時(shí),編譯會(huì)報(bào)錯(cuò)。

到這里就可以進(jìn)一步解釋下,打包靜態(tài)庫(kù)時(shí),你用什么模擬器運(yùn)行,打包出來(lái)的靜態(tài)庫(kù)就支持什么模擬器的架構(gòu),而剛才我打包時(shí)是用iPhone7運(yùn)行,所以?xún)H支持架構(gòu)x86_64。那么這就太麻煩了,可以打包一個(gè)靜態(tài)庫(kù)支持多種架構(gòu)的模擬器嗎?答案是肯定的,請(qǐng)看下一步。

7、設(shè)置適配所有模擬器架構(gòu)

project -> buildSeting -> Build Active Architecture Only 設(shè)為NO


                                                             設(shè)置適配所有模擬器架構(gòu)

設(shè)置完成后,我們重新運(yùn)行打包靜態(tài)庫(kù)文件(這時(shí)你可隨便選一個(gè)模擬器),按照上述第6步終端查看其支持的架構(gòu),我們可以看到終端輸出的結(jié)果是同時(shí)支持 i386和x86_64,這也就意味著同時(shí)支持所有模擬器。

到這里打包.a靜態(tài)庫(kù)已經(jīng)告一段落,但是按上述流程打包的只能在模擬器上跑,真機(jī)是不能運(yùn)行的,因?yàn)閕os真機(jī)設(shè)備跟模擬器的架構(gòu)又不一樣(怎么不一樣自己拉上去看),所以還沒(méi)完(我也不想啊 ),請(qǐng)看下一步

8、打包支持真機(jī)架構(gòu)的靜態(tài)庫(kù)

所有流程都跟上面的一樣,只是我們運(yùn)行打包時(shí)要選擇真機(jī)運(yùn)行,如下圖你可以選擇自己插上去的真機(jī),也可以選擇Generic ios Devices。當(dāng)然不要忘記了設(shè)置支持所有真機(jī)機(jī)型架構(gòu): Build Active Architecture Only 設(shè)為NO。


                                                               打包支持真機(jī)架構(gòu)的靜態(tài)庫(kù)

我們可以看下打包出來(lái)的終端查看結(jié)果如下:


                                                                 終端輸出結(jié)果

上圖可以看到同時(shí)支持armv7和arm64,也就是支持所有ios設(shè)備。好了到此打包.a靜態(tài)庫(kù)算是告一段落。

.frameworke文件靜態(tài)庫(kù)打包

1、依然Xcode創(chuàng)建一個(gè)新的工程FrameworkeLib,選擇工程如下:


                                                      創(chuàng)建一個(gè)新的工程

創(chuàng)建完成后我們可以看到,工程本身自帶一個(gè)FrameworkeLib.h文件,這是類(lèi)似一個(gè)主頭文件一樣的東西


                                                    FrameworkeLib.h文件

2、創(chuàng)建需要測(cè)試的類(lèi),為了方便我把上述打包.a的測(cè)試類(lèi)StaticLibTool直接拖來(lái)使用。

3、設(shè)置支持所有模擬器架構(gòu)或真機(jī)架構(gòu)(和打包.a第7步驟一樣)

4、公開(kāi)頭文件

target-Build Phases - Headers -把需要公開(kāi)的頭文件從project拖入Public


                                                                       暴露頭文件

5、設(shè)置打包的是靜態(tài)庫(kù)。因?yàn)閯?dòng)態(tài)庫(kù)也可以是以framework形式存在,所以需要設(shè)置,否則默認(rèn)打出來(lái)的是動(dòng)態(tài)庫(kù)

target->BuildSetting ->搜索關(guān)鍵字mach->Mach-o Type 設(shè)為Static Library(這個(gè)默認(rèn)選項(xiàng)是動(dòng)態(tài)的)


                                                           設(shè)置打包的是靜態(tài)庫(kù)

6、選中真機(jī)或模擬器運(yùn)行設(shè)備打包(與打包.a一樣),完成后Products文件夾下的FrameworkeLib.framework文件由紅色變成了黑色,右鍵show in finder 顯示如下:


                                                             打包結(jié)果

FrameworkeLib.framework拖入項(xiàng)目便可直接使用,這里就不再進(jìn)行測(cè)試了。此外還要補(bǔ)充的一點(diǎn)是,打包靜態(tài)庫(kù)的時(shí)候還需注意打包的是測(cè)試版(Debug)還是發(fā)布版(Release),這個(gè)根據(jù)你自己的需求決定,而如何進(jìn)行設(shè)置請(qǐng)下一步驟。

7、設(shè)置打包靜態(tài)庫(kù)的測(cè)試版和發(fā)布版(.a和.frameworke)

product -> scheme -> Edit scheme -> Run->選擇Debug或Release


                                                             設(shè)置版本

     感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • iOS監(jiān)控筆記之啟動(dòng)crash

    iOS監(jiān)控筆記之啟動(dòng)crash

    iOS崩潰是讓iOS開(kāi)發(fā)人員比較頭痛的事情,app崩潰了,說(shuō)明代碼寫(xiě)的有問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于iOS監(jiān)控筆記之啟動(dòng)crash的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-05-05
  • iOS開(kāi)發(fā)教程之XLForm的基本使用方法

    iOS開(kāi)發(fā)教程之XLForm的基本使用方法

    XLForm 是最靈活且最強(qiáng)大的創(chuàng)建動(dòng)態(tài)表單的iOS庫(kù),下面這篇文章主要給大家介紹了關(guān)于iOS開(kāi)發(fā)教程之XLForm的基本使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • iOS項(xiàng)目開(kāi)發(fā)鍵盤(pán)彈出遮擋輸入框問(wèn)題解決方案

    iOS項(xiàng)目開(kāi)發(fā)鍵盤(pán)彈出遮擋輸入框問(wèn)題解決方案

    大家在用IOS開(kāi)發(fā)項(xiàng)目的時(shí)候,經(jīng)常出現(xiàn)鍵盤(pán)彈出遮擋輸入框問(wèn)題,小編給大家整理的這個(gè)問(wèn)題的處理方法,一起學(xué)習(xí)下。
    2018-01-01
  • iOS狀態(tài)欄frame計(jì)算問(wèn)題的實(shí)現(xiàn)

    iOS狀態(tài)欄frame計(jì)算問(wèn)題的實(shí)現(xiàn)

    這篇文章主要介紹了iOS狀態(tài)欄frame計(jì)算問(wèn)題的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • IOS 網(wǎng)絡(luò)請(qǐng)求中設(shè)置cookie

    IOS 網(wǎng)絡(luò)請(qǐng)求中設(shè)置cookie

    這篇文章主要介紹了IOS 網(wǎng)絡(luò)請(qǐng)求中設(shè)置cookie的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • iPhoneX無(wú)導(dǎo)航欄頁(yè)面適配問(wèn)題解決方案

    iPhoneX無(wú)導(dǎo)航欄頁(yè)面適配問(wèn)題解決方案

    這篇文章主要介紹了iPhoneX無(wú)導(dǎo)航欄頁(yè)面適配問(wèn)題解決方案,原全屏適配在iPhoneX會(huì)由于安全區(qū)域的變化導(dǎo)致顯示不全,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2017-11-11
  • iOS中控制NSLog輸出時(shí)機(jī)詳解

    iOS中控制NSLog輸出時(shí)機(jī)詳解

    本文給大家介紹的是iOS開(kāi)發(fā)中關(guān)于nslog的輸出時(shí)機(jī)的相關(guān)內(nèi)容,非常簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下
    2017-12-12
  • iOS開(kāi)發(fā)教程之識(shí)別圖片中二維碼功能的實(shí)現(xiàn)

    iOS開(kāi)發(fā)教程之識(shí)別圖片中二維碼功能的實(shí)現(xiàn)

    長(zhǎng)按識(shí)別二維碼這個(gè)功能相信對(duì)大家來(lái)說(shuō)都不陌生,最近工作中就遇到了這個(gè)需求,所以下面這篇文章主要給大家介紹了關(guān)于利用iOS識(shí)別圖片中二維碼的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-07-07
  • 用iOS模擬器安裝App的方法

    用iOS模擬器安裝App的方法

    下面小編就為大家分享一篇用iOS模擬器安裝App的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • 詳解 objective-c中interface與protocol的作用

    詳解 objective-c中interface與protocol的作用

    這篇文章主要介紹了詳解 objective-c中interface與protocol的作用的相關(guān)資料,需要的朋友可以參考下
    2017-05-05

最新評(píng)論

舟山市| 宁陵县| 武宁县| 睢宁县| 黎川县| 同心县| 历史| 屯留县| 黄山市| 庆云县| 新沂市| 夏津县| 屏东县| 益阳市| 莱芜市| 杭州市| 宁夏| 江口县| 文山县| 衡东县| 庐江县| 彩票| 南江县| 宜兴市| 疏附县| 沐川县| 庆元县| 铜川市| 山东省| 共和县| 遂平县| 花莲县| 富裕县| 台中市| 昭平县| 赣榆县| 壤塘县| 葫芦岛市| 封开县| 华亭县| 桐柏县|