4

オンラインからmp3ファイル(約6〜8 mbのサイズ)をダウンロードしてNSDocumentDirectoryに保存できるアプリを開発しました。私のアプリは今日拒否され、

"Apps must follow the iOS Data Storage Guidelines or they will be rejected"


 We found that your app does not follow the iOS Data Storage Guidelines, which is
 required per the App Store Review Guidelines. The iOS Data Storage Guidelines 
 indicate that only content that the user creates using your app, e.g., documents,
 new files, edits, etc., may be stored in the /Documents directory - and backed up
 by iCloud. 

 Temporary files used by your app should only be stored in the /tmp directory; 
 please remember to delete the files stored in this location when the user exits 
 the app. "

私はNSDocumentDirectoryに音楽ファイルを保存するために使用しました。だから、これは初めてです、私は実際の問題を理解することはできません。承認のためにアプリを再送信するにはどうすればよいですか。

これが私のコードです

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);



 NSString *documentsDirectoryPath = [[paths objectAtIndex:0]stringByAppendingPathComponent:[NSString stringWithFormat:@"psalmsMusic%d.mp3",i]];
NSLog(@"ddddddd psalmsMusic%d.mp3",i);
i++;


 NSLog(@"path %@",documentsDirectoryPath);
 [receivedData writeToFile:documentsDirectoryPath atomically:YES];

本当に助けが必要です。

4

7 に答える 7

7

同じ理由でアプリが拒否されました。ダウンロードしたファイルをDocumentsディレクトリに保存する代わりに、解決策は本当に簡単です。キャッシュディレクトリに保存する必要があります。キャッシュディレクトリは、iCloudにバックアップされず、次のことができます。特定の機会にOSによってランダムに削除される...これは、ファイルをキャッシュディレクトリに保存する方法です

NSString *filePath = [[self applicationCachesDirectory] stringByAppendingPathComponent:fileName];


BOOL flag = [[NSFileManager defaultManager] createFileAtPath:filePath contents: receivedData attributes:nil];

編集

NSString *filePath = [[self applicationCachesDirectory]  stringByAppendingPathComponent:[NSString stringWithFormat:@"psalmsMusic%d.mp3",i]];
NSLog(@"ddddddd psalmsMusic%d.mp3",i);
i++;
BOOL flag = [[NSFileManager defaultManager] createFileAtPath:filePath contents: receivedData attributes:nil];
if ( flag )
  NSLog("success");
于 2012-07-12T05:24:11.110 に答える
3

iCloudがAppleに実装されると、ドキュメントディレクトリデータは何らかの形でiCloudストレージに関連付けられます。したがって、Appleは現在、ドキュメントディレクトリに大量のデータストレージを使用しているアプリケーションを拒否しています。

他の場所にデータを保存する必要があります。MP3ファイルを他の場所に保存します。

このリンクはあなたを助けるかもしれません。

http://www.techotopia.com/index.php/Working_with_Directories_on_iOS_4_%28iPhone%29

それがあなたの問題を解決することを願っています。

もう1つは次のとおりです.........。

iOSデータストレージガイドラインでは、ユーザーがアプリを使用して作成したコンテンツ(ドキュメント、新しいファイル、編集など)のみを/ Documentsディレクトリに保存し、iCloudでバックアップできることを示しています。

アプリで使用される一時ファイルは、/tmpディレクトリにのみ保存する必要があります。ユーザーがアプリを終了するときに、この場所に保存されているファイルを削除することを忘れないでください。再作成できるが、アプリが適切に機能するために保持する必要があるデータ、またはオフラインで使用できることを顧客が期待しているデータは、「バックアップしない」属性でマークする必要があります。NSURLオブジェクトの場合、NSURLIsExcludedFromBackupKey属性を追加して、対応するファイルがバックアップされないようにします。CFURLRefオブジェクトの場合、対応するkCFURLIsExcludedFromBackupKey属性を使用します。

詳細については、 http://developer.appcelerator.com/question/134926/ipad-app-rejected-ios-data-storage-guidelinesを参照してください。

于 2012-07-12T05:14:50.343 に答える
3

Appleは、バックアップフットプリントのサイズを縮小したいと考えています。

まず、ドキュメントの使用を停止します。それは適切ではありません。

かなり簡単にファイルを再度ダウンロードできる場合は、バックアップされない場所にファイルを保存する必要があります。キャッシュをお勧めします。それらが削除された場合は、もう一度ダウンロードする必要があります。

再度ダウンロードするのが難しい場合は、ライブラリフォルダの別の場所に保存する必要があります。

キャッシュディレクトリは、次を使用して見つけることができます。

NSArray *paths = NSSearchPathForDirectoriesInDomains(
                        NSCachesDirectory, NSUserDomainMask, YES);

基本的に、これはあなたが今持っているものですが、あなたの代わりにNSDocumentDirectoryを使用しますNSCachesDirectory

ファイル名を制御する場合、これはそのままで問題ありません。そうでない場合は、サブディレクトリを作成してそこから作業し、他のものと衝突しないようにする必要があります。

于 2012-07-12T05:15:13.247 に答える
1

NSDocumentDirectoryこのディレクトリは現在iCloudと同期するためのものであるため、に保存することはできません。ただし、NSCachesDirectory音楽ファイルを保存するためのアップルのコメント状態として、一時ディレクトリを使用または使用できます。

于 2012-07-12T05:15:37.697 に答える
1

ガイドラインによると、インターネットから再作成(ダウンロード)できない重要なファイルのみをドキュメントディレクトリに移動する必要があります。これはtであるためです。

于 2012-07-12T05:18:11.237 に答える
1

iOSストレージガイドライン(http://developer.apple.com/icloud/documentation/data-storage/にあります)に従って、ユーザーが生成したすべてのコンテンツをDocumentsディレクトリに配置し、再ダウンロード可能なすべてのコンテンツをに配置する必要があります。 Cachesディレクトリ。したがって、sqLiteデータベースをそこに置いても問題ないはずです。

これの背景は、iOS 5以降、DocumentsディレクトリがiCloudにバックアップされることです。多くのアプリは完全なデータをそこに保存する傾向があるため、iCloudバックアップはかなり大きくなり、空き領域を使い果たしてネットワークトラフィックを作成します。どちらも、ユーザーが理由を疑問に思って怒ります。これを軽減するために、Appleは現在、Documentsディレクトリに保存されているものと、これが再生可能なコンテンツ(ダウンロード可能なファイルなど)である可能性があるかどうかを詳しく調べているようです。

デバイスの空き容量が少なくなると、iOS 5でオペレーティングシステムによってキャッシュディレクトリが削除される可能性があり、削除されることに注意してください。したがって、アプリは、以前のようにすべてが存在すると想定することはできなくなりますが、キャッシュから何かにアクセスするたびに再チェックする必要があります。

お役に立てれば...!

于 2012-07-12T06:15:53.980 に答える
0

私のアプリも同じ理由で拒否されました-(2.3)

これを試して -

NSString * path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory、NSUserDomainMask、YES);

デバイスがクラウドと同期する場合は常にこの利点があります。その場合、アプリケーションデータはNSDocumentDirectoryではなくNSCachesDirectoryにあるため、同期されません。

また、デメリットは、デバイスを使用するときや、デバイスのメモリが少ない場合に使用することです。その場合、CPUは空き領域を確保するためにキャッシュをクリアする可能性があります。したがって、オフラインで使用するデータがある場合は、損失が発生する可能性があります。

2)NSCachesDirectoryを使用できない場合(データが重要すぎるためである可能性があります)、この方法で使用できます-

このメソッドを使用して、データベースパスを指定します-'addskipbackupattributetoitematurl'

このリンクをたどる-addSkipBackupAttributeToItemAtURLAPIの使用方法は?

于 2015-02-13T13:00:19.163 に答える