{ "id": "159268", "key": "TIMOB-23141", "fields": { "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [ { "id": "17706", "name": "Release 5.4.0", "archived": false, "released": true, "releaseDate": "2016-08-11" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2016-06-28T05:37:00.000+0000", "created": "2016-04-02T18:53:56.000+0000", "priority": { "name": "Critical", "id": "1" }, "labels": [ "backup", "icloud", "ios", "itunes" ], "versions": [ { "id": "17684", "name": "Release 5.2.1", "archived": false, "released": true, "releaseDate": "2016-03-25" } ], "issuelinks": [ { "id": "52289", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "162245", "key": "TIMOB-23698", "fields": { "summary": "iOS: \"CFURLSetResourcePropertyForKey failed\" log appears when you use Ti.Filesystem.File.setRemoteBackup", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } } ], "assignee": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "updated": "2016-07-28T20:05:43.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "10206", "name": "iOS", "description": "iOS Platform" } ], "description": "If you never use the Ti.Filesystem.File.remoteBackup property or Ti.Filesystem.File.setRemoteBackup method, then files are properly included in iTunes/iCloud backups as default. So far, so good.\r\n\r\nIf however, like I did in my project, you manually set remoteBackup = true or call setRemoteBackup(true) on a file to doubly make sure it gets backed up, it actually becomes excluded.\r\n\r\nI've had reports from users that their copy of my app (live on the App Store) was not fully restoring their data from a backup. The files I'd set the flag = true on were some .png's in /Documents and a SQLite database in /Library/Private Documents, but I think the problem is evident for any files.\r\n\r\nI delved into the SDK code for 5.2.1 and located remoteBackup in TiFilesystemFileProxy.m - after a bit of Googling I noticed that how the method works by calling \r\n{code:java}\r\nsetxattr()\r\n{code}\r\n is now obsolete. Apple states that from iOS 5.1 you should be doing it this way: [https://developer.apple.com/library/ios/qa/qa1719/_index.html]\r\n\r\nI modified my copy of TiFilesystemFileProxy.m to work this way and next time I called setRemoteBackup(true) the file was properly marked for backup, i.e. {{NSURLIsExcludedFromBackupKey}} is set to {{NO}}.\r\n\r\nI tested this against a local iTunes backup. You can check the contents of an iTunes backup using the Terminal command: \r\n{noformat}\r\n/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/AppleMobileDeviceHelper.app/Contents/Resources/AppleMobileBackup --list\r\n{noformat}\r\n\r\nPrior to my temporary Obj-C code fix my files were not listed in the backup. After adding my fix the files were listed in the backup correctly.\r\n", "attachment": [], "flagged": false, "summary": "iOS: Ti.Filesystem.File.remoteBackup = true doesn't (re)include file to be backed up", "creator": { "name": "pragmateq", "key": "pragmateq", "displayName": "Gary Crook", "active": true, "timeZone": "Europe/London" }, "subtasks": [], "reporter": { "name": "pragmateq", "key": "pragmateq", "displayName": "Gary Crook", "active": true, "timeZone": "Europe/London" }, "environment": "Titanium SDK v5.2.1.GA, Mac OS X El Capitan v10.11.3, Titanium Studio v4.5.0.201602170821", "closedSprints": [ { "id": 614, "state": "closed", "name": "2016 Sprint 07 SDK", "startDate": "2016-03-26T00:38:56.432Z", "endDate": "2016-04-09T00:38:00.000Z", "completeDate": "2016-04-11T04:41:08.231Z", "originBoardId": 114 }, { "id": 649, "state": "closed", "name": "2016 Sprint 13 SDK", "startDate": "2016-06-18T00:25:17.303Z", "endDate": "2016-07-02T00:25:00.000Z", "completeDate": "2016-07-04T04:25:16.889Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "381385", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Hey there! Did I quick follow-up and you are correct! Can you copy-and-paste the following snippet and test it? https://gist.github.com/hansemannn/676a9c7ca35c2f29212d19bddd4a135a\r\n\r\nPR: https://github.com/appcelerator/titanium_mobile/pull/7910\r\n\r\nEDIT: Demo code here:\r\n{code:javascript}\r\nvar BUTTON_TEXT_DISABLE_BACKUP = \"Disable backup\";\r\nvar BUTTON_TEXT_ENABLE_BACKUP = \"Enable backup\";\r\nvar ENABLE_BACKUP = true;\r\n\r\nvar win = Titanium.UI.createWindow({\r\n\tbackgroundColor: \"#fff\"\r\n});\r\n\r\nvar file = Ti.Filesystem.getFile(Ti.Filesystem.getResourcesDirectory(), \"text.txt\");\r\n\r\nvar btn = Ti.UI.createButton({\r\n\ttitle: BUTTON_TEXT_DISABLE_BACKUP\r\n});\r\n\r\nbtn.addEventListener(\"click\", function() {\r\n\tENABLE_BACKUP = !ENABLE_BACKUP;\r\n\t\r\n\tfile.remoteBackup = ENABLE_BACKUP;\r\n\tbtn.setTitle(ENABLE_BACKUP === false ? BUTTON_TEXT_ENABLE_BACKUP : BUTTON_TEXT_DISABLE_BACKUP);\r\n\r\n\tTi.API.warn(\"Backup file? - \" + file.remoteBackup);\r\n});\r\n\r\nwin.add(btn);\r\nwin.open();\r\n{code}", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-04-03T16:53:49.000+0000", "updated": "2016-06-15T20:50:35.000+0000" }, { "id": "381425", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "[~pragmateq] Thanks for the report and the suggested solution! We have implemented the solution but would appreciate very much if you can validate it as well, as requested in the above comment.\r\n\r\nThanks again!", "updateAuthor": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-04-04T07:50:27.000+0000", "updated": "2016-04-04T07:50:27.000+0000" }, { "id": "381760", "author": { "name": "pragmateq", "key": "pragmateq", "displayName": "Gary Crook", "active": true, "timeZone": "Europe/London" }, "body": "Hi, I've just tested in my app and the files appear in iTunes backup log when {{file.setRemoteBackup(true)}} and disappear from iTunes backup log when {{file.setRemoteBackup(false)}}.\r\n\r\nSo looks fixed to me - good work!\r\n\r\nGary.", "updateAuthor": { "name": "pragmateq", "key": "pragmateq", "displayName": "Gary Crook", "active": true, "timeZone": "Europe/London" }, "created": "2016-04-05T15:57:06.000+0000", "updated": "2016-04-05T15:57:06.000+0000" }, { "id": "381805", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Thanks! PR Merged.", "updateAuthor": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-04-05T23:03:05.000+0000", "updated": "2016-04-05T23:03:05.000+0000" }, { "id": "388011", "author": { "name": "mark.henderson@snagr.co.uk", "key": "mark.henderson@snagr.co.uk", "displayName": "Mark Henderson", "active": true, "timeZone": "Europe/London" }, "body": "I think I've just had my app rejected from the App Store because of this 'fix'.\r\n\r\nFor the longest time (since Ti SDK3) I've used the recursive directory version of this to set all files in a folder to being remoteBackup = false. My app has just been rejected using the latest SDK saying that 38mb download was not flagged as being excluded. I've triple checked and this is being set at the directory level.\r\n\r\nI think this needs to be re-opened and checked for the recursive version still working.", "updateAuthor": { "name": "mark.henderson@snagr.co.uk", "key": "mark.henderson@snagr.co.uk", "displayName": "Mark Henderson", "active": true, "timeZone": "Europe/London" }, "created": "2016-06-10T06:12:18.000+0000", "updated": "2016-06-10T06:12:18.000+0000" }, { "id": "388416", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Hey there!\r\n\r\nIt most possibly is the same as mentioned here: http://www.scriptscoop2.com/t/bafdaa0216be/iphone-is-nsurlisexcludedfrombackupkey-recursive.html, so it doesn't apply the flag recursively. I could make the change by looping through the directory and setting the flag there, could you be my tester for that? Thanks!", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-06-15T20:20:36.000+0000", "updated": "2016-06-15T20:20:36.000+0000" }, { "id": "388419", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Update: Here is my example code to create a directory with 20 sub-directories, as well as one file in it (to cover all possible scenarios - skipping if empty).\r\n\r\n*Demo*: https://gist.github.com/hansemannn/496308a44dcbeffb8ecf1973a69246bf\r\n*Output*: https://gist.github.com/hansemannn/0e5c0b704eb3056c7f16a33007096adb\r\n*Updated PR*: https://github.com/appcelerator/titanium_mobile/pull/8069\r\n\r\n[~mark.henderson@snagr.co.uk] Please give it a try!\r\n[~cng] Backport for 5.4.0 as soon as the fix is approved, thanks!", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-06-15T20:48:04.000+0000", "updated": "2016-06-15T20:51:51.000+0000" }, { "id": "389225", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "CR and FT passed.\r\nbackport please.", "updateAuthor": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-06-28T05:26:33.000+0000", "updated": "2016-06-28T05:26:33.000+0000" }, { "id": "389227", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "PR (5_4_X): https://github.com/appcelerator/titanium_mobile/pull/8093", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-06-28T05:33:07.000+0000", "updated": "2016-06-28T05:33:07.000+0000" }, { "id": "389228", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "PRs merged!", "updateAuthor": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-06-28T05:36:38.000+0000", "updated": "2016-06-28T05:36:38.000+0000" }, { "id": "391754", "author": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "body": "[~hansknoechel]\r\n\r\nUsing SDK 5.4.0, I was able to verify this fix while checking the contents of the iTunes backup:\r\n\r\n*SDK 5.3.1.GA*\r\n{code}\r\n~$ /System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/AppleMobileDeviceHelper.app/Contents/Resources/AppleMobileBackup --list | grep monkey\r\n22870661f618793e090af88c0e9b9023798a1558, , 040755, 280315, 501, 501, 2016-07-27 16:27:49, 2016-07-27 16:27:49, 2016-07-27 16:27:48, 0, 0, AppDomain-com.appc.monkey23141, , , {}\r\n6ed03f8f331c382978462ac803f8a52b32155aae, , 040755, 280317, 501, 501, 2016-07-27 16:27:53, 2016-07-27 16:27:53, 2016-07-27 16:27:48, 0, 0, AppDomain-com.appc.monkey23141, Library, , {}\r\n0f4f06ba97e3bfbde29378ac8bc8d11129b37c39, , 040755, 280319, 501, 501, 2016-07-27 16:27:53, 2016-07-27 16:27:53, 2016-07-27 16:27:48, 0, 0, AppDomain-com.appc.monkey23141, Library/Preferences, , {}\r\nd7bee81b20af6ad37109193d28725a9b9348239a, , 040700, 280350, 501, 501, 2016-07-27 16:27:53, 2016-07-27 16:27:53, 2016-07-27 16:27:53, 0, 0, AppDomain-com.appc.monkey23141, Library/Application Support, , {}\r\nd23e95268734bb5aa09c48e52df9c113b5063e0b, , 040755, 280351, 501, 501, 2016-07-27 16:27:59, 2016-07-27 16:27:59, 2016-07-27 16:27:53, 0, 0, AppDomain-com.appc.monkey23141, Library/Application Support/analytics, , {}\r\n151cc899fdb8620d3c556ad2d3b1ba29acb04e1e, , 040755, 280316, 501, 501, 2016-07-27 16:27:53, 2016-07-27 16:27:53, 2016-07-27 16:27:48, 0, 0, AppDomain-com.appc.monkey23141, Documents, , {}\r\n895b94c59cd082f83bf46c4b7e339f79a35733a9, , 100644, 280352, 501, 501, 2016-07-27 16:27:59, 2016-07-27 16:27:59, 2016-07-27 16:27:53, 24576, 3, AppDomain-com.appc.monkey23141, Library/Application Support/analytics/analytics.db, , {}\r\n9a6ca76b6d99e0aad09e6a9e57dd21f65a07830c, , 100600, 280357, 501, 501, 2016-07-27 16:27:53, 2016-07-27 16:27:53, 2016-07-27 16:27:53, 109, 3, AppDomain-com.appc.monkey23141, Library/Preferences/com.appc.monkey23141.plist, , {}\r\n{code}\r\n\r\n*SDK 5.4.0.v20160727143921*\r\n{code}\r\n~$ /System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/AppleMobileDeviceHelper.app/Contents/Resources/AppleMobileBackup --list | grep monkey\r\n22870661f618793e090af88c0e9b9023798a1558, , 040755, 280601, 501, 501, 2016-07-27 16:34:40, 2016-07-27 16:34:40, 2016-07-27 16:34:40, 0, 0, AppDomain-com.appc.monkey23141, , , {}\r\n6ed03f8f331c382978462ac803f8a52b32155aae, , 040755, 280603, 501, 501, 2016-07-27 16:34:45, 2016-07-27 16:34:45, 2016-07-27 16:34:40, 0, 0, AppDomain-com.appc.monkey23141, Library, , {}\r\n0f4f06ba97e3bfbde29378ac8bc8d11129b37c39, , 040755, 280605, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:40, 0, 0, AppDomain-com.appc.monkey23141, Library/Preferences, , {}\r\nd7bee81b20af6ad37109193d28725a9b9348239a, , 040700, 280636, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:45, 0, 0, AppDomain-com.appc.monkey23141, Library/Application Support, , {}\r\nd23e95268734bb5aa09c48e52df9c113b5063e0b, , 040755, 280637, 501, 501, 2016-07-27 16:34:51, 2016-07-27 16:34:51, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Library/Application Support/analytics, , {}\r\n151cc899fdb8620d3c556ad2d3b1ba29acb04e1e, , 040755, 280602, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:40, 0, 0, AppDomain-com.appc.monkey23141, Documents, , {}\r\n02cfa62a76162a3a125f9c66715169be2d9ad500, , 040755, 280640, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test, , {}\r\nfb3e8b20e445371ac012d9d23e8d54eff27abbaf, , 040755, 280654, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-9, , {}\r\n5129205339ca5f801bf5d979844993a50dda9ad5, , 040755, 280652, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-8, , {}\r\ne5b071399cab517d9764a96509eb544cef73a964, , 040755, 280651, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-7, , {}\r\n855f84841d7b064ae1a21a20c487a2d1b3a603f3, , 040755, 280650, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-6, , {}\r\na444ebbe50bb09db218c8f63c5503ef36c9809d0, , 040755, 280647, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-5, , {}\r\n18781ad541d8bd8ed57bd40d9447a48eff6d9de9, , 040755, 280646, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-4, , {}\r\nc55dddf94a8c134f003260228647c665953a8fbc, , 040755, 280645, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-3, , {}\r\nfd992165964ffa2c5e702863e07059544bf7792e, , 040755, 280644, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-2, , {}\r\nb96c2f528e5350a7aa5f23fa7ff548128d57d5f5, , 040755, 280666, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-19, , {}\r\nb2963b87ed7e2024b5e5484fd353c4e5ec339add, , 040755, 280665, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-18, , {}\r\ncc015046ebcc230b3d2304895e9b5d33a9b511df, , 040755, 280664, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-17, , {}\r\nbf2512085088ff00074d2452e51e25f64ad3313f, , 040755, 280663, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-16, , {}\r\n4c23766f6005324fc1bf9e2ba487d7ec61bd2977, , 040755, 280662, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-15, , {}\r\nc40a112b39d36ea69ec339df5cb88b3b6ca938be, , 040755, 280660, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-14, , {}\r\n5e9097f2624463a824f5bb5f0d5d5cb2bed79d8e, , 040755, 280659, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-13, , {}\r\n69dc820940bc06f34b18efa1dcb3b72da175543b, , 040755, 280658, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-12, , {}\r\n8aa48200adcd61f250c78f96f9f107499fd6ff92, , 040755, 280657, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-11, , {}\r\nd75c9d0ca7774a573086b1c0bfb7125fbbb587e4, , 040755, 280655, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-10, , {}\r\n5cc5e65dc08c83c94f3c482ee48d4fe18cf10b23, , 040755, 280643, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-1, , {}\r\n3b4752145b2ebdc03d23885f706b1fff6cfe4ef9, , 040755, 280642, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 0, 0, AppDomain-com.appc.monkey23141, Documents/test/subDirectory-0, , {}\r\n9a6ca76b6d99e0aad09e6a9e57dd21f65a07830c, , 100600, 280649, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 109, 3, AppDomain-com.appc.monkey23141, Library/Preferences/com.appc.monkey23141.plist, , {}\r\n895b94c59cd082f83bf46c4b7e339f79a35733a9, , 100644, 280638, 501, 501, 2016-07-27 16:34:51, 2016-07-27 16:34:51, 2016-07-27 16:34:46, 24576, 3, AppDomain-com.appc.monkey23141, Library/Application Support/analytics/analytics.db, , {}\r\n3c5c77fbc858a4bffdaf6162602647fe04e1c0c8, , 100644, 280669, 501, 501, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 2016-07-27 16:34:46, 17, 1, AppDomain-com.appc.monkey23141, Documents/test/file.txt, , {}\r\n~$ \r\n{code}\r\n\r\n*However,* this log message keeps appearing every time I use {{setRemoteBackup}}: {{\\[INFO\\] CFURLSetResourcePropertyForKey failed because it was passed an URL which has no scheme}}. Did a Google search and found this stackoverflow link: http://stackoverflow.com/questions/12928509/cfurlsetresourcepropertyforkey-failed-when-disable-data-backup-on-nsdocumentdire, which seems to be done here: https://github.com/appcelerator/titanium_mobile/pull/8093/files#diff-7c1c034158d43375ccc8ec33c21f4257R513. Should we be concerned about that log message?\r\n\r\n*Tested on:*\r\n\r\nAppc CLI NPM: 4.2.7\r\nAppc CLI Core: 5.4.0-35\r\nArrow: 1.8.2\r\nSDK: 5.4.0.v20160727143921\r\nNode: v4.4.7\r\nOS: Mac OS X (10.11.6)\r\nXcode: 7.3.1\r\nDevice: iphone 5 (9.1)\r\n\r\nAlso, had to modify your demo code a bit:\r\n{code}\r\nvar useBackup = false;\r\n\r\nvar win = Ti.UI.createWindow({\r\n backgroundColor: \"#fff\"\r\n});\r\n\r\nvar btn = Ti.UI.createButton({\r\n title: \"Toggle remote backhup\"\r\n});\r\n\r\nvar dir = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, \"test\");\r\n\r\nif (!dir.exists()) {\r\n Ti.API.info(\"### Recursive directory does not exist, yet\");\r\n\r\n var newDir = dir.createDirectory();\r\n if (!newDir) {\r\n Ti.API.error(\"### Root directory could not be created\");\r\n }\r\n else {\r\n for (var i = 0; i < 20; i++) {\r\n var tmp = Ti.Filesystem.getFile(dir.nativePath, \"subDirectory-\" + i);\r\n if (!tmp.createDirectory()) {\r\n Ti.API.error(\"### Subdirectory \" + i + \" could not be created!\");\r\n }\r\n else {\r\n Ti.API.warn(\"### Subdirectory \" + i + \" is created!\");\r\n }\r\n }\r\n\r\n var newFile = Ti.Filesystem.getFile(dir.nativePath, \"file.txt\");\r\n if (!newFile.write('i am a monkeylord')) {\r\n Ti.API.error(\"### File could not be created!\");\r\n }\r\n else {\r\n Ti.API.warn(\"### File is created!\");\r\n }\r\n }\r\n}\r\nelse {\r\n Ti.API.info(\"### Recursive directory already exists\");\r\n}\r\n\r\n// Ti.API.warn('### setting remoteBackup property to true');\r\n// dir.remoteBackup = true;\r\n\r\nbtn.addEventListener(\"click\", function() {\r\n useBackup = !useBackup;\r\n Ti.API.info('### useBackup ' + useBackup);\r\n dir.setRemoteBackup(useBackup);\r\n});\r\n\r\nwin.add(btn);\r\nwin.open();\r\n{code}", "updateAuthor": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-07-28T00:01:31.000+0000", "updated": "2016-07-28T00:01:31.000+0000" }, { "id": "391881", "author": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Will close ticket as fixed as per my above comment. Will file another ticket for the {{[INFO] CFURLSetResourcePropertyForKey failed because it was passed an URL which has no scheme}} message.", "updateAuthor": { "name": "wluu", "key": "wluu", "displayName": "Wilson Luu", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-07-28T19:40:21.000+0000", "updated": "2016-07-28T19:40:21.000+0000" } ], "maxResults": 13, "total": 13, "startAt": 0 } } }