個人事業主がmacOSアプリを直接配布するまでの道のり①:Developer ID証明書の取得とバックアップ

これまで iOS と Android のアプリは App Store / Google Play 経由で配布してきましたが、今回開発している「電子帳簿リネーマー」(macOS用デスクトップアプリ)は、App Store を経由せず、自分のサイトから直接 DMG ファイルを配布する形を選びました。

App Store Connect でmacOS版として申請する選択肢もあったのですが、対象が個人事業主向けで、ターゲット層が「Mac App Store を日常的に使っている層」と少しズレるため、LP から直接ダウンロードしてもらうほうが自然と判断しました。

ただし、これには iOS / Android アプリのリリースとはまったく違う一連の手続きが必要でした。本記事はその第1回として、Developer ID 証明書の取得とバックアップをまとめます。

目次

なぜ「Developer ID Application」証明書が必要なのか

macOS は、インターネットからダウンロードしたアプリに対して Gatekeeper というセキュリティ機構が働きます。これは「このアプリは本当に開発者本人が作ったもの?マルウェアじゃない?」をチェックする仕組みです。

ここで合格しないと、ユーザーがアプリを起動したときに、

「”電子帳簿リネーマー” は壊れているため開けません。ゴミ箱に入れる必要があります。」

という恐ろしい警告が出てしまいます。¥2,980 払って買ってくれたのにインストールできない、というのは最悪のユーザー体験です。

これを防ぐためには:

  1. Developer ID Application 証明書でアプリに署名する
  2. Apple に「公証申請」をして承認をもらう
  3. 公証チケットをアプリに staple(ホチキス止め)する

という3ステップが必要になります。今回はこの「ステップ1」の証明書発行までを扱います。

iOSアプリでこれまで使っていた証明書との違い

ターミナルで自分の証明書を確認してみたところ、こうなっていました:

$ security find-identity -v -p codesigning
  1) ... "Apple Development: XXXXXX (5CRXXXXX)"
  2) ... "Apple Distribution: SINQWELL (WYLLXXXXXX)"
     2 valid identities found

iOS アプリのリリースで使っていたのは「Apple Distribution」証明書。これは App Store 経由の配布専用です。今回必要な「Developer ID Application」は、これとは別物。同じ Apple Developer Program 契約の中で、用途別に発行する必要があります。

整理するとこうなります:

配布方法必要な証明書
iOS / iPadOS(App Store)Apple Distribution
macOS(Mac App Store)Apple Distribution / Mac App Distribution
macOS(直接配布、今回)Developer ID Application

CSR(証明書署名要求)の作成

Developer ID Application 証明書を発行してもらうには、まず「CSR(Certificate Signing Request)」というファイルを自分の Mac で作る必要があります。CSR は要するに「私はこの公開鍵を持っています、これに紐づく証明書を発行してください」という申請書のようなものです。

手順:

  1. キーチェーンアクセスを起動
  2. メニューバー「キーチェーンアクセス」→「証明書アシスタント」→「認証局に証明書を要求…」
  3. 表示されるダイアログに入力:
  • ユーザのメールアドレス:Apple Developer Program 登録メールアドレス
  • 通称:SINQWELL
  • CA のメールアドレス:空欄
  • 要求の処理:「ディスクに保存」 を選択
  • 鍵ペア情報を指定:チェックを入れる
  1. 保存先:デスクトップに SINQWELL_DeveloperID.certSigningRequest という名前で保存
  2. 鍵のサイズ:2048ビット、アルゴリズム:RSA(デフォルトのまま)

ここで重要なのは、この瞬間にキーチェーンの「ログイン」キーチェーン内に秘密鍵が生成されていること。CSR ファイル自体は公開鍵側の情報を含む申請書で、秘密鍵は手元に残ります。

Apple Developer サイトで証明書を発行

https://developer.apple.com/account/resources/certificates/add にアクセスし、以下を選択:

  1. チームを SINQWELL に切り替える(個人名のチームと混同しないよう注意)
  2. 「Software」セクションから 「Developer ID Application」 を選択(「Developer ID Installer」と紛らわしいので注意)
  3. 「Continue」をクリック
  4. 「Profile Type」で「G2 Sub-CA (Xcode 11.4.1 or later)」を選択
  • もう一方の「Previous Sub-CA」は 2027年2月1日に強制失効するため、新規発行する意味がない
  1. CSR ファイルをアップロード
  2. 発行された .cer ファイルをダウンロード

ダウンロードした .cer ファイルをダブルクリックすると、キーチェーンアクセスの「ログイン」キーチェーンに登録できます。

⚠️ ここで注意したいのが、ダブルクリックすると初期状態で「iCloud」キーチェーンが選択されているケースがあること。必ず「ログイン」キーチェーンに変更してから追加してください。CSR 作成時に生成された秘密鍵が「ログイン」キーチェーンにあるため、そこに証明書も置かないとペアリングが正しく認識されません。

ターミナルで再度確認すると、3つ目に証明書が追加されているはずです:

$ security find-identity -v -p codesigning
  1) ... "Apple Development: XXXXXX (5CRXXXXX)"
  2) ... "Apple Distribution: SINQWELL (WYLLXXXXXX)"
  3) ... "Developer ID Application: SINQWELL (WYLLXXXXXX)"
     3 valid identities found

これで証明書の取得は完了です。有効期限は5年(2031/06/12まで)でした。

ここが最重要:証明書のバックアップ

実はここからが本当に重要なポイントです。

Developer ID 証明書の秘密鍵を紛失すると、二度と同じ証明書を復元できません。Apple は秘密鍵を保管していないからです。

紛失するシナリオは色々あります:

  • Mac が物理的に故障した
  • macOS をクリーンインストールした
  • 新しい Mac に移行アシスタントを使わずに移行した

こうなったとき、バックアップがないと「新しい証明書を作り直す」しかなくなります。それ自体は可能ですが、過去に署名したアプリの更新で問題が起きる可能性があるので避けたい事態です。

バックアップの手順

  1. キーチェーンアクセスを起動 →「ログイン」キーチェーン →「自分の証明書」
  2. 「Developer ID Application: SINQWELL (WYLLMXXXXX)」を展開
  • 左の > マークをクリックすると、紐づいた秘密鍵が下に表示される
  1. 証明書と秘密鍵の両方を ⌘キーを押しながらクリックして同時選択
  2. 右クリック →「2項目を書き出す…」
  3. 保存ダイアログで:
  • ファイル名:SINQWELL_DeveloperID_backup_2026-06-11.p12(日付入れておくと管理しやすい)
  • フォーマット:「個人情報交換(.p12)」 ← これが超重要
  1. 暗号化パスワードを設定
  • これは忘れたら復元不可能。1Password などのパスワードマネージャーに必ず保存

ここで設定するパスワードには特別な性質があります:

性質説明
暗号化に直接使われるこのパスワードが暗号化キーそのもの
忘れたら復元不可能Apple にも復号できない
後から変更不可能新しくバックアップを取り直すしかない
リセット機能なし「忘れた」リンクのような救済策はない

保管場所の冗長化

.p12 ファイル自体はパスワードで暗号化されているので、クラウドストレージに置いても安全です。私の場合、

  • Mac本体(Documents 配下)
  • Dropbox(クラウド)

の2箇所に保管しました。さらに .p12 を解錠するパスワードは 1Password で別管理。これで、

  • Macが壊れても Dropbox から取り出せる
  • Dropboxが障害でも Mac に残っている
  • .p12 が流出しても、パスワードがなければ復号できない

という冗長性が担保できました。

次回予告

ここまでで「証明書を取得・バックアップする」までが完了しました。次回は実際にこの証明書を使って、Flutter で作った macOS アプリに:

  • コード署名する
  • Apple に公証申請する
  • 公証チケットを staple する
  • DMG ファイルを作って配布できる状態にする

までの流れを書きます。アプリ側の Entitlements の設定や、Hardened Runtime の話、xcrun notarytool の使い方など、実際にやってみて初めて分かったポイントを共有します。

→ 個人事業主がmacOSアプリを直接配布するまでの道のり②:署名・公証・DMG化を実機で完遂(書いたらリンクします)


関連リンク:

目次