iOS SDK(framework) 開發(fā)

  • 該文章純屬記錄練手經(jīng)歷钧敞,若有不對(duì)的地方望大家隨時(shí)指出葵擎。

一谅阿、創(chuàng)建sdk項(xiàng)目。

command + shift + N


image.png

二酬滤、創(chuàng)建自己需要封裝在framework里的類签餐。

image.png

三、創(chuàng)建一個(gè)AggreGate文件關(guān)聯(lián)SDK敏晤,這樣每次只要編譯demo贱田,就能自動(dòng)生成framework文件并直接跳到文件目錄。

image.png
image.png
添加自動(dòng)生成framework的腳本文件
image.png
腳本內(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)用的頭文件

image.png
image.png
image.png
image.png
  • 在主頭文件中導(dǎo)入需要暴露給外部的文件


    image.png
  • 選中項(xiàng)目文件奏司,編譯即可自動(dòng)生成framework乔询,并自動(dòng)跳到相關(guān)文件夾


    image.png

五、為SDK添加圖片資源韵洋,使得SDK內(nèi)的方法也能使用圖片竿刁。

  • 創(chuàng)建一個(gè)新項(xiàng)目command + shift + N


    image.png
編譯通過后黄锤,會(huì)生成一個(gè).bundle文件
image.png
  • 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中负甸。
image.png

在需要用到的地方導(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è)方法鱼冀。
解決方法如下
image.png

至此报破,就可以愉快的運(yùn)行了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市千绪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梗脾,老刑警劉巖荸型,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異炸茧,居然都是意外死亡瑞妇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門梭冠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辕狰,“玉大人,你說我怎么就攤上這事控漠÷叮” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵盐捷,是天一觀的道長偶翅。 經(jīng)常有香客問我,道長碉渡,這世上最難降的妖魔是什么聚谁? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮滞诺,結(jié)果婚禮上形导,老公的妹妹穿的比我還像新娘环疼。我一直安慰自己,他們只是感情好朵耕,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布炫隶。 她就那樣靜靜地躺著,像睡著了一般憔披。 火紅的嫁衣襯著肌膚如雪等限。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天芬膝,我揣著相機(jī)與錄音望门,去河邊找鬼。 笑死锰霜,一個(gè)胖子當(dāng)著我的面吹牛筹误,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播癣缅,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼厨剪,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了友存?” 一聲冷哼從身側(cè)響起祷膳,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屡立,沒想到半個(gè)月后直晨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡膨俐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年勇皇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片焚刺。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡敛摘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乳愉,到底是詐尸還是另有隱情兄淫,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布匾委,位于F島的核電站拖叙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赂乐。R本人自食惡果不足惜薯鳍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挖滤,春花似錦崩溪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惧盹,卻和暖如春乳幸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钧椰。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工粹断, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嫡霞。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓瓶埋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親诊沪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子养筒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容