[bazel]-tulsi的使用

Change log

目錄

[bazel]-導(dǎo)讀
[bazel]-概念和術(shù)語
[bazel]-bazel的使用
[bazel]-tulsi的使用
[bazel]-如何編譯
[bazel]-緩存
[bazel]-影響緩存命中的因素
[bazel]-優(yōu)化
項目地址

Change log

2021-01-15:更新tulsi
官方的tulsi對Xcode支持有些問題。推薦使用bilibili修改后的tulsi。
地址:https://github.com/bilibili/tulsi

一.是什么

tulsi GitHub地址: https://github.com/bazelbuild/tulsi

tulsi使用: https://tulsi.bazel.build/docs/gettingstarted.html

tulsi使用Bazel的BUILD中的信息來生成Xcode Project.
注意.他只是用來幫我們生成Xcode Project文件的.
至于編譯和簽名都還是Bazel干的事.

二.安裝

tulsi GitHub地址: https://github.com/bazelbuild/tulsi

step1: git clone https://github.com/bazelbuild/tulsi.git

step2: cd tulsi

step3: sh build_and_run.sh

三.怎么用

step1:

將前面編譯生成的tulsi.app復(fù)制到GXBazelShell文件夾下的tools目錄下

image.png

step2: Create a new Tulsi project

首先打開tulsi軟件 -> Create New project
輸入你app的名字.如universal

image.png

step3: Choose the WORKSPACE file

點擊Workspace location右邊的那一排灰字.
選擇剛才創(chuàng)建的WORKSPACE文件.

image.png

step4:

這里是給項目中添加任何BUILD文件的位置,以及設(shè)置Bazel二進(jìn)制文件的路徑,該二進(jìn)制文件將用于生成Xcode項目和編譯.
現(xiàn)在我們要創(chuàng)建的是universal這個target的project.
所以應(yīng)該選擇universal目錄下的BUILD文件.

image.png

注意:

這一步你可以指定使用的bazel的路徑.
如上圖.我指定的是/usr/local.....下的bazel.
但是這樣的話.每個開發(fā)使用的bazel就可以能不統(tǒng)一.
(例如A開發(fā)安裝的是0.15.2版本.B開發(fā)安裝的是0.17.2版本.)

所以我們可以將bazel放在workspace目錄下.并上傳到git倉庫里.
如下.我就將bazel放在了//:workspace/bin/bazel/0.17.2目錄下了.

image.png

然后所有開發(fā)都必須將工程clone到同一目錄下.(如/opt/bazel-workspace)
那么在創(chuàng)建tulsi配置文件的時候就可以將bazel的路徑修改為/opt/bazel-workspace/bin/bazel/0.17.2/下的bazel了.
這樣所有人都使用的是同一個bazel版本了.

這里我們可以再優(yōu)化一下.
將/opt/bazel-workspace/bin/bazel/0.17.2/bazel-0.17.2..win-x86_64 做一個軟鏈bazel-wrapper.放在workspace根目錄下.
然后tulsi配置文件就將bazel的路徑設(shè)置為/opt/bazel-workspace/bazel-wrapper.
以后你想升級bazel.就只需要更改bazel-wrapper的真實路徑就可以了.就不用修改tulsi的配置文件了.

step5: shared options

默認(rèn)即可

image.png

step6: Create project generator configs

點擊頂部的configs選項
然后點擊'+'號.會彈出如下彈窗
彈窗會讓你選擇存放路徑.即存放生成的.tulsiproj文件的路徑

image.png

step7: 選擇該tulsiproj文件與哪個app關(guān)聯(lián)

image.png

step8: 自定義配置configs 默認(rèn)即可

image.png

step9: 選擇target

image.png

step10: 給你的target取個名字.

image.png
image.png

step11.點擊右下角的generate按鈕.選擇保存路徑即可

image.png

step: over

至此大功告成.當(dāng)你點擊Generate后tulsi會自動幫你生成xcodeproj文件.然后幫你打開.如下

在這個project下.你的開發(fā)跟原來一模一樣.

唯一的潛在區(qū)別就是當(dāng)你點擊run按鈕的時候.

Xcode走的是Build Phases -> Run Script -> bazel_build.py這個腳本.

讓bazel幫你編譯.

image.png

優(yōu)化

這里的universal.tulsi.tulsiproj其實就是個模板.
告訴tulsi怎么生成我們想要的xcodeproj文件.
所以這里的universal.xcodeproj應(yīng)該加入到.gitignore文件里.

image.png

使用優(yōu)化

每個人拉取你的工程時.都要用tulsi軟件去生成這個.xcodeproj文件.
這樣太麻煩了.

tulsi給我們提供了通過命令行來創(chuàng)建.xcodeproj文件的方式.
我們可以在根目錄下創(chuàng)建build.sh腳本.
在這個腳本里調(diào)用tulsi的命令創(chuàng)建.xcodeproj文件

#!/bin/sh
set -e

echo "通過//universal/universal.tulsi.tulsiproj文件生成universal.xcodeproj文件"
./tools/Tulsi.app/Contents/MacOS/Tulsi -- genconfig --genconfig universal/universal.tulsi.tulsiproj:universal

這樣當(dāng)別人要運行你的項目時.

只需要兩步
1.git clone你的倉庫.
2,運行build.sh腳本.

遇到的bug:

問題一:版本選擇錯誤

/opt/Mine/tulsi(master) ? sh build_and_run.sh                                    xxx@xxx
ERROR: /private/var/tmp/_bazel_xxx/ecd97368bb045b45661f8a6d7e6ead6a/external/local_config_xcode/BUILD:12:1: in xcode_config rule @local_config_xcode//:host_xcodes: --xcode_version=11.3.1 specified, but '11.3.1' is not an available Xcode version. available versions: [11.4.0.11E146]. If you believe you have '11.3.1' installed, try running "bazel shutdown", and then re-run your command.
ERROR: Analysis of target '//:tulsi' failed; build aborted: Analysis of target '@local_config_xcode//:host_xcodes' failed
INFO: Elapsed time: 0.061s
INFO: 0 processes.
FAILED: Build did NOT complete successfully (1 packages loaded, 0 targets configured)

解決辦法:
查看.bazelrc.發(fā)現(xiàn)這里設(shè)置的是11.3.1.將這里改成你的xcode版本即可。

cat .bazelrc                            
build --cpu=darwin_x86_64
build --apple_platform_type=macos
build --xcode_version=11.3.1   // 就是這行有問題

# Disable the Swift compilation worker when running integration tests, since it
# requires the protobuf dependency which is infeasible to get working on Bazel.
build --define=RULES_SWIFT_BUILD_DUMMY_WORKER=1
build --strategy=SwiftCompile=local

# Stop gap for https://github.com/bazelbuild/tulsi/issues/94.
# See also: https://github.com/bazelbuild/rules_apple/issues/456.
build "--host_force_python=PY2"

問題二:新添加的文件夾不顯示

我在根目錄添加了srcs文件夾。
并在srcs文件夾里添加了新的BUILD。
該BUILD也被其他BUILD依賴了。
但是使用tulsi構(gòu)建出來的工程目錄里卻沒有顯示該路徑。

解決:

如果你新添加了文件夾后需要修改universal.tulsi.tulsiproj文件。
將你新添加的文件夾添加進(jìn)去。

1.打開之前創(chuàng)建的tulsi模版

![222.png](https://upload-images.jianshu.io/upload_images/1452166-b6b541c7f671797e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2.打開之前創(chuàng)建的universal

222.png

3.勾選你新建的package


333.png

這里把他們勾選上。并save。重新構(gòu)建project即可在xcode目錄中顯示了。

還有個前提是你新建的這個package必須有其他已經(jīng)顯示的package依賴他。否則他也不會顯示。

下一篇:[bazel]-如何編譯

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,211評論 3 119
  • 一般我們在xcode里面配置包含工程目錄下頭文件的時候,都要關(guān)聯(lián)著相對路徑和絕對路徑,如果只是自己用這個項目,用絕...
    心有琳鑫閱讀 12,635評論 0 15
  • 前言 從前文Jenkins(一)初步認(rèn)識我們已經(jīng)初步認(rèn)識了Jenkins。接下來我們將通過一些配置來實現(xiàn)利用Jen...
    dvlproad閱讀 7,550評論 9 7
  • #復(fù)盤第3天# 花錢的權(quán)利 成長大概就是一種不斷擁有更多選擇權(quán)的過程吧。從小時候花出1毛錢買了一份小零食都興奮不已...
    Ariel元閱讀 319評論 0 2
  • 聽說,吃貨多大廚。 我是不是吃貨,真的不好說。眼不見心不想的是我,心里想嘴角涎的也是我。 所以,按照這個聽說的標(biāo)準(zhǔn)...
    魔之瞳閱讀 656評論 0 3

友情鏈接更多精彩內(nèi)容