Shazron's Cordova (aka PhoneGap) Blog

at Adobe Systems Inc.

ios-deploy and ios-sim roadmaps

leave a comment »

ios-simulator-iconios-sim and ios-deploy are two tools that are used by Apache Cordova and a lot of other projects. ios-sim is used to control the iOS Simulator (and other functions) and ios-deploy is used to deploy signed apps (and other functions) to your connected iOS device.

The next major version of ios-sim will be 4.x, and it will be pure node.js, and it will use the simctl module which wraps Xcode’s simctl utility. See the roadmap here.

The next major version of ios-deploy will be 2.x, and it will modularize the utility as well as provide a target to generate ios-deploy as a library. This library can then be bridged using node-ffi, so other node.js scripts can use it. See the roadmap here.

Written by shazron

May 18, 2015 at 10:06 pm

Posted in cordova, phonegap

WKWebView and Apache Cordova

with 9 comments

Webkit_LogoThe Good

WKWebView support will be coming in cordova-ios 4.0.0, tentatively scheduled for April 2015. You can however, alpha test the support by following this README.

Pluggable webviews are coming in cordova-ios 4.0.0, which in addition to the default UIWebView, you can include the wkwebview-engine plugin for WKWebView support (it will not be in there by default so as not to break your existing code). The default uiwebview-engine has also been pluginized as well, which allows scenarios where you can update it with bug fixes after a platform release, or substituting it as the default webview for wkwebview-engine in the future.

cordova-ios 4.0.0 is still a work in a progress, and the APIs are subject to change. Rest assured that all core plugins will be compatible before we release, and we’ll test a bunch of the top plugins from plugins.cordova.io as well.

The Bad

Unfortunately for the WKWebView in iOS 8, support for loading local files in the app bundle is not available (yet). The code has been patched in WebKit2, but the patch hasn’t been downstreamed into iOS yet. As of iOS 8.3 beta 2, the functionality is still not available. So, we’ve decide to use the embedded local web-server route. Because of this, the File core plugin and the Camera core plugin might not work yet (fixes are coming) — we have a solution that transforms file:/// references to the appropriate http://localhost routes.

The Ugly

So WKWebView is great right? Yup! But there are limitations to its behaviour as compared to UIWebView:

Help Test!

Instructions here. Please file issues and assign them to me. Thanks everyone :)

Written by shazron

March 3, 2015 at 1:48 am

Posted in Uncategorized

cordova-ios 3.8.0 release – highlights

leave a comment »

The full release notes are available.cordova_bot

Take note of the caveat that the current cordova-cli does not include this version by default until version 4.3.0 (pending Apache voting and release) so you will have to add the platform explicitly.

> node.js is required

Formerly if you did not use the cordova-cli and just used the bin/create script and the scripts in your project’s ‘cordova‘ folder, you didn’t need node.js. With this new version, all scripts have been converted from bash to node.js

NOTE: Users will need to update to ios-deploy version 1.4.0 because of this change.

> cordova bridge fix

Details here. Essentially in cordova-ios 3.7.0, a div element was (erroneously) created on every call across the bridge, which might result in a performance issue.

> handleOpenURL issues

Details here. This should work reliably now. Note that this functionality will be removed in cordova-ios 4.0.0 and be put into a plugin, which would allow more customization (including setting the callback function used).

> ability to disable push notification code 

Details here. Right now all cordova-ios projects will have the entitlement warning from Apple even if they don’t actually include push notification capability. For backwards compatible reasons, this is left in for this version, but you can disable it now by adding a preprocessor macro in build.xcconfig (through a project hook).

In cordova-ios 4.0.0, this code will be removed, users can add a plugin that swizzles the appropriate AppDelegate methods instead. The AppDelegate itself in the default template will itself be cleared out, and just inherit a base class.

> emulator builds use build.xcconfig now

Details here. This is so if you want to add custom build settings to enable development and use of Swift plugins for example while testing in the Simulator (and not just the device).

Written by shazron

February 27, 2015 at 8:21 pm

Posted in Uncategorized

Cordova iOS and iOS 8

with 99 comments

ios8-heroiOS 8 was just released – and Cordova supports it fully, but it is still using the existing UIWebView iOS browser component (more on the new iOS 8 WKWebView later).

The main issues were in the core plugins, which have since been updated in the Cordova Plugin Registry. Update your plugins by removing and re-adding them.

If you use any of these plugins below, you will need to update these plugins and re-release your app for iOS 8, since your existing app built pre-iOS 8 may be broken in iOS 8 without these fixes.

These plugins have been updated for iOS 8:

Plugin
1. Camera
2. Geolocation
3. StatusBar
4. Contacts

Camera

This plugin had a fix to use the new Geolocation permissions in iOS 8. Users are now prompted whenever you require a geolocation – this is for the JPEG format EXIF data. The plugin has a new preference as well, called CameraUsesGeolocation which defaults to false. Previously you had no control over this, it was always true.

Geolocation

This plugin had a fix to use the new Geolocation permissions in iOS 8. Users are now prompted whenever you require a geolocation.

Contacts

This plugin had a fix for pickContact — iOS 8 has added new delegate functions to handle people picking, without the fix this feature was broken in iOS 8.

StatusBar

Landscape mode for the StatusBar plugin was broken in iOS 8, and the updated plugin fixes it. This is because on iOS 8, screen size is now orientation dependent — previously it was based off portrait mode. The StatusBarBackgroundColor preference is now omitted as well when you install the plugin, leaving it effectively transparent (was #000000 or black). You will have to now set it explicitly.

CDV_IsIPhone5 macro

For whatever reason you are using this, realize that it is broken currently (same reason as the StatusBar landscape fix). If your plugin is not using this macro, don’t worry about it. It has already been fixed for 3.7.0.

JavaScript

If you are using the Web Inspector, you might see “deprecated attempt to access property” errors that are harmless. It has already been fixed for 3.7.0.

WKWebView

Webkit_LogoWe tried.

Unfortunately there is a serious bug in WKWebView where it can’t load file:// urls, so it has hampered our efforts. This functionality was working in iOS 8 betas 1 to 3 on the device (it always works in the iOS 8 Simulator), but broken after that. I’m not sure what the ETA for the bug fix is, but it is in Apple’s radar (literally!).

In the meantime, we have some ideas, like running a local webserver to load the local assets. More info and discussion here.

For all the issues related to Cordova iOS and iOS 8, including our work in getting WKWebView support, check out this task list.

Written by shazron

September 18, 2014 at 11:44 pm

Posted in cordova, phonegap

Cordova iOS Plugin Interface – upcoming changes

leave a comment »

PluginThe plugin interfaces below will be deprecated in Apache Cordova 3.6.0 (iOS), and will be removed totally in the major release of 4.0.0 later this year. Please plan accordingly if you have plugins that use these interfaces.

If you followed the 3.x Guides on how to create and use plugins, you should be OK, these interfaces have been there pre-3.x and were documented in the 2.x stream, but not in the 3.x stream. If you need to upgrade, consult the docs for the new methods.

CDVPlugin:

- (NSString*)writeJavascript:(NSString*)javascript;
- (NSString*)success:(CDVPluginResult*)pluginResult callbackId:(NSString*)callbackId;
- (NSString*)error:(CDVPluginResult*)pluginResult callbackId:(NSString*)callbackId;

CDVPluginResult:

- (NSString*)toJSONString;
- (NSString*)toSuccessCallbackString:(NSString*)callbackId;
- (NSString*)toErrorCallbackString:(NSString*)callbackId;

Written by shazron

July 21, 2014 at 11:26 pm

Posted in cordova, phonegap

PhoneGap Facebook Plugin – maintenance update

with 5 comments

PluginBeginning today – the PhoneGap Facebook Plugin has a new home under Wizcorp. Ally Ogilvie of Wizcorp has been doing a great job of maintaining this plugin thus far, and his excellent stewardship of the plugin will continue on. Read his blog post on this.

Please update your bookmarks and point your git urls to the new location when adding a plugin using the CLI.

Alternatively, you could try a JavaScript only solution, read this blog post and browse the source code. This JavaScript only solution has some drawbacks however – you will lose Single Sign On, events, and ad tracking.

Written by shazron

July 14, 2014 at 2:43 am

Posted in cordova, phonegap

Cordova Keyboard Plugin – maintenance update

with 3 comments

PluginThis iOS only plugin has been moved some time ago to the org.apache.cordova.labs namespace so it has not affected any plugin releases.

I feel that this type of plugin is better off in the hands of 3rd party devs — please see the ionic keyboard plugin for example. I personally am not going to be maintaining it anymore primarily because of the testing complexity (see manual tests in mobile-spec) and I prefer not to muck around with the keyboard native views (which is extremely hacky) – it’s best to leave the current keyboard as is, for example see the iOS Gmail app — besides under the flat UI in iOS 7 it doesn’t look as bad.

I believe none of the other core committers plan to maintain the code as well. With iOS 8,  there is support for custom keyboards, so this plugin’s future is limited. As usual, the code is open-sourced, and pull requests are still welcome but the plugin won’t be tested and won’t be published on http://plugins.cordova.io. You can still install the plugin by using the git url:

cordova plugin add https://github.com/apache/cordova-plugins.git#master:keyboard

iOS 7 also made “keyboard-shrinks-view” the default (much better for apps), and eventually when iOS 8 is released the minimum supported version of future Cordova releases would default to iOS 7 as well.

Currently there are ~20 open issues in JIRA, and ~2 open pull requests in Github.

Written by shazron

July 9, 2014 at 8:27 am

Posted in cordova, phonegap

Follow

Get every new post delivered to your Inbox.

Join 1,727 other followers

%d bloggers like this: