Xcode添加庫文件framework (轉)


首先需要了解一下iOS中靜態庫和動態庫、framework的概念

靜態庫與動態庫的區別

首先來看什么是庫,庫(Library)說白了就是一段編譯好的二進制代碼,加上頭文件就可以供別人使用。

什么時候我們會用到庫呢?一種情況是某些代碼需要給別人使用,但是我們不希望別人看到源碼,就需要以庫的形式進行封裝,只暴露出頭文件。另外一種情況是,對於某些不會進行大的改動的代碼,我們想減少編譯的時間,就可以把它打包成庫,因為庫是已經編譯好的二進制了,編譯的時候只需要 Link 一下,不會浪費編譯時間。

上面提到庫在使用的時候需要 Link,Link 的方式有兩種,靜態和動態,於是便產生了靜態庫和動態庫。

靜態庫

靜態庫即靜態鏈接庫(Windows 下的 .lib,linux 和 Mac 下的 .a)。之所以叫做靜態,是因為靜態庫在編譯的時候會被直接拷貝一份,復制到目標程序里,這段代碼在目標程序里就不會再改變了。

靜態庫的好處很明顯,編譯完成之后,庫文件實際上就沒有作用了。目標程序沒有外部依賴,直接就可以運行。當然其缺點也很明顯,就是會使用目標程序的體積增大。

動態庫

動態庫即動態鏈接庫(Windows 下的 .dll,Linux 下的 .so,Mac 下的 .dylib)。與靜態庫相反,動態庫在編譯時並不會被拷貝到目標程序中,目標程序中只會存儲指向動態庫的引用。等到程序運行時,動態庫才會被真正加載進來。

動態庫的優點是,不需要拷貝到目標程序中,不會影響目標程序的體積,而且同一份庫可以被多個程序使用(因為這個原因,動態庫也被稱作共享庫)。同時,編譯時才載入的特性,也可以讓我們隨時對庫進行替換,而不需要重新編譯代碼。動態庫帶來的問題主要是,動態載入會帶來一部分性能損失,使用動態庫也會使得程序依賴於外部環境。如果環境缺少動態庫或者庫的版本不正確,就會導致程序無法運行(Linux 下喜聞樂見的 lib not found 錯誤)。

iOS Framework

除了上面提到的 .a 和 .dylib 之外,Mac OS/iOS 平台還可以使用 Framework。Framework 實際上是一種打包方式,將庫的二進制文件,頭文件和有關的資源文件打包到一起,方便管理和分發。

在 iOS 8 之前,iOS 平台不支持使用動態 Framework,開發者可以使用的 Framework 只有蘋果自家的 UIKit.Framework,Foundation.Framework 等。這種限制可能是出於安全的考慮(見這里的討論)。換一個角度講,因為 iOS 應用都是運行在沙盒當中,不同的程序之間不能共享代碼,同時動態下載代碼又是被蘋果明令禁止的,沒辦法發揮出動態庫的優勢,實際上動態庫也就沒有存在的必要了。

由於上面提到的限制,開發者想要在 iOS 平台共享代碼,唯一的選擇就是打包成靜態庫 .a 文件,同時附上頭文件(例如微信的SDK)。但是這樣的打包方式不夠方便,使用時也比較麻煩,大家還是希望共享代碼都能能像 Framework 一樣,直接扔到工程里就可以用。於是人們想出了各種奇技淫巧去讓 Xcode Build 出 iOS 可以使用的 Framework,具體做法參考這里這里,這種方法產生的 Framework 還有 “偽”(Fake) Framework 和 “真“(Real) Framework 的區別。

iOS 8/Xcode 6 推出之后,iOS 平台添加了動態庫的支持,同時 Xcode 6 也原生自帶了 Framework 支持(動態和靜態都可以),上面提到的的奇技淫巧也就沒有必要了(新的做法參考這里)。為什么 iOS 8 要添加動態庫的支持?唯一的理由大概就是 Extension 的出現。Extension 和 App 是兩個分開的可執行文件,同時需要共享代碼,這種情況下動態庫的支持就是必不可少的了。但是這種動態 Framework 和系統的 UIKit.Framework 還是有很大區別。系統的 Framework 不需要拷貝到目標程序中,我們自己做出來的 Framework 哪怕是動態的,最后也還是要拷貝到 App 中(App 和 Extension 的 Bundle 是共享的),因此蘋果又把這種 Framework 稱為 Embedded Framework

 

在iOS開發中,給項目添加新的.framework分為以下三種情況:

1.直接引用系統提供的.framework

1) 選中項目名稱

2)選中TARGETS

3)選中Build Phases

4)在Link Binary With Libraries中添加。

5)點擊“+”號,加入所需的系統提供的.framework文件

 

2.引用第三方提供的.framework

1) 下載好所需要的第三方提供的.framework

2)將第三方.framework文件拷貝到工程所處的文件夾中

(將文件拷入)

3) 選中項目名稱

4)選中TARGETS

5)選中Build Phases

6)在Link Binary With Libraries中添加

 

ps:

如果需要引入的.framework文件,支持Cocoapods,那么采用cocoapods方式是最簡單的。

3.通過Cocoapods來導入.framework

1) 在Podfile文件中,寫入你需要導入的.framework文件的名字,如 pod 'XXXXXX'

2)執行pod安裝命令:pod install

 

 

接下來講講.framework文件的使用

在你需要使用.framework的地方,調用:#import "XXXXXX.h"即可,其中XXXXXX為.framework中提供的某個類的名稱;也是你需要使用的類的名稱

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM