Setup Icons and Splashscreens for Your App

All right, it may change in the future but currently, setting up icons and splashscreens for your apps is not (totally) done in the plugin’s admin panel. You’ll have to do 3 things:

  • Prepare assets
  • Reference assets in the config.xml file (using WordPress)
  • Download the project ZIP and add assets to it
In this article, I assume that you use PhoneGap Build to build your apps. More generally, we give preference to that way of building apps as it is a lot more easier for beginners. It doesn”t mean that you can’t use the CLI method to build WP-AppKit projects if you want to. But be aware that regarding icons and splashscreens, there are differences between the two: http://docs.phonegap.com/en/3.5.0/config_ref_images.md.html.

Preparing Assets

First thing to do is to create all the needed assets. The difficulty comes from the different screen densities support. Basically you’ll have to do one asset per density, per OS for icons and splashscreens.

Android and iOS handle things differently. Android defines density ranges and iOS has fewer variations (retina/non retina and iPhone 4/iPhone 5).

WP-AppKit Icons Example

WP-AppKit icons for Android

A thing that you may want to do is to create a special kind of PNG for Android called 9-patch images. Those images have the capacity to extend in order to support different screen dimensions. More info here: http://developer.android.com/tools/help/draw9patch.html.

Referencing Assets

In the WordPress edit panel of your application, search for the PhoneGap Plugins text area. This is where you’ll add the XML tags that reference the app’s icons and splashscreens.

Referencing icons and splashscreens for PhoneGap Build is explained here.

Here what we use for our demo apps.

<!-- Icons -->
<icon src="icon.png" />
<icon src="./icons/icon-wp-appkit-ldpi.png" gap:platform="android" gap:qualifier="ldpi" />
<icon src="./icons/icon-wp-appkit-mdpi.png" gap:platform="android" gap:qualifier="mdpi" />
<icon src="./icons/icon-wp-appkit-hdpi.png" gap:platform="android" gap:qualifier="hdpi" />
<icon src="./icons/icon-wp-appkit-xhdpi.png" gap:platform="android" gap:qualifier="xhdpi" />
<icon src="./icons/icon-wp-appkit-xxhdpi.png" gap:platform="android" gap:qualifier="xxhdpi" />
<icon src="./icons/icon-wp-appkit-xxxhdpi.png" gap:platform="android" gap:qualifier="xxxhdpi" />

<!-- Splashscreens -->
<gap:splash src="splash.9.png" />
<gap:splash src="./splashscreens/splashscreen-wp-appkit-ldpi.9.png" gap:platform="android" gap:qualifier="ldpi" />
<gap:splash src="./splashscreens/splashscreen-wp-appkit-mdpi.9.png" gap:platform="android" gap:qualifier="mdpi" />
<gap:splash src="./splashscreens/splashscreen-wp-appkit-hdpi.9.png" gap:platform="android" gap:qualifier="hdpi" />
<gap:splash src="./splashscreens/splashscreen-wp-appkit-xhdpi.9.png" gap:platform="android" gap:qualifier="xhdpi" />
<gap:splash src="./splashscreens/splashscreen-wp-appkit-xxhdpi.9.png" gap:platform="android" gap:qualifier="xxhdpi" />
<gap:splash src="./splashscreens/splashscreen-wp-appkit-xxxhdpi.9.png" gap:platform="android" gap:qualifier="xxxhdpi" />

 

<!-- Icons iOS 7.0+ -->

<!-- iPhone / iPod Touch  -->
<icon src="./icons/icon-60.png" gap:platform="ios" width="60" height="60" />
<icon src="./icons/icon-60@2x.png" gap:platform="ios" width="120" height="120" />

<!-- Spotlight Icon -->
<icon src="./icons/icon-40.png" gap:platform="ios" width="40" height="40" />
<icon src="./icons/icon-40@2x.png" gap:platform="ios" width="80" height="80" />

<!-- Icons iOS 6.1 -->

<!-- iPhone / iPod Touch -->
<icon src="./icons/icon.png" gap:platform="ios" width="57" height="57" />
<icon src="./icons/icon@2x.png" gap:platform="ios" width="114" height="114" />

<!-- iPhone Spotlight and Settings Icon -->
<icon src="./icons/icon-small.png" gap:platform="ios" width="29" height="29" />
<icon src="./icons/icon-small@2x.png" gap:platform="ios" width="58" height="58" />

<!-- Splashscreens -->

<!-- iPhone and iPod touch -->
<gap:splash src="./splashscreens/Default.png" gap:platform="ios" width="320" height="480" />
<gap:splash src="./splashscreens/Default@2x.png" gap:platform="ios" width="640" height="960" />

<!-- iPhone 5 / iPod Touch (5th Generation) -->
<gap:splash src="./splashscreens/Default-568h@2x.png" gap:platform="ios" width="640" height="1136" />

 Adding Assets To The Project

When you’ve finished creating assets (i.e. PNG files), you’ll have to add them manually to your project’s archive (i.e. ZIP file). It means that once you have downloaded the ZIP file of your project from the edit panel in WordPress, open it and add the icon and splashscreen images to it before submiting the archive to the PhoneGap Build.

At this step, errors come often from the fact that you have stored the assets in a place which is different from what you have declared in the config.xml. Make sure that the two match. In the examples above, assets are stored in an icons and a splashscreens subfolders (except for the Android default icon and splashscreens).

Here how we store icons and splashscreens for our demo apps.

Demo App Project

Wp-AppKit demo app icon and splashscreen folders

Happy coding!

Feature Preview: The New Page Component

We’re actively working on the next release of WP-AppKit. As it is a rainy sunday (in France), it was a good time for a quick screencast about the new page component which will allow to browse page trees in apps. (Vous êtes francophone, pensez à activer les sous-titres.)

Have something to say about this video? Great! Comments are there for that. Please remember that comments are moderared. SPAM or off-topics comments won’t be published.

WP-AppKit's Banner 2

Getting Started: Build a Minimal App

Wp-AppKit apps are composed of :

  • a Javascript core that handles content retrieval, content storage, routing, view rendering, app history etc. The core can’t be modified directly but you can interact with it using Javascript Hooks and Parameters.
  • an HTML/CSS/Javascript theme that is used to render app screens. Themes are fully customizable and you’re totally free to create the HTML/CSS structure and the UI/UX that you want. Let’s see the basic steps that will put you on rails for building your own app’s theme:

Step 1: Theme’s Folder

  • Wp-AppKit themes are located in wp-content/themes-wp-appkit
  • Create a theme’s folder (e.g. wp-content/themes-wp-appkit/my-nice-theme)
  • Name theme’s folder only with lowercase characters and use minus signs for spaces
  • The minimal app theme must have the following files:
    • head.html
    • layout.html
    • archive.html
    • single.html
    • menu.html
    • js/functions.js
  • HTML files have to be placed at the theme’s folder root.
  • functions.js has to be in a js subfolder.
  • All files can be empty.
  • If you want to display anything else rather than a very lovely white screen, just put something in layout.html (any text will do the trick).

The minimal set of files required by a WP-AppKit theme

What Happen If I Don’t Do That?

Your application va râler (means will grumble in French). That means that it might work but it will throw warnings and errors to the console

[caption id="attachment_965" align="aligncenter" width="526"]FQ2: Console Errors Errors When head.html Doesn’t Exist[/caption]

For a complete overview of how to build your own theme, see this tutorial where we build a simple Bootstrap framework based theme.

And for inspiration and examples, WP-AppKit comes with default themes that you can use as a starter for your app, like the off-canvas theme.

Step 2: Minimal App Configuration

  • When configuring your app in WordPress, don’t forget to have at least one component in your app :

minimal_theme_add_component

  • And you’ll certainly want to display a menu for your app (rendered with the menu.html template) : to do so, add some components to your menu :

minimal_theme_menu

  • Then click the “Preview” button to display your app in your browser 🙂
To go further and learn everything about building your app theme, go see the doc !

Happy coding!

The Case Of Content Based Apps

We already saw the marketing and technical issues to be addressed for a mobile app project. Also, there is one particular issue we have to raise as it can greatly affect your mobile project: content. Whether you run a news site, an online shop, a blog or a job board, you push content online. It can be highly structured (e.g. classifieds) or mostly freeform (e.g. blog post). These pieces of content have probably been carefully crafted and optimized for web reading, navigation and marketing. There is also a good chance you use a CMS (WordPress, Drupal…). So you took a lot of care to produce content online to meet whatever objectives you have. And now, you’d like to bring this content to mobile users.

Same Content New Environment

BBC App Mobile is a totally new content consumption experience. Screens are obviously smaller. However, it’s not the only (or even the most important) difference. Yes screens are smaller but higher densities and font handling increase readibility. Reading conditions are different. You are no longer stuck at your desk to consume digital content. You can read on your sofa as you do with good old fashion books. You may also be in a coffee shop or standing in a subway. You can interact with it through the tactile interface. So it retains the interactivity you had on the desktop but in a lot more natural way. All that combined means that the same piece of content should fit both the now classic web usage and the new mobile usage. It’s not that the content is entirely different but the navigation to access it and the way it is presented and consumed differ.

The Right Content Structure

The keypoint is to be able to structure your content in a way that it can be presented in at least two different forms. It’s an old developer mantra: content/form separation. It has been a nice advantage when going through content migration. The stylesheet of the site is going to change? It shouldn’t be a problem as content is structured to offer anchor points for CSS. Reusable content structure and CSS styling have allowed to migrate smoothly from a CMS to another or even reuse content across different products. The very same advantage can be leveraged to bring content to the mobile. Structure should allow to clearly identify content pieces such as titles, quotes, paragraphs… in order to be able to entirely re-style content for the mobiles. Styling a title is simple but what about footnotes or comments ? You will have to think about mobile adapted forms for them. A quick word about content structure. When talking about structuring content, you may envision a CMS contribution interface as super complex forms where every piece of content is a field but then you will totally lose the required content creation flexibility. Often good, plain and well-structured HTML, where all visual attributes are handled with CSS, is good enough to support mobile styles. Don’t give in to a content structuration obsession or you’ll probably end up with a functional nightmare where creating content is a constant battle.

 Consider Also Media and Navigation

When working on mobile content, you will be quickly confronted with the problem of how to handle embeds. The most common embeds are video players (such as YouTube, Vimeo…). They’re relatively easy to use on mobile (providing you correctly handle screen sizes and orientations). But there is many other types of embedded content, and a lot more complex, which for technical reasons doesn’t adapt to mobile at all (often done with Adobe Flash) or simply because their format doesn’t fit (that’s often the case of data vizualizations). You’ll have to decide whether you can provide embeds for all platforms or simply strip content for some platforms. Even for media so simple as images, you’ll have to be careful. Let’s say an image is an infographic you’ll have to ensure that it can still be read on mobile (providing a zoom for example).

Fitvids.js is a Javascript library you can use to create responsive video embeds.

Fitvids.js is a Javascript library you can use to create responsive video embeds.

Navigation. Unless your content has a very simple structure, it’s likely that app navigation will differ from its web counterpart. So whatever content management tool you use, it has to be able to handle several types of content classification and navigation.

Content, even simple, will have to be adapted for the mobile to offer the smoothest possible experience. It has to be taken into account in content conception, creation and delivery. And it is likely that both your CMS and API will have to be upgraded to achieve that. Again, it is an often neglected part of mobile project budgets and it results in otherwise nice applications providing crappy content.

This article has been carefully edited by our friend Jenny Beaumont. A thousand thanks Jenny! All mistakes are ours.

Have something to say about this article? Great! Comments are there for that. Please remember that comments are moderared. SPAM or off-topics comments won’t be published.

WP-AppKit's Banner 2

Add JavaScript Code In App’s Themes

  • WP-AppKit themes are based on Javascript.
  • All app themes have a functions.js file which is the entry point for your theme’s Javascript (e.g. event bindings, DOM manipulation, dialog with app core …).
  • The path to functions.js is: wp-content/themes-wp-appkit/[your-theme]/js/functions.js.
  • Inserting Javascript directly in templates (e.g. single.html) should be done with caution. Simple code is fine (like string concatenations, conditional statements, component content retrieval…), all within UnderscoreJS template engine tags <% … %>, but DOM manipulation has to be avoided.
define(['jquery','core/theme-app'],function($,App){

      //Launch app content refresh when clicking your refresh button :
      $('#my-refresh-button').click(function(e){
            e.preventDefault();
            App.refresh(function(){
                  $('#my-feedback').html('Content updated successfully :)').show();
            });
      });

});
You may also include Javascript libraries using RequireJS dependency management (the first “define” line of the above example). More on that here.

Happy coding!

Thumbail : Child Paper Plane

WP-AppKit Beta Is Out

After months of hard work, App Kit Beta is out! (What is WP-AppKit?) You can download it from GitHub.

Download the beta version of WP-AppKit

This release features a WordPress plugin:

  • To choose an app theme
  • To configure the app navigation
  • To export the PhoneGap project to be compiled

The WordPress plugin also provides the app theme micro-framework and the mobile web services.

It ships along with the Nihao sample app theme for iOS and Android.

Next steps for us should be to:

  • Bring online more documentation and tutorials
  • Add new functionnalities to framework around offline management, web services caching, responsive images and videos and first access to apps
Have something to say about this article? Great! Comments are there for that. Please remember that comments are moderared. SPAM or off-topics comments won’t be published.
Thumbnail : data center

Don’t Neglect Backend For Your App

When designing apps, along with technical issues,  we focus a lot on UI, content and interactions. It’s easy to forget that your app relies on a backend just as websites do. Some apps are fairly autonomous, let’s say calculators for example, but most of them retrieve content from backends (think of news apps).

Apps Are Not Standalone Products

When creating an app, you will encounter one of two scenarios that you’re already familiar with from building websites:

  • Content and services are already in place
  • You’re beginning from scratch

In both cases, you’ll have to ensure that the backend is “open” to app consumption. Basically it means that content and services needed by the app have to be available through an API.

Premium content is a good example of that.

  • First your app will have to retrieve content from your content repository with the access rights correctly associated to each piece of content.
  • Then, your app will have to trigger a connection when a user tries to access premium content.
  • Finally, user login and password will have to be checked against the authentication system in order to let the user access (or not) the requested content.
Screenshot : Prismatic app

Another good example: personalization. The Prismatic App uses the same backend as its corresponding website to agregate the contents you like (or you might like).

All of these functionalities rely on dedicated APIs, whether you add them to an existing infrastructure or you build this infrastructure from scratch along with the app itself.

It seems rather obvious, but believe me, it can be quite a challenge for a lot of app projects. Let me explain.

Your App Is Nothing Without A Very Well Adapted Backend

BAASBOX screenshot

Backend as a service (BaaS) are services dedicated to provide backends dedicated to mobile apps (here the open source solution BAASBox)

A fairly common situation in an app project is to have a website already running with all the content and services needed.

If the content and services are available as web services, you’re in a good place to start your app project. (However, remember that all web services are not suitable for apps. Those based on REST and JSON are favored.)

If this is not the case, and from my experience it’s the most common situation, you will have to add this new access layer and that could be tricky on systems that have not been designed for that. Some companies even have to import feeds in a new backend that will coexist with the old one.

If you are in the situation where you create simultaneously your app and its backend, I would recommend not to build a backend only dedicated to mobile unless you have a very specific use case to back up this strategy. In the modern world, backends have to support both web and mobile.

Yes your app project will modify, sometimes deeply, your existing web products and this is often neglected in budgets. That should not be a hidden cost as it can be almost half of the budget.

The good news is that when your backend is ready for the mobile world, it will be used for all your mobile apps (or anything else needing an API by the way). So, it is a very good investment.

This article has been carefully edited by our friend Jenny Beaumont. A thousand thanks Jenny! All mistakes are ours.

Have something to say about this article? Great! Comments are there for that. Please remember that comments are moderared. SPAM or off-topics comments won’t be published.

WP-AppKit's Banner 2

Thumbnail: Building My App

How Can I Build My App?

We already saw why you may want to have an app. Now let’s see what your options are for building one. It won’t be an in-depth, technical article, but it should give you a good overview of the solutions currently (2014) available.

The Many Worlds Of Native Technologies

In order to be able to distribute your app in current main app stores (Apple App Store and Google Play), you have to use so-called native technologies. This means that you don’t use classic web technologies such as HTML, CSS and Javascript. Instead you use languages and frameworks provided by Apple and Google. Objective-C for iOS apps and Java for Android.

Once development is complete, you compile your app and submit it to the app stores. After that, when it gets validated, your app has its place in the app store catalog and users can download it. When updating your app, the process is the same. That’s right, there are no instant or automatic updates as you can have for websites.

It’s very important to understand that apps are installed on smartphones (like classic software on our good old fashioned desktop computers) as opposed to web apps which behave as websites being accessed on a distant server through a browser.

Being a permanent resident of user phones has its advantages. Mainly, it allows us to access phone features such as the camera, and to be less dependent on network availability. At the moment, native frameworks are also the most optimized and integrated way to provide a smooth and efficient app user experience.

Facebook Paper app is a very good of the kind of UI you may achieve with native technology.

https://www.youtube.com/watch?v=IhrbT9O6kW8

The downside of native technologies is that you have to invest in several different technologies, known to have quite steep learning curves. It leads to (really) high development costs to ensure your presence on your users’ mobiles. If your economic model doesn’t have room for this kind of investment, then building an app can be a problem.

Web Technologies

Web apps have existed since the beginning of the mobile era. In fact, they have been pushed even before apps became the favored solution.

In 2007, Apple Computer launched the iPhone, the company’s first ever smartphone. When the device launched, the device did not provide any support for third-party software: Apple’s CEO Steve Jobs believed that web apps served over the internet could provide adequate functionality required for most users. Soon after its release, however, developers had managed to “jailbreak” the iPhone and begin coding third-party apps for the device, distributed through package managers such as Installer.app (which itself was based on APT) and Cydia. (Extract from the Wikipedia article about app stores.)

You can see web apps as a cousin of web sites. They use the same technologies and technical architecture (HTML, CSS, JavaScript, Ajax, web servers…) but they emphasize an application UI rather than the classic web page model.

Web apps often co-exist with apps. Famous examples of that are the Facebook and GMail apps. You can download apps for these two services and you can also access them as mobile-optimized web apps. Sometimes, it’s even the only mobile offer for big brands such as the Financial Times. Since August 2013, Amazon App Store welcomes HTML5 apps.

In the beginnings of the mobile phone, web apps could not match the native experience. They lacked many features related to hardware access (eg. Camera access). But HTML5 is progressively closing the gap, and you can now build very good mobile UI with web technologies.

But even with an almost technical parity, web apps are still web sites. Yes, you can create a shortcut on the mobile desktops but users must have a connection to launch and use them, and you won’t be in the app stores. Finally, some technologies are still only available for apps such as notifications.

Bridging The Gap

Along the path to finding the right technical mobile strategy where you can use web technologies and benefit from mobile features such as notifications, many solutions have emerged under the name of hybrid apps.

The concept behind hybrid apps is fairly simple: mixing web and native technologies. Native technology provides a standard encapsulation of an app written with web technologies. The native shell adds a JavaScript API to access the phone’s hardware and renders the HTML app using the phone’s browser. It means that you can build your UI with HTML, CSS and Javascript, then embed it into a pre-defined, native shell (one per OS) and release your apps in app stores.

LinkedIn and Facebook have been early adopters of this method for building apps. But at the time, it was hacky at best. Clumsy UI, performance and cost issues brought them back on the track to native technologies (around 2012 for Facebook and 2013 for LinkedIn).

These changes have been largely discussed and some people saw them as a proof that web technologies are no match for native technologies regarding apps. Here, we have to focus on the fact that mobile is at the heart of the growth of these big brands, and that they can afford to invest in it.

So what’s left? Is there an efficient solution for building apps with web technologies for the rest of us?

Hopefully yes. Many solutions to industrialize hybrid apps creation have emerged and matured over the last few years. Among them PhoneGap (an open source project fully supported by Adobe) is probably the most well-known. It offers a standard way to encapsulate HTML apps into native shells and thousands of apps are currently made with it.

This video gives a quick intro of what is PhoneGap.

At the same time, HTML5 is making progress, mobile browsers are becoming increasingly efficient and many developers around the world are building HTML app frameworks to help ease the work needed to create your app.

So, we’re not yet to the point where going native or hybrid is the same, but in many situations hybrid is a very good solution for lowering the cost of production, notably when apps are content-oriented.

But mind the gap! You have to remember that native technologies are fairly mature technical worlds. Don’t assume that what you see in native apps can be done out the box in hybrid or web apps. Currently, you still have to benchmark different solutions (hybrid, HTML, JavaScript… frameworks) and then glue them together to create your app, opposed to the consistency found in integrated native solutions.

This article has been carefully edited by our friend Jenny Beaumont. A thousand thanks Jenny! All mistakes are ours.

Have something to say about this article? Great! Comments are there for that. Please remember that comments are moderared. SPAM or off-topics comments won’t be published.

WP-AppKit's Banner 2

Post Thumbnail

Do You Need An App?

If you search for “Do You Need An App?“, results will show you that it’s a popular question with complicated (and often contradictory) answers. Of course, for a few businesses, like games for example, not having an app is nonsense. But it’s not so easy for the rest of the world. Small businesses and big corporations alike face the app dilemma.

Marketing Is Telling Me That I Need An App

As more and more people own smartphones (58% of American adults , 83% under 30), more and more people discover and use app stores (in the US, 62% of smartphone owners use at least one app per month ).

See all numbers on the Pew Research Internet Project website.

This means that your brand can be discovered on the web through search, social networks, directories… and now through app stores. If you’re not in the app stores, maybe you’re giving the opportunity to your competitors.

Having your icon (logo) on customers’ mobile desktops is a big advantage for brand awareness.

You can also engage them more through notifications. Apps are a powerful way to control the user experience you want for your brand. When using an app, you don’t use anything else. An application is a more direct medium between you and your customer. It’s better than mobile web where you have to launch a browser, then search for a website and eventually access it in a mobile-friendly version.

Apps Are About Situations And Services

Now that you have a motivation to get an app for your brand, you have to answer the question: what can I bring to my customers with this app?

The question is the same for the web but it’s probably harder to answer it in the app world. For example, searching the web is now the primary way to find a restaurant and it’s a good strategy for restaurants to have a web site well-optimized for search engines. The continuation of this strategy is probably to have a mobile-optimized version of the site. But why have an app if it’s likely to be a replica of the mobile website?

It’s certain that apps (and mobile websites) are not only about making things fit a small screen. As web designers, marketers and developers, we might think that mobile is about screen sizes. But mobile is in fact about mobility, i.e. the ability to have this small device available anywhere, in different situations, with various lighting and network conditions. Good apps take that into account. We often have only one hand available to use our phones or a short and chaotic 10 minutes to read in the subway.

Apps are tools just like our good old desktop software. Except that these are tools in our pockets, and they can interact with reality through a camera, geolocation, voice recognition, barcode scanners… the most used apps provide useful services such as restaurant finders, interactive subway maps, job alerts, chats, learning programs…

Releasing an app is providing useful services adapted to mobility situations, not replicating your website. Your app and your website have to coexist and be a consistent ecosystem.

La Fourchette App Screenshot

La Fourchette app is based on content and uses geolocation to find a restaurant near you.

Is Content Enough?

In the US, at least 62% of smartphone owners get news on their handheld device. Mobile phones give us the ability to access news without particular effort, whenever we want. But content is more than news. Think of books, dictionaries, instructions, guides, classifieds, recipes… Your handheld device becomes a portable and interactive library. As on the web, content can be a service and apps become tools to deliver it in a totally new and more convenient way. Provided that content has been correctly setup for mobile consumption, it is often more readable and always available even offline.

Having good and useful content is definitely a strong point to provide an app. But to succeed, you should carefully craft the content to the mobile experience.

Medium App Screenshot

The Medium app pledge: read the stories that matter to you. Anywhere, anytime.

Building An App Is An Expensive Trip To The Past

Building an app brings you back 10 years when you had to setup your first website. Almost all apps are built with so-called native technologies. That means that iOS, Android, Windows Phone… all have their own language to build apps. (They also have their own ergonomics and ways to deliver apps.) iOS uses Objective-C, Android uses Java… These are not web technologies and can have steep learning curves. You won’t be able to capitalize a lot on what you’ve done before.

This is why hiring app developers is often hard and expensive. There’s no standard pricing for app projects, but you’ll see that it’s not rare to begin around 10K € (around 14K USD). This is why we’re seeing a lot of online app builders cropping up, which aim to simplify and industrialize the creation process for basic needs and to lower cost.

The other crux of the matter is that if you already have an online presence, you’ll probably want to reuse data you’re using for the web. If you have setup a CMS, you will have it to provide content for your app.

Building and maintaining an app can be a big technical investment and a rather radical change in your habits.

So, you still want to go with an app? In the following articles, we will provide you with insights on how we think we can tackle the problems it raises.

This article has been carefully edited by our friend Jenny Beaumont. A thousand thanks Jenny! All mistakes are ours.

Have something to say about this article? Great! Comments are there for that. Please remember that comments are moderared. SPAM or off-topics comments won’t be published.

WP-AppKit's Banner 2

Having questions?

FAQ | Tutorials | Documentation

Or

Contact Us