Bazel研究一:運(yùn)行HelloWorld

前言

源碼:https://github.com/h42330789/StudyBazel

一直想研究Telegram的源碼沦零,下載下來按步驟能正常在模擬器運(yùn)行,想使用LookIn這個(gè)工具研究下疾渴,方便查看研究搞坝,發(fā)現(xiàn)Telegram是使用Bazel管理的大門桩撮,不知道如何集成LookIn店量,特研究學(xué)習(xí)下Bazel

一鞠呈、安裝Bzael

參考:
在 macOS 上安裝 Bazel
Bazel教程:構(gòu)建iOS應(yīng)用[翻譯]
基于 Bazel 的 iOS Monorepo 工程實(shí)踐
Bazel iOS Hello World (Objective-C, Mac M1)
Build an iOS Framework (Objective-C) by Bazel
https://github.com/deeplearningmakeeasy/bazelioshelloworld
https://medium.com/@DeepLearningMakeEasy

# 使用brew安裝 bazel
brew install bazel
# 查看bazel版本
bazel --version

二旱爆、準(zhǔn)備一個(gè)空項(xiàng)目HelloOC

2.1 使用Xcode創(chuàng)建一個(gè)HelloOC的項(xiàng)目,然后刪掉配置文件后控,只保留源碼文件

2.2 在HelloOC同層文件夾下創(chuàng)建WORKSPACE文件浩淘,內(nèi)容如下:

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

# rules required for ios-app

http_archive(
    name = "build_bazel_rules_apple",
    sha256 = "cd3b62efed8eaf306050817205d5139de3189be422ee009038783c3da0b04483",
    strip_prefix = "rules_apple-5b7c929ec4f3618a3f558c7ccae64f155f2646b7",
    url = "https://github.com/bazelbuild/rules_apple/archive/5b7c929ec4f3618a3f558c7ccae64f155f2646b7.tar.gz",
)

load(
    "@build_bazel_rules_apple//apple:repositories.bzl",
    "apple_rules_dependencies",
)

apple_rules_dependencies()

load(
    "@build_bazel_rules_swift//swift:repositories.bzl",
    "swift_rules_dependencies",
)

swift_rules_dependencies()

load(
    "@build_bazel_rules_swift//swift:extras.bzl",
    "swift_rules_extra_dependencies",
)

swift_rules_extra_dependencies()

load(
    "@build_bazel_apple_support//lib:repositories.bzl",
    "apple_support_dependencies",
)

apple_support_dependencies()

# rules required by ios-app Xcode integration

http_archive(
    name = "rules_xcodeproj",
    sha256 = "7967b372bd1777214ce65c87a82ac0630150b7504b443de0315ea52e45758e0c",
    url = "https://github.com/MobileNativeFoundation/rules_xcodeproj/releases/download/1.3.3/release.tar.gz",
)

load(
    "@rules_xcodeproj//xcodeproj:repositories.bzl",
    "xcodeproj_rules_dependencies",
)

xcodeproj_rules_dependencies()

# rules required by backend

http_archive(
    name = "io_bazel_rules_appengine",
    strip_prefix = "rules_appengine-03121ae8efa634f7219f53970650a4445a72b759",
    # TODO: update to a release version that contains 339f6aba67fcedb7268cf54d1163cf7704a277ca.
    # This commit fixes the Maven artifact URLs to use "https" instead of "http".
    # We don't specify sha256, because the sha256 of GitHub-served non-release archives isn't
    # stable.
    urls = ["https://github.com/bazelbuild/rules_appengine/archive/03121ae8efa634f7219f53970650a4445a72b759.tar.gz"],
)

load(
    "@io_bazel_rules_appengine//appengine:java_appengine.bzl",
    "java_appengine_repositories",
)



2.3
在HelloOC里創(chuàng)建BUILD文件吴攒,內(nèi)如如下:

# load ios application rule
load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application")
# load build in objc_library rule 
load("@rules_cc//cc:defs.bzl", "objc_library")

load(
    "@rules_xcodeproj//xcodeproj:defs.bzl",
    "top_level_target",
    "xcodeproj",
)

# 源代碼的庫
objc_library(
    # 名字隨意取
    name = "HelloWorldOC_source",
    srcs = [
        # 這里可以全部單獨(dú)列出來张抄,也可以使用*.m這樣的通配符方式
        "Source/AppDelegate.m",
        "Source/SceneDelegate.m",
        "Source/ViewController.m",
        "Source/main.m",
    ],
    hdrs = glob(["Source/*.h"]),
    # 資源文件
    data = [
        "Source/Base.lproj/Main.storyboard",
        "Source/Base.lproj/LaunchScreen.storyboard",
    ],
    deps = []
)

# 生成ipa,bazel build //BUILD所在文件夾名稱:ios_application的名稱
# bazel build //HelloOC:My-HelloOC-app
# 模擬器運(yùn)行洼怔,bazel run //BUILD所在文件夾名稱:ios_application的名稱
# bazel run //HelloOC:My-HelloOC-app
ios_application(
    # 名字隨便起署惯,用于生成ipa使用
    name = "My-HelloOC-app",
    # 這個(gè)bundle_id一定要與Info.plist里的一致
    bundle_id = "studyBazel.helloOC.aa",
    # 支持的版本
    families = [
        "iphone",
        "ipad",
    ],
    infoplists = ["Source/Info.plist"],
    launch_storyboard = "Source/Base.lproj/LaunchScreen.storyboard",
    app_icons = glob(["Source/Assets.xcassets/AppIcon.appiconset/*.png"])
         + glob(["Source/Assets.xcassets/AppIcon.appiconset/*.json"]),
    # 支持的iOS最小版本
    minimum_os_version = "13.0",
    # provisioning_profile = "<your_profile_name>.mobileprovision", # Uncomment and set your own profile.
    visibility = ["http://visibility:public"],
    # 依賴的源代碼
    deps = [":HelloWorldOC_source"],
)

# 這里是為了生存Xcodeproj文件
# bazel run //BUILD所在文件夾名稱:xcodeproj的名稱,會生成一個(gè)xxx.xcodeproj的文件
# bazel run //HelloOC:my_xcodeproj
xcodeproj(
    name = "my_xcodeproj",
    build_mode = "bazel",
    # 生成的xxx.codeproj的名稱
    project_name = "My_helloOC",
    tags = ["manual"],
    top_level_targets = [
        top_level_target(
            # 要與ios_application里定義的名字一樣
            ":My-HelloOC-app",
            target_environments = ["simulator"],
        ),
    ],
)

三镣隶、運(yùn)行命令:

# 生成ipa极谊,bazel build //BUILD所在文件夾名稱:ios_application的名稱
bazel build //HelloOC:My-HelloOC-app
# 模擬器運(yùn)行,bazel run //BUILD所在文件夾名稱:ios_application的名稱
bazel run //HelloOC:My-HelloOC-app
# 生成xcode項(xiàng)目
# bazel run //BUILD所在文件夾名稱:xcodeproj的名稱安岂,會生成一個(gè)xxx.xcodeproj的文件
bazel run //HelloOC:my_xcodeproj

四轻猖、截圖:

整體結(jié)構(gòu)如下:


image.png

運(yùn)行效果:


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子市殷,更是在濱河造成了極大的恐慌,老刑警劉巖绪妹,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝇摸,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)制圈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門馋嗜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來葛菇,“玉大人,你說我怎么就攤上這事【鸥” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵璧诵,是天一觀的道長族操。 經(jīng)常有香客問我泼舱,道長,這世上最難降的妖魔是什么冒掌? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任辜限,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘钉寝。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般窿锉。 火紅的嫁衣襯著肌膚如雪铸史。 梳的紋絲不亂的頭發(fā)上判沟,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天迹炼,我揣著相機(jī)與錄音,去河邊找鬼刻两。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的帝美。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼创译,長吁一口氣:“原來是場噩夢啊……” “哼残制!你這毒婦竟也來了浊闪?” 一聲冷哼從身側(cè)響起折汞,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浅妆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年摄欲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迟隅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呀伙。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布洽故,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一奋早、第九天 我趴在偏房一處隱蔽的房頂上張望掉奄。 院中可真熱鬧引瀑,春花似錦屑柔、人聲如沸唧瘾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽罩缴。三九已至檬寂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間戳表,已是汗流浹背镣屹。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓生巡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子溃卡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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