HomeOur Team
Tự động hóa iOS Code Signing với Fastlane

Tự động hóa iOS Code Signing với Fastlane

By Hai Son Tran
Published in Solutions
November 01, 2022
4 min read

Đặt vấn đề

Khác với Android, trong quá trình phát triển, ứng dụng iOS không thể cài đặt trực tiếp lên thiết bị bởi cơ chế bảo mật và xác thực của Apple thông qua certificateprovisioning profile. Hiểu nôm na, để có thể triển khai ứng dụng, trước tiên, Apple sẽ sử dụng certificate để xác thực danh tính thông qua tài khoản Apple Developer. Sau đó, ứng dụng sẽ được chứng thực bởi provisioning profile (bằng cách đối chiếu thông tin trong provisioning profile với thông tin trong app).

Theo cơ chế này, mọi ứng dụng phải có tối thiểu một provisioning profile được dùng để “sign” app. Với mỗi dự án khác nhau, số lượng profile có thể dao động ít nhiều phụ thuộc vào mục đích và yêu cầu của dự án (scheme, build type và build mode). Không những vậy, trong dự án có nhiều thành viên, việc quản lí không chặt chẽ còn có thể xảy ra tình trạng “bùng nổ” certificate/profile, tạo ra nhiều certificate/profile không cần thiết, khiến việc đồng bộ giữa các thành viên gặp khó khăn.

Từ đây, câu hỏi đặt ra làm thế nào để quản lý certificate và provisioning profile một cách hiệu quả, tiết kiệm thời gian cài đặt và hạn chế những sai sót khi build?

Để trả lời câu hỏi này, hôm nay ta sẽ cùng tìm hiểu về Fastlane - một công cụ có khả năng tự động hóa quá trình code signing, giúp quản lý, chia sẻ và đồng bộ certificate/profile một cách dễ dàng.

Fastlane là gì?

Fastlane là một công cụ được xây dựng phục vụ cho mục đích tự động hóa những tác vụ thường gặp trong quá trình phát triển iOS và Android, như screenshot capture, code signing, beta deployment và store deployment.

Tại sao lại sử dụng Fastlane?

Fastlane đem lại nhiều lợi ích và hiệu quả hơn so với việc cài đặt và sử dụng certificate/profile thông thường, bởi vì:

  • Fastlane tự động hóa quá trình khởi tạo, cài đặt, lưu trữ và đồng bộ certificate/profile.
  • Fastlane có khả năng hỗ trợ app có nhiều bundle id và build target.
  • Fastlane có thể dễ dàng cài đặt và sử dụng trên những hệ điều hành phổ biến như macOS/Linux/Windows.

Code signing với Fastlane

  1. Sử dụng match
  2. Sử dụng certsigh

Trước khi bắt đầu tìm hiểu code signing với Fastlane, có một số lưu ý như sau:

  • Version sử dụng trong bài viết: Fastlane 2.210.1
  • Cài đặt Fastlane và setup project: Fastlane

Sau khi hoàn thành các bước chuẩn bị, giờ ta sẽ bắt đầu với Fastlane.

1. Sử dụng match

Match là phương pháp được khuyến khích sử dụng bởi Fastlane bởi những đặc điểm sau:

  • Đơn giản hóa quá trình code signing.
  • Đồng bộ certificate/profile giữa các thành viên trong dự án.
  • Hạn chế những sai sót thường gặp.

Đầu tiên, khởi tạo match bằng cách chạy lệnh sau:

fastlane match init

Fastlane sẽ đưa ra 4 lựa chọn để ta có thể chọn nơi lưu trữ certificate/profile, bao gồm:

  1. git
  2. google_cloud
  3. s3
  4. gitlab_secure_files

fastlane-match-init

Ở bước này, ta sẽ chọn nơi lưu trữ là Github (phương án 1). Khi đó, Fastlane sẽ yêu cầu URL của private repository để lưu trữ certificate/profile. Ta nhập URL của repo đó vào dưới dạng https hoặc git.

fastlane-match-storage-url

Fastlane sẽ tạo một file mới trong thư mục ./fastlaneMatchfile bao gồm những thông tin ta vừa nhập.

Ví dụ nội dung trong Matchfile như sau:

git_url("https://github.com/username/storage-repo.git")
storage_mode("git")

Sau khi khởi tạo match, ta chạy lệnh sau để bắt đầu quá trình code signing:

fastlane match development

fastlane-match-appstore

Ở đây, tùy vào mục đích của dự án mà ta có thể thay option development thành appstore, adhoc, enterprise, developer_id hoặc mac_installer_distribution.

Trong quá trình chạy, Fastlane sẽ yêu cầu cung cấp những thông tin cần thiết, vì vậy cần đọc kĩ và điền đúng các thông tin tương ứng. Lưu ý, ở bước nhập Passphrase cho Github repository, ta cần ghi nhớ thông tin này vì đây sẽ là password để có thể truy cập vào repository lấy certificate/profile để sử dụng match.

Sau khi hoàn thành, ta vào Github và Apple Developer để xem kết quả.

github-repo-cert

apple-developer-certificate

apple-developer-profile

Ngoài lần chạy đầu tiên để khởi tạo, từ những lần sau, ta sẽ chạy match với option readonly để tránh việc tạo mới nhiều certificate và profile.

fastlane match development --readonly
2. Sử dụng certsigh

Mặc dù match được khuyến khích sử dụng trong hầu hết các trường hợp, Fastlane vẫn cung cấp một phương pháp thứ hai - sử dụng certsigh - giúp can thiệp sâu hơn vào quá trình code signing. Từ đó có thể nắm được toàn bộ quá trình và tùy biến theo mục đích.

Để bắt đầu, ta sẽ chạy lệnh sau để khởi tạo certificate:

fastlane cert --development

fastlane-cert

Ở đây, ta dùng option development phục vụ cho mục đích phát triển và kiểm thử. Bên cạnh đó, nếu dự án yêu cầu việc phân phối ứng dụng trên App Store, AdHoc hoặc Enterprise, ta sẽ dùng option distribution.

Fastlane cert sẽ kiểm tra nếu certificate đã được cài đặt trong máy. Trong trường hợp chưa có, cert sẽ tạo một certificate mới và tự động cài đặt, import vào Keychain. Lưu ý, cert sẽ không “revoke” những certificate đã tồn tại hay tải certificate từ Apple Developer về máy, bởi vì quá trình tạo certificate cần đến private key, mà private key sẽ chỉ lưu trong máy của bạn thay vì chia sẻ cho mọi người.

Sau bước cài đặt certificate, ta sẽ tạo provisioning profile bằng lệnh:

fastlane sigh --development

fastlane-sigh

Bên cạnh option development, ta còn có những option khác như appstore, adhoc, enterprise hay developer_id. Mỗi option sẽ phục vụ cho từng mục đích khác nhau khi phân phối ứng dụng.

Lúc này, sigh sẽ khởi tạo và cài đặt provisioning profile từ Apple Developer về máy, đồng thời liên kết với certificate tương ứng và đảm bảo certificate đó vẫn còn hiệu lực.

Tổng kết

Chỉ đơn giản như vậy, ta đã hoàn thành việc chuẩn bị certificate và provisioning profile cho một dự án iOS. Fastlane giúp tự động hóa quá trình code signing, tiết kiệm thời gian cài đặt và chuẩn bị cho dự án, đồng thời hạn chế tối đa những sai sót xảy ra khi đồng bộ certificate/profile giữa các thành viên.


Tham khảo

Tags

iosfastlanecode-signing

Share

Hai Son Tran

Expertise

Related Posts

Flutter + Fastlane + Firebase App Distribution
Solutions
Flutter + Fastlane + Firebase App Distribution
November 05, 2022
4 min
© 2023, All Rights Reserved.
Powered By

Quick Links

HomeOur Team

Social Media