iOSアプリの Distribution 証明書及び VoIP Services 証明書の更新手順 【忘備録】
株式会社 IVRy (アイブリー) 社員番号 7番 エンジニアのボルドーです。
IVRy ではお客様向けに Android / iOS に対応したモバイルアプリを提供しており、この度弊社 iOS 向けアプリの証明書更新 と VoIP 通知用にTwilio コンソール上で証明書の更新を行ったので忘備録として書き留めたいと思います。
前提
想定読者
全てを説明しようとすると忘備録としては冗長になってしまうため、手順と大事なポイントに絞って記載する都合上、iOS 向けアプリ開発経験のある方を想定読者として執筆しています。
iOS 向けアプリにおける証明書とは
Apple の 証明書の概要 には以下のように記載されています。
Apple - 証明書の概要 (2022.9.21時点)
iOS 向けのアプリは AppStore を通して配布されるため、Apple の規定に遵守する必要があります。そして AppStore へアプリを公開するためには Apple の定める手順で各種証明書を作成して公開用の成果物に署名する必要があります。
Apple Developer Program のメンバーシップは 1年単位での更新となるため、各種証明書の期限も 1年単位になっているものと思われます。
証明書の一覧についても Apple のリファレンスにまとめられています。
アプリに必要な証明書は (1) Apple Development / Distribution もしくは (2) iOS Development / Distribution です。Xcode 11 以降では (1) , それ以前も対応する場合は (2) という使い分けとなります。
Development が開発用、Distribution が配布用(つまり AppStore 公開用)です。そして、アプリ毎に Provisioning Profile (以降 PP と記載)が開発用と配布用にそれぞれ(と決済や通知等を利用する場合 各種 Services 証明書)が別途必要になります。
今回更新する証明書
弊社アプリでは VoIP (Voice over Internet Protocol) を用いて 転送されてきた電話の着信通知を実現しています。そのため、VoIP Services 証明書の更新も必要となるため、以下の更新作業を行います。
- iOS Development / Distribution 証明書
- VoIP Services 証明書
- Provisioning Profile
加えて、弊社アプリでは Twilio を経由しての着信を行っているため、Twilio Console 上での更新作業も必要となります。
更新手順
それでは更新手順を見ていきます。
1. Apple Developer サイト上で証明書を作成する
1-1. Apple Developer サイトにて Certificates, Identifiers & Profiles をクリックする
Apple Developer アカウントトップ画面 (2022.9.21時点)
遷移後、Certificates が選択されているはずなのでこのような画面になります。
Certificates, Identifiers & Profiles 画面(各種証明書作成後の画面)
1-2. Certificates 横の + をクリックして各種証明書を作成する
以下のように選択肢が並んでいるので、開発用証明書と配布用証明書、VoIP Services 証明書をそれぞれ作成します。
Certificates 作成画面 (2022.9.21時点)
VoIP Services 証明書を作成する場合は対象となるアプリの App ID を指定する必要があります。弊社アプリでは複数の App ID を用いているためキャプチャ画像では複数作成していますが、本来は 1つで十分です。
作成時には CSR が必要になるので、適切な CSR をアップロードします。
CSR のアップロード画面(2022.9.21時点)
1-3. Provisioning Profile を作成する
Apple Developer サイト上の Profiles タブに切り替えて、対象 App ID 向けの PP を開発用と配布用それぞれ作成します。
1-4. 作成した証明書及び PP をそれぞれダウンロードして PC に登録する
Apple Developer 画面から作成した各種証明書をダウンロード後、ダブルクリックして PC に登録します。
* PP の登録時に以下のようなエラーになってしまう場合は古い PP を消してみるとうまくいくかもしれません。
PP 登録時のエラー画面
// 以下のディレクトリに入っているので、全削除 or 該当 PP を削除
ls ~/Library/MobileDevice/Provisioning\ Profiles/
2. Xcode 上で 作成した証明書に付け替える
古い証明書から今回作成した証明書にリプレイスします。この時、Xcode 上で Automatically manage signing を利用している場合には PC 上から古い証明書を削除しておくと間違いが起こりづらいのでお勧めです。
手動であれば環境毎に適切な証明書を設定しましょう[1]。
証明書の不一致がある場合にはエラー内容が表示されるのでエラーに応じて適切に解消します。
PP 等の指定がない時のエラー表示例
不一致がある場合のエラー表示例(Bundle Identifier の末尾に a を追加した場合)
3. Twilio コンソールに新しい VoIP Services 証明書を登録する
以下を参考に更新作業を行いました。
3-1. pem 情報を生成する
Twilio のドキュメント通りに生成します。
- キーチェーンアプリを開く
- 左のメニューを「ログイン」にして「自分の証明書」タブをクリック
- 「voip」で検索して今回作成した VoIP Services 証明書を見つける
- 右クリックして書き出すをクリック、cred.p12 として保存する
- このとき 2 の手順を飛ばしてしまうと書き出す選択肢が出てこない、もしくは p12 として書き出す選択肢が出てこないので注意してください
- ターミナルにて以下の通りにコマンドを実行する[2]
// 4 で保存した cred.p12 がカレントディレクトリにあると仮定しています
openssl pkcs12 -in cred.p12 -nokeys -out cert.pem -nodes
openssl pkcs12 -in cred.p12 -nocerts -out key.pem -nodes
openssl rsa -in key.pem -out key.pem
Twilio Console に 生成した cert.pem と key.pem を登録する
3-2.基本的には既存項目へ上書きすれば良いと思います[3]。
新規に登録する場合は
- TYPE には APN Push Credential を選択
- Development 環境では Sandbox にチェックをつけます
3-3. (3-2 で新規登録した場合)Credential SID を更新する
Twilio のアクセストークンを生成する際に 3-2 の Twilio Console 上に表示されている SID を指定するのですが、3-2 で新規登録した場合にはこの SID がもう一つ生成されることになります。そのため、アクセストークン生成時に新しい SID を指定するように変更します。
4. 通知の挙動が想定通りか確認する
新旧アプリそれぞれで通知が来ることを確認します。
なお、VoIP 通知の確認は実機で行う必要があります[4]。
最低限確認しておきたい観点はこんなところでしょうか。
- 既存バージョンの通知挙動に問題がないこと
- 新規バージョンの新規インストール時
- 起動前に通知が来ないこと
- 起動後(register 処理後)に通知が来ること
- 通知設定の解除後に通知が来ないこと
- 新規バージョンへのアップデート時
- 通知設定が登録済みだった場合
- アップデート後、起動前に通知が来ること
- アップデート後、起動後(再度 register 処理後)に通知が来ること
- 通知設定が解除されていた場合
- アップデート後、起動前に通知が来ないこと
- アップデート後、起動して register 処理後に通知が来ること
- 通知設定が登録済みだった場合
更新作業は以上となります。
年に一度の作業で忘れがちな割に Apple の GUI は頻繁に変わってしまうので大変な作業ですがお互い頑張りましょう。
We are hiring!!
IVRy では一緒に働く仲間を絶賛募集中です。
今の所 順調に成長してきていますが、今後の更なる成長のためには圧倒的に仲間が不足しています。皆さまのご応募お待ちしております!
カジュアルに話を聞きたいという方は私の Meety から面談を申し込んでいただければ色々お話します。
代表の奥西とも話せます!
-
もし意図した通りの選択肢が出てこない場合は Xcode を再起動してみるとうまくいくかもしれません。
( iOS / Mac アプリ開発者の暗黙知かと思いますが、経験の浅い人は結構ハマります) ↩︎ -
5 の手順は誰がいつ行っても同じものが生成されます。そのため、次の手順で行う Twilio Console 上での作業時は以前登録した pem 情報が閲覧できない仕様なのですが、同じ証明書から作成した場合は同じ成果物が生成されることを知っていれば万一の際にも再登録すれば良いと割り切れます。 ↩︎
-
* Twilio Console 上での更新作業の前後で通知の挙動を確認したところ、Twilio Console 上で登録作業をする前は新しい証明書で署名したアプリでは通知が来ず、登録作業後は通知が来るようになりました。 ↩︎
-
通知が来ない場合、端末がおやすみモードや集中モード等、着信を受け付けない設定になっていることがあるので、証明書や SID が正しいかどうかを疑う前に普通に電話をかけて着信通知が来るかを確認すると良さそうです。 ↩︎
Discussion