07/09/2018, 15:34

Hướng dẫn dùng fastlane để build, up test tự động

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 ...

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 2 cu cậu này: Up lên Testflight thì có ưu điểm là 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. Up lên Crashlytics có ưu điểm là up lên là test được luôn, ko phải kiểm duyệt gì cả, nhược điểm là 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. Chúng ta sẽ đi từng bước, nhưng đầu tiên phần cài cắm:

1. Cài đặt 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

image

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

image

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:

image

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, tranh thủ thời gian đi nhâm nhi tách cafe hoặc ngắm gái và để phần việc còn lại cho Fastlane ヽ(´▽`)/

0