Posts / December 17, 2012

Ushahidi iOS SDK

I am proud to announce a new major release of the Ushahidi iOS app, a complete rebuild with a number of significant improvements and a load of new features!

The new version has been submitted to the App Store, and just waiting for the Apple approval process before it is available for download. In the meantime, you can pull the latest code at

All the data storage, synchronization and base classes are now packaged in a standalone framework (Ushahidi.framework) and resource bundle (Ushahidi.bundle). The Ushahidi app uses this framework, but it also opens the possibility for other developers to build their own custom apps on top of this SDK.

Whitelabel support is back however the property keys in the theme’s info.plist have been renamed to include USH prefix to avoid name collisions. You can also optionally include multiple maps in your whitelabel app, which might be useful for an organization that has multiple deployments. Checkout the README.markdown for full details on how to whitelabel the app.

Core Data
When I first started building the iOS app, Core Data was not supported on the iOS platform. As a result, the previous version relied heavily on archiving and unarchiving on objects to disk for storage. The good news is the new version now has Core Data support built directly into the Ushahidi SDK.

The new version is significantly faster than the previous version, thanks again to Core Data. Besides having the unarchive objects from disk, the previous also had to archive objects back to disk after changes were made, this is no longer needed.

New version now allows synchronization of multiple maps simultaneously, thanks to the Core Data support and some creative use of NSOperationQueues.

Pull Down To RefreshiOS Pull Down
The map list and report list now have a pull down to refresh control. These tables use the native UIRefreshControl when running iOS 6, and elegantly fallback to using the CKRefreshControl to provide backward compatibility on iOS 5.

There are now multiple ways to share reports including to Twitter and Facebook, via SMS and Email, and also as a QR Code. The new version takes advantage of the native Twitter integration as well as new Facebook SDK but gracefully downgrades to a custom modal sharing popup when not available.

Besides sharing, the new version can also send report details and photos directly to a printer, which can be useful for deployment management teams.

YouTube UploadiOS Video Upload
Direct video upload to YouTube is now built in, thanks to the great code that Orta wrote for the Mapping Mangroves map, but now has offline support so videos can be captured even when the internet is not present, and uploaded later during synchronization.

Watching Videos
Any report videos with YouTube links are now rendered inline, making it easy to watch inside the table or view in full screen mode.

Location Picker
The map for selecting a new location has been improved including ability to searching by street address, find current location as well as double tap to move the map pin.

Open GeoSMSiOS Open GeoSMS
The app now supports Open GeoSMS thanks to help from Slayer and his team. When enabled in the Settings, the app gives the user the option Upload via Ushahidi API or Send via Open GeoSMS. This will be an incredibly important feature when collecting reports when the internet is not available, for example during a disaster situation.

Full Screen Mode
The Settings screen has option to hide the status bar, taking advantage of the full screen height.

Hide Sidebar
When running the app on an iPad, the sidebar can easily be hidden in landscape mode, making full use of the screen width.

Table CellsiOS Table Cells
All the table cells have been revamped, including less text and making better use of icons to identify the types of data. This is important considering the app will translated in a number of different languages.

Reports can now be starred when viewing their details, adding a star icon on that report in the list.

Unread Reports
The report list now shows a + icon in top right for new reports, which disappears when that report is viewed.

Download Static Maps
Once again the Settings has the option to download a static map image from Google Maps for every report, making this map tile visible even when the internet is not available.

Icon Badge NumberiOS Icon Badge Number
The app icon now shows the number of unread reports, which can also be turned off in the Settings.

The new version supports viewing of comments, as well as submitting new comments to reports.

Privacy Policy & Terms of Service
The recent whitelabelled Firsthand app for the Huffington Post required users to agree to their Privacy Policy and Terms of Service. I thought this might be a good option for other whitelabelled apps, so added optional properties to the theme’s info.plist file.

Hide Add Report ButtoniOS Hidden Add Button
The add report button can now be hidden via the theme’s info.plist, which is handy for maps that don’t want users to submit new reports and rather just view existing reports.

Submit Only Mode
The ability to skip the report list and map and only show the submit report form can now be enabled by changing a single property in the theme’s info.plist. This was a feature request from the TELL MAMA team, happy to include it in this new version.

What’s missing?
Although this new release has a lot of new features, it’s also missing a few things. One, Checkins have not been fully implemented and two, stale reports are not being removed. Hopefully both of these issues will be fixed in the next minor release.

Old Version
Just for safe measures, the previous project for Ushahidi iOS 2.X can be found in the Old folder on GitHub.

Thanks to our incredible community especially Chris Moya, Mercy Deche, Phelipe de Sterlich, Kuo-Yu slayer Chuang, Alexey Poimtsev, Johannes Lindenbaum, Yoshi Suzuki and Delalorm S Semabia for helping translate the new version fully into Akan, Italian, Japanese, Russian, Spanish and Swahili, and partially into German, Chinese (Taiwan) and Catalan. Translations are now on Transifex so it should be easier for others to contribute. If you are a multilingual speaking person, we’d love to have your help!

The new version has been a long time coming, so glad to finally have the code on GitHub and hopefully available soon for download on the App Store. Feedback is always welcome, please report any issues to GitHub or message me on Twitter.