SOLG System Blog

取得した画像をDocumentsディレクトリに適当に格納しといたらappleにrejectされた!

2013年05月28日

どうも、高山です。

またも、iOSアプリの話です。おふざけ無し。

なんだーかんだーと時間がかけて作ったアプリをappleに申請して、まだかまだかと待つこと2週間近く。
どうかな?と思ってiTunesConnectに見に行くと、ある意味予想通りrejectされておりまして、
「Resolution Centerに来い!」というので、行ってみると、何やら英文が。。。

reject

なんだかよく分からないが、
「アプリ内部で保持するデータは、iCloudにバックアップされないようにしなければいけない」
と言っているもよう。
確かに、XML内の画像のURLを元に画像をサーバーから取得し、
Documentsディレクトリに格納していたのだけど、特に何も処置していなかった。

アプリで自由に触ることができるディレクトリは4つで、
iCloudのバックアップ対象で分けると以下のようになります。

【iCloudバックアップ対象】
■Documents:アプリのデータを保存するディレクトリ
■Library/Preferences:アプリの設定ファイルを保存するディレクトリ

【iCloudバックアップ対象外】
■Library/Caches:キャッシュファイルを書き込むディレクトリ
■tmp:一時ファイルを保存するディレクトリ

で、どうするかなーと。
画像の保存先を「Library/Caches」か「tmp」にすれば良いのだけど、ちょっと違う。

やっぱり保存先は「Documents」のままで、「Documents」内に画像格納用のディレクトリを作り、
このディレクトリをiCloudのバックアップ対象外とすることとした。

以下手順。

1.画像格納先ディレクトリの作成
- (BOOL)makeDirForAppContents
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *baseDir = [self myDocumentsPath];

    BOOL exists = [fileManager fileExistsAtPath:baseDir];
    if (!exists) {
        NSError *error;
        BOOL created = [fileManager createDirectoryAtPath:baseDir withIntermediateDirectories:YES attributes:nil error:&error];
        if (!created) {
            NSLog(@"ディレクトリ作成失敗");
            return NO;
        }
    } else {
        return NO; // 作成済みの場合はNO
    }
    return YES;
}

- (NSString *)myDocumentsPath
{
    NSString *documentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    NSString *path = [documentsPath stringByAppendingPathComponent:@"hoge"]; //追加するディレクトリ名を指定
    return path;
}

2.画像格納先ディレクトリをiCloudのバックアップ対象外に変更
下記ソースは、これ(https://developer.apple.com/library/ios/#qa/qa1719/_index.html)を参考に。

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    const char* filePath = [[URL path] fileSystemRepresentation];

    const char* attrName = "com.apple.MobileBackup";
    u_int8_t attrValue = 1;

    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
    if (result == 0) {
        NSLog(@":%@", [URL path]);
        return YES;
    } else {
    NSLog(@"属性マーク設定失敗");
        return NO;
    }
}

後は、こんな感じで呼んであげると良いかと。
NSString *filePath = [self myDocumentsPath];

// データ保存用のディレクトリを作成する
if ([self makeDirForAppContents]) {
    // ディレクトリに対して「do not backup」属性をセット
    NSURL *dirUrl = [NSURL fileURLWithPath:filePath];
    [self addSkipBackupAttributeToItemAtURL:dirUrl];
}

これで再申請して、無事通りましたー。
取得したデータの保存先には、皆さん気をつけましょう!

高山でした。

同じカテゴリー(iPhoneアプリ)の記事画像
アプリ開発の第一歩
スマートフォン アプリ市場について調べてみました。
まちぽアプリがApple Watchに対応した理由
静岡の情報誌を作っている出版社がニュースアプリを作りました
静岡の情報誌を作っている出版社が電子書籍アプリを作りました
SwiftはObjective-Cを置き換えるか
同じカテゴリー(iPhoneアプリ)の記事
 アプリ開発の第一歩 (2015-12-18 21:12)
 スマートフォン アプリ市場について調べてみました。 (2015-11-25 09:45)
 まちぽアプリがApple Watchに対応した理由 (2015-07-23 09:00)
 静岡の情報誌を作っている出版社がニュースアプリを作りました (2015-02-03 13:15)
 静岡の情報誌を作っている出版社が電子書籍アプリを作りました (2015-01-30 16:28)
 SwiftはObjective-Cを置き換えるか (2014-11-10 08:30)

Posted by iA SEチーム at 23:00│Comments(0)iPhoneアプリ
上の画像に書かれている文字を入力して下さい
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

PageTop

削除
取得した画像をDocumentsディレクトリに適当に格納しといたらappleにrejectされた!
    コメント(0)