Merge branch 'wkwebview' into 4.0.x

Project: http://git-wip-us.apache.org/repos/asf/cordova-ios/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-ios/commit/ef66b33c
Tree: http://git-wip-us.apache.org/repos/asf/cordova-ios/tree/ef66b33c
Diff: http://git-wip-us.apache.org/repos/asf/cordova-ios/diff/ef66b33c

Branch: refs/heads/4.0.x
Commit: ef66b33cb4f320bcc071ef233c7a96d874fbe05c
Parents: c0085a8 270002c
Author: Shazron Abdullah <shaz...@gmail.com>
Authored: Fri Mar 6 16:11:37 2015 -0800
Committer: Shazron Abdullah <shaz...@gmail.com>
Committed: Fri Mar 6 16:11:37 2015 -0800

----------------------------------------------------------------------
 CordovaLib/Classes/CDV.h                        |   3 +-
 CordovaLib/Classes/CDVAvailability.h            |   3 +-
 CordovaLib/Classes/CDVCommandDelegate.h         |   3 +
 CordovaLib/Classes/CDVCommandDelegateImpl.m     |  23 +-
 CordovaLib/Classes/CDVCommandQueue.m            |  33 +-
 CordovaLib/Classes/CDVHandleOpenURL.m           |  30 +-
 CordovaLib/Classes/CDVPlugin.h                  |  17 +-
 CordovaLib/Classes/CDVPlugin.m                  |  48 ++-
 CordovaLib/Classes/CDVPluginResult.m            |   2 +-
 CordovaLib/Classes/CDVUIWebViewDelegate.h       |  41 ++
 CordovaLib/Classes/CDVUIWebViewDelegate.m       | 412 +++++++++++++++++++
 CordovaLib/Classes/CDVUIWebViewEngine.h         |  27 ++
 CordovaLib/Classes/CDVUIWebViewEngine.m         | 181 ++++++++
 CordovaLib/Classes/CDVViewController.h          |   8 +-
 CordovaLib/Classes/CDVViewController.m          | 309 +++++---------
 CordovaLib/Classes/CDVWebViewDelegate.h         |  41 --
 CordovaLib/Classes/CDVWebViewDelegate.m         | 412 -------------------
 CordovaLib/Classes/CDVWebViewEngineProtocol.h   |  39 ++
 .../Classes/NSDictionary+CordovaPreferences.h   |  35 ++
 .../Classes/NSDictionary+CordovaPreferences.m   |  63 +++
 CordovaLib/CordovaLib.xcodeproj/project.pbxproj |  57 ++-
 CordovaLib/cordova.js                           |  10 +-
 .../project/__CLI__.xcodeproj/project.pbxproj   |   4 +
 .../__NON-CLI__.xcodeproj/project.pbxproj       |   4 +
 bin/templates/project/www/index.html            |   2 +-
 bin/templates/scripts/cordova/lib/list-devices  |   2 +-
 tests/CordovaLibTests/CDVStartPageTests.m       |  14 +-
 tests/CordovaLibTests/CDVUserAgentTest.m        |  52 ++-
 tests/CordovaLibTests/CDVWebViewDelegateTests.m |  10 +-
 tests/CordovaLibTests/CDVWebViewTest.m          |   6 +-
 30 files changed, 1132 insertions(+), 759 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/ef66b33c/CordovaLib/Classes/CDV.h
----------------------------------------------------------------------
diff --cc CordovaLib/Classes/CDV.h
index fa61a72,146e57b..7d5ec3f
--- a/CordovaLib/Classes/CDV.h
+++ b/CordovaLib/Classes/CDV.h
@@@ -19,16 -19,29 +19,17 @@@
  
  #import "CDVAvailability.h"
  #import "CDVAvailabilityDeprecated.h"
 +#import "CDVPlugin.h"
 +#import "CDVPluginResult.h"
 +#import "CDVViewController.h"
  #import "CDVCommandDelegate.h"
 -#import "CDVCommandDelegateImpl.h"
 -#import "CDVCommandQueue.h"
 -#import "CDVConfigParser.h"
 -#import "CDVDebug.h"
 +#import "CDVURLProtocol.h"
  #import "CDVInvokedUrlCommand.h"
 -#import "CDVJSON.h"
 +#import "CDVWhitelist.h"
  #import "CDVLocalStorage.h"
+ #import "CDVPlugin.h"
+ #import "CDVPluginResult.h"
  #import "CDVScreenOrientationDelegate.h"
 -#import "CDVShared.h"
  #import "CDVTimer.h"
 -#import "CDVUIWebViewDelegate.h"
 -#import "CDVUIWebViewEngine.h"
 -#import "CDVURLProtocol.h"
  #import "CDVUserAgentUtil.h"
- #import "CDVWebViewDelegate.h"
 -#import "CDVViewController.h"
 -#import "CDVWebViewEngineProtocol.h"
 -#import "CDVWhitelist.h"
 -#import "NSArray+Comparisons.h"
  #import "NSData+Base64.h"
 -#import "NSDictionary+CordovaPreferences.h"
 -#import "NSDictionary+Extensions.h"
 -#import "NSMutableArray+QueueAdditions.h"
 -#import "UIDevice+Extensions.h"

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/ef66b33c/CordovaLib/Classes/CDVCommandQueue.m
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/ef66b33c/CordovaLib/Classes/CDVUIWebViewDelegate.m
----------------------------------------------------------------------
diff --cc CordovaLib/Classes/CDVUIWebViewDelegate.m
index 0000000,929138f..a248245
mode 000000,100644..100644
--- a/CordovaLib/Classes/CDVUIWebViewDelegate.m
+++ b/CordovaLib/Classes/CDVUIWebViewDelegate.m
@@@ -1,0 -1,411 +1,412 @@@
+ /*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+ 
+  http://www.apache.org/licenses/LICENSE-2.0
+ 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  */
+ 
+ //
+ // Testing shows:
+ //
+ // In all cases, webView.request.URL is the previous page's URL (or empty) 
during the didStartLoad callback.
+ // When loading a page with a redirect:
+ // 1. shouldStartLoading (requestURL is target page)
+ // 2. didStartLoading
+ // 3. shouldStartLoading (requestURL is redirect target)
+ // 4. didFinishLoad (request.URL is redirect target)
+ //
+ // Note the lack of a second didStartLoading **
+ //
+ // When loading a page with iframes:
+ // 1. shouldStartLoading (requestURL is main page)
+ // 2. didStartLoading
+ // 3. shouldStartLoading (requestURL is one of the iframes)
+ // 4. didStartLoading
+ // 5. didFinishLoad
+ // 6. didFinishLoad
+ //
+ // Note there is no way to distinguish which didFinishLoad maps to which 
didStartLoad **
+ //
+ // Loading a page by calling window.history.go(-1):
+ // 1. didStartLoading
+ // 2. didFinishLoad
+ //
+ // Note the lack of a shouldStartLoading call **
+ // Actually - this is fixed on iOS6. iOS6 has a shouldStart. **
+ //
+ // Loading a page by calling location.reload()
+ // 1. shouldStartLoading
+ // 2. didStartLoading
+ // 3. didFinishLoad
+ //
+ // Loading a page with an iframe that fails to load:
+ // 1. shouldStart (main page)
+ // 2. didStart
+ // 3. shouldStart (iframe)
+ // 4. didStart
+ // 5. didFailWithError
+ // 6. didFinish
+ //
+ // Loading a page with an iframe that fails to load due to an invalid URL:
+ // 1. shouldStart (main page)
+ // 2. didStart
+ // 3. shouldStart (iframe)
+ // 5. didFailWithError
+ // 6. didFinish
+ //
+ // This case breaks our logic since there is a missing didStart. To prevent 
this,
+ // we check URLs in shouldStart and return NO if they are invalid.
+ //
+ // Loading a page with an invalid URL
+ // 1. shouldStart (main page)
+ // 2. didFailWithError
+ //
+ // TODO: Record order when page is re-navigated before the first navigation 
finishes.
+ //
+ 
+ #import "CDVUIWebViewDelegate.h"
+ 
+ // #define VerboseLog NSLog
 -#define VerboseLog(...) do {} while (0)
++#define VerboseLog(...) do { \
++} while (0)
+ 
+ typedef enum {
+     STATE_IDLE = 0,
+     STATE_WAITING_FOR_LOAD_START = 1,
+     STATE_WAITING_FOR_LOAD_FINISH = 2,
+     STATE_IOS5_POLLING_FOR_LOAD_START = 3,
+     STATE_IOS5_POLLING_FOR_LOAD_FINISH = 4,
+     STATE_CANCELLED = 5
+ } State;
+ 
+ static NSString *stripFragment(NSString* url)
+ {
+     NSRange r = [url rangeOfString:@"#"];
+ 
+     if (r.location == NSNotFound) {
+         return url;
+     }
+     return [url substringToIndex:r.location];
+ }
+ 
+ @implementation CDVUIWebViewDelegate
+ 
+ - (id)initWithDelegate:(NSObject <UIWebViewDelegate>*)delegate
+ {
+     self = [super init];
+     if (self != nil) {
+         _delegate = delegate;
+         _loadCount = -1;
+         _state = STATE_IDLE;
+     }
+     return self;
+ }
+ 
+ - (BOOL)request:(NSURLRequest*)newRequest 
isEqualToRequestAfterStrippingFragments:(NSURLRequest*)originalRequest
+ {
+     if (originalRequest.URL && newRequest.URL) {
+         NSString* originalRequestUrl = [originalRequest.URL absoluteString];
+         NSString* newRequestUrl = [newRequest.URL absoluteString];
+ 
+         NSString* baseOriginalRequestUrl = stripFragment(originalRequestUrl);
+         NSString* baseNewRequestUrl = stripFragment(newRequestUrl);
+         return [baseOriginalRequestUrl isEqualToString:baseNewRequestUrl];
+     }
+ 
+     return NO;
+ }
+ 
+ - (BOOL)isPageLoaded:(UIWebView*)webView
+ {
+     NSString* readyState = [webView 
stringByEvaluatingJavaScriptFromString:@"document.readyState"];
+ 
+     return [readyState isEqualToString:@"loaded"] || [readyState 
isEqualToString:@"complete"];
+ }
+ 
+ - (BOOL)isJsLoadTokenSet:(UIWebView*)webView
+ {
+     NSString* loadToken = [webView 
stringByEvaluatingJavaScriptFromString:@"window.__cordovaLoadToken"];
+ 
+     return [[NSString stringWithFormat:@"%ld", (long)_curLoadToken] 
isEqualToString:loadToken];
+ }
+ 
+ - (void)setLoadToken:(UIWebView*)webView
+ {
+     _curLoadToken += 1;
+     [webView stringByEvaluatingJavaScriptFromString:[NSString 
stringWithFormat:@"window.__cordovaLoadToken=%ld", (long)_curLoadToken]];
+ }
+ 
+ - (NSString*)evalForCurrentURL:(UIWebView*)webView
+ {
+     return [webView stringByEvaluatingJavaScriptFromString:@"location.href"];
+ }
+ 
+ - (void)pollForPageLoadStart:(UIWebView*)webView
+ {
+     if (_state != STATE_IOS5_POLLING_FOR_LOAD_START) {
+         return;
+     }
+     if (![self isJsLoadTokenSet:webView]) {
+         VerboseLog(@"Polled for page load start. result = YES!");
+         _state = STATE_IOS5_POLLING_FOR_LOAD_FINISH;
+         [self setLoadToken:webView];
+         if ([_delegate respondsToSelector:@selector(webViewDidStartLoad:)]) {
+             [_delegate webViewDidStartLoad:webView];
+         }
+         [self pollForPageLoadFinish:webView];
+     } else {
+         VerboseLog(@"Polled for page load start. result = NO");
+         // Poll only for 1 second, and then fall back on checking only when 
delegate methods are called.
+         ++_loadStartPollCount;
+         if (_loadStartPollCount < (1000 * .05)) {
+             [self performSelector:@selector(pollForPageLoadStart:) 
withObject:webView afterDelay:.05];
+         }
+     }
+ }
+ 
+ - (void)pollForPageLoadFinish:(UIWebView*)webView
+ {
+     if (_state != STATE_IOS5_POLLING_FOR_LOAD_FINISH) {
+         return;
+     }
+     if ([self isPageLoaded:webView]) {
+         VerboseLog(@"Polled for page load finish. result = YES!");
+         _state = STATE_IDLE;
+         if ([_delegate respondsToSelector:@selector(webViewDidFinishLoad:)]) {
+             [_delegate webViewDidFinishLoad:webView];
+         }
+     } else {
+         VerboseLog(@"Polled for page load finish. result = NO");
+         [self performSelector:@selector(pollForPageLoadFinish:) 
withObject:webView afterDelay:.05];
+     }
+ }
+ 
+ - (BOOL)shouldLoadRequest:(NSURLRequest*)request
+ {
+     NSString* scheme = [[request URL] scheme];
+ 
+     if ([scheme isEqualToString:@"mailto"] || [scheme 
isEqualToString:@"tel"]) {
+         return YES;
+     }
+ 
+     return [NSURLConnection canHandleRequest:request];
+ }
+ 
+ - (BOOL)webView:(UIWebView*)webView 
shouldStartLoadWithRequest:(NSURLRequest*)request 
navigationType:(UIWebViewNavigationType)navigationType
+ {
+     BOOL shouldLoad = YES;
+ 
+     if ([_delegate 
respondsToSelector:@selector(webView:shouldStartLoadWithRequest:navigationType:)])
 {
+         shouldLoad = [_delegate webView:webView 
shouldStartLoadWithRequest:request navigationType:navigationType];
+     }
+ 
+     VerboseLog(@"webView shouldLoad=%d (before) state=%d loadCount=%d 
URL=%@", shouldLoad, _state, _loadCount, request.URL);
+ 
+     if (shouldLoad) {
+         // When devtools refresh occurs, it blindly uses the same request 
object. If a history.replaceState() has occured, then
+         // mainDocumentURL != URL even though it's a top-level navigation.
+         BOOL isDevToolsRefresh = (request == webView.request);
+         BOOL isTopLevelNavigation = isDevToolsRefresh || [request.URL 
isEqual:[request mainDocumentURL]];
+         if (isTopLevelNavigation) {
+             // Ignore hash changes that don't navigate to a different page.
+             // webView.request does actually update when 
history.replaceState() gets called.
+             if ([self request:request 
isEqualToRequestAfterStrippingFragments:webView.request]) {
+                 NSString* prevURL = [self evalForCurrentURL:webView];
+                 if ([prevURL isEqualToString:[request.URL absoluteString]]) {
+                     VerboseLog(@"Page reload detected.");
+                 } else {
+                     VerboseLog(@"Detected hash change shouldLoad");
+                     return shouldLoad;
+                 }
+             }
+ 
+             switch (_state) {
+                 case STATE_WAITING_FOR_LOAD_FINISH:
+                     // Redirect case.
+                     // We expect loadCount == 1.
+                     if (_loadCount != 1) {
+                         NSLog(@"CDVWebViewDelegate: Detected redirect when 
loadCount=%ld", (long)_loadCount);
+                     }
+                     break;
+ 
+                 case STATE_IDLE:
+                 case STATE_IOS5_POLLING_FOR_LOAD_START:
+                 case STATE_CANCELLED:
+                     // Page navigation start.
+                     _loadCount = 0;
+                     _state = STATE_WAITING_FOR_LOAD_START;
+                     break;
+ 
+                 default:
+                     {
+                         _loadCount = 0;
+                         _state = STATE_WAITING_FOR_LOAD_START;
+                         NSString* description = [NSString 
stringWithFormat:@"CDVWebViewDelegate: Navigation started when state=%ld", 
(long)_state];
+                         NSLog(@"%@", description);
+                         if ([_delegate 
respondsToSelector:@selector(webView:didFailLoadWithError:)]) {
+                             NSDictionary* errorDictionary = 
@{NSLocalizedDescriptionKey : description};
+                             NSError* error = [[NSError alloc] 
initWithDomain:@"CDVUIWebViewDelegate" code:1 userInfo:errorDictionary];
+                             [_delegate webView:webView 
didFailLoadWithError:error];
+                         }
+                     }
+             }
+         } else {
+             // Deny invalid URLs so that we don't get the case where we go 
straight from
+             // webViewShouldLoad -> webViewDidFailLoad (messes up _loadCount).
+             shouldLoad = shouldLoad && [self shouldLoadRequest:request];
+         }
+         VerboseLog(@"webView shouldLoad=%d (after) isTopLevelNavigation=%d 
state=%d loadCount=%d", shouldLoad, isTopLevelNavigation, _state, _loadCount);
+     }
+     return shouldLoad;
+ }
+ 
+ - (void)webViewDidStartLoad:(UIWebView*)webView
+ {
+     VerboseLog(@"webView didStartLoad (before). state=%d loadCount=%d", 
_state, _loadCount);
+     BOOL fireCallback = NO;
+     switch (_state) {
+         case STATE_IDLE:
+             if (IsAtLeastiOSVersion(@"6.0")) {
+                 break;
+             }
+             // If history.go(-1) is used pre-iOS6, the 
shouldStartLoadWithRequest function is not called.
+             // Without shouldLoad, we can't distinguish an iframe from a 
top-level navigation.
+             // We could try to distinguish using [UIWebView canGoForward], 
but that's too much complexity,
+             // and would work only on the first time it was used.
+ 
+             // Our work-around is to set a JS variable and poll until it 
disappears (from a navigation).
+             _state = STATE_IOS5_POLLING_FOR_LOAD_START;
+             _loadStartPollCount = 0;
+             [self setLoadToken:webView];
+             [self pollForPageLoadStart:webView];
+             break;
+ 
+         case STATE_CANCELLED:
+             fireCallback = YES;
+             _state = STATE_WAITING_FOR_LOAD_FINISH;
+             _loadCount += 1;
+             break;
+ 
+         case STATE_WAITING_FOR_LOAD_START:
+             if (_loadCount != 0) {
+                 NSLog(@"CDVWebViewDelegate: Unexpected loadCount in didStart. 
count=%ld", (long)_loadCount);
+             }
+             fireCallback = YES;
+             _state = STATE_WAITING_FOR_LOAD_FINISH;
+             _loadCount = 1;
+             break;
+ 
+         case STATE_WAITING_FOR_LOAD_FINISH:
+             _loadCount += 1;
+             break;
+ 
+         case STATE_IOS5_POLLING_FOR_LOAD_START:
+             [self pollForPageLoadStart:webView];
+             break;
+ 
+         case STATE_IOS5_POLLING_FOR_LOAD_FINISH:
+             [self pollForPageLoadFinish:webView];
+             break;
+ 
+         default:
+             NSLog(@"CDVWebViewDelegate: Unexpected didStart with state=%ld 
loadCount=%ld", (long)_state, (long)_loadCount);
+     }
+     VerboseLog(@"webView didStartLoad (after). state=%d loadCount=%d 
fireCallback=%d", _state, _loadCount, fireCallback);
+     if (fireCallback && [_delegate 
respondsToSelector:@selector(webViewDidStartLoad:)]) {
+         [_delegate webViewDidStartLoad:webView];
+     }
+ }
+ 
+ - (void)webViewDidFinishLoad:(UIWebView*)webView
+ {
+     VerboseLog(@"webView didFinishLoad (before). state=%d loadCount=%d", 
_state, _loadCount);
+     BOOL fireCallback = NO;
+     switch (_state) {
+         case STATE_IDLE:
+             break;
+ 
+         case STATE_WAITING_FOR_LOAD_START:
+             NSLog(@"CDVWebViewDelegate: Unexpected didFinish while waiting 
for load start.");
+             break;
+ 
+         case STATE_WAITING_FOR_LOAD_FINISH:
+             if (_loadCount == 1) {
+                 fireCallback = YES;
+                 _state = STATE_IDLE;
+             }
+             _loadCount -= 1;
+             break;
+ 
+         case STATE_IOS5_POLLING_FOR_LOAD_START:
+             [self pollForPageLoadStart:webView];
+             break;
+ 
+         case STATE_IOS5_POLLING_FOR_LOAD_FINISH:
+             [self pollForPageLoadFinish:webView];
+             break;
+     }
+     VerboseLog(@"webView didFinishLoad (after). state=%d loadCount=%d 
fireCallback=%d", _state, _loadCount, fireCallback);
+     if (fireCallback && [_delegate 
respondsToSelector:@selector(webViewDidFinishLoad:)]) {
+         [_delegate webViewDidFinishLoad:webView];
+     }
+ }
+ 
+ - (void)webView:(UIWebView*)webView didFailLoadWithError:(NSError*)error
+ {
+     VerboseLog(@"webView didFailLoad (before). state=%d loadCount=%d", 
_state, _loadCount);
+     BOOL fireCallback = NO;
+ 
+     switch (_state) {
+         case STATE_IDLE:
+             break;
+ 
+         case STATE_WAITING_FOR_LOAD_START:
+             if ([error code] == NSURLErrorCancelled) {
+                 _state = STATE_CANCELLED;
+             } else {
+                 _state = STATE_IDLE;
+             }
+             fireCallback = YES;
+             break;
+ 
+         case STATE_WAITING_FOR_LOAD_FINISH:
+             if ([error code] != NSURLErrorCancelled) {
+                 if (_loadCount == 1) {
+                     _state = STATE_IDLE;
+                     fireCallback = YES;
+                 }
+                 _loadCount = -1;
+             } else {
+                 fireCallback = YES;
+                 _state = STATE_CANCELLED;
+                 _loadCount -= 1;
+             }
+             break;
+ 
+         case STATE_IOS5_POLLING_FOR_LOAD_START:
+             [self pollForPageLoadStart:webView];
+             break;
+ 
+         case STATE_IOS5_POLLING_FOR_LOAD_FINISH:
+             [self pollForPageLoadFinish:webView];
+             break;
+     }
+     VerboseLog(@"webView didFailLoad (after). state=%d loadCount=%d, 
fireCallback=%d", _state, _loadCount, fireCallback);
+     if (fireCallback && [_delegate 
respondsToSelector:@selector(webView:didFailLoadWithError:)]) {
+         [_delegate webView:webView didFailLoadWithError:error];
+     }
+ }
+ 
+ @end

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/ef66b33c/CordovaLib/Classes/CDVUIWebViewEngine.m
----------------------------------------------------------------------
diff --cc CordovaLib/Classes/CDVUIWebViewEngine.m
index 0000000,cc15d52..c222e15
mode 000000,100644..100644
--- a/CordovaLib/Classes/CDVUIWebViewEngine.m
+++ b/CordovaLib/Classes/CDVUIWebViewEngine.m
@@@ -1,0 -1,181 +1,181 @@@
+ /*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+ 
+  http://www.apache.org/licenses/LICENSE-2.0
+ 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  */
+ 
+ #import "CDVUIWebViewEngine.h"
+ #import "CDVUIWebViewDelegate.h"
+ #import "NSDictionary+CordovaPreferences.h"
+ 
+ #import <objc/message.h>
+ 
+ @interface CDVUIWebViewEngine ()
+ 
+ @property (nonatomic, strong, readwrite) UIView* engineWebView;
+ @property (nonatomic, strong, readwrite) id <UIWebViewDelegate> 
uiWebViewDelegate;
+ 
+ @end
+ 
+ @implementation CDVUIWebViewEngine
+ 
+ @synthesize engineWebView = _engineWebView;
+ 
+ - (instancetype)initWithFrame:(CGRect)frame
+ {
+     self = [super init];
+     if (self) {
+         self.engineWebView = [[UIWebView alloc] initWithFrame:frame];
+         NSLog(@"Using UIWebView");
+     }
+ 
+     return self;
+ }
+ 
+ - (void)pluginInitialize
+ {
+     // viewController would be available now. we attempt to set all possible 
delegates to it, by default
+ 
+     UIWebView* uiWebView = (UIWebView*)_engineWebView;
+ 
+     if ([self.viewController 
conformsToProtocol:@protocol(UIWebViewDelegate)]) {
+         self.uiWebViewDelegate = [[CDVUIWebViewDelegate alloc] 
initWithDelegate:(id <UIWebViewDelegate>)self.viewController];
+         uiWebView.delegate = self.uiWebViewDelegate;
+     }
+ 
+     [self updateSettings:self.commandDelegate.settings];
+ }
+ 
+ - (void)evaluateJavaScript:(NSString*)javaScriptString 
completionHandler:(void (^)(id, NSError*))completionHandler
+ {
 -    NSString* ret = [(UIWebView*)_engineWebView 
stringByEvaluatingJavaScriptFromString : javaScriptString];
++    NSString* ret = [(UIWebView*)_engineWebView 
stringByEvaluatingJavaScriptFromString:javaScriptString];
+ 
+     if (completionHandler) {
+         completionHandler(ret, nil);
+     }
+ }
+ 
+ - (id)loadRequest:(NSURLRequest*)request
+ {
 -    [(UIWebView*)_engineWebView loadRequest : request];
++    [(UIWebView*)_engineWebView loadRequest:request];
+     return nil;
+ }
+ 
+ - (id)loadHTMLString:(NSString*)string baseURL:(NSURL*)baseURL
+ {
 -    [(UIWebView*)_engineWebView loadHTMLString : string baseURL : baseURL];
++    [(UIWebView*)_engineWebView loadHTMLString:string baseURL:baseURL];
+     return nil;
+ }
+ 
+ - (void)updateSettings:(NSDictionary*)settings
+ {
+     UIWebView* uiWebView = (UIWebView*)_engineWebView;
+ 
+     uiWebView.scalesPageToFit = [settings 
cordovaBoolSettingForKey:@"EnableViewportScale" defaultValue:NO];
+     uiWebView.allowsInlineMediaPlayback = [settings 
cordovaBoolSettingForKey:@"AllowInlineMediaPlayback" defaultValue:NO];
+     uiWebView.mediaPlaybackRequiresUserAction = [settings 
cordovaBoolSettingForKey:@"MediaPlaybackRequiresUserAction" defaultValue:YES];
+     uiWebView.mediaPlaybackAllowsAirPlay = [settings 
cordovaBoolSettingForKey:@"MediaPlaybackAllowsAirPlay" defaultValue:YES];
+     uiWebView.keyboardDisplayRequiresUserAction = [settings 
cordovaBoolSettingForKey:@"KeyboardDisplayRequiresUserAction" defaultValue:YES];
+     uiWebView.suppressesIncrementalRendering = [settings 
cordovaBoolSettingForKey:@"SuppressesIncrementalRendering" defaultValue:NO];
+     uiWebView.gapBetweenPages = [settings 
cordovaFloatSettingForKey:@"GapBetweenPages" defaultValue:0.0];
+     uiWebView.pageLength = [settings cordovaFloatSettingForKey:@"PageLength" 
defaultValue:0.0];
+ 
+     id prefObj = nil;
+ 
+     // By default, DisallowOverscroll is false (thus bounce is allowed)
+     BOOL bounceAllowed = !([settings 
cordovaBoolSettingForKey:@"DisallowOverscroll" defaultValue:NO]);
+ 
+     // prevent webView from bouncing
+     if (!bounceAllowed) {
+         if ([self.webView respondsToSelector:@selector(scrollView)]) {
+             ((UIScrollView*)[uiWebView scrollView]).bounces = NO;
+         } else {
+             for (id subview in self.webView.subviews) {
+                 if ([[subview class] isSubclassOfClass:[UIScrollView class]]) 
{
+                     ((UIScrollView*)subview).bounces = NO;
+                 }
+             }
+         }
+     }
+ 
+     NSString* decelerationSetting = [settings 
cordovaSettingForKey:@"UIWebViewDecelerationSpeed"];
 -    if (![@"fast" isEqualToString : decelerationSetting]) {
++    if (![@"fast" isEqualToString:decelerationSetting]) {
+         [uiWebView.scrollView 
setDecelerationRate:UIScrollViewDecelerationRateNormal];
+     }
+ 
+     NSInteger paginationBreakingMode = 0; // default - 
UIWebPaginationBreakingModePage
+     prefObj = [settings cordovaSettingForKey:@"PaginationBreakingMode"];
+     if (prefObj != nil) {
+         NSArray* validValues = @[@"page", @"column"];
+         NSString* prefValue = [validValues objectAtIndex:0];
+ 
+         if ([prefObj isKindOfClass:[NSString class]]) {
+             prefValue = prefObj;
+         }
+ 
+         paginationBreakingMode = [validValues indexOfObject:[prefValue 
lowercaseString]];
+         if (paginationBreakingMode == NSNotFound) {
+             paginationBreakingMode = 0;
+         }
+     }
+     uiWebView.paginationBreakingMode = paginationBreakingMode;
+ 
+     NSInteger paginationMode = 0; // default - UIWebPaginationModeUnpaginated
+     prefObj = [settings cordovaSettingForKey:@"PaginationMode"];
+     if (prefObj != nil) {
+         NSArray* validValues = @[@"unpaginated", @"lefttoright", 
@"toptobottom", @"bottomtotop", @"righttoleft"];
+         NSString* prefValue = [validValues objectAtIndex:0];
+ 
+         if ([prefObj isKindOfClass:[NSString class]]) {
+             prefValue = prefObj;
+         }
+ 
+         paginationMode = [validValues indexOfObject:[prefValue 
lowercaseString]];
+         if (paginationMode == NSNotFound) {
+             paginationMode = 0;
+         }
+     }
+     uiWebView.paginationMode = paginationMode;
+ }
+ 
+ - (void)updateWithInfo:(NSDictionary*)info
+ {
+     UIWebView* uiWebView = (UIWebView*)_engineWebView;
+ 
+     id <UIWebViewDelegate> uiWebViewDelegate = [info 
objectForKey:kCDVWebViewEngineUIWebViewDelegate];
+     NSDictionary* settings = [info 
objectForKey:kCDVWebViewEngineWebViewPreferences];
+ 
+     if (uiWebViewDelegate &&
+         [uiWebViewDelegate conformsToProtocol:@protocol(UIWebViewDelegate)]) {
+         self.uiWebViewDelegate = [[CDVUIWebViewDelegate alloc] 
initWithDelegate:(id <UIWebViewDelegate>)self.viewController];
+         uiWebView.delegate = self.uiWebViewDelegate;
+     }
+ 
+     if (settings && [settings isKindOfClass:[NSDictionary class]]) {
+         [self updateSettings:settings];
+     }
+ }
+ 
+ // This forwards the methods that are in the header that are not implemented 
here.
+ // Both WKWebView and UIWebView implement the below:
+ //     loadHTMLString:baseURL:
+ //     loadRequest:
+ - (id)forwardingTargetForSelector:(SEL)aSelector
+ {
+     return _engineWebView;
+ }
+ 
+ @end

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/ef66b33c/CordovaLib/Classes/CDVViewController.m
----------------------------------------------------------------------
diff --cc CordovaLib/Classes/CDVViewController.m
index f368ceb,946c723..6ce262c
--- a/CordovaLib/Classes/CDVViewController.m
+++ b/CordovaLib/Classes/CDVViewController.m
@@@ -19,12 -19,12 +19,13 @@@
  
  #import <objc/message.h>
  #import "CDV.h"
- #import "CDVCommandDelegateImpl.h"
+ #import "CDVUIWebViewDelegate.h"
  #import "CDVConfigParser.h"
  #import "CDVUserAgentUtil.h"
- #import "CDVWebViewDelegate.h"
  #import <AVFoundation/AVFoundation.h>
+ #import "NSDictionary+CordovaPreferences.h"
  #import "CDVHandleOpenURL.h"
++#import "CDVCommandDelegateImpl.h"
  
  #define degreesToRadian(x) (M_PI * (x) / 180.0)
  

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/ef66b33c/CordovaLib/CordovaLib.xcodeproj/project.pbxproj
----------------------------------------------------------------------
diff --cc CordovaLib/CordovaLib.xcodeproj/project.pbxproj
index e91ade2,a1677ef..45cc66b
--- a/CordovaLib/CordovaLib.xcodeproj/project.pbxproj
+++ b/CordovaLib/CordovaLib.xcodeproj/project.pbxproj
@@@ -13,33 -14,50 +13,41 @@@
                3034979C1513D56A0090E688 /* CDVLocalStorage.h in Headers */ = 
{isa = PBXBuildFile; fileRef = 3034979A1513D56A0090E688 /* CDVLocalStorage.h 
*/; settings = {ATTRIBUTES = (Public, ); }; };
                3034979E1513D56A0090E688 /* CDVLocalStorage.m in Sources */ = 
{isa = PBXBuildFile; fileRef = 3034979B1513D56A0090E688 /* CDVLocalStorage.m 
*/; };
                30392E4E14F4FCAB00B9E0B8 /* CDVAvailability.h in Headers */ = 
{isa = PBXBuildFile; fileRef = 30392E4D14F4FCAB00B9E0B8 /* CDVAvailability.h 
*/; settings = {ATTRIBUTES = (Public, ); }; };
 -              3062D120151D0EDB000D9128 /* UIDevice+Extensions.h in Headers */ 
= {isa = PBXBuildFile; fileRef = 3062D11E151D0EDB000D9128 /* 
UIDevice+Extensions.h */; settings = {ATTRIBUTES = (Public, ); }; };
 -              3062D122151D0EDB000D9128 /* UIDevice+Extensions.m in Sources */ 
= {isa = PBXBuildFile; fileRef = 3062D11F151D0EDB000D9128 /* 
UIDevice+Extensions.m */; };
++              306ADADD1AAA739800CAC885 /* CDVHandleOpenURL.h in Headers */ = 
{isa = PBXBuildFile; fileRef = 306ADADC1AAA739800CAC885 /* CDVHandleOpenURL.h 
*/; };
++              306ADAE01AAA73BA00CAC885 /* CDVHandleOpenURL.m in Sources */ = 
{isa = PBXBuildFile; fileRef = 306ADADE1AAA73A800CAC885 /* CDVHandleOpenURL.m 
*/; };
++              306ADAE51AAA73E100CAC885 /* CDVUIWebViewEngine.m in Sources */ 
= {isa = PBXBuildFile; fileRef = 306ADAE11AAA73E100CAC885 /* 
CDVUIWebViewEngine.m */; };
++              306ADAE61AAA73E100CAC885 /* CDVWebViewEngineProtocol.h in 
Headers */ = {isa = PBXBuildFile; fileRef = 306ADAE21AAA73E100CAC885 /* 
CDVWebViewEngineProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
++              306ADAE71AAA73E100CAC885 /* NSDictionary+CordovaPreferences.h 
in Headers */ = {isa = PBXBuildFile; fileRef = 306ADAE31AAA73E100CAC885 /* 
NSDictionary+CordovaPreferences.h */; };
++              306ADAE81AAA73E100CAC885 /* NSDictionary+CordovaPreferences.m 
in Sources */ = {isa = PBXBuildFile; fileRef = 306ADAE41AAA73E100CAC885 /* 
NSDictionary+CordovaPreferences.m */; };
++              306ADAEA1AAA745400CAC885 /* CDVCommandQueue.h in Headers */ = 
{isa = PBXBuildFile; fileRef = EB3B3545161CB44D003DBE7D /* CDVCommandQueue.h 
*/; settings = {ATTRIBUTES = (Public, ); }; };
++              306ADAEB1AAA747100CAC885 /* NSMutableArray+QueueAdditions.h in 
Headers */ = {isa = PBXBuildFile; fileRef = 30E563CD13E217EC00C949AA /* 
NSMutableArray+QueueAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
++              306ADAEC1AAA753300CAC885 /* CDVCommandDelegateImpl.h in Headers 
*/ = {isa = PBXBuildFile; fileRef = EB3B357A161F2A44003DBE7D /* 
CDVCommandDelegateImpl.h */; settings = {ATTRIBUTES = (Public, ); }; };
                3073E9ED1656D51200957977 /* CDVScreenOrientationDelegate.h in 
Headers */ = {isa = PBXBuildFile; fileRef = 3073E9EC1656D51200957977 /* 
CDVScreenOrientationDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
 -              3083EB981A0AF23A00548672 /* CDVUIWebViewEngine.h in Headers */ 
= {isa = PBXBuildFile; fileRef = 3083EB961A0AF23A00548672 /* 
CDVUIWebViewEngine.h */; settings = {ATTRIBUTES = (Public, ); }; };
 -              3083EB991A0AF23A00548672 /* CDVUIWebViewEngine.m in Sources */ 
= {isa = PBXBuildFile; fileRef = 3083EB971A0AF23A00548672 /* 
CDVUIWebViewEngine.m */; };
 -              30B7A65C1A0B73AF0010C630 /* NSDictionary+CordovaPreferences.h 
in Headers */ = {isa = PBXBuildFile; fileRef = 30B7A65A1A0B73AF0010C630 /* 
NSDictionary+CordovaPreferences.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               30B7A65D1A0B73AF0010C630 /* NSDictionary+CordovaPreferences.m 
in Sources */ = {isa = PBXBuildFile; fileRef = 30B7A65B1A0B73AF0010C630 /* 
NSDictionary+CordovaPreferences.m */; };
                30C684801406CB38004C1A8E /* CDVWhitelist.h in Headers */ = {isa 
= PBXBuildFile; fileRef = 30C6847E1406CB38004C1A8E /* CDVWhitelist.h */; 
settings = {ATTRIBUTES = (Public, ); }; };
                30C684821406CB38004C1A8E /* CDVWhitelist.m in Sources */ = {isa 
= PBXBuildFile; fileRef = 30C6847F1406CB38004C1A8E /* CDVWhitelist.m */; };
                30C684941407044B004C1A8E /* CDVURLProtocol.h in Headers */ = 
{isa = PBXBuildFile; fileRef = 30C684921407044A004C1A8E /* CDVURLProtocol.h */; 
settings = {ATTRIBUTES = (Public, ); }; };
                30C684961407044B004C1A8E /* CDVURLProtocol.m in Sources */ = 
{isa = PBXBuildFile; fileRef = 30C684931407044A004C1A8E /* CDVURLProtocol.m */; 
};
 -              30D552E11A0AB1F5002007BB /* CDVWebViewEngineProtocol.h in 
Headers */ = {isa = PBXBuildFile; fileRef = 30D552E01A0AB1F5002007BB /* 
CDVWebViewEngineProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
                30E33AF213A7E24B00594D64 /* CDVPlugin.h in Headers */ = {isa = 
PBXBuildFile; fileRef = 30E33AF013A7E24B00594D64 /* CDVPlugin.h */; settings = 
{ATTRIBUTES = (Public, ); }; };
                30E33AF313A7E24B00594D64 /* CDVPlugin.m in Sources */ = {isa = 
PBXBuildFile; fileRef = 30E33AF113A7E24B00594D64 /* CDVPlugin.m */; };
 -              30E563CF13E217EC00C949AA /* NSMutableArray+QueueAdditions.h in 
Headers */ = {isa = PBXBuildFile; fileRef = 30E563CD13E217EC00C949AA /* 
NSMutableArray+QueueAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
                30E563D013E217EC00C949AA /* NSMutableArray+QueueAdditions.m in 
Sources */ = {isa = PBXBuildFile; fileRef = 30E563CE13E217EC00C949AA /* 
NSMutableArray+QueueAdditions.m */; };
--              30E6B8CD1A8ADD900025B9EE /* CDVHandleOpenURL.h in Headers */ = 
{isa = PBXBuildFile; fileRef = 30E6B8CB1A8ADD900025B9EE /* CDVHandleOpenURL.h 
*/; };
--              30E6B8CE1A8ADD900025B9EE /* CDVHandleOpenURL.m in Sources */ = 
{isa = PBXBuildFile; fileRef = 30E6B8CC1A8ADD900025B9EE /* CDVHandleOpenURL.m 
*/; };
 -              30F3930B169F839700B22307 /* CDVJSON.h in Headers */ = {isa = 
PBXBuildFile; fileRef = 30F39309169F839700B22307 /* CDVJSON.h */; settings = 
{ATTRIBUTES = (Public, ); }; };
 -              30F3930C169F839700B22307 /* CDVJSON.m in Sources */ = {isa = 
PBXBuildFile; fileRef = 30F3930A169F839700B22307 /* CDVJSON.m */; };
                30F5EBAB14CA26E700987760 /* CDVCommandDelegate.h in Headers */ 
= {isa = PBXBuildFile; fileRef = 30F5EBA914CA26E700987760 /* 
CDVCommandDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
                7E14B5A81705050A0032169E /* CDVTimer.h in Headers */ = {isa = 
PBXBuildFile; fileRef = 7E14B5A61705050A0032169E /* CDVTimer.h */; settings = 
{ATTRIBUTES = (Public, ); }; };
                7E14B5A91705050A0032169E /* CDVTimer.m in Sources */ = {isa = 
PBXBuildFile; fileRef = 7E14B5A71705050A0032169E /* CDVTimer.m */; };
 -              7E22B88519E4C0210026F95E /* CDVAvailabilityDeprecated.h in 
Headers */ = {isa = PBXBuildFile; fileRef = 7E22B88419E4C0210026F95E /* 
CDVAvailabilityDeprecated.h */; settings = {ATTRIBUTES = (Public, ); }; };
                8852C43A14B65FD800F0E735 /* CDVViewController.h in Headers */ = 
{isa = PBXBuildFile; fileRef = 8852C43614B65FD800F0E735 /* CDVViewController.h 
*/; settings = {ATTRIBUTES = (Public, ); }; };
                8852C43C14B65FD800F0E735 /* CDVViewController.m in Sources */ = 
{isa = PBXBuildFile; fileRef = 8852C43714B65FD800F0E735 /* CDVViewController.m 
*/; };
 -              8887FD681090FBE7009987E8 /* NSDictionary+Extensions.h in 
Headers */ = {isa = PBXBuildFile; fileRef = 8887FD281090FBE7009987E8 /* 
NSDictionary+Extensions.h */; settings = {ATTRIBUTES = (Public, ); }; };
 -              8887FD691090FBE7009987E8 /* NSDictionary+Extensions.m in 
Sources */ = {isa = PBXBuildFile; fileRef = 8887FD291090FBE7009987E8 /* 
NSDictionary+Extensions.m */; };
                8887FD741090FBE7009987E8 /* CDVInvokedUrlCommand.h in Headers 
*/ = {isa = PBXBuildFile; fileRef = 8887FD341090FBE7009987E8 /* 
CDVInvokedUrlCommand.h */; settings = {ATTRIBUTES = (Public, ); }; };
                8887FD751090FBE7009987E8 /* CDVInvokedUrlCommand.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = 8887FD351090FBE7009987E8 /* 
CDVInvokedUrlCommand.m */; };
 -              8887FD8F1090FBE7009987E8 /* NSData+Base64.h in Headers */ = 
{isa = PBXBuildFile; fileRef = 8887FD501090FBE7009987E8 /* NSData+Base64.h */; 
settings = {ATTRIBUTES = (Public, ); }; };
                8887FD901090FBE7009987E8 /* NSData+Base64.m in Sources */ = 
{isa = PBXBuildFile; fileRef = 8887FD511090FBE7009987E8 /* NSData+Base64.m */; 
};
 -              EB3B3547161CB44D003DBE7D /* CDVCommandQueue.h in Headers */ = 
{isa = PBXBuildFile; fileRef = EB3B3545161CB44D003DBE7D /* CDVCommandQueue.h 
*/; settings = {ATTRIBUTES = (Public, ); }; };
                EB3B3548161CB44D003DBE7D /* CDVCommandQueue.m in Sources */ = 
{isa = PBXBuildFile; fileRef = EB3B3546161CB44D003DBE7D /* CDVCommandQueue.m 
*/; };
 -              EB3B357C161F2A45003DBE7D /* CDVCommandDelegateImpl.h in Headers 
*/ = {isa = PBXBuildFile; fileRef = EB3B357A161F2A44003DBE7D /* 
CDVCommandDelegateImpl.h */; settings = {ATTRIBUTES = (Public, ); }; };
                EB3B357D161F2A45003DBE7D /* CDVCommandDelegateImpl.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = EB3B357B161F2A45003DBE7D /* 
CDVCommandDelegateImpl.m */; };
 +              EB6A98401A729CD70013FCDB /* CDVAvailabilityDeprecated.h in 
Headers */ = {isa = PBXBuildFile; fileRef = EB6A983F1A729CD70013FCDB /* 
CDVAvailabilityDeprecated.h */; settings = {ATTRIBUTES = (Public, ); }; };
                EB6A98541A77EE470013FCDB /* CDVJSON_private.m in Sources */ = 
{isa = PBXBuildFile; fileRef = EB6A98521A77EE470013FCDB /* CDVJSON_private.m 
*/; };
 +              EB6A98571A77FA430013FCDB /* NSData+Base64.h in Headers */ = 
{isa = PBXBuildFile; fileRef = 8887FD501090FBE7009987E8 /* NSData+Base64.h */; 
settings = {ATTRIBUTES = (Public, ); }; };
                EB96673B16A8970A00D86CDF /* CDVUserAgentUtil.h in Headers */ = 
{isa = PBXBuildFile; fileRef = EB96673916A8970900D86CDF /* CDVUserAgentUtil.h 
*/; settings = {ATTRIBUTES = (Public, ); }; };
                EB96673C16A8970A00D86CDF /* CDVUserAgentUtil.m in Sources */ = 
{isa = PBXBuildFile; fileRef = EB96673A16A8970900D86CDF /* CDVUserAgentUtil.m 
*/; };
-               EBFF4DBC16D3FE2E008F452B /* CDVWebViewDelegate.m in Sources */ 
= {isa = PBXBuildFile; fileRef = EBFF4DBA16D3FE2E008F452B /* 
CDVWebViewDelegate.m */; };
-               EBFF4DBD16D3FE2E008F452B /* CDVWebViewDelegate.h in Headers */ 
= {isa = PBXBuildFile; fileRef = EBFF4DBB16D3FE2E008F452B /* 
CDVWebViewDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
 -              EBA3557315ABD38C00F4DE24 /* NSArray+Comparisons.h in Headers */ 
= {isa = PBXBuildFile; fileRef = EBA3557115ABD38C00F4DE24 /* 
NSArray+Comparisons.h */; settings = {ATTRIBUTES = (Public, ); }; };
 -              EBA3557515ABD38C00F4DE24 /* NSArray+Comparisons.m in Sources */ 
= {isa = PBXBuildFile; fileRef = EBA3557215ABD38C00F4DE24 /* 
NSArray+Comparisons.m */; };
+               EBFF4DBC16D3FE2E008F452B /* CDVUIWebViewDelegate.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = EBFF4DBA16D3FE2E008F452B /* 
CDVUIWebViewDelegate.m */; };
 -              EBFF4DBD16D3FE2E008F452B /* CDVUIWebViewDelegate.h in Headers 
*/ = {isa = PBXBuildFile; fileRef = EBFF4DBB16D3FE2E008F452B /* 
CDVUIWebViewDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
++              EBFF4DBD16D3FE2E008F452B /* CDVUIWebViewDelegate.h in Headers 
*/ = {isa = PBXBuildFile; fileRef = EBFF4DBB16D3FE2E008F452B /* 
CDVUIWebViewDelegate.h */; };
                F858FBC6166009A8007DA594 /* CDVConfigParser.h in Headers */ = 
{isa = PBXBuildFile; fileRef = F858FBC4166009A8007DA594 /* CDVConfigParser.h 
*/; settings = {ATTRIBUTES = (Public, ); }; };
                F858FBC7166009A8007DA594 /* CDVConfigParser.m in Sources */ = 
{isa = PBXBuildFile; fileRef = F858FBC5166009A8007DA594 /* CDVConfigParser.m 
*/; };
  /* End PBXBuildFile section */
@@@ -53,7 -72,13 +61,14 @@@
                3034979A1513D56A0090E688 /* CDVLocalStorage.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
CDVLocalStorage.h; path = Classes/CDVLocalStorage.h; sourceTree = "<group>"; };
                3034979B1513D56A0090E688 /* CDVLocalStorage.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= CDVLocalStorage.m; path = Classes/CDVLocalStorage.m; sourceTree = "<group>"; 
};
                30392E4D14F4FCAB00B9E0B8 /* CDVAvailability.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
CDVAvailability.h; path = Classes/CDVAvailability.h; sourceTree = "<group>"; };
 -              3062D11E151D0EDB000D9128 /* UIDevice+Extensions.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
"UIDevice+Extensions.h"; path = "Classes/UIDevice+Extensions.h"; sourceTree = 
"<group>"; };
 -              3062D11F151D0EDB000D9128 /* UIDevice+Extensions.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= "UIDevice+Extensions.m"; path = "Classes/UIDevice+Extensions.m"; sourceTree = 
"<group>"; };
++              306ADADC1AAA739800CAC885 /* CDVHandleOpenURL.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
CDVHandleOpenURL.h; path = Classes/CDVHandleOpenURL.h; sourceTree = "<group>"; 
};
++              306ADADE1AAA73A800CAC885 /* CDVHandleOpenURL.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= CDVHandleOpenURL.m; path = Classes/CDVHandleOpenURL.m; sourceTree = 
"<group>"; };
++              306ADAE11AAA73E100CAC885 /* CDVUIWebViewEngine.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= CDVUIWebViewEngine.m; path = Classes/CDVUIWebViewEngine.m; sourceTree = 
"<group>"; };
++              306ADAE21AAA73E100CAC885 /* CDVWebViewEngineProtocol.h */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; 
name = CDVWebViewEngineProtocol.h; path = Classes/CDVWebViewEngineProtocol.h; 
sourceTree = "<group>"; };
++              306ADAE31AAA73E100CAC885 /* NSDictionary+CordovaPreferences.h 
*/ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.h; name = "NSDictionary+CordovaPreferences.h"; path = 
"Classes/NSDictionary+CordovaPreferences.h"; sourceTree = "<group>"; };
++              306ADAE41AAA73E100CAC885 /* NSDictionary+CordovaPreferences.m 
*/ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; name = "NSDictionary+CordovaPreferences.m"; path = 
"Classes/NSDictionary+CordovaPreferences.m"; sourceTree = "<group>"; };
                3073E9EC1656D51200957977 /* CDVScreenOrientationDelegate.h */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; 
name = CDVScreenOrientationDelegate.h; path = 
Classes/CDVScreenOrientationDelegate.h; sourceTree = "<group>"; };
 -              3083EB961A0AF23A00548672 /* CDVUIWebViewEngine.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
CDVUIWebViewEngine.h; path = Classes/CDVUIWebViewEngine.h; sourceTree = 
"<group>"; };
 -              3083EB971A0AF23A00548672 /* CDVUIWebViewEngine.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= CDVUIWebViewEngine.m; path = Classes/CDVUIWebViewEngine.m; sourceTree = 
"<group>"; };
 -              30B7A65A1A0B73AF0010C630 /* NSDictionary+CordovaPreferences.h 
*/ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.h; name = "NSDictionary+CordovaPreferences.h"; path = 
"Classes/NSDictionary+CordovaPreferences.h"; sourceTree = "<group>"; };
+               30B7A65B1A0B73AF0010C630 /* NSDictionary+CordovaPreferences.m 
*/ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; name = "NSDictionary+CordovaPreferences.m"; path = 
"Classes/NSDictionary+CordovaPreferences.m"; sourceTree = "<group>"; };
                30C6847E1406CB38004C1A8E /* CDVWhitelist.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
CDVWhitelist.h; path = Classes/CDVWhitelist.h; sourceTree = "<group>"; };
                30C6847F1406CB38004C1A8E /* CDVWhitelist.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= CDVWhitelist.m; path = Classes/CDVWhitelist.m; sourceTree = "<group>"; };
                30C684921407044A004C1A8E /* CDVURLProtocol.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
CDVURLProtocol.h; path = Classes/CDVURLProtocol.h; sourceTree = "<group>"; };
@@@ -62,14 -88,31 +77,12 @@@
                30E33AF113A7E24B00594D64 /* CDVPlugin.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= CDVPlugin.m; path = Classes/CDVPlugin.m; sourceTree = "<group>"; };
                30E563CD13E217EC00C949AA /* NSMutableArray+QueueAdditions.h */ 
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.h; name = "NSMutableArray+QueueAdditions.h"; path = 
"Classes/NSMutableArray+QueueAdditions.h"; sourceTree = "<group>"; };
                30E563CE13E217EC00C949AA /* NSMutableArray+QueueAdditions.m */ 
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; name = "NSMutableArray+QueueAdditions.m"; path = 
"Classes/NSMutableArray+QueueAdditions.m"; sourceTree = "<group>"; };
--              30E6B8CB1A8ADD900025B9EE /* CDVHandleOpenURL.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
CDVHandleOpenURL.h; path = Classes/CDVHandleOpenURL.h; sourceTree = "<group>"; 
};
--              30E6B8CC1A8ADD900025B9EE /* CDVHandleOpenURL.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= CDVHandleOpenURL.m; path = Classes/CDVHandleOpenURL.m; sourceTree = 
"<group>"; };
 -              30F39309169F839700B22307 /* CDVJSON.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
CDVJSON.h; path = Classes/CDVJSON.h; sourceTree = "<group>"; };
 -              30F3930A169F839700B22307 /* CDVJSON.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= CDVJSON.m; path = Classes/CDVJSON.m; sourceTree = "<group>"; };
                30F5EBA914CA26E700987760 /* CDVCommandDelegate.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
CDVCommandDelegate.h; path = Classes/CDVCommandDelegate.h; sourceTree = 
"<group>"; };
 -              686357AA141002F100DF4CF2 /* UIKit.framework */ = {isa = 
PBXFileReference; lastKnownFileType = wrapper.framework; name = 
UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = 
SDKROOT; };
 -              686357AC141002F100DF4CF2 /* Foundation.framework */ = {isa = 
PBXFileReference; lastKnownFileType = wrapper.framework; name = 
Foundation.framework; path = System/Library/Frameworks/Foundation.framework; 
sourceTree = SDKROOT; };
 -              686357AE141002F100DF4CF2 /* CoreGraphics.framework */ = {isa = 
PBXFileReference; lastKnownFileType = wrapper.framework; name = 
CoreGraphics.framework; path = 
System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
 -              686357CC14100AAD00DF4CF2 /* AddressBookUI.framework */ = {isa = 
PBXFileReference; lastKnownFileType = wrapper.framework; name = 
AddressBookUI.framework; path = 
System/Library/Frameworks/AddressBookUI.framework; sourceTree = SDKROOT; };
 -              686357CE14100ADA00DF4CF2 /* AudioToolbox.framework */ = {isa = 
PBXFileReference; lastKnownFileType = wrapper.framework; name = 
AudioToolbox.framework; path = 
System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
 -              686357CF14100ADB00DF4CF2 /* AVFoundation.framework */ = {isa = 
PBXFileReference; lastKnownFileType = wrapper.framework; name = 
AVFoundation.framework; path = 
System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
 -              686357D014100ADE00DF4CF2 /* CoreLocation.framework */ = {isa = 
PBXFileReference; lastKnownFileType = wrapper.framework; name = 
CoreLocation.framework; path = 
System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; };
 -              686357D214100AE700DF4CF2 /* MobileCoreServices.framework */ = 
{isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = 
MobileCoreServices.framework; path = 
System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; };
 -              686357D414100AF200DF4CF2 /* SystemConfiguration.framework */ = 
{isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = 
SystemConfiguration.framework; path = 
System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; 
};
 -              686357DC14100B1600DF4CF2 /* CoreMedia.framework */ = {isa = 
PBXFileReference; lastKnownFileType = wrapper.framework; name = 
CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; 
sourceTree = SDKROOT; };
                68A32D7114102E1C006B237C /* libCordova.a */ = {isa = 
PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = 
libCordova.a; sourceTree = BUILT_PRODUCTS_DIR; };
 -              68A32D7414103017006B237C /* AddressBook.framework */ = {isa = 
PBXFileReference; lastKnownFileType = wrapper.framework; name = 
AddressBook.framework; path = System/Library/Frameworks/AddressBook.framework; 
sourceTree = SDKROOT; };
                7E14B5A61705050A0032169E /* CDVTimer.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
CDVTimer.h; path = Classes/CDVTimer.h; sourceTree = "<group>"; };
                7E14B5A71705050A0032169E /* CDVTimer.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= CDVTimer.m; path = Classes/CDVTimer.m; sourceTree = "<group>"; };
 -              7E22B88419E4C0210026F95E /* CDVAvailabilityDeprecated.h */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; 
name = CDVAvailabilityDeprecated.h; path = Classes/CDVAvailabilityDeprecated.h; 
sourceTree = "<group>"; };
 -              8220B5C316D5427E00EC3921 /* AssetsLibrary.framework */ = {isa = 
PBXFileReference; lastKnownFileType = wrapper.framework; name = 
AssetsLibrary.framework; path = 
System/Library/Frameworks/AssetsLibrary.framework; sourceTree = SDKROOT; };
                8852C43614B65FD800F0E735 /* CDVViewController.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
CDVViewController.h; path = Classes/CDVViewController.h; sourceTree = 
"<group>"; };
                8852C43714B65FD800F0E735 /* CDVViewController.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= CDVViewController.m; path = Classes/CDVViewController.m; sourceTree = 
"<group>"; };
 -              8887FD281090FBE7009987E8 /* NSDictionary+Extensions.h */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name 
= "NSDictionary+Extensions.h"; path = "Classes/NSDictionary+Extensions.h"; 
sourceTree = "<group>"; };
 -              8887FD291090FBE7009987E8 /* NSDictionary+Extensions.m */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; 
name = "NSDictionary+Extensions.m"; path = "Classes/NSDictionary+Extensions.m"; 
sourceTree = "<group>"; };
                8887FD341090FBE7009987E8 /* CDVInvokedUrlCommand.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
CDVInvokedUrlCommand.h; path = Classes/CDVInvokedUrlCommand.h; sourceTree = 
"<group>"; };
                8887FD351090FBE7009987E8 /* CDVInvokedUrlCommand.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= CDVInvokedUrlCommand.m; path = Classes/CDVInvokedUrlCommand.m; sourceTree = 
"<group>"; };
                8887FD501090FBE7009987E8 /* NSData+Base64.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
"NSData+Base64.h"; path = "Classes/NSData+Base64.h"; sourceTree = "<group>"; };
@@@ -84,8 -126,10 +97,8 @@@
                EB6A98531A77EE470013FCDB /* CDVJSON_private.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
CDVJSON_private.h; path = Classes/CDVJSON_private.h; sourceTree = "<group>"; };
                EB96673916A8970900D86CDF /* CDVUserAgentUtil.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
CDVUserAgentUtil.h; path = Classes/CDVUserAgentUtil.h; sourceTree = "<group>"; 
};
                EB96673A16A8970900D86CDF /* CDVUserAgentUtil.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= CDVUserAgentUtil.m; path = Classes/CDVUserAgentUtil.m; sourceTree = 
"<group>"; };
-               EBFF4DBA16D3FE2E008F452B /* CDVWebViewDelegate.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= CDVWebViewDelegate.m; path = Classes/CDVWebViewDelegate.m; sourceTree = 
"<group>"; };
-               EBFF4DBB16D3FE2E008F452B /* CDVWebViewDelegate.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
CDVWebViewDelegate.h; path = Classes/CDVWebViewDelegate.h; sourceTree = 
"<group>"; };
 -              EBA3557115ABD38C00F4DE24 /* NSArray+Comparisons.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
"NSArray+Comparisons.h"; path = "Classes/NSArray+Comparisons.h"; sourceTree = 
"<group>"; };
 -              EBA3557215ABD38C00F4DE24 /* NSArray+Comparisons.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= "NSArray+Comparisons.m"; path = "Classes/NSArray+Comparisons.m"; sourceTree = 
"<group>"; };
+               EBFF4DBA16D3FE2E008F452B /* CDVUIWebViewDelegate.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= CDVUIWebViewDelegate.m; path = Classes/CDVUIWebViewDelegate.m; sourceTree = 
"<group>"; };
+               EBFF4DBB16D3FE2E008F452B /* CDVUIWebViewDelegate.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
CDVUIWebViewDelegate.h; path = Classes/CDVUIWebViewDelegate.h; sourceTree = 
"<group>"; };
                F858FBC4166009A8007DA594 /* CDVConfigParser.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
CDVConfigParser.h; path = Classes/CDVConfigParser.h; sourceTree = "<group>"; };
                F858FBC5166009A8007DA594 /* CDVConfigParser.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= CDVConfigParser.m; path = Classes/CDVConfigParser.m; sourceTree = "<group>"; 
};
  /* End PBXFileReference section */
@@@ -130,35 -240,28 +143,41 @@@
                                30E33AF113A7E24B00594D64 /* CDVPlugin.m */,
                                1F92F49E1314023E0046367C /* CDVPluginResult.h 
*/,
                                1F92F49F1314023E0046367C /* CDVPluginResult.m 
*/,
 +                              8852C43614B65FD800F0E735 /* CDVViewController.h 
*/,
 +                              8852C43714B65FD800F0E735 /* CDVViewController.m 
*/,
 +                              30F5EBA914CA26E700987760 /* 
CDVCommandDelegate.h */,
 +                              30C684921407044A004C1A8E /* CDVURLProtocol.h */,
 +                              30C684931407044A004C1A8E /* CDVURLProtocol.m */,
                                8887FD341090FBE7009987E8 /* 
CDVInvokedUrlCommand.h */,
                                8887FD351090FBE7009987E8 /* 
CDVInvokedUrlCommand.m */,
 +                              30C6847E1406CB38004C1A8E /* CDVWhitelist.h */,
 +                              30C6847F1406CB38004C1A8E /* CDVWhitelist.m */,
 +                              3034979A1513D56A0090E688 /* CDVLocalStorage.h 
*/,
 +                              3034979B1513D56A0090E688 /* CDVLocalStorage.m 
*/,
                                3073E9EC1656D51200957977 /* 
CDVScreenOrientationDelegate.h */,
 -                              30F39309169F839700B22307 /* CDVJSON.h */,
 -                              30F3930A169F839700B22307 /* CDVJSON.m */,
 -                              EB6A98521A77EE470013FCDB /* CDVJSON_private.m 
*/,
 -                              EB6A98531A77EE470013FCDB /* CDVJSON_private.h 
*/,
 +                              7E14B5A61705050A0032169E /* CDVTimer.h */,
 +                              7E14B5A71705050A0032169E /* CDVTimer.m */,
 +                              F858FBC4166009A8007DA594 /* CDVConfigParser.h 
*/,
 +                              F858FBC5166009A8007DA594 /* CDVConfigParser.m 
*/,
                                EB96673916A8970900D86CDF /* CDVUserAgentUtil.h 
*/,
                                EB96673A16A8970900D86CDF /* CDVUserAgentUtil.m 
*/,
-                               EBFF4DBA16D3FE2E008F452B /* 
CDVWebViewDelegate.m */,
-                               EBFF4DBB16D3FE2E008F452B /* 
CDVWebViewDelegate.h */,
++                              EBFF4DBA16D3FE2E008F452B /* 
CDVUIWebViewDelegate.m */,
++                              EBFF4DBB16D3FE2E008F452B /* 
CDVUIWebViewDelegate.h */,
 +                              8887FD501090FBE7009987E8 /* NSData+Base64.h */,
 +                              8887FD511090FBE7009987E8 /* NSData+Base64.m */,
++                              306ADAE21AAA73E100CAC885 /* 
CDVWebViewEngineProtocol.h */,
                        );
 -                      name = Commands;
 +                      name = Public;
                        sourceTree = "<group>";
                };
 -              888700D910923009009987E8 /* Util */ = {
 +              888700D910923009009987E8 /* Private */ = {
                        isa = PBXGroup;
                        children = (
 -                              3062D11E151D0EDB000D9128 /* 
UIDevice+Extensions.h */,
 -                              3062D11F151D0EDB000D9128 /* 
UIDevice+Extensions.m */,
 -                              EBA3557115ABD38C00F4DE24 /* 
NSArray+Comparisons.h */,
 -                              EBA3557215ABD38C00F4DE24 /* 
NSArray+Comparisons.m */,
 -                              8887FD281090FBE7009987E8 /* 
NSDictionary+Extensions.h */,
 -                              8887FD291090FBE7009987E8 /* 
NSDictionary+Extensions.m */,
++                              306ADAE31AAA73E100CAC885 /* 
NSDictionary+CordovaPreferences.h */,
++                              306ADAE11AAA73E100CAC885 /* 
CDVUIWebViewEngine.m */,
++                              306ADAE41AAA73E100CAC885 /* 
NSDictionary+CordovaPreferences.m */,
++                              306ADADE1AAA73A800CAC885 /* CDVHandleOpenURL.m 
*/,
++                              306ADADC1AAA739800CAC885 /* CDVHandleOpenURL.h 
*/,
                                302965BB13A94E9D007046C5 /* CDVDebug.h */,
                                30E563CD13E217EC00C949AA /* 
NSMutableArray+QueueAdditions.h */,
                                30E563CE13E217EC00C949AA /* 
NSMutableArray+QueueAdditions.m */,
@@@ -180,24 -292,36 +199,29 @@@
                        isa = PBXHeadersBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
 -                              8887FD681090FBE7009987E8 /* 
NSDictionary+Extensions.h in Headers */,
 -                              8887FD741090FBE7009987E8 /* 
CDVInvokedUrlCommand.h in Headers */,
 -                              8887FD8F1090FBE7009987E8 /* NSData+Base64.h in 
Headers */,
 -                              1F92F4A01314023E0046367C /* CDVPluginResult.h 
in Headers */,
 +                              301F2F2A14F3C9CA003FE9FC /* CDV.h in Headers */,
 +                              30392E4E14F4FCAB00B9E0B8 /* CDVAvailability.h 
in Headers */,
 +                              EB6A98401A729CD70013FCDB /* 
CDVAvailabilityDeprecated.h in Headers */,
                                30E33AF213A7E24B00594D64 /* CDVPlugin.h in 
Headers */,
 -                              30E6B8CD1A8ADD900025B9EE /* CDVHandleOpenURL.h 
in Headers */,
 -                              302965BC13A94E9D007046C5 /* CDVDebug.h in 
Headers */,
 -                              30E563CF13E217EC00C949AA /* 
NSMutableArray+QueueAdditions.h in Headers */,
 -                              30C684801406CB38004C1A8E /* CDVWhitelist.h in 
Headers */,
 -                              30C684941407044B004C1A8E /* CDVURLProtocol.h in 
Headers */,
 +                              1F92F4A01314023E0046367C /* CDVPluginResult.h 
in Headers */,
-                               30E6B8CD1A8ADD900025B9EE /* CDVHandleOpenURL.h 
in Headers */,
++                              306ADAE71AAA73E100CAC885 /* 
NSDictionary+CordovaPreferences.h in Headers */,
                                8852C43A14B65FD800F0E735 /* CDVViewController.h 
in Headers */,
                                30F5EBAB14CA26E700987760 /* 
CDVCommandDelegate.h in Headers */,
 -                              301F2F2A14F3C9CA003FE9FC /* CDV.h in Headers */,
 -                              30392E4E14F4FCAB00B9E0B8 /* CDVAvailability.h 
in Headers */,
 -                              7E22B88519E4C0210026F95E /* 
CDVAvailabilityDeprecated.h in Headers */,
 +                              30C684941407044B004C1A8E /* CDVURLProtocol.h in 
Headers */,
 +                              8887FD741090FBE7009987E8 /* 
CDVInvokedUrlCommand.h in Headers */,
 +                              30C684801406CB38004C1A8E /* CDVWhitelist.h in 
Headers */,
                                3034979C1513D56A0090E688 /* CDVLocalStorage.h 
in Headers */,
 -                              3062D120151D0EDB000D9128 /* 
UIDevice+Extensions.h in Headers */,
 -                              EBA3557315ABD38C00F4DE24 /* 
NSArray+Comparisons.h in Headers */,
 -                              EB3B3547161CB44D003DBE7D /* CDVCommandQueue.h 
in Headers */,
 -                              EB3B357C161F2A45003DBE7D /* 
CDVCommandDelegateImpl.h in Headers */,
 -                              1B701028177A61CF00AE11F4 /* CDVShared.h in 
Headers */,
++                              306ADADD1AAA739800CAC885 /* CDVHandleOpenURL.h 
in Headers */,
                                3073E9ED1656D51200957977 /* 
CDVScreenOrientationDelegate.h in Headers */,
 +                              7E14B5A81705050A0032169E /* CDVTimer.h in 
Headers */,
                                F858FBC6166009A8007DA594 /* CDVConfigParser.h 
in Headers */,
 -                              30F3930B169F839700B22307 /* CDVJSON.h in 
Headers */,
 -                              EBFF4DBD16D3FE2E008F452B /* 
CDVUIWebViewDelegate.h in Headers */,
 -                              30B7A65C1A0B73AF0010C630 /* 
NSDictionary+CordovaPreferences.h in Headers */,
 -                              3083EB981A0AF23A00548672 /* 
CDVUIWebViewEngine.h in Headers */,
 -                              30D552E11A0AB1F5002007BB /* 
CDVWebViewEngineProtocol.h in Headers */,
++                              306ADAE61AAA73E100CAC885 /* 
CDVWebViewEngineProtocol.h in Headers */,
                                EB96673B16A8970A00D86CDF /* CDVUserAgentUtil.h 
in Headers */,
-                               EBFF4DBD16D3FE2E008F452B /* 
CDVWebViewDelegate.h in Headers */,
 -                              7E14B5A81705050A0032169E /* CDVTimer.h in 
Headers */,
++                              306ADAEA1AAA745400CAC885 /* CDVCommandQueue.h 
in Headers */,
 +                              EB6A98571A77FA430013FCDB /* NSData+Base64.h in 
Headers */,
++                              306ADAEB1AAA747100CAC885 /* 
NSMutableArray+QueueAdditions.h in Headers */,
++                              306ADAEC1AAA753300CAC885 /* 
CDVCommandDelegateImpl.h in Headers */,
++                              EBFF4DBD16D3FE2E008F452B /* 
CDVUIWebViewDelegate.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
@@@ -255,22 -379,28 +279,25 @@@
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
 -                              8887FD691090FBE7009987E8 /* 
NSDictionary+Extensions.m in Sources */,
                                8887FD751090FBE7009987E8 /* 
CDVInvokedUrlCommand.m in Sources */,
                                8887FD901090FBE7009987E8 /* NSData+Base64.m in 
Sources */,
++                              306ADAE81AAA73E100CAC885 /* 
NSDictionary+CordovaPreferences.m in Sources */,
                                1F92F4A11314023E0046367C /* CDVPluginResult.m 
in Sources */,
+                               30B7A65D1A0B73AF0010C630 /* 
NSDictionary+CordovaPreferences.m in Sources */,
                                30E33AF313A7E24B00594D64 /* CDVPlugin.m in 
Sources */,
                                30E563D013E217EC00C949AA /* 
NSMutableArray+QueueAdditions.m in Sources */,
                                30C684821406CB38004C1A8E /* CDVWhitelist.m in 
Sources */,
                                30C684961407044B004C1A8E /* CDVURLProtocol.m in 
Sources */,
                                8852C43C14B65FD800F0E735 /* CDVViewController.m 
in Sources */,
                                3034979E1513D56A0090E688 /* CDVLocalStorage.m 
in Sources */,
 -                              3062D122151D0EDB000D9128 /* 
UIDevice+Extensions.m in Sources */,
 -                              EBA3557515ABD38C00F4DE24 /* 
NSArray+Comparisons.m in Sources */,
++                              306ADAE51AAA73E100CAC885 /* 
CDVUIWebViewEngine.m in Sources */,
                                EB3B3548161CB44D003DBE7D /* CDVCommandQueue.m 
in Sources */,
                                EB6A98541A77EE470013FCDB /* CDVJSON_private.m 
in Sources */,
                                EB3B357D161F2A45003DBE7D /* 
CDVCommandDelegateImpl.m in Sources */,
                                F858FBC7166009A8007DA594 /* CDVConfigParser.m 
in Sources */,
 -                              30F3930C169F839700B22307 /* CDVJSON.m in 
Sources */,
 -                              3083EB991A0AF23A00548672 /* 
CDVUIWebViewEngine.m in Sources */,
                                EB96673C16A8970A00D86CDF /* CDVUserAgentUtil.m 
in Sources */,
--                              30E6B8CE1A8ADD900025B9EE /* CDVHandleOpenURL.m 
in Sources */,
-                               EBFF4DBC16D3FE2E008F452B /* 
CDVWebViewDelegate.m in Sources */,
++                              306ADAE01AAA73BA00CAC885 /* CDVHandleOpenURL.m 
in Sources */,
+                               EBFF4DBC16D3FE2E008F452B /* 
CDVUIWebViewDelegate.m in Sources */,
                                7E14B5A91705050A0032169E /* CDVTimer.m in 
Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cordova.apache.org
For additional commands, e-mail: commits-h...@cordova.apache.org

Reply via email to