iOS靜態Framework制作方法

開發做了一段時間后,總會有一些自己的總結,或者說自己的輪子。怎么才能把自己的這些東西合理的利用起來?庫文件無疑是最好的方法。

iOS有哪些庫文件?首先看看系統提供的:
1、靜態庫文件(.a)
2、動態庫文件(.framework或.dylib或.tbd)

其中,靜態庫可以上傳到App Store,靜態庫必須配合相應的頭文件目錄,才能被使用。動態庫不允許上傳到App Store,動態庫含有頭文件目錄,可直接使用。

由于上述原因,就出現了靜態Framework,既能保留.a文件可被上傳到App Store,又能保留.framework的目錄結構。以下就來介紹一下靜態Framework的制作方法。

首先介紹一下開發環境,直接上圖:

開發環境.png

制作靜態Framework,目前有3種方法:

方法1: 通過.a轉靜態.framework

方法2: 通過.bundle轉靜態.framework

方法3: 通過動態.framework轉靜態.framework

以下我們分別介紹

方法1:通過.a轉靜態.framework

第一步,創建.a

打開Xcode

新建.png

點擊Create a new Xcode Project

選擇靜態庫.png

選擇Cocoa Touch Static Library,點擊 Next,輸入Product Name

輸入名稱.png

按照提示完成余下操作,最終進入的工程界面

工程界面.png

此時,可以看到Product目錄下libMyKit.a為紅色,那是因為在磁盤文件中還沒有生成該文件。

自定義頭文件,系統默認情況下 Build Phases中,沒有Hearders,需要手動點擊“+”,自行添加。

自定義頭文件.png

build該工程,會發現 libMyKit.a變為黑色,此時右擊該文件Show In Finder,會看到該文件實際目錄結構。如下圖:

庫文件目錄結構.png

到這里靜態庫文件就已經創建好。

接下來,把創建好的靜態庫文件轉換成靜態framework。這里用到了腳本,如下圖:

生成靜態framework.png

附上代碼

set -e

export FRAMEWORK_LOCN="${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.framework"

# Create the path to the real Headers dir
mkdir -p "${FRAMEWORK_LOCN}/Versions/A/Headers"

# Create the required symlinks
/bin/ln -sfh A "${FRAMEWORK_LOCN}/Versions/Current"
/bin/ln -sfh Versions/Current/Headers "${FRAMEWORK_LOCN}/Headers"
/bin/ln -sfh "Versions/Current/${PRODUCT_NAME}" \
"${FRAMEWORK_LOCN}/${PRODUCT_NAME}"

# Copy the public headers into the framework
/bin/cp -a "${TARGET_BUILD_DIR}/${PUBLIC_HEADERS_FOLDER_PATH}/" \
"${FRAMEWORK_LOCN}/Versions/A/Headers"

好,到這里,再build一下工程,然后選中libMyKit.a,右擊,Show In Finder,會看到該文件實際目錄結構。如下圖:

靜態framework目錄.png

看到了吧,這樣靜態framework就已經制作完成了。

方法2: 通過.bundle轉靜態.framework

打開Xcode,點擊Create a new Xcode Project,同方法一

由于iOS 下沒有Bundle選項,所以要選中macOS

創建Bundle.png

選中Bundle,點擊Next

輸入項目名稱.png

按照提示完成余下操作,最終進入的工程界面:

工程目錄.png

這樣生成的是bundle,下面將進行bundle轉換成framework

首先,修改Base SDK,將Base SDK改成最新的iOS SDK就行。

修改Base SDK.png

修改Linking
Dead Code Stripping設置為No
Link With Standard Libraries設置為No
Mach-O Type設置為Relocatable Object File

修改Linking.png

修改Packaging
Wrapper Extension設置為framework

修改Packaging.png

修改info.plist
Bundle OS Type code設置為FMWK

修改info.png

好了,以上已經完成bundle到framework的改造,下面在工程新建一個MyKit文件,并添加對外頭文件,如下圖:

新建文件.png

完成以上,選擇工程Build,然后選中MyKit.framework,右擊,Show In Finder

目錄.png

好啦,以上就完成了bundle轉靜態framework。

方法3: 通過動態.framework轉靜態.framework

打開Xcode,點擊Create a new Xcode Project,同方法一
選擇Cocoa Touch Framework

創建framework.png

點擊Next

創建工程.png

按照提示完成余下操作,最終進入的工程界面:

工程目錄.png

這樣創建好的是一個動態framework
下面進行由動態像靜態改造

修改Linking
Mach-O Type設置為Static Library

修改Linking.png

完成以上,選擇工程Build,然后選中MyKit.framework,右擊,Show In Finder

framework目錄.png

以上就完成了動態framework到靜態framework的改造。

有沒有發現方法三最簡單?。?!

補充說明:

細心的伙伴會發現三種方法創建的framwork目錄是不一樣的,這里就由伙伴們自行去思考了。

如果有用過支付寶的伙伴,有沒有發現,再Archive時,會有一大堆警告。
那么我們的framework是否也有警告的,這有待伙伴們自行驗證。

解決方法:
可以這樣Build Setting--Code Generation
Generate Debug Symbol設置為No,即禁止生產調試符號。

關于通用庫

即支持armv7 armv7s i386 x86_64 arm64,這里就不介紹了。有需要的,簡信我,或者在下一篇文章給出。

參考資料

  1. https://www.raywenderlich.com/65964/create-a-framework-for-ios
  2. http://www.cocoachina.com/bbs/read.php?tid-282490.html
  3. http://years.im/Home/Article/detail/id/52.html
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容