iOS建立動態庫工程
介紹###
動態庫形式:.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](https://i.iter01.com/images/134b9524f11122f73b5bc875d9b3960c769cdbe3082d2e10bdd420a8388674ce.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](https://i.iter01.com/images/585a39b030de8f6265ae26ef94a09a5bb34a96b1d5b8b5ebe530c612e2c49a81.png)
Xcode安裝iOSOpenDev外掛###
這是一個越獄開發環境,生成的動態庫直接就是.dylib檔案。
新建動態庫工程:File->New->Project->iOSOpenDev->Cocoa Touch Library。
![101810-3e0ca01a7fcbe4f6.png](https://i.iter01.com/images/ce4e39f616c0b49157df5427ce521cc66b3871260cabb2cef08d2f112c8bf2bf.png)
參考###
WWDC2014之iOS使用動態庫
在你的 Mac 上安裝 dpkg 命令,實現解包/打包 deb 教程
真正成功的theos環境配置
IOSOpenDev越獄開發環境配置
相關文章
- ios靜態庫和動態庫iOS
- iOS動態庫的使用iOS
- iOS動態庫和靜態庫的運用iOS
- 動態庫的建立和呼叫
- iOS中的動態庫,靜態庫和framework介紹iOSFramework
- 動態連結庫(DLL)的建立和使用
- iOS使用指令碼跟隨工程程式碼動態生成FrameworkiOS指令碼Framework
- iOS 靜態庫 與私有庫iOS
- iOS中動/靜態庫支援bitcode的問題iOS
- iOS的Framework靜態庫iOSFramework
- 關於MNN工程框架編譯出來的靜態庫和動態庫的使用框架編譯
- GmSSL3.X編譯iOS和Android動態庫編譯iOSAndroid
- Flutter iOS 混合工程自動化FlutteriOS
- 靜態庫與動態庫
- 建立動態陣列陣列
- JavaScript動態建立table表格JavaScript
- DLL動態庫動態載入
- iOS - 靜態庫.a 和 framework 詳解iOSFramework
- cmake:生成靜態庫和動態庫
- Linux共享庫、靜態庫、動態庫詳解Linux
- 動態庫使用
- Linux動態庫Linux
- 動靜態庫
- 玩轉iOS開發《建立CocoaPods開發庫》iOS
- ios開發分析:CocoaPods私有庫建立與使用iOS
- iOS下 建立遠端cocoapods私有庫的套路iOS
- 【iOS】動態更換圖示iOS
- linux下的靜態庫與動態庫Linux
- Angular動態建立元件之PortalsAngular元件
- IDEA建立動態Web專案IdeaWeb
- python如何動態的建立類?Python
- iOS 靜態庫詳解與開發iOS
- 自建 iOS 靜態庫並用 pod 管理iOS
- Python中動態類和動態方法的建立與呼叫Python
- C靜態庫的建立與使用--為什麼要引入靜態庫?
- iOS逆向工程 iOS工具篇iOS
- C++動態庫封裝C#庫,驗證動態庫環境C++封裝C#
- linux 動態庫 靜態庫 函式覆蓋Linux函式
- android下java的靜態庫和動態庫AndroidJava