Forge support for iOS9 and OSX “El Capitan” is ready! Forge is ready for iOS9 and OSX El Capitan

If you caught last night’s Apple event you’ll know Apple have finally pushed the GM releases for Xcode 7, iOS 9 and OSX El Capitan.

The GM release is what Apple will be shipping to the general public in a week’s time so, if you haven’t been following along during the Beta-test phase, now is the time to make sure your app is ready for iOS 9.

We’ve been working towards this moment since the initial announcement in June and are pleased as punch to announce that supports iOS9 and OSX El Capitan as of platform version v2.2.16.

To get your app running on iOS 9 all you’ll need to do is take the following steps:

1. Upgrade your Xcode to version 7

You can grab the GM seed from the Xcode Developer Center or, if you don’t mind waiting a week, download the update from the App Store.

2. Update your iOS device to iOS 9 (Optional)

If you don’t want to wait till next week, you can head over to the iOS Developer Center and grab the install image.

We also support the new iOS 9 simulator in Xcode 7 so this step is not necessary if you want to hold off on upgrading your hardware immediately.

3. Update your app to platform version v2.2.16

To update your app to the latest platform version open up the Toolkit, navigate to your app config and click on the Change version button:

Toolkit App Config

In the popup dialog, simply click the Switch to v2.2.16 button:

Toolkit App Version

That’s it!


Sometimes there are minor teething issues with GM releases as Apple often adds a bunch of new stuff that wasn’t present in the betas. So please, if you run into any problems or have questions, don’t hesitate to let us know at and we’ll be all over it!

Important note for Ionic/Angular users:

We’ve heard reports that UIWebView for iOS 9 introduced a breaking change that can cause issues for apps that rely on the semantics of window.location.

If your app uses the Angular $location service you can find a patch and more information here:

Use and Mozilla’s PDF.js to build a PDF viewer for your Android app


While iOS has had a native PDF viewer baked into the WebView component for as long as I can remember the Android WebView is still unable to open PDF files for viewing.

Usually this problem is solved in one of two ways, neither of which are ideal:

1. Show the PDF file via the online view capabilities of the Google Doc Viewer.

  • Requires that the user sign into their Google Account before they can view the file.
  • It’s not immediately clear to the user how they should navigate back to your app.

2. Download the file locally and open it via an external Android app.

  • Complex to implement.
  • May fail if the user’s Android device does not have a PDF viewer installed.
  • It’s not immediately clear to the user how they should navigate back to your app.

In this tech note we’re going to explore a third option which uses Mozilla’s PDF.js library to seamlessly display PDF files in your app and does not suffer from any of the drawbacks above.

Introducing PDF.js

PDF.js is a HTML5 Portable Document Format (PDF) viewer built by Mozilla Labs. that can faithfully and efficiently render PDF files without native code assistance.

It provides excellent document rendering quality and is easy to integrate into an app to provide a workable solution to the problem of rendering PDF documents for your Android users.

You can find out more about the project on the GitHub page:

Using PDF.js in your App

Step 0: Create an application

Create a new app and add the following modules to it:

  • file – unless you are viewing PDF files which are local to your app or can set CORS headers on the remote server you will need to use forge.file.cacheURL to obtain a local copy of the file.
  • tabs – you may wish to continue using the tabs module to display PDF’s on iOS

Step 1: Obtain the PDF.js library

While there are instructions for building the PDF.js library from source on the GitHub page we’ll be making our lives easier by using the bower package manager to obtain a copy of the library:

What this will do is add a subdirectory called bower_components to your app containing the following files:

If you don’t already have bower installed on your system you can head over to for installation instructions and documentation.

Step 2: Load the PDF.js library in your app

Open your app’s src/index.html file and add the library includes to the other content in your page’s <head> section:

Step 3: Create a custom PDFViewer

A huge advantage of using a HTML5-based PDF Viewer is you get a lot of control over how to represent the reader to your users.

Not only can the viewer itself be customized by modifying bower_components/pdfjs-dist/web/pdf_viewer.css but you also get complete control over how it will be hosted within your app.

For the purposes of this tutorial we’re going to replicate the look & feel of opening a PDF using forge.tabs on iOS to give us something like this:

Android PDF Viewer

Let’s open our app’s src/js/main.js file and implement a simple PDF viewer based on PDF.js:

Step 4: Test it!

Open up your app’s src/index.html file and add some code to test your viewer:

In Conclusion

In this short tutorial we walked you through the process of using Mozilla’s PDF.js library to build a simple PDF viewer you can use inside your app.

You can obtain copies of the full src/index.html and src/js/main.js files used for this demo here:

GitHub Gist

We hope you enjoyed it and are looking forward to hearing from you at if you have any feedback or questions!

Connect Everything to Everything Else With and PubNub

It’s a fascinating time to be a developer. As early as 2008 the number of things connected to the internet surpassed the number of people alive on earth, and some well informed people think the number could be as high as 50 billion by 2020.


Users have been exposed to the type of user experience that realtime web technology provides, and expect those types of experiences in the apps they use.

Although realtime web technologies have been around for some time it’s only quite recently they’ve started to pervade everyday activities, such as hailing a taxi, keeping track of sports scores, bidding in an online auction or even opening the door to the garage.

Keep talking

Massive social platforms now represent one of the main ways that we communicate with each other. It’s realtime technologies that power the interactivity that make the experience so rewarding. Given the comprehensive toolsets provided by PubNub, implementing full-featured, massively scalable messaging has never been easier.

IoT and Really Big Numbers™

Talk about the Internet of Things (IoT) brings up numbers that can get anyone sweaty!

The global market is estimated to be worth $7.1 trillion by by 2020, or $14.4 trillion, according to Cisco. Less than 1% of things that could be connected to the Internet currently are, which means 10 billion things out of the 1.5 trillion that exist globally are currently connected. That’s a big gap, and a big opportunity.

Time-to-market has never been more key, nor a mature and well-developed technology stack.


PubNub started life as a provider of APIs allowing publishers and developers to integrate messaging and social services on apps and websites.


Since then their product offering has evolved into The PubNub Data Stream Network, a PAAS which allows rapid development of real-time apps and communication for web, mobile and IoT apps.

Their wide range of robust, friendly APIs merge seamlessly with’s fast, effective hybrid mobile runtime, bringing realtime technology to mobile.


In software architecture, publish–subscribe is a messaging pattern where senders of messages, called publishers, do not program the messages to be sent directly to specific receivers, called subscribers. Instead, published messages are characterized into classes, without knowledge of what, if any, subscribers there may be. Similarly, subscribers express interest in one or more classes, and only receive messages that are of interest, without knowledge of what, if any, publishers there are.

Pub/sub is a sibling of the message queue paradigm, and is typically one part of a larger message-oriented middleware system.

This pattern provides greater network scalability and a more dynamic network topology, with a resulting decreased flexibility to modify the Publisher and its structure of the data published.

Using PubNub with

To demonstrate Pubnub’s ease of use I’m going to show you how to run PubNub’s 10chat 10-line Javascript chat sample inside a app.

Step 1


Create a new app in the Trigger Toolkit.

Step 2


Under Config / Tools, specify whether you want the app to run on a specific device or emulator, and specify the path to the appropriate SDK

Step 3


Now let’s give it a test run! Under Forge, click either Android or iOS to run it on the appropriate platform, or click Web to run it in a browser window.

You should now see something like this:


Step 4

So far so good, now let’s make it do something!

Find the index.html file in the src/ folder of your app, open it in the text editor of your choice and remove the template code between the <body></body> tags to leave you with something like this:

Step 5

Click here to go to PubNub’s 10chat demo page:


…now copy the 10chat javascript code from the code box into your app’s index.html file:

Step 6

Save the file, go back to the Trigger Toolkit and run the app again.

Now if you open the 10chat page in a web browser you’ll be able to chat back and forth between the two!


Learn More

We hope you enjoyed this short introduction.

For more in-depth tutorials on PubNub, please visit the PubNub Data Stream Tutorial page.

If you’re interested in learning more about using PubNub with please give us a ping at, we’d love to hear from you!

Another splendid year at

Hi Trigger Folk,

Following a turbulent start at the beginning of the year our team have had the time of their lives delivering ongoing product development and world class support for your favourite hybrid app platform.

And what a twelve months it has been… over the course of this year we:

  • Resolved 1787 support tickets.
  • Released 80 module updates including support for major SDK updates from Facebook, Parse, Flurry, UrbanAirship and Apptentive.
  • Released 17 platform updates including support for iOS 8 and Android 5.0
  • Released Forge Live and sped up everyone’s development workflow by an order of magnitude.
  • Released our entire catalogue of native modules as open source.
  • Began building a community of contributors to our open source modules. Thank you for everyone who sent in a push request or three, you know who you are!
  • Introduced you to the future of hybrid app UI’s with our introduction to with sloths
  • Worked with the great folk at PushWoosh to bring you another option for Push Notifications on Android and iOS.

I’d like to say a special thank you to so many of our customers who have been incredibly supportive, patient and just plain awesome during this time. Without you it would never have been possible to successfully transition to become independent, profitable and able to remain this way!

The team will be taking a well-deserved break starting from this Monday, 22 December till Wednesday, the 7th of January 2015. We will however be responding to any critical issues that may come up during this time.

This email wouldn’t be complete without a hint at some goodies Santa has in store for us in 2015 so I’ll just say: Thisthis, some of this and definitely more of this.

All my thanks to our customers, business partners, StackOverflow contributors, module authors, GitHub contributors, contractors and everyone (past and present!) at Trigger. We wish you all a peaceful holidays and a truly satisfying new year!

 – Antoine

Ridiculously fast app development with Forge Live

Today we released v2.1.7 of the Forge platform and with it, a major new feature we’re really excited about: Forge Live


Forge Live shows you the effect of your code changes in real-time on an emulator or device making the the mobile build / deploy / test cycle faster than even the web (you don’t need to refresh!).

See it in action now:


It’s almost halfway through 2014 and there’s never been a better time to be hybrid app developer.

Frameworks such as AngularJS, Ionic and React promise an order of magnitude improvement in developer productivity. Coming up we can also look forward to technologies such as, WebGL and Apple’s Nitro JavaScript engine. Technologies which promise a level of performance that will open up a whole new class of applications that could previously only be tackled by native developers.

That said, one thing that doesn’t seem to be receiving much love is mobile app development workflow.

Frankly, writing apps for iOS or Android feels much like desktop app development did in the early 90’s!

  • Write some code
  • Compile your app
  • Deploy to device
  • Run app
  • Wash. Rinse. Repeat.

While this model is not without its advantages  it’s a shame to be bound by limitations inherent to compiled languages such as Java and Objective-C when hybrid app development is built on the same dynamic languages that make web development as easy as:

  • Write some code
  • Hit Refresh

In fact, using tools such as grunt-contrib-watch to detect changes to your files and then automatically trigger a browser reload the entire cycle can be reduced to a single step.

That’s why we created Forge Live!

Using Forge Live


If you are developing for Android please note that Forge Live is only supported on devices running Android KitKat (4.4.x) or higher.

Step 1: Install Node.js

Before you can start using Forge Live you will first need to install Node.js on your machine. You can either use your favourite package manager or download an installer from:


On newer versions of Ubuntu the packaged node binary has been renamed to nodejs due to a conflict with another package. Unfortunately this has the side-effect of breaking grunt.

The workaround is to install the nodejs-legacy package as follows:

Step 2: Check your Platform Version

If you’ve just created a new app you won’t need to do anything here.

If you want to use Forge Live with an existing app you will first need to check that your app is compiled with Forge 2.1.7 or higher.

You can do this from within the Trigger Toolkit:

Or in your src/config.json file:

Step 3: Start your app

Once your app is on the latest stable platform version you are ready to start your app up in Forge Live mode.

To do this, simply navigate to the Forge Actions page and click on the platform you’d like to work with:

Or with the command-line tools:

Followed by:

Any changes you make to your source code will now be instantly reflected in your running app. It’s that easy!

If you’d like more information about using Forge Live you can also look at the documentation.

We’d love to hear what you think about Forge Live so please feel free to contact us on with any questions or feedback.

A new year with

Ho Trigger Corps!

It’s now been just over two months since I took over the role of day-to-day management at and it’s time to take stock of what we’ve accomplished during this time.

This year I’ve had a chance to meet many of you for the first time and I’m pleased to report that we’ve been able to keep the promise we made to maintain the high bar sets for customer support. It’s been 75 days and during this time you’ve opened 420 support tickets and we, in turn, have resolved 425 support cases.

That said, despite all odds, life at hasn’t just been about support.

We’ve also managed to keep product development ticking over with 2 minor platform updates, 2 new native module releases and more than 10 updates to our existing native module line-up.

After open-sourcing our modules in December last year we’ve noticed a steadily increasing stream of pull requests coming in to the repositories that benefit our entire community.As a result it is largely due to your effort that we’ve been able to keep development moving.

Thank you Trigger Corps, You rock.



New Native Modules


Native Module Updates

  • forge.notification v2.3 New method: getBadgeNumber
  • forge.launchimage v2.4 New option: background-size: cover, iOS7 fixes
  • forge.file v2.3 New method:
  • forge.parse v2.3 New methods: setBadgeNumber, getBadgeNumber, registerForNotifications, Added support for Google Cloud Messaging, Update to latest Parse SDK
  • forge.flurry v2.4 New option: debug, Update to latest Flurry SDK
  • forge.facebook v2.3 Update to latest Facebook SDK
  • v2.2 Fix for mute switch position being ignored. (Thanks @mnaughton !)
  • forge.request v2.5 Fix HTTP method and contentType settings being ignored for file uploads
  • v2.3 Fix a crash when selecting all contacts on Android

Read the full changelog here


Core Platform Updates

We’ve pushed out two minor updates to the core platform which brings us up to v2.1.2.

These updates fixed a number of annoying bugs, made some progress towards a better code signing experience for our Windows customers, brought our Android native API support up to android-19 and added Chrome DevTools remote debugging support for Android KitKat devices.

If you’re not already on 2.1.2 do consider updating your projects today!

Read the full changelog here

New Hires

I’m really pleased to announce our new team member, Gaelin Meyer, who has been doing a great job managing Accounts and Marketing for us here at Trigger.

Gaelin has been working in an advisory capacity with several Internet Startups here in Cape Town since 2005, holds a degree in Psychology from the University of South Africa and is busy raising two beautiful children.

Her primary responsibility is to know what you need from us at, so expect to hear more from her in the upcoming months!


Team changes at is now nearly 3 years old and publicly available since January 2012. We’re delighted with how it has grown from a useful product — 10,000 developers signed up, and millions of app builds — to become a profitable business as of September this year.

We’re proud of the self-sustaining community that has built up around, with several people making their livelihood building apps for clients on our platform, and contributions from the community on StackOverflow. Last week we open-sourced our native modules and can already see developers begin to contribute.

At this point, James and I have made the decision to step back from day-to-day work on, and for the company to bring in new blood. Antoine van Gelder, whom many of you already know, will take over day-to-day management and new development.

We’re delighted to have Antoine take this on and anticipate only positive changes for current and new customers — there is no change to the availability of the service, support or plans for new development. James and I will continue to be involved as directors working with Antoine to improve the company and product, although you’ll see less of us in day-to-day communications.



We’ve worked with Antoine for almost as long as has been around. He was instrumental in getting the product to launch, working across our entire stack from the client SDKs, Toolkit, server-side logic and compile servers. In addition to his development work, he has also interacted with many customers through support and through the maintenance of our legacy browser add-on platform.

Not only that, but Antoine has broad experience running all aspects of software companies having built his own startup and run consulting companies in the past. He’s a keen advocate of standards, open source and creating great products that benefit with the world. All that — combined with his technical expertise, knowledge of the stack, and product philosophy — means we are supremely confident that he is the right person to take from here.

With our v2.1 release we felt the company and product are in great shape and could benefit from new inspiration, so the time is right to pull the trigger (pun intended). Anyone who has worked on the same product for several years will know that it can often benefit from a new perspective, so we’re confident that the plan we’ve put together with Antoine is a win all around.

The future

James and I delight in creating new products and businesses which is why we started We love what we’ve built with but over the past year have also become excited about other projects.

Specifically — based on many shared interests — James, Tim, Connor, and I have decided to join Square. We’re super excited about Square’s prospects, their team, and the new projects that we can impact there. Making commerce easy — Square’s mission — is inspiring and has many facets. We hope to iterate fast and be able to share more of what we’re working on soon.

We’re delighted at being able to make this team change while having the product continue to improve and grow sustainably. It’s a situation that few startups are able to reach, and we owe it all to our amazing customers: thank you!

Please do reach out by emailing with your questions. Forge 2.1: open-source modules and collaborative development

Today, we’re really excited to announce version 2.1 of’s mobile development platform: Forge.

This version is hugely significant for us, as it marks a shift towards a more open, collaborative development approach on the platform. As part of this, is open-sourcing the native modules that we’ve developed.

Since we launched our native modules feature at the end of July, we’ve been blown away by our users’ enthusiasm for adding new native functionality to your apps. Already, there have been over 1300 updates to the almost 400 modules our users have been working on, including modules for Urban Airship, Apptentive and keyboard customisation:

Three 3rd party modules

With version 2.1, we’re doubling down on native modules by making it super-simple to publish, consume and collaborate on native modules. Changes include:

  • ability to publish modules into the module index
  • introduce concept of module namespaces, which allows independent developers to collaborate on one codebase
  • dependency declaration and resolution between modules, so you can rely on a library being present without inlining it
  • add changelists and documentation for your module


We’ve wanted to open source our modules for a long time, but before now there hasn’t been much point because it would have been so hard for our users to take our code and set themselves up to develop on it.

With the changes described above, those restrictions are now gone, and we’re excited to announce that we are open-sourcing all of our own native modules under the 2-clause BSD license.

If you want to tweak the form or function of a native module (e.g. customising the gradient of our topbar module, or extending our file module to capture audio as well as video), you can clone our code from GitHub and make the changes you want in your own module.

You can keep that module un-published — meaning only you and your team-mates can use it — or you could publish the updated module so everyone benefits. Of course, we’ll always appreciate pull requests back to our repo so that we can update the original module when it makes sense!

Note that we’re not open-sourcing everything. Our cloud build service, toolchain, and the core of our platform will remain under wraps: this means you won’t be able to do local-only builds that don’t use our cloud build service. But we firmly believe that the huge usability, speed and collaboration benefits you get from using a cloud-based compiler easily make up for that.

How to get involved

If you’re an existing user, our v2.1 update is rolling out now and you’ll be prompted to update shortly. If you’re not at the stage of creating native modules just yet, note that v2.1 includes a small change to JavaScript behaviour documented in the release notes.

Otherwise, head across to our site to create an account, download our lightweight tooling, and get started on your first app.

The native module development process is covered in our documentation, and keep your eye on GitHub — we’ll be uploading and updating our module code there!

New feature roundup: iOS 7 and Android 4.4 support, new accelerometer and Apptentive modules

As well as a host of minor improvements and fixes which are documented in our module changelog, we’ve been hard at work on some big items.

Namely, support for new iOS and Android platform versions and two new modules: one developed by us, another by a 3rd party which we’re delighted to be able to offer.

Here are the details:

Apptentive: in-app feedback from your users

Apptentive provide SDKs for iOS and Android that enable you to get in-app feedback from your users.

Interacting with your users inside your app is immensely important to boost ratings – create conversations rather than critics and intercept negative feedback. So we’re really excited that they’ve created a module so you can use their SDK in your app:

This example shows how Apptentive can be used to solicit feedback. In addition, the Apptentive module provides:

  • App Store rating flow
  • Surveys
  • Custom user information tracking
  • Custom device data tracking

We’re excited for future updates by Apptentive and other SDK developers who integrate with

Accelerometer module

By popular demand, we’ve created an accelerometer module. Here’s an example of how it can be used to detect whether the phone is laying flat:

iOS 7 and Android 4.4 support

We released support for iOS 7 in September as part of our v2.0.1 platform version, with several new module versions. You can read details of the changes here.

More recently, we were very excited about Android 4.4 (KitKat) which was released last week. Especially since this new version of Android will have its WebView powered by Chromium. That’s great news for developers since it means that, in apps built for Android 4.4, you can use:

To start building for Android 4.4, you will need to:

  1. Rebuild with our latest platform version – 2.0.4
  2. Update tabs module to 2.5
  3. Update ui module to 2.1

What’s next?

Follow us on Twitter or Facebook to see our latest news and updates.

Sign up now to take advantage of these new features or get in touch with us at anytime at