generator-graybullet-cordova で事後署名 (iOS)
前回は generator-graybullet-cordova で Android アプリでの事後署名を紹介しました。この昨日は iOS でも利用できます。本日は iOS での事後署名を紹介します。
自己署名の方法そのものは Android の時とかわりはありません。ですが、署名用の秘密鍵の生成方法が違います。iOS の場合は Android のように手軽に作れませんので、iOS Developer Program や iOS Developer Enterprise Program のヘルプを参照してください。
ここでは配布証明書のペアとなる秘密鍵が Mac のキーストアに保存されているものとします。
iOS アプリの場合、署名の他にプロビジョニングプロファイルを埋め込む必要があります。まずは配布用のプロビジョニングプロファイルを Member Center からダウンロードしておいてください。
そしてプロジェクトを作成します。
$ mkdir project1 $ cd project1 $ yo graybullet-cordova ... ? What is the name of Apache Cordova App? HelloCordova ? What is the ID of Apache Cordova App? io.cordova.hellocordova ? What app of the platform to be created? ios ? Are you sure you want to add any plugins? Cordova Console Plugin, Cordova Device Plugin ... Out of the box I include HTML5 Boilerplate, jQuery, and a Gruntfile.js to build your app. ? What more would you like? Bootstrap ...
iOS の場合、署名なしでは実機にインストールできるアプリを作れませんので、開発者証明書で一時的に署名を行うように、build-release.xcconfig ファイルを書き換えます。以下のように cordova/platforms/ios/cordova/build-release.xcconfig ファイルの署名の設定をコメント化すれば OK です。
... // // XCode Build settings for "Release" Build Configuration. // #include "build.xcconfig" //CODE_SIGN_IDENTITY = iPhone Distribution //CODE_SIGN_IDENTITY[sdk=iphoneos*] = iPhone Distribution
そして、先ほどダウンロードしたプロビジョニングプロファイルを (ここでは distribution.provisioningprofile とします) をプロジェクトにコピーします。
$ mkdir -p resources/ios/mobileprovisions $ cp ~/Downloads/distribution.provisioningprofile ./resources/ios/mobileprovisions/release.mobileprovision. ここからは Android と同じ手準になります。 リリースビルドを行い配布用の ipa ファイルを生成します。 <code> $ grunt --cordova-build=release --cordova-device=device ... Running "cordova:package-files" (cordova) task Copy to dist/ios/device/HelloCordova.ipa
distribute スクリプトを用いて事後署名を行います。
./dist/ios/distribute ... Results at '/path/to/project/dist/ios/HelloCordova.ipa'
署名済みの HelloCordova.ipa ファイルが作られました。署名に使う秘密鍵などの設定は Android の時と同様に reources/ios/config ファイルでできます。
また、iOS のみの機能として、resources/ios/mobileprovisions/adhoc.mobileprovision というファイルを作成しておくと ./dist/ios/distribute --mobileprovision=adhoc で別のプロビジョニングプロファイルを利用して署名することができます。TestFilght 用のアプリを作る場合などに役立ててください。
ここではビルドと配布用の署名を同じ Mac で行いましたので、ほとんど意味はありません。ですが、CI では開発者証明書で署名しておいて、後から署名専用 Mac で署名することができます。
また、Android と iOS の両方で同じ手段で事後署名ができるため、署名を行うためのコマンドを覚える必要がありません。
ところで、Xcode 6.1 には xcrun -sdk iphoneos PackageApplication では署名できないバグがあります。distribute スクリプトはそのバグ対策を含んでいますので、Xcode 6.1 でもきちんと署名ができます。
なお、この機能は grunt-cordova-ng プラグインで提供されていますので、そちらの README を参照してください。
コメントを追加