Day: November 30, 2015

Swift:うまくいかなかった理由

なぜApp StoreへのArchiveがうまくいかなかったか、頭の中を整理しています。

今回、App登録作業の障害になった問題点・現象は次のものがあります。なお、大前提として、App IDはiTunes Connectで、Provisioning ProfileはApple DeveloperのCertificates, Identifiers & Profilesで作成・登録しました。

Provision Profileのミスマッチ。

  • Xcodeで指定すべきものを指定していない。
    ➡️TARGETSのGeneralにあるBundle IdentifierにiTunes Connectの「あなたのバンドルID」を指定していない。
  • XcodeのPreferencesでDownloadされていない。
    Provisioning Profileを登録したらXcode Preferencesを必ず再確認する

バンドルIDのサフィックス(接頭部)のミスマッチ。

  • iTunes Connectの一般情報でバンドルIDを作成するとき、バンドルIDのサフィックスを指定します。
    ➡️「info.plistで使用されているものと一致する必要があります」とヘルプに書いてある通り、これが重要です。問題なのは、どうすれば一致させることができるかです。うまく行ったケース(sample program)では、Xcodeで新たに作成したプロジェクト名とサフィックスが同じになっています。同じにしないといけないと理解しています。
  • wildcard(com.aaa.bbb.*の形式)を指定した場合、必ずサフックスを指定しなければなりません。また、このとき、App IDは「com-aaa-bbb-サフィックス」という名前と「com.aaa.bbb.サフィックス」とうIDで作成されます。
  • Provisioning ProfileはApple DeveloperのCertificates, Identifiers & Profilesで作成します。たとえば、①Name: ProvisionExif、②Type: Mac Distribution、③App ID: 「com-aaa-bbb-サフィックス」という名前を指定します。
  • Provisioning Profileを作成したら、前述した通り、XcodeのPreferenceでDownloadする必要がないかチェックします。

Sandboxエラー

  • ERROR ITMS-90296: “App sandbox not enabled. The following executables must include the “com.apple.security.app-sandbox” entitlement with a Boolean value of true in the entitlements property list: [( “xxxx.pkg/Payload/xxxx.app/Contents/MacOS/xxxx” )]
  • このエラーは深刻で意味不明でしたが、推測するに、plsitに記述された名称とサフィックスの不一致に起因しているのかもしれません。プロジェクトを新たに作り直し、前述した通り、iTunes ConnectでバンドルIDを作成するときにサフィックスをプロジェクト名と一致させたら、問題解消ができました。

XcodeのTARGETSのBuild Setting

  • 何も変更する必要はありません。
    サンプルプログラムのCode Signingの設定は次の通りです。

    • Code Signing Entitlementsは、MesaExif5/MesaExif5.entitlements
    • Code Signing Identityは、Mac Developer
    • Provisioning Profieは、Automatic

このあと、最終的には、開発したアプリのプロジェクトを作り直します。修正してOKになるのがいいのですが、renameしたり、名前を変えたりして試してみた限りでは、うまく行きませんでした。

今度ばかりは本当に泣きが入ってしままいました。Sandboxエラーについては、Appleに問い合わせても、自分自身、何が起きているかわかっていないのだから余計に混乱が深まるばかりだろうと考えたのは、その通りでした。正しい答えを言われても、多分、それではその答えに行き着かなかった、と思います。

Swift:XcodeからProvisioningを削除

Provisioning Profileをいろいろ作っていたら、Xcodeで何をしているのかわからなくなりました。

削除するには、Xcode➡️Preferences➡️Profiles➡️Account➡️View Details…➡️下側のProvisioning Profileから削除するものを選択して右クリックしてShow in Finderをクリックします。

  • すると、Library➡️MobileDevice➡️Provisioning Profilesが選択されます。
  • ここにProvisioning Profilesがあります。
  • 全部削除すると、Xcodeの先程の下側の画面からProvisioning Profilesが消えます。
  • この後、DeveloperのCertificates, Identifiers & Profilesに行きます。Provison Profilesをクリックすると、StatusがInvalidになっているので、必要なものを有効にします。有効にするには、Provisioning fileを選択➡Edit➡️App IDを選択し、Certificatesを選択➡️Generate➡️Done
  • Xcode➡️Profiles➡️Account➡️View Details…➡️下側のProvisioning ProfileにDownloadが表示されています。必要なものをDownloadをクリックします。

スクリーンショット 2015-11-30 00.22.37