リリース済みアプリの iOS Distribution Certificate Expires in 30 Days 対応

## 概要

- リリース済みの iOS アプリで使用している証明書の期限が切れそうなので更新する
- 別の Mac でも同じ iOS アプリを開発するための証明書登録を行う

## 発端

Apple Developer から「Action Needed: iOS Distribution Certificate Expires in 30 Days」というタイトルのメールが届く。

> Your iOS Distribution Certificate will no longer be valid in 30 days. To generate a new certificate, sign in and visit Certificates, Identifiers & Profiles.

iOS Distribution Certificate の期限があと30日で切れるので更新する必要があるとのこと。

## 証明書 iOS Distribution Certificate を更新する

### 対応の流れ

1. macOS で CertificateSigningRequest.certSigningRequest を生成する
2. Apple Developer で Certificate を生成する
3. macOS で Certificate をキーチェーンに登録する
4. Apple Developer で Provisioning Profile に Certificate を設定する

### macOS で CertificateSigningRequest.certSigningRequest を生成する

macOS で キーチェーンアクセス (Keychain Access.app) を起動する。

<img width="470" alt="ios-distribution-certificate-01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/5d8c417d-bbd0-bfb4-5a96-5ebc8266892a.png">

メニューから [キーチェーンアクセス] → [証明書アシスタント] → [認証局に証明書を要求] を選択。

<img width="538" alt="ios-distribution-certificate-02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/0b269931-96ae-f3bd-25c0-25c32074baf4.png">

証明書情報を入力する。

- ユーザのメールアドレス: Apple Developer に登録した Apple ID のメールアドレス
- 通称: キーチェーンアクセス等に表示される通称 (何でも良い)
- CAのメールアドレス: (空のままで)
- 要求の処理: ディスクに保存
- 鍵ペア情報を指定: チェックを入れる

<img width="616" alt="ios-distribution-certificate-03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/04ecc252-b9f2-9d55-eb81-6b7e19ceb425.png">

「続ける」をクリックすると、ダイアログが表示されるので、ファイルの保存場所を指定する。

鍵ペア情報を入力する。

- 鍵のサイズ: 2048ビット
- アルゴリズム: RSA

<img width="616" alt="ios-distribution-certificate-04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/b4045c58-236a-c372-518e-7303fdecdfcd.png">

先ほど指定したファイルの保存場所に Certificate Signing Request (CSR) のファイル CertificateSigningRequest.certSigningRequest が保存される。

### Apple Developer で Certificate を生成する

Apple Developer にログインして [Certificates](https://developer.apple.com/account/resources/certificates/list) のページへ移動する。

Certificates の右側にある「+」ボタンをクリックする。

<img width="1010" alt="ios-distribution-certificate-05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/b2c049b3-1982-bf8a-c22c-457cfb95b0c7.png">

iOS Distribution (App Store and Ad Hoc) を選択し、「Continue」をクリックする。

<img width="955" alt="ios-distribution-certificate-06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/9c2ad02e-9b09-0b85-2b88-3d62ee16f602.png">

「Choose File」をクリックして、先ほど生成した CertificateSigningRequest.certSigningRequest ファイルを選択し、「Continue」をクリックする。

<img width="700" alt="ios-distribution-certificate-07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/a0817e25-beb2-b47d-065c-3d544efafb6c.png">

「Download」ボタンを押して証明書ファイル ios_distribution.cer をダウンロードする。

<img width="626" alt="ios-distribution-certificate-08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/1e2fa210-5370-3900-58f7-f4cd65d58b6b.png">

このページにはうっすらした色で英文の説明が載っている(上の画像には載っていない)。

> Download your certificate to your Mac, then double click the .cer file to install in Keychain Access. Make sure to save a backup copy of your private and public keys somewhere secure.

### macOS で Certificate をキーチェーンに登録する

macOS で キーチェーンアクセス (Keychain Access.app) を起動する。

キーチェーンアクセスのメニューから [ファイル] → [読み込む] でダウンロードした証明書ファイル ios_distribution.cer を読み込む。

<img width="462" alt="ios-distribution-certificate-09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/8da550bd-cd77-366c-6e1e-ae332ae8886f.png">

あるいは証明書ファイル ios_distribution.cer をダブルクリックする。

<img width="535" alt="ios-distribution-certificate-10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/a1f933d4-52fa-7d64-38cc-b19ab374c9ac.png">

これでキーチェーンに証明書を追加できる。

### Apple Developer で Provisioning Profile に Certificate を設定する

Apple Developer にログインして [Profiles](https://developer.apple.com/account/resources/profiles/list) のページへ移動する。

該当する Provisioning Profile をクリックする。

<img width="779" alt="ios-distribution-certificate-11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/df6cd0b6-1488-1adc-4f34-31f1f5ad30a1.png">

「Edit」をクリックする。

<img width="779" alt="ios-distribution-certificate-12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/4128cd63-fb19-3156-605a-e8a4ab6833e5.png">

Certificates から先ほど生成した Certificate を選択して、「Save」をクリックする。

<img width="775" alt="ios-distribution-certificate-13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/524c1d87-0857-5673-7c70-a9bbd9003166.png">

「Download」をクリックして Provisioning Profile をダウンロードする。

<img width="730" alt="ios-distribution-certificate-14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/103c4d5d-57fd-396b-e9d8-ecc136ecde59.png">

## 別の Mac に証明書 iOS Distribution Certificate を登録する

### 対応の流れ

1. Certificate 登録済みの Mac で個人情報交換ファイル p12 を書き出す
2. 別の Mac で Certificate をキーチェーンに登録する

### Certificate 登録済みの Mac で個人情報交換ファイル p12 を書き出す

Certificate 登録済みの Mac で キーチェーンアクセス (Keychain Access.app) を起動する。

ウィンドウ左上の「キーチェーン」にて「ログイン」を選択。ウィンドウ左下の「分類」にて「自分の証明書」を選択。これを選択しておかないと、ファイルを書き出す際に個人情報交換ファイル p12 ファイルがグレーアウトして選択できないことがある。

<img width="821" alt="p12-1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/46c9f178-2673-891c-9106-49e4a0d2415f.png">

キーチェーンアクセスに登録した Certificate を右クリックして、iPhone Distribution を書き出す。

<img width="870" alt="p12-2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/eef38a43-b146-b018-18ec-14e0484aa66b.png">

ファイル名を指定して p12 ファイルを保存する。
その際、この p12 ファイルを使うためのパスワードを設定する。

<img width="828" alt="p12-3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/bf87cd5c-5c43-24ab-15d9-b52731fb7259.png">

### 別の Mac で Certificate をキーチェーンに登録する

別の Mac の Xcode のメニューから [Xcode] → [Preferences] → [Accounts] → [Manage Certificates] を選択すると、該当の iOS Disutribution Certificate に 「Not in Keychain」 や 「Missing Private Key」 と表示されている状況を解決する。

<img width="800" alt="p12-4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/eaa26cc8-96e0-c517-36ae-0e3aaf97703d.png">

p12 ファイルをダブルクリックして、設定したパスワードを入力する。

<img width="444" alt="p12-5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/71ab6888-83cc-562d-0ef9-8947f83d1242.png">

キーチェーンアクセスで確認すると、秘密鍵が登録されているのを確認できる。これでこの Mac でも該当の iOS アプリを開発できる。

<img width="872" alt="p12-6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/c5021d35-2910-7c2c-5dc5-84e18ebeb0d9.png">

## 参考資料
- [Certificates \- Support \- Apple Developer](https://developer.apple.com/support/certificates/)
- [iOSアプリ開発で実機による開発を複数台（メイン機ではない2台目以降）のMacで行いたい場合 \| makotton\.com](https://makotton.com/2014/10/24/625)