Automation and Continuous Delivery for iOS Apps using Fastlane tools

Fastlane là 1 công cụ hỗ trợ cho iOS, Android developer trong việc release, build test cực kỳ tốt. Các tính năng chính của nó các bạn có thể tham khảo trên trang chủ: https://fastlane.tools/. Trong khuôn khổ bài viết này, mình sẽ hướng dẫn các bạn dùng Fastlane để build, up file ipa test lên TestFlight hoặc Crashlytics, giúp cho việc test dễ dàng hơn.

Trước hết là so sánh nhanh giữa việc up lên Testflight và Crashlytics. Testflight:

  • Ưu điểm: dễ cài cắm, build bằng distribution nên sẽ có push và các config y hệt như lúc up lên Appstore,
  • Nhược điểm: là mỗi khi tăng version thì Apple lại phải review lại khá mất thời gian, mỗi lần up lên Testflight cũng phải đợi processing file ipa mất tầm 10 - 20p.

Crashlytics:

  • Ưu điểm: up lên là test được luôn, ko phải kiểm duyệt gì cả.
  • Nhược điểm: mỗi lần thêm tester thì phải lấy UDID của máy và tạo lại provision adhoc để build.

1. Cài đặt fastlane

  • Install fastlane: sudo gem install fastlane --verbose

  • Hãy đảm bảo là bạn đã cài xCode command line tool: xcode-select --install

  • Nếu thấy chạy chậm thì chạy lệnh sau: gem cleanup

  • Tiếp đến là init fastlane trong project: cd [your_project_folder] fastlane init

2. Config project để tự động tăng build_index mỗi khi build ipa.

Mở project build setting và tìm đến mục Versioning. Chỉnh mục Current Project Version về số build bạn muốn (VD bằng số build hiện tại trong info.plist), và chỉnh Versioning System về Apple Generic.

3. Dùng Fastlane để build, up lên Testflight

Sau khi , trong project folder sẽ có 1 thư mục Fastlane được sinh ra. Mở file [your_project_folder]/fastlane/Fastfile ra để chỉnh sửa:

Comment dòng cocoapod trong before_all lại:

before_all do
    # ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
    #cocoapods # Nếu bỏ comment thì mỗi lần build nó sẽ chạy pod install trước
end

Sửa lại setting lane :beta do như sau:

lane :beta do
    increment_build_number              
    gym(scheme: "YOUR_PROJECT_MAIN_TARGET")     
    pilot(distribute_external: true, changelog: "New build for testing")    
  end

Cùng giải thích đoạn code trên:

increment_build_number: Dòng này để tự động tăng build index mỗi khi chạy gym(scheme: "YOUR_PROJECT_MAIN_TARGET"): archive project ra file ipa, lưu ý thay project scheme vào đây pilot: lệnh để up file ipa lên itunesconnect distribute_external: cho phép test với external testers changelog: là changelog khi submit external testing Sau đó, mở terminal và chạy lệnh sau để thực hiện quá trình build + upload + tự động invite testers trên Testflight:

fastlane beta

4. Dùng Fastlane để build, up lên Crashlytics

Trước hết là gắn Fabric Crashlytic vào project, mục đích là để có crash report và tracking install: https://fabric.io/kits/ios/crashlytics/install

Sau đó là tạo nhóm testers trên Crashlytics: vào dashboard của Fabric: https://fabric.io/home => Chọn project hiện tại, VD là project ABC. => Chọn tab Beta ở menu bên trái như trong hình, sau đó add testers tuỳ thích

Chọn tiếp Manage Groups => New Group => VD đặt tên group là ABCTesters (alias là abctesters) => add thành viên.

Vào tiếp Fabric setting https://fabric.io/settings/organizations, chọn organizations, sau đó bấm vào API Key + Build Secret và lưu 2 key này lại:

Vậy là xong cài đặt cho Crashlytics, tiếp theo là config fastlane để up build lên đây

Cài đặt fastlane

Mở file [your_project_folder]/fastlane/Fastfile ra để chỉnh sửa, tương tự như setup cho Testflight:

Comment dòng cocoapod trong before_all lại:

before_all do
    # ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
    #cocoapods # Nếu bỏ comment thì mỗi lần build nó sẽ chạy pod install trước
end

Sửa lại setting lane :beta do như sau:

lane :beta do
    increment_build_number
    gym(scheme: "YOUR_PROJECT_MAIN_TARGET")
    crashlytics(
      api_token: "CRASHLYTICS_API_TOKEN",
      build_secret: "CRASHLYTIC_BUILD_SECRET",
      groups: "abctesters",
      notes: "Automatic iOS Build"
    )
  end

Cùng giải thích đoạn code trên:

increment_build_number: Dòng này để tự động tăng build index mỗi khi chạy gym(scheme: "YOUR_PROJECT_MAIN_TARGET"): archive project ra file ipa, lưu ý thay project scheme vào đây crashlytics: lệnh để up file ipa lên Crashlytics api_token, build_secret: key của project trên Crashlytics lấy được ở trên groups: tên của group muốn invite notes: là changelog khi submit testing Sau đó, mở terminal và chạy lệnh sau để thực hiện quá trình build + upload lên + tự động invite testers trên Crashlytics:

fastlane beta Vậy là xong. bây giờ phần việc còn lại là củ fastlane :3