アプリでiCloudを使うときにはまったこと

アプリをiCloud対応にする時にかなりはまったので、その内容と解決方法をまとめておきます。

iCloudの機能が使えない

iCloud機能は、実機でしか確認できないようです。実機で確認してみましょう。また、使用するためには、開発者登録が必要です。

解決方法

  1. Developer Programを購入して、開発者登録します。
  2. iCloudオプションを有効にしたProvisioning Profileを作成して、Xcodeのcode signに適用します。

iCloudを使ったMacアプリが立ち上がらない

Entitlementにチェックを入れてiCloudを使うことを明示したアプリが起動しない場合は次の点をチェックします。

  • Build SettingのCode SignがiCloudが有効になったProvisioning Profileが適用されているか

iCloudデータの作成時にエラーがでる

データにアクセスしようとすると次のようなエラーがでました。

Unable to initiate item download

解決方法

原因は、データの保存場所を間違えて指定していたからでした。 アプリケーションのサンドボックス内のDocumentsディレクトリ配下にデータ保存場所を指定します。

iCloudデータを完全に削除したい

プログラムミスなんかでデータの不整合が発生してしまってデータを完全に削除したい場合は、以下の全てのデータを削除します。

  • iPad/iPhoneのローカルデータ(アプリを削除してデータを削除)
  • Macアプリのローカルデータ(~/Library/Containers/iCloud Containersで指定した名前/)
  • Mac上のiCloudデータ (~/Library/Mobile Documents/アプリIDを含んだ名前/)
  • iCloudサーバー上のデータ

iCloudサーバー上のデータを消すには、プログラムで次の処理を実行します。

/* iCloudサーバー上のゴミデータ削除 */
 NSURL *icloudURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
 NSError *err;
[[NSFileManager defaultManager] removeItemAtURL:icloudURL error:&err];
 /*-----------------------------*/

ネットワークアクセスできない

stringWithContentsOfURL: を使ってアプリ内からhttpでサイトのコンテンツを取得する時にエラーが出ました。

Error Domain=NSCocoaErrorDomain Code=256 “The file “〜URLのファイル名〜” couldn’t be opened.” UserInfo=0x10222f670 {NSURL=http://〜アドレス〜, NSUnderlyingError=0x10223aa40 “The operation couldn’t be completed. Operation not permitted”}

解決方法

Entitlementの設定でネットワークアクセスを許可します。

iCloudの表示セットの作成

iTunes Connect デベロッパガイド(p146あたり)にiCloud表示セットを作成してセットするように書いてあります。その設定方法です。この表示セットは、MacやiPadの設定パネルでiCloudのストレージを使っているアプリの一覧を表示させた時に表示されるアプリ名とアイコンを紐づけるためのもののようです。ちなみに、必須ではありませんので、設定していなくてもアプリ申請は可能です。設定すると、アプリ申請をした時にiTunes ConnectのiCloud Display SetsのAttached Appsがカウントアップされます。

設定方法

1. iTunes Connectで新しい表示セットを作成

Manage Your Applications > iCloud Manage Display Sets をクリック “Create New”ボタンを押して新しい表示セットIDを作成する (例:com.cacao.PasteShogiban)

2. Xcodeでinfo.plistに次のiTunes Connectで設定したDisplay Set ID を登録

Key Value
NSUbiquitousDisplaySet (例) com.cacao.PasteShogiban