開發做了一段時間后,總會有一些自己的總結,或者說自己的輪子。怎么才能把自己的這些東西合理的利用起來?庫文件無疑是最好的方法。
iOS有哪些庫文件?首先看看系統提供的:
1、靜態庫文件(.a)
2、動態庫文件(.framework或.dylib或.tbd)
其中,靜態庫可以上傳到App Store,靜態庫必須配合相應的頭文件目錄,才能被使用。動態庫不允許上傳到App Store,動態庫含有頭文件目錄,可直接使用。
由于上述原因,就出現了靜態Framework,既能保留.a文件可被上傳到App Store,又能保留.framework的目錄結構。以下就來介紹一下靜態Framework的制作方法。
首先介紹一下開發環境,直接上圖:
制作靜態Framework,目前有3種方法:
方法1: 通過.a轉靜態.framework
方法2: 通過.bundle轉靜態.framework
方法3: 通過動態.framework轉靜態.framework
以下我們分別介紹
方法1:通過.a轉靜態.framework
第一步,創建.a
打開Xcode
點擊Create a new Xcode Project
選擇Cocoa Touch Static Library
,點擊 Next
,輸入Product Name
按照提示完成余下操作,最終進入的工程界面
此時,可以看到Product
目錄下libMyKit.a
為紅色,那是因為在磁盤文件中還沒有生成該文件。
自定義頭文件,系統默認情況下 Build Phases
中,沒有Hearders
,需要手動點擊“+”,自行添加。
build
該工程,會發現 libMyKit.a
變為黑色,此時右擊該文件Show In Finder
,會看到該文件實際目錄結構。如下圖:
到這里靜態庫文件就已經創建好。
接下來,把創建好的靜態庫文件轉換成靜態framework。這里用到了腳本,如下圖:
附上代碼
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就已經制作完成了。
方法2: 通過.bundle轉靜態.framework
打開Xcode,點擊Create a new Xcode Project
,同方法一
由于iOS 下沒有Bundle
選項,所以要選中macOS
選中Bundle
,點擊Next
按照提示完成余下操作,最終進入的工程界面:
這樣生成的是bundle,下面將進行bundle轉換成framework
首先,修改Base SDK,將Base SDK改成最新的iOS SDK就行。
修改Linking
將Dead Code Stripping
設置為No
將Link With Standard Libraries
設置為No
將Mach-O Type
設置為Relocatable Object File
修改Packaging
將Wrapper Extension
設置為framework
修改info.plist
將Bundle OS Type code
設置為FMWK
好了,以上已經完成bundle到framework的改造,下面在工程新建一個MyKit
文件,并添加對外頭文件,如下圖:
完成以上,選擇工程Build
,然后選中MyKit.framework
,右擊,Show In Finder
好啦,以上就完成了bundle轉靜態framework。
方法3: 通過動態.framework轉靜態.framework
打開Xcode,點擊Create a new Xcode Project
,同方法一
選擇Cocoa Touch Framework
點擊Next
按照提示完成余下操作,最終進入的工程界面:
這樣創建好的是一個動態framework
下面進行由動態像靜態改造
修改Linking
將Mach-O Type
設置為Static Library
完成以上,選擇工程Build
,然后選中MyKit.framework
,右擊,Show In Finder
以上就完成了動態framework到靜態framework的改造。
有沒有發現方法三最簡單?。?!
補充說明:
細心的伙伴會發現三種方法創建的framwork
目錄是不一樣的,這里就由伙伴們自行去思考了。
如果有用過支付寶的伙伴,有沒有發現,再Archive
時,會有一大堆警告。
那么我們的framework是否也有警告的,這有待伙伴們自行驗證。
解決方法:
可以這樣Build Setting
--Code Generation
將Generate Debug Symbol
設置為No
,即禁止生產調試符號。
關于通用庫
即支持armv7 armv7s i386 x86_64 arm64,這里就不介紹了。有需要的,簡信我,或者在下一篇文章給出。