iOS Distribution証明書を更新して!と言われた時のやつ。 手動で対応してたら混乱した。

目次

突然のメール

ある日メールが来た。 Alt text iosアプリをApple Storeからリリースしているのだが、それ関連のやつだろう。 証明書の手続き年一回くらいやるがいつも忘れるので書き残す。

XcodeでProvisioning Profileを確認するとあと少しできれるよと言っている。↓ Alt text

証明書とは

そもそも証明書ってなんだっけ?

Apple Developer Programのメンバーであることを証明するための証明書(身分証明書)とのこと。

公式の説明を平易化する。 (証明書の概要

・いろんな証明書があるよ。 (証明書タイプ) ・iOS,tvOS,watchOS のアプリには同じ証明書のセットが使えるよ。macOS Appには別のセットを作る必要があるよ。 ・Xcode11以降を使う場合は全てのプラットフォームで同じ配布用証明書を作れるよ。 ・開発用には、開発用証明書を使うよ。 ・Appテスト用に配信したりAppStoreConnectにアップロードするためには配布用証明書を使用するよ。 ・開発用証明書は個人が所有するよ。開発証明書はios用に2つ、Mac用に2つ作れるよ。 ・配布用証明書はチームが所有するよ。作成できるのは1つのチームにつき1種類の配布証明書だけだよ。

iOS Distributionの証明書が切れると連絡がきたが、XCode11以降使っているのでApple Distributionの証明書を新しく作れば良いのかな。。?

Provisioning Profileとは

上の証明書や、アプリのID、開発に使用するデバイス、アプリの用途などを含んでおり、 アプリが正しいですよっていうことを証明するためのプロファイルぽい。

アプリリリースに必要な証明書の手順ざっくり(旧来の方法)

以下の方法は昔の方法で、今はXcodeでほとんど自動化できる。 ただ、仕組みは今でも同じなので作業の流れを理解しておくのは必要だと思われる。 Alt text

Certificates, Identifiers & Profilesを確認する。

Apple DeveloperにログインしてCertificatesを確認する https://developer.apple.com/account/resources/certificates/list Alt text

チーム、開発者用の証明書がそれぞれ全部Expiration dateが迫ってきている。(現在2023/03/07) Distribution Managedの証明書とはなんだっけ?ていうことで調べても情報が出てこない。 こちら(証明書タイプ)にも書いてない。

フォーラムやstackoverflowでもあまり情報がないが、、

該当証明書(distribution managed)をクリックして先のページに進むとManually Rotate Certificateというアクションがあるのでそれで更新できるぽいのだが、

It seems to this cert is generated by XCode when you set Code Signing: Automatic.

どうやらXcodeでCode Signingすると自動的に更新される気配。 なので、手動でやってもよい?がひとまずiOS Distributionの証明書を更新してProvisioning Fileも更新してみたらXcodeで自動更新かかるのでは?と思うので後回しにしておく。

現在はiOS Distributionを発行しているが、Xcode11以降ではApple Distributionで全部良いとのこと。 なので、 Apple DevelopmentとApple Distributionを作成する

Certificatesが増える?

Certificateをkeychain Access Appでリクエストを作りapple developerページでcertificateを作成して、その証明書に紐づけてProvisioning Profileを作成し。。。ということをしたのだが、Xcode上でAutomatically manage sining -> Manage Certificateをしたタイミング?で自動でCertificateが新規作成されたぽい挙動をして証明書が管理がわけわからなくなってしまった。

どうやらautomatically manage signingをすればマニュアルで証明書などを作る必要はないらしい。 -> Xcode14時代の証明書管理のベストプラクティス

とのことで色々書いてきたが、個人開発ではXcodeに全部任せる方式が楽そうである。CI/CDで管理したり複数人開発などの場合はfastlaneを利用すると良さそう。 fastlaneでやりたいが学習コストちょっとかかりそうなので今度やる。

実際の更新作業

とりあえずXcodeに任せる方式で一度やろうかと思ったが、半自動でマニュアルになった。

1.まずApple developerのCertificatesのページで、余計なCertificatesを一旦削除する。キーチェーンでも登録してしまっていたら削除する。(自分で今回登録したもの。登録してない場合は必要ない作業) 2.Xcodeで、Preferences > Accounts > Manage Certificates > +ボタン押してdeveloperとdistributionを押す。-> 新しいCertificateが自動的に作られる。 Alt text 3.Apple DeveloperのProfilesページにいってEditボタンを押す。先ほどの2の操作で作られたCertificateを使いたいProvisioning Profileに紐づける。 4.Xcodeに戻り、Preferences > Accounts > Download Manual Profilesを押して編集したProvisioning Profileをダウンロード 5.Xcode > Product > Clean Build Folder を押す。 6.Xcode > Runner > Targets > Sining & Capabilities > Singning でAutomatically manage signingを外して、該当のProvisioning Profileを紐づける。


私の場合は、flutter buildコマンドの中で色々エラーが出てしまったので、Flutterのbuildコマンドオプションで ExportOptions.plistを指定し、その中で明示的にProvisioning Profileも指定してエラーを解決した。 原因はよく分かってないのだが、そのような理由がない限りはXcodeのAutomatically Mnage Singingに全部任せてしまうのが良い気がする。

References