Migrating iOS Project to Bazel – Part 4 – Tulsi

Ở những phần trước mình có nói về tạo 1 project đơn giản dùng bazel rồi.
Khi dùng bazel thì chả nhẽ mình phải code bằng sublime text hay vscode ư, điều đó sẽ làm tốc độ dev chậm lại chứ được cái gì mà ông tác giả bài này cứ tung hô nhỉ. Thì giờ tới 1 bước khá quan trọng đó là gen Xcode project 😎

1. Cài đặt Tulsi

Tulsi là một công cụ được open source dùng để generate bazel build target thành Xcode project để chúng ta có thể dễ dàng build, debug, test trong quá trình development. Tulsi được open source tại https://github.com/bazelbuild/tulsi

Để cài đặt nó thì đơn giản thôi, chỉ việc download/clone repo về. Rồi run script sau:

./build_and_run.sh -x <Xcode version của bạn>

Sau khi chạy xong thì Tulsi sẽ được chạy và Tulsi.app sẽ nằm tại thư mục ~/Applications.

Đây là giao diện của Tulsi

2. Gen Xcode project sử dụng Tulsi Editor

Để demo thì mình sẽ dùng project demo cũ ở đây: https://github.com/vikage/DemoBazelUnitTest

Để bắt đầu thì mình chọn Create new project trên giao diện của Tulsi. Tiếp đó thì sẽ điền các thông tin cần thiết như Project name, chọn file WORKSPACE trong project và Next thôi. Sau đó sẽ đến màn hình chính trong Tulsi.

Tulsi có 3 tab chính là Package, Shared options và Configs.

  • Package: Nơi list ra các file BUILD mà các bạn import vào.
  • Shared options là nơi sẽ cho bạn config 1 số thông số cho tất cả các config, nhìn tựa như là build setting trong Xcode vậy.
  • Configs: Nơi sẽ list ra các cấu hình riêng biệt trong Tulsi project. Ví dụ mình muốn tạo 1 config cho kiến trúc arm64, 1 config cho x86_64 và 1 config dành riêng cho unit test chẳng hạn.

Bước 1. Mình sẽ thực hiện add 1 số file BUILD vào phần package.

Khá là easy phải không nào

Bước 2. Mình sẽ chuyển qua tab config rồi chọn button thêm config.

Chọn build target mà bạn muốn nó gen ra project

Tiếp theo Tulsi sẽ hiện lên 1 cửa sổ cho phép bạn chọn BUILD target mà bạn muốn nó gen ra trong Xcode project. Ở đây mình muốn chọn ios_appProjectManagementTests thôi.

Bước 3. Thay đổi 1 số build config nếu bạn muốn.

Tiếp theo bước 2 thì sẽ sang màn hình để cấu hình 1 số build config. Nếu bạn muốn thì cứ thay đổi ở đây, nhìn nó tựa tựa như Xcode build setting vậy đó.

Bước 4. Chọn folder nào mà bạn muốn nó nằm trong Xcode project sau khi Tulsi gen ra.

Tuỳ chọn Recursive ở đây là nó sẽ lấy tất cả trong folder đó. Nếu không thì nó chỉ lấy list các folder con trong folder đó, và sau này khi bạn thêm folder trong đó thì bạn phải update lại Tulsi config để có thể gen ra folder mới đó.

Bước 5. Generate project

Sau khi xong bước 4 và điền tên config thì mình sẽ chọn config và chọn generate, chọn thư mục lưu Xcode project là xong.

Cũng khá ez phải không

3. Gen Xcode project chuyên nghiệp hơn bằng command line

Tulsi trong thực tế rất ít khi được mở lên dưới dạng application (được gọi là Tulsi Editor). Nguyên nhân tại vì nó phải thêm package thủ công vào. Khi bạn thêm mới package thì lại phải thêm bằng tay vào Tulsi project nên khá là bất tiện.

Ngoài ra mỗi khi generate thì lại phải vào Tulsi Editor để bấm generate thì cũng khá là tốn thời gian. Vậy sao chúng ta không sử dụng command line để gen Xcode project nhỉ. Chỉ cần gõ 1 lệnh trên terminal là đã gen được project rồi.

Mình sẽ viết 1 file bash script như sau và đặt tên là xcodegen

#!/bin/bash

~/Applications/Tulsi.app/Contents/MacOS/Tulsi -- --bazel $(which bazel) --genconfig DemoTulsi.tulsiproj:$1

Nội dung của file này là gọi binary của Tulsi và truyền vào tham số để gen config (sẽ được truyền vào) ở project tên là DemoTulsi.tulsiproj.

Giờ chúng ta chỉ cần gọi xcodegen app là đã gen được Xcode project rồi. Trong đó app ở đây là tên config trong Tulsi project mình tạo khi nãy. Mỗi khi project thêm 1 file mới thì chỉ cần gọi script là gen lại được project rồi. Thật đơn giản phải không nào.

Project demo được đặt tại đây: https://github.com/vikage/DemoBazel

Leave a Reply