iOS開發(fā)之制作framework
什么是framework
Framework是資源的集合,將靜態(tài)庫(iOS8以后可以是動態(tài)庫)和其頭文件包含到一個結(jié)構(gòu)中麻削,讓Xcode可以方便地把它納入到你的項目中蒸痹。
分為真機—Debug(調(diào)試)版本、真機—Release(發(fā)布)版本呛哟、模擬器—Debug版本叠荠、模擬器—Release版本;開發(fā)中一般都打包Release(發(fā)布)版本扫责,將真機和模擬器版本合并榛鼎,提供外界。
在項目開發(fā)的過程中,例如兩個公司之間業(yè)務(wù)交流,不可能把源代碼都發(fā)送給另一個公司,這時候?qū)⑺矫軆?nèi)容打包成framework只嚣,別人只能調(diào)用接口绑榴,而不能知道其中實現(xiàn)的細節(jié)。
framework對CPU架構(gòu)的支持,首先了解iOS設(shè)備CPU架構(gòu)方面的知識,ARM是微處理器行業(yè)的一家知名企業(yè),arm處理器以體積小和高性能的優(yōu)勢在嵌入式設(shè)備中廣泛使用拾碌,幾乎所有手機都是使用它的。
模擬器:iphone4s-5 : i386 街望, iphone5s-6plus : x86_64校翔。
真機:iphone3gs-4s : armv7 , iphone5-5c : armv7s (靜態(tài)庫只要支持了armv7灾前,就可以跑在armv7s的架構(gòu)上)防症, iphone5s-6plus : arm64。
armv6, armv7, armv7s是ARM CPU的不同指令集哎甲,原則是向下兼容的蔫敲。例如iPhone4S CPU支持armv7, 但它同時兼容armv6,只是使用armv6指令可能無法充分發(fā)揮它的特性炭玫。
怎么制作framework
我們將自己自定義的一個控件制作成framwork供別人使用為例奈嘿,來展示framework的制作過程。
-
打開Xcode創(chuàng)建一個framework工程吞加。
839C9C5D-A8AB-4134-B7B8-94E719A86729.png
2.修改一些配置信息裙犹,生成支持所有架構(gòu)的版本。
3.將之前寫好的控件源文件拖進工程衔憨,并做一些配置叶圃,主要是配置一下那些文件要暴露給別人使用,一般頭文件需要暴露践图,實現(xiàn)文件不需要掺冠。
4.編譯,要分別針對模擬器和真機進行編譯平项。(下面有更加簡單的方法制作通用framework)
5.編譯成功就會在工程的Products組下有一個黑色的xxxxx.framework的文件赫舒,如果編譯失敗是紅色的,紅色表示沒有生成闽瓢。
6.制作通用的framework,以上幾步分別生成真機和模擬器的framework心赶,接下來生成一個通用的扣讼。
(1) cd進入Debug-iphoneos
輸入終端命令:
lipo -info ./WQJButton.framework/WQJButton
顯示信息如下: (真機支持的架構(gòu)armv7和arm64)
(2) cd進入Debug-iphonesimulator
輸入終端命令:
lipo -info ./WQJButton.framework/WQJButton
顯示信息如下: (模擬器支持的架構(gòu)i386 x86_64)
(3) cd進入Products
輸入終端命令:
lipo -create ./Debug-iphoneos/WQJButton.framework/WQJButton ./Debug-iphonesimulator/WQJButton.framework/WQJButton -output ./WQJButton
生成新的文件
將新的文件替換掉原來的
(4)查看合并后支持的架構(gòu)
輸入終端命令:
制作通用的framework(另一種更加簡單的方法)
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework
DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework
SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"
lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"
#open "${DEVICE_DIR}"
open "${SRCROOT}/Products"
fi
完成后按cmd+B自動彈出生成好的framework
8.導(dǎo)入framework使用,發(fā)現(xiàn)報錯(方法找不到)
原來是framework中有分類缨叫,在導(dǎo)入framework椭符, Other Linker Flags中加入-ObjC就可以了