gpt4 book ai didi

ios - 从 iCloud 备份中排除 : NSURLIsExcludedFromBackupKey

转载 作者:可可西里 更新时间:2023-11-01 04:25:12 36 4
gpt4 key购买 nike

我的应用程序第二次被拒绝,我浪费了 3 周 :(

第一次提交时,我只排除了目录在 iCloud 中的备份。苹果拒绝...

第二次提交时,我将下载的目录和图片排除在 iCloud 中的备份之外。 Apple 再次拒绝...Apple 还提示我的应用内购买没有“恢复”功能,而事实上,我确实有一个“恢复”按钮,并且在我测试时它有效。

我已经按照 Apple 的建议完成了,使用 NSURLIsExcludedFromBackupKey 将文件排除在备份之外。 Macmade 在 stackoverflow here 上发表了一条有趣的评论:

sometimes Apple reviewers think your data can be re-generated, when it's not. Then you'll have to explain why the data has to be backed-up

审稿人误解的频率有多少,我们必须向他们解释内容需要离线且不可重新生成?

这是我用来从 iCloud 中排除我的文件和目录的代码。你发现任何问题了吗?

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
// There's a chance the download failed, but don't assert here
//assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);

NSError *error = nil;
BOOL success = [URL setResourceValue:[NSNumber numberWithBool:YES]
forKey:NSURLIsExcludedFromBackupKey
error: &error];
if(!success){
NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error);
}
return success;
}

//Download picture from Google and exclude it from being backed-up in iCloud
- (void)downloadFetcher:(GTMHTTPFetcher *)fetcher
finishedWithData:(NSData *)data
error:(NSError *)error
{

if (error == nil) {

// successfully retrieved this photo's data; save it to disk
GDataEntryPhoto *photoEntry = [fetcher propertyForKey:@"photo entry"];

// Create album directory if it doesn't already exist
NSString *path = [self findOrCreateApplicationSupportSubPath:[photoEntry albumTitle]];
path = [path stringByAppendingPathComponent:[[photoEntry title] stringValue]];

if (path != nil) {

// Write to disk
BOOL didSave = [data writeToFile:path
options:NSDataWritingAtomic
error:&error];
if (didSave) {

// Exclude file from being backed up in iCloud
NSURL *url = [NSURL fileURLWithPath:path];
BOOL excludeBackupResult = [self addSkipBackupAttributeToItemAtURL:url];

if (excludeBackupResult == NO) {
NSLog(@"Error excluding FILE from iCloud: %@", path);
}

// Update the download progress bar
_downloadedFileCounter = _downloadedFileCounter + 1;
float progress = _downloadedFileCounter / kMaleWireframeImagesTotal;
[self updateProgress:progress];

// The download completed. -2 just incase a package is lost, but let the user move on...
if (_downloadedFileCounter >= _downloadableFilesTotal -2) {
[_panel6 downloadCompleted];
}

} else {
// error saving file. Perhaps out of space? Write permissions error?
NSLog(@"Save anatomy picture failed: %@", error.localizedDescription);
}

} else {
NSLog(@"downloadFetcher: Cannot create directory");
}
} else {
NSLog(@"downloadFetcher failed: %@", error);
}
}

//Create directory and exclude it from being backed-up in iCloud
-(NSString*)findOrCreateApplicationSupportSubPath:(NSString*)subPath
{

NSString *resolvedPath;
NSArray *appSupportDir = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);

if ([appSupportDir count] != 0) {

resolvedPath = [appSupportDir objectAtIndex:0];

// Append the name of this application
NSString *executableName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleExecutable"];
resolvedPath = [resolvedPath stringByAppendingPathComponent:executableName];
resolvedPath = [resolvedPath stringByAppendingPathComponent:subPath];

NSFileManager *manager = [NSFileManager defaultManager];
if (![manager fileExistsAtPath:resolvedPath]) {

// Path doesn't exist, creates it
NSError *error;
BOOL successful = [manager createDirectoryAtPath:resolvedPath withIntermediateDirectories:YES attributes:nil error:&error];

if(!successful) {
NSLog(@"ERROR creating APP Support Sub-Directory: %@", error.localizedDescription);
return nil;
} else {

// Exclude path from backing-up in iCloud
NSURL *url = [NSURL fileURLWithPath:resolvedPath];
BOOL excludeBackupResult = [self addSkipBackupAttributeToItemAtURL:url];

if(!excludeBackupResult){
NSLog(@"Error excluding DIRECTORY from iCloud backup. This is a violation to their guideline.");
return nil;
}
}
}

} else {
NSLog(@"No Application Support Path available");
return nil;
}

return resolvedPath;
}

最佳答案

我认为诀窍是添加 NSURLIsExcludedFromBackupKey 或确保该目录在文档目录之外。我通过将我的文档移动到 Library/Application Support 文件夹来做到这一点(因为它在/tmp 或/Caches 文件夹中没有意义):

- (void)createNewRefFolder
{
NSError *error;

// store in /Library/Application Support/BUNDLE_IDENTIFIER/Reference
// make sure Application Support folder exists
NSURL *applicationSupportDirectory = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory
inDomain:NSUserDomainMask
appropriateForURL:nil
create:YES
error:&error];

if (error) {
NSLog(@"KCDM: Could not create application support directory. %@", error);
}

NSURL *referenceFolder = [applicationSupportDirectory URLByAppendingPathComponent:@"Reference" isDirectory:YES];
if (![[NSFileManager defaultManager] createDirectoryAtPath:[referenceFolder path]
withIntermediateDirectories:YES
attributes:nil
error:&error]) {
NSLog(@"KCDM: Error creating Reference folder: %@ ...", error);
}

BOOL success = [referenceFolder setResourceValue:@YES forKey: NSURLIsExcludedFromBackupKey error: &error];
if(!success){
NSLog(@"KCDM: Error excluding %@ from backup %@", referenceFolder, error);
}
}

关于ios - 从 iCloud 备份中排除 : NSURLIsExcludedFromBackupKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25517489/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com