亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS中.a和.framework靜態庫的創建與.bundle資源包的使用詳解

2019-10-21 18:43:24
字體:
來源:轉載
供稿:網友

前言

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

在正式的上代碼之前,先介紹一些從網上搜集的靜態庫相關的基本概念,以加深對后面知識的理解

1. 庫

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

2. 區別

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

動態庫:鏈接時不復制,程序運行時由系統動態加載到內存,供程序調用,系統只加載一次,多個程序共用,節省內存空間。

3. iOS中靜態庫的形式

在iOS中靜態庫以.a和.framework的形式存在,動態庫以.dylib和.framework的形式存在。

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

本文就來講解一下 .a 和 .framework 靜態庫的創建與 .bundle 資源包的使用。

庫分靜態庫和動態庫兩種。從本質上來說是一種可執行代碼的二進制格式,可以被載入內存中執行。

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

靜態庫的形式

形式為 :.a 和 .framework 兩種

其中 .framework 類型的庫如果是系統內部的是動態庫,我們自己創建的是靜態庫

.a 和 .framework 的區別

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

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

.a + .h + sourceFile = .framework。

建議用.framework。

靜態庫的優勢

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

創建和打包 .a 靜態庫

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

ios,framework,bundle,靜態庫,創建bundle

ios,framework,bundle,靜態庫,創建bundle

ios,framework,bundle,靜態庫,創建bundle

ios,framework,bundle,靜態庫,創建bundle

1.修改支持的架構

     4.1 設置支持所有模擬器架構 Build Settings --> Build Active Architecture Only --> Debug 改為 NO

     4.2設置支持所有手機架構

2.編譯

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

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

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

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

3.使用靜態庫

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

創建和打包 .framework 靜態庫

1.創建Framework項目

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

2.修改打包的framework是動態庫還是靜態庫

     framework項目默認是動態庫。

     靜態庫配置:Build Settings --> Mach-O Type --> 改為 Static Library

3.把需要編譯成靜態庫的代碼拖進項目

     設置可見頭文件

     項目創建后,項目中只有一個主頭文件。

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

4.編譯

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

5.使用

     把framework引入項目。

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

     如果是靜態庫就不需要配置了。

靜態庫問題

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

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

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

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

2.Debug版本 VS Release版本

   調試版

      調試版本會包含完整的符號信息,以方便調試

      調試版本不會對代碼進行優化

   發布版

      發布版本不會包含完整的符號信息 發布版本的執行代碼是進行過優化的

      發布版本的大小會比調試版本的略小

      在執行速度方面,調試版本會更快些,但不意味著會有顯著的提升

3.Undefind symbols for architecture arm64(i386)

   原因:是靜態庫不支持cpu arm64(i386)架構

4.iPhone手機的cpu架構

   模擬器

      iPhone4s,5 是 i386架構

      iPhone5s以后 是x86_64架構

   發布版

      iphone1代,3G,3GS 是 armv6架構

      iPhone4,4s 是 armv7架構

      iphone5,5s,5c 是 armv7s架構

      iPhone6,6s,6plus,6splus 是 arm64架構

5.查看.a庫所支持的架構類型

   lipo -info xxx.a

6..a靜態庫合并

   lipo -create 真機靜態庫.a 模擬器靜態庫.a -output 新文件.a

   (最好指定一個目錄,否則會默認當前目錄)

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

7.查看.framework庫所支持的架構類型

   7.1 進入到framework文件夾中

   7.2 lipo -info Framework 即可

靜態庫編譯錯誤

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

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

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

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

依賴庫錯誤

1._SCNetWork開頭

   導入SystemConfiguration.framework

2._UITypeCopy開頭 + _kUITag開頭

  導入MobileCoreServices.framework

3._defalate開頭 + _inflate開頭

  導入 libz.tbd

4._xml開頭

  導入libxml2.tbd

引入靜態庫運行錯誤

1.運行崩潰

假設不是靜態庫內部錯誤,那么就設置項目的Build Settings --> Other Linker Flags --> 為 -ObjC

資源靜態庫.bundle

1.創建一個文件夾

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

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

4.資源庫的使用

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

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

創建一個可測試的靜態庫

1.創建一個項目

2.給項目添加一個靜態庫Target

3.編譯靜態庫

4.配置引用靜態庫

   General --> Linked Frameworks and Libraries --> 添加靜態庫.a

5.運行項目 -- 這樣就可以調試了.

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
俺也去精品视频在线观看| 欧美大肥婆大肥bbbbb| 欧美成人精品不卡视频在线观看| 欧美激情成人在线视频| 亚洲成人a级网| 久久99久国产精品黄毛片入口| 欧美日韩精品中文字幕| 欲色天天网综合久久| 在线日韩日本国产亚洲| 伊人av综合网| 亚洲人成电影在线| 国产在线一区二区三区| 少妇久久久久久| 欧美成人在线网站| 久久久久久久久久亚洲| 亚洲欧美在线x视频| 精品丝袜一区二区三区| 国产精品2018| 亚洲第一在线视频| 日韩欧美国产黄色| 日韩av影视综合网| 亚洲a中文字幕| 久久影视电视剧凤归四时歌| 亚洲国模精品一区| 中文字幕少妇一区二区三区| 精品久久久中文| 日韩综合中文字幕| www.亚洲成人| 粗暴蹂躏中文一区二区三区| 美乳少妇欧美精品| 久久久久久久国产精品| 亚洲最大福利视频网站| 亚洲加勒比久久88色综合| 欧美激情视频在线| 日本欧美爱爱爱| 成人日韩av在线| 日韩福利在线播放| 欧美成人小视频| 亚洲香蕉av在线一区二区三区| 91精品国产综合久久久久久蜜臀| 国产精品成人免费电影| 久久影院中文字幕| 久久国产天堂福利天堂| 久久精品视频导航| 亚洲成**性毛茸茸| 亚洲丝袜在线视频| 在线精品播放av| 国产免费一区二区三区在线观看| 久久在线免费视频| 97色在线观看免费视频| 久久影院在线观看| 成人性生交大片免费看视频直播| 欧美日韩美女在线| 亚洲欧美一区二区三区情侣bbw| 国产一区二区三区毛片| 欧美日韩加勒比精品一区| 欧美专区中文字幕| 中文国产成人精品久久一| 播播国产欧美激情| 国产精品视频久久久| 亚洲福利视频二区| 国产精品久久久久久久久久久新郎| 中文字幕亚洲无线码在线一区| 欧美麻豆久久久久久中文| 久久在线精品视频| 欧美一区二区影院| 欧美一级大片在线观看| 日韩人体视频一二区| 午夜精品一区二区三区在线视| 欧美一二三视频| 国产视频久久网| 成人免费视频xnxx.com| 97精品国产97久久久久久春色| 亚洲一区二区在线| 日本精品视频在线观看| 午夜精品一区二区三区视频免费看| 欧美高清在线观看| 国产精品久久久久福利| 亚洲人成网站999久久久综合| 日本精品免费一区二区三区| 欧美有码在线观看| 成人在线精品视频| 亚洲午夜久久久影院| 国产欧美日韩专区发布| 国产精品久久久久久久久久尿| 欧美精品一区二区免费| 亚洲欧洲高清在线| 久久综合伊人77777蜜臀| 亚洲人午夜精品| 狠狠躁18三区二区一区| 欧美黄色片在线观看| 亚洲一区二区三区视频播放| 欧美床上激情在线观看| 欧美亚洲在线观看| 国产精品444| 久久不射电影网| 国产精品香蕉国产| 国产精品一区二区三区在线播放| 成人综合网网址| 91精品久久久久久久久久| 国产精品欧美激情在线播放| 久久久影视精品| 久久久久久网站| 日韩欧美亚洲一二三区| 亚洲自拍欧美色图| 岛国精品视频在线播放| 中文字幕在线看视频国产欧美| 亚洲美女av黄| 日韩成人在线网站| 不卡中文字幕av| 国产精品成人观看视频国产奇米| 国产一区二区三区在线视频| 视频在线一区二区| 欧美成年人视频网站| 国内外成人免费激情在线视频| 国产精品黄色影片导航在线观看| 亚洲日本欧美中文幕| 国产精品电影观看| 疯狂做受xxxx高潮欧美日本| 亚洲一区二区少妇| 成人免费视频97| 中文字幕精品久久| 亚洲精品久久视频| 久久久久中文字幕2018| 国自在线精品视频| 91chinesevideo永久地址| 26uuu另类亚洲欧美日本一| 日韩高清中文字幕| 欧美又大又硬又粗bbbbb| 日韩高清有码在线| 国产精品美女在线观看| 国产视频丨精品|在线观看| 亚洲人成免费电影| 欧美丝袜一区二区| 亚洲男人天堂古典| 国产91精品久久久久久| 国产视频精品自拍| 国产日韩欧美另类| 欧美电影《睫毛膏》| 秋霞午夜一区二区| 91中文字幕一区| 8090理伦午夜在线电影| 国产成人一区二区三区小说| 日韩中文字幕免费视频| 日韩国产欧美精品在线| 久久久久女教师免费一区| 欧美福利视频在线| 欧美大尺度激情区在线播放| 精品国产乱码久久久久久虫虫漫画| 91精品在线播放| 亚洲欧美一区二区精品久久久| 日韩成人在线观看| 国产一区视频在线播放| 91av在线网站| 精品中文字幕在线| 91精品国产高清久久久久久| 精品国产成人av| 欧美性xxxxx| 国产精品吊钟奶在线| 国产精品观看在线亚洲人成网| 欧美激情日韩图片| 中文字幕免费国产精品| 操人视频在线观看欧美| 欧美成人免费全部|