Xcode7 制作Framework

今天寫完了一個(gè)小框架瓤球,需要打包成framework供項(xiàng)目使用融欧,于是查閱了相關(guān)資料,終于完成了打包的工作卦羡,在這里記錄一下噪馏。

1.創(chuàng)建Workspace.
2.選擇創(chuàng)建一個(gè)Cocoa touch Framework




新建完一個(gè)工程之后發(fā)現(xiàn)只有一個(gè)頭文件,我們需要將所有對(duì)外暴露的方法都寫在里面绿饵,如果已經(jīng)寫了其他的頭文件欠肾,則把這個(gè)文件直接刪除。

3.接著我們將需要打包的類文件拖進(jìn)去拟赊。



這里記得選擇拷貝


將文件復(fù)制進(jìn)去以后刺桃,我們來到Build Phases > Headers
這里可以看到我們把需要暴露的頭文件移動(dòng)到Public即可,直接拖過去就可以了吸祟。

這里如果又依賴需要先添加一下瑟慈,這里我們需要sqllite桃移,所以添加sqllite3.tbd

然后我們選擇模擬器,注意 葛碧,這里需要選擇模擬器才可以谴轮,后面我們會(huì)講到,然后build吹埠,如果沒出現(xiàn)錯(cuò)誤的話,這個(gè)時(shí)候我們就可以看到打包完成了疮装,framework靜靜的躺在Products的里面缘琅。

這時(shí)候我們可以新建一個(gè)工程然后將framework拖進(jìn)去就直接可以用了。但是事情并沒有結(jié)束廓推,如果我們嘗試在真機(jī)中跑的話刷袍,會(huì)出現(xiàn)錯(cuò)誤。因?yàn)槲覀兙幾g的時(shí)候用的是模擬器樊展,他是X86_64架構(gòu)的呻纹,而真機(jī)是arm架構(gòu)的,自然會(huì)出現(xiàn)錯(cuò)誤专缠,這里我們可以想到可以用真機(jī)再build一次那不就可以了嘛雷酪,確實(shí)可以,但是我們每次build都需要跑兩次涝婉,噢 不止兩次哥力,現(xiàn)在Apple的cpu架構(gòu)如下

  • arm7: 在最老的支持iOS7的設(shè)備上使用
  • arm7s: 在iPhone5和5C上使用
  • arm64: 運(yùn)行于iPhone5S的64位 ARM 處理器 上
  • i386: 32位模擬器上使用
  • x86_64: 64為模擬器上使用

build完了還需要通過lipo命令把他們合起來,實(shí)在是非常麻煩墩弯。這時(shí)候就需要寫一個(gè)腳本來自動(dòng)化實(shí)現(xiàn)這個(gè)過程吩跋。

首先我把需要做的事列舉一下,

1.在所有架構(gòu)下都build一遍渔工。
2.使用lipo命令合成一個(gè)
3.將framework移動(dòng)到指定位置锌钮。

我們先添加一個(gè)腳本,然后在里面寫上

set -e
set +u
# Avoid recursively calling this script.
if [[ $SF_MASTER_SCRIPT_RUNNING ]]
then
exit 0
fi
set -u
export SF_MASTER_SCRIPT_RUNNING=1


# Constants
SF_TARGET_NAME=${PROJECT_NAME}
UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal

FRAMEWORK_TARGET=TBCrashKitFramework


# Take build target
if [[ "$SDK_NAME" =~ ([A-Za-z]+) ]]
then
SF_SDK_PLATFORM=${BASH_REMATCH[1]}
else
echo "Could not find platform name from SDK_NAME: $SDK_NAME"
exit 1
fi

if [[ "$SF_SDK_PLATFORM" = "iphoneos" ]]
then
echo "Please choose iPhone simulator as the build target."
exit 1
fi

IPHONE_DEVICE_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos

# 編譯非模擬器版本arm64
xcodebuild -project "${PROJECT_FILE_PATH}" -target "${TARGET_NAME}" -configuration "${CONFIGURATION}" -sdk iphoneos BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}" CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}/arm64" SYMROOT="${SYMROOT}" ARCHS='arm64' VALID_ARCHS='arm64' $ACTION
# 編譯非模擬器版本arm7
xcodebuild -project "${PROJECT_FILE_PATH}" -target "${TARGET_NAME}" -configuration "${CONFIGURATION}" -sdk iphoneos BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}"  CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}/armv7" SYMROOT="${SYMROOT}" ARCHS='armv7 armv7s' VALID_ARCHS='armv7 armv7s' $ACTION

#復(fù)制到相應(yīng)為文件
rm -rf "${UNIVERSAL_OUTPUTFOLDER}"
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_TARGET}.framework" "${UNIVERSAL_OUTPUTFOLDER}/${FRAMEWORK_TARGET}.framework"

#通過lipo命令合并起來
lipo -create  "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_TARGET}.framework/${FRAMEWORK_TARGET}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/arm64/${FRAMEWORK_TARGET}.framework/${FRAMEWORK_TARGET}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/armv7/${FRAMEWORK_TARGET}.framework/${FRAMEWORK_TARGET}" -output "${UNIVERSAL_OUTPUTFOLDER}/${FRAMEWORK_TARGET}.framework/${FRAMEWORK_TARGET}"

#這里我將文件復(fù)制到項(xiàng)目的位置引矩,順便打了個(gè)包梁丘。
folderpath="../Framework/${PROJECT_NAME}.framework"
if [ -d $folderpath ]
then
rm -R "../Framework/${PROJECT_NAME}.framework"
echo "exist"
fi

filepath="../Framework/${PROJECT_NAME}.framework.zip"
if [ -f $filepath ]
then
rm "../Framework/${PROJECT_NAME}.framework.zip"
fi

mv "${UNIVERSAL_OUTPUTFOLDER}/${FRAMEWORK_TARGET}.framework" "../Framework/${PROJECT_NAME}.framework"
zip -r "${PROJECT_NAME}.framework" "../Framework/${PROJECT_NAME}.framework"
rm -R "${PROJECT_NAME}.framework"

最后就大功告成了,這里用到了腳本旺韭,腳本其實(shí)在程序中能夠幫我們做很多事情兰吟,從而能實(shí)現(xiàn)自動(dòng)化。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茂翔,一起剝皮案震驚了整個(gè)濱河市混蔼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌珊燎,老刑警劉巖惭嚣,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遵湖,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡晚吞,警方通過查閱死者的電腦和手機(jī)延旧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來槽地,“玉大人迁沫,你說我怎么就攤上這事“莆茫” “怎么了集畅?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)缅糟。 經(jīng)常有香客問我挺智,道長(zhǎng),這世上最難降的妖魔是什么窗宦? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任赦颇,我火速辦了婚禮,結(jié)果婚禮上赴涵,老公的妹妹穿的比我還像新娘媒怯。我一直安慰自己,他們只是感情好髓窜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布沪摄。 她就那樣靜靜地躺著,像睡著了一般纱烘。 火紅的嫁衣襯著肌膚如雪杨拐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天擂啥,我揣著相機(jī)與錄音哄陶,去河邊找鬼。 笑死哺壶,一個(gè)胖子當(dāng)著我的面吹牛屋吨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播山宾,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼至扰,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了资锰?” 一聲冷哼從身側(cè)響起敢课,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后直秆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體濒募,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年圾结,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瑰剃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筝野,死狀恐怖晌姚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情歇竟,我是刑警寧澤挥唠,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站途蒋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏馋记。R本人自食惡果不足惜号坡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梯醒。 院中可真熱鬧宽堆,春花似錦、人聲如沸茸习。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽号胚。三九已至籽慢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猫胁,已是汗流浹背箱亿。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弃秆,地道東北人届惋。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像菠赚,于是被迫代替她去往敵國(guó)和親脑豹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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