Contents
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ụngfull
các tính năng của nó. - Đó là kinh nghiệm xương máu
gem 'fastlane', '2.131.1'
- Lời khuyên cho bạn thì cần phải nhớ là sử dụng
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
- Chọn
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
- Đâ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:
- 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
- Đây là file mà bạn sẽ giao tiếp để viết các đoạ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 :
- Khai báo default_platform
- 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.
- 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.
- 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ì:
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
- Bật
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ạnlane
đơ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 fileFastfile
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ạylane
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
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
Fan page
Tags
Recent Posts
- Charles Proxy – Phần 1 : Giới thiệu, cài đặt và cấu hình
- Complete Concurrency với Swift 6
- 300 Bài code thiếu nhi bằng Python – Ebook
- Builder Pattern trong 10 phút
- Observer Pattern trong 10 phút
- Memento Pattern trong 10 phút
- Strategy Pattern trong 10 phút
- Automatic Reference Counting (ARC) trong 10 phút
- Autoresizing Masks trong 10 phút
- Regular Expression (Regex) trong Swift
Archives
- September 2024 (1)
- July 2024 (1)
- June 2024 (1)
- May 2024 (4)
- April 2024 (2)
- March 2024 (5)
- January 2024 (4)
- 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)