頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


iCloudがらみでリジェクト

FLEEING ROBOT コンストラクションセットのスクリーンショット
FLEEING ROBOT / コンストラクションセット

↑3回目の申請でやっと審査通過したんだけど、恥を忍んでリジェクト理由を紹介しておきます。

そもそもこのゲーム、ユーザーがステージ(上の画像みたいなのね)を自分で作成してそれをクリアすれば公開できる、という仕組み。その公開されたステージのデータは他のユーザからもアクセスできる必要があるのでiCloudの(privateではなく)publicの方に置いてる。

最初に全く遊べるステージがないのでは審査のしようもないので、俺があらかじめ約50個のステージのデータを作成してiCloudに置いといて申請したのよ。

ところがリジェクト。理由は
2.2 - Apps that exhibit bugs will be rejected

細かいことは端折るけど、原因はiCloudに置くデータって(publicだろうがprivateだろうが)開発用(Development)と製品用(Production)って二種類あったのよ。
俺が置いておくべきコンテナはProduction側なのにDevelopment側に置いてたため、申請/審査時にステージのデータもなく審査しようがなかったというわけ。
いや、データというかデータの設定さえなかったので、iCloudへのアクセス時に
did not find required record type : MyRecordType
ってエラーメッセージが出ていた、とリジェクト時に添付(APPLE様、気がきくよね)してくれたスクショにあったわ。

CloudKit Dashboardの切り替えボタン
↑そもそもリジェクトで調べ直すまでCloudKit Dashboardの左下にこういう切り替えボタンさえあることに気付いてなかったのよ、反省。


ということでRecord Typeというかリファレンスだとschemaってのかな、それの移行をしなければいけない。

Deploying the Schema

↑この辺りに詳しく書いてる。
ただ、データ自体の移行はやってくれないっぽい。
仕方ないから自分でやるしかないんだけど、これがなかなか面倒。というのもアプリ自体は同時にDevelopとProductionのiCloudデータベースにアクセスできないから。

ということで苦肉の策が、
1. iCloudのDevelopmentのデータを取得してiPhone本体に保存
2. iPhone本体にあるデータをiCloudのProduction側に保存
って流れ。

アプリが処理するのがDevelopmentかProductionかのどちらかってのは
ターゲット名.entitlements
ってファイルで
com.apple.developer.icloud-container-environment
ってので指定できる。
アプリ実行時のScheme設定でBuild ConfigurationでDebug / Release の切り替えはできるけど、ここをReleaseにするだけだとデフォのDevelopment側コンテナにアクセスしてた。リリースビルドだとProduction側になりそうなもんだけどね。


※環境
iOS 9.3.2 , OS X El Capitan 10.11.5 , Xcode 7.3.1

<< 3DS LL用のブルーライトカットフィルム、考えた人すごい  TopPage  App Preview用動画を作成する >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1002-555568ed




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad