Phonegap app store approval
There have recently been some grumblings from the development community that Apple has rejected their PhoneGap apps for not being "native enough". By itself, this rejection isn't that surprising. Apple has strict rules and guidelines on what they will and will not accept into the App Store. What did surprise me is that people were blaming PhoneGap as the reason. This accusation is not accurate, and this amazing article, originally posted by Andy Trice, attempts to clear things up.
- have a user experience that feels like an "app"
- feel "at home" in the iOS ecosystem
- offer a differentiation from a mobile web experience
- "2.12: Apps that are not very useful, unique, are simply web sites bundled as Apps, or do not provide any lasting entertainment value may be rejected"
- "10.3: Apps that do not use system provided items, such as buttons and icons, correctly and as described in the Apple iOS Human Interface Guidelines may be rejected"
- "10.6: Apple and our customers place a high value on simple, refined, creative, well thought through interfaces. They take more work but are worth it. Apple sets a high bar. If your user interface is complex or less than very good, it may be rejected"
- "12.3: Apps that are simply web clippings, content aggregators, or a collection of links, may be rejected"
- If your app is just a web site wrapped in PhoneGap, it will likely get rejected. There are exceptions to this case, but do not expect that wrapping a web site in a web view will get you into the App Store.
- If your app requires the user to pinch/zoom/pan to view content (like a web site), it will probably get rejected. Your apps need to feel like apps and be immediately intuitive. Don't make the user work to find how the app functions, and don't make them navigate past navigational content just to get to something useful.
- If your app just looks like text on a page with hyperlinks, and has no native-like styles, it will probably get rejected.
First, consider the following questions with respect to your application:
- Does the app follow user interface paradigms that are consistent with the platform?
- How does the application appear visually?
- Does the application resemble an HTML page, or does it have visual “controls” and touch-optimized interface elements?
Both of these images captured by the PhoneGap emulator were captured from the exact same application. The image on the left has HTML content but no CSS style sheet attached. If you compare the visual experience, the application on the left looks like web page content. There are no styles to give it the appearance that is expected of an application experience. Alternatively, the image on the right looks like an app: it has a header area that contains navigational elements, it has a scrollable content area, and each list item has UI elements that prompt the user to proceed through an experience or workflow.
Figure 2. A blog formatted as a web page.
First, it is just a web site (my weblog) wrapped in a web view. Apple frowns upon the practice of wrapping web sites with a native shell. The wrapper is an empty shell that contains no logic, just a reference to the remote web site. It will fail in offline scenarios. And there is no differentiation from a mobile web experience or added value to offset this failure. Secondly, the user interface has not been optimized for a mobile experience. The user must perform a pinch/zoom gesture to read any content. Additionally, there is no touch-friendly navigation, there is no discrete differentiation between navigation and content, and the overall experience does not have an app-like feel. Develop your applications such that they feel “at home” when placed next to a native application. You don't have to mimic every single native UI style, however user interaction paradigms should be similar. Make the user interface intuitive and clean. When considering what is meant by an app-like experience, look at other apps that are already out in the public and examine designs that have already been approved by Apple. Numerous resources on the web compare existing app user interfaces including:
If the user must click an HTML link to load a separate page, and there is a disjointed transition between the views, you will likely need to optimize the experience. Apple seems to prefer applications that have a unified feel and continuous experience. If the user performs an action within the app that gives the impression that the current “page” is unloaded and a new page is being loaded, then you take steps to make this transition more seamless. Try introducing single-page architectures with asynchronous loading of data and dynamically updating the content. Or try to make the transition between pages lighter and faster, with less of an interruption to the user experience. Optimize the processes and experience of getting data in and out of your application. First, minimize your data transaction overhead by only sending data as it is needed, in a lightweight format. This optimization reduces latency and generally makes your app “feel faster” by reducing total time from requesting data to displaying it on the screen. Pay particular attention to all transitions and animations within your application. These activities include transitioning from one view screen to another or animating elements within your HTML experience. If your app stutters, flickers, or provides a less-than optimal experience, revisit how you move app elements around the screen. Look into techniques to force GPU rendering of HTML DOM elements using just CSS styles. In many cases, these techniques can improve overall application performance. Additionally, add simple nuances like indeterminate progress bars or animated spinners to provide status during make time-intensive processes, like transactions with the server. These UI indicators go a long way to helping the application feel faster and more “native.” Last, but by no means least, pay attention to response times within your application. These response times can relate to processing user activity or response times from the server. Apple generally does not like slow or unresponsive applications. If data takes a long time to load from a server and be usable, then Apple may reject the app. Likewise, if the user clicks a button, and nothing happens for a few seconds, this sluggish behavior could be grounds for rejection. You application needs to provide some level of interactivity and feedback to the user, even when operations are happening in the background.
In conclusion, pay attention to your user experience. Apple's approval process varies depending upon what your app does and how it does it. Do not assume that the use of PhoneGap means that you don't have to abide the App Review Guidelines and App Store Review Guidelines from Apple. In general, Apple pays close attention to the quality and overall user experience of an application. If it does not perform well, is buggy, is aesthetically displeasing, or if it offers no differentiation from a mobile web experience, then it is likely a candidate for rejection from the App Store. Apple has set the bar very high for the quality of applications it accepts within their ecosystem. The more you focus on a quality user experience, the more your chances of success improve. For more examples of how to improve the experience of your application to make it feel more native, Greg Avola, the creator of the popular Untappd application, has an article on the ADC, "Creating apps with PhoneGap: Lessons learned."
Thanks to Andy Trice.
Published: Mon, 07 Apr 2014 18:29:37 +0000