Migrating iOS Project to Bazel – Part 5 – Tích hợp swiftlint

Swiftlint là một công cụ giúp developer chúng ta thực hiện check cú pháp của code swift theo 1 số rule. Đây là công cụ mà ai cũng biết rồi.

Nếu như bình thường thì chúng ta có thể cài đặt thẳng SwiftLint bằng cocoapods rồi gọi script để swiftlint chạy khi compile project. Tuy nhiên ở đây chúng ta đã dùng bazel rồi, nên là cách cài đặt và gọi swiftlint sẽ khác 1 chút.

Mình sẽ sử dụng lại project ở đây để demo: https://github.com/vikage/DemoBazel

1. Cài đặt

Mình sẽ vào trang Release của swiftlint trên github tại link: https://github.com/realm/SwiftLint/releases và tải file SwiftLint.pkg. Đây là file cài đặt thẳng swiftlint lên hệ thống. Có 1 cách nữa là tải file portable và embed trong project, tuy nhiên mình nghĩ nên cài luôn nó vào trong hệ thống thì hơn.

2. Chạy script gọi swiftlint

Nếu mà sử dụng Xcode thì quá đơn giản là chúng ta tạo 1 run script bằng giao diện trong Xcode. Trong trường hợp dùng bazel thì chúng ta sẽ update file config của tulsi để nó khi gen ra Xcode project sẽ chứa luôn script chạy tulsi cho chúng ta.

Chúng ta mở file app.tulsigen(tùy thuộc tên config của các bạn) nằm trong đường dẫn DemoTulsi.tulsiproj/Configs/app.tulsigen.

File này chứa nhiều thông số config.

Để thêm script để chạy swiftlint trước khi project được build, chúng ta cần thêm vào 1 option ở trong optionSet có key là PreBuildPhaseRunScript với nội dung như sau.

"PreBuildPhaseRunScript": {
      "t": {
        "//App:ios_app": "if which swiftlint >/dev/null; then \n  swiftlint \nelse \n  echo 'warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint' \n  exit 1\nfi"
      }
    },

Như vậy chúng ta có được config như này. Lưu ý App:ios_app là tên build target của app mình. Tên của bạn là khác thì bạn phải đổi nhé.

Giờ thử gen ra Xcode project xem sao bằng cách gọi: xcodegen app

Như vậy là ta đã thấy xuất hiện thêm 1 script chạy swiftlint ở trong phần Build Phases rồi.

Example mình đặt ở đây nhé: https://github.com/vikage/DemoBazel/tree/swiftlint

Leave a Reply