Xcode 9 下創(chuàng)建包含 Objective-C 與 Swift 代碼的 Framework 及其使用

說(shuō)明

  1. 本篇文章中 Frmaework 是在 Objective-C 環(huán)境下創(chuàng)建的到推,包含 Objective-C 和 Swift 文件底循。由于項(xiàng)目原因踱卵,只涉及 Objective-C 調(diào)用 Swift。
  2. Swift 調(diào)用 Objective-C 需要添加一個(gè) bridge 文件郑临,本文不做詳述栖博。

注意事項(xiàng)

Xcode 9 中不要直接拖動(dòng)文件到項(xiàng)目中(直接拖入不會(huì)選中 Targets 的那個(gè)復(fù)選框),需要右鍵導(dǎo)入文件牧抵,并且選中 Targets 的那個(gè)復(fù)選框笛匙,否則會(huì)找不到文件侨把。

0.jpg

PS:也可以在拖動(dòng)后犀变,選中文件,在 Xocde 的右側(cè)選中那個(gè)復(fù)選框秋柄。

1.png

完成一個(gè) Framework

  1. 創(chuàng)建一個(gè) Objective-C 的Framework(截圖省略)

  2. 在 Build Settings 中設(shè)置 Defines Module 為 YES

2.png
  1. Build Phases -> Headers -> Public 中添加需要暴露的 .h 文件,不需要暴露的文件放在 Build Phases -> Headers -> Project 中。
3.png
  1. 在 Objective-C 的 .h 文件中曙咽,需要用到 Swift 中的對(duì)象時(shí)竿拆,前置聲明在 Swift 中的類。

不要在 .h 中 #import <ChartFramework/ChartFramework-Swift.h>笨触,否則會(huì)報(bào)錯(cuò)找不到文件

PS:ChartFramework-Swift.h 是我自己項(xiàng)目中的命名懦傍。格式是 productModuleName-Swift.h。
當(dāng)你工程中有 Swift 文件時(shí)芦劣,會(huì)自動(dòng)生成的(注意前面提到的注意事項(xiàng))粗俱,不需要手動(dòng)創(chuàng)建。
4.png
  1. 在 .m 中
#import <ChartFramework/ChartFramework-Swift.h>
5.png
  1. 通過(guò)腳本將真機(jī)和模擬器編譯生成的 Framework 合并

在 Build Phases 中選中 "+"虚吟,再單擊 "New Run Script Phase"寸认,最后添加腳本。

6.png
7.png
PS:腳本是在網(wǎng)上找的串慰,好用偏塞,具體鏈接忘了。感謝作者邦鲫!
說(shuō)明:
1. 分別在真機(jī)和模擬器下編譯一次即可灸叼。第一次編譯模擬器時(shí)會(huì)報(bào)錯(cuò),忽略。然后再編譯一次真機(jī)就可以了古今。
2. 真機(jī)和模擬器編譯無(wú)先后順序慎冤。
3. 生成的 Framework 目錄在主工程文件夾下。
8.png

腳本如下:

if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework

DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework

SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework


if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi

mkdir -p "${INSTALL_DIR}"

cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"

lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"

#open "${DEVICE_DIR}"
#open "${SRCROOT}/Products"
fi

使用該 Framework

  1. 將 Framework 右鍵導(dǎo)入項(xiàng)目中
  2. 將 Build Settings -> Build Options -> Always Embed Swift Standard Libraries 設(shè)置為 YES
6.png
  1. 在 Framework Search Paths 中設(shè)置 Framework 的 path
7.png
  1. 嵌入 Framework
8.png
  1. 如果 Framework 中有 xib沧卢、storyboard 等文件蚁堤,需要導(dǎo)入到項(xiàng)目中
9.png

總結(jié)

Apple Swift and Objective-C in the Same Project 文檔中的一段總結(jié),寫(xiě)得非常好但狭。

總結(jié).png

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末披诗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子立磁,更是在濱河造成了極大的恐慌呈队,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唱歧,死亡現(xiàn)場(chǎng)離奇詭異宪摧,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)颅崩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)几于,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人沿后,你說(shuō)我怎么就攤上這事沿彭。” “怎么了尖滚?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵喉刘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我漆弄,道長(zhǎng)睦裳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任撼唾,我火速辦了婚禮廉邑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘券坞。我一直安慰自己鬓催,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布恨锚。 她就那樣靜靜地躺著宇驾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪猴伶。 梳的紋絲不亂的頭發(fā)上课舍,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天塌西,我揣著相機(jī)與錄音,去河邊找鬼筝尾。 笑死捡需,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的筹淫。 我是一名探鬼主播站辉,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼损姜!你這毒婦竟也來(lái)了饰剥?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤摧阅,失蹤者是張志新(化名)和其女友劉穎汰蓉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體棒卷,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡顾孽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了比规。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片若厚。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖苞俘,靈堂內(nèi)的尸體忽然破棺而出盹沈,到底是詐尸還是另有隱情龄章,我是刑警寧澤吃谣,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站做裙,受9級(jí)特大地震影響岗憋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锚贱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一仔戈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拧廊,春花似錦监徘、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至倦春,卻和暖如春户敬,著一層夾襖步出監(jiān)牢的瞬間落剪,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工尿庐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留忠怖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓抄瑟,卻偏偏與公主長(zhǎng)得像凡泣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子皮假,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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