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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容