Bazel教程:構(gòu)建iOS應(yīng)用

本教程包含以下步驟:

  • 代碼預(yù)覽
  • 創(chuàng)建BUILD構(gòu)建文件
  • 針對模擬器構(gòu)建應(yīng)用
  • 查看構(gòu)建輸出
  • 在模擬器環(huán)境運行/調(diào)試應(yīng)用
  • 針對設(shè)備構(gòu)建應(yīng)用
  • 安裝應(yīng)用到設(shè)備

需要在 Mac OS X 環(huán)境,WORKSPACE 不用配置鲜屏。

查看源文件結(jié)構(gòu)

iOS應(yīng)用源文件在$WORKSPACE/ios-app/UrlGet目錄烹看。

代碼在這里:https://github.com/bazelbuild/examples/tree/master/tutorial/ios-app/UrlGet

創(chuàng)建BUILD文件

在命令行用vi創(chuàng)建并編輯BUILD文件(其它編輯器也可以):

$ vi $WORKSPACE/ios-app/BUILD

添加一個objc_library規(guī)則

Bazel針對構(gòu)建iOS應(yīng)用提供了諸多規(guī)則命令。在這里洛史,我們首先使用
objc_library
規(guī)則從源文件和Xib文件構(gòu)建 靜態(tài)庫惯殊。
(這個只是最小的規(guī)則,此外還有ios_application規(guī)則可以用于構(gòu)建多架構(gòu)的iOS應(yīng)用也殖。)

BUILD的內(nèi)容如下:

objc_library(
    name = "UrlGetClasses",
    srcs = [
        "UrlGet/AppDelegate.m",
        "UrlGet/UrlGetViewController.m",
    ],
    hdrs = glob(["UrlGet/*.h"]),
    xibs = ["UrlGet/UrlGetViewController.xib"],
)

規(guī)則對應(yīng)的目標名字是UrlGetClasses土思。

添加objc_binary規(guī)則

objc_binary 創(chuàng)建一個
bundled應(yīng)用中的二進制可執(zhí)行程序。

BUILD文件添加如下內(nèi)容:

objc_binary(
    name = "ios-app-binary",
    srcs = [
        "UrlGet/main.m",
    ],
    deps = [
        ":UrlGetClasses",
    ],
)

其中deps屬性引用了前面的UrlGetClasses靜態(tài)庫忆嗜。

添加ios_application規(guī)則

ios_application 規(guī)則用于創(chuàng)建.ipa打包應(yīng)用己儒,
同時生成Xcode過程文件。

BUILD文件添加如下內(nèi)容:

ios_application(
    name = "ios-app",
    binary = ":ios-app-binary",
    infoplist = "UrlGet/UrlGet-Info.plist",
)

完整的BUILD文件在這里:https://github.com/bazelbuild/examples/blob/master/tutorial/ios-app/BUILD

構(gòu)建模擬器環(huán)境的應(yīng)用

命令行環(huán)境捆毫,確保當前目錄對應(yīng)Bazel的workspace:

$ cd $WORKSPACE

輸入以下命令構(gòu)建應(yīng)用:

$ bazel build //ios-app:ios-app

Bazel將啟動構(gòu)建工作闪湾。當構(gòu)建完成時,輸出類似下面的信息:

INFO: Found 1 target...
Target //ios-app:ios-app up-to-date:
  bazel-bin/ios-app/ios-app.ipa
  bazel-bin/ios-app/ios-app.xcodeproj/project.pbxproj
INFO: Elapsed time: 3.765s, Critical Path: 3.44s

查找構(gòu)建的輸出

輸出的.ipa和其它文件在$WORKSPACE/bazel-bin/ios-app目錄绩卤。

模擬器環(huán)境運行/調(diào)試應(yīng)用

現(xiàn)在可以從Xcode環(huán)境的模擬器來運行應(yīng)用途样。先打開$WORKSPACE/bazel-bin/ios-app/ios-app.xcodeproj工程文件江醇,
然后選擇相應(yīng)版本的iOS模擬器,然后點擊 Run 按鈕運行何暇。

注意: 如果要Xcode工程中的任何信息發(fā)生變化(比如刪除文件或添加/改變依賴)陶夜,必須使用Bazel重新生成Xcode工程文件。

針對設(shè)備構(gòu)建應(yīng)用

針對設(shè)備構(gòu)建應(yīng)用裆站,需要設(shè)置bazel以找到目標對應(yīng)設(shè)備的provisioning profile配置文件条辟。
根據(jù)以下步驟設(shè)置:

  1. 打開網(wǎng)頁 Apple Profiles
    下載設(shè)備對應(yīng)的provisioning profile配置文件。
    如果又疑問宏胯,請參考 Apple's documentation捂贿。

  2. 將profile配置文件放到$WORKSPACE/tools/objc目錄。

  3. 可選操作 - 可以在.gitignore中忽略配置文件胳嘲。

  4. 編輯 $WORKSPACE/tools/objc/BUILD 文件,添加:

    filegroup(
        name = "default_provisioning_profile",
        srcs = ["<NAME OF YOUR PROFILE>.mobileprovision"],
    )
    

現(xiàn)在可以構(gòu)建針對設(shè)備的應(yīng)用了:

$ bazel build //ios-app:ios-app --ios_multi_cpus=armv7,arm64

上面的命令將構(gòu)建針對多個類型的設(shè)備應(yīng)用扣草。如果只需要構(gòu)建真的特定類型的應(yīng)用了牛,
可以指定一個特定的設(shè)備架構(gòu)體系結(jié)構(gòu)。

如果需要選擇一個特定版本的Xcode或特定版本的SDK辰妙,可以通過--xcode_version=7.2 --ios_sdk_version=9.2指定鹰祸。
要確保選定版本的SDK對應(yīng)的Xcode已經(jīng)安裝到本機。

如果需要指定一個能夠運行的最小iOS版本密浑,可以通過--ios_minimum_os=7.0指定蛙婴。

安裝應(yīng)用到設(shè)備上

安裝應(yīng)用到設(shè)備最簡單的方法是打開Xcode,然后點擊Windows > Devices菜單尔破。
從左邊列表選擇相應(yīng)的設(shè)備街图,點擊 "+" 按鈕并選擇生成的 .ipa 文件。

如果程序沒有運行懒构,請檢查設(shè)備和provisioning profile配置是否匹配餐济。
點擊Devices下面的View Device Logs按鈕,可以查看到相關(guān)的錯誤信息胆剧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末絮姆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子秩霍,更是在濱河造成了極大的恐慌篙悯,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铃绒,死亡現(xiàn)場離奇詭異鸽照,居然都是意外死亡,警方通過查閱死者的電腦和手機匿垄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門移宅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來归粉,“玉大人,你說我怎么就攤上這事漏峰】返浚” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵浅乔,是天一觀的道長倔喂。 經(jīng)常有香客問我,道長靖苇,這世上最難降的妖魔是什么席噩? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮贤壁,結(jié)果婚禮上悼枢,老公的妹妹穿的比我還像新娘。我一直安慰自己脾拆,他們只是感情好馒索,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著名船,像睡著了一般绰上。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渠驼,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天蜈块,我揣著相機與錄音,去河邊找鬼迷扇。 笑死百揭,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的谋梭。 我是一名探鬼主播信峻,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瓮床!你這毒婦竟也來了盹舞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤隘庄,失蹤者是張志新(化名)和其女友劉穎踢步,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丑掺,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡获印,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了街州。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兼丰。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡玻孟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鳍征,到底是詐尸還是另有隱情黍翎,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布艳丛,位于F島的核電站匣掸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏氮双。R本人自食惡果不足惜碰酝,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望戴差。 院中可真熱鬧送爸,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至割以,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間袁铐,已是汗流浹背杨伙。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蚓让,地道東北人乾忱。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像历极,于是被迫代替她去往敵國和親窄瘟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

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

  • Swift版本點擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 25,293評論 7 249
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議图云。它實...
    香橙柚子閱讀 23,733評論 8 183
  • 因為家里有事,上個星期休息了五天邻邮,在上班的前一天的晚上竣况,想到自己明天就要上班了,莫名的反感上班筒严。 這讓我想到我...
    話嘮speak閱讀 344評論 0 0
  • 憨皮問毛豆丹泉,“無聊的生活是怎樣情萤?” 毛豆白了憨皮一眼,“溫水煮青蛙摹恨。無趣的緊筋岛。” “那有趣的生活呢睬塌?”憨皮緊接著發(fā)...
    亓官長歌閱讀 159評論 0 1
  • 歸我的夢中 在未醒時泉蝌, 在迷離的眼神中, 歸我的夢中揩晴,在黑暗的盡頭勋陪。 沒有如水的月光流淌,只有幾顆星星在泛動著微弱的光硫兰。
    遷于喬木閱讀 120評論 0 0