亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

iOS中.a和.framework靜態(tài)庫的創(chuàng)建與.bundle資源包的使用詳解

 更新時間:2017年12月06日 11:53:27   作者:iaoyouPrince  
這篇文章主要給大家介紹了關(guān)于在iOS中.a和.framework靜態(tài)庫的創(chuàng)建與.bundle資源包的使用的相關(guān)資料,文中介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

開發(fā)中經(jīng)常使用三方庫去實現(xiàn)某特定功能,而這些三方庫通常又分為開源庫和閉源庫。開源庫可以直接拿到源碼,和自己寫的沒有什么區(qū)別,我們可以最大程度的修改源碼來適應(yīng)自己功能。閉源庫就是被發(fā)布者提前打包好的靜態(tài)庫或 Bundle 包,對此我們無法看到內(nèi)部實現(xiàn),對于其封裝好的特定功能,我們也只需要調(diào)用其開放的API即可。

在正式的上代碼之前,先介紹一些從網(wǎng)上搜集的靜態(tài)庫相關(guān)的基本概念,以加深對后面知識的理解

1. 庫

庫實際上是一種代碼共享的方式,主要用于代碼重用和源碼隱藏,通常分為動態(tài)庫和靜態(tài)庫。

2. 區(qū)別

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

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

3. iOS中靜態(tài)庫的形式

在iOS中靜態(tài)庫以.a和.framework的形式存在,動態(tài)庫以.dylib和.framework的形式存在。

之所以.framework既可能是動態(tài)庫又可能是靜態(tài)庫,是因為蘋果公司禁止用戶級App使用動態(tài)庫,而自己卻又堂而皇之的使用動態(tài)庫,這就造成了iOS中系統(tǒng)級的.framework是動態(tài)庫,用戶級的.framework是靜態(tài)庫(無可奈何?。?。

本文就來講解一下 .a 和 .framework 靜態(tài)庫的創(chuàng)建與 .bundle 資源包的使用。


庫分靜態(tài)庫和動態(tài)庫兩種。從本質(zhì)上來說是一種可執(zhí)行代碼的二進制格式,可以被載入內(nèi)存中執(zhí)行。

靜態(tài)庫和動態(tài)庫是相對編譯期和運行期的:靜態(tài)庫在程序編譯時會被鏈接到目標(biāo)代碼中,程序運行時將不再需要改靜態(tài)庫;而動態(tài)庫在程序編譯時并不會被鏈接到目標(biāo)代碼中,只是在程序運行時才被載入,因為在程序運行期間還需要動態(tài)庫的存在。

靜態(tài)庫的形式

形式為 :.a 和 .framework 兩種

其中 .framework 類型的庫如果是系統(tǒng)內(nèi)部的是動態(tài)庫,我們自己創(chuàng)建的是靜態(tài)庫

.a 和 .framework 的區(qū)別

.a是一個純二進制文件,.framework中除了有二進制文件之外還有資源文件。

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

.a + .h + sourceFile = .framework。

建議用.framework。

靜態(tài)庫的優(yōu)勢

  • 方便共享代碼,便于合理使用。
  • 實現(xiàn)iOS程序的模塊化??梢园压潭ǖ臉I(yè)務(wù)模塊化成靜態(tài)庫。
  • 和別人分享你的代碼庫,但不想讓別人看到你代碼的實現(xiàn)。
  • 開發(fā)第三方sdk的需要。

創(chuàng)建和打包 .a 靜態(tài)庫

  • 創(chuàng)建靜態(tài)庫項目
    iOS --> Framework & Library --> Cocoa Touch Static Library
  • 把需要編譯成靜態(tài)庫的代碼拖進項目
  • 設(shè)置可見的.h文件。
    Build Phases --> Copy Files 添加.h文件即可。

1.修改支持的架構(gòu)

     4.1 設(shè)置支持所有模擬器架構(gòu) Build Settings --> Build Active Architecture Only --> Debug 改為 NO

     4.2設(shè)置支持所有手機架構(gòu)

2.編譯

     編譯一次模擬器,編譯一次手機。

     會生成.a文件 和 可見的頭文件。

     使用命令行,合并剛剛生成的的兩個路徑,到另一個路徑,例如:

     lipo -create 模擬器lib路徑 真機lib路徑 -output /Users/username/Desktop/libPSSTest.a

3.使用靜態(tài)庫

     注意:如果這個靜態(tài)庫需要依賴庫,也是需要引入依賴庫。

創(chuàng)建和打包 .framework 靜態(tài)庫

1.創(chuàng)建Framework項目

     iOS --> Framework & Library --> Cocoa Touch Framework

2.修改打包的framework是動態(tài)庫還是靜態(tài)庫

     framework項目默認(rèn)是動態(tài)庫。

     靜態(tài)庫配置:Build Settings --> Mach-O Type --> 改為 Static Library

3.把需要編譯成靜態(tài)庫的代碼拖進項目

     設(shè)置可見頭文件

     項目創(chuàng)建后,項目中只有一個主頭文件。

     Build Phases --> Headers --> public 添加頭文件

4.編譯

     編譯一次模擬器,編譯一次手機

5.使用

     把framework引入項目。

     如果是動態(tài)庫需要在 General --> Embedded Binaries 中引入配置。

     如果是靜態(tài)庫就不需要配置了。

靜態(tài)庫問題

1.靜態(tài)庫位置 Debug運行真機編譯會把靜態(tài)庫生成到 Debug-iphoneos目錄下

   Debug運行模擬器編譯會把靜態(tài)庫生成到 Debug-iphonesimulator目錄下

   Release運行真機編譯會把靜態(tài)庫生成到 Release-iphoneos目錄下

   Release運行模擬器編譯會把靜態(tài)庫生成到 Release-iphonesimulator目錄下

2.Debug版本 VS Release版本

   調(diào)試版

      調(diào)試版本會包含完整的符號信息,以方便調(diào)試

      調(diào)試版本不會對代碼進行優(yōu)化

   發(fā)布版

      發(fā)布版本不會包含完整的符號信息 發(fā)布版本的執(zhí)行代碼是進行過優(yōu)化的

      發(fā)布版本的大小會比調(diào)試版本的略小

      在執(zhí)行速度方面,調(diào)試版本會更快些,但不意味著會有顯著的提升

3.Undefind symbols for architecture arm64(i386)

   原因:是靜態(tài)庫不支持cpu arm64(i386)架構(gòu)

4.iPhone手機的cpu架構(gòu)

   模擬器

      iPhone4s,5 是 i386架構(gòu)

      iPhone5s以后 是x86_64架構(gòu)

   發(fā)布版

      iphone1代,3G,3GS 是 armv6架構(gòu)

      iPhone4,4s 是 armv7架構(gòu)

      iphone5,5s,5c 是 armv7s架構(gòu)

      iPhone6,6s,6plus,6splus 是 arm64架構(gòu)

5.查看.a庫所支持的架構(gòu)類型

   lipo -info xxx.a

6..a靜態(tài)庫合并

   lipo -create 真機靜態(tài)庫.a 模擬器靜態(tài)庫.a -output 新文件.a

   (最好指定一個目錄,否則會默認(rèn)當(dāng)前目錄)

   只合并Debug版本 或者 只合并Release版本即可。

7.查看.framework庫所支持的架構(gòu)類型

   7.1 進入到framework文件夾中

   7.2 lipo -info Framework 即可

靜態(tài)庫編譯錯誤

1.MRC 錯誤:會提示好多的autorelease,release,retain等錯誤

   解決方案:給這個文件MRC編譯 或者項目改成MRC環(huán)境

2.找不到 <libxml/HTMLparser.h>頭文件 編譯缺少系統(tǒng)庫,配置:Build Settings --> 搜索Header Search Paths --> 配置 $(SDK_DIR)/usr/include/libxml2

3.framework項目,名字中不能帶特殊字符 會報 test-framework is not a valid PROJECT_NAME

依賴庫錯誤

1._SCNetWork開頭

   導(dǎo)入SystemConfiguration.framework

2._UITypeCopy開頭 + _kUITag開頭

  導(dǎo)入MobileCoreServices.framework

3._defalate開頭 + _inflate開頭

  導(dǎo)入 libz.tbd

4._xml開頭

  導(dǎo)入libxml2.tbd

引入靜態(tài)庫運行錯誤

1.運行崩潰

假設(shè)不是靜態(tài)庫內(nèi)部錯誤,那么就設(shè)置項目的Build Settings --> Other Linker Flags --> 為 -ObjC

資源靜態(tài)庫.bundle

1.創(chuàng)建一個文件夾

2.把資源(圖片,plist...)放到文件夾中

3.把文件夾后綴改為bundle就可以了

4.資源庫的使用

在靜態(tài)庫中,我們獲得資源的方式改為從這個bundle資源包中獲得就可以了。

例如: [UIImage imageNamed:@"xxx.bundle/xxx"];

創(chuàng)建一個可測試的靜態(tài)庫

1.創(chuàng)建一個項目

2.給項目添加一個靜態(tài)庫Target

3.編譯靜態(tài)庫

4.配置引用靜態(tài)庫

   General --> Linked Frameworks and Libraries --> 添加靜態(tài)庫.a

5.運行項目 -- 這樣就可以調(diào)試了.

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • IOS實現(xiàn)視頻動畫效果的啟動圖

    IOS實現(xiàn)視頻動畫效果的啟動圖

    這篇文章實現(xiàn)的是一個關(guān)于啟動頁或者引導(dǎo)頁的視頻動畫效果的實現(xiàn)過程,對于大家開發(fā)APP具有一定的參考借鑒價值,有需要的可以來看看。
    2016-09-09
  • 詳解 objective-c中interface與protocol的作用

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

    這篇文章主要介紹了詳解 objective-c中interface與protocol的作用的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • IOS微信搖一搖聲音無法播放的解決辦法

    IOS微信搖一搖聲音無法播放的解決辦法

    這篇文章主要為大家詳細(xì)介紹了IOS微信搖一搖聲音無法播放的解決辦法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 史上最詳細(xì)的CocoaPods安裝教程(圖文)

    史上最詳細(xì)的CocoaPods安裝教程(圖文)

    雖然網(wǎng)上關(guān)于CocoaPods安裝教程多不勝數(shù),但是我在安裝的過程中還是出現(xiàn)了很多錯誤,所以大家可以照下來步驟裝一下,我相信會很好用
    2016-09-09
  • iOS UIAlertController中UITextField添加晃動效果與邊框顏色詳解

    iOS UIAlertController中UITextField添加晃動效果與邊框顏色詳解

    這篇文章主要給大家介紹了關(guān)于iOS UIAlertController中UITextField添加晃動效果與邊框顏色的相關(guān)資料,實現(xiàn)后的效果非常適合在開發(fā)中使用,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面隨著小編來一起看看吧。
    2017-10-10
  • iOS自定義時間滾動選擇控件

    iOS自定義時間滾動選擇控件

    這篇文章主要為大家詳細(xì)介紹了iOS自定義時間滾動選擇控件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • iOS中PNChart與UITableView的聯(lián)動示例詳解

    iOS中PNChart與UITableView的聯(lián)動示例詳解

    PNChart是個界面很漂亮的圖表第三方庫,UITableView則不用過多介紹了,各位iOS開發(fā)者們都知道,下面這篇文章主要給大家介紹了關(guān)于iOS中PNChart與UITableView的聯(lián)動的相關(guān)資料,需要的朋友可以參考下
    2018-07-07
  • 詳解ios中的SQL數(shù)據(jù)庫文件加密 (使用sqlcipher)

    詳解ios中的SQL數(shù)據(jù)庫文件加密 (使用sqlcipher)

    本篇文章主要介紹了ios中的SQL數(shù)據(jù)庫文件加密 (使用sqlcipher),具有一定的參考價值,這里整理了詳細(xì)的代碼,感興趣的小伙伴們可以參考一下。
    2016-12-12
  • UICollectionView 實現(xiàn)圖片瀏覽效果

    UICollectionView 實現(xiàn)圖片瀏覽效果

    這篇文章主要為大家介紹了UICollectionView 實現(xiàn)圖片瀏覽效果示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • ios使用AVFoundation讀取二維碼的方法

    ios使用AVFoundation讀取二維碼的方法

    這篇文章主要介紹了ios使用AVFoundation讀取二維碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12

最新評論