Skip to content
  • Home
  • Code
  • iOS & Swift
  • Combine
  • RxSwift
  • SwiftUI
  • Flutter & Dart
  • Tutorials
  • Art
  • Blog
Fx Studio
  • Home
  • Code
  • iOS & Swift
  • Combine
  • RxSwift
  • SwiftUI
  • Flutter & Dart
  • Tutorials
  • Art
  • Blog
Written by chuotfx on September 13, 2019

Fastlane đại cương

Tutorials

Contents

    • 1. Fastlane là gì?
    • 2. Cài đặt
    • 3. Giải thích về các thành phần
    • 4. Cấu hình cho Fastlane
    • 5. Build ở local
    • 6. Build ở máy CI
    • 7. Giải thích đoạn Lane
  • Tổng kết:

Chào mọi người, hôm nay mình sẽ trình bày về Fastlane. Nó là gì và công dụng như thế nào?

1. Fastlane là gì?

    • Fastlane là một công cụ giúp cho việc release sản phẩm của chúng ta trở nên dễ dàng hơn , nhanh hơn .
    • Nó xử lý tất cả những công việc dườm dà như tạo screenshot , xử lý với code signing và release ứng dụng lên store .

Theo như hình thì bạn sẽ thấy có rất nhiều tools bên trong fastlane. Tiếp theo thì:

  • Ta có thể làm gì với fastlane?
    • Xác định rõ việc deploy sản phẩn , bản beta hay testing
    • Deploy tới bất kỳ máy tính nào , bao gồm cả CI server
    • Mở rộng , tối ưu hóa các chức năng
    • Dễ dàng setup trong vài phút
    • Không cần phải nhớ các câu lệnh command phức tạp , chỉ cần fastlane là đủ
    • Lưu trữ mọi thứ trên Git , dễ config
    • Tự động truyền thông tin theo tưng bước (ví dụ : đường dẫn đến file IPA)
    • Tiết kiệm thời gian cho bản cập nhật cũng như release
    • Thực hiện đầy đủ các qui trinh delivery sản phẩn
    • Cấu hình linh hoạt , mọi thứ chỉ cần config trong Fastfile
    • Có khoảng hơn 170 chức năng được tích hợp sẵn
    • Hỗ trợ cho cả iOS , MacOS , Android

Cái cần quan tâm bây giờ của chúng ta là tích hợp được với CI. Và vì con người là khâu yếu nhất trong chuỗi mắt xích nên các công việc nào tự động thực hiện được thì sẽ ưu tiên hơn.

2. Cài đặt

  • Thêm vào GemFile
    • Lời khuyên cho bạn thì cần phải nhớ là sử dụng version mới nhất của Fastlane để sử dụng full các tính năng của nó.
    • Đó là kinh nghiệm xương máu gem 'fastlane', '2.131.1'
gem 'fastlane'
  • Chạy các lệnh ở local trước (vì cần thiết) để install
    • Cập nhật các bundle
bundle install
    • Cài đặt Fastlane
gem install fastlane
  • Init Fastlane
    • Chạy lệnh init trước (trên Travis CI thì mình ko chạy lệnh này)
fastlane init
    • Chọn option 4 để sử dụng. Các option khác thì tìm hiểu sau nhoé. Ahihi
    • Chạy xong thì sinh ra 1 thư mục fastlane trong đó có 2 file
      • Appfile
      • Fastfile

 

Cài đặt xong thì sẽ có thư mục fastlane với 2 file trong đó: Appfile & Fastfile

Tùy theo mục đích sử dụng của bạn mà lựa chọn. Chúc mừng bạn đã hoàn thành xong bước đầu tiên trên con đường CD.

 

3. Giải thích về các thành phần

  • Appfile :
    • Đây là nơi bạn khai báo các thông tin liên quan tới việc build app và nó cũng sẽ tự động sinh ra một số trường nếu bạn chọn 1 trong số 3 option phía trên:
      • app_identifier
      • apple_id
      • itc_team_id
      • team_id
  • Fastfile :
    • Đây là file mà bạn sẽ giao tiếp để viết các đoạn script để cấu hình cho fastlane.
    • Để viết được script cho fastlane thì tốt nhất là bạn nên đọc qua Fastlane Documentation để hiểu cú pháp, nó rất là dễ và ít thôi nên bạn hãy xem qua nó để tránh việc mất thời gian để dò lỗi cú pháp.
    • Để mở Fastfile thì bạn có thể dùng vim, TextEdit nhưng mình recommend các bạn sử dụng atom để mở trông sẽ đẹp và dễ nhìn hơn

 

4. Cấu hình cho Fastlane

​ Nào bây giờ chúng ta thử viết một đoạn script để bắt fastlane build thử app xem có lỗi gì không nhé.

platform :ios do
  desc "Try to test app"
  lane :test_lane do
    run_tests(scheme: "TheLastProject_Development")
  end
end

Warning !! Các bạn hết sức cẩn thận với từng ký tự nhé vì bạn có thể mắc lỗi cú pháp bất kỳ lúc nào.

Kết quả sẽ được log ra ở Terminal rất nhiều, bạn chỉ cần quan tâm tới summary là được.

Giải thích qua một chút về đoạn script trên :

  1. Khai báo default_platform
  2. Tạo một thẻ platform là ios và kết thúc bằng end, đây là thẻ chính cho biết là môi trường của chúng ta là ios chứ không phải android. Từ giờ trở đi nếu muốn thêm bất cứ script nào thì chúng ta cứ thêm vào trong thẻ này.
  3. Viết test script :
    • desc đây là một keyword (để cho dễ hiểu thì bạn cứ tưởng tượng nó là một hàm bình thường như print vậy), sau keyword là một đoạn text, fastlane sẽ hiểu là đoạn mô tả cho script phía bên dưới sẽ làm gì, ý nghĩa của nó thì:
      • một là để người đọc đoạn script của bạn hiểu bạn muốn làm gì ở đây
      • hai là khi bạn đọc log của fastlane bạn cũng biết được nó đang chạy đến dòng script nào.
lane :test do

   #do some things here.

end.
    • Bạn thấy nó giống gì không?  cho dễ nhơ thì mình qui chiếu sang ngôn ngữ lập trình một tí:
lane = class 
test = class_name
do = {
...
end = }
    • Bật terminal và chạy thử test
fastlane test

 

5. Build ở local

desc "Build App in local"
  lane :build_local do
    build_ios_app(
      scheme: "TheLastProject_Development", 
      workspace: "TheLastProject.xcworkspace",
      configuration: "Debug", 
      export_method: "development"
    )
   end
  • Mở Fastfile lên và edit đoạn lane đơn giản này
  • Mở Terminal lên và chạy lệnh
bundle exec fastlane build_local

Kết quả ra như thế này là khá là ổn

  • Archive thành công
  • Kết nối được với cấu hình project
  • Xuất được file *.ipa

Các bạn làm màu mè thêm một chút nữa cho đẹp Fastfile và các file *.ipa vào một chỗ.

default_platform(:ios)

platform :ios do

  desc "Build App in local"
  lane :build_local do
    make_build_folder
    build_ios_app(
      scheme: "TheLastProject_Development", 
      workspace: "TheLastProject.xcworkspace",
      configuration: "Debug", 
      export_method: "development",
      output_directory: "./build",
      output_name: "TheLastProject_Dev.ipa",
      silent: true,
      clean: true
    )
  end

  desc "Make build Folder"
  private_lane :make_build_folder do
    sh "mkdir -p ./build"
  end

end

Bạn đã xong phần ở local, chừ tiến sang phần Travis CI.

 

6. Build ở máy CI

  • Các bạn viết thêm đoạn code lane trong file Fastfile như sau
desc "Build App"
  lane :build do
    make_build_folder
    disable_automatic_code_signing(
      path: "TheLastProject.xcodeproj"
    )
    import_certificate(
      keychain_name: "ios-build.keychain",
      keychain_password: "travis",
      certificate_path: "./scripts/certs/dev.p12",
      certificate_password: "12345678"
    )
    update_project_provisioning(
      xcodeproj: "TheLastProject.xcodeproj",
      profile: "./scripts/profiles/TheLastProject_Dev.mobileprovision",
      target_filter: "TheLastProject",
      build_configuration: "Debug",
    )
    build_ios_app(
      scheme: "TheLastProject_Development", 
      workspace: "TheLastProject.xcworkspace",
      configuration: "Debug", 
      export_method: "development",
      output_directory: "./build",
      silent: true,
      clean: true,
      skip_profile_detection: true,
      export_options: {
        provisioningProfiles: { "com.fx.thelastproject": "TheLastProject_Dev" }
      }
    )
    enable_automatic_code_signing(
      path: "TheLastProject.xcodeproj"
    )
  end
  • Mở file .travis.yml để thêm đoạn script chạy lane mới tạo trên máy CI
script:
  - ./scripts/linter
  - bundle exec fastlane build

Bây giờ bạn commit, push code và tạo pull request để CI nó quẩy và chờ đợi kết quả.

 

7. Giải thích đoạn Lane

  • Khi chạy ở local thì fastlane sẽ dùng auto code signing của Xcode nên sẽ tự detect provisioning và build thành công
  • Tuy nhiên mình cần phải chọn đúng cấu hình
    • configuration
    • export_method
  • Khi chạy ở máy CI thì fastlane chuyển sang chế độ chạy manual. Khi đó thì vất vả 1 tí. Chúng ta xem lane build và thứ tự thực hiện như sau:
    • Bước 1: tắt auto code sigining
    • Bước 2: import lại certificate vào đúng keychain mình đã tạo ở phần trên
    • Bước 3: vì tắt auto code signing nên cần phải chỉ định provisioning cho đúng. Vì vậy, mình cần chạy lệnh update_project_provisioning
    • Bước 4: bật lại auto code signing. Nếu chạy ở local thì cần, còn CI thì không cần thiết lắm vì máy đó sẽ tắt và mất đi

Tới được đây thì chúc mừng bạn đã vượt qua phần khó nhất của seri mệt mỏi này. Phần tiếp theo sẽ là deploy app.

 

Tổng kết:

Bạn đã làm được gì với bài viết này:

  • Cài đặt Fastlane
  • Viết script để test hoặc build app iOS
  • Xuất file *.ipa
  • Auto build/test trên Travis CI

 

FacebookTweetPinYummlyLinkedInPrintEmailShares16
Tags: ci/cd, fastlane
Written by chuotfx

Hãy ngồi xuống, uống miếng bánh và ăn miếng trà. Chúng ta cùng nhau đàm đạo về đời, về code nhóe!

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Donate – Buy me a coffee!

Fan page

Fx Studio

Tags

Actor Advanced Swift api AppDistribution Asynchronous autolayout basic ios tutorial blog callback ci/cd closure collectionview combine concurrency CoreData Core Location crashlytics darkmode dart dart basic dart tour Declarative decoding delegate deploy fabric fastlane firebase flavor flutter GCD iOS mapview MVVM optional protocol rxswift Swift Swift 5.5 SwiftUI SwiftUI Notes tableview testing TravisCI unittest

Recent Posts

  • Raw String trong 10 phút
  • Dispatch Semaphore trong 10 phút
  • Tổng kết năm 2022
  • KeyPath trong 10 phút – Swift
  • Make color App Flutter
  • Ứng dụng Flutter đầu tiên
  • Cài đặt Flutter SDK & Hello world
  • Coding Conventions – người hùng hay kẻ tội đồ?
  • Giới thiệu về Flutter
  • Tìm hiểu về ngôn ngữ lập trình Dart

Archives

  • February 2023 (1)
  • January 2023 (2)
  • November 2022 (2)
  • October 2022 (1)
  • September 2022 (5)
  • August 2022 (6)
  • July 2022 (7)
  • June 2022 (8)
  • May 2022 (5)
  • April 2022 (1)
  • March 2022 (3)
  • February 2022 (5)
  • January 2022 (4)
  • December 2021 (6)
  • November 2021 (8)
  • October 2021 (8)
  • September 2021 (8)
  • August 2021 (8)
  • July 2021 (9)
  • June 2021 (8)
  • May 2021 (7)
  • April 2021 (11)
  • March 2021 (12)
  • February 2021 (3)
  • January 2021 (3)
  • December 2020 (3)
  • November 2020 (9)
  • October 2020 (7)
  • September 2020 (17)
  • August 2020 (1)
  • July 2020 (3)
  • June 2020 (1)
  • May 2020 (2)
  • April 2020 (3)
  • March 2020 (20)
  • February 2020 (5)
  • January 2020 (2)
  • December 2019 (12)
  • November 2019 (12)
  • October 2019 (19)
  • September 2019 (17)
  • August 2019 (10)

About me

Education, Mini Game, Digital Art & Life of coders
Contacts:
contacts@fxstudio.dev

Fx Studio

  • Home
  • About me
  • Contact us
  • Mail
  • Privacy Policy
  • Donate
  • Sitemap

Categories

  • Art (1)
  • Blog (22)
  • Code (4)
  • Combine (22)
  • Flutter & Dart (24)
  • iOS & Swift (86)
  • RxSwift (37)
  • SwiftUI (76)
  • Tutorials (70)

Newsletter

Stay up to date with our latest news and posts.
Loading

    Copyright © 2023 Fx Studio - All rights reserved.

    Share this ArticleLike this article? Email it to a friend!

    Email sent!