iOS 制作自己的Framework(引入第三方庫)

一、創(chuàng)建工程并新建Framework Target

  1. 新建一個工程炉媒,Target選擇Cocoa Touch Framework。


    新建Framework Target
  2. 添加接口
    在剛剛創(chuàng)建的Framework里面添加一些接口。


    ZMSDKInterface.h

    ZMSDKInterface.m
  1. 設(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"共耍,projectprivate是不暴露出來的虑灰。
    設(shè)置頭文件

    Framework設(shè)置完成,進行下一步痹兜。

二穆咐、創(chuàng)建測試工程
Framework制作好了,我們需要一個Target測試一下吧。那么直接在剛剛創(chuàng)建的這個工程里面对湃,新建一個Single View APP的Target就好了崖叫。


目錄結(jié)構(gòu)

三、引入第三方庫
如果我們在制作Framework的時候拍柒,需要用到第三方庫怎么辦呢心傀?網(wǎng)上有輪子,而且有專人維護拆讯,總比我們自己造的強脂男。但是如果公司有條件的話,最好是不引入第三方庫种呐。
我們在引入第三方庫的時候宰翅,使用cocoapods進行管理,假設(shè)我們的SDK需要AFNetworking這個庫爽室,按下面操作引入汁讼。

  1. podfile文件的寫法
platform:ios,'8.0'
#project中不要有commomPods的target
abstract_target 'commonPods' do
#這里寫共用的第三方庫
pod 'AFNetworking'
    target 'ZMSDKDemo' do
        #這里寫SDK需要使用的第三方庫
    end
    target 'ZMSDKTest' do
         #這里寫測試工程里面需要使用的第三方庫
    end
end
  1. 這么寫的原因
    因為我們在Framework里面需要使用第三方庫,在測試工程里面也需要使用第三方庫肮之,所以我們要同時引入掉缺。

四、創(chuàng)建Framework打包腳本

  1. 在這個工程里面新建一個target戈擒,選擇Cross-platform選項卡中的Aggregate眶明。


    創(chuàng)建打包腳本
  2. 選擇這個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}"

五稽屏、運行

  1. 選擇Framework這個target扮宠,然后分別在simulator和general device上面運行一次。
  2. 選擇測試target狐榔,在General選項卡中的Embeded Binaries里面添加自己的Framework坛增。


    添加自己的Framework
  3. 運行測試target
    在需要使用Framework的地方引入頭文件。


    使用Framework

    結(jié)果

六薄腻、導(dǎo)出Framework給他人使用

  1. 選擇腳本target收捣,運行一次。此時會打開一個finder窗口庵楷,里面有你打包好的Framework啦罢艾,你就可以給其他人使用了楣颠。
  2. 我們再新建一個工程,選擇Single View APP咐蚯,導(dǎo)入我們剛剛制作好的Framework童漩,同時我們的SDK需要AFNetworking這個第三方庫的,所以我們也同樣需要把AFNetworking導(dǎo)入到我們的工程里面來仓蛆,如果使用pod管理的話睁冬,像平常那樣寫podfile就可以了,不需要像上面那樣寫了看疙。然后測試一下看是否正常就可以了豆拨。

本文完結(jié)。喜歡點個喜歡吧~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末能庆,一起剝皮案震驚了整個濱河市施禾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搁胆,老刑警劉巖弥搞,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異渠旁,居然都是意外死亡攀例,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門顾腊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粤铭,“玉大人,你說我怎么就攤上這事杂靶“鸸撸” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵吗垮,是天一觀的道長垛吗。 經(jīng)常有香客問我,道長烁登,這世上最難降的妖魔是什么怯屉? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮饵沧,結(jié)果婚禮上蚀之,老公的妹妹穿的比我還像新娘。我一直安慰自己捷泞,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布寿谴。 她就那樣靜靜地躺著锁右,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咏瑟,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天拂到,我揣著相機與錄音,去河邊找鬼码泞。 笑死兄旬,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼愤估,長吁一口氣:“原來是場噩夢啊……” “哼岭参!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起袍嬉,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后音诈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡绎狭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年细溅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片儡嘶。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡喇聊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出社付,到底是詐尸還是另有隱情承疲,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布鸥咖,位于F島的核電站燕鸽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏啼辣。R本人自食惡果不足惜啊研,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸥拧。 院中可真熱鬧党远,春花似錦、人聲如沸富弦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腕柜。三九已至济似,卻和暖如春矫废,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背砰蠢。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工蓖扑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人台舱。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓律杠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親竞惋。 傳聞我的和親對象是個殘疾皇子柜去,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

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