1. Giới Thiệu
Nếu bạn đang đọc bài viết này, có lẽ bạn đã quen thuộc với các khái niệm như Github Actions, CI/CD, TestFlight, và Flutter. Trong bài viết này, tôi sẽ cung cấp hướng dẫn chi tiết để triển khai CI/CD cho ứng dụng Flutter của bạn, tập trung vào các bước thực hiện mà không sa vào lý thuyết quá nhiều.
Khi bạn làm việc với các dịch vụ của Apple, bạn cần phải thực hiện các thao tác đăng ký và cấu hình để sử dụng các tài nguyên mà họ cung cấp.
2. Chuẩn Bị
Để bắt đầu, bạn cần chuẩn bị những điều sau:
- Tài khoản Apple Developer để đăng nhập vào App Store Connect.
- Dự án Flutter và tài khoản Github.
- Máy tính chạy MacOS, chẳng hạn như MacBook hoặc Mac Mini.
Nếu bạn chưa có tài khoản Apple Developer, bạn có thể đăng ký:
- Tài khoản cá nhân: phí hàng năm là 99 USD.
- Tài khoản doanh nghiệp: phí hàng năm là 299 USD.
2.1 Tạo Khóa API cho App Store Connect
Để có thể đẩy file .ipa lên TestFlight bằng các câu lệnh CI/CD, bạn cần phải có apiKey, apiIssuer, và file private key .p8. Truy cập vào link này để tạo khóa và tải file về, bạn sẽ nhận được file .p8 với định dạng AuthKey_$apiKey.p8
.
2.2 Chứng Chỉ và Hồ Sơ Cung Cấp
Bước này rất quan trọng, vì không có chúng, bạn sẽ không thể ký ứng dụng từ xa thành công.
2.2.1 Tạo Certificate Signing Request
- Mở ứng dụng
Keychain Access.app
trên máy Mac của bạn. - Chọn Certificate Assistant trên thanh menu và chọn
Request a Cert...
. - Điền thông tin email (đã đăng ký Apple ID) và tên người ký, sau đó chọn Saved to disk để lưu lại file tạo ra.
2.2.2 Tạo Certificate
Truy cập vào trang Apple Developer để tạo chứng chỉ:
- Nhấn vào dấu + bên cạnh chữ Certificates.
- Chọn Apple Distribution và tải lên file
.certSigningRequest
vừa tạo. - Nhấn tiếp tục và hoàn tất mà không cần tải xuống file
.cer
.
2.2.3 Tạo Hồ Sơ Cung Cấp (Profiles)
- Chọn tab Profiles và nhấn tạo mới.
- Chọn phương thức phân phối là App Store Connect.
- Chọn App ID cho ứng dụng của bạn và chứng chỉ đã tạo.
- Đặt tên cho hồ sơ và nhấn Generate để tải về file .mobileprovision.
2.2.4 Kiểm Tra Hồ Sơ Cung Cấp
Mở dự án Flutter của bạn và sử dụng Xcode để kiểm tra.
- Trong Xcode, vào tab Signing và bỏ chọn
Automatically manage signing
. - Nhập hồ sơ
.mobileprovision
mà bạn đã tạo. - Nếu mọi thứ đúng, bạn sẽ không thấy báo lỗi. Nếu có lỗi, hãy thử khởi động lại máy tính.
3. Cài Đặt
Sử dụng câu lệnh sau để chuyển đổi file sang định dạng base64:
base64 -i path/to/file.txt | pbcopy
Truy cập repository trên Github và tạo một secret mới.
3.1 Tạo Chữ Ký Của Android (Có thể bỏ qua)
Nếu bạn chưa biết về .jks và key.properties, bạn có thể tham khảo hướng dẫn tại bài viết gốc về Flutter.
3.2 Chứng Chỉ .p12 Base64
Lấy file từ Keychain Access
hoặc Xcode. Xuất file .p12 và lưu lại với tên BUILD_CERTIFICATE
.
3.3 Hồ Sơ Cung Cấp .mobileprovision Base64
Tạo secret tương ứng với file .mobileprovision
đã tạo trước đó.
3.4 Tạo File ExportOptions.plist
Tạo file này từ Xcode, đảm bảo sign được hồ sơ trước khi bắt đầu.
3.5 Khóa API Private Key .p8 Base64
Chuyển đổi file .p8 thành base64 để tạo secret cho Github.
3.6 GitHub Repository Token
Tạo token bằng cách vào Developer Setting và tạo Personal Access Token với quyền Repo.
3.7 Workflow Đầy Đủ
Tạo file workflow bên trong dự án của bạn với tên .github/workflows/.main.yaml
. Copy đoạn mã mẫu mà tôi cung cấp bên dưới:
yaml
name: Build & Release
...
4. Kết Quả
Sau nhiều lần thử nghiệm, cuối cùng quá trình CI/CD đã thành công.
5. Tổng Kết
Hy vọng qua bài viết này, bạn sẽ nắm được cách:
- Tạo chứng chỉ và hồ sơ để ký cho Xcode.
- Lấy được khóa cho App Store Connect API.
- Hiểu biết về Github secret và token.
- Tự động tạo ra github artifact và release, cùng với khả năng upload file ipa lên TestFlight.
Tại sao nên sử dụng Github Secret?
Github Secret giúp bảo vệ thông tin nhạy cảm như khóa API và thông tin xác thực, tránh rủi ro tiết lộ khi làm việc với repository công khai.