Return-Path: X-Original-To: apmail-incubator-callback-dev-archive@minotaur.apache.org Delivered-To: apmail-incubator-callback-dev-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 348BCD1A3 for ; Fri, 19 Oct 2012 19:30:44 +0000 (UTC) Received: (qmail 10910 invoked by uid 500); 19 Oct 2012 19:30:44 -0000 Delivered-To: apmail-incubator-callback-dev-archive@incubator.apache.org Received: (qmail 10881 invoked by uid 500); 19 Oct 2012 19:30:44 -0000 Mailing-List: contact callback-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: callback-dev@incubator.apache.org Delivered-To: mailing list callback-dev@incubator.apache.org Received: (qmail 10873 invoked by uid 99); 19 Oct 2012 19:30:43 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 19 Oct 2012 19:30:43 +0000 X-ASF-Spam-Status: No, hits=0.3 required=5.0 tests=FREEMAIL_REPLY,RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of shazron@gmail.com designates 209.85.220.175 as permitted sender) Received: from [209.85.220.175] (HELO mail-vc0-f175.google.com) (209.85.220.175) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 19 Oct 2012 19:30:37 +0000 Received: by mail-vc0-f175.google.com with SMTP id p1so873014vcq.6 for ; Fri, 19 Oct 2012 12:30:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=sSU9QYwoev7NB8g3yxkd/QOaQhobSTYYqbKvyJ4XDZw=; b=YRMkoiOednwhjBwpVZhCZJBK/tvMnECn032FZhEgLSMBPtZagMf9vr11+eHjQG5aPE /8vCiP6InJP9ouXH1K+t09aLXccW9WSn0nm4tvXClnqkuhDjHKq9bOq9TFU0KI/kJ0EG 19H4p6hTVGXFdewBhcZsaOm4wPkkNcXDByOjccd24DLFpD5QbGpzbyXE8UMi/fHSPNy4 d7dqCt+DOJqWSza65MSflGh10rJ6ekSQVqq9ctF3xKmEM8g59+mSY6LsLuwVooB7ZRJj +nXDa8jkyTBiTfUdCbJJuU7Y3gS86oP5y2MR29RlZtC6r1gg/7XviRJaUvM6NZ3zomWP Pqfw== Received: by 10.52.75.196 with SMTP id e4mr2337351vdw.93.1350675016853; Fri, 19 Oct 2012 12:30:16 -0700 (PDT) MIME-Version: 1.0 Received: by 10.58.211.232 with HTTP; Fri, 19 Oct 2012 12:29:36 -0700 (PDT) In-Reply-To: References: From: Shazron Date: Fri, 19 Oct 2012 12:29:36 -0700 Message-ID: Subject: Re: IOS6 LocalStorage filesystem target location. To: Michal Mocny Cc: callback-dev@incubator.apache.org, Shazron Abdullah Content-Type: text/plain; charset=ISO-8859-1 X-Virus-Checked: Checked by ClamAV on apache.org I'd rather go with a string based value (an example - Apple uses it for their spinner "color" value) -- this is more clear. Since this is a property type change -- we should handle the case where the user still used the old Boolean type and appropriately map it to the new type, and print out a warning to the console for deprecation. On Fri, Oct 19, 2012 at 8:01 AM, Michal Mocny wrote: > Also, I really hate using a magic number here. Is there a canonical > way to implement "enum" type in plist file? A few google searches do > not yield anything sane. > > Would it be more descriptive to use a string setting with values such > as "none", "local", "cloud"? > > On Fri, Oct 19, 2012 at 10:35 AM, Michal Mocny wrote: >> Yes, thats the conclusion I've made now, too. I figure the app >> developer can decide how he wants to take his changes with the review >> process, and at least one user was very vocal to have this feature. >> >> Locally, I created a second setting instead of changing the format of >> the current one, but I guess I'm fine with changing it in place as you >> suggest, especially since I suspect no-one changed the default of the >> current one (why would you?). >> >> There is one more potential combination that may be needed, but I am >> not sure if it is worth the effort: backup to iCloud on ios6 only. >> >> Potentially apple will reject backing up a copy of webstorage to >> icloud on ios5.1, while at the same time we may still want to disable >> CDVLocalStorage plugin on ios6, thus backing up to cloud on ios6 but >> not 5.1. Should I account for that, or leave it all-or-nothing and >> punt for future releases if it becomes a problem? >> >> On Fri, Oct 19, 2012 at 10:10 AM, Andrew Grieve wrote: >>> I don't think we should read too much into the app rejection related to >>> this. These things are often app-specific and not a result of a rule >>> cordova itself doing something wrong. >>> >>> Proposal: >>> We already have a setting for this in cordova.plist, as described here: >>> https://github.com/apache/incubator-cordova-docs/blob/master/docs/en/edge/guide/project-settings/ios/index.md >>> >>> Right now, it's a BOOL, how about we change it to an int and have: >>> 0 - Do not back up - Users should use this only when their DB/LocalStorage >>> is a cache >>> 1 - Backup to iCloud (by setting the NSUserDefaults key) >>> 2 - Backup to Device only (and ensure to set the >>> NSURLIsExcludedFromBackupKey) >>> >>> Option 2 would probably not be used much, but may be useful to have in case >>> of app rejections. >>> I think #1 should be the default. It's better to have things safe by >>> default, and have apps get rejected than to have them get through the >>> app-store and have their users hate them when data loss happens. >>> >>> >>> >>> >>> >>> On Thu, Oct 18, 2012 at 2:57 PM, Michal Mocny wrote: >>> >>>> Andrew: Yes, I was also thinking of advising to use FileSystem API for >>>> things they want to backup to iCloud. >>>> >>>> On Thu, Oct 18, 2012 at 1:55 PM, Shazron wrote: >>>> > To recap: >>>> > >>>> > iOS 6 indeed does solve this problem with the NSUserDefaults key >>>> > "WebKitStoreWebDataForBackup" - which I think the web data is stored >>>> > in Library/Caches as changed by iOS 5.1. >>>> >>>> What do you mean by "ios6 does solve this problem"? >>>> >>>> The WebKitStoreWebDataForBackup flag changes the LocalStorage location >>>> from /Library/Caches to /Library/WebKit/LocalStorage (ie, back to >>>> where it was before ios5.1 moved it to Cache folder). Setting this >>>> flag means LocalStorage persists (great) but also backs up to iCloud >>>> (may not be desired -- and arguably should never be desired). >>>> >>>> > >>>> > iOS 5.1 it is stored in Library/Caches thus it is not backed up - >>>> > that's why we backed it up to the Documents/Backups folder (and backed >>>> > up/restore to /Library/Caches). We do _not_ set the >>>> > NSURLIsExcludedFromBackupKey on the Documents/Backups folder, if the >>>> > dev wanted to, they can do so using the File API's >>>> > FileEntry.setMetadata function. >>>> >>>> Correct -- and I did not know that we can use FileEntry.setMetadata >>>> for this. I'll look into it, thanks! >>>> >>>> > >>>> > CB-1561 (Apple rejection) could be solved by them setting the metadata >>>> > bit. But if they want it to be backed up by iCloud they shouldn't do >>>> > set that bit - but then if they _don't_ set that bit -- rejection. >>>> >>>> If not setting that bit causes rejection, then seems we should just >>>> set it by default. Somehow apps have managed to sneak by the review >>>> process until now (perhaps the changes to ios6 have changed the review >>>> process?). >>>> >>>> > >>>> > Upgrading from iOS 5.1 to 6 shouldn't be a problem since ultimately >>>> > the database locations are still in Library/Caches -- we just need to >>>> > set the NSUserDefaults key. >>>> >>>> If we set the NSUserDefaults key, the database location does change. >>>> Possibly this migration is provided by default (otherwise all webview >>>> apps would lose old data with manual restore), but we still need to >>>> restore our custom ios5.1 backup for first-launch-after-upgrade case. >>>> This has been implemented already in 2.1, though there were some >>>> issues+bugfixes. >>>> >>>> > >>>> > This is solved by iOS 6, but we don't have a clear answer for iOS 5.1 >>>> > (besides upgrading to iOS 6) -- our original fix is not tenable >>>> > anymore ( >>>> http://phonegap.com/2012/04/18/ios-5-1-and-the-embedded-uiwebview-with-cordova/ >>>> ) >>>> >>>> While I don't yet see the point of backing up LocalStorage to the >>>> cloud, I will concede that it may be a lesser evil compared to forever >>>> using the LocalStorage Plugin/hack, which is necessary for ios5.1. >>>> >>>> For additional context: we already used the UserDefault setting for >>>> 2.1 release, yet I've reverted back to using the Plugin in current git >>>> version, since I thought iCloud backup was a mistake. >>>> >>>> > >>>> > >>>> > >>>> > >>>> >>>> Summarizing: >>>> - I think we should flag any backups we make with >>>> NSURLIsExcludedFromBackupKey *by default* (ios5.1 must do this, ios6 >>>> depends on decision to use NSUserDefaults). >>>> - ios6 we have a choice (to cloud or not to cloud). Possibly the >>>> choice should be up to the app developer. I now again think we should >>>> backup to iCloud, if only to not need use our plugin, and to not >>>> change behavior from 2.1 (again). >>>> >>>> Additionally: >>>> - The current location of our local backups (Documents folder) is >>>> incorrect. Apple hasn't rejected any apps for this, but it should be >>>> in /Library/Application Support (fixed). >>>> - I've tested restoring localstorage with various upgrade paths, but I >>>> may have just uncovered a bug with restoring websql. >>>> - We should probably document some of this for the 2.2 release. >>>> >>>> > >>>> > On Thu, Oct 18, 2012 at 8:06 AM, Michal Mocny >>>> wrote: >>>> >> So there has been a lot of back and forth recently about where and how >>>> >> to backup localstorage (see: >>>> >> https://issues.apache.org/jira/browse/CB-1561) >>>> >> >>>> >> At least one users wants these to backup to iCloud -- and while I >>>> >> don't see how that makes real sense, the fact that apple added a flag >>>> >> to allow this in ios6 maybe signals we should allow the option. >>>> >> >>>> >> Given that this cannot work on versions less than 5.1, may not be >>>> >> enabled on ios6, and may not work the way developers expect anyway, is >>>> >> there a point? >>>> >> >>>> >> Shaz, would appreciate your opinion here, if you are around. >>>> >> >>>> >> -Michal >>>> >> >>>> >> On Fri, Oct 5, 2012 at 2:23 PM, Michal Mocny >>>> wrote: >>>> >>> Done. >>>> >>> >>>> >>> >>>> https://git-wip-us.apache.org/repos/asf?p=incubator-cordova-ios.git;a=commit;h=6e170879aa37d33701739fc3c28ed9f78156bf1f >>>> >>> >>>> >>> As of today we backup to a different location so as not to upset the >>>> apple >>>> >>> app review overlords, and we do not backup to icloud on ios6 any more. >>>> >>> >>>> >>> I've added support for loading all the various old database locations >>>> the >>>> >>> first time you run an upgraded app, but if there are only issues >>>> reported >>>> >>> about this, send them my way! >>>> >>> >>>> >>> -Michal >>>> >>> >>>> >>> >>>> >>> On Wed, Oct 3, 2012 at 4:43 PM, Dave Johnson >>> > >>>> >>> wrote: >>>> >>>> >>>> >>>> I agree backing up to iCloud seems like a bad idea. Let alone the >>>> >>>> Apple policy issues. >>>> >>>> >>>> >>>> -d >>>> >>>> >>>> >>>> On Wed, Oct 3, 2012 at 10:31 PM, Michal Mocny >>>> wrote: >>>> >>>> > === Background === >>>> >>>> > >>>> >>>> > In IOS5.1 moved these files from the "documents" folder to a "cache" >>>> >>>> > folder, which meant they may get purged when the system decided >>>> memory >>>> >>>> > was >>>> >>>> > geting tight. To get around this, we implemented a manual >>>> >>>> > backup/restore >>>> >>>> > plugin (CDVLocalStorage). (I was not here for this work, piecing >>>> >>>> > history >>>> >>>> > together.) >>>> >>>> > >>>> >>>> > With IOS6, Apply added a new UserDefaults option >>>> >>>> > (WebKitStoreWebDataForBackup) to backup these files onto iCloud, >>>> with >>>> >>>> > the >>>> >>>> > side effect of having persistant local storage without the need for >>>> our >>>> >>>> > backup hacks/plugin. >>>> >>>> > >>>> >>>> > ======== >>>> >>>> > >>>> >>>> > Initially I used this new IOS6 feature as a means to get persistant >>>> >>>> > localstorage (there was a bug to add that when I started >>>> contributing). >>>> >>>> > >>>> >>>> > However, its actually been against apple policy to store these >>>> files in >>>> >>>> > the >>>> >>>> > documents folder, and user apps are being rejected from app store, >>>> see: >>>> >>>> > https://issues.apache.org/jira/browse/CB-1561. >>>> >>>> > >>>> >>>> > More importantly, I don't think we should want to backup these >>>> files to >>>> >>>> > a >>>> >>>> > users' iCloud just to get persistant storage. >>>> >>>> > >>>> >>>> > I think we should re-enable the plugin used for ios5.1 on ios6 and >>>> not >>>> >>>> > backup to iCloud. This may have perf implications but no more-so >>>> than >>>> >>>> > we >>>> >>>> > have already been dealing with until now (and which I haven't >>>> >>>> > benchmarked). >>>> >>>> > >>>> >>>> > What do others think? There are other means to fix the current >>>> issues >>>> >>>> > and >>>> >>>> > continue to use the next setting, so we do have options here. >>>> >>> >>>> >>> >>>>