Development with Modern Mobile Technologies



Similar documents
Mobility Introduction Android. Duration 16 Working days Start Date 1 st Oct 2013

MA-WA1920: Enterprise iphone and ipad Programming

Lecture 1 Introduction to Android

01. Introduction of Android

Introduction to Android

Workshop on Android and Applications Development

Android 5.0: Lollipop OS

HYBRID APPLICATION DEVELOPMENT IN PHONEGAP USING UI TOOLKITS

Mobile Phones Operating Systems

Developing Cross-platform Mobile and Web Apps

Android Architecture. Alexandra Harrison & Jake Saxton

Specialized Android APP Development Program with Java (SAADPJ) Duration 2 months

place/business fetch details, removefromfavorite () function, 189 search button handler bind, B BlackBerry build environment

Graduate presentation for CSCI By Janakiram Vantipalli ( Janakiram.vantipalli@colorado.edu )

How To Use Titanium Studio

Mobile Application Development 2014

Frameworks & Android. Programmeertechnieken, Tim Cocx

ORACLE MOBILE APPLICATION FRAMEWORK DATA SHEET

Designing for the Mobile Web Lesson 3: HTML5 Web Apps

How To Develop An App For Ios (Windows)

CS378 -Mobile Computing. Android Overview and Android Development Environment

Objective C and iphone App

Android Developer Fundamental 1

Android Mobile App Building Tutorial

ios Application Development &

MOBILE APPS. QA Testing for mobile applications

ORACLE ADF MOBILE DATA SHEET

Practical Android Projects Lucas Jordan Pieter Greyling

Mobile App Design and Development

Overview of CS 282 & Android

Creating and Using Databases for Android Applications

Example of Standard API

Cross-Platform Tools

Developing Applications for ios

All About Android WHAT IS ANDROID?

ANDROID APPS DEVELOPMENT FOR MOBILE AND TABLET DEVICE (LEVEL I)

Firefox for Android. Reviewer s Guide. Contact us: press@mozilla.com

Here to take you beyond Mobile Application development using Android Course details

Introduction to Oracle Mobile Application Framework Raghu Srinivasan, Director Development Mobile and Cloud Development Tools Oracle

Introduction to Android

Cross-Platform Development

Università Degli Studi di Parma. Distributed Systems Group. Android Development. Lecture 1 Android SDK & Development Environment. Marco Picone

Mobile application testing is a process by which application software developed for hand held mobile devices is tested for its functionality,

Android Programming and Security

SYST35300 Hybrid Mobile Application Development

Building Mobile Applications Creating ios applications with jquery Mobile, PhoneGap, and Drupal 7

Mobile Development Frameworks Overview. Understand the pros and cons of using different mobile development frameworks for mobile projects.

ios App for Mobile Website! Documentation!

Developing and deploying mobile apps

Reminders. Lab opens from today. Many students want to use the extra I/O pins on

Experimental Comparison of Hybrid and Native Applications for Mobile Systems

ANDROID BASED MOBILE APPLICATION DEVELOPMENT and its SECURITY

Mobile Application Development

Lecture 3 Mobile App Development (Android, ios, BlackBerry, Windows Mobile) <lecturer, date>

Praktikum Entwicklung Mediensysteme (für Master)

ANDROID INTRODUCTION TO ANDROID

Chapter 1. Introduction to ios Development. Objectives: Touch on the history of ios and the devices that support this operating system.

Bridging the Gap: from a Web App to a Mobile Device App

How To Use Ios 5

MOBILIZING ORACLE APPLICATIONS ERP. An Approach for Building Scalable Mobility Solutions. A RapidValue Solutions Whitepaper

Programming with Android: System Architecture. Dipartimento di Scienze dell Informazione Università di Bologna

Smartphone Application Development using HTML5-based Cross- Platform Framework

MEAP Edition Manning Early Access Program Hello! ios Development version 14

Portability Study of Android and ios

Mobile App Framework For any Website

Choosing a Mobile Application Development Approach

INTRODUCTION TO IOS CSCI 4448/5448: OBJECT-ORIENTED ANALYSIS & DESIGN LECTURE 13 02/22/2011

WEB, HYBRID, NATIVE EXPLAINED CRAIG ISAKSON. June 2013 MOBILE ENGINEERING LEAD / SOFTWARE ENGINEER

Beginner level: Modules 1 to 18. Advanced level: Quick review of modules 1 to 18, then following to module A Simple ios Application

Introduction to Android

Cross-Platform Development: Target More Platforms and Devices with a Minimal Amount of Source Code

Smartphone market share

Homework 9 Android App for Weather Forecast

Mobile App Infrastructure for Cross-Platform Deployment (N11-38)

OpenCV on Android Platforms

Issues in Android on Mobile Platform and Their Resolution

Enterprise Mobile Application Development: Native or Hybrid?

HTML5 & Digital Signage


INTRODUCTION TO ANDROID CSCI 4448/5448: OBJECT-ORIENTED ANALYSIS & DESIGN LECTURE 11 02/15/2011

ANDROID PROGRAMMING - INTRODUCTION. Roberto Beraldi

Safe Harbor Statement

Building native mobile apps for Digital Factory

Your First App Store Submission

Issues of Hybrid Mobile Application Development with PhoneGap: a Case Study of Insurance Mobile Application

ADF Mobile Overview and Frequently Asked Questions

OS X Yosemite - Features

Mobile App Development

THE BUSINESS CASE FOR HYBRID HTML5 MOBILE APPS

Programming with Android

Lecture 4 Cross-Platform Development. <lecturer, date>

Getting Started with Android Programming (5 days) with Android 4.3 Jelly Bean

Table of Contents. Adding Build Targets to the SDK 8 The Android Developer Tools (ADT) Plug-in for Eclipse 9

Title: Appium Automation for Mac OS X. Created By: Prithivirajan M. Abstract. Introduction

ANDROID APPLICATION DEVELOPER RESUME

CHOOSING THE RIGHT HTML5 FRAMEWORK To Build Your Mobile Web Application

Transcription:

Development with Modern Mobile Technologies Björn Dahlgren bjodah@kth.se Niklas Ström nikstr@kth.se KTH Kista, Stockholm, September 2, 2011 1

Abstract In this report we evaluate modern mobile development technologies by producing criteria for the evaluation. We gathered the criteria by conducting a study of popular applications already developed. From these criteria we decided to evaluate development for Android, ios as well as for web applications. The evaluation was made by making a simple application fetching data from an API of the courses available at KTH, as well as course information and schedule for the courses. Our conclusions were that if the application is simple, it may not be worth actually making it a native application. 2

Contents 1 Introduction 5 1.1 Background............................................ 5 1.1.1 ios............................................ 5 1.1.2 Android.......................................... 5 1.1.3 Web............................................ 5 1.1.4 Cross-platform native development........................... 6 1.2 Objective............................................. 6 1.3 Acknowledgements........................................ 6 2 Application Fundamentals 7 2.1 MVC - Model, View, Controller................................. 7 2.2 Data formats........................................... 7 2.2.1 JSON - JavaScript Object Notation.......................... 7 2.2.2 XML - extensible Markup Language.......................... 10 2.2.3 Comparison........................................ 10 3 Mobile Technologies 11 3.1 Android.............................................. 11 3.1.1 System Architecture................................... 11 3.1.2 Development tools.................................... 11 3.1.3 Versions.......................................... 12 3.1.4 Fragmentation...................................... 12 3.1.5 Handling Resources................................... 12 3.1.6 Views and Controllers.................................. 12 3.1.7 Threading......................................... 12 3.1.8 Permissions........................................ 13 3.2 ios................................................. 13 3.2.1 System Architecture................................... 13 3.2.2 Views and Controllers.................................. 13 3.2.3 Memory Management.................................. 14 3.2.4 Tools........................................... 14 3.2.5 Limitations of the ios platform............................. 15 3.3 Web Frameworks......................................... 15 3.3.1 jquery Mobile and jqtouch............................... 15 4 Methodology 17 4.1 Criteria.............................................. 17 4.1.1 Applications....................................... 17 4.1.2 Evaluation of criteria................................... 17 4.2 Toolset............................................... 19 5 Procedure 21 5.1 Backend.............................................. 21 5.1.1 Courses.......................................... 21 5.2 Android.............................................. 21 5.2.1 Interface.......................................... 21 5.2.2 Internet Connectivity.................................. 21 5.2.3 Local Storage....................................... 22 5.2.4 Deployment........................................ 22 5.3 ios................................................. 22 5.3.1 Interface.......................................... 22 5.3.2 Internet Connectivity.................................. 23 5.3.3 Local Storage....................................... 24 5.3.4 Deployment........................................ 24 5.4 Web Application......................................... 25 5.4.1 Interface.......................................... 25 5.4.2 Internet Connectivity.................................. 25 3

5.4.3 Local Storage....................................... 25 5.4.4 Deployment........................................ 25 6 Results 27 6.1 Backend.............................................. 27 6.2 Android.............................................. 27 6.3 ios................................................. 27 6.4 Web Application......................................... 28 7 Analysis 33 7.1 Interface.............................................. 33 7.2 Third Party Libraries...................................... 33 7.3 Internet Connectivity....................................... 33 7.4 Local Storage........................................... 33 7.5 Deployment............................................ 33 7.6 Web Applications......................................... 34 8 Conclusions 35 9 Bibliography 37 10 Attachments 39 10.1 ios Top 50 Free Applications.................................. 39 List of Figures 1 Model of the MVC pattern................................... 7 2 JSON object definition...................................... 7 3 JSON array definition...................................... 8 4 JSON value definition...................................... 8 5 JSON string definition...................................... 8 6 JSON number definition..................................... 9 7 Android Architecture....................................... 11 8 ios Architecture......................................... 13 9 Basic components of most popular applications........................ 19 10 Android - Search......................................... 28 11 Android - Filtered Search.................................... 28 12 Android - Course Info...................................... 29 13 Android - Schedule........................................ 29 14 ios - Search............................................ 30 15 ios - Filtered Search....................................... 30 16 ios - Course Info......................................... 31 17 ios - Schedule.......................................... 31 18 jqtouch - My Courses...................................... 32 19 jqtouch - Course Info...................................... 32 List of Tables 1 Time consumption comparison between JSON and XML................... 10 2 Filtered top 50 free applications with common features analyzed.............. 18 4

1 Introduction 1.1 Background Since the release of the iphone in 2007 the market for applications in smartphones has exploded. According to Gartner s latest statistics, the market shares of smartphones are still increasing drastically [22]. There are many different techniques and environments used to develop applications for the different types of mobile platforms out in the public today. 1.1.1 ios ios revolutionized the smartphone concept making it a mainstream type of device. Apple had great impact on the usage of mobiles with it s iphone. Statistics from such sites as Flickr shows the popularity of the ios devices, it s the most popular camera device, more than professional cameras [21]. Four major versions of ios have been release so far with a fifth planned for this fall. The first version of ios didn t feature any dedicated app store and instead allowed developers to create web-based applications. Before ios4 only one application was allowed to run at the same time which made some applications less user friendly. Third party music players such as Spotify and Pandora were shut down when replying to a SMS or using any other application whereas the itunes music player could be backgrounded. One of the main features of the ios platform is the App Store. As of January 2011 there are over 350 000 applications for iphone in the App Store and more than 60 000 for the Apple ipad [3]. There are both free and paid apps that can be downloaded onto the users ios device. 1.1.2 Android Android is a Linux-based mobile platform primarily developed by Google. Android Inc was founded in 2003 and acquired by Google in 2005. Rumors started floating that Google where working on a Google Phone, focusing on searching and user preferences. In November 2007 the Open Handset Alliance was announced, consisting of major companies related to phone manufacturing. Their first product released was Android, an open source mobile platform available for all manufacturers. October 2008 saw the first release of an Android phone, the HTC Dream, also referred to as Android Developer Phone 1 or T-Mobile G1. It shipped with Android 1.0 which was released about a month earlier to developers. During 2009 three major releases occurred, 1.5, 1.6 and 2.1. Development since then has not slowed down, 2010 gave birth to more major releases. In 2011, Android 3.0 Honeycomb started shipping with a few selected tablets, featuring a brand new UI. There has been some discussion regarding if Google will allow manufacturers to ship Android 3.0 devices with custom UI like HTC Sense or Samsung Touchwiz. Google has yet to release the source code for 3.0 which has lead to some debate regarding the openness of the Android project. Andy Rubin, VP of Engineering at Google, recently explained that they had no intentions of locking out customizations of the UI or withholding the source code [37]. Instead, they felt a need to clean up the code and adapt the new UI for devices smaller than tablets. 1.1.3 Web Web applications have existed for a quite a while. In the nineties operators tried to convince users to use WAP, websites optimized for small mobile devices. Back then cellphones only network capability were GSM which didn t allow for fast transfer rates but this has changed with the wide coverage of wifi networks and faster mobile networks such as 3G and LTE. Smartphones now also have larger screens, which enhances the ability to browse the web. Web-based applications has emerged as a quick and simple way to support multiple platforms. With recent support for HTML5, a lot of previous native only features are now accessible in a web browser. 5

Video, music, location and offline storage all are part of the HTML5 standard [41]. For applications that requires even more native features there are frameworks such as PhoneGap which allows a web application to interface with device specific features [34]. 1.1.4 Cross-platform native development Most of the current mobile platforms each have their own SDKs and languages which puts a burden on the development team if multiple platforms are targeted in a project. To increase code reusability, there are a number of development environments with an intermediate language which is adapted and compiled to the target platform. Some examples of frameworks are, Appcelerator Titanium [2] - HTML, JavaScript MonoDroid [31], MonoTouch [32], Xamarin [42] -.NET MoSync [30] - C/C++ PhoneGap [34] - HTML, Javascript One major drawback of most cross-platform frameworks is the lack of native UI. 1.2 Objective The objective of our report is to evaluate mobile development technologies for smartphones. The evaluation will be based on criteria gathered by doing a study of popular applications. 1.3 Acknowledgements Christian Schulte for being an excellent inspiration during our hardship. 6

2 Application Fundamentals 2.1 MVC - Model, View, Controller MVC is an abstraction pattern to increase security and modularity. It consists of three components, Model, View and Controller. The model defines and contains the data, which is requested by the controller. The View displays the contents of a model and handles the user interface.the controller handles the requests gathered from the view and maps the interaction between the view and the model [39]. Figure - 2 shows a model of the MVC pattern [39]. Figure 1: Model of the MVC pattern 2.2 Data formats There are a number of standardized data formats for mobile usages. We ve decided to analyze the two most common, JSON and XML. 2.2.1 JSON - JavaScript Object Notation JavaScript Object Notation was introduced in 2006 by Douglas Crockford as a lightweight, text-based, language-independent data interchange format [15]. The syntax is the same JavaScript uses for object creation - JSON is therefor often seen as a subset of JavaScript. Figures 2-6 describes the valid syntax for the different data types allowed in JSON [27]. Figure 2: JSON object definition 7

Figure 3: JSON array definition Figure 4: JSON value definition Figure 5: JSON string definition 8

Figure 6: JSON number definition 9

JSON XML Number of objects 1000000 1000000 Total Time (ms) 78257.9 4546694.78 Average Time (ms) 0.08 4.55 Table 1: Time consumption comparison between JSON and XML 2.2.2 XML - extensible Markup Language XML consists of tags with attributes. Data is derived from the root tag. The XML is more verbose compared to the JSON data format. This leads to an overhead in the information transfer but it s possible to avoid with compression methods such as gzip. A simple XML file might look like: <?xml version="1.0" encoding="utf-8"?> <items> <item attribute="something">name of item 1</item> <item attribute="something else ">name of item 2</item> </items> 2.2.3 Comparison In the case study by Nurseitov, benchmarks were performed comparing both resource utilization as well as time efficiency [33]. These benchmarks showed that JSON is both faster as well as using fewer resources. Table - 1 depicts the results they gathered. 10

3 Mobile Technologies 3.1 Android 3.1.1 System Architecture Android is a Linux-based Operating System. It uses a customized Linux 2.6 kernel with optimization regarding power-usage and security for mobile platforms. Applications for the Android platform are written in Java but compiled into Dalvik executables, which are run on the Dalvik Virtual Machine on top of the Linux kernel [14, p. 33]. Included with Android is quite a lot of libraries and frameworks for accessing both software and hardware like notification services and cameras on the devices. Figure 7 shows the different levels of the architecture [17]. 3.1.2 Development tools Development for the Android Platform is possible on Windows, Mac OSX and Linux. Included with the SDK for all platforms are debugging tools, the Android libraries, an emulator based on QEMU, Android documentation and some specific tools for Dalvik compiling and packaging into Android Packages, APKs. These packages are signed with either a debug-key for testing or a production-key. The signed APK can either be distributed by the creator himself by email or similar means of communication or published to one of the many marketplaces for Android applications, Google s own or a third party market. The official development tools recommended by Google are Eclipse with some specialized plugins for Android called ADT, Android Development Tools [16]. These eases the usage of the Android SDK tools such as deployment and debugging applications on the emulator or a developers phone. It also helps with packaging applications into APKs. JetBrains IntelliJ IDEA latest community edition also ships with their own integration with the Android SDK but lacks the GUI editors that ADT provides with Eclipse. Figure 7: Android Architecture 11

3.1.3 Versions 1.5 Cupcake had a reworked and much better API. A proper Bluetooth stack was implemented [14, p. 13]. 1.6 Donut added support for multiple screen sizes and scaling of UI elements [14, p. 13]. 2.1 Eclair featured a reworked UI experience such as improved contact and mail handling. WebKit got better support for HTML5-tags which allowed more advanced web applications. The Bluetooth stack is now compatible with Bluetooth 2.1 [14, p. 13]. 2.2 Froyo brought Flash support on Android allowing both Flash content on the Web and third party Flash applications. JIT, just-in-time compilation, was added on the Dalvik VM which gave a great performance increase in many applications. 2.3 Gingerbread did not bring much for the user except for a more black and green UI. Some behind the scene work was done such as a concurrent garbage collector. Support for NFC, Near Field Communication, such as RFID. 3.1.4 Fragmentation Due to the many versions of Android, applications must support different levels of APIs [18]. There are also a number of different hardware configurations, mainly screen sizes and resolutions [19]. To ease development for multiple devices, which is the most common situation, there are a couple of mechanisms in place. It s possible to query device format, screen size and screen density programmatically but a preferred way is by organizing resources for each device type. 3.1.5 Handling Resources Images and other static content are organized as either resources, drawables or assets. Assets are included with the APK for runtime handling while drawable and resources are compiled into a binary format for faster usage. A drawable can be either a standard image file or graphics defined with XML. Resources are often predefined layouts used to describe views for an Activity. Localization is also easily handled by making an XML containing the strings for each language. Android is built to easily support both localization and different kind of devices by using predefined folders for languages and screen types. Instead of having to programmatically load different images and strings for each of these, Android does this for you [14, p. 267]. 3.1.6 Views and Controllers Android applications are based on different Activities. These act as controllers for Views, consisting of either default Android widgets or user created ones. Message passing between Activities uses a concept called Intent which allows different data packages to be sent, either when starting a new Activity or when finishing and returning data to the callee. Intents can also be broadcasted to all registered receivers on the device, allowing each to decide if it should handle the data or just let it go. They are also used for some user generated actions when sharing content between different applications such as sending a picture from the image gallery. 3.1.7 Threading One important factor which is enforced by the OS is threading. Applications are not allowed to execute code in the UI-thread which takes longer than 5 seconds before yielding and responding to UI events again [1, p. 81]. This is to ensure that the look and feel is never deemed as slow or that the device has crashed or similar. If this requirement is not fulfilled, the user will be notified that the application has not responded as intended and a choice to quit it the application is presented. To simplify usage of threading without learning how Java s thread pool and/or threads works, a class called AsyncTask is included in the library. By extending the class and overriding the class methods, the developer can easily 12

spawn multiple threads that both interacts properly with the UI-thread and runs the main workload in a separate thread. 3.1.8 Permissions Android has a built in permissions system to which applications must comply. The developer specifies required permissions for the application to work properly and when the application is installed the end user will be notified. Examples of permissions are read messages, access network and camera usage [14, p. 41]. 3.2 ios ios is based on Apple s Cocoa Touch library which uses Objective-C as it s main language. This might scare away programmers since it has a quite different syntax compared to other mainstream languages. Like C++, the programmer must also manage all memory although there are some functionalities to help ease the burden. 3.2.1 System Architecture The ios platform is derived from Apple s desktop OS, OSX. The main difference between the two systems is the top layer of the architecture, OSX uses Cocoa while ios has it s own Cocoa Touch [29, p. 44]. ios includes a couple of system libraries such as UI, Audio and Location. These frameworks works as abstraction for the underlaying kernel and hardware, accessible through the API. A simple model of the architecture is shown in figure 8. 3.2.2 Views and Controllers Apple implements the view and controller parts of the MVC pattern with UIViews and UIViewControllers [7]. Apple describes a UIView as a class that... defines a rectangular area on the screen and the interfaces for managing the content in that area... More sophisticated content can be presented by subclassing UIView... For example, a UILabel object draws a text string and a UIImageView object draws an image., both UILabel and UIImageView are subclasses of UIView [11]. UIViews have the ability to add subviews creating a hierarchy. For example the UITableView - ios default list view - is basically implemented as a UIScrollView, which in turn is just a UIView with added functionality for scrolling. To this scrollview subviews are later added for each UITableViewCell. Inside the UITableViewCells UILabels or other views are added [10]. UIViewControllers add features to UIViews. There are a bunch of ready made UIViewControllers which you can subclass - for instance the UITableViewController which comes with certain useful methods of controlling a UITableView. For instance it provides the data, perhaps by fetching from a database or a model object, and how it should present the informations in the UITableViewCells. The Figure 8: ios Architecture 13

UIViewControllers also provides methods for functionality. In the case of the UIScrollView, API for scrolling and events for when scrolling occurs. 3.2.3 Memory Management As we mentioned earlier Objective c have several similarities to c and c++. One of the main factors that cause problems for programmers starting with ios programming is the fact that you have to control memory management all by your self. Memory management is all about owning variables. As Apple describes it You take ownership of an object if you create it using a method whose name begins with alloc, new, copy, or mutablecopy (for example, alloc, newobject, or mutablecopy), or if you send it a retain message [9]. This means the retain count of that object is incremented. Apple describes relinquishing ownership as You use release or autorelease to relinquish ownership of an object. autorelease just means send a release message in the future [9]. When releasing you decrement the retain count of the object in question. When the retain count reaches zero the object is deallocated and removed - if you try to use the variable now you will get an error and the application will die. What many people struggle with is both not releasing enough - which causes memory leak and eventually low memory warnings, but also releasing too much. At first glance it may seem simple to know that if you retained a variable you should release it and not otherwise - but there are many convenience methods in the ios API and it s easy to make the mistake and think that they are retaining when they don t and vice versa. For example creating a string you may use two different methods - doing the same thing, but one retains and the other does not. NSString *string = [[NSString alloc] initwithformat:@".."]; NSString *string = [NSString stringwithformat:@".."]; In case of the first example we actually retain the variable - which we can see because we are using alloc. The second case actually adds the variable to the autorelease pools which will be release later - for example at the end of the function. If you try to access that variable in a different function later - you will get an error saying you tried to access an already release variable. The second case is actually a convenient way of saying the following: NSString *string = [[[NSString alloc] initwithformat:@".."] autorelease]; But the point of the matter is that unless you are consistent with which way you chose to initialize memory you might reach trouble later or in the development process. Either by having a lot of memory leaks which may be difficult to debug or by getting errors that can be quite hard to figure out. 3.2.4 Tools Apple provides the Xcode toolset used for the development of applications for ios as well as for the Macintosh platform. The most prominent of these tools are: Xcode IDE Interface builder Instruments ios simulator The Xcode IDE is the Apple IDE for cocoa programming. It contains many features including version handling direct in the IDE. Interface Builder or IB is the Apple way of creating user interface using drag-and-drop components. Instruments is a set of tools used to debug and analyze the performance of an application. Among other things you can view data about the application s use of network or disc, and also track memory allocations, which makes it a great tool to get rid of all memory leaks. 14

The included ios simulator makes it possible to test applications without actually having a device. It is often beneficial to first test applications on simulator during the development phase due to the fact that it s easily available. The simulator also makes it possible to test on all types of ios mobile devices including the old iphone models and the new, retina displayed, iphone 4 as well as the ipad. The drawback of testing on the ios simulator is that does not simulate hardware perfectly. The GPS in the iphone can be simulated using the computers wifi to lookup position - if it cannot resolve a position is defaults to Apple headquarters at 1 infinity loop. For the same reasons using camera does not work either. Instead it just display a photo library. The size of the simulator on the computer screen might also deceive developers that the components in the interface are big enough but is too small on an actual device. 3.2.5 Limitations of the ios platform Apple requires quite a bit from developers before they can actually start developing. An Intel based Mac running Snow Leopard [5] An Apple developer account Having a free apple developer account gives you the possibility to download the xcode toolset and everything that includes. So you can develop applications with a free account, but you can not test them on an actual device nor can you distribute them on the Appstore. This is restricted to paying developers. 3.3 Web Frameworks There are a number of different frameworks available to ease development of web applications. Some are more focused on rendering pages server side, like a normal webpage, while others are built using front end languages such as JavaScript to provide a more native feeling using touch events. Due to increasing performance of the JavaScript engines in both Android and ios there s an growing amount of the latter. 3.3.1 jquery Mobile and jqtouch jquery Mobile and jqtouch are both mobile frameworks based on jquery, a well used and tested crossbrowser framework for javascript programming [36],[28],[35]. They re quite similar but jquery Mobile is more of a generic mobile framework than jqtouch which is more focused on the ios, it s even shipped with an ios lookalike theme. Some examples of web applications are, Stanford University, released a jqtouch based site for users of Android and iphone besides their native app. The Swedish Skatteverket, used jquery Mobile in their mobile application for tax registration 2011. This can easily be spotted from their advertisement since they re using the default jquery Mobile theme. The Artspot created a web based multimedia app for tours at art museums using jqtouch called Hoppr[12]. It features audio recordings during the tour and support offline storage using HTML5. A jqtouch page has the following structure, div with id for identifying the page div with class toolbar for the header of the page <h1> tag for title <a> tag with class button for a button in the header divs with class info for text area or lists ul 15

paragraphs, p, for text areas or li for list elements Elements are enhanced by using key classes specified by the framework. Besides these basic structure, elements can be enhanced with icons, animations and transitions. Using JavaScript, features can be added using event listeners that react while the users navigates the page. A simple jqtouch page can be constructed like this: <html> <head>... <style type="text/css" media="screen">@import "jqtouch/jqtouch.css";</style> <style type="text/css" media="screen">@import "jqtouch/themes/apple/theme.css";</style> <script src="jqtouch/jqtouch.js" type="application/x-javascript" charset="utf-8"></script>... </head> <body> <div id="home" class="current"> <div class="toolbar"> <h1>jqtouch</h1> <a class="button slideup" id="overlay" href="#overlay">overlay</a> </div> <ul class="rounded"> <li class="arrow"><a href="#page-1">page 1</a></li> <li class="arrow"><a href="#page-2">page 2</a></li> <li class="arrow"><a href="#page-3">page 3</a></li> </ul> </div> </body> </html> 16

4 Methodology Our methodology consists of two parts. The first is to produce criteria to base our evaluation on the second is to actually evaluate the three different mobile technologies based on our previously produced criteria. 4.1 Criteria To produce criteria for evaluation we do an analysis of popular applications. We chose to look into what features were available in the top 50 free applications on the ios app store. These applications were selected not only because they were available for free but also for the fact that they are a good representation of applications users will download. 4.1.1 Applications After composing the list of top 50 free applications (see attachment 10.1) along with their category we remove applications from the games category since they are often a completely different type which often focuses more on graphics and we want to focus on the simple, easy to make, application. From the filtered list we went through all applications and analyzed them for the following criteria: 1. Internet Connectivity We examined if the application performed any information exchange with a server. Examples of information exchange are fetching articles, products, or song lists. It can also be pushing information to the server, for example the Facebook application is used to both fetch status updates as well as pushing your own statuses and messages. 2. Local Storage For this criteria we checked if the application saved any data during runs. It seemed applications often used this for two distinct types of features. Either for saving passwords and other user information, or for saving larger types of data - like search history, bookmarks or in cases like Spotify - songs. 3. Camera This criteria was pretty straight forward - we mainly checked if the application used the camera built into the device. 4. GPS Just a check if positioning from the GPS was used at all. The results of the analysis are shown in Table - 2. 4.1.2 Evaluation of criteria From Figure 9 we acknowledge that the main features of most applications are internet connectivity and local storage. And during our research we found that these two criteria account for the most functionality to an app. Although using GPS location makes an application a lot more user friendly - for instance in weather apps which find your position automatically - we feel it is a secondary to actually being able to save recent searches, login information, or bookmarks. Therefore we decided to focus on internet connectivity and local storage as the two main features in an application. While these two criteria explains the usage of an application to a great length we still need criteria to evaluate the actual development process - and not just how the different technologies deal with the features of an application. Therefor we decided to add two more criteria concerning the actual developing phase - Interface creation and deployment of the application. 17

With our now four criteria we have a solid base to evaluate our selected technologies, but the criteria are still a bit rough, so we decide to split them into a few questions to have in mind while doing the actual evaluation. 1. Interface Creating a simple, native UI Creating a custom designed UI Creating custom UI components Using third party components 2. Internet Connectivity Creating a connection to a server Parsing information from a server - XML, JSON or similar 3. Local storage Database Storage Store simple information - e.g. Login information Storing Blobs - Binary Large Objects. 4. Deployment App Name Category Connectivity Local Storage Camera Gps Expressen News Yes Yes No No SMHI Weather Yes Yes No Yes Grillfest Lifestyle No Yes No No Mitt Telia Utilities Yes Yes No Yes Myggavstötaren Healthcare & fitness No No No No Old Photo PRO Photography No No Yes No Talking Tom Cat 2 Entertainment Yes No No No Veckoappen Utilities No No No No klart.se Weather Yes Yes No Yes HeyTell Social Networking Yes Yes No Yes Facebook Social Networking Yes Yes Yes Yes Spotify Music Yes Yes No No TV4 Play Entertainment Yes No No No Yr.no Weather Yes Yes No Yes Instagram Photography Yes Yes Yes Yes Achmeds Soundboard Entertainment No No No No RunKeeper Healthcare & fitness Yes Yes No Yes Blocket Lifestyle Yes Yes Yes Yes Aftonbladet News Yes No No No Vardagsmaten.se Lifestyle Yes Yes No No Swedbank Finance Yes No No Yes Hemnet Lifestyle Yes Yes Yes Yes Viber Social Networking Yes Yes Yes No Skype Social Networking Yes Yes Yes No Sveriges Radio Play News Yes Yes No No Tv.nu Utilities Yes Yes No No hitta.se Navigation Yes No No Yes Hitta min iphone Utilities Yes No No Yes eniro.se Navigation Yes No No Yes Birthday.se Utilities Yes Yes No No Table 2: Filtered top 50 free applications with common features analyzed 18

Requirements for deploying an application Deploying for usage on developer phones Deploying for closed group usage - e.g. company Deploying for large scale distribution 4.2 Toolset All evaluation is done using Mac OSX. For Android development Eclipse with ADT 10.0 is used and SDK Tools revision 9 with Android 2.3.3 as target for deployment. A Google Nexus One is used to test the application. For ios, we ve used Xcode 4 with ios 4.3 as target and an iphone 3GS as device. Both devices were also used to test the web application. The backend uses Django 1.3 and runs on a Ubuntu 10.10 virtual machine with an Apache web server and SQLite database. Figure 9: Basic components of most popular applications 19

20

5 Procedure 5.1 Backend KTH has some public APIs for interfacing some of it s databases. Due to limitations and incompatibilities we ve decided to create a custom backend to ease development. 5.1.1 Courses To get a list of all courses at KTH we first fetched all departments from http://www.kth.se/student/ kurser/kurser-per-avdelning. Using these, we could fetch all courses for that department by visiting http://www.kth.se/student/kurser/avdelning/<shortnameofdepartment>/kurser. We wrote a simple python parser which fills the database with relevant course info using regular expressions. The Django backend then exposes all courses with a JSON-feed, an array of dictionaries, representing all courses. 5.2 Android 5.2.1 Interface Android user interface can be constructed either by using the tools included with the Eclipse plugin, writing the XML code by hand or by declaring the components within the application code. It s often simpler to write the XML code by yourself since the UI tools produces lots of unnecessary code making it unreadable and does not always get it right. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <TextView android:id="@+id/firstline" android:text="first Line" android:layout_height="wrap_content" android:layout_width="wrap_content" /> <TextView android:id="@+id/secondline" android:text="second Line" android:layout_height="wrap_content" android:layout_width="wrap_content" /> </LinearLayout> The xmlns:android declares the use of the android extensions for XML such as layout and data attributes. Using android:id we make it possible to get a reference to the component within the application using the method findviewbyid. It s also possible to create own attributes for custom components. Theming an application is possible by either declaring properties on a component basis or by creating a theme per activity or the whole application. A theme can override the looks of widgets and components by overloading their default properties. In our KTH app we ve mostly utilized ListView to display data. A ListView is a view component displaying rows from an adapter that contains the data. There are a few simple adapters such as displaying an array of strings or using a database cursor but the developer is free to implement his own. The adapter contains a getview which returns the row for a given index. To increase performance, one parameter is a possible previous shown view which can be reused to avoid garbage collection and creating a new object. 5.2.2 Internet Connectivity Since Android is based on Java, the simplest and most common way to access network data is by using Apache s HttpClient library. The library is included within Android so there is no need to add any extra dependencies. To comply with the maximum execution time in the UI thread, data is usually fetched inside an AsyncTask. 21

Android is bundled with a JSON library which means that no extra code has to be added for parsing. To parse XML, developers can choose from a variety of parser methods including SAX, DOM and XMLPull. Parsing is a huge difference, to parse JSON data only a few lines of code is needed: String jsonstr = new String("[...]"); JSONArray jsonarr = new JSONArray(jsonStr); JSONObject jsonobject = jsonarr.getjsonobject(0); String str = jsonobject.getstring("str"); 5.2.3 Local Storage Many applications utilizes storage devices such as memory cards for caching and saving of data. Android also includes two specific types of data storage, Shared Preferences for settings and Content Provider for wrapping a database or similar data source. Shared Preferences acts as a simple key-value storage encrypted inside a directory for each application which utilize it. It s also possible to define a list of preferences in XML and create a settings screen with them using PreferenceActivity. Content Provider is an abstraction for supplying data and uses a RESTful interface for accessing and modifying data. It also provides possibilities for cross application exchange of data. Often, the provider is backed by a SQLite database containing all data. To provide all data in our KTH app, we opted for a locally stored database to increase speed. When the app is first started, the SQLite database is initialized and tables are created. After a successful database creation, a service is created which spawns a thread that fetches all KTH courses from our backend. During this the app displays a loading overlay to avoid unintentional user interactions. 5.2.4 Deployment By using the SDK tools, the developer can generate an APK which can then be distributed. Besides using the generated debug certificate the developer can generate a certificate to signing the package with before sending it out to testers. This is also needed for Android Market distribution. When uploading your application to Google s Market, it s available instantaneously for endusers. To use Google services such as Maps, the developer s key needs to be paired with an extra API key for the service [24]. Since we haven t deployed our application any wider than our testing device, we ve only utilized the debug key. 5.3 ios 5.3.1 Interface The interface in ios can be done either by writing code or by using the tools mentioned earlier - Interface builder (IB). When using Interface Builder you drag and drop UI components. To be able to access the components from the code - for instance change text of a label during execution - you have to declare an outlet in the header file for that UIViewController by declaring a variable as a IBOutlet. When this is done the outlet is accessible in the IB and by dragging you connect the outlet to the specified view. Developers are not forced to use the Interface Builder. Instead of dragging and dropping views one can just declare a view in the view controller, set a frame, and add as a subview to the UIViewController s view. So, to create a simple - native - user interface is an easy task as the ios provides many standard views that doesn t require any modification. Basically you just provide the data. If you want to customize the UI you can do it on many levels. The standard views provided often have different options such as text-alignment, background color or borders. But if you want more functionality 22

you can either subclass the component in question or subclass UIView and then make your own version of that component. If you want to create a custom component implementing a new feature - you have to subclass a UIView or another subclass of it depending on what feature you want to implement. An example of a popular custom component is the ipod-like scroll wheel implemented by Tapbots in their app ConvertBot [26]. To create a component like this you need to catch the touch and drag events of the wheel and animate the rotation. 5.3.2 Internet Connectivity ios provides several methods of fetching content from the web. The basic method is to make a request, save the data and convert or parse it into whatever datatype you want. This can look something like this: NSString *url = [NSString stringwithformat:@"..."]; NSError *error; NSURLRequest *request = [NSURLRequest requestwithurl: [NSURL URLWithString:url]]; NSURLResponse *response; NSData *result = [NSURLConnection sendsynchronousrequest:request returningresponse:&response error:&error]; NSString *string = [[NSString alloc] initwithdata:result encoding:nsutf8stringencoding]; This kind of request can be shortened into a convenience method. NSString *url = [NSString stringwithformat@"..."]; NSError *error; NSString *string = [NSString stringwithcontentsofurl: [NSURL URLWithString:url] encoding:nsutf8stringencoding error:&error]; The problem with this method of fetching data is that it is synchronous. This means that the fetching is executed sequentially - hence UI and everything else has to wait which makes the application freeze. Therefor we need to fetch data asynchronously. The most basic method fetching asynchronously is again to create an request. NSString *url = [NSString stringwithformat@"..."]; NSError *error; NSURLRequest *request = [NSURLRequest requestwithurl: [NSURL URLWithString:url]]; NSURLConnection *connection = [[NSURLConnection alloc] initwithrequest:request delegate:self startimmediately:yes]; This time though you also need to implement the following functions to define what will happen when for instance more data is received or when the download finishes. - (void) connection:(nsurlconnection *)connection didreceiveresponse:(nsurlresponse *)response - (void) connection:(nsurlconnection *)connection didreceivedata:(nsdata *)data - (void) connection:(nsurlconnection *)connection didfailwitherror:(nserror *)error - (void) connectiondidfinishloading:(nsurlconnection *)connection This on the other hand is a completely viable solution - as the fetching is executed on a separate thread. Another way to fetch data asynchronously - and a way we prefer to use is to create a thread manually which fetches the data synchronously using the convenience method mentioned above. NSDictionary *args = [[NSDictionary alloc] initwithobjectsandkeys:... ]; 23

NSThread* mythread = [[NSThread alloc] initwithtarget:self selector:@selector(asychmethod:) object:args]; [mythread start]; Which starts a thread to execute the method asychmethod with the optional arguments described in the args dictionary. The started method can contain something simple like this: - (void)loadcourse:(nsdictionary *)args{ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; } NSString *url = [NSString stringwithformat@"..."]; NSError *error; NSString *string = [NSString stringwithcontentsofurl: [NSURL URLWithString:url] encoding:nsutf8stringencoding error:&error];... [pool release]; When the data is fetched we have a string consisting of JSON data. To be able to use it we need to parse it into a dictionary. Unfortunately the iphone has no built in JSON parser, but there are several open source projects solving the problem. We used a popular framework, SBJson, which adds an method to the NSString class which makes a dictionary or list depending on the containing JSON [13]. NSDictionary *data = [string JSONValue]; 5.3.3 Local Storage The Apple way of storing data inside the app is using their framework called Core Data. This is an abstraction upon a database - often SQLite [4]. To store data you have to build a a structure of NSEntities. NSEntities can have attributes, corresponding to values, and relationships, which describes a relation between two entities. To fetch data you create a request for a given NSEntities. You can filter or search by adding an NSPredicate to the request, or sort by adding an NSSortDescriptor. For simple key-value storage, for example a preference you can use the simpler NSUserDefaults. For password storing Apple supplies a keychain feature allowing for safe storage [8]. 5.3.4 Deployment To deploy an application on App Store you need to have a developer account. You can get a developer account for free, which allows you to develop applications, but not to actually release them or even test them on your own device. An account cost from $99/year [6]. To actually deploy it after you ve gotten you account is not actually an easy task. Apple puts a lot of care into what application goes on to the App Store so a screening process is used, and many applications are denied. To test an application you need to create certificates to verify that you are indeed the developer. This certificate is also connected to a provisioning profile containing the application identifier. The provisioning profile also includes which devices are allowed for testing. So to test an application within a group of people you have to add every device id to the provisioning profile. There are some ways to make testing easier. For instance a third party service called TestFlight allows for easy deployment where you can invite testers by sending an invitation to their device. TestFlight uses Apple s Enterprise distribution system [40]. 24

5.4 Web Application To evaluate the usefulness of web based applications we created a simple jqtouch website [28]. For simplicity, we opted to use pages constructed in the backend instead of building them using JavaScript. 5.4.1 Interface Web applications are built in using standard web components such as HTML, CSS and JavaScript. Most frameworks includes some default theme to look more like a native application. To change the looks of the application, it s usually enough to customize the CSS with colors, fonts and images. For more extensive customization, JavaScript is often required to change or enhance the behavior of the application. We thought about changing the colors for a more KTH-like theme but opted to use the Apple theme for a more native look. 5.4.2 Internet Connectivity Since web applications are often already executed from a web server, Internet connectivity is already required. To request data while the application is running, AJAX is the most common way to interact with the backend. Another way is by creating iframes that invokes the pages in the backend. jqtouch utilizes AJAX for loading data or pages rendered in the backend. 5.4.3 Local Storage Using HTML5 it is possible to create simple database storage inside the browser. It s of course also possible to utilize the backend database. Another means of storage are by using cookies or session data. For My Course, we ve saved the users selected courses using HTML5 local storage. 5.4.4 Deployment A major advantage with web applications are that the developer has 100% control of the application since your hosting it on your web server. It s also possible to deploy the web application using some kind of native wrapper such as a WebView for Android or UIWebView for ios. PhoneGap is a project created specifically for this purpose, it supports native plugins for the web application [34]. 25

26

6 Results 6.1 Backend The backend consists of a simple Django based application with a SQLite database containing all courses. Through a simple RESTful interface, a client can request a variety of different information. All info except for the courses list is fetched and parsed from the KTH homepage when a request occurs. To cutdown execution time, results should be cached using simple HTTP Caching. 6.2 Android The Android application consists of a content provider and three activities. Content Provider The content provider acts as local storage for the courses list fetched from the backend. We interfaced it by declaring it as a search provider which allows us to search for courses both inside our KTH application and from the global search application. To enable this functionality, some additional meta columns are added when querying the database. Main Activity The main activity allows the user to trigger a search action for courses. The search uses the database to list all courses and allows the user to filter and pick a course to view, figure 10 11. Course Activity The course activity displays the chosen course and fetches all info from KTH s Course and programme directory, figure 12. Schedule Activity The schedule activity uses a ListView to display the current course schedule. The schedule data is fetched from KTH s API, figure 13. 6.3 ios The ios application fetches data from the server and KTH APIs much like in the Android version. When courses are loaded they are saved in a local database from there they are fetched when they are needed. The application contain four views shown in Figures 14 17. All four views are based on the native UITableView with a UITableViewController supplying the data fetched from the database. The search is implemented by adding a UISearchDisplayController to the UITableViewController. This provides an additional UITableView for displaying the results as well as a search bar and a keyboard for input searches. The UISearchDisplayController provides a method for which action to take when search query changes. In our case we searched through our database and filter our courses on the query in question - the result was displayed in the UISearchDisplayController s UITableView The navigation between views were automatically handled by the built in UINavigationController which handles pushing and popping of views with a smart and intuitive UI. 27

6.4 Web Application We built a simple jqtouch application where the user can add his courses and get info and schedule for each course. Pages are rendered in a simple backend from the JSON results to HTML. jqtouch provides a lookalike Apple theme which we ve used to get a native feeling. It also contains CSS transitions between pages. Figure 18 and 19 displays the application. Figure 10: Android - Search Figure 11: Android - Filtered Search 28

Figure 12: Android - Course Info Figure 13: Android - Schedule 29

Figure 14: ios - Search Figure 15: ios - Filtered Search 30

Figure 16: ios - Course Info Figure 17: ios - Schedule 31

Figure 18: jqtouch - My Courses Figure 19: jqtouch - Course Info 32

7 Analysis 7.1 Interface The interface for the Android application were built with hand coded XML while the ios were mainly constructed with Interface Builder which generates the XML. The Xcode tools for building interfaces are much more competent and evolved than their s Android counterpart. Work is underway to improve them but for now, they re subpar compared to Apple s suite of tools. 7.2 Third Party Libraries When we constructed the schedule view for each applications we searched for a custom week calendar view. For ios there were a few quite decent looking projects which would suffice but we couldn t find any good alternatives for the Android platform. We tried to customize the native Calendar application for Android but many parts of it are proprietary libraries supplied by Google which meant we couldn t fully get it working as we wanted in the timespan of this project. This lead to an agenda style view for the Android version. This is a common situation, there are lots and lots of Open Source projects with custom views and controllers for ios but not quite as many for Android. An interesting fact since Android is supposed to be about openness and diversity. Our guess for this predicament is that the iphone s popularity and slightly longer lifespan has lead to more developers contributing. Sites such as Cocoa Controls provide an excellent start when searching for custom views and controllers for an ios application [38]. We couldn t find anything similar to the Android platform so instead we had to search and evaluate possible candidates by ourself. Github and Google Code provides free hosting for Open Source projects and many Android and ios developers choose to put their creations for public viewing [23],[25]. Github is now the most popular site for hosting code projects judging by the number of commits [20]. 7.3 Internet Connectivity Both Android and ios includes simple ways for initiating requests using HTTP. Threading requests to avoid blocking the UI thread is encouraged for both platforms. ios NSURLConnection is even asynchronous by default. Android instead enforces threading by displaying an error when the application is not responding to input for 5 seconds. ios lacks a default library for JSON parsing but it s not difficult to add a third party library to fill the void. The XML support is about the same on both platforms. 7.4 Local Storage Both platforms includes some kind of local database wrapped with an abstraction layer, Content Provider in the case of Android and Core Data for ios. This allows for managed queries to get data instead of having to manually create all SQL queries. Caching binary files are also possible with both platforms. This is usually recommended when using large files from the web or similar. 7.5 Deployment Deploying an Android application is really simple. As mentioned in the introduction, the source code is compiled into Dalvik bytecode and packaged into an APK together with assets and resources. The developer then signs the package with his key and it s ready for usage. He then either distributes the package by himself, as we ve done during the project, or uploads it to any of the distribution networks such 33

as Android Market. This worked flawless and no problems were encountered installing our application on different phones. ios is definitely more troublesome. The reviewing process before the application is published in the App Store can be a hassle with a tight deadline. 7.6 Web Applications Web applications provide a quick and easy way to fulfill the need of mobile users. To instantaneously be able to push updates and fixes is a great benefit. Since not all browsers confirm to the HTML standards, there might be platform specific errors or anomalies which has to be fixed. 34

8 Conclusions To make an easy application for smartphones it is a valid choice to make a web application instead of making native applications. The benefits are many. You only have to make one app and not one for each platform you want to cover. If you already have a backend you need to access from the application anyway, making a web application does not have to be a lot of extra work, since deployment is free in both the time and monetary sense. Comparing it to the Apple way of deploying where you need to pay to even be allowed to upload your application - then you need to wait for application to be accepted by Apple. If you are rejected the procedure will begin all over again. The benefits of making native applications are better performance and more native support. It is easier to access hardware in the application. There is an added bonus to actually having an application on app stores and that is publicity. When an application becomes popular it may reach a point where it promotes itself. In a web application this can be solved by creating an application containing a web view which in turn access the web application, or by using frameworks such as PhoneGap. 35

36

9 Bibliography [1] Frank Ableson and Robi Sen. Android in Action. Manning Publications, 2011. isbn: 9781935182726. [2] Appcelerator. Appcelerator Titanium. url: http : / / www. appcelerator. com/ (visited on 06/09/2011). [3] Apple. Apple s App Store Downloads Top 10 Billion. url: https://www.apple.com/pr/library/ 2011/01/22appstore.html (visited on 06/09/2011). [4] Apple. Core Data. url: http://developer.apple.com/library/mac/#documentation/cocoa/ Conceptual/CoreData/cdProgrammingGuide.html (visited on 06/09/2011). [5] Apple. ios Dev Center. url: http://developer.apple.com/support/ios/ios- dev- center. html (visited on 06/09/2011). [6] Apple. ios developer accounts. url: http://developer.apple.com/programs/ios/ (visited on 06/09/2011). [7] Apple. ios MVC. url: http : / / developer. apple. com / library / ios / #documentation / Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns.html# //apple_ref/doc/uid/tp40002974-ch6-sw1 (visited on 06/09/2011). [8] Apple. Keychain in ios. url: http://developer.apple.com/library/ios/#documentation/ Security/Conceptual/keychainServConcepts/iPhoneTasks/iPhoneTasks.html%23//apple_ ref/doc/uid/tp30000897-ch208-sw1 (visited on 06/09/2011). [9] Apple. Memory Management Rules. url: http : / / developer. apple. com / library / mac / #documentation/cocoa/conceptual/memorymgmt/articles/mmrules.html%23//apple_ref/ doc/uid/20000994-bajhfbgh (visited on 06/09/2011). [10] Apple. UITableView. url: http : / / developer. apple. com / library / ios / #documentation / UIKit/Reference/UITableView_Class/Reference/Reference.html (visited on 06/09/2011). [11] Apple. UIView. url: http://developer. apple.com/library/ios/#documentation/uikit/ Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/cl/UIView (visited on 06/09/2011). [12] The Artspot. Hoppr. url: http://www.hoppr.eu/ (visited on 06/09/2011). [13] Stig Brautaset. JSON Framework. url: http://stig.github.com/json-framework/ (visited on 06/09/2011). [14] Ed Burnette. Hello, Android: Introducing Google s Mobile Development Platform (Pragmatic Programmers). Pragmatic Bookshelf, 2010. isbn: 9781934356562. [15] D. Crockford. RFC 4627 - JSON. url: http://tools.ietf.org/html/rfc4627 (visited on 06/09/2011). [16] Android Developers. ADT Plugin for Eclipse. url: http : / / developer. android. com / sdk / eclipse-adt.html (visited on 06/09/2011). [17] Android Developers. Android Architecture. url: http : / / developer. android. com / guide / basics/what-is-android.html (visited on 06/09/2011). [18] Android Developers. Platform Versions. url: http:// developer. android. com/ resources/ dashboard/platform-versions.html (visited on 06/09/2011). [19] Android Developers. Screen Sizes and Densities. url: http : / / developer. android. com / resources/dashboard/screens.html (visited on 06/09/2011). [20] Klint Finley. Github Has Surpassed Sourceforge and Google Code in Popularity. url: https:// www.readwriteweb.com/hack/2011/06/github- has- passed- sourceforge.php (visited on 06/09/2011). [21] Flickr. Flickr: Camera Finder. url: http://www.flickr.com/cameras/ (visited on 06/09/2011). [22] Gartner. Gartner Says 428 Million Mobile Communication Devices Sold Worldwide in First Quarter 2011, a 19 Percent Increase Year-on-Year. url: http://www.gartner.com/it/page.jsp?id= 1689814 (visited on 06/09/2011). [23] GitHub. GitHub. url: http://github.com/ (visited on 06/09/2011). [24] Google. Android Maps API Key Signup. url: https://code.google.com/android/maps-apisignup.html (visited on 06/09/2011). [25] Google. Google Project Hosting. url: http : / / code. google. com / hosting/ (visited on 06/09/2011). 37

[26] itunes. Apple. url: http : / / itunes. apple. com / us / app / id308928075? mt = 8 (visited on 06/09/2011). [27] json.org. JSON. url: http://json.org/ (visited on 06/09/2011). [28] David Kaneda. jqtouch. url: http://jqtouch.com/ (visited on 06/09/2011). [29] Wei-Meng Lee. Beginning iphone SDK Programming with Objective-C (Wrox Programmer to Programmer). Wrox, 2010. isbn: 0470500972. [30] MoSync. MoSync. (Visited on. 06/09/2011). [31] Novell. MonoDroid. url: http://mono-android.net/ (visited on 06/09/2011). [32] Novell. MonoTouch. url: http://monotouch.net/ (visited on 06/09/2011). [33] Randall Reynolds Clemente Izurieta Nurzhan Nurseitov Michael Paulson. Comparison of JSON and XML Data Interchange Formats: A Case Study. MA thesis. Montana State University, url: http://www.cs.montana.edu/izurieta/pubs/caine2009.pdf (visited on 06/09/2011). [34] PhoneGap. PhoneGap. url: http://phonegap.com/ (visited on 06/09/2011). [35] The jquery Project. jquery. url: http://jquery.com/ (visited on 06/09/2011). [36] The jquery Project. jquery Mobile. url: http://jquerymobile.com/ (visited on 06/09/2011). [37] Andy Rubin. I think I m having a Gene Amdahl moment. url: http://android- developers. blogspot. com / 2011 / 04 / i - think - im - having - gene - amdahl - moment. html (visited on 06/09/2011). [38] Structlab. Cocoa Controls. url: http://cocoacontrols.com/ (visited on 06/09/2011). [39] Sun. Java BluePrints - J2EE Patterns. url: http://java.sun.com/blueprints/patterns/mvcdetailed.html (visited on 06/09/2011). [40] Testflightapp.com. TestFlight. url: https://testflightapp.com/ (visited on 06/09/2011). [41] W3C. HTML5. url: http://dev.w3.org/html5/spec/overview.html (visited on 06/09/2011). [42] Xamarin. Xamarin. url: http://www.xamarin.com/ (visited on 06/09/2011). 38

10 Attachments 10.1 ios Top 50 Free Applications App Name Category Expressen News SMHI Weather Air penguin lite Games 4 in a row - deluxe Games Zentomino Games Hit Tennis 2 Games Grillfest Lifestyle Pig shot Games Mitt Telia Utilities Myggavstötaren Healthcare & fitness Old Photo PRO Photography Talking Tom Cat 2 Entertainment Veckoappen Utilities Paper Glider Crazy Copter Games klart.se Weather HeyTell Social Networking Facebook Social Networking Angry Pig Daddy Games Spotify Music TV4 Play Entertainment Yr.no Weather Bloody knuckles Free Games Instagram Photography Minesweeper Q Games Bubble Shooter adventures Games Achmeds Soundboard Entertainment RunKeeper Healthcare & fitness Jelly Drop Games Blocket Lifestyle Aftonbladet News Vardagsmaten.se Lifestyle Swedbank Finance WordCollapse Games Hemnet Lifestyle Viber Social Networking Skype Social Networking Fragger Games Mahjong Elements Games Sveriges Radio Play News City Friends Games Tv.nu Utilities hitta.se Navigation Angry Birds Free Games Tap the frog Games Hitta min iphone Utilities eniro.se Navigation Gelato Mania Games Birthday.se Utilities Baby Adopter Games FreeAppKing Games 39