- 該文章純屬記錄練手經(jīng)歷钧敞,若有不對(duì)的地方望大家隨時(shí)指出葵擎。
一谅阿、創(chuàng)建sdk項(xiàng)目。
command + shift + N
二酬滤、創(chuàng)建自己需要封裝在framework里的類签餐。
三、創(chuàng)建一個(gè)AggreGate文件關(guān)聯(lián)SDK敏晤,這樣每次只要編譯demo贱田,就能自動(dòng)生成framework文件并直接跳到文件目錄。
添加自動(dòng)生成framework的腳本文件
腳本內(nèi)容如下嘴脾,可直接復(fù)制男摧,什么都不用改
#!/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"
#分別編譯模擬器和真機(jī)的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}"
lipo "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" -remove arm64 -output "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}"
#合并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}"
四、配置項(xiàng)目基礎(chǔ)設(shè)置及暴露給外包調(diào)用的頭文件
-
在主頭文件中導(dǎo)入需要暴露給外部的文件
-
選中項(xiàng)目文件奏司,編譯即可自動(dòng)生成framework乔询,并自動(dòng)跳到相關(guān)文件夾
五、為SDK添加圖片資源韵洋,使得SDK內(nèi)的方法也能使用圖片竿刁。
-
創(chuàng)建一個(gè)新項(xiàng)目command + shift + N
編譯通過后黄锤,會(huì)生成一個(gè).bundle文件
- show in finder,就能夠找到該文件食拜。
六鸵熟、使用SDK和圖片資源
- 在framework中使用圖片
UIImage *img = [UIImage imageNamed:@"SFImage.bundle/nodata.png" inBundle: [NSBundle bundleForClass:[self class]] compatibleWithTraitCollection:nil];
UIImageView* loginImageView = [[UIImageView alloc]initWithImage:img];
然后編譯framework,將新的framework和bundle文件一起拖到demo中负甸。
在需要用到的地方導(dǎo)入頭文件流强,有可能沒有索引,需要強(qiáng)敲
#import "SFBlankView.framework/Headers/UIView+ToastExtension.h"
這個(gè)時(shí)候運(yùn)行demo,會(huì)報(bào)錯(cuò)呻待,'xxx.h'file not found'打月,解決這個(gè)問題只需要到BuildSetting里面,Framework Search Paths 雙擊,新增 $(PROJECT_DIR)/SFBlankView(你的framework的名字) (作用是指明我的framework放在了此文件夾)
- 接下來重新編譯項(xiàng)目,不報(bào)錯(cuò)了蚕捉,但是運(yùn)行項(xiàng)目就崩潰奏篙,控制臺(tái)輸出 unrecognized selector sent to instance ,找不到某個(gè)方法鱼冀。