2012-04-10 2 views
1

Согласно документации разработчика на веб-сайте компании Apple: https://developer.apple.com/library/ios/#qa/qa1719/_index.htmlPhoneGap/Кордова 1,5 IOS «не резервное копирование» атрибут файла

Начиная с прошивкой 5.0.1 новый «не резервное копирование» атрибут файла был которые позволяют разработчикам четко указать, какие файлы должны быть скопированы. (Com.apple.MobileBackup)

Я интересно, если это поддерживается в PhoneGap/Кордова, как я хочу, чтобы иметь возможность хранить некоторые данные в автономном режиме (данные, которые могут быть загружены или иным образом воссозданы, но что пользователь надеется быть надежно доступным в автономном режиме), который не поддерживается на iCloud.

Устойчивость четко задокументирована (LocalFileSystem.PERSISTENT - http://docs.phonegap.com/en/1.5.0/phonegap_file_file.md.html#LocalFileSystem) на веб-сайте PhoneGap, но, похоже, нет способа обеспечить сохранение сохраненного файла в iCloud.

ответ

3

Я все еще протягивал для решения в PhoneGap/Кордове, но как временную работа вокруг ...

В моем AppDelegate INIT:

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

// Get documents directory 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *formularyPath = [documentsDirectory stringByAppendingPathComponent:@"OfflineData"]; 

if (![[NSFileManager defaultManager] fileExistsAtPath:formularyPath]) 
    [[NSFileManager defaultManager] createDirectoryAtPath:formularyPath withIntermediateDirectories:NO attributes:nil error:nil]; 

// Prevent iCloud backup 
u_int8_t b = 1; 
setxattr([formularyPath fileSystemRepresentation], "com.apple.MobileBackup", &b, 1, 0, 0); 

Не забывает #import " sys/xattr.h "

Это создает новую папку под документами и устанавливает атрибут отсутствия резервной копии.

Вы можете сохранить свои файлы в PhoneGap, используя опцию сохранения локального файла, и файлы, сохраненные в вашем новом подкаталоге, не будут скопированы.

+0

Спасибо за этот ответ @LeeCrossley !! Я участвую в проекте PhoneGap, который загружает данные, которые должны сохраняться и не подлежат резервному копированию, но поскольку версия, которую мы используем, равна 1.7, мы не можем использовать функцию setMetadata и обновлять до 1.Теперь будет довольно беспорядок. Просто вопрос, вы отправили что-нибудь с этим кодом в магазин приложений? Я не вижу причин, по которым это может быть отклонено, но, поскольку у меня нет опыта ни с объективным, ни с публикацией в магазине приложений, я бы хотел сделать это точно – davids

+0

Да, это приложение: itunes. apple.com/gb/app/nice-bnf/id523093958 использует приведенный выше код и работает в настоящее время 1,7. –

4

Вот пример кода JS-кода, использующий каркас Cordova, который, как я считаю, решает, что ищет Apple.

document.addEventListener("deviceready",onDeviceReady,false); 

function onSetMetadataSuccess() { 
    console.log("success setting metadata - DONE DONE DONE!") 
} 
function onSetMetadataFail() { 
    console.log("error setting metadata") 
} 
function onGetDirectorySuccess(parent) { 
    console.log("success getting dir"); 
    parent.setMetadata(onSetMetadataSuccess, onSetMetadataFail, { "com.apple.MobileBackup": 1}); 
} 
function onGetDirecotryFail() { 
    console.log("error getting dir") 
} 

function onFileSystemSuccess(fileSystem) { 
    console.log("onFileSystemSuccess()") 

    var dirEntry = fileSystem.root; 
    dirEntry.getDirectory('Backups', {create: true, exclusive: false}, 
      onGetDirectorySuccess, onGetDirecotryFail); 

} 

function onFileSystemFail(evt) { 
    console.log("!!!!! onFileSystem fail...") 
    console.log(evt.target.error.code); 
} 

/* When this function is called, PhoneGap has been initialized and is ready to roll */ 
function onDeviceReady() 
{ 

    // this and subsequent callbacks tells iOS not to store our data in iCloud. 
    // without it they rejected our app because of the way PG 1.8 does local->tem storage 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, onFileSystemFail); 

} 
4

С PhoneGap 1.9 вы можете установить в вашем config.xml:

<preference name="BackupWebStorage" value="none" /> 

BackupWebStorage (строка, по умолчанию облако): действительные значения не имеет, облако и местные. Установите облако, чтобы обеспечить резервное копирование данных веб-хранилища в iCloud и установите на локальный доступ только локальные резервные копии (синхронизация iTunes). Установите значение none, чтобы не разрешить резервное копирование веб-хранилища.

Чтобы проверить, что это работает, Apple рекомендует использовать этот способ, чтобы проверить, сколько данных вы поставили под эгидой ICloud:

  • Установка и запуск вашего приложения
  • Перейдите в раздел Настройки> ICloud> Хранение & резервного копирования> Управление хранения
  • При необходимости, нажмите «Показать все приложения»
  • Проверьте хранение вашего приложения

Обратите внимание, что это невозможно сделать в симуляторе. Вам нужно настоящее устройство.

+0

Это старый вопрос почти двух лет назад, который относится к версии 1.5, прежде чем функция была реализована. –

+2

Да, вы правы, но проблема все еще существует, и я хотел помочь другим пользователям. –

+1

Я пробовал, но все еще не работал :( –