iOSの開発をしているとプログラム以外の割と煩わしいものにProvisioning(プロビジョニング)とCodeSigning(コードサイニング)なるものがあります。この2つは以下のことをコンパイルされたプログラムに情報提示するものです。

  • 自分がAppleより認定された正規のiOSディベロッパである
  • プロダクトの署名が有効期限内に限って正しいものである (開発時のみ)
  • コンパイルされたコードは改ざんされてはいないコードである
  • デプロイ(インストール)先のデバイスが開発者から正式に認定されたデバイスである (開発時のみ)
  • InAppPurchase, Push Notification, Game Centerに関して有効 or 無効である情報をアプリケーションに与える

多分、思いつく限りでこんな感じ~のはず・・・・なんですが、適当です。なので、InAppPurchaseを使うにもInAppPurchaseが有効とされたAppIDに対して、その際に設定した適切なBundleIDをplistに設定して、更に適切なProvisiningを発行して、更の更にiTunesConnectでInAppPurchase用のアイテムを登録してようやく課金が行える・・・・なんて手間が必要なわけで。

とりあえず、InAppPurchase云々はさておき、未だ現役である可能性が非常に大きいXcode3系の、プロビジョニング/コードサイニングでハマる部分を以下に示します。適切なプロビジョニングを設定しているのにCodeSigningでWarningが出た場合は以下を確認してみてください(一部先日コメントしたInAppPurchaseにも関連します、多分)。

1. InAppPurchase、GameCenterが有効であることを確認する

Provisioning1

iOS Provisioning Portal(iOS Dev Center内)のAppIDタブで一意なBundleID(ワイルドカードを含まないBundleID)ではない場合は図のようにInAppPurchase, GameCenterの部分にEnableが付きません。まずはここで適切なAppIDが登録されていることを確認しましょう。その上で、Provisioningタブからプロビジョニングを発行 or 再生成し、ダウンロードしてみましょう。

2. 適切なプロビジョニングを設定する

Xcode3系のバグなのか、プロジェクトツリーの[Project]→(右クリック)→[Get Info]からプロジェクトの設定を行っても適切に設定情報が反映されない場合があります。その場合は以下の手順で設定を行ってみましょう。

Provisioning2

[Get Info]からではなくて、[Project]メニューの[Edit Active Target]から設定画面を出すのがコツです。私がコレにはまったときは2時間ほど困って1時間ほどググった挙句にようやく海外のとあるBlogerのホームページで対処を見つけました(が、原文はいずこかに消えました)。

Provisioning3

書くまでもないですがこれは通常通りの操作、CodeSigningの際に使用するProvisiningを設定するだけです。

3. Xcode上でおまじないをする

今からほぼ2年前に私にiOSの開発を教えてくれたドイツ人のMさんが、非常に悩ましい顔をしながら「おまじないをするとコンパイルが通る場合があります」という事を言いました。もちろん、コンピュータ上で動くプログラムにそんな曖昧な要素などあるわけがないのですが、意外やこれが良く効くおまじないで。

  1. [Build]メニューから[Clean All Target]を選択する
  2. [Xcode]メニューから[Empty Caches]を選択する
  3. Xcodeを終了する (ランチャーにランプが付いている場合は右クリックで[Quit]選択)
  4. Finderからプロジェクト直下のBuildフォルダを削除する
  5. Xcodeを起動してコンパイル開始

CodeSigningに使用するProvisioning(2.の操作)を変更してもどこかにキャッシュが残っているのか、おまじないが本気で有効な場合があります。慌てずにおまじないまでキッチリやった後にコンパイルすることをお勧めいたします。

って、情報を1年前に出しておけば救われた人が多かったかもしれませんね。まだ3ヶ月に満たないBlogですが、ハッハハハー、アーハッハハ@オーマイオキー風。

※ Warningが出たときの詳細メッセージがただ今再現できないので、再現できた場合は検索にかかるように更新します。