一、創(chuàng)建工程并新建Framework Target
-
新建一個工程炉媒,Target選擇Cocoa Touch Framework。
-
添加接口
在剛剛創(chuàng)建的Framework里面添加一些接口。
- 設(shè)置
對Target進行一些設(shè)置。
3.1 選擇Framework Target豌鸡,在Build Settings里面搜索Mach -O type
,改為Static Library
段标;
3.2 選擇Framework Target直颅,在Build Settings里面搜索Link With Standard Libraries
,改為No
怀樟;
3.3 選擇Framework Target,在Build Phases的Headers里面將需要暴露出來的頭文件設(shè)置好盆佣。public
是可以被引用的往堡,用戶可以看到的,例如用戶在使用的時候import "xxxxxx.h"
共耍,project
和private
是不暴露出來的虑灰。
Framework設(shè)置完成,進行下一步痹兜。
二穆咐、創(chuàng)建測試工程
Framework制作好了,我們需要一個Target測試一下吧。那么直接在剛剛創(chuàng)建的這個工程里面对湃,新建一個Single View APP的Target就好了崖叫。
三、引入第三方庫
如果我們在制作Framework的時候拍柒,需要用到第三方庫怎么辦呢心傀?網(wǎng)上有輪子,而且有專人維護拆讯,總比我們自己造的強脂男。但是如果公司有條件的話,最好是不引入第三方庫种呐。
我們在引入第三方庫的時候宰翅,使用cocoapods進行管理,假設(shè)我們的SDK需要AFNetworking這個庫爽室,按下面操作引入汁讼。
platform:ios,'8.0'
#project中不要有commomPods的target
abstract_target 'commonPods' do
#這里寫共用的第三方庫
pod 'AFNetworking'
target 'ZMSDKDemo' do
#這里寫SDK需要使用的第三方庫
end
target 'ZMSDKTest' do
#這里寫測試工程里面需要使用的第三方庫
end
end
- 這么寫的原因
因為我們在Framework里面需要使用第三方庫,在測試工程里面也需要使用第三方庫肮之,所以我們要同時引入掉缺。
四、創(chuàng)建Framework打包腳本
-
在這個工程里面新建一個target戈擒,選擇Cross-platform選項卡中的Aggregate眶明。
- 選擇這個target,然后點擊左上角+筐高,新建一個
Run Script
搜囱。腳本如下(來源于網(wǎng)上,實測可用):
#!/bin/sh
#要build的target名
TARGET_NAME=${PROJECT_NAME}
if [[ $1 ]]
then
TARGET_NAME=$1
fi
UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/${PROJECT_NAME}/"
#創(chuàng)建輸出目錄柑土,并刪除之前的framework文件
mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}"
rm -rf "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework"
#分別編譯模擬器和真機的Framework
xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
#拷貝framework到univer目錄
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework" "${UNIVERSAL_OUTPUT_FOLDER}"
#合并framework蜀肘,輸出最終的framework到build目錄
lipo -create -output "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework/${TARGET_NAME}"
#刪除編譯之后生成的無關(guān)的配置文件
dir_path="${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/"
for file in ls $dir_path
do
if [[ ${file} =~ ".xcconfig" ]]
then
rm -f "${dir_path}/${file}"
fi
done
#判斷build文件夾是否存在,存在則刪除
if [ -d "${SRCROOT}/build" ]
then
rm -rf "${SRCROOT}/build"
fi
rm -rf "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator" "${BUILD_DIR}/${CONFIGURATION}-iphoneos"
#打開合并后的文件夾
open "${UNIVERSAL_OUTPUT_FOLDER}"
五稽屏、運行
- 選擇Framework這個target扮宠,然后分別在simulator和general device上面運行一次。
-
選擇測試target狐榔,在General選項卡中的Embeded Binaries里面添加自己的Framework坛增。
-
運行測試target
在需要使用Framework的地方引入頭文件。
六薄腻、導(dǎo)出Framework給他人使用
- 選擇腳本target收捣,運行一次。此時會打開一個finder窗口庵楷,里面有你打包好的Framework啦罢艾,你就可以給其他人使用了楣颠。
- 我們再新建一個工程,選擇Single View APP咐蚯,導(dǎo)入我們剛剛制作好的Framework童漩,同時我們的SDK需要AFNetworking這個第三方庫的,所以我們也同樣需要把AFNetworking導(dǎo)入到我們的工程里面來仓蛆,如果使用pod管理的話睁冬,像平常那樣寫podfile就可以了,不需要像上面那樣寫了看疙。然后測試一下看是否正常就可以了豆拨。
本文完結(jié)。喜歡點個喜歡吧~~