[bazel]-tulsi的使用

Change log

目录

[bazel]-导读
[bazel]-概念和术语
[bazel]-bazel的使用
[bazel]-tulsi的使用
[bazel]-如何编译
[bazel]-缓存
[bazel]-影响缓存命中的因素
[bazel]-优化
项目地址

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复制到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右边的那一排灰字.
选择刚才创建的WORKSPACE文件.

image.png

step4:

这里是给项目中添加任何BUILD文件的位置,以及设置Bazel二进制文件的路径,该二进制文件将用于生成Xcode项目和编译.
现在我们要创建的是universal这个target的project.
所以应该选择universal目录下的BUILD文件.

image.png

注意:

这一步你可以指定使用的bazel的路径.
如上图.我指定的是/usr/local.....下的bazel.
但是这样的话.每个开发使用的bazel就可以能不统一.
(例如A开发安装的是0.15.2版本.B开发安装的是0.17.2版本.)

所以我们可以将bazel放在workspace目录下.并上传到git仓库里.
如下.我就将bazel放在了//:workspace/bin/bazel/0.17.2目录下了.

image.png

然后所有开发都必须将工程clone到同一目录下.(如/opt/bazel-workspace)
那么在创建tulsi配置文件的时候就可以将bazel的路径修改为/opt/bazel-workspace/bin/bazel/0.17.2/下的bazel了.
这样所有人都使用的是同一个bazel版本了.

这里我们可以再优化一下.
将/opt/bazel-workspace/bin/bazel/0.17.2/bazel-0.17.2..win-x86_64 做一个软链bazel-wrapper.放在workspace根目录下.
然后tulsi配置文件就将bazel的路径设置为/opt/bazel-workspace/bazel-wrapper.
以后你想升级bazel.就只需要更改bazel-wrapper的真实路径就可以了.就不用修改tulsi的配置文件了.

step5: shared options

默认即可

image.png

step6: Create project generator configs

点击顶部的configs选项
然后点击'+'号.会弹出如下弹窗
弹窗会让你选择存放路径.即存放生成的.tulsiproj文件的路径

image.png

step7: 选择该tulsiproj文件与哪个app关联

image.png

step8: 自定义配置configs 默认即可

image.png

step9: 选择target

image.png

step10: 给你的target取个名字.

image.png
image.png

step11.点击右下角的generate按钮.选择保存路径即可

image.png

step: over

至此大功告成.当你点击Generate后tulsi会自动帮你生成xcodeproj文件.然后帮你打开.如下

在这个project下.你的开发跟原来一模一样.

唯一的潜在区别就是当你点击run按钮的时候.

Xcode走的是Build Phases -> Run Script -> bazel_build.py这个脚本.

让bazel帮你编译.

image.png

优化

这里的universal.tulsi.tulsiproj其实就是个模板.
告诉tulsi怎么生成我们想要的xcodeproj文件.
所以这里的universal.xcodeproj应该加入到.gitignore文件里.

image.png

使用优化

每个人拉取你的工程时.都要用tulsi软件去生成这个.xcodeproj文件.
这样太麻烦了.

tulsi给我们提供了通过命令行来创建.xcodeproj文件的方式.
我们可以在根目录下创建build.sh脚本.
在这个脚本里调用tulsi的命令创建.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

这样当别人要运行你的项目时.

只需要两步
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.发现这里设置的是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构建出来的工程目录里却没有显示该路径。

解决:

如果你新添加了文件夹后需要修改universal.tulsi.tulsiproj文件。
将你新添加的文件夹添加进去。

1.打开之前创建的tulsi模版

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

2.打开之前创建的universal

222.png

3.勾选你新建的package


333.png

这里把他们勾选上。并save。重新构建project即可在xcode目录中显示了。

还有个前提是你新建的这个package必须有其他已经显示的package依赖他。否则他也不会显示。

下一篇:[bazel]-如何编译

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    X先生_未知数的X阅读 15,934评论 3 118
  • 一般我们在xcode里面配置包含工程目录下头文件的时候,都要关联着相对路径和绝对路径,如果只是自己用这个项目,用绝...
    心有琳鑫阅读 12,327评论 0 15
  • 前言 从前文Jenkins(一)初步认识我们已经初步认识了Jenkins。接下来我们将通过一些配置来实现利用Jen...
    dvlproad阅读 7,202评论 9 7
  • #复盘第3天# 花钱的权利 成长大概就是一种不断拥有更多选择权的过程吧。从小时候花出1毛钱买了一份小零食都兴奋不已...
    Ariel元阅读 260评论 0 2
  • 听说,吃货多大厨。 我是不是吃货,真的不好说。眼不见心不想的是我,心里想嘴角涎的也是我。 所以,按照这个听说的标准...
    魔之瞳阅读 550评论 0 3