iOS建立動態庫工程

weixin_34377065發表於2016-03-07

介紹###

  • 動態庫形式:.dylib和.framework

  • 靜態庫形式:.a和.framework

  • framework為什麼既是靜態庫又是動態庫?

系統的.framework是動態庫,我們自己建立的.framework是靜態庫。

  • 什麼是framework

framework是Cocoa/Cocoa Touch程式中使用的一種資源打包方式,可以將將程式碼檔案、標頭檔案、資原始檔、說明文件等集中在一起,方便開發者使用。

Cocoa/Cocoa Touch開發框架本身提供了大量的Framework,比如Foundation.framework/UIKit.framework/AppKit.framework等。需要注意的是,這些framework無一例外都是動態庫。

平時我們用的第三方SDK的framework都是靜態庫,真正的動態庫是上不了AppStore的。

  • 動態庫的作用
    應用外掛化:

    每一個功能點都是一個動態庫,在使用者想使用某個功能的時候讓其從網路下載,然後手動載入動態庫,實現功能的的外掛化

共享可執行檔案:

在其它大部分平臺上,動態庫都可以用於不同應用間共享,這就大大節省了記憶體。從目前來看,iOS仍然不允許程式間共享動態庫,即iOS上的動態庫只能是私有的,因為我們仍然不能將動態庫檔案放置在除了自身沙盒以外的其它任何地方。

不過iOS8上開放了App Extension功能,可以為一個應用建立外掛,這樣主app和外掛之間共享動態庫還是可行的。(還需瞭解下App Extension)

Xcode原生支援建立動態庫工程###

Xcode6之後蘋果在iOS上開放了動態庫。

建立:File->New->Project

101810-7bcba1c9c25f10dc.png
建立

WWDC2014之iOS使用動態庫中有很詳細的建立動態庫和使用動態庫的教程。

看教程中遇到的問題
第一步中建立動態庫run之後生成動態庫,在products目錄下面。生成的是.framework。
如果要生成.dylib,首先.xcodeproj檔案顯示包內容,然後開啟project.pbxproj,修改
productType = "com.apple.product-type.framework"; => productType = "com.apple.product-type.library.dynamic"。最後run之後就會生成.dylib的動態庫。

第二步建立通用動態庫:File->New->Targets

使用動態庫:文章的demo例子在使用動態庫的時候,是取的沙盒裡面的動態庫路徑,而文中只是將framework作為資原始檔拷貝到Bundle中。那麼應該先把Bundle中的framework再拷貝一份到沙盒目錄中才能使用。所以在viewDidLoad的時候拷貝。

NSString *path = [[NSBundle mainBundle] pathForResource:@"Dylib" ofType:@"framework"];
NSString *documentsPath = [NSString stringWithFormat:@"%@/Documents/Dylib.framework",NSHomeDirectory()];

NSFileManager *fm = [NSFileManager defaultManager];
NSError *error;
BOOL isSuccess = [fm copyItemAtPath:path toPath:documentsPath error:&error];

這樣就能用動態庫了,在模擬器上沒問題,但是在真機上iOS8執行正常,iOS9上會報錯:bundle is damaged or missing necessary resources。有人說是需要重新申請證書,但不知道到底怎麼弄啊?


如果要把動態庫轉成靜態庫只要修改個引數run一下就行了。使用也只要像普通第三方庫一樣簡單使用就好了。

101810-3dc4b83ed9bb55bd.png
靜態庫

Xcode安裝iOSOpenDev外掛###

這是一個越獄開發環境,生成的動態庫直接就是.dylib檔案。

新建動態庫工程:File->New->Project->iOSOpenDev->Cocoa Touch Library。

101810-3e0ca01a7fcbe4f6.png
iOSOpenDev

參考###

WWDC2014之iOS使用動態庫
在你的 Mac 上安裝 dpkg 命令,實現解包/打包 deb 教程
真正成功的theos環境配置
IOSOpenDev越獄開發環境配置

相關文章