在咱們作
iOS開發中
, 有時候咱們會本身動手寫一些庫, 方便本身去調用, 可是咱們又不想這個庫的內部實現代碼被別人知道, 這個時候咱們就須要把這個庫打包成Framework
或者是lib.a
文件, 這裏咱們只作Framework
的打包教程,lib.a
的打包方式和Framework
趨同差別, 若是有須要, 後面我再補上.git
###做者感言github
爲了寫這篇文章, 我翻查了許多資料, 都沒有找到詳細點的可參考資料, 外國的文章就不用說了, 光是看雞腸就頭暈了, 因此我本身總結了一些經驗, 整理了一番, 決定分享出來, 但願你們喜歡xcode
最後: 若是你有更好的建議或者對這篇文章有不滿的地方, 請聯繫我, 我會參考大家的意見再進行修改, 聯繫我時, 請備註
Framework
若是以爲好的話, 但願你們也能夠打賞一下~嘻嘻~祝你們學習愉快~謝謝~app
Cain(羅家輝)學習
zhebushimengfei@qq.com: 聯繫方式測試
350116542: 騰訊QQspa
在開始合成以前, 咱們確定是須要建立一個生成
Framework
的工程, 這裏推薦用WorkSpace
來建立, 由於能夠方便咱們去測試Framework
庫.3d
添加新的工程code
選擇建立
Cocoa Touch Framework
cdn
給
Framework
命名, 喜歡啥名字, 本身看着辦唄, 我我的的習慣就是, 這個是什麼庫, 我就命名是啥
建立完以後, 咱們會看到
Framework
裏有一個頭文件, 頭文件裏有一堆不明因此的代碼, 這個時候咱們不須要管, 直接幹掉它
這樣子, 咱們就建立
Framework
完畢了, 下面讓咱們來建立一個測試類.
給這個測試類, 添加一個類方法
添加完測試類以後, 下面讓咱們來配置一下整個
Framework
工程, 讓它同時支持模擬器和真機.
Xcode默認是會把Framework變成Debug模式, 這時候咱們須要去改爲Release模式
而後咱們去配置項目工程, 首先咱們來添加一個模擬器的支持
修改Framework最低支持iOS的版本, 我這裏最低支持的是iOS7
把默認的動態庫, 切換成靜態庫
配置須要暴露的
.h
文件
最後, 咱們在
Test.h
中導入TestClass.h
, 固然, 咱們也不須要這麼作, 由於咱們已經在配置中暴露了TestClass.h
文件, 因此不須要引用也是能夠的
這個時候, 咱們先來測試一下能不能生成
Framework
庫
最終測試, 是成功生成
Framework
庫的, 但這個是模擬器庫, 若是你須要支持真機的話, 那麼只要切換運行的選項就行了
這時候咱們再去查看文件夾, 就會有兩個
Framework
文件夾了
雖然咱們把
Framework
都打包好了, 可是咱們須要檢測一下是否符合咱們的需求, 這是咱們要打開Terminal
, 而且輸入命令.lipo -info (Framework二進制文件地址)複製代碼
檢測真機Framework包
檢測模擬器Framework包
前面作了那麼多的事情, 就爲了如今這一步, 就是將模擬器與真機兩個Framework包合成一個通用的Framework包, 因爲我這裏沒有通用的Shell腳本, 只能用最笨的辦法合成兩個包了, 下面讓咱們一塊兒來看看.
打開終端輸入合成命令
lipo -create (真機Framework路徑) (模擬器Framework路徑) -output (真機/模擬器路徑)複製代碼
檢測合成後的通用Framework, 只有看到
armv7 arm64 i386 x86_64
這四個同時存在, 才真正的合成成功
這裏有一個注意事項, 有時候用
lipo
合成會報一個錯誤(我這裏沒有發現)
crun: error: active developer path (「/Applications/Xcode 2.app/Contents/Developer」) does not exist, use xcode-select --switch path/to/Xcode.app to specify the Xcode that you wish to use for command line developer tools (or see man xcode-select)複製代碼
這時候不要慌, 只要再輸入下面的命令, 輸入電腦密碼後, 而後再次運行合成
Framework
的命令, 就能夠合成了
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer複製代碼
既然咱們那麼辛苦的合成了一個通用的
Framework
, 不用用, 怎麼對得起咱們的付出呢? 再次回到Workspace
, 新建一個測試工程.
注意, 建立測試工程的時候, 不要新建到
Framework
的工程內
模擬器測試
真機測試
GitHub地址: github.com/CainRun/Cre…
其實我這個方法比較麻煩一些, 畢竟我還沒找到怎麼用腳本去合成一個的方法, 若是找到這樣子方法的朋友但願能夠告知一聲, 感激涕零~~~
好啦, 教程到這裏就結束了, 謝謝你們的耐心觀看