Tuesday, April 5, 2016

[Certificates] Hướng dẫn cách tạo và quản lý certificate key khi lập trình trên iOS

Giới thiệu:

Apple bắt buộc những nhà phát triển ứng dụng trên iOS, mỗi khi chạy ứng dụng trên thiết bị để debug, export ra file cài đặt (.ipa), hoặc đưa ứng dụng lên App Store đều phải có tài khoản developer của Apple.
Đây là sơ đồ quy trình từ lúc bạn mua tài khoản đến khi bạn release ứng dụng đó trên AppStore:
Trong bài này mình chỉ mô tả về những key của Apple cần thiết để bạn có thể cài ứng dụng lên trên device trong giai đoạn phát triển ứng dụng (Develop). Và sử dụng key theo dạng cá nhân trên nhiều máy tính trong cùng team.
Bạn có thể xem thêm chi tiết phần Distribute tại trang của Apple.

Hướng dẫn mua tài khoản lập trình trên iOS:

- Hiện tại Apple bán tài khoản developer có 2 loại: 1 loại dành cho cá nhân giá 99$ và 1 loại dành cho doanh nghiệp normal giá 99$ hoặc enterprise giá 299$, chi tiết bạn có thể xem tại đây. Bạn phải tài khoản Apple ID thì mới có thể mua được tài khoản iOS Developer. Nếu bạn chưa có tài khoản Apple ID thì có thể vào đây để đăng ký.
- Sau khi đăng nhập thành công, bạn nhấn vào chữ "Member Center" -> chọn thẻ "Account Summary", kéo xuống dưới phần "Membership" và nhấn vào nút "Enroll Now", như hình bên dưới:
Tuỳ theo nhu cầu sử dụng của bạn như thế nào thì bạn mua theo loại đó. Các bạn cứ điền thông tin mà Apple bắt nhập là có thể mua được.

Sau đây là một vài hình ảnh tài khoản theo kiểu công ty hoặc tổ chức:

Mua theo dạng này có 3 quyền chính là Agent, Admin và Member. Người đứng ra mua tài khoản là Agent, người đó có thể thêm những tài khoản khác vào để làm Admin hoặc Member để phát triển ứng dụng. Vai trò của từng loại được miêu tả tại đây.

Còn bạn mua theo dạng cá nhân thì có hình như sau:

Nếu 1 team trong công ty mà chưa mua được account theo dạng tổ chức hoặc công ty thì vẫn có thể dùng account theo dạng cá nhân để mọi người trong team có thể chạy và test ứng dụng trên device.

Danh sách những certificate key:

Sau khi đăng ký tài khoản lập trình trên iOS thành công, việc đầu tiên bạn cần quan tâm là phải tạo những certificate key. Hiện tại Apple có những loại certificate key như:
- Intermediate Certificates: Key này sẽ được cài bởi XCode, nếu key này không có hoặc hết hạn bạn có thể tải key mới từ trang developer của Apple về. Key này như 1 key trung gian giữa những key kia. Nếu key này mà không có hoặc bị hết hạn thì những key khác đều bị báo lỗi như "This certificate has an invalid issuer".


- Development: Là những key dùng cho giai đoạn phát triển phần mềm, có 2 loại như:
    + iOS App Development: Dùng cho việc chạy ứng dụng trên thiết bị.
    + Apple Push Notification service SSL (Sandbox): Dùng cho server push notification ở dạng test.


- Production: Là những key dùng cho giai đoạn phân phát ứng dụng để người dùng có thể test và đưa lên App Store, có những loại như sau:
    + App Store and Ad Hoc: Là key dùng để export ra file ".ipa"
    + Apple Push Notification service SSL (Sandbox & Production): Dùng cho server push notification ở dạng test và sản phẩm thực tế.
    ..... Bạn có thể tìm hiểu thêm,  trong topic này mình không xoáy sâu vào những key này.


Nếu tài khoản của bạn mua theo dạng Enterprise (299$) thì trong phần Production thì sẽ có thêm chức năng In-House, như sau:
Khi export file ipa theo dạng In-House hay enterprise bạn có thể cài trên bất kỳ device test nào mà không bị giới hạn 100 device như dạng AdHoc. Tham khảo tại đây.


Hiện nay Apple có 2 cách để tạo ra những key này:
- Cách thứ 1: Bạn tạo key một cách thủ công, bằng file .certSigningRequest. Cách này có từ trước đến giờ rồi.
- Cách thứ 2: Bạn có thể tạo key bằng XCode. XCode sẽ tự quản lý certificate key cho bạn. Hình như từ khi lên XCode 5 hay XCode 6, Apple đã áp dụng cách này rồi. Đa số những hướng dẫn trên trang của Apple chỉ cách này.
Vì thế có thể việc tạo key bằng cách thứ 1 và cách thứ 2 có thể bị đụng và làm key của bạn không hợp lệ. Bạn nên lưu ý vấn đề này. Do đó theo mình khi bạn tạo key cho team để debug trên device thì nên tạo theo cách thứ 2 là dùng XCode vừa nhanh lại đơn giản. Nhưng nếu bạn muốn tạo key cho Push Notification service thì phải tạo bằng cách thứ 1, vì hiện tại XCode vẫn chưa hỗ trợ.

Sơ đồ về cơ chế quản lý certificates của Apple thông qua những Public Key và Private Key, như sau:
Vì lý do bảo mật nên Private Key phải được bảo vệ cẩn thận bằng mật khẩu mỗi khi bạn export ra để dùng chung với máy tính khác.

Hướng dẫn tạo certificate key bằng XCode:

- Bước 1: Mở ứng dụng XCode và vào phần "XCode > Preference..." trên thanh toolbar. 
- Bước 2: Nhấn vào tab "Account". Sau đó chọn thêm tài khoản Apple ID như sau:
- Bước 3: Sau khi bạn thêm tài khoản xong rồi màn hình hiển thị ra như sau:
Tại đây bạn chọn tên tài khoản và nhấn vào nút "View Details...", sẽ xuất hiện màn hình như sau:

- Bước 4: Theo hình ở trên, nếu key theo loại nào đã được tạo rồi và hợp lệ thì nút "Create" sẽ được ẩn đi, còn nếu chưa tạo thì bạn có thể tạo bằng cách nhấn vào nút "Create" để XCode tạo key cho bạn. Ví dụ như mình nhấn vào nút "Create" tại mục "iOS Distribution", sau khi tạo thành công và nút "Create" ẩn đi, bạn lên trên web để kiểm tra xem key này đã được tạo hay chưa thì sẽ thấy thông tin như hình này:
Và bạn mở ứng dụng "Keychain Access" thì sẽ phải hiển thị thông tin như sau:
Chúc mừng bạn đã tạo Certificate Key thành công. Nếu bạn đã đăng ký device rồi, bạn có thể nhấn vào nút "Download All" ở màn hình quản lý key trong XCode để tải về những Provisioning mới thì mới có thể chạy ứng dụng trên device đó được.

Hướng dẫn tạo certificate key bằng thủ công:

- Bước 1: Bạn truy cập trang web iOS Developer và đăng nhập vào tài khoản. Vào mục "Member Center > Certificates, Identifiers & Profiles". Chọn mục Certificates và nhấn vào nút thêm sẽ xuất hiện màn hình như sau:
Ví dụ mình chọn tạo key theo "iOS App Development" chỉ để build và cài đặt lên device. sau đó nhấn nút "Continue". Sẽ xuất hiện màn hình hướng dẫn các bạn tạo ra CSR file như sau:

- Bước 2: Theo hướng dẫn của Apple thì bạn phải mở ứng dụng "Keychain Access" trong thư mục "Application > Utilities". Tại ứng dụng quản lý Keychain bạn chọn như "Keychain Access > Certificate Assistant > Request a Certificate from a Certificate Authority":

Sau khi chọn như trên bạn sẽ ra màn hình và nhập theo hướng dẫn của Apple như sau:
Lưu ý: Email sẽ theo email của các bạn nha, mình chỉ ví dụ tên email giả này thôi.

Sau khi điền đủ thông tin, bạn sẽ tải về 1 file như "iOSTeam.certSigningRequest" hãy giữ file này cẩn thận, để sau này tạo những key khác bạn có thể dùng file này.

- Bước 3: Quay lại trang web iOS Developer và bạn tải file ". certSigningRequest" lên là có thể tạo key thành công.

Hiện tại mình hướng dẫn xong cho các bạn tạo key để có thể cài ứng dụng của các bạn khi lập trình lên trên device, còn những key khác bạn có thể tham khảo ở trên trang Apple hoặc tuỳ vào cách sử dụng từng service sẽ có cách tạo và sử dụng khác nhau xíu.

Nếu bạn sử dụng trong giai đoạn development và có thể cài ứng dụng lên trên device thì bạn phải đăng ký AppID, thêm những UUID của từng thiết bị vào trong phần Devices, tạo Provisioning Profile để liên kết những phần đó lại để Apple chứng thực. Mình sẽ giải thích từng phần tại những mục sau.

Thiết lập Identifier:

Tại mục này bạn chỉ cần lưu ý 2 vấn đề như sau:
- Nếu nhu cầu của bạn chỉ là cài ứng dụng lên device thì bạn tạo AppID với tên chung chung và ID là "*" để có thể xài chung được với tất cả những ứng dụng.
- Nếu ứng dụng của bạn sử dụng service mà bắt phải chỉ định App ID như Apple Push Notification thì bạn phải tạo App ID theo đúng Bundle ID theo project bạn đang làm.

Thiết lập Devices:

- Tại mục này bạn phải đăng ký UUID của từng device lên đây, hiện tại Apple giới hạn chỉ cho đăng ký 100 devices trên 1 tài khoản. Vì thế bạn nên lưu ý việc này, nếu bạn thêm nhiều quá thì đến lúc cần thêm vào nữa thì Apple bắt bạn phải renew lại và đăng ký lại từ đầu.
- Mỗi khi bạn đăng ký mới device vào thì phải tạo lại Provisioning thì mới có thể cài trên device đó được.

Thiết lập Provisioning Profile:

- XCode có thể tự động tạo Provisioning cho bạn, bạn để ý cột Status sẽ thấy phần này.
- Nếu bạn muốn tạo Provisioning theo service khác như build ứng dụng để sử dụng Apple Push Notification Service (APNS) thì phải tự tạo Provisioning theo Certificate và App ID đã đăng ký trước đó thì mới có thể dùng được APNS.

Hướng dẫn sử dụng 1 key cá nhân trên nhiều máy tính:

- Bước 1: Bạn mở ứng dụng Keychain Access lên, vào phần Certificates, chọn Certificate nào mình muốn export và nhấn chuột phải sẽ ra màn hình sau:
Ví dụ bạn chỉ cần cài app lên device thì dùng key "iPhone Developer" nếu bạn dùng APNS thì dùng key "Apple Development iOS Push Services". Khi nhấn export bạn sẽ đến màn hình nhập tên của file và mật khẩu.
Bạn có thể nhập mật khẩu hay để trống cũng được, vì có 1 vài service bên thứ 3 không có chỗ để nhập mật khẩu.
File .p12 này sẽ chứa private key và certificate. 

- Bước 2: Bạn lên trang iOS developer và tải Provisioning Profile mới nhất về với đuôi file .mobileprovision.

Bạn chỉ cần đưa 2 file này cho người nào muốn cài ứng dụng lên device là được.

Hiện tại cách này chỉ sử dụng cho trường hợp bạn cần cài ứng dụng lên device để debug mà không cần nhập tài khoản trên XCode. Chứ nếu bạn muốn export ra file .ipa thì cũng phải nhập Apple ID và password trên XCode thì mới sử dụng được. Từ khi XCode ra phiên bản mới thì chặn trường hợp này lúc trước không cần nhập tài khoản trên XCode vẫn có thể export được.

Nếu các bạn gặp rắc rối gì về cách đọc tài liệu và cách quản lý key thì có thể comment tại thread này. Mình sẽ cố gắng trả lời sớm cho các bạn.

Nếu thấy hay ủng hộ mình 1 ly cà phê nhé (^.-)


Hướng dẫn cách giải quyết issue về "This certificate has an invalid issuer". Bạn nhớ xoá key WWDR trong keychain ở 2 mục Login và System và thêm key mới vào. Chi tiết các bạn có thể xem qua tại đây.

Hôm nay công ty mình có mua thiết bị mới nên mình có test thử khi build app trên device mới với XCode 7.3 thực sự có cần tài khoản Apple hay không?
- Khi cắm device mới vào, thì XCode bắt buộc phải chạy chương trình xử lý để XCode nhận diện thiết bị mới:

- Sau khi XCode xử lý xong thì lúc build trên device mới ngay chỗ team (hiện tại mình để None) trong phần setting mình thấy cảnh báo warning. Nó bắt phải fix thì mới cho build.

Fix cái này bằng cách login vào tài khoản apple developer thì XCode tự động thêm UUID của device mới vào tài khoản apple developer. Sau đó mình mới có thể build ứng dụng lên device được.

- Hiện tại theo mình thấy thì Apple có cho tài khoản Developer dạng Free, tức là khi bạn đăng ký Apple ID nhưng chưa mua account Dev thì mặc định tài khoản đó gọi là Free.
Khi bạn build debug ứng dụng trên device thì sẽ xuất hiện thông báo như sau:

Bạn phải Trust thông tin trên device bằng cách vào General -> Profile -> chọn trên tài khoản Dev Free của bạn, và nhấn vào nút Trust như hình sau:
Tóm lại: Hiện tại Apple cho phép tài khoản Free cũng có thể build được lên device nhưng phải mất thêm công đoạn Trust device đó.

Thông tin bên lề:

- Topic liên quan đến thuế và hoá đơn của Apple các bạn có thể đọc tại đây.

Tài liệu tham khảo:

Maintaining Certificates
Purchase Activation

13 comments:

  1. Cái này xưa roài. Xcode 7 không cần Account cũng build được :)

    ReplyDelete
    Replies
    1. Uhm, cái này cũng có nghe nói mà chưa test thử như thế nào trên máy Mac và Device hoàn toàn mới. Vì chưa có điều kiện :D.

      Delete
    2. Hôm nay mình có dùng device mới hoàn toàn build thử thì thấy không có chuyện XCode 7 build mà không cần tài khoản dev của Apple nha. Bạn muốn build thì ít ra cũng phải có tài khoản dev Free của Apple thì mới build được lên device.

      Delete
  2. Anh Công cho Em hỏi, Em đã đăng ký acc Apple 99$ ở ngân hàng ACB, giờ Em muốn mua thêm acc nữa Em sài ngân hàng VCB vậy có được không ạ. Hay mỗi người chỉ được đăng ký 1 acc duy nhất .

    ReplyDelete
    Replies
    1. Được chứ, nhưng em phải dùng email khác để mua với ngân hàng VCB.

      Delete
    2. Vâng, cảm ơn Anh Công nhiều .

      Delete
  3. anh ơi cho em hỏi chút, em đăng ký tài khoản rồi nhưng em mượn tài khoản visa của người khác, nhưng em muốn hiển thị tên mình vì trên itunes nó hiển thị thông tin của chủ tài khoản visa, giờ làm sao để thay nó ạ

    ReplyDelete
    Replies
    1. Thường thì tên này nó sẽ dính đến tài khoản visa, vì thế nếu em có tài khoản visa của chính em và đổi thử xem sao. Cái này anh cũng chưa thử.

      Delete
  4. Cho em hỏi làm thế nào để test pust notification trên môi trường Adhoc/production ạ , e cảm ơn

    ReplyDelete
    Replies
    1. Em export ra file cài đặt ipa, rồi cài vào device. Còn code php để push notification thì em bỏ chữ sandbox trong đoạn text của gateway đi là được.

      Delete
  5. a cho e hỏi. hiện tại e đã có 1 tài khoản cá nhân trên itunes connection nhưng dùng mail cry (A@company.com). và bjo e muốn tạo 1 tk enterprise và vẫn dùng mail của city (B@company.com) : 2 email này chung domain. thì có thể tạo được k ạ?
    thank a.

    ReplyDelete
    Replies
    1. Tạo được, người ta verify nguyên địa chỉ email, chứ ko chỉ verify domain của mail.

      Delete

Note: Only a member of this blog may post a comment.