この投稿は、テクニカルサポートのメールアドレスにアクセスした1人のユーザーによるレビューに触発されました。
「私は助けを必要としない、私はあなたに何かを尋ねたかった...どのようにした
ユニバーサルアプリケーションではない場合でも、iCloud Cut the Ropeを実行しますか? 私は
iPhoneとiPadを問題なく交互に使用でき、非常に優れています。
残念ながら、これを行う開発者は他にいません。
アプリケーション、だから私は...あなたはあなたまたは他の人ではない魔術師です
何をしてもいいですか? あなたは私にとってナンバーワンです、あなたに感謝します
美しいゲームと長い間それをサポートしています。 こんにちは。」
iPadとiPhoneバージョンのアプリケーションが同じゲームの進行状況を使用するのがどれほど異常かはわかりませんが、今日はこれを達成する方法を説明します。 さらに、それは非常に簡単です。 また、統合中に発生した問題とその解決策についても説明します。
iCloudとは何ですか?
iCloudは、プッシュテクノロジーをサポートする無料のクラウドストレージサービスです。 Appleによって作成されました。 5番目のバージョンからiOSに登場しました。 また、Mac OSではバージョン10.7(Lion)以降。
設計の問題
ユーザーができるだけ透明にiCloudを使用することを望んでいました。 そのため、デフォルトでは、この機能を無効にし、メニューに特別なアイテムを作成して有効にしました。
また、家族の各メンバーが同じApple IDを使用してiOSデバイス上のすべてのボックスを個別に通過できるようにすることも行われています。
データの更新は非同期であるため、iCloudでの保存の可用性に関する次の通知を追加することにしました。
この通知により、iCloudにすでに存在する進行状況を簡単かつ簡単に使用できます。 最初の同期後、一度だけ表示されます。 さらに、メニューの設定に関係なく同期が行われます。 この設定は、結果の進捗をローカルの進捗に適用するかどうかにのみ影響します。
レベルの進捗状況は、各デバイスから最高の結果のみを作成することを決定しました。 したがって、1台のデバイスでボックスの半分を使用し、2台目のデバイスで他のデバイスを使用して、複数の同期を介して両方のデバイスのボックスで完全な進捗を取得できます。
ゲームCut the Ropeには、ゲームの進行をリセットする機能があります。 そして、iCloudに保存された進行状況をリセットするかどうかを考えました。 価値がないと判断しました。 iCloudは、各レベルの最新の最良の結果を常に保存するため、ユーザーは外部要因に関係なくいつでもそれを復元できます。 プレイヤーが進行状況を失い、ゲーム全体をゼロから完了したい場合、iCloudとの同期をオフにすることができます。
統合
iCloudをiOSアプリケーションに統合するには2つの方法があります。
iCloudドキュメントストレージ (ファイルをiCloudユーザーアカウントに保存)および
iCloudキーと値のデータストレージ 。
私たちのゲームではゲームの進行状況がこのように保存されるため、2番目のオプションについてお話します-レベル結果のカップル。
- まず、 developer.apple.comのアプリケーションでiCloudサポートを有効にし、対応するプロファイルを再生成する必要があります。
- プロジェクトに資格を含めます。 xcodeバージョン4.2では、これは次のように行われます。
プロジェクトナビゲータで、プロジェクトをダブルクリックし、目的のターゲットを選択し、[資格]セクションの[概要]タブで、[資格を有効にする]行の反対側のチェックボックスをオンにします。 - [iCloud Key-Value Store]フィールドで、アプリケーションで使用されるコンテナ識別子を指定します。 この識別子は、異なるアプリケーションで同じ場合があります。 このようにして、2つの異なるアプリケーションに対して1つの進捗を使用する可能性が実現します。 その結果、アプリケーションの場合、フルバージョン(iPhoneおよびiPad)の場合、識別子は「com.zeptolab.ctr」のようになります。 「com.zeptolab.ctrlite」、無料版の場合。 私たちの場合、無料版ではレベルとレベルが異なるため、進行状況ファイルを分割する必要がありました。
プロジェクトの正しい設定は次のとおりです。
- アプリケーションコードで、たとえば次のように、データ変更メッセージのリッスンを追加します。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notification:) name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification object:[NSUbiquitousKeyValueStore defaultStore]];
また、これらのメッセージが不要になった場合は、それらのメッセージの登録を解除することを忘れないでください。
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification
object:[NSUbiquitousKeyValueStore defaultStore]];
- したがって、この方法では
-(void)notification:(NSNotification *)notification
新しいデータを取得する状況を処理します。
- 辞書の例でNSUbiquitousKeyValueStoreを操作します。 辞書へのアクセスは次のとおりです。
NSUbiquitousKeyValueStore* store = [NSUbiquitousKeyValueStore defaultStore];
NSDictionary* storedDict = [store dictionaryForKey:GAME_PROGRESS];
そして、それは同期することができます:
NSUbiquitousKeyValueStore* store = [NSUbiquitousKeyValueStore defaultStore];
[store setDictionary:dict forKey:GAME_PROGRESS];
[store synchronize];
ご注意
NSUbiquitousKeyValueStoreインターフェイスは、NSUserDefaultsに非常に似ています。 しかし、2番目のものを最初のものに完全に置き換えることはできません。 アプリケーションは常にローカルで最新のゲームの進行状況を保存する必要があります。
古いファームウェアのサポート :
iCloudはiOS 5からのみ登場したため、以前のバージョンとの互換性のためにこの機能を無効にする必要があります。
これは次のように行われます。
- Foundation.frameworkに弱いリンクを配置します。そうしないと、古いファームウェアで実行しているときに次のようなエラーが発生します。
「Dyld:シンボルが見つかりません:_OBJC_CLASS _ $ _ NSUbiquitousKeyValueStore。」 - そして、次のように、iCloud機能の可用性に関するコードにチェックを追加します。
+(BOOL)isCloudAvailable
{
id class = NSClassFromString(@"NSUbiquitousKeyValueStore");
return class != nil;
}
そして、残りのコードを分離します。
ご清聴ありがとうございました。 誰かがこの記事を面白いと思うことを願っています。
便利なリンク
iCloudプログラミングガイド
NSUbiquitousKeyValueStoreクラスリファレンス