2011年3月24日木曜日

証明書,AppID,ProvisioningProfile, Bundle Identifier

iPhoneアプリ(iPod, iPad, Macでも、AppStore向けならば同じ)をリリースするに当たって証明書(Certificates)とAppIDとProvisioningProfileとBundleIDの関係が分かりにくように思います。
公開手順について記載された記事は多くあって、その手順通りに従っていれば基本的には公開できますが、機械的に手順を踏んでいくと上記の関係が理解できないままになってトラブルにぶつかると無駄にハマります。
私は先日ハマりまくったせいで少し理解できたので、ここで整理してみます。

証明書(Certificates)
実機デバッグ用(Development)とアプリ公開用(Distribution)がある。
アプリを何個つくろうが、それぞれ1つずつ用意すればOK。
ProvisioningProfileと紐付けすることで、正しい開発者のもとでアプリがビルドされたことを証明する。

AppID
ProvisioningProfileとアプリを紐づけるためのID。
このIDと整合する値をXCode上のBundleIdentifierに記述しないと実機インストールやアプリ公開ができない。
AppIDを「com.example.hogehoge.*」というようにワイルドカード指定しておけば、BundleIDで「com.example.hogehoge.App1」「com.example.hogehoge.App2」などと1つのAppIDで対応できるので、アプリを作るたびにAppIDを追加するといった手間が不要になる。
ただし、アプリ内購入やゲームセンター、Appleからのプッシュサービスに対応するにはワイルドカードは使用出来ない。

ProvisioningProfile
実機デバッグ用(Development)とアプリ公開用(Distribution)がある。
ビルドしたバイナリとAppIDと証明書を紐づける。
AppIDごとに必要になる(アプリごと、ではない)。
Developmentの場合は上記に加えてテストに使用するデバイス(iPhoneなど)を紐づける。
ダウンロードすると「〜.mobileprofile」(iPhoneの場合)といったファイルが落ちてくるのでダブルクリックするとXCodeに追加される。
XCodeにおいてメニューから「プロジェクト」-「プロジェクト設定の編集」と選択して、出て来たダイアログの「コード署名ID」-「Any iOS」の項目に追加したプロファイルを選択する。
ここでDevelopmentのプロファイルを指定してビルドすれば、出来たバイナリを紐付けされているデバイスにインストールして動作確認ができる。
リリース時はDistributionのプロファイルを指定してビルドする。
AppIDにワイルドカードが指定されている場合はアプリごとに用意する必要はない。

BundleID
アプリの識別子と考えていい。
基本的にはアプリごとで一意の値を指定する。
AppIDと整合させる必要がある。
AppIDを「com.example.hoge.*」としたならば「com.example.hoge」までは確実に一致させてい、ワイルドカードに指定した部分は任意の値を入れる(例「com.example.hoge.App1)。
当然、ワイルドカードを使っていない場合は完全に一致させる必要がある。
AppIDと整合しない場合は実機へのインストールやAppStoreへの公開が出来なくなる。


以上がいまの私の理解です。



2011年3月23日水曜日

iPhoneアプリのditsributionビルド

はいはい、どハマりしたので久々の更新です。

iPhoneアプリを公開するには通常のデバイスインストール用のプロビジョニングとは別にdistribution用のものが必要です。
「iPhone アプリ 公開」なんて語句でググれば親切な手順がわんさか出てきますので省略。
distribution用の証明書をキーチェインに追加し、同じくプロビジョニングを追加して、ビルドをするとリンクエラーになりました。
"code sign error"と出て、証明書が一致しないなんたらかんたら。

どう見ても正しくインストール出来てるんですが。。
色々と調べまわった結果、過去の実験やらテストで証明書にiPhone用のがうじゃうじゃあるとダメになることがあるらしい。
というわけで、以下のように対処しました。

  1. XCodeのオーガナイザのProvisioning profileにある、ディストリビューション用のprofileを全部消す(developer用のは残しておいてOK)
  2. キーチェインに登録されているディストリビューション用の証明書を全部消す
    (「システム」の中に残っていることがあるので削除しましょう)
  3. iOS Provisioning portalからDistribution用のProvisioning Profileを削除する
  4. 同じくDistribution用の証明書をRevokeする
  5. キーチェインから証明書要求をつくる
  6. iOS Provisioning portalからDistribution用の証明書を5でつくった要求を指定してつくる
  7. 同じくDistribution用のProvisioning Profileをつくる
  8. 6と7をdownloadする
  9. downloadした***.cerをダブルクリック。キーチェインのログインに***.cerをドラッグしてドロップ
  10. 同じくdownloadした***.mobileprovisionをダブルクリック(XCodeのオーガナイザに追加される)
  11. XCodeでdistribution用の構成のコード署名を10で追加したProfileを指定する
  12. クリーンしてビルド
手順2でキーチェインから消せない場合がありますが、そのときは再起動すれば消せます。



2011年3月2日水曜日

macでRedmine

macにRedmineを入れてみようと思い立つ。
事前にネットで調べると、悪戦苦闘の足跡が目立つものの、先人達の知恵を拝借すれば可能であろうと、チャレンジしてみた。

そしてハマった。
先人の知恵をもってしてもさっぱり解決できない。
さくっと諦めた。

なので純粋にRedmineだけを入れるのは諦めて、Sportlightで「Redmine」と「mysql」を検索し、私の悪戦苦闘の歴史を片っ端から削除した。
それから、BITNAMIというところで公開されているオールインワンパッケージを導入するとあっさり動きました。
なにがあかんかったのよ。

/Application の下に「redmine-1.1.1-0」といったフォルダが出来るので直下にある「ctlscript.sh」をつかって制御する。
最低限「ctlscript.sh start」とやれば動く。
詳細はreadme参照。