2012-04-10 8 views
1

:iOS版以降https://developer.apple.com/library/ios/#qa/qa1719/_index.htmlのPhoneGap/Cordovaの1.5 iOSのは、「バックアップしない」ファイル属性

は、新たな「バックアップしない」ファイル属性を5.0.1になっています開発者がどのファイルをバックアップするかを明確に指定できるようになりました。 (com.apple.MobileBackup)

これはPhoneGapの/コルドバでサポートされている場合、私はダウンロードあるいは再作成することができますいくつかのオフラインデータ(データを格納することができるようにしたいと私は、思ったんだけど、それiCloudでバックアップされていないオフライン時にユーザーが確実に利用できるようにするため)。

PhoneGap Webサイトでは、永続性が明確に文書化されています(LocalFileSystem.PERSISTENT-http://docs.phonegap.com/en/1.5.0/phonegap_file_file.md.html#LocalFileSystem)が、保存されたファイルがiCloudにバックアップされないようにする方法はないようです。

答えて

3

私はまだ私AppDelegateの初期化では...のPhoneGap/Cordovaの内の溶液のためではなく、周りの一時的な作業として

を差し出しています:

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 "

これは、ドキュメントの下に新しいフォルダを作成し、no backup属性を設定します。

保存されたローカルファイルストアオプションを使用してPhoneGapにファイルを保存すると、新しいサブディレクトリに保存されたファイルはバックアップされません。

+0

この回答をありがとう@LeeCrossley !!私はPhoneGapプロジェクトに参加しています。これは、永続化してバックアップしないデータをダウンロードしますが、使用しているバージョンが1.7であるため、 'setMetadata'関数を使用して1にアップグレードすることはできません。8は今かなり混乱しています。ちょうど質問ですが、あなたはこのコードで何かをアプリストアに投稿しましたか?私はそれが拒否される理由は見当たりませんが、私は客観的にもCでもアプリストアへの投稿でも経験がないので、確かにしたいです。 – davids

+0

はい、このアプリ:itunes。 apple.com/gb/app/nice-bnf/id523093958は上記のコードを使用し、現在1.7を実行しています。 –

4

ここでは、Appleが探しているものを解決すると思うCordovaフレームワークを活用した、機能するJSコードサンプルです。

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(文字列、デフォルトはクラウドに):有効な値はどれも、クラウドとローカルです。 WebストレージデータをiCloudにバックアップできるようにクラウドに設定し、ローカルバックアップのみを許可するようにローカルに設定します(iTunes同期)。 Webストレージのバックアップを許可しない場合は、noneに設定します。 AppleはあなたがiCloud上の後援の下に置かれているどのくらいのデータをチェックするために、この方法を推奨しています、それが動作することを確認するには

  • 設定にアプリ
  • Go]をインストールして起動>のiCloud>ストレージ&バックアップ>管理ストレージ
  • 必要であれば、あなたのアプリケーションのストレージチェック「表示すべてのアプリケーション」
  • をタップ

これはシミュレータでは実行できないことに注意してください。実際のデバイスが必要です。

+0

これは、機能が実装される前のバージョン1.5に関連する、ほぼ2年前の古い質問です。 –

+2

はい、あなたは正しいですが、問題はまだ存在し、私は他のユーザーを助けたかったのです。 –

+1

私はそれを試みたが、まだ動作していない:( –

関連する問題