Mac App Storeを通さずにアプリケーションを配布する手順

Mac App Storeを通さずにアプリケーションを配布したいこともあります。その場合、Developer ID証明書を使って、Appleが開発者を認識している旨、ユーザが確認できるようにしてください。

Macユーザはセキュリティ保全のため、Gatekeeperを活用していることがあります。Mac App Storeを通して配布され、または身許が明らかな開発者によるソフトウェアしか、インストールできないようにしているのです。Appleが発行したDeveloper ID証明書を使った署名のないアプリケーションは、Gatekeeperが有効になっているMac上では起動できません。このような状況を回避するため、Developer ID証明書を使って、作成したアプリケーションや、プラグイン、インストールパッケージに署名してください。さらに、GateKeeperが有効になっているMacでの動作を、充分にテストした上で配布する必要があります。

この章では、Mac App Storeを通さずに配布する場合に、Developer IDで署名したアプリケーションをXcode上で開発およびテストする手順を説明します。

Developer IDを使って署名したアプリケーションやインストーラパッケージを作成する

Developer IDを使って署名したアプリケーションやインストーラパッケージを作成する手続きは、いくつかの手順に分かれます。まず、Mac App Storeを通さずに配布する旨をXcodeに通知した上で、Developer ID証明書を作成します。これには2種類あり、「Developer ID Application」はアプリケーション、「Developer ID Installer」はインストーラパッケージに署名するために使います。Xcode上で、「Developer ID Application」証明書を使って、アプリケーションのアーカイブをエクスポートし、署名を施します。コマンドラインユーティリティで、「Developer ID Installer」証明書を使ってインストーラパッケージに署名することも可能です。

署名IDとしてDeveloper IDを設定する

最初に、「General」ペインで、署名IDとしてDeveloper IDを設定します。

署名IDとしてDeveloper IDを設定するには

  1. プロジェクトナビゲータでターゲットを選択し、プロジェクトエディタを表示します。

  2. 「General」を押して画面を切り替え、必要ならば「Identity」に添えられた詳細表示用の三角印をクリックして、設定事項を表示します。

  3. バンドルIDが一意的であることを確認してください。

  4. 必要ならば、「Team」ポップアップメニューからチームを選択するか、「Add an Account」を実行してください。

    この場合は、チームがApple Developer Programに加入済みでなければなりません。

  5. 「Signing」以下で、署名IDとして「Developer ID」を選択します。

    ../Art/14_developerid_option_2x.png../Art/14_developerid_option_2x.png
  6. 必要に応じて、「Team」ポップアップメニューの「Fix Issue」をクリックします。

Mac App Storeを通さずに配布する場合、一部のアプリケーションサービスは使えません。Developer IDで署名されたアプリケーションで利用可能なケイパビリティの一覧が、「サポートされるケイパビリティ」に載っています。「Capabilities」ペインでいずれかを有効にすると(「技術やサービスを組み込む」を参照)、「Signing」ラジオボタンの設定は「Mac App Store」に戻ってしまいます。Apple IDをXcodeに追加し、Apple Developer Programに加入する場合は、「アカウントの管理」を参照してください。

Developer ID証明書を作成する

Mac App Storeを通さずにアプリケーションを配布する場合、名前が「Developer ID」で始まる署名証明書を使います。「Accounts」環境設定画面で、Developer ID証明書を特定して作成することも可能です(「署名IDを作成する」を参照)。「Accounts」環境設定で、署名ID「Developer ID Application」または「Developer ID Installer」に添えられた「Create」ボタンを押してください。Developer ID証明書があるのに秘密鍵がない場合も、別にDeveloper ID証明書を作成します(「追加のDeveloper ID証明書を作成する」を参照)。この証明書を使うためには、「Developer ID Certification Authority」という中間証明書も必要です(Xcodeが自動的にキーチェーンに登録)。この中間証明書がない場合は、「誤って削除した中間証明書を登録する」に従って復元してください。

Developer ID署名IDを生成したら、すぐにそのバックアップを取っておくことをお勧めします(「開発者プロファイルをエクスポートする」を参照)。

アーカイブを作成する

しかしその前に、アプリケーションを改めてビルド、実行し、確かに配布しようとする版であることを確認してください。

アーカイブを作成するには

  1. Xcodeプロジェクトエディタで、該当するプロジェクトを選択してください。

  2. 「Product」>「Archive」コマンドを実行します。

    「Archives」オーガナイザが開き、新しいアーカイブが表示されます。

    ../Art/14_archivesorganizer_2x.png

Developer IDで署名したアプリケーションを検証する

アーカイブを作成したらすぐに検証し、問題があった場合は解消しておきます。

Developer IDで署名したアーカイブを検証するには

  1. 「Archives」オーガナイザで、該当するアーカイブを選択して「Validate」ボタンをクリックします。

  2. 表示されるダイアログで、「Validate a Developer ID-signed Application」を検証方法として選択し、「Next」をクリックします。

    ../Art/14_validate_developerid_2x.png
  3. 表示されるダイアログで、ポップアップメニューからチームを選択して「Choose」をクリックします。

  4. 署名IDとエンタイトルメントを確認して「Validate」をクリックします。

  5. 問題点が見つかった場合は確認した上で、「Done」をクリックします。

Developer IDで署名したアプリケーションをエクスポートする

Mac App Storeを通さずに配布できるようにアプリケーションをエクスポートするには、「Archives」オーガナイザを使います。

Developer IDで署名したアプリケーションを作成するには

  1. 「Archives」オーガナイザで、該当するアーカイブを選択して「Export」をクリックします。

  2. 配布方法を選択できるダイアログが表示されるので、「Export a Developer ID-signed Application」を選択して「Next」をクリックします。

    ../Art/14_selectsavesignedapp_2x.png
  3. 表示されるダイアログで、ポップアップメニューからチームを選択して「Choose」をクリックします。

    個人開発者であれば、メニューには本人の名前が現れます。そうでなければ組織名です。

  4. 表示されるダイアログで、署名IDとエンタイトルメントを確認して「Export」をクリックします。

    Finder上にエクスポートしたファイルが現れます。

インストーラパッケージに署名する

Mac App Storeを通さずに、インストーラパッケージの形でアプリケーションを配布したい場合、通常と同じようにパッケージを作成します。「Developer ID Installer」証明書を使い、「productsign(1)」コマンドラインユーティリティでパッケージにコード署名を施します。「spctl(8)」コマンドラインユーティリティで、インストーラパッケージをテストできます(「MyPackageName.pkg」の部分は実際のパッケージファイル名に置き換え)。

spctl -a -v --type install MyPackageName.pkg

開発の過程でコマンドラインからコード署名を施す場合は、『Code Signing Guide』を参照してください。

ここまでの結果を確認する

実際にアプリケーションを配布する前に、Gatekeeperを有効にした環境、無効にした環境で起動したときの動作をテストしてください。Gatekeeperの有効/無効の切り替えは「システム環境設定」で行います。Gatekeeperの検証やテストにも、コマンドラインユーティリティ「spctl(8)」を使います。エンドユーザにとってどのように見えるかシミュレートするためには、アプリケーションを「隔離」し、Gatekeeperを有効にして再度テストしなければなりません。

Gatekeeperの有効/無効を切り替える

Gatekeeperの有効/無効の切り替えは、「システム環境設定」の「Security & Privacy」画面で行います。コマンドラインユーティリティ「spctl(8)」で、Gatekeeperをオフにし、状態を確認できます。

「Security & Privacy」環境設定画面でGatekeeperの有効/無効を切り替えるには

  1. Finder上で「System Preferences」を起動し、「Security & Privacy」を選択します。

  2. ロックされている場合は「鍵」ボタンを押し、管理者パスワードを入力します。

  3. Gatekeeperを有効にする場合は「Mac App Store and identified developers」を選択します。

    ../Art/14_securitypreferences_2x.png../Art/14_securitypreferences_2x.png
  4. Gatekeeperを無効にする場合は、「Mac App Store」または「Anywhere」を選択し、表示されるダイアログで、選択内容を確認します。

「spctl」コマンドでGatekeeperを無効にするには

  1. 「Terminal」上で次のコマンドを入力します。

    $ sudo spctl --master-disable
  2. Returnキーを押してください。

  3. パスワードを尋ねられるので、管理者パスワードを入力してください。

Gatekeeperが有効になったことを「spctl」コマンドで確認するには

  1. 「Terminal」上で次のコマンドを入力します。

    $ spctl --status
  2. Returnキーを押してください。

    Gatekeeperが有効であれば、コマンド出力は次のようになります。

    assessments enabled

    無効であれば次のようになります。

    assessments disabled

Gatekeeperの動作をテストする

Developer ID証明書を使ってアプリケーションに署名した後、想定どおりに署名されているかどうかテストし、Gatekeeperが有効な環境でアプリケーションを起動したときの動作をシミュレートします。Gatekeeperが有効なMac上で、「隔離」したアプリケーションを起動するためには、Developer IDで署名されていなければなりません(隔離についてはKnowledge Baseの記事を参照)。さらに、Developer IDで署名していないアプリケーションを起動したときの、Gatekeeperの動作もテストできます。

Developer IDで署名したアプリケーションをテストする

spctl(8)」コマンドラインユーティリティを使って、アプリケーションが想定どおり、Developer ID証明書を使って署名されているかどうか確認できます。

Developer IDで署名したアプリケーションをテストするには

  1. テスト用MacでGatekeeperを有効にします。「システム環境設定」の「Security & Privacy」画面で「Mac App Store and identified developers」を選択してください。

  2. 「Terminal」上で次のコマンドを実行します。ただし「TrackMix.app」の部分は実際のアプリケーションパスで置き換えてください。

    $ spctl -a -v TrackMix.app
  3. Returnキーを押してください。

    正しく署名されていれば、コマンド出力は次のようになります。

    ./TrackMix.app: accepted
    source=Developer ID

起動時の動作をテストする

Developer IDで署名したアプリケーションを包括的にテストするため、開発用ではないMac上で起動してみます。

Gatekeeperの動作をテストするための準備をするには

  1. テスト用MacのGatekeeperを有効にします(「Gatekeeperの有効/無効を切り替える」を参照)。

  2. Developer IDで署名したアプリケーションを「隔離」します。これには次の2通りの方法があります。

    • Developer IDで署名したアプリケーションを、自分自身宛ての電子メールで送信し、受け取って使う。

    • Developer IDで署名したアプリケーションをローカル/遠隔サーバに置き、Safariを使ってダウンロードする。

これでGatekeeperの動作をテストする準備が整いました。

Developer IDで署名したアプリケーションを起動したときの、Gatekeeperの動作をテストするには

  1. Finder上で、Developer IDで署名した「隔離」済みのアプリケーションのアイコンをダブルクリックしてください。

    Mac上に、このアプリケーションを起動してよいか尋ねる警告が現れます。

    ../Art/14_identified_developer_2x.png

    これは、Gatekeeperが有効な環境で、「隔離」したアプリケーションを起動できることを表すので、Developer IDアプリケーションを適切にビルドできたことになります。

Developer IDで署名していないアプリケーションを起動したときの、Gatekeeperの動作をテストするには

  1. テスト用MacのGatekeeperを有効にします(「Gatekeeperの有効/無効を切り替える」を参照)。

  2. Developer IDで署名していない、「隔離」済みのアプリケーションを用意してください。

    先に説明したのと同様、「隔離」する方法は2通りあります。

    • Developer IDで署名したアプリケーションを、自分自身宛ての電子メールで送信し、受け取って使う。

    • Developer IDで署名したアプリケーションをローカル/遠隔サーバに置き、Safariを使ってダウンロードする。

  3. Finder上で、Developer IDで署名していない「隔離」済みのアプリケーションのアイコンをダブルクリックしてください。

    Mac上にはアプリケーションの起動を遮断した旨の警告が現れます。このように、開発者の身許が分からないアプリケーションを起動しようとすると、Gatekeeperが遮断し、Macを保護するのです。なお、一度起動すれば「隔離」されていない状態になるので、Gatekeeperが起動を遮断することはありません。

まとめ

この章では、Mac App Storeを通さずにMacアプリケーションを配布し、起動を遮断されないようにする手順を説明しました。