SlideShare a Scribd company logo
1 of 116
Download to read offline
Don’t Panic
Mobile Developer’s Guide to
the Galaxy
Mobile Developer’s Guide
Table of Contents




6    Introduction

8    An Overview of Application Platforms
8    Native Applications
11   J2ME / Java ME
11   Flash Lite and Alternative Flash-compatible Platforms
12   BREW
12   Widgets
14   Websites
14   SMS Text Messaging

15   Programming Android Apps
15   Prerequisites
16   Implementation
18   Testing
19   Signing
19   Distribution

20   Programming iPhone Apps
21   Prerequisites
21   Implementation
23   Testing
25   Distribution
27   Programming Symbian Apps
28   Prerequisites
30   Porting to Symbian
31   Signing
32   Distribution

33   Programming J2ME / Java ME Apps
33   Prerequisites
34   Implement your App
36   Testing
37   Porting
40   Signing
41   Distribution

42   Programming Qt Apps
43   Prerequisites
44   Creating Your Application
45   Learning Qt
45   Testing
46   Packaging
47   Signing
47   Distribution

48   Programming Mobile Widgets
49   Widget Characteristics
52   Prerequisites
52   Writing Your Code
54   Testing
55   Signing
55   Distribution

56 Programming Flash Applications
57 Prerequisites
60 Developing Flash Applications for Smartphones
62 Testing
62 Distribution

64   Windows Phone 7 Series
64   Development
67   Windows Phone 7 Series Functions and Services
67   Distribution
68   Resources
68   Testing

69   Programming Bada Applications
69   Prerequisites
70   Implementation
71   Testing
72   Distribution

73   Bringing Your Content to the Mobile Web
75   Mobile Usage Patterns and its consequences
76   A History on the Mobile Web
77   How to adapt content for the mobile user
79   Satisfy the Interpreter of Your Content: The Browser
83   Let’s do some pigeonholing: Device categories
87   Use GPS in the Browser
87   Testing your Mobile Website
89   Learn More – On the Web

90   Implementing Rich Media
91   Streaming
91   Mobile Video
92   Ringtones
92   Media Converters
94 Progressive Download
    94 Flash (Lite)

    96    Implementing Location-Based Services
    96    How to obtain Location Data
    98    How to obtain Mapping Material
    98    Implementing Location Support on Different Platforms
    99    Tools for making Map Apps

    100   Testing Your Application
    100   Testability: the Biggest Single Win
    101   Headless Client
    101   Separate the generic from specific
    102   Test-Driven Development
    102   Physical Devices
    103   Remote Control
    104   GUI Test Automation
    104   Beware of Specifics
    104   Crowd Sourcing
    105   Web-Based Content and Applications
    105   Next Steps

    106 Now what — Which Environment Should I Use?

    109 Epilogue

    110 About the Authors
    115 Imprint/Contact

    This Developer Guide is licensed under the
    Creative Commons Some Rights Reserved License.




5
Mobile Developer’s Guide
    Introduction
    Welcome to the 6th edition of our Mobile Developer’s Guide
    To The Galaxy! When we started this project in 2009, a lot
    of people thought the mobile ecosystem’s fragmentation was
    only a temporary phenomenon and that by 2011 nobody will
    need a guide like this anymore. They thought that one, maybe
    two, platforms would dominate the market. The opposite
    happened: New platforms are introduced continuously, the lat-
    est being Windows Phone 7 and Bada; so we’ve included chap-
    ters on both of them here. And one of the new platforms is
    beginning to face fragmentation itself: Android.
    We think that the need for a guide like this is probably big-
    ger than ever and we hope that it will help you take the right
    decision when entering the mobile market and that it helps you
    taking the first steps on the platform of your choice.
    Another prediction, in 2010, was that we won’t talk about
    applications in the near future, because mobile web will be the
    new standard and nobody will need native applications any-
    more. This has not happened yet and we do not believe it will
    happen that soon. Nevertheless you will of course also find
    information about how to design mobile websites and web-
    based apps in this guide.

    We would like to thank all contributors, especially Julian
    Harty. Please tell us whatever you think is missing or needs
    to be changed in this guide and we will take it into account for
    the 7th edition! Write to developers@enough.de


    Development is a passion – have fun
    in the mobile world!
6
7
Mobile Developer’s Guide
 An Overview of Application
 Platforms
You can choose between different platforms to realize your
mobile vision. This section describes the most common environ-
ments and outlines differences between them. A more detailed
description follows in the platform-specific chapters.


Native Applications
There are a lot of mobile platforms used in the market today
– some are Open Source, some are not. The most important
native platforms are (alphabetically) Android, Bada, BlackBerry,
MeeGo, iOS, Symbian, webOS and Windows Mobile/Windows
Phone. All these platforms allow you to create native app-
lications for them without establishing a business relationship
with the respective vendor. The main benefits for programming
native applications include bester integration of your applica-
tion with the platform’s features and often better performance.
Typical drawbacks are the effort required and the complexity
of supporting several native platforms (or limiting your app to
only one platform).
Most mass market phones are, however, equipped with embed-
ded operating systems that do not offer you the opportunity to
create native applications. Examples include but are not limited
to Nokia Series 40, Samsung SGH and Sony Ericsson Java Plat-
form phones. 




8
The following table provides an overview of the main mobile
platforms:


OS        Language(s)      Remarks
Android    Java, C         Open Source OS (based on Linux)
                           developer.android.com

Bada       C, C++          Mobile platform from Samsung
                           running on Linux or RealTime OS
                           developer.bada.com

BlackBerry Java            J2ME compatible but extensions
                           allow a tighter integration
                           na.blackberry.com/eng/developers
      C, C++
MeeGo     Qt, Web Apps,    Intel and Nokia powered Open
          C++, others      Source OS (based on Linux)
                           meego.com/developers

OS X /     Objective-C,    Requires Apple Developer
iPhone     C               Account
                           developer.apple.com/iphone

Symbian    C, C++, Qt,     Open Source OS
           WebApps, others www.symbian.org
webOS      HTML, CSS,      Widget style programming, OS
           JavaScript, C   (based on Linux)
                           developer.palm.com

Windows    C#, C           .NET CF or Windows Mobile
Mobile                     API, most devices ship with
                           J2ME compatible JVM
                           developer.windowsmobile.com

Windows    Silverlight,    New Windows based OS
Phone      XNA             targeted at consumers
                           developer.windowsphone.com



                                                              9
10
J2ME / Java ME
Around 80% of all mobile handsets shipped in 2009 support
the mobile Java standard (J2ME/Java ME), so Java is by far the
most widely distributed application environment. In contrast
to many other environments, J2ME is a standard rather than
a product, which can be implemented by anyone (who pays
Oracle the corresponding license fees that is). Standardization
is the strength of J2ME but at the same time it is the source of
many fragmentation problems.
On many so called feature phones, J2ME is the only way to real-
ize client side applications. With the boom of so-called smart-
phones, J2ME lost impact, at least in the US and Europe. For
many emerging markets it remains the only possibility to target
the mass market.


Flash Lite and Alternative Flash-
compatible Platforms
Flash Lite is the mobile edition of Flash, which is similar to an
older version of Adobe’s web Flash product and only supports
ActionScript 2.0. Flash Lite is favored by many designers, since
they know the tools already. Flash Lite features a powerful UI
but lacked good integration into the host device, although this
is improving. Programming Flash Lite is relatively easy thanks
to the ActionScript language that is very similar to Java Script.
The drawbacks include poor performance and small market share
in comparison to J2ME. However, there are millions of feature
phones supporting Flash Lite today and some smartphones sup-
port Flash Lite including Symbian and Android-based devices.
Full Flash support has been announced for MeeGo, Symbian,
Android and Blackberry devices.

                                                                11
BREW
     The Binary Runtime Environment for Wireless (BREW) is a
     programming environment promoted by Qualcomm1. BREW
     services are offered by more than 60 operators in 28 coun-
     tries, but it’s most popular within the US with CDMA devices
     launched by Verizon, US Cellular, Metro PCS among others.
     While previous versions only supported C development, the
     Brew Mobile Platform (Brew MP), supports applications written
     in Java, Flash, TrigML or native C code2.


     Widgets
     The main advantage of widget environments is they offer sim-
     ple, straightforward programming. There are, however, several
     widget environments and some require a player to be installed
     before widgets can be run. This situation is changing, with a
     trend towards more standardization, based on W3C standards.
     As a result, standards-based environments are being integrated
     into platforms, as is happening with MeeGo and Symbian.
     The move to standard web technology based widgets is allevi-
     ating the main drawback of widgets: lack of integration with
     the underlying platform. The standards-based environments are
     increasingly offering APIs that enable widgets to access devices
     data, such as location data or contact details, among others. All
     these environments use XML, a script language (e.g. JavaScript)
     and a page description language (like HTML) for realizing a
     widget.


     1) brew.qualcomm.com
     2) brew.qualcomm.com/brew/en/developer/overview.html




12
The following table provides an overview of popular widget
frameworks:

Environment   Language(s) Remarks
Web Runtime XML,            Standard web technology based
Widgets on  HTML, CSS,      widgets, with a proprietary pack-
Symbian     JavaScript      aging standard. JavaScript APIs
                            offer high degree of access to
                            platform features.
                            tiny.symbian.org/runtimespace

Skylight      HTML, CSS,    Open Source widget platform for
              JavaScript    featurephones and smartphones,
                            still under development.
                            www.skylightmobile.org

W3C /         XML, HTML,    Vodafone, China Mobile and
Vodafone      JavaScript,   other companies try to push the
Widgets       CSS,          W3C widget standard for mobile
                            adoption.
                            widget.vodafone.com/dev

Samsung       XML, HTML,    innovator.samsungmobile.com
              CSS,
              JavaScript
PhoneGap      HTML, CSS,    Cross platform widget platform
              JavaScript    www.phonegap.com



Sony Ericsson HTML, CSS,    Based on PhoneGap
WebSDK        JavaScript    developer.sonyericsson.com



BlackBerry    HTML, CSS,    na.blackberry.com/eng/developers
              JavaScript


                                                                13
Websites
     Webpages are supported by most phones, so in principle this
     should be the environment of choice to get the widest pos-
     sible reach (after SMS texting). The main problem is the sheer
     number of browsers and their varying feature sets. Some
     browsers are very powerful and support CSS as well as Java-
     Script, others are less sophisticated and only support XHTML.
     Thankfully the old WAP standard with its WML pages does not
     play any significant role nowadays.
     Main problems for web pages are that they are only available
     online and that their access to device features is extremely
     limited. With the introduction of HTML5, this situation is im-
     proving: Offline browsing and new device APIs are now also
     available for mobile websites. The main benefits of the mobile
     web as a platform are the easy development and that, generally,
     you control the deployment.


     SMS Text Messaging
     Almost everybody who has a mobile phone is also texting. Texting
     limits interactions to less than 160 characters; and it can be
     quite costly to send out text messages in bulk. On the positive
     side it enjoys a global audience of any age and plays an im-
     portant role especially in the emerging markets where SMS pay-
     ments are a common usage scenario.




14
Mobile Developer’s Guide
Programming Android
Apps
The Android platform is fairly recent, created by Google and the
Open Handset Alliance in late 2007, Android is an operating
system and an application framework with complete tooling
support and a variety of preinstalled applications. In 2010,
Google announced that every day 160,000 Android devices are
shipped to end users. Since the platform is supported by many
hardware manufacturers, it is the fastest growing smartphone
operating system. Additionally, Android is planned to be used
for tablets, media players, setup boxes, desktop phones and
car entertainment systems. It is also growing very fast when
it comes to the platform features: Each new release usually in-
cludes many new features. For example, Android 2.2 (so-called
“Froyo”) now allows app storage on the SD card, C2DM push
functionality1, data backup services and a lot more.


Prerequisites
The main programming language for Android is Java5. But
beware, only a subset of the Java libraries are supported and
there are lots of platform specific APIs. You find answers to
your What and Why questions in the Dev Guide2 and to your
How questions in the reference documentation3.
1) code.google.com/intl/de-DE/android/c2dm
2) developer.android.com/guide
3) developer.android.com/reference




                                                               15
To get started you need the Android SDK1, which is available
     for Windows, Mac OS X, and Linux. It contains tools to
     build, test, debug and analyse applications. You will probably
     also want a good Java IDE. Eclipse seems a logical choice
     as Android provides good support for development and deploy-
     ment via an Eclipse ADT plugin. Note: command line tools and
     Ant build scripts are also provided so you can concoct almost
     any development and build process.


     Implementation
     An Android application is a mix of activities, services, message
     receivers and data providers declared in the application mani-
     fest. An activity is a piece of functionality with an attached
     user interface. A service is used for tasks which should run in
     the background and is therefore not tied directly to a visual
     representation. The message receiver can handle messages
     broadcast by the system or other applications. The data provid-
     er is an interface to the content of an application and thereby
     abstracts from underlying storage mechanisms. An application
     may consist of several of these components, for instance an
     activity for the UI and a service for long running tasks.

     Communication between the components is done by intents.
     An intent bundles data like the user’s location or an URL with
     an action. These intents trigger behaviours in the platform.
     For instance the intent of showing a web page will open the
     browser activity. The nice thing about this building-block
     philosophy is that functionality can be replaced by other
     applications and the Android system will use the preferred
     application for a specific intent.

     1) developer.android.com/sdk




16
For example the intent of sharing a web page triggered by a news
reader app can open an email client or a text messaging app
depending on the user’s preference and on the applications in-
stalled.

To aid development, you have a lot of tools from the SDK at
your disposal, the most important ones are:

— android: Create an initial project or manage virtual
  devices and versions of the SDK.
— adb: Query devices, connect and interact with them
  (and virtual devices) by moving files, installing apps
  etc.
— emulator: Start it with a virtual device and it will
  emulate the defined features. It takes a while to start
  so do it once and not on every build.
— ddms: Look inside your device or emulator, watch log
  messages, and control emulator features like network
  latency and GPS position. View memory consumption or
  simply kill processes. If this tool is running, you can
  also connect the Eclipse debugger to a process running
  in the emulator.

These tools and more - e.g. to analyze method trace logs,
inspect layouts, or to test apps with random events - can be
found in the tools directory of the SDK.

The user interface of an application is separated from the
code in Android-specific xml layout files. Different layouts
can be created for different screen sizes, country locales
and device features without touching Java code. To this end
localized strings and images are organized in separate resource
folders and the ADT plugin may help to manage all these files.

                                                               17
Testing
     The first step to test an app is to run it on the emulator
     or device and debug it if necessary through the ddms tool.
     Android is built to run on different devices and OS versions
     without modification but hardware manufacturers might have
     changed pieces of the platform. Therefore testing on a physical
     device is paramount.

     Automated Testing
     To automate testing, the Android SDK comes with some capable
     and useful testing and instrumentation1 tools. Tests can be
     written using the standard JUnit format. The Instrumentation
     classes can monitor the UI, send system events like key presses,
     et cetera. You can test for the status of your application after
     these events occur. The automated tests can be run on physical
     devices or in a virtual device.
     Open-source testing frameworks such as Robotium2 can com-
     plement your other automated tests; it can even be used to test
     binary apk files, if the source is not available.
     A maven plugin3 and a helper for the continuous integration
     server Hudson may also assist your testing4, 5.




     1)   developer.android.com/guide/topics/testing/testing_android.html
     2)   code.google.com/p/robotium
     3)   wiki.hudson-ci.org/display/HUDSON/Android+Emulator+Plugin
     4)   hudson-labs.org/content/getting-started-building-android-apps-hudson
     5)   novoda.com/2010/08/13/android-continuous-integration-android-
          maven-plugin/




18
Signing
Your application will always be signed by the build process,
either with a debug signature or a real one. Your signature may
be self signed, so forget about signing fees (and security). The
same signature is required for updates of your application.


Distribution
After you have created the next killer application and tested
it, you should put it in the Android Market. It a good place to
reach both customers and developers of the Android platform,
to browse for new exciting apps, and to sell your own apps.
To upload your application, start at market.android.com/pub-
lish. You are required to register with the service with your
Google Checkout Account and a $25 registration fee.

Once your registration is approved you can upload your
application, add screenshots and descriptions to finally
publish it. Make sure that you have defined a versionName,
versionCode, an icon and a label in your AndroidManifest.xml.
As there are lots of competing applications in Android Market,
you might want to use alternative application stores. They pro-
vide different payment methods and may target specific con-
sumer groups.




                                                               19
Mobile Developer’s Guide
 Programming iPhone Apps
 The iPhone is a highly interesting and very popular develop-
 ment platform for many reasons, a commonly named one
 being the App Store. When it was introduced in July 2008,
 the App Store took off like no other marketplace did before.
 Now there are far more than 200,000 applications in the App
 Store, and the number is growing daily. This reflects the success
 of the concept but it also means that it is getting more and
 more difficult to stand out in this mass of applications.

 The iPhone SDK offers high-level APIs for a wide range of tasks
 which helps to cut down on development time on your part.
 New APIs are added in every major update of iPhone OS, such
 as MapKit in iPhone OS 3.0 or (limited) multitasking in iPhone
 OS 4.0.

 Since the iPad, which went on sale in April 2010 uses the same
 operating system and APIs as the iPhone, skills acquired in
 iPhone development can be used in iPad development. A single
 binary can even contain different versions for both platforms
 with large parts of the code being shared.




20
Prerequisites
In order to develop iPhone (and iPod Touch and iPad) apps,
you will need the iPhone SDK, which can be downloaded at
developer.apple.com/iphone. This requires a membership, which
is available for free. If you plan to test your apps on your device
or distribute your apps on the App Store, you need to sign up
for an account starting at a year.

The iPhone SDK contains various applications that will allow you
to implement, test, and debug your apps. The most important
applications are:

— Xcode, the IDE for the iPhone SDK
— Interface Builder, to build user interfaces for iPhone app
— Instruments, which offers various tools to monitor app
  execution
— iPhone Simulator, which allows the developer to test his
  or her apps quicker than by deploying to a device

The iPhone SDK will work on any Intel-based Mac running Mac
OS X 10.5 (Leopard) or 10.6 (Snow Leopard). A guide to get you
started and introduce you to the tools is included, as is a viewer
application for API documentation and sample code. References
and guides are also available online at developer.apple.com/
iphone/library/navigation.


Implementation
Usually, you will want to use Apple’s high-level Cocoa Touch
APIs when developing for the iPhone. This means that you
will write Objective-C code and create your user interfaces in
Interface Builder, which uses the proprietary XIB file format.

                                                                   21
Objective-C is, as the name suggests, a C-based object-oriented
     programming language. As a strict superset of C, it is fully com-
     patible with C, which means that you can use straight C source
     code in your Objective-C files.

     If you’re used to other object-oriented languages such as C++
     or Java, Objective-C’s syntax might take some time getting used
     to, but is explained in detail at developer.apple.com1. What
     seperates Objective-C most from these languages is its dynamic
     nature, lack of namespace support and the concept of message
     passing vs. method calls.

     A great way to get you started is Apple’s guide “Your First
     iPhone Application”, which will explain various concepts and
     common tasks in an iPhone developer’s workflow2.

     Check out some of the sample code that Apple provides online3
     to find out more about various APIs available to you.
     1) developer.apple.com/iphone/manage/overview/index.action
     2) developer.apple.com/iphone/manage/distribution/distribution.action
     3) developer.apple.com/iphone/library/navigation/SampleCode.html




22
Testing
As performance in the iPhone Simulator may be superior to
actual devices by several orders of magnitude, it is absolutely vital
to test on devices. If possible, test your application on different
generations, since newer devices, such as the recently released
iPhone 4 and the iPad usually feature faster CPUs and more RAM
than previous models. Testing on real devices is also important
because touch-based input is completely different from a pointer-
driven UI model.

You can distribute builds of your application to up to 100 testers
through Ad-Hoc Provisioning, which you can set up in the Program
Portal1. Each iPhone (and iPod touch) has a unique identifier
(UDID – universal device identifier), which is a string of 40 hex
characters based on various hardware parts of the device.

If you choose to test using Ad-Hoc-Provisioning, simply follow
Apple’s detailed set-up instructions2. Every single step is vital to
success, so make sure that you execute them all correctly.

1) developer.apple.com/iphone/library/referencelibrary/GettingStarted/
   Learning_Objective-C_A_Primer/index.html#//apple_ref/doc/uid/
   TP40007594
2) developer.apple.com/iphone/library/documentation/iPhone/Conceptual/
   iPhone101/Articles/00_Introduction.html




Automated Testing
                                                                         23
Automated testing options for iPhone varies in different ver-
 sions of the iPhone SDK. Originally SDK did not include sup-
 port for unit testing out of the box, but fortunately Google
 added support in Google Toolbox for Mac (GTM)1 with detailed
 instructions available in their wiki2. Also, iPhone develop-
 er Gabriel Handford improved on this work and released his
 project, GHUnit as open source3.
 GTM runs the test cases using a shell script during the build
 phase, while GHUnit runs the tests on the device (or in the
 simulator), allowing the developer to attach a debugger to in-
 vestigate possible bugs.

 In version 2.2 of the SDK Apple included OCUnit; an example of
 how to create the unit tests is available online4.

 In version 4 of iOS Apple introduced a new tool, UIAutomation
 which aims to automate the testing of your application by
 scripting touch events5. At the time of writing, no additional
 information is available on Apple websites, however there is an
 O’Reilly article with basic instructions6.

 Several third party testing automation tools for iPhone
 applications are available as well, including FoneMonkey7 and
 Squish8.

 1) code.google.com/p/google-toolbox-for-mac/
 2) code.google.com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting
 3) github.com/gabriel/gh-unit
 4) www.mobileorchard.com/ocunit-integrated-unit-testing-in-xcode
 5) developer.apple.com/technologies/iphone/whats-new.html#tools
 6) answers.oreilly.com/topic/1646-how-to-use-uiautomation-to-create-
    iphone-ui-tests
 7) www.gorillalogic.com/fonemonkey
 8) www.froglogic.com/products




24
Distribution
In order to reach the broadest possible audience, you should
consider distributing your app on the App Store. There are
other means, such as the Cydia Store for jailbroken iPhones,
but the potential reach isn’t nearly as large as the App
Store’s.

To prepare your app for the App Store, you will need a 512x512
version of your app’s icon, up to five screen shots of your app,
and a properly signed build of your app. Log in to iTunes Con-
nect1 and upload your app according to the onscreen instruc-
tions.
After Apple has approved your application, which usually
shouldn’t take more than 2 weeks, your app will be available
to customers in the App Store. The approval process re-
ceives more complaints than any other aspect of the iPhone
ecosystem. A list of common rejection reasons can be found
on www.apprejections.com.

1) itunesconnect.apple.com




                                                                   25
26
Mobile Developer’s Guide
Programming Symbian
Apps
The Symbian platform is an open-source software platform for
mobile devices. It consists of an operating system (formerly
known as Symbian OS), middleware and user interface layers
(formerly known as S60) and, since 2009, has been stewarded
by the Symbian Foundation1.
Close to 350 million Symbian devices (operating on 250 net-
works across the world) have shipped since the first Symbian
OS-based device was launched in 2000. The first official plat-
form release from Symbian Foundation was Symbian^2 in May
2009, devices based on Symbian^3 are shipping in 2010.

As a third party developer you can create applications and
middleware in Symbian C++, the native programming language
of the Symbian platform. Symbian C++ is a specialized subset
of C++ with Symbian-specific idioms. It has a steep learning
curve and the first steps here can be more frustrating than in
other environments, but there are lots of books and articles to
help you2.
Compared with many of the runtimes available for Symbian de-
vices, such as Java ME and Python, native Symbian C++ APIs
provide the most comprehensive access to device features and
enable rich application development. They provide fine-grained
control over all aspects of the operating system, including
memory, performance and battery life; and deliver a consistent
performance advantage over other runtimes.


1) www.symbian.org
2) developer.symbian.org/wiki/index.php/Symbian_C%2B%2B_Quick_Start
                                                                      27
Since late 2009 you can also create native applications for
     Symbian phones using cross platform Qt (pronounced “cute”)
     APIs and tools. Qt’s developer-friendly APIs allow applications
     to be written once and compiled for Symbian, desktop, and
     windows mobile devices. Please check www.forum.nokia.com/
     Technology_Topics/Development_Platforms/Qt/QuickStart.
     xhtml for details. Qt application development is covered later
     in this guide.


     Prerequisites
     The official desktop development platforms for Symbian
     C++ are Microsoft Windows XP with Service Pack 2 and Win-
     dows Vista. All of the kits and tools supplied by Symbian
     are free. If your computer meets the requirements, set-
     ting it up for Symbian C++ development is as simple as
     downloading and installing the following (in this order):

          1.    ActivePerl (use ONLY version 5.6.1.638)1
          2.    The Symbian Application Developer Toolkit (ADT)
          3.    The Symbian Application Development Software
                Developer Kit (SDK) (full installation)2

     Linux and Mac OS X are not officially supported platforms. One
     way around this is to use a virtual machine that hosts Windows.
     Other options are more complex, but information can be found
     online3.
     1) downloads.activestate.com/ActivePerl/Windows/5.6/ActivePerl-

       5.6.1.638-MSWin32-x86.msi
     2) Items 2 and 3 are downloadable on developer.symbian.org/main/tools_

       and_kits/index.php
     3) developer.symbian.org and www.forum.nokia.com




28
Application Developer Toolkit (ADT)
If you have worked with S60 SDKs and tools, you’ll have in-
stalled each of the tools you need for development (such as
Active Perl, the JRE and Carbide.c++) separately. The new
Symbian platform installs all the tools you need in one
sweep.

The ADT is for developers who wish to create applications
that run on production phones - i.e. “on top” of the Symbian
platform. Typical users include professional application and
games developers, professional service companies, hobbyist
developers, students and research groups. The ADT is intended
for use with one or more SDKs.

The Carbide.c++ IDE, based on Eclipse, is installed as part of
the Application Development Toolkit (step 2 in the section
above). It is the only officially supported IDE for Symbian
C++ development. The GCCE compiler is also supplied, as is
a debugger that allows debugging on both emulator and
production phones, analysis tools, and more.

Application Development Software Developer Kit (SDK)
The Application Development SDK contains libraries and head-
er files that enable you to develop applications. It should be
used in conjunction with the ADT. The SDK provides access to
APIs that are guaranteed to work across a broad range of
Symbian-based devices today and in the future. Once you
have installed the kits you can use the built-in application
wizard to build, debug and run your first native application,
and download it to a Symbian phone, without writing a single
line of code.




                                                                 29
Porting to Symbian
     The Symbian platform includes standard libraries that enable
     developers to build POSIX-compliant C code and use near-
     ISO standard C++, including the Standard Template Library.
     These libraries can substantially reduce the time and effort
     required to port POSIX-based software to the Symbian plat-
     form. They are especially useful for porting existing C++ or
     C-based software from the desktop environment and increase
     the scope for cross-platform software development using
     C/C++ code. Existing standards-compliant code will work on
     the Symbian platform with some minor changes and a re-
     build. Developers can benefit from an open-source code-
     base instead of having to create everything from scratch.

     The C language support comprises four ‘base’ libraries
     (libc, libm, libpthread and libdl), five additional libraries
     (libssl, libz, libcrypto, libcrypt and libglib) and related
     tools. For standard C++ support, the platform provides the
     popular STLport version of the Standard Template Library
     and a small but useful subset of the Boost libraries.

     There are no standard C/C++ APIs for the UI or application
     engines, such as Calendar, Contacts and Messaging, and no
     access to most handset-specific features such as multimedia
     or telephony. However, if you develop using Qt on Symbian,
     APIs will be made available for access to these features,
     through the QtMobility project.




30
Automated Testing
Automated Test Tools are now available from Symbian at
developer.symbian.org/wiki/index.php/Symbian_Test_Tools
You may find legacy projects use a much older unit testing
framework called SymbianOSUnit1 which has been open-
sourced, but not updated in the last few years. Finally, in terms
of unit testing, googletest2 works on Symbian, and other Mo-
bile C++ platforms.


Signing
Symbian uses a trust-based platform security model. This
means APIs are protected by platform security “capabilities”.
If you use APIs protected by capabilities, you will need to
submit your application to Symbian Signed. It is necessary to
sign an application while developing in order to install it to
a phone. This is done using a “development certificate” and
a developer can obtain one of these from Symbian Signed.3
Almost all developers can use the Express Signed option when
using Symbian Signed to sign their application ready to distrib-
ute. This a quick and simple way to get an application signed
for the distribution channel. The developer must declare that
the application has passed the Test Criteria set by Symbian,
upload the application to Symbian Signed and the signed ap-
plication is returned almost immediately. There is a cost associ-
ated with using Symbian Signed, the latest cost information for
Express Signed is available at the Symbian developer website.4
1) www.symbianosunit.co.uk
2) code.google.com/p/googletest
3) www.symbiansigned.com
4) tiny.symbian.org/symbiansigned




                                                                31
It is also necessary to sign an application while developing in
     order to install it to a phone. This is done using a “development
     certificate” that you can obtain from Symbian Signed4. You
     can find out more on developer.symbian.org/wiki/index.php
     Express_Signed_(Symbian_Signed)
     If you are writing a simple application or game, you might be
     able to avoid using protected APIs to avoid Symbian signing.
     You can simply distribute the application signed by a certificate
     you have generated for yourself, known as self-signing.
     However, a self-signed application will present a warning to the
     user when they install it, saying that the code is untrusted. To
     reassure your users, you may therefore still prefer to Symbian
     sign your application even when you don’t use protected
     capabilities.


     Distribution
     Symbian Horizon1 is a service that helps developers to write
     Symbian applications and publish them in app stores like
     Nokia’s Ovi Store, the Samsung Applications Store, Sony
     Ericsson’s Playnow, AT&T’s MEdia, and stores from China
     Mobile, Handango and Orange.

     Horizon has a single directory of Symbian Signed tools available
     which enables developers to display and advertise their appli-
     cations, and allows users to discover them and find out which
     stores they are available from.


     1) horizon.symbian.org




32
Mobile Developer’s Guide
Programming J2ME / Java
ME Apps
Programming J2ME apps is a fun and rewarding experience.
The capabilities of the Java platform are constantly evolving
thanks to the Java Community Process1 that standardizes new
APIs (like the Advanced Multimedia API) and even whole plat-
forms (like the Mobile Service Architecture).

Right now J2ME development seems to be a bit unfashionable
compared to iPhone or Android development, but J2ME devel-
opment is still the best way to reach around 80% of mobile
phone users worldwide.

Prerequisites
A mobile Java application (MIDlet) is compiled, obfuscated,
preverified and packaged. To implement your application you
need a couple of things:

— the Java SDK2 (not the Java Runtime Environment) and
  an IDE of your choice, e.g. Eclipse3 possibly with Mobile
  Tools for Java (MTJ), NetBeans4 with its mobility pack
  or IntelliJ5.
— an Emulator, e.g. the Wireless Toolkit6, the Micro
  Emulator7 or a vendor specific SDK or emulator.

1) www.jcp.org
2) java.sun.com        5) www.jetbrains.com
3) www.eclipse.org     6) java.sun.com/products/sjwtoolkit
4) www.netbeans.org    7) www.microemu.org

                                                              33
— Depending on your setup you may also need an
       obfuscator like ProGuard1. If you build applications
       professionally you will probably also want to use a build
       tool like Maven2 or Ant3.
     — You may want to check out J2ME Polish, the Open
       Source framework, for building your application for
       various devices4.

     A complete installation and setup guide is out of scope of this
     guide, please refer to the respective documentation of these
     tools. Beginners often like NetBeans with an installed mobil-
     ity pack. Also download and read the JavaDocs for the most
     important technologies and APIs. You can download most Java-
     Docs from www.jcp.org but there are a couple of useful vendor
     specific APIs that needed to be tracked down manually from the
     vendor’s pages (Nokia UI-API or Samsung APIs, for example).

     Implement Your App
     The J2ME platform is fairly straight forward, the basis is formed
     by the Connected Limited Device Configuration (CLDC) and
     the Mobile Internet Device Profile (MIDP), which are both
     quite easy to understand. Similar to the good ol’ fashioned
     Applets you extend javax.microediton.midlet.MIDlet in your
     main class and then you are ready to go.

     1) proguard.sf.net
     2) maven.apache.org
     3) ant.apache.org
     4) www.j2mepolish.org 




34
You can create the UI of your app in different ways:
— Highlevel LCDUI components: use the components
    found in the javax.microedition.lcdui package, e.g. Form
    or List.
— Lowlevel LCDUI: use javax.microedition.lcdui.Canvas
    for controlling every pixel of your UI.
— SVG: Scalable vector graphics defined in JSR 287
    jcp.org/en/jsr/detail?id=287.

There are also different products out there to help you with the
UI development:
— J2ME Polish: compatible with the highlevel LCDUI
    framework, separates the design in CSS, you can also
    use HTML for the user interface (www.j2mepolish.org).
— LWUIT: a Swing inspired UI framework
    (lwuit.dev.java.net).
— Mewt: Use XML for defining the UI
    (mewt.sourceforge.net).
— TWUIK: A powerful “Rich Media Engine”
    (www.tricastmedia.com/twuik)

There is a rich open source scene in the J2ME sector. Interesting
projects can be found via blog on opensource.ngphone.com.
You will also find interesting projects on Sun’s page1, for ex-
ample the Bluetooth project Marge2.
1) mobileandembedded.dev.java.net
2) marge.dev.java.net




                                                                35
Testing
 Thanks to the fragmentation, testing your applications is ab-
 solutely vital. Test as early and as often as you can on a mix
 of real devices.
 Some emulators are quite good (personal favorites are Black-
 Berry and Symbian) but there are some things you have to test
 on real devices. Thankfully some vendors provide subsidized or
 even free remote access to selected devices:

 — Nokia: www.forum.nokia.com/rda
 — Sony Ericsson: developer.sonyericsson.com/site/global/
   techsupport/virtuallab/p_virtual_lab.jsp
 — Samsung: innovator.samsungmobile.com/bbs/lab/view.
   do?platformId=2

 Automated Testing
 There are various unit testing frameworks available for J2ME,
 including J2MEUnit1, MoMEUnit2 or CLDC Unit3;

 System and UI testing is more complex given the security mod-
 el of J2ME, however JInjector4 is a flexible byte-code inection
 framework that supports system and UI testing.

 Code coverage can be gathered with Cobertura for J2ME5 or
 JInjector.


 1)   j2meunit.sourceforge.net
 2)   momeunit.sourceforge.net
 3)   snapshot.pyx4me.com/pyx4me-cldcunit
 4)   code.google.com/p/jinjector
 5)   www.cobertura4j2me.org




36
Porting
One of the strengths of the mobile Java environment is that it
is backed by a standard, so it can be implemented by various
vendors that compete with each other. The downside is that a
standard has to be interpreted, and interpretation causes dif-
ferences. Different implementations also suffer from different
bugs, which makes things not really easier. In the next sections
we outline different strategies for porting your J2ME applica-
tions to all J2ME handsets and to different platforms.

Direct Support
The best but hardest solution is to code directly for different
devices and platforms. So you create a J2ME app for MIDP
devices, a native BlackBerry app, a native Windows Mobile
app, a Symbian app, an iPhone app, a Web OS app, and so
on. As you can imagine, this approach has the potential to
bring the very best user experience, since you can really
adapt your application to each platform. At the same time your
development costs will skyrock. We advise to use another strat-
egy first until your idea has been proven to be a success.




                                                               37
Lowest Common Denominator
     You can prevent many porting issues by limiting the functional-
     ities of your application to the lowest common denominator. In
     the J2ME world this means CLDC 1.0 and MIDP 1.0.

     Depending on the target region for the application you might
     also consider to use either the extensions Java Technology for
     the Wireless Industry (JTWI, JSR 185) or the Mobile Service
     Architecture (MSA, JSR 205). Both extensions are supported
     by many modern devices and provide a lot more capabilities;
     though in some regions like Africa, South America or India you
     should be aware that you are limiting the number of your po-
     tential users by taking this step.

     Using the lowest common denominator typically is easier, as
     there are less functionalities to care about. However, the user
     experience may suffer when limiting your application in this
     way, especially if you want to port them to smartphone
     platforms later. This means that the lowest common demonina-
     tor is a good choice for simple applications – for comprehen-
     sive, feature-rich smartphone applications it is not the way to
     go.




38
Porting Frameworks
Porting frameworks automatically adapt your application to
different devices and platforms. Such frameworks typically
feature the following ingredients:

— Client library that simplifies development
— Build tools chain that converts code and resources to
  application bundles
— Device database that provides information about
  devices
— Cross compilers to port your application to different
  platforms

In the J2ME world there are various frameworks to choose from:
Xpress Suite from JavaGround1 provides porting against revenue
sharing. Celsius from Mobile Distillery2 is licensed per month.
Bedrock from Metismo3 provides a suite of cross compilers on a
yearly license fee. J2ME Polish from Enough Software4 is avail-
able under both the GPL Open Source license and commercial
ones. Going the other direction (from C++ to Java ME) is also
possible with the MoSync Open Source solution5. Good porting
frameworks allow you to use platform and device specific code
in your project, so that you can provide the best user experi-
ence. In other words: A good framework does not hide device
fragmentation, but makes the fragmentation manageable.
1) www.javaground.com
2) www.mobile-distillery.com
3) www.metismo.com
4) www.j2mepolish.org
5) www.mosync.com




                                                                  39
Signing
     The mobile Java standard differentiates between signed and
     unsigned applications. Some handset functionalities are only
     available to trusted applications. Which features are affected
     and what happens if the application is not signed but uses one
     of those features largely depends on the implementation. On
     one phone the user might be asked once to allow this function-
     ality, on another he’ll be asked every time the feature is being
     used and on the third one you won’t be able to use the feature
     at all without signing.

     Most implementations also differentiate between the certifica-
     tion authorities who have signed an application:
     Applications signed by the manufacturer of a device enjoy the
     highest security level and can access every handset they desire.
     Applications signed with a carrier certificate are on a similar
     level.
     Applications signed by JavaVerified1, Verisign2 or Thawte3 are
     on the lowest security level. The mad thing is that not ev-
     ery phone carries all necessary root certificates. And some well
     known developers have even stripped away all root certificates
     in the past. The result is quite a mess, so consider signing
     your application only when required, e.g. when deploying to
     an app store or when you absolutely need access to security
     constrained features. You can of course consider working to-
     gether with a testing and certification service provider and let
     they do the job for you. The largest one here would be Intertek
     NSTL4, others are Absolute Quality5 or Mobiquest6.
     1) www.javaverified.com            4) www.nstl.com
     2) www.verisign.com/code-signing   5) www.absolutequality.com
     3) www.thawte.com/code-signing     6) www.mobiquest.net




40
Distribution
Unlike the iPhone, you can install J2ME applications directly
on your phone – either over bluetooth or over the air (OTA)
using a webserver. Thanks to the universal app stores,
nowadays distribution is easier than ever. They manage the
payment, hosting and advertisements and receive a revenue
share for that.

— Ovi1 targets Nokia users worldwide and provides a 70%
  revenue share for the developer (of gross sales, net of
  refunds and returns, less applicable taxes and, where
  applicable, fixed operator billing costs).
— Java Store2 plans to sell Java based content.
— The Samsung App Store3 distributes application for
  Samsung handsets.
— LG also distributes apps on www.lgapplication.com
— Handmark provides a carrier and vendor independent
  mobile store.4
— Carriers also get into the game, e.g. Sprint5 or O26.
  Basically almost everyone has announced an app store.
— GetJar is one of the oldest distributors for free mobile
  applications – not only for Java applications7.

An overview on the existing appstores (not only J2ME) can
be found in the appstore Wiki on www.wipwiki.com/appstores.
Furthermore there are various vendors who provide solutions
for provisioning of Java applications over Blueooth, including
Waymedia8, Futurlink9 and Broadburst10.
1)                                    6) www.o2litmus.com
     publish.ovi.com
2)                                    7) www.getjar.com
     store.java.com
3)                                    8) www.waymedia.it
     applications.samsungmobile.com
4)                                    9) www.futurlink.com
     www.handmark.com
5)                                    10) www.broadburst.com
     softwarestore.sprint.com
                                                               41
Mobile Developer’s Guide
     Programming Qt Apps
     Pronounced cute — not que-tee — Qt is an application frame-
     work that is used to create desktop applications and even a
     whole desktop environment for Linux — the KDE Software
     Compilation. The reason many developers have used Qt on the
     desktop is because it frees them from having to consider the
     underlying platform — a single Qt codeline can be compiled to
     run on Microsoft Windows, Apple Mac, and Linux.
     When Nokia bought Trolltech — the company behind Qt — it
     was with the goal of bringing this same ease of development
     for multiple platforms to Nokia’s mobile devices. Today, Qt can
     be used to create applications for devices based on Symbian,
     Maemo and, in the near future, MeeGo, an open source platform
     initiated by Nokia and Intel.
     The challenge when developing with C and C++ is that these
     languages place all the responsibility on the developer. For
     example, if a developer makes use of memory to store some
     data, the developer has to remove that data and free the
     memory when it is no longer needed. (If this is not done the
     dreaded memory leak occurs.)
     Qt uses standard C++ but makes extensive use of a special
     pre-processor (called the Meta Object Compiler, or moc) to deal
     with many of the challenges faced in standard C++ develop-
     ment. As consequence Qt is able to offer powerful features that
     are not burden by the usual C++ housekeeping. For example,
     instead of callbacks a paradigm of signals and slots is used to
     simplify the communication between objects1, the output from
     one object is a “signal” that has a receiving “slot” function in
     the same or another object.
     1) qt.nokia.com/doc/4.7-snapshot/signalsandslots.html


42
Adding Qt features to an object is simply a case of including
QObject (which is achieved by add the Q_OBJECT macro to
the beginning of your class). This meta-object adds all the Qt
specific features to an object.
Qt then provides a range of objects for creating GUIs (the
QWidget object), complex graphical views (the QGraphicView
object), managing network connections and communications,
using SVG, XML parsing, and using scripts among other.
Many developers who have used Qt report that application can
be written with fewer lines of code and with greater in-built
reliability when compared to coding from scratch in C++. The
result is that less time is needed to create an application and
less time is spent in testing and debugging.
For mobile developers using Qt is free of cost. It benefits also
from being open source, with a large community of developers
contributing to the content and quality of the Qt APIs. Should
you wish to get involved the source code is made available over
Gitorious1.


Prerequisites
Setting up a development environment to create applications
for Nokia’s Symbian devices was time consuming, although
things are improving. The Maemo environment is a little easier,
but if you had ambitions to create a cross platform version
of your application, then you would have required a Microsoft
Windows PC for Symbian and Linux computer for MeeGo.
The Nokia Qt SDK installs everything you need to create, test,
and debug applications for Symbian and Maemo from a single
package.
1) qt.gitorious.org




                                                               43
The Microsoft Windows version offers tools for compiling Sym-
 bian and Maemo app, while the Linux and Apple Mac versions
 only support Maemo. However, an experimental service, Remote
 Compiler, can be used from the Linux and Mac versions to build
 Symbian apps.


 Creating your application
 The Qt SDK is built around the Qt Creator development tool.
 Using Qt Creator you define most of your application visually
 and then add the specific program logic through a code editor
 that offers full code completion support and integrated help.
 One of the neat features of Qt is QML, a language for declarative
 UI definition. While QML generally simplifies UI development,
 its biggest advantage is that the tools within Qt Creator enable
 the UI to be defined by graphic designers who do not have to
 be aware of the technical programming aspects.
 In the past, one of the challenges with cross platform applica-
 tions for mobile has been accessing platform features: Anytime
 you want to find the device’s location or read a contact record
 it’s been necessary to revert back to the platform’s native APIs.
 This is where the Qt APIs for Mobility come in. These APIs
 provide a common interface to device data such as contacts,
 location, messages, and several others. This means that if you,
 for example, need the device’s location the same API will ob-
 tain the location information on both a Symbian and Maemo
 device. (The Nokia Qt SDK also enables you to integrate the
 full platform SDKs so you can use native APIs if you want to.)
 As with Qt in general, working with the mobility APIs is quite
 straightforward. The following code, for example, shows that
 only a few lines are needed to access a device’s current location:




44
void positionUpdated
(constQGeoPositionInfo&gpsPos) {
   latitude = gpsPos.coordinate().latitude();
   longitude = gpsPos.coordinate().longitude();

     }

Learning Qt
If you are already familiar with C++ development on the
desktop, creating Qt applications for Symbian or Maemo will
be straightforward. Once you have mastered the Qt APIs you
should find you can code much faster and with fewer of the
usual C++ frustrations. Qt has many interesting features, such
as WebKit support enabling you to integrate web content into
your app and scripting that can be used to add functionality
quickly during development or change runtime functionality.
It is also worth pointing out that, because Qt applications are
compiled to the platform they will run on, they also deliver very
good performance and usability. For most application the levels
of performance will be comparable to that previously achieved
by hardcore native applications only.


Testing
The Nokia Qt SDK includes a lightweight simulator that enables
application to be tested and debugged on the develop-
ment PC. The simulator includes tools that enable device
data, such as location or contacts records to be defined so
that the application’s functionality can be fully tested.
The simulator does not, however, eliminate the need for device
testing.




                                                                45
In addition, the Nokia Qt SDK includes the tools required to
     perform on-device debugging on Symbian and Maemo devices.
     This feature can be handy to track down bugs that come to light
     only when the application is running on a device. Such bugs are
     rare and tend to surface in areas such as comms, where the Qt
     simulator uses the desktop computer’s hardware, hardware that
     differs from the equivalent technology on a mobile device.

     QTestLib provides both Unit testing and extensions for testing
     GUIs. It replaced QtTestLib, however you may find useful tips
     by searching for this term. A useful overview is available at:
     qtway.blogspot.com/2009/10/interesting-testing.html


     Packaging
     For a Qt application to run on a mobile device the Qt API frame-
     work has to be present. The Nokia N900 has the Qt APIs built
     in. In addition, Maemo and MeeGo devices provide an updated
     mechanism that will install the necessary framework compo-
     nents should there be newer versions needed by the app.
     For Symbian devices the situation is a little different. Sym-
     bian^3 devices will have the APIs built in. However, Symbian
     does not include a built in mechanism to add the APIs to ear-
     lier devices. One solution is to include the Qt packages in the
     application’s distribution, but this makes the file quite large.
     The better approach is to package your application with Smart
     Installer.
     Now, when the app is installed, Smart Installer checks for the
     presence of the necessary Qt packages and, if they are not there,
     downloads and installs them. Using this mechanism, Qt apps
     can be easily targeted at S60 devices.




46
Signing
As Qt applications install as native applications on Symbian
and Maemo devices they need to comply with each platform’s
signing requirements. In the case of Maemo this means that
signing is not required. For application to be installed on Sym-
bian devices, signing is necessary. If you choose to use Ovi
Store to distribute your app, Nokia will organise for your app
to be Symbian Signed, at no cost. More information on signing
applications for Symbian is given in the Application Signing
section of the chapter Programming Symbian Apps.


Distribution
Ovi Store is Nokia’s answer to the iPhone App Store and An-
droid Marketplace. Importantly, once an application has met
Ovi Store quality requirements — beyond removing indecent or
illegal applications — there is no restriction on the application
that can be hosted. So you will find many applications in Ovi
Store that compete directly against offerings from Nokia, such
as alternative browsers, music players, and email applications.
To use Ovi Store you need to register and pay a one-time
€50 fee. When your application starts selling you get 70% of
revenue after any applicable taxes and the operator’s fees
(where applications are purchased through operator billing
rather than a credit card). Many developers view the operator’s
fee negatively, as it can account for up to 40% of the sale price.
However, the extra sales generated when this billing method is
available generally means that you will receive more revenue
than from credit card sales.




                                                                 47
Mobile Developer’s Guide
     Programming Mobile
     Widgets
     We have mentioned that some approaches to mobile de-
     velopment require you to learn multiple languages and the
     unique features of individual platforms. One of the latest
     approaches to solving this problem, and offering one de-
     velopment technology for many devices, is web widgets.
     Web widgets are based on the scripting and mark-up languages
     used for websites (HTML, CSS and JavaScript).
     To run a web widget a device needs to provide browser runtime
     environment. Most devices have a browser that supports web
     languages, so it is a small step in the technology to make al-
     most any device capable of running widgets.
     The biggest advantage of widgets is that they offer probably
     the easiest route into mobile development. Web developers
     are able to create widgets using their existing web design
     skills and code in the languages they already know. Equally,
     for anyone taking their first steps into mobile development or
     first steps into programming, HTML, CSS, and the JavaScript
     language are a lot easier to learn than the relatively complex
     native languages.




48
Widget characteristics
In general, a widget can be characterised as a small website
installed on a device. But if that’s the case, why not simply
use a website? Well, there are several advantages of a widget
compared with a web page:

— Widgets can be more responsive than websites: In a
  widget you work with raw data not HTML pages, the
  reduction in data overhead means widgets make better
  use of mobile network bandwidth.

— Widgets are already first class apps on some phones:
  Although widget environments vary, a user can open a
  widget in just a few clicks, there is no URL to type or
  bookmark to find. For example, Symbian devices from
  Nokia place a widget’s icon in the device’s menu
  making it as easy to find and open as a native
  application.

— Widgets can look like native applications: Some widget
  environments include features that replicate the
  device’s native menus and UI. Widgets that behave like
  native applications are much easier to use than
  websites.

— Widgets can run on a device’s home screen: Some
  widget environments, such as Nokia’s Web Runtime
  (WRT), are able to provide summary views users can
  add to their device’s homepage.

— Widgets can use device data: The ability to use device
  data, such as location or contact records, enables
  widgets to offer information that has context, such as
                                                            49
identifying social network contacts based on the
     entries in the device’s address book.

      — Widgets can generate revenue: They can be
     packaged and distributed via application stores so you
     can sell them just like native applications.




50
If there is a challenge in creating widgets, it is the the lack
of universal support for a common standard. W3C (together
with many major players from the mobile ecosystem) is
pushing forward with the definition of standards. This
standardisation is still underway and information on its
progress can be found in the W3C Wiki1. Because the stan-
dards are not complete, it’s important to be aware that each
widget technology has slightly different ways of imple-
menting the draft specifications and not all environments
implement all of the draft standards. In general, a widget that
follows the specifications given by the W3C will enable you to
target these widget environments:

— Nokia WRT (Selected S60 3rd Edition, Feature Pack 2
  and all S60 5th Edition devices): bit.ly/nokia-wrt
— Blackberry (min. v5.0): bit.ly/blackberry-widgets
— Windows Mobile (min. v6.5): bit.ly/winmo-widgets
— Vodafone360: bit.ly/vf-widgets
— J2ME, Blackberry, Android, etc.: bit.ly/es_skylight

To port your widget over to for example iPhone and Android, you
can use tools like PhoneGap2, Titanium from Appcelerator3,
and Rhomobile4 among others. Of these options, PhoneGap
offers a solution that is closest to the W3C approach.
1) www.w3.org/2008/webapps/wiki/WidgetSpecs
2) www.phonegap.com
3) www.appcelerator.com
4) www.rhomobile.com




                                                              51
Prerequisites
 Widgets, just like websites, are created entirely in plain text.
 These text files are then packaged as a zip archive. This makes
 it possible to create widgets using a text editor, zip applica-
 tion, and a graphics application (to create an icon and graph-
 ics for the widget). If you have a tool for web development it
 can be used for widget development. The primary advantage
 of using a web editor is the support these tools provide for
 composing HTML, CSS, or JavaScript. There are also a number
 of tools specifically designed for developing widgets. These may
 be delivered as plug-ins to web authoring tools, such as the
 Nokia WRT plug-ins for Aptana Studio; Dreamweaver; and Visual
 Studio, or as standalone tools.. These tools provide template
 projects, preview environment, validation, packaging, and de-
 ployment features.


 Writing your code
 In general, there are no special requirements for writing code
 for a widget. The principal area where a widget differs from a
 website is the variety of relatively small screen sizes it has to
 work on. Devices running widgets may offer WVGA, nHD, QVGA,
 or other resolution screens. CSS provides an elegant solution to
 reformatting information to accommodate these varying screen
 sizes. By the way: Try to use CSS3 whenever possible and re-
 move any old compatibility code or you may run into issues.




52
You can start by simply:

    1. Creating index.html and config.xml files.

    2. Zipping them at the command line using zip
	   myWidget.wgt	index.html	config.xml.

    3. Opening the myWidget.wgt file in Opera.

Of course, your widget can also use AJAX and one of the vari-
ous JavaScript libraries, such as jQuery, MooTools, YUI, Dojo, or
Guarana. Depending on the widget platform you are targeting
you may be able to use more advanced technologies such as
Canvas, SVG, Flash Lite, or even HTML5 features such as the
<audio> and <video> tags.

In addition, each environment’s APIs for retrieving device
information, accessing user data, storing data, or other
environment specific tasks will need to be mastered. In most
cases these APIs follow JavaScript conventions and are
easy to learn. For example, the following code uses Nokia
Platform Services 2.0 APIs to asynchronously determine
a device’s location:

serviceObj = nokia.device.load(“geolocation”);

serviceObj.getCurrentPosition(success_callback,
error_callback,positionOpts);
…
function success_callback(result){
    Lat = result.coords.latitude;
    Long = result.coords.longitude;
}




                                                                53
While standards are still to be finalised, overall the APIs are
 moving in very similar directions. The W3C Geolocation API
 Specification proposes an almost identical API for the same
 task:

 navigator.geolocation.getCurrentPosition
     (successCallback,errorCallback,
     positionOptions);

 All the widget runtimes are advancing quickly, with new
 features being added regularly. While keeping up with these
 developments may be a challenge it is certainly worth while
 if you want to create leading edge widgets.


 Testing
 It is always good to be able to test on a PC and you can do
 this for your W3C compliant widgets in Opera 9 or later. How-
 ever, if your widget includes device integration or platform
 specific features you will need to look to other tools
 and fortunately most widget development tools provide
 a computer based preview environment as well. These
 preview tools enable you to display widgets in various
 screen resolutions and orientations, issue device triggers
 (such as removal of a memory card) to the widget, and testing
 against simulated device data (such as contacts and lo-
 cation data). Of course, once you finish desktop testing,
 final testing on your own phone will be essential. The way a
 widget looks and behaves can only be fully assessed on a real
 screen, under realistic lighting conditions, and in a real net-
 work.




54
Signing
Currently most widget environments don’t require widgets to be
signed. This situation may change as the APIs to access device
features become more advanced. It is worth noting that the
W3C standards include a proposal for widget signing.


Distribution
While the W3C is working on standards that will enable widgets
to be discovered from websites, in very much the same way RSS
feeds are today, there is no universal mechanism for widget
discovery, yet.
However, some widget environments enable you to add a link
to a widget on a website so that the widget installs directly
into the environments or device when downloaded. For
example, by identifying a Nokia WRT widget with the MIME type
AddType x-nokiawidget .wgz downloading the widget will auto-
matically initiate the installation process.

Distribution via a website is not the only option. Many
application stores welcome widgets. As we went to press, the
only store that supports W3C widgets is the Vodafone Wid-
get store1, but by packaging your widgets appropriately you
can upload them into Nokia Ovi store2, the Windows Market-
place7 or RIM Blackberry AppWorld4. You can use tools, such
as PhoneGap, to port your widget to a native application envi-
ronment, thus gaining the option to use other stores, such as
Apple AppStore and Android Market among others.
1) widget.vodafone.com
2) store.ovi.com
3) www.windowsmarketplace.com
4) appworld.blackberry.com/webstore


                                                             55
Mobile Developer’s Guide
     Programming Flash
     Applications
     Developing Flash applications (and Flash animations within
     applications) for mobile devices is the same methodology as
     developing browser-based Flash applications for the desktop,
     but you must be knowledgeable of the requirements of the
     target device. There are two components to consider when de-
     veloping Flash applications and animations: The Flash anima-
     tion itself, that theoretically can be run on any device, and
     the Flash engine or player installed in a device that has varied
     operating functionality.
     Adobe open sourced the Flash specification, permitting inde-
     pendent developers and companies to develop Flash-compatible
     engines and players. Authoring can be done using the Adobe
     Flash Professional or Adobe Creative Suite (any edition with
     Flash) software. There are also open source versions includ-
     ing Gnash1 and GameSWF2 which are designed for the desktop
     systems. Other commercial alternative Flash platforms exist
     that provide good integration with the host devices. Many
     of these Alternative Flash platforms run outside the browser
     environment working directly with a device’s native APIs.
     Pay special attention to how you design your Flash application.
     Adobe Creative Suite provides you the option of developing to
     run inside a web browser or as a standalone Adobe AIR appli-
     cation. Alternative Flash-compatible SDKs go further and can
     integrate Flash content into existing 2D and 3D software ap-
     plications.
     1) www.gnashdev.org
     2) tulrich.com/geekstuff/gameswf.html



56
The Adobe Flash players installed in mobile devices are not
upgradable in the field. This means that you must author the
Flash application to match the Flash player version in the de-
vice. Flash-compatible engines and players from alternative
Flash-compatible SDK and tool vendors vary in the functionality
provided, typically based on a vendor’s vertical market focus.
Flash support on mobile devices varies widely from full support
to no support. We anticipate that Flash support will become
standardized on most mobile devices as the hardware platforms
include faster CPUs and as they add-in GPUs with OpenGL ES
graphics acceleration.


Prerequisites
If you are authoring or modifying Flash animations you
require:

— An authoring tool such as Adobe Creative Suite with
  Flash;
— A Macintosh or Windows computer system that runs
  the authoring tool;
— Animators, graphics artists and/or ActionScript
  developers who understand how to develop for mobile
  phones.

A Flash application (or Flash movie) may consist of two dis-
tinct pieces of software. The first is the animation engine
that renders deterministic graphics to a display; the second
is the ActionScript engine that uses input events (time,
keyboard, mouse, XML) to make runtime decisions to play
internal portions of a Flash animation or to load and play an ex-
ternal animation or video. ActionScript is a scripting language
based on ECMA-Script available in three versions.


                                                                    57
Then you must decide exactly how the application is going
  to operate and select the SDK that best supports your target
  device(s).

  It has been reported that Abobe Creative Suite 5 will support
  ActionScript 3.0 and Flash 10.1 with the full 3D and 2D feature
  set, and smartphones. If you want utilize the maximum features
  like 3D and ActionScript 3.0 compatibility, this is the way to
  go. As stated earlier in this guide, one drawback is poor perfor-
  mance: Large binary files may run too slowly on less powerful
  devices.

  Abobe Creative Suite 3, 4 or 5 can be used to author Flash
  content that runs on Alternative Flash-compatible SDKs, en-
  gines and players. These Alternative Flash-compatible SDKs
  generally support ActionScript 2.0, and Flash 8 or Flash Lite 3.1
  with a full 2D feature set. Note that video and audio playback
  support was a feature introduced in Flash 6.1, so all players
  have the ability to support video playback.

  Flash is supported or installed on these devices:

  — Feature phones
  Many feature phones from Nokia, Samsung, Sony and a host
  of others have included support for Flash Lite. The Flash Lite
  player is compatible with Flash 3, 6 or 8 depending when the
  device was manufactured. These are perfect for simple Flash
  games (e.g., puzzle and card games).

  — Smartphones
  Some smartphones have a Flash engine or player pre-installed.
  This is a critical factor in developing Flash applications for
  these devices, and all applications must comply with the device
  manufacturer’s license terms and API specifications.

58
Full Flash support has been announced for Android-based
devices, and RIM’s Blackberry. Developers should clearly un-
derstand the restrictions of each platform and also under-
stand that there are a number of Alternative Flash-compatible
products that can enable Flash to operate on a number of these
devices.

Now that you have selected tools and the target device(s), you
need to license the development kit and follow the manufac-
turer’s process for publishing to that platform. You will also
need to purchase one of the target devices to do testing or you
can use a web-based device testing service.




                                                              59
Developing Flash Applications for
     Smartphones
     The new Adobe Creative Suite 5 has a new, built-in smartphone
     emulator. This enables developers to test their application on
     a supported target device. For devices not supported by Adobe
     Creative Suite 5, a developer may want to seek out alternative
     Flash-compatible SDK and tools vendors for testing.
     An important consideration for developing smartphone applica-
     tions is saving your Flash animation in a format that is compat-
     ible with your target device. A developer needs to be aware of
     the implications of saving their Flash animation in Flash 10.1,
     Flash 10, or Flash 8 (Flash Lite 3) and of using ActionScript
     2.0 or 3.0.

     Tricks and Traps:

     — Avoid Flash animations that have very fancy visual ef-
     fects, simply for the sake of fancy effects. Test on the target
     smartphone to know what works well, and what does not.
     A Flash animation using ActionScript 3.0 will be 3-4 times larger
     in binary size and will likely result in poor performance.
     Decide carefully if you really need to use a feature that
     is only in ActionScript 3.0, as it is a completely different
     scripting language than ActionScript 2.0. ActionScript 3.0 is
     more complicated to learn and to program, and all object ori-
     ented languages require a lot more software developer experi-
     ence to use effectively.

     — Avoid sliding a Flash object across the screen unless you
     know it performs well. Redrawing every pixel multiple times
     a frame without a GPU is a performance killer. Select a SDK
     toolkit that minimizes CPU utilization to preserve battery life.

60
If the Flash animation is not changing, the SDK toolkit should
show 0% CPU utilization.

— If the target smartphone has one display resolution, use
2D bitmaps to replace SVG objects that will never change size.

— Test on your target phones to know how much memory is
being use during the application runtime. The more memory be-
ing used directly results in more CPU power required to execute
the code, which affects the device’s battery life.

— Minimize network connectivity to when it is absolutely re-
quired. The more OS APIs and independent software you use,
the more work is being done, again the faster the battery runs
out of power.

— Design the application to recover gracefully from power
failures. Many of the Alternative Flash-compatible SDKs have
additional APIs to support power failures and include database
tools for the developer to implement in the application. So your
user doesn’t need to re-key data after a power failure (save and
restore settings).




                                                                   61
Testing
 How your Flash application is architected and on what target
 device your application will run has a direct impact on what
 testing is required. If you have developed an Adobe Flash
 browser-based application or Adobe AIR application, then it
 is best to test the application using the Adobe tools. How-
 ever, if you have developed a Flash animation (with or without
 ActionScript) or Flash animations that will be integrated into
 another 2D or 3D application, then you should consider testing
 the application with one of the alternative Flash-compatible
 SDKs or tools.


 Distribution
 Every manufacturer has a different method of publishing your
 application, and distributing it. Since you have selected your
 primary platforms, it should be fairly easy to determine the
 rules and revenue sharing amounts.

 Things to keep in mind:

 — It may take a few weeks from the time you submit
 your application to an app store until you receive a response
 and/or your application becomes available for purchase.
 Use that time to talk to other developers and media and
 get your marketing plans together. Once your application
 is available for purchase from an app store, the hard work
 begins to market it so that your application rises “above the
 noise” and gains attention and you start to build a user base.
 Of course your masterful application submission may also fail.
 Manufacturers’ can reject it for multiple reasons. Know what
 they expect before you spend development time.

62
— During the submission process, you should plan you bug fix
release schedule. The first release must be well tested, and free
from all obvious or easy to find bugs. Your second release cycle
starts the minute you publish the first release.

— Above all, listen to customer feedback, and adjust your
application to fulfill those requirements. Customer loyalty is the
ultimate goal for an application developer.




                                                                 63
Mobile Developer’s Guide
 Windows Phone 7 Series
 Microsoft is making a fresh start with its Windows Phone 7 Se-
 ries. The former Windows Mobile operating system was declin-
 ing in both user acceptance and market share, so the need for
 innovation was clearly felt. The new platform geared towards
 consumers rather than business users, it brings new user expe-
 rience ideas and includes the Metro UI inspired by Microsoft’s
 Zune music player.


 Development
 Develop for Windows Phone with either Silverlight in the
 Visual Studio or with the XNA Game Studio. In both cases you
 will be using C# as the development language. Both runtime
 environments are present within the Windows Phone OS layer
 as shown in the following figure:




64
Windows Phone 7 Series Framework

                              Sensors                         FMRadio


  PhoneApplicationFrame               PhoneApplicationPage              PushNotification


         Camera               Device Integration          Launchers & Choosers


               Bing MapControl                Pause / Resume



        Silverlight Presentation
                and Media                                           XNA Frameworks


  Controls         Drawing     Media                               Input           Media


 Markup           Isolated Storage                              Content      GamerService


       Navigation       Shapes                                   Graphics       Audio




                                        Application Object




                                       Common Class Library


           Threading           Collections        Configuration             Linq


Text         IO        Net         Diagnostics      Security            ComponentModel


       Location         Reflection        Runtime      Resources         Globalization




                                                                                            65
Basically Silverlight is for developing applications and XNA is
 for game development.

     Use Silverlight if…            Use XNA if…
     …you want to use Expression    …you want to develop a 2D
     Blend for designing the        or 3D game.
     (XAML based) UI.
     …you want to use standard      …you want to manage
     Windows Phone controls.        art assets such as models,
                                    meshes, sprites, textures,
                                    effects, terrains or anima-
                                    tions in the XNA Content
                                    Pipeline.
     …you want to use an HTML       …you want to develop for
     web browser.                   Xbox or Windows 7 at the
                                    same while re-using lots of
                                    code.




66
Windows Phone 7 Series
Functions and Services
With Windows Phone 7 the app has access to sensors, media
playback, location and you can use services such as push notifi-
cations for updating application tiles (small widgets that reside
on the desktop of the phone).
The initial version of Windows Phone 7 Series will not support
multitasking (however applications are “tombstoned” and can
be resumed later) nor copy & paste. In contrast to Windows
Mobile developers cannot access the Windows APIs directly
anymore. While this provides an additional security layer it
restrains the extensibility of the platform and may have a
negative impact on the performance of applications.

In its current incarnation Silverlight on Windows Phone lacks
some of the base UI controls like the pivot/panorama elements.
At phone.codeplex.com you can download an intermediate so-
lution if you want to use such controls.


Distribution
Microsoft uses its Marketplace service for distributing applica-
tions. Application content is similarly restricted as Apple App-
Store, Microsoft provides a fairly comprehensive overview about
the submission process and and required application character-
istics on developer.windowsphone.com.




                                                                67
Resources
 Visit developer.windowsphone.com for tools and news re-
 garding Windows Phone development. The development team
 blogs on windowsteamblog.com/windows_phone, follow
 them on twitter@wp7dev for realtime news.

 Development forums are to be found under this short and
 sweet URL: social.msdn.microsoft.com/Forums/en-US/window-
 sphone7series. You can find useful open source projects on
 hwww.codeplex.com - search for “Windows Phone“.


 Testing
 You can unit test applications with the Windows Phone Test
 Framework (wptestlib.codeplex.com). There are public articles
 on unit testing Silverlight and Windows Phone applications
 1, 2, 3.


 1) live.visitmix.com/MIX10/Sessions/CL59
 2) dotnet.dzone.com/news/test-driven-development
 3) www.smartypantscoding.com/a-cheat-sheet-for-unit-testing-silverlight

     -apps-on-windows-phone-7




68
Mobile Developer’s Guide
Programming Bada
Applications
Prerequisites
Bada is a new mobile platform from Samsung, introduced in
November 2009. Bada can run either on a Linux kernel, for
high-end devices; or real-time OS kernels, for low-end devices.
Samsung wants Bada to be the “Smartphone for everybody”,
and they aim to replace featurephones with Bada smartphones.
Currently there are 3 devices available with Bada. Wave is a top
level device, the other two focus on the mid level market. The
Wave supports UMTS. The Bada UI is based on TouchWiz, as
its already known from Samsung’s Android Handhelds. Samsung
plans to sell about 20 Million Badaphones a year.

In order to start developing for Bada you need to register at
http://developer.bada.com and download the Bada SDK. The
IDE and SDK are currently only available for Windows. The SDK
includes the Bada IDE, which is based on eclipse CDT and the
only IDE for Bada. The IDE includes a simulator. Also the IDE
offers a GUI Tool, for designing the UI of your App. There is also
a Bada Widget SDK, which supports BONDI JavaScript libraries.




                                                                 69
Implementation
     Native Bada apps are developed in C++. Samsung has put some
     restrictions on the use of C++ in Bada, for example, the API
     does not use exceptions. Instead Bada uses return values and
     a combination of macros for error handling. Also RTTI is turned
     off, so for example dynamic_cast does not work on Bada. New-
     comers to Bada and C++ need to understand Memory manage-
     ment, as the API often leaves this to the developer. The API
     does not use STL, but Samsung claims that you could use STL in
     your own code. Note that the STL version shipping with Bada is
     missing some parts, so you might need to use STLPort for full
     STL support. Porting other modern C++ Libraries like boost to
     work on Bada is possible, but the lack of RTTI and exceptions
     might make it hard.

     The Bada API is wrapped in a number of namespaces. The API
     offers UI Control and Container classes, but there are no UI
     Layout classes, so all your UI must be positioned by hand or
     within the code. You need to provide a UI layout for the land-
     scape and the portrait perspective. The API also provides most
     standard classes for XML, SQL or Network and resembles a pretty
     complete Framework.

     If you want to write Games for Bada, the SDK supports OpenGL
     ES 2.0. Also the SDK wraps parts of OpenGL for use in its own
     classes, you can also easily port existing OpenGL code to Bada.




70
If you come from other programming languages such as Java
or Python, make sure you first introduce yourself to C++. The
Bada API has some easy patterns, like that you have to delete
any pointer returned by a method ending in ‘N’. Also do take
care about your own variables, every new shall have always its
delete:

MyType* var = new MyType();    // call delete
MyType* array = new MyType[10];//call delete[]

MyType type, stackarray[];
// ^ variables on the stack will be destroyed by
scope, no delete

Inside the IDE you will find a lots of Bada examples, which you
can copy with one click in your own workspace. These examples
provide a really good start, before you create your own “Hello
World” Application. Also make use of the callbacks for impor-
tant phone events in your application class, like low battery
level or incoming call.

The central resource for Bada developers is developer.bada.com,
where Samsung provides a lot of information about Bada, and
also maintains a forum for developers. The biggest indepen-
dent Bada website and forum is currently BadaDev.com, they
offer great tutorials about writing code for Bada. There is an
IRC channel #bada at irc.freenode.net, and there are groups for
Bada on most social networks.


Testing
Due to the specialties of Bada C++, there is currently no known
Test Library for Bada native Apps. Also the SDK does not provide
a Test API. Potentially some of the known C++ Test libraries

                                                                   71
like CppUnit might work on Bada. The Bada API does offer its
 own logging class and offers an AppLog method, so you should
 make extensive use of logging in debug builds. The AppLog will
 show up in the IDE directly. Also there are other logging classes
 available for Bada.

 With the IDE you can test and debug in the simulator or on a
 device. As performance is crucial for mobile applications, you
 must always test on a real Bada device. Also code that works on
 Simulator will sometimes not on the device.


 Distribution
 Bada is a closed platform, so the only way to distribute your
 apps is the Samsung App Store. The store offers free and paid
 apps, for a paid applications, as a developer, you get 70% of
 the price paid by the user.
 Before your app enters the store, there is a certification and
 validation process1 at Samsung to pass. The process it self can
 take between days and weeks, depending on the complexity of
 your app.
 Samsung has some strict rules for apps in Bada, one major
 rule is that an application is not allowed to link to software
 download sites. This means that currently no apps are accepted
 which use bannerads or 3rd party ads at all. As they could
 potentially provide such content. Samsung will maybe bring up
 its own ad system.
 1) www.slideshare.net/samsungbada/introduction-of-application-certification




72
Mobile Developer’s Guide
Bringing Your Content to
the Mobile Web
“Don‘t make me think!“- this title of one of the most popular
books about usability1 still summarizes very well what usability
is all about. The developer should always keep in mind that it
does not matter how fancy his mobile website might be:
The user should be able to easily and intuitively use it.
These 10 basic hints should help you to adapt your content
properly for the mobile user:

     1. Mobilize, don’t miniaturize: Create a concept that
     utilizes the possibilities of the technology. You won’t
     satisfy many people by simply offering a smaller
     version of your classical website.

     2. Keep all paths open: Leave it up to the user to
     access either the mobile or the desktop version of your
     website.

     3. Keep it simple: Avoid complex navigation structures,
     the user won’t dig that deep anyway while he is on
     the go.

     4. Avoid text input wherever possible: Text input on
     mobiles sucks. If you really need to implement it, make
     sure to use wide input boxes so that the user sees what
     he is typing.

1) Steve Krug: “Don’t make me think - A Common Sense Approach to Web

  Usability”, New Riders, 2nd edition, 2005
                                                                       73
5. Adapt the media: Adapt all pictures, videos etc. to
     be displayed properly on the handset (check the
     corresponding chapter in this guide: “Implementing
     Rich Media“). Avoid formats like .doc or pdf.

     6. The user is a creature of habit; respect that: Adapt
     usage patterns from classic websites like linking logos
     to the starting page or offering corrections of mistyped
     search requests.

     7. Think of stubby fingers: When optimizing your
     content for touchscreen phones don’t use clickable
     areas smaller than 1cm x 1cm.

     8. Use sharp contrasts: fonts and back-
     ground colors which guarantee legibility in any
     surrounding, including bright sunlight.

     9. Reflect continuously: Ask yourself if you would use
     the implemented features yourself. Ask your friends
     and colleagues as well before realizing your ideas.

     10. Again: Don‘t make the user think!: Try to
     implement intuitive navigation, don’t force the user
     to make decisions more often than necessary. He will
     often click the first link in a list anyway.




74
Mobile usage patterns and its
consequences
The usage pattern at a desktop computer is often described as
“Hunt & Gather“. The mobile usage is totally different. When
using internet on the mobile handset, the user is usually on
the move. He wants to know more about his surrounding or
just fill some minutes. Therefore, mobile internet usage is
often described as “Quick Enjoyment“
Applications have to take these differences into account. For
example, a search interface for stationary users has to offer
comprehensive options, on the mobile handset it has to be
more straight-forward, focused on the primary action.
These adjustments cannot be realized by a machine. This
is one reason why it is indispensable to create special
mobile versions of websites.

The mobile user has no mouse, often he has no real keyboard
and the size of the screen is very limited. This means the con-
tent of a mobile website has to be arranged accordingly: Images
should not be too large, all relevant elements should be easily
accessible as the user is not able to move a cursor freely along
the site.
It is best to test the usability of a site under real-life circum-
stances: Take your mobile handset to a busy public place and
try to find all relevant info of your application by just using
one hand. You will see very quickly where your mobile site still
needs to be trimmed.
But apart from things like markup, image formats and naviga-
tion, you should never forget about the most valuable thing
to a mobile user: Battery power. Complex websites with a lot
of JavaScript, CSS and Flash elements need a lot of processing
power which means battery power.

                                                                 75
A History of the Mobile Web
     WAP: The stone age of mobile internet
     In the beginning, everybody in the business expected the
     mobile internet would be a cashcow. The WAP technology made
     it possible to send small texts on monochrome displays and
     black/white images in the WBMP format to the user’s cell-
     phones. The industry charged him for that by inventing compli-
     cated data transfer rates or strange subscription models. Many
     players expected to get rich by selling information which was
     already available for free on the internet.
     The Wireless Markup Language WML which was used by that
     time was another reason why the expected breakthrough did
     not happen as fast as some were thinking: While the different
     internet browsers (Internet Explorer and Netscape) allowed a
     “dirty” html, WML requested a valid XML structure and proper
     UTF-8 encoding. The usage of images was limited to black and
     white pictures which were a lot less sexy than what the users
     knew from their home computers.
     The first attempts to lift the mobile internet to the next level
     were made by NTT DoCoMo by inventing CHTML; and Microsoft’s
     Windows CE which worked best with HTML/3.2. Both of them were
     eventually replaced by XHTML/MP 1.0.

     Current Situation
     Today, 99% of all mobile browsers still support XHTML/MP 1.0,
     for many low-end devices this language still delivers the best
     results. On the other hand, the so-called Full Web Browsers
     have to support HTML/4.0, but they still have their differences
     when it comes to content-type or doctype and choose different
     views for distinguishing between mobile and desktop websites.
     The next big thing definitely is HTML5: Still under development,
     some of the latest browsers already support (parts) of this new
     standard.
76
But HTML5 does not only bring new markup elements like <vid-
eo/> and <audio/>, but also DOM Scripting, GPS access, CSS3
elements, CSS animations and the possibility of offline stor-
age. At the same time, the W3C Device APIs and Policy Working
Group (DAP) creates client-side APIs that will make it possible
to develop web applications and web widgets that interact with
device services such as calendar, contacts, camera, etc.


How to adapt content for the
mobile user
Static Version
Of course you can simply ignore the possibilities of automatic
optimization and leave it up to the user: Create different
versions of your content, let the user start with the most low-
level version and let him decide manually which version he
prefers for his device and usage patterns.
However, since you are dealing with a user who is on the move
and does not want to spend a lot of time discovering which ver-
sion suits them best, this is probably not the best way to go…




                                                              77
Automatic adaption technologies
 To adapt the content to different devices, you basically need
 two components: The first contains logic that detects the de-
 vice, knows about its browser and its characteristics — a device
 database. The second component interpretes these characteris-
 tics and adjusts the content accordingly.

 The most popular Open Source device database is the WURFL
 project1 which offers comprehensive information via XML. A
 lot of tools deliver APIs for detecting the browser, deliver-
 ing its properties and adjusting the content, the markup
 and the images. One example for an Open Source project which
 adjusts content is MyMobileWeb2, financed by public funds and
 Telefonica.

 But of course there are also commercial providers. Again,
 some concentrate on device data and detection; others focus
 on offering software platforms which adjust the content ac-
 cordingly.

 Examples for commercial device data and device detection
 providers:

 — dotMobi3 offers several APIs to access their device
   database DeviceAtlas4 and intelligent detection
 — DetectRight5

 1) wurfl.sf.net
 2) mymobileweb.morfeo-project.org
 3) www.mtld.mobi
 4) www.deviceatlas.com
 5) www.detectright.com




78
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6
Mobile Developers Guide To The Galaxy Vol.6

More Related Content

What's hot

Mobile Developer's Guide To The Galaxy 11th edition
Mobile Developer's Guide To The Galaxy 11th editionMobile Developer's Guide To The Galaxy 11th edition
Mobile Developer's Guide To The Galaxy 11th editionMarco Tabor
 
LUMIA APP LABS: WINDOWS PHONE 8 FOR NOKIA DEVELOPERS
LUMIA APP LABS: WINDOWS PHONE 8 FOR NOKIA DEVELOPERSLUMIA APP LABS: WINDOWS PHONE 8 FOR NOKIA DEVELOPERS
LUMIA APP LABS: WINDOWS PHONE 8 FOR NOKIA DEVELOPERSMicrosoft Mobile Developer
 
Forrester reviews the KonyOne platform
Forrester reviews the KonyOne platformForrester reviews the KonyOne platform
Forrester reviews the KonyOne platformKony, Inc.
 
Voice gate mobile group presentation v1.1
Voice gate mobile group presentation  v1.1Voice gate mobile group presentation  v1.1
Voice gate mobile group presentation v1.1voicegateindia
 
Enough_Software_Guide_16thEdition_Web
Enough_Software_Guide_16thEdition_WebEnough_Software_Guide_16thEdition_Web
Enough_Software_Guide_16thEdition_WebMarco Tabor
 
Mobile Developer's Guide To The Galaxy, 15th edition
Mobile Developer's Guide To The Galaxy, 15th editionMobile Developer's Guide To The Galaxy, 15th edition
Mobile Developer's Guide To The Galaxy, 15th editionMarco Tabor
 
B feigin mobileapplicationdevelopment
B feigin mobileapplicationdevelopmentB feigin mobileapplicationdevelopment
B feigin mobileapplicationdevelopmentsathesh leo
 
Cross-platform App Development Company
Cross-platform App Development CompanyCross-platform App Development Company
Cross-platform App Development CompanyThe NineHertz
 
Mobile Developer's Guide To The Galaxy 12th Edition
Mobile Developer's Guide To The Galaxy 12th EditionMobile Developer's Guide To The Galaxy 12th Edition
Mobile Developer's Guide To The Galaxy 12th EditionMarco Tabor
 
webinos and Open Ecosystems Open Governance
webinos and Open Ecosystems Open Governancewebinos and Open Ecosystems Open Governance
webinos and Open Ecosystems Open Governancewebinos project
 
Windows Phone Code Camp Montreal - The Windows Phone 7.5 opportunity
Windows Phone Code Camp Montreal - The Windows Phone 7.5 opportunityWindows Phone Code Camp Montreal - The Windows Phone 7.5 opportunity
Windows Phone Code Camp Montreal - The Windows Phone 7.5 opportunityFrédéric Harper
 
Mobile development-e mag-version3
Mobile development-e mag-version3Mobile development-e mag-version3
Mobile development-e mag-version3nesrine attia
 
Whitepaper: Dealing with the Dilemma: Mobile App Development Approach & Decis...
Whitepaper: Dealing with the Dilemma: Mobile App Development Approach & Decis...Whitepaper: Dealing with the Dilemma: Mobile App Development Approach & Decis...
Whitepaper: Dealing with the Dilemma: Mobile App Development Approach & Decis...Happiest Minds Technologies
 

What's hot (19)

Mobile Developer's Guide To The Galaxy 11th edition
Mobile Developer's Guide To The Galaxy 11th editionMobile Developer's Guide To The Galaxy 11th edition
Mobile Developer's Guide To The Galaxy 11th edition
 
[IJCT-V3I2P36] Authors: Amarbir Singh
[IJCT-V3I2P36] Authors: Amarbir Singh[IJCT-V3I2P36] Authors: Amarbir Singh
[IJCT-V3I2P36] Authors: Amarbir Singh
 
LUMIA APP LABS: WINDOWS PHONE 8 FOR NOKIA DEVELOPERS
LUMIA APP LABS: WINDOWS PHONE 8 FOR NOKIA DEVELOPERSLUMIA APP LABS: WINDOWS PHONE 8 FOR NOKIA DEVELOPERS
LUMIA APP LABS: WINDOWS PHONE 8 FOR NOKIA DEVELOPERS
 
Mobile software development_and_mobile_porting
Mobile software development_and_mobile_portingMobile software development_and_mobile_porting
Mobile software development_and_mobile_porting
 
Forrester reviews the KonyOne platform
Forrester reviews the KonyOne platformForrester reviews the KonyOne platform
Forrester reviews the KonyOne platform
 
Mobile development
Mobile development Mobile development
Mobile development
 
Windows Phone 7 Microsoft's Entrant to the Smartphone Wars
Windows Phone 7 Microsoft's Entrant to the Smartphone WarsWindows Phone 7 Microsoft's Entrant to the Smartphone Wars
Windows Phone 7 Microsoft's Entrant to the Smartphone Wars
 
Voice gate mobile group presentation v1.1
Voice gate mobile group presentation  v1.1Voice gate mobile group presentation  v1.1
Voice gate mobile group presentation v1.1
 
Enough_Software_Guide_16thEdition_Web
Enough_Software_Guide_16thEdition_WebEnough_Software_Guide_16thEdition_Web
Enough_Software_Guide_16thEdition_Web
 
Mobile Developer's Guide To The Galaxy, 15th edition
Mobile Developer's Guide To The Galaxy, 15th editionMobile Developer's Guide To The Galaxy, 15th edition
Mobile Developer's Guide To The Galaxy, 15th edition
 
Dealing with-the-dilemma-mob-app-dev-approaches
Dealing with-the-dilemma-mob-app-dev-approachesDealing with-the-dilemma-mob-app-dev-approaches
Dealing with-the-dilemma-mob-app-dev-approaches
 
B feigin mobileapplicationdevelopment
B feigin mobileapplicationdevelopmentB feigin mobileapplicationdevelopment
B feigin mobileapplicationdevelopment
 
Cross-platform App Development Company
Cross-platform App Development CompanyCross-platform App Development Company
Cross-platform App Development Company
 
Mobile Developer's Guide To The Galaxy 12th Edition
Mobile Developer's Guide To The Galaxy 12th EditionMobile Developer's Guide To The Galaxy 12th Edition
Mobile Developer's Guide To The Galaxy 12th Edition
 
webinos and Open Ecosystems Open Governance
webinos and Open Ecosystems Open Governancewebinos and Open Ecosystems Open Governance
webinos and Open Ecosystems Open Governance
 
Windows Phone Code Camp Montreal - The Windows Phone 7.5 opportunity
Windows Phone Code Camp Montreal - The Windows Phone 7.5 opportunityWindows Phone Code Camp Montreal - The Windows Phone 7.5 opportunity
Windows Phone Code Camp Montreal - The Windows Phone 7.5 opportunity
 
Mobile Programming
Mobile Programming Mobile Programming
Mobile Programming
 
Mobile development-e mag-version3
Mobile development-e mag-version3Mobile development-e mag-version3
Mobile development-e mag-version3
 
Whitepaper: Dealing with the Dilemma: Mobile App Development Approach & Decis...
Whitepaper: Dealing with the Dilemma: Mobile App Development Approach & Decis...Whitepaper: Dealing with the Dilemma: Mobile App Development Approach & Decis...
Whitepaper: Dealing with the Dilemma: Mobile App Development Approach & Decis...
 

Similar to Mobile Developers Guide To The Galaxy Vol.6

Modern mobile development overview
Modern mobile development overviewModern mobile development overview
Modern mobile development overviewDima Maleev
 
Android before getting started
Android before getting startedAndroid before getting started
Android before getting startedAhsanul Karim
 
Cross-Platform App Development in C#
Cross-Platform App Development in C#Cross-Platform App Development in C#
Cross-Platform App Development in C#MobilePundits
 
Mobile Developer's Guide To The Galaxy, 14th Edition
Mobile Developer's Guide To The Galaxy, 14th EditionMobile Developer's Guide To The Galaxy, 14th Edition
Mobile Developer's Guide To The Galaxy, 14th EditionMarco Tabor
 
Introduction to Android Development: Before Getting Started
Introduction to Android Development: Before Getting StartedIntroduction to Android Development: Before Getting Started
Introduction to Android Development: Before Getting StartedAhsanul Karim
 
Where Do Cross-Platform App Frameworks Stand in 2020?
Where Do Cross-Platform App Frameworks Stand in 2020?Where Do Cross-Platform App Frameworks Stand in 2020?
Where Do Cross-Platform App Frameworks Stand in 2020?Marianne Harness
 
Rapidvalue whitepaper-howtochoosetherightarchitectureforyourmobileapplication...
Rapidvalue whitepaper-howtochoosetherightarchitectureforyourmobileapplication...Rapidvalue whitepaper-howtochoosetherightarchitectureforyourmobileapplication...
Rapidvalue whitepaper-howtochoosetherightarchitectureforyourmobileapplication...hpcmitresearch
 
How to-choose-the-right-technology-architecture-for-your-mobile-application
How to-choose-the-right-technology-architecture-for-your-mobile-applicationHow to-choose-the-right-technology-architecture-for-your-mobile-application
How to-choose-the-right-technology-architecture-for-your-mobile-applicationlverb
 
Cross platform-mobile-applications
Cross platform-mobile-applicationsCross platform-mobile-applications
Cross platform-mobile-applicationsmailalamin
 
Apps vs. Sites vs. Content - a vendor-agnostic view on building stuff for the...
Apps vs. Sites vs. Content - a vendor-agnostic view on building stuff for the...Apps vs. Sites vs. Content - a vendor-agnostic view on building stuff for the...
Apps vs. Sites vs. Content - a vendor-agnostic view on building stuff for the...Kai Koenig
 
mobile development platforms
mobile development platformsmobile development platforms
mobile development platformsguestfa9375
 
mobile development platforms
mobile development platformsmobile development platforms
mobile development platformssmancke
 
Open Source to the Rescue of Mobile App and Mobile Web Fragmentation
Open Source to the Rescue of Mobile App and Mobile Web FragmentationOpen Source to the Rescue of Mobile App and Mobile Web Fragmentation
Open Source to the Rescue of Mobile App and Mobile Web FragmentationTom Deryckere
 
Overview of Mobile Development Platforms
Overview of Mobile Development PlatformsOverview of Mobile Development Platforms
Overview of Mobile Development PlatformsMike Wolfson
 
Development of Mobile Application -PPT
Development of Mobile Application -PPTDevelopment of Mobile Application -PPT
Development of Mobile Application -PPTDhivya T
 
Ionic vs flutter best platform for hybrid app development
Ionic vs flutter  best platform for hybrid app developmentIonic vs flutter  best platform for hybrid app development
Ionic vs flutter best platform for hybrid app developmentMarkovate
 

Similar to Mobile Developers Guide To The Galaxy Vol.6 (20)

Modern mobile development overview
Modern mobile development overviewModern mobile development overview
Modern mobile development overview
 
Android before getting started
Android before getting startedAndroid before getting started
Android before getting started
 
Cross-Platform App Development in C#
Cross-Platform App Development in C#Cross-Platform App Development in C#
Cross-Platform App Development in C#
 
Mobile Developer's Guide To The Galaxy, 14th Edition
Mobile Developer's Guide To The Galaxy, 14th EditionMobile Developer's Guide To The Galaxy, 14th Edition
Mobile Developer's Guide To The Galaxy, 14th Edition
 
Introduction to Android Development: Before Getting Started
Introduction to Android Development: Before Getting StartedIntroduction to Android Development: Before Getting Started
Introduction to Android Development: Before Getting Started
 
Where Do Cross-Platform App Frameworks Stand in 2020?
Where Do Cross-Platform App Frameworks Stand in 2020?Where Do Cross-Platform App Frameworks Stand in 2020?
Where Do Cross-Platform App Frameworks Stand in 2020?
 
Rapidvalue whitepaper-howtochoosetherightarchitectureforyourmobileapplication...
Rapidvalue whitepaper-howtochoosetherightarchitectureforyourmobileapplication...Rapidvalue whitepaper-howtochoosetherightarchitectureforyourmobileapplication...
Rapidvalue whitepaper-howtochoosetherightarchitectureforyourmobileapplication...
 
How to-choose-the-right-technology-architecture-for-your-mobile-application
How to-choose-the-right-technology-architecture-for-your-mobile-applicationHow to-choose-the-right-technology-architecture-for-your-mobile-application
How to-choose-the-right-technology-architecture-for-your-mobile-application
 
Cross platform-mobile-applications
Cross platform-mobile-applicationsCross platform-mobile-applications
Cross platform-mobile-applications
 
Apps vs. Sites vs. Content - a vendor-agnostic view on building stuff for the...
Apps vs. Sites vs. Content - a vendor-agnostic view on building stuff for the...Apps vs. Sites vs. Content - a vendor-agnostic view on building stuff for the...
Apps vs. Sites vs. Content - a vendor-agnostic view on building stuff for the...
 
mobile development platforms
mobile development platformsmobile development platforms
mobile development platforms
 
mobile development platforms
mobile development platformsmobile development platforms
mobile development platforms
 
AndroidOverview
AndroidOverviewAndroidOverview
AndroidOverview
 
Windows 7 mobile
Windows 7 mobileWindows 7 mobile
Windows 7 mobile
 
Open Source to the Rescue of Mobile App and Mobile Web Fragmentation
Open Source to the Rescue of Mobile App and Mobile Web FragmentationOpen Source to the Rescue of Mobile App and Mobile Web Fragmentation
Open Source to the Rescue of Mobile App and Mobile Web Fragmentation
 
Overview of Mobile Development Platforms
Overview of Mobile Development PlatformsOverview of Mobile Development Platforms
Overview of Mobile Development Platforms
 
Most Popular Cross Platform Mobile Development Tools
Most Popular Cross Platform Mobile Development ToolsMost Popular Cross Platform Mobile Development Tools
Most Popular Cross Platform Mobile Development Tools
 
PhoneGap
PhoneGapPhoneGap
PhoneGap
 
Development of Mobile Application -PPT
Development of Mobile Application -PPTDevelopment of Mobile Application -PPT
Development of Mobile Application -PPT
 
Ionic vs flutter best platform for hybrid app development
Ionic vs flutter  best platform for hybrid app developmentIonic vs flutter  best platform for hybrid app development
Ionic vs flutter best platform for hybrid app development
 

Recently uploaded

WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 

Recently uploaded (20)

WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 

Mobile Developers Guide To The Galaxy Vol.6

  • 2. Mobile Developer’s Guide Table of Contents 6 Introduction 8 An Overview of Application Platforms 8 Native Applications 11 J2ME / Java ME 11 Flash Lite and Alternative Flash-compatible Platforms 12 BREW 12 Widgets 14 Websites 14 SMS Text Messaging 15 Programming Android Apps 15 Prerequisites 16 Implementation 18 Testing 19 Signing 19 Distribution 20 Programming iPhone Apps 21 Prerequisites 21 Implementation 23 Testing 25 Distribution
  • 3. 27 Programming Symbian Apps 28 Prerequisites 30 Porting to Symbian 31 Signing 32 Distribution 33 Programming J2ME / Java ME Apps 33 Prerequisites 34 Implement your App 36 Testing 37 Porting 40 Signing 41 Distribution 42 Programming Qt Apps 43 Prerequisites 44 Creating Your Application 45 Learning Qt 45 Testing 46 Packaging 47 Signing 47 Distribution 48 Programming Mobile Widgets 49 Widget Characteristics 52 Prerequisites 52 Writing Your Code 54 Testing 55 Signing 55 Distribution 56 Programming Flash Applications 57 Prerequisites
  • 4. 60 Developing Flash Applications for Smartphones 62 Testing 62 Distribution 64 Windows Phone 7 Series 64 Development 67 Windows Phone 7 Series Functions and Services 67 Distribution 68 Resources 68 Testing 69 Programming Bada Applications 69 Prerequisites 70 Implementation 71 Testing 72 Distribution 73 Bringing Your Content to the Mobile Web 75 Mobile Usage Patterns and its consequences 76 A History on the Mobile Web 77 How to adapt content for the mobile user 79 Satisfy the Interpreter of Your Content: The Browser 83 Let’s do some pigeonholing: Device categories 87 Use GPS in the Browser 87 Testing your Mobile Website 89 Learn More – On the Web 90 Implementing Rich Media 91 Streaming 91 Mobile Video 92 Ringtones 92 Media Converters
  • 5. 94 Progressive Download 94 Flash (Lite) 96 Implementing Location-Based Services 96 How to obtain Location Data 98 How to obtain Mapping Material 98 Implementing Location Support on Different Platforms 99 Tools for making Map Apps 100 Testing Your Application 100 Testability: the Biggest Single Win 101 Headless Client 101 Separate the generic from specific 102 Test-Driven Development 102 Physical Devices 103 Remote Control 104 GUI Test Automation 104 Beware of Specifics 104 Crowd Sourcing 105 Web-Based Content and Applications 105 Next Steps 106 Now what — Which Environment Should I Use? 109 Epilogue 110 About the Authors 115 Imprint/Contact This Developer Guide is licensed under the Creative Commons Some Rights Reserved License. 5
  • 6. Mobile Developer’s Guide Introduction Welcome to the 6th edition of our Mobile Developer’s Guide To The Galaxy! When we started this project in 2009, a lot of people thought the mobile ecosystem’s fragmentation was only a temporary phenomenon and that by 2011 nobody will need a guide like this anymore. They thought that one, maybe two, platforms would dominate the market. The opposite happened: New platforms are introduced continuously, the lat- est being Windows Phone 7 and Bada; so we’ve included chap- ters on both of them here. And one of the new platforms is beginning to face fragmentation itself: Android. We think that the need for a guide like this is probably big- ger than ever and we hope that it will help you take the right decision when entering the mobile market and that it helps you taking the first steps on the platform of your choice. Another prediction, in 2010, was that we won’t talk about applications in the near future, because mobile web will be the new standard and nobody will need native applications any- more. This has not happened yet and we do not believe it will happen that soon. Nevertheless you will of course also find information about how to design mobile websites and web- based apps in this guide. We would like to thank all contributors, especially Julian Harty. Please tell us whatever you think is missing or needs to be changed in this guide and we will take it into account for the 7th edition! Write to developers@enough.de Development is a passion – have fun in the mobile world! 6
  • 7. 7
  • 8. Mobile Developer’s Guide An Overview of Application Platforms You can choose between different platforms to realize your mobile vision. This section describes the most common environ- ments and outlines differences between them. A more detailed description follows in the platform-specific chapters. Native Applications There are a lot of mobile platforms used in the market today – some are Open Source, some are not. The most important native platforms are (alphabetically) Android, Bada, BlackBerry, MeeGo, iOS, Symbian, webOS and Windows Mobile/Windows Phone. All these platforms allow you to create native app- lications for them without establishing a business relationship with the respective vendor. The main benefits for programming native applications include bester integration of your applica- tion with the platform’s features and often better performance. Typical drawbacks are the effort required and the complexity of supporting several native platforms (or limiting your app to only one platform). Most mass market phones are, however, equipped with embed- ded operating systems that do not offer you the opportunity to create native applications. Examples include but are not limited to Nokia Series 40, Samsung SGH and Sony Ericsson Java Plat- form phones.  8
  • 9. The following table provides an overview of the main mobile platforms: OS Language(s) Remarks Android Java, C Open Source OS (based on Linux) developer.android.com Bada C, C++ Mobile platform from Samsung running on Linux or RealTime OS developer.bada.com BlackBerry Java J2ME compatible but extensions allow a tighter integration na.blackberry.com/eng/developers C, C++ MeeGo Qt, Web Apps, Intel and Nokia powered Open C++, others Source OS (based on Linux) meego.com/developers OS X / Objective-C, Requires Apple Developer iPhone C Account developer.apple.com/iphone Symbian C, C++, Qt, Open Source OS WebApps, others www.symbian.org webOS HTML, CSS, Widget style programming, OS JavaScript, C (based on Linux) developer.palm.com Windows C#, C .NET CF or Windows Mobile Mobile API, most devices ship with J2ME compatible JVM developer.windowsmobile.com Windows Silverlight, New Windows based OS Phone XNA targeted at consumers developer.windowsphone.com 9
  • 10. 10
  • 11. J2ME / Java ME Around 80% of all mobile handsets shipped in 2009 support the mobile Java standard (J2ME/Java ME), so Java is by far the most widely distributed application environment. In contrast to many other environments, J2ME is a standard rather than a product, which can be implemented by anyone (who pays Oracle the corresponding license fees that is). Standardization is the strength of J2ME but at the same time it is the source of many fragmentation problems. On many so called feature phones, J2ME is the only way to real- ize client side applications. With the boom of so-called smart- phones, J2ME lost impact, at least in the US and Europe. For many emerging markets it remains the only possibility to target the mass market. Flash Lite and Alternative Flash- compatible Platforms Flash Lite is the mobile edition of Flash, which is similar to an older version of Adobe’s web Flash product and only supports ActionScript 2.0. Flash Lite is favored by many designers, since they know the tools already. Flash Lite features a powerful UI but lacked good integration into the host device, although this is improving. Programming Flash Lite is relatively easy thanks to the ActionScript language that is very similar to Java Script. The drawbacks include poor performance and small market share in comparison to J2ME. However, there are millions of feature phones supporting Flash Lite today and some smartphones sup- port Flash Lite including Symbian and Android-based devices. Full Flash support has been announced for MeeGo, Symbian, Android and Blackberry devices. 11
  • 12. BREW The Binary Runtime Environment for Wireless (BREW) is a programming environment promoted by Qualcomm1. BREW services are offered by more than 60 operators in 28 coun- tries, but it’s most popular within the US with CDMA devices launched by Verizon, US Cellular, Metro PCS among others. While previous versions only supported C development, the Brew Mobile Platform (Brew MP), supports applications written in Java, Flash, TrigML or native C code2. Widgets The main advantage of widget environments is they offer sim- ple, straightforward programming. There are, however, several widget environments and some require a player to be installed before widgets can be run. This situation is changing, with a trend towards more standardization, based on W3C standards. As a result, standards-based environments are being integrated into platforms, as is happening with MeeGo and Symbian. The move to standard web technology based widgets is allevi- ating the main drawback of widgets: lack of integration with the underlying platform. The standards-based environments are increasingly offering APIs that enable widgets to access devices data, such as location data or contact details, among others. All these environments use XML, a script language (e.g. JavaScript) and a page description language (like HTML) for realizing a widget. 1) brew.qualcomm.com 2) brew.qualcomm.com/brew/en/developer/overview.html 12
  • 13. The following table provides an overview of popular widget frameworks: Environment Language(s) Remarks Web Runtime XML, Standard web technology based Widgets on HTML, CSS, widgets, with a proprietary pack- Symbian JavaScript aging standard. JavaScript APIs offer high degree of access to platform features. tiny.symbian.org/runtimespace Skylight HTML, CSS, Open Source widget platform for JavaScript featurephones and smartphones, still under development. www.skylightmobile.org W3C / XML, HTML, Vodafone, China Mobile and Vodafone JavaScript, other companies try to push the Widgets CSS, W3C widget standard for mobile adoption. widget.vodafone.com/dev Samsung XML, HTML, innovator.samsungmobile.com CSS, JavaScript PhoneGap HTML, CSS, Cross platform widget platform JavaScript www.phonegap.com Sony Ericsson HTML, CSS, Based on PhoneGap WebSDK JavaScript developer.sonyericsson.com BlackBerry HTML, CSS, na.blackberry.com/eng/developers JavaScript 13
  • 14. Websites Webpages are supported by most phones, so in principle this should be the environment of choice to get the widest pos- sible reach (after SMS texting). The main problem is the sheer number of browsers and their varying feature sets. Some browsers are very powerful and support CSS as well as Java- Script, others are less sophisticated and only support XHTML. Thankfully the old WAP standard with its WML pages does not play any significant role nowadays. Main problems for web pages are that they are only available online and that their access to device features is extremely limited. With the introduction of HTML5, this situation is im- proving: Offline browsing and new device APIs are now also available for mobile websites. The main benefits of the mobile web as a platform are the easy development and that, generally, you control the deployment. SMS Text Messaging Almost everybody who has a mobile phone is also texting. Texting limits interactions to less than 160 characters; and it can be quite costly to send out text messages in bulk. On the positive side it enjoys a global audience of any age and plays an im- portant role especially in the emerging markets where SMS pay- ments are a common usage scenario. 14
  • 15. Mobile Developer’s Guide Programming Android Apps The Android platform is fairly recent, created by Google and the Open Handset Alliance in late 2007, Android is an operating system and an application framework with complete tooling support and a variety of preinstalled applications. In 2010, Google announced that every day 160,000 Android devices are shipped to end users. Since the platform is supported by many hardware manufacturers, it is the fastest growing smartphone operating system. Additionally, Android is planned to be used for tablets, media players, setup boxes, desktop phones and car entertainment systems. It is also growing very fast when it comes to the platform features: Each new release usually in- cludes many new features. For example, Android 2.2 (so-called “Froyo”) now allows app storage on the SD card, C2DM push functionality1, data backup services and a lot more. Prerequisites The main programming language for Android is Java5. But beware, only a subset of the Java libraries are supported and there are lots of platform specific APIs. You find answers to your What and Why questions in the Dev Guide2 and to your How questions in the reference documentation3. 1) code.google.com/intl/de-DE/android/c2dm 2) developer.android.com/guide 3) developer.android.com/reference 15
  • 16. To get started you need the Android SDK1, which is available for Windows, Mac OS X, and Linux. It contains tools to build, test, debug and analyse applications. You will probably also want a good Java IDE. Eclipse seems a logical choice as Android provides good support for development and deploy- ment via an Eclipse ADT plugin. Note: command line tools and Ant build scripts are also provided so you can concoct almost any development and build process. Implementation An Android application is a mix of activities, services, message receivers and data providers declared in the application mani- fest. An activity is a piece of functionality with an attached user interface. A service is used for tasks which should run in the background and is therefore not tied directly to a visual representation. The message receiver can handle messages broadcast by the system or other applications. The data provid- er is an interface to the content of an application and thereby abstracts from underlying storage mechanisms. An application may consist of several of these components, for instance an activity for the UI and a service for long running tasks. Communication between the components is done by intents. An intent bundles data like the user’s location or an URL with an action. These intents trigger behaviours in the platform. For instance the intent of showing a web page will open the browser activity. The nice thing about this building-block philosophy is that functionality can be replaced by other applications and the Android system will use the preferred application for a specific intent. 1) developer.android.com/sdk 16
  • 17. For example the intent of sharing a web page triggered by a news reader app can open an email client or a text messaging app depending on the user’s preference and on the applications in- stalled. To aid development, you have a lot of tools from the SDK at your disposal, the most important ones are: — android: Create an initial project or manage virtual devices and versions of the SDK. — adb: Query devices, connect and interact with them (and virtual devices) by moving files, installing apps etc. — emulator: Start it with a virtual device and it will emulate the defined features. It takes a while to start so do it once and not on every build. — ddms: Look inside your device or emulator, watch log messages, and control emulator features like network latency and GPS position. View memory consumption or simply kill processes. If this tool is running, you can also connect the Eclipse debugger to a process running in the emulator. These tools and more - e.g. to analyze method trace logs, inspect layouts, or to test apps with random events - can be found in the tools directory of the SDK. The user interface of an application is separated from the code in Android-specific xml layout files. Different layouts can be created for different screen sizes, country locales and device features without touching Java code. To this end localized strings and images are organized in separate resource folders and the ADT plugin may help to manage all these files. 17
  • 18. Testing The first step to test an app is to run it on the emulator or device and debug it if necessary through the ddms tool. Android is built to run on different devices and OS versions without modification but hardware manufacturers might have changed pieces of the platform. Therefore testing on a physical device is paramount. Automated Testing To automate testing, the Android SDK comes with some capable and useful testing and instrumentation1 tools. Tests can be written using the standard JUnit format. The Instrumentation classes can monitor the UI, send system events like key presses, et cetera. You can test for the status of your application after these events occur. The automated tests can be run on physical devices or in a virtual device. Open-source testing frameworks such as Robotium2 can com- plement your other automated tests; it can even be used to test binary apk files, if the source is not available. A maven plugin3 and a helper for the continuous integration server Hudson may also assist your testing4, 5. 1) developer.android.com/guide/topics/testing/testing_android.html 2) code.google.com/p/robotium 3) wiki.hudson-ci.org/display/HUDSON/Android+Emulator+Plugin 4) hudson-labs.org/content/getting-started-building-android-apps-hudson 5) novoda.com/2010/08/13/android-continuous-integration-android- maven-plugin/ 18
  • 19. Signing Your application will always be signed by the build process, either with a debug signature or a real one. Your signature may be self signed, so forget about signing fees (and security). The same signature is required for updates of your application. Distribution After you have created the next killer application and tested it, you should put it in the Android Market. It a good place to reach both customers and developers of the Android platform, to browse for new exciting apps, and to sell your own apps. To upload your application, start at market.android.com/pub- lish. You are required to register with the service with your Google Checkout Account and a $25 registration fee. Once your registration is approved you can upload your application, add screenshots and descriptions to finally publish it. Make sure that you have defined a versionName, versionCode, an icon and a label in your AndroidManifest.xml. As there are lots of competing applications in Android Market, you might want to use alternative application stores. They pro- vide different payment methods and may target specific con- sumer groups. 19
  • 20. Mobile Developer’s Guide Programming iPhone Apps The iPhone is a highly interesting and very popular develop- ment platform for many reasons, a commonly named one being the App Store. When it was introduced in July 2008, the App Store took off like no other marketplace did before. Now there are far more than 200,000 applications in the App Store, and the number is growing daily. This reflects the success of the concept but it also means that it is getting more and more difficult to stand out in this mass of applications. The iPhone SDK offers high-level APIs for a wide range of tasks which helps to cut down on development time on your part. New APIs are added in every major update of iPhone OS, such as MapKit in iPhone OS 3.0 or (limited) multitasking in iPhone OS 4.0. Since the iPad, which went on sale in April 2010 uses the same operating system and APIs as the iPhone, skills acquired in iPhone development can be used in iPad development. A single binary can even contain different versions for both platforms with large parts of the code being shared. 20
  • 21. Prerequisites In order to develop iPhone (and iPod Touch and iPad) apps, you will need the iPhone SDK, which can be downloaded at developer.apple.com/iphone. This requires a membership, which is available for free. If you plan to test your apps on your device or distribute your apps on the App Store, you need to sign up for an account starting at a year. The iPhone SDK contains various applications that will allow you to implement, test, and debug your apps. The most important applications are: — Xcode, the IDE for the iPhone SDK — Interface Builder, to build user interfaces for iPhone app — Instruments, which offers various tools to monitor app execution — iPhone Simulator, which allows the developer to test his or her apps quicker than by deploying to a device The iPhone SDK will work on any Intel-based Mac running Mac OS X 10.5 (Leopard) or 10.6 (Snow Leopard). A guide to get you started and introduce you to the tools is included, as is a viewer application for API documentation and sample code. References and guides are also available online at developer.apple.com/ iphone/library/navigation. Implementation Usually, you will want to use Apple’s high-level Cocoa Touch APIs when developing for the iPhone. This means that you will write Objective-C code and create your user interfaces in Interface Builder, which uses the proprietary XIB file format. 21
  • 22. Objective-C is, as the name suggests, a C-based object-oriented programming language. As a strict superset of C, it is fully com- patible with C, which means that you can use straight C source code in your Objective-C files. If you’re used to other object-oriented languages such as C++ or Java, Objective-C’s syntax might take some time getting used to, but is explained in detail at developer.apple.com1. What seperates Objective-C most from these languages is its dynamic nature, lack of namespace support and the concept of message passing vs. method calls. A great way to get you started is Apple’s guide “Your First iPhone Application”, which will explain various concepts and common tasks in an iPhone developer’s workflow2. Check out some of the sample code that Apple provides online3 to find out more about various APIs available to you. 1) developer.apple.com/iphone/manage/overview/index.action 2) developer.apple.com/iphone/manage/distribution/distribution.action 3) developer.apple.com/iphone/library/navigation/SampleCode.html 22
  • 23. Testing As performance in the iPhone Simulator may be superior to actual devices by several orders of magnitude, it is absolutely vital to test on devices. If possible, test your application on different generations, since newer devices, such as the recently released iPhone 4 and the iPad usually feature faster CPUs and more RAM than previous models. Testing on real devices is also important because touch-based input is completely different from a pointer- driven UI model. You can distribute builds of your application to up to 100 testers through Ad-Hoc Provisioning, which you can set up in the Program Portal1. Each iPhone (and iPod touch) has a unique identifier (UDID – universal device identifier), which is a string of 40 hex characters based on various hardware parts of the device. If you choose to test using Ad-Hoc-Provisioning, simply follow Apple’s detailed set-up instructions2. Every single step is vital to success, so make sure that you execute them all correctly. 1) developer.apple.com/iphone/library/referencelibrary/GettingStarted/ Learning_Objective-C_A_Primer/index.html#//apple_ref/doc/uid/ TP40007594 2) developer.apple.com/iphone/library/documentation/iPhone/Conceptual/ iPhone101/Articles/00_Introduction.html Automated Testing 23
  • 24. Automated testing options for iPhone varies in different ver- sions of the iPhone SDK. Originally SDK did not include sup- port for unit testing out of the box, but fortunately Google added support in Google Toolbox for Mac (GTM)1 with detailed instructions available in their wiki2. Also, iPhone develop- er Gabriel Handford improved on this work and released his project, GHUnit as open source3. GTM runs the test cases using a shell script during the build phase, while GHUnit runs the tests on the device (or in the simulator), allowing the developer to attach a debugger to in- vestigate possible bugs. In version 2.2 of the SDK Apple included OCUnit; an example of how to create the unit tests is available online4. In version 4 of iOS Apple introduced a new tool, UIAutomation which aims to automate the testing of your application by scripting touch events5. At the time of writing, no additional information is available on Apple websites, however there is an O’Reilly article with basic instructions6. Several third party testing automation tools for iPhone applications are available as well, including FoneMonkey7 and Squish8. 1) code.google.com/p/google-toolbox-for-mac/ 2) code.google.com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting 3) github.com/gabriel/gh-unit 4) www.mobileorchard.com/ocunit-integrated-unit-testing-in-xcode 5) developer.apple.com/technologies/iphone/whats-new.html#tools 6) answers.oreilly.com/topic/1646-how-to-use-uiautomation-to-create- iphone-ui-tests 7) www.gorillalogic.com/fonemonkey 8) www.froglogic.com/products 24
  • 25. Distribution In order to reach the broadest possible audience, you should consider distributing your app on the App Store. There are other means, such as the Cydia Store for jailbroken iPhones, but the potential reach isn’t nearly as large as the App Store’s. To prepare your app for the App Store, you will need a 512x512 version of your app’s icon, up to five screen shots of your app, and a properly signed build of your app. Log in to iTunes Con- nect1 and upload your app according to the onscreen instruc- tions. After Apple has approved your application, which usually shouldn’t take more than 2 weeks, your app will be available to customers in the App Store. The approval process re- ceives more complaints than any other aspect of the iPhone ecosystem. A list of common rejection reasons can be found on www.apprejections.com. 1) itunesconnect.apple.com 25
  • 26. 26
  • 27. Mobile Developer’s Guide Programming Symbian Apps The Symbian platform is an open-source software platform for mobile devices. It consists of an operating system (formerly known as Symbian OS), middleware and user interface layers (formerly known as S60) and, since 2009, has been stewarded by the Symbian Foundation1. Close to 350 million Symbian devices (operating on 250 net- works across the world) have shipped since the first Symbian OS-based device was launched in 2000. The first official plat- form release from Symbian Foundation was Symbian^2 in May 2009, devices based on Symbian^3 are shipping in 2010. As a third party developer you can create applications and middleware in Symbian C++, the native programming language of the Symbian platform. Symbian C++ is a specialized subset of C++ with Symbian-specific idioms. It has a steep learning curve and the first steps here can be more frustrating than in other environments, but there are lots of books and articles to help you2. Compared with many of the runtimes available for Symbian de- vices, such as Java ME and Python, native Symbian C++ APIs provide the most comprehensive access to device features and enable rich application development. They provide fine-grained control over all aspects of the operating system, including memory, performance and battery life; and deliver a consistent performance advantage over other runtimes. 1) www.symbian.org 2) developer.symbian.org/wiki/index.php/Symbian_C%2B%2B_Quick_Start 27
  • 28. Since late 2009 you can also create native applications for Symbian phones using cross platform Qt (pronounced “cute”) APIs and tools. Qt’s developer-friendly APIs allow applications to be written once and compiled for Symbian, desktop, and windows mobile devices. Please check www.forum.nokia.com/ Technology_Topics/Development_Platforms/Qt/QuickStart. xhtml for details. Qt application development is covered later in this guide. Prerequisites The official desktop development platforms for Symbian C++ are Microsoft Windows XP with Service Pack 2 and Win- dows Vista. All of the kits and tools supplied by Symbian are free. If your computer meets the requirements, set- ting it up for Symbian C++ development is as simple as downloading and installing the following (in this order): 1. ActivePerl (use ONLY version 5.6.1.638)1 2. The Symbian Application Developer Toolkit (ADT) 3. The Symbian Application Development Software Developer Kit (SDK) (full installation)2 Linux and Mac OS X are not officially supported platforms. One way around this is to use a virtual machine that hosts Windows. Other options are more complex, but information can be found online3. 1) downloads.activestate.com/ActivePerl/Windows/5.6/ActivePerl- 5.6.1.638-MSWin32-x86.msi 2) Items 2 and 3 are downloadable on developer.symbian.org/main/tools_ and_kits/index.php 3) developer.symbian.org and www.forum.nokia.com 28
  • 29. Application Developer Toolkit (ADT) If you have worked with S60 SDKs and tools, you’ll have in- stalled each of the tools you need for development (such as Active Perl, the JRE and Carbide.c++) separately. The new Symbian platform installs all the tools you need in one sweep. The ADT is for developers who wish to create applications that run on production phones - i.e. “on top” of the Symbian platform. Typical users include professional application and games developers, professional service companies, hobbyist developers, students and research groups. The ADT is intended for use with one or more SDKs. The Carbide.c++ IDE, based on Eclipse, is installed as part of the Application Development Toolkit (step 2 in the section above). It is the only officially supported IDE for Symbian C++ development. The GCCE compiler is also supplied, as is a debugger that allows debugging on both emulator and production phones, analysis tools, and more. Application Development Software Developer Kit (SDK) The Application Development SDK contains libraries and head- er files that enable you to develop applications. It should be used in conjunction with the ADT. The SDK provides access to APIs that are guaranteed to work across a broad range of Symbian-based devices today and in the future. Once you have installed the kits you can use the built-in application wizard to build, debug and run your first native application, and download it to a Symbian phone, without writing a single line of code. 29
  • 30. Porting to Symbian The Symbian platform includes standard libraries that enable developers to build POSIX-compliant C code and use near- ISO standard C++, including the Standard Template Library. These libraries can substantially reduce the time and effort required to port POSIX-based software to the Symbian plat- form. They are especially useful for porting existing C++ or C-based software from the desktop environment and increase the scope for cross-platform software development using C/C++ code. Existing standards-compliant code will work on the Symbian platform with some minor changes and a re- build. Developers can benefit from an open-source code- base instead of having to create everything from scratch. The C language support comprises four ‘base’ libraries (libc, libm, libpthread and libdl), five additional libraries (libssl, libz, libcrypto, libcrypt and libglib) and related tools. For standard C++ support, the platform provides the popular STLport version of the Standard Template Library and a small but useful subset of the Boost libraries. There are no standard C/C++ APIs for the UI or application engines, such as Calendar, Contacts and Messaging, and no access to most handset-specific features such as multimedia or telephony. However, if you develop using Qt on Symbian, APIs will be made available for access to these features, through the QtMobility project. 30
  • 31. Automated Testing Automated Test Tools are now available from Symbian at developer.symbian.org/wiki/index.php/Symbian_Test_Tools You may find legacy projects use a much older unit testing framework called SymbianOSUnit1 which has been open- sourced, but not updated in the last few years. Finally, in terms of unit testing, googletest2 works on Symbian, and other Mo- bile C++ platforms. Signing Symbian uses a trust-based platform security model. This means APIs are protected by platform security “capabilities”. If you use APIs protected by capabilities, you will need to submit your application to Symbian Signed. It is necessary to sign an application while developing in order to install it to a phone. This is done using a “development certificate” and a developer can obtain one of these from Symbian Signed.3 Almost all developers can use the Express Signed option when using Symbian Signed to sign their application ready to distrib- ute. This a quick and simple way to get an application signed for the distribution channel. The developer must declare that the application has passed the Test Criteria set by Symbian, upload the application to Symbian Signed and the signed ap- plication is returned almost immediately. There is a cost associ- ated with using Symbian Signed, the latest cost information for Express Signed is available at the Symbian developer website.4 1) www.symbianosunit.co.uk 2) code.google.com/p/googletest 3) www.symbiansigned.com 4) tiny.symbian.org/symbiansigned 31
  • 32. It is also necessary to sign an application while developing in order to install it to a phone. This is done using a “development certificate” that you can obtain from Symbian Signed4. You can find out more on developer.symbian.org/wiki/index.php Express_Signed_(Symbian_Signed) If you are writing a simple application or game, you might be able to avoid using protected APIs to avoid Symbian signing. You can simply distribute the application signed by a certificate you have generated for yourself, known as self-signing. However, a self-signed application will present a warning to the user when they install it, saying that the code is untrusted. To reassure your users, you may therefore still prefer to Symbian sign your application even when you don’t use protected capabilities. Distribution Symbian Horizon1 is a service that helps developers to write Symbian applications and publish them in app stores like Nokia’s Ovi Store, the Samsung Applications Store, Sony Ericsson’s Playnow, AT&T’s MEdia, and stores from China Mobile, Handango and Orange. Horizon has a single directory of Symbian Signed tools available which enables developers to display and advertise their appli- cations, and allows users to discover them and find out which stores they are available from. 1) horizon.symbian.org 32
  • 33. Mobile Developer’s Guide Programming J2ME / Java ME Apps Programming J2ME apps is a fun and rewarding experience. The capabilities of the Java platform are constantly evolving thanks to the Java Community Process1 that standardizes new APIs (like the Advanced Multimedia API) and even whole plat- forms (like the Mobile Service Architecture). Right now J2ME development seems to be a bit unfashionable compared to iPhone or Android development, but J2ME devel- opment is still the best way to reach around 80% of mobile phone users worldwide. Prerequisites A mobile Java application (MIDlet) is compiled, obfuscated, preverified and packaged. To implement your application you need a couple of things: — the Java SDK2 (not the Java Runtime Environment) and an IDE of your choice, e.g. Eclipse3 possibly with Mobile Tools for Java (MTJ), NetBeans4 with its mobility pack or IntelliJ5. — an Emulator, e.g. the Wireless Toolkit6, the Micro Emulator7 or a vendor specific SDK or emulator. 1) www.jcp.org 2) java.sun.com 5) www.jetbrains.com 3) www.eclipse.org 6) java.sun.com/products/sjwtoolkit 4) www.netbeans.org 7) www.microemu.org 33
  • 34. — Depending on your setup you may also need an obfuscator like ProGuard1. If you build applications professionally you will probably also want to use a build tool like Maven2 or Ant3. — You may want to check out J2ME Polish, the Open Source framework, for building your application for various devices4. A complete installation and setup guide is out of scope of this guide, please refer to the respective documentation of these tools. Beginners often like NetBeans with an installed mobil- ity pack. Also download and read the JavaDocs for the most important technologies and APIs. You can download most Java- Docs from www.jcp.org but there are a couple of useful vendor specific APIs that needed to be tracked down manually from the vendor’s pages (Nokia UI-API or Samsung APIs, for example). Implement Your App The J2ME platform is fairly straight forward, the basis is formed by the Connected Limited Device Configuration (CLDC) and the Mobile Internet Device Profile (MIDP), which are both quite easy to understand. Similar to the good ol’ fashioned Applets you extend javax.microediton.midlet.MIDlet in your main class and then you are ready to go. 1) proguard.sf.net 2) maven.apache.org 3) ant.apache.org 4) www.j2mepolish.org  34
  • 35. You can create the UI of your app in different ways: — Highlevel LCDUI components: use the components found in the javax.microedition.lcdui package, e.g. Form or List. — Lowlevel LCDUI: use javax.microedition.lcdui.Canvas for controlling every pixel of your UI. — SVG: Scalable vector graphics defined in JSR 287 jcp.org/en/jsr/detail?id=287. There are also different products out there to help you with the UI development: — J2ME Polish: compatible with the highlevel LCDUI framework, separates the design in CSS, you can also use HTML for the user interface (www.j2mepolish.org). — LWUIT: a Swing inspired UI framework (lwuit.dev.java.net). — Mewt: Use XML for defining the UI (mewt.sourceforge.net). — TWUIK: A powerful “Rich Media Engine” (www.tricastmedia.com/twuik) There is a rich open source scene in the J2ME sector. Interesting projects can be found via blog on opensource.ngphone.com. You will also find interesting projects on Sun’s page1, for ex- ample the Bluetooth project Marge2. 1) mobileandembedded.dev.java.net 2) marge.dev.java.net 35
  • 36. Testing Thanks to the fragmentation, testing your applications is ab- solutely vital. Test as early and as often as you can on a mix of real devices. Some emulators are quite good (personal favorites are Black- Berry and Symbian) but there are some things you have to test on real devices. Thankfully some vendors provide subsidized or even free remote access to selected devices: — Nokia: www.forum.nokia.com/rda — Sony Ericsson: developer.sonyericsson.com/site/global/ techsupport/virtuallab/p_virtual_lab.jsp — Samsung: innovator.samsungmobile.com/bbs/lab/view. do?platformId=2 Automated Testing There are various unit testing frameworks available for J2ME, including J2MEUnit1, MoMEUnit2 or CLDC Unit3; System and UI testing is more complex given the security mod- el of J2ME, however JInjector4 is a flexible byte-code inection framework that supports system and UI testing. Code coverage can be gathered with Cobertura for J2ME5 or JInjector. 1) j2meunit.sourceforge.net 2) momeunit.sourceforge.net 3) snapshot.pyx4me.com/pyx4me-cldcunit 4) code.google.com/p/jinjector 5) www.cobertura4j2me.org 36
  • 37. Porting One of the strengths of the mobile Java environment is that it is backed by a standard, so it can be implemented by various vendors that compete with each other. The downside is that a standard has to be interpreted, and interpretation causes dif- ferences. Different implementations also suffer from different bugs, which makes things not really easier. In the next sections we outline different strategies for porting your J2ME applica- tions to all J2ME handsets and to different platforms. Direct Support The best but hardest solution is to code directly for different devices and platforms. So you create a J2ME app for MIDP devices, a native BlackBerry app, a native Windows Mobile app, a Symbian app, an iPhone app, a Web OS app, and so on. As you can imagine, this approach has the potential to bring the very best user experience, since you can really adapt your application to each platform. At the same time your development costs will skyrock. We advise to use another strat- egy first until your idea has been proven to be a success. 37
  • 38. Lowest Common Denominator You can prevent many porting issues by limiting the functional- ities of your application to the lowest common denominator. In the J2ME world this means CLDC 1.0 and MIDP 1.0. Depending on the target region for the application you might also consider to use either the extensions Java Technology for the Wireless Industry (JTWI, JSR 185) or the Mobile Service Architecture (MSA, JSR 205). Both extensions are supported by many modern devices and provide a lot more capabilities; though in some regions like Africa, South America or India you should be aware that you are limiting the number of your po- tential users by taking this step. Using the lowest common denominator typically is easier, as there are less functionalities to care about. However, the user experience may suffer when limiting your application in this way, especially if you want to port them to smartphone platforms later. This means that the lowest common demonina- tor is a good choice for simple applications – for comprehen- sive, feature-rich smartphone applications it is not the way to go. 38
  • 39. Porting Frameworks Porting frameworks automatically adapt your application to different devices and platforms. Such frameworks typically feature the following ingredients: — Client library that simplifies development — Build tools chain that converts code and resources to application bundles — Device database that provides information about devices — Cross compilers to port your application to different platforms In the J2ME world there are various frameworks to choose from: Xpress Suite from JavaGround1 provides porting against revenue sharing. Celsius from Mobile Distillery2 is licensed per month. Bedrock from Metismo3 provides a suite of cross compilers on a yearly license fee. J2ME Polish from Enough Software4 is avail- able under both the GPL Open Source license and commercial ones. Going the other direction (from C++ to Java ME) is also possible with the MoSync Open Source solution5. Good porting frameworks allow you to use platform and device specific code in your project, so that you can provide the best user experi- ence. In other words: A good framework does not hide device fragmentation, but makes the fragmentation manageable. 1) www.javaground.com 2) www.mobile-distillery.com 3) www.metismo.com 4) www.j2mepolish.org 5) www.mosync.com 39
  • 40. Signing The mobile Java standard differentiates between signed and unsigned applications. Some handset functionalities are only available to trusted applications. Which features are affected and what happens if the application is not signed but uses one of those features largely depends on the implementation. On one phone the user might be asked once to allow this function- ality, on another he’ll be asked every time the feature is being used and on the third one you won’t be able to use the feature at all without signing. Most implementations also differentiate between the certifica- tion authorities who have signed an application: Applications signed by the manufacturer of a device enjoy the highest security level and can access every handset they desire. Applications signed with a carrier certificate are on a similar level. Applications signed by JavaVerified1, Verisign2 or Thawte3 are on the lowest security level. The mad thing is that not ev- ery phone carries all necessary root certificates. And some well known developers have even stripped away all root certificates in the past. The result is quite a mess, so consider signing your application only when required, e.g. when deploying to an app store or when you absolutely need access to security constrained features. You can of course consider working to- gether with a testing and certification service provider and let they do the job for you. The largest one here would be Intertek NSTL4, others are Absolute Quality5 or Mobiquest6. 1) www.javaverified.com 4) www.nstl.com 2) www.verisign.com/code-signing 5) www.absolutequality.com 3) www.thawte.com/code-signing 6) www.mobiquest.net 40
  • 41. Distribution Unlike the iPhone, you can install J2ME applications directly on your phone – either over bluetooth or over the air (OTA) using a webserver. Thanks to the universal app stores, nowadays distribution is easier than ever. They manage the payment, hosting and advertisements and receive a revenue share for that. — Ovi1 targets Nokia users worldwide and provides a 70% revenue share for the developer (of gross sales, net of refunds and returns, less applicable taxes and, where applicable, fixed operator billing costs). — Java Store2 plans to sell Java based content. — The Samsung App Store3 distributes application for Samsung handsets. — LG also distributes apps on www.lgapplication.com — Handmark provides a carrier and vendor independent mobile store.4 — Carriers also get into the game, e.g. Sprint5 or O26. Basically almost everyone has announced an app store. — GetJar is one of the oldest distributors for free mobile applications – not only for Java applications7. An overview on the existing appstores (not only J2ME) can be found in the appstore Wiki on www.wipwiki.com/appstores. Furthermore there are various vendors who provide solutions for provisioning of Java applications over Blueooth, including Waymedia8, Futurlink9 and Broadburst10. 1) 6) www.o2litmus.com publish.ovi.com 2) 7) www.getjar.com store.java.com 3) 8) www.waymedia.it applications.samsungmobile.com 4) 9) www.futurlink.com www.handmark.com 5) 10) www.broadburst.com softwarestore.sprint.com 41
  • 42. Mobile Developer’s Guide Programming Qt Apps Pronounced cute — not que-tee — Qt is an application frame- work that is used to create desktop applications and even a whole desktop environment for Linux — the KDE Software Compilation. The reason many developers have used Qt on the desktop is because it frees them from having to consider the underlying platform — a single Qt codeline can be compiled to run on Microsoft Windows, Apple Mac, and Linux. When Nokia bought Trolltech — the company behind Qt — it was with the goal of bringing this same ease of development for multiple platforms to Nokia’s mobile devices. Today, Qt can be used to create applications for devices based on Symbian, Maemo and, in the near future, MeeGo, an open source platform initiated by Nokia and Intel. The challenge when developing with C and C++ is that these languages place all the responsibility on the developer. For example, if a developer makes use of memory to store some data, the developer has to remove that data and free the memory when it is no longer needed. (If this is not done the dreaded memory leak occurs.) Qt uses standard C++ but makes extensive use of a special pre-processor (called the Meta Object Compiler, or moc) to deal with many of the challenges faced in standard C++ develop- ment. As consequence Qt is able to offer powerful features that are not burden by the usual C++ housekeeping. For example, instead of callbacks a paradigm of signals and slots is used to simplify the communication between objects1, the output from one object is a “signal” that has a receiving “slot” function in the same or another object. 1) qt.nokia.com/doc/4.7-snapshot/signalsandslots.html 42
  • 43. Adding Qt features to an object is simply a case of including QObject (which is achieved by add the Q_OBJECT macro to the beginning of your class). This meta-object adds all the Qt specific features to an object. Qt then provides a range of objects for creating GUIs (the QWidget object), complex graphical views (the QGraphicView object), managing network connections and communications, using SVG, XML parsing, and using scripts among other. Many developers who have used Qt report that application can be written with fewer lines of code and with greater in-built reliability when compared to coding from scratch in C++. The result is that less time is needed to create an application and less time is spent in testing and debugging. For mobile developers using Qt is free of cost. It benefits also from being open source, with a large community of developers contributing to the content and quality of the Qt APIs. Should you wish to get involved the source code is made available over Gitorious1. Prerequisites Setting up a development environment to create applications for Nokia’s Symbian devices was time consuming, although things are improving. The Maemo environment is a little easier, but if you had ambitions to create a cross platform version of your application, then you would have required a Microsoft Windows PC for Symbian and Linux computer for MeeGo. The Nokia Qt SDK installs everything you need to create, test, and debug applications for Symbian and Maemo from a single package. 1) qt.gitorious.org 43
  • 44. The Microsoft Windows version offers tools for compiling Sym- bian and Maemo app, while the Linux and Apple Mac versions only support Maemo. However, an experimental service, Remote Compiler, can be used from the Linux and Mac versions to build Symbian apps. Creating your application The Qt SDK is built around the Qt Creator development tool. Using Qt Creator you define most of your application visually and then add the specific program logic through a code editor that offers full code completion support and integrated help. One of the neat features of Qt is QML, a language for declarative UI definition. While QML generally simplifies UI development, its biggest advantage is that the tools within Qt Creator enable the UI to be defined by graphic designers who do not have to be aware of the technical programming aspects. In the past, one of the challenges with cross platform applica- tions for mobile has been accessing platform features: Anytime you want to find the device’s location or read a contact record it’s been necessary to revert back to the platform’s native APIs. This is where the Qt APIs for Mobility come in. These APIs provide a common interface to device data such as contacts, location, messages, and several others. This means that if you, for example, need the device’s location the same API will ob- tain the location information on both a Symbian and Maemo device. (The Nokia Qt SDK also enables you to integrate the full platform SDKs so you can use native APIs if you want to.) As with Qt in general, working with the mobility APIs is quite straightforward. The following code, for example, shows that only a few lines are needed to access a device’s current location: 44
  • 45. void positionUpdated (constQGeoPositionInfo&gpsPos) { latitude = gpsPos.coordinate().latitude(); longitude = gpsPos.coordinate().longitude(); } Learning Qt If you are already familiar with C++ development on the desktop, creating Qt applications for Symbian or Maemo will be straightforward. Once you have mastered the Qt APIs you should find you can code much faster and with fewer of the usual C++ frustrations. Qt has many interesting features, such as WebKit support enabling you to integrate web content into your app and scripting that can be used to add functionality quickly during development or change runtime functionality. It is also worth pointing out that, because Qt applications are compiled to the platform they will run on, they also deliver very good performance and usability. For most application the levels of performance will be comparable to that previously achieved by hardcore native applications only. Testing The Nokia Qt SDK includes a lightweight simulator that enables application to be tested and debugged on the develop- ment PC. The simulator includes tools that enable device data, such as location or contacts records to be defined so that the application’s functionality can be fully tested. The simulator does not, however, eliminate the need for device testing. 45
  • 46. In addition, the Nokia Qt SDK includes the tools required to perform on-device debugging on Symbian and Maemo devices. This feature can be handy to track down bugs that come to light only when the application is running on a device. Such bugs are rare and tend to surface in areas such as comms, where the Qt simulator uses the desktop computer’s hardware, hardware that differs from the equivalent technology on a mobile device. QTestLib provides both Unit testing and extensions for testing GUIs. It replaced QtTestLib, however you may find useful tips by searching for this term. A useful overview is available at: qtway.blogspot.com/2009/10/interesting-testing.html Packaging For a Qt application to run on a mobile device the Qt API frame- work has to be present. The Nokia N900 has the Qt APIs built in. In addition, Maemo and MeeGo devices provide an updated mechanism that will install the necessary framework compo- nents should there be newer versions needed by the app. For Symbian devices the situation is a little different. Sym- bian^3 devices will have the APIs built in. However, Symbian does not include a built in mechanism to add the APIs to ear- lier devices. One solution is to include the Qt packages in the application’s distribution, but this makes the file quite large. The better approach is to package your application with Smart Installer. Now, when the app is installed, Smart Installer checks for the presence of the necessary Qt packages and, if they are not there, downloads and installs them. Using this mechanism, Qt apps can be easily targeted at S60 devices. 46
  • 47. Signing As Qt applications install as native applications on Symbian and Maemo devices they need to comply with each platform’s signing requirements. In the case of Maemo this means that signing is not required. For application to be installed on Sym- bian devices, signing is necessary. If you choose to use Ovi Store to distribute your app, Nokia will organise for your app to be Symbian Signed, at no cost. More information on signing applications for Symbian is given in the Application Signing section of the chapter Programming Symbian Apps. Distribution Ovi Store is Nokia’s answer to the iPhone App Store and An- droid Marketplace. Importantly, once an application has met Ovi Store quality requirements — beyond removing indecent or illegal applications — there is no restriction on the application that can be hosted. So you will find many applications in Ovi Store that compete directly against offerings from Nokia, such as alternative browsers, music players, and email applications. To use Ovi Store you need to register and pay a one-time €50 fee. When your application starts selling you get 70% of revenue after any applicable taxes and the operator’s fees (where applications are purchased through operator billing rather than a credit card). Many developers view the operator’s fee negatively, as it can account for up to 40% of the sale price. However, the extra sales generated when this billing method is available generally means that you will receive more revenue than from credit card sales. 47
  • 48. Mobile Developer’s Guide Programming Mobile Widgets We have mentioned that some approaches to mobile de- velopment require you to learn multiple languages and the unique features of individual platforms. One of the latest approaches to solving this problem, and offering one de- velopment technology for many devices, is web widgets. Web widgets are based on the scripting and mark-up languages used for websites (HTML, CSS and JavaScript). To run a web widget a device needs to provide browser runtime environment. Most devices have a browser that supports web languages, so it is a small step in the technology to make al- most any device capable of running widgets. The biggest advantage of widgets is that they offer probably the easiest route into mobile development. Web developers are able to create widgets using their existing web design skills and code in the languages they already know. Equally, for anyone taking their first steps into mobile development or first steps into programming, HTML, CSS, and the JavaScript language are a lot easier to learn than the relatively complex native languages. 48
  • 49. Widget characteristics In general, a widget can be characterised as a small website installed on a device. But if that’s the case, why not simply use a website? Well, there are several advantages of a widget compared with a web page: — Widgets can be more responsive than websites: In a widget you work with raw data not HTML pages, the reduction in data overhead means widgets make better use of mobile network bandwidth. — Widgets are already first class apps on some phones: Although widget environments vary, a user can open a widget in just a few clicks, there is no URL to type or bookmark to find. For example, Symbian devices from Nokia place a widget’s icon in the device’s menu making it as easy to find and open as a native application. — Widgets can look like native applications: Some widget environments include features that replicate the device’s native menus and UI. Widgets that behave like native applications are much easier to use than websites. — Widgets can run on a device’s home screen: Some widget environments, such as Nokia’s Web Runtime (WRT), are able to provide summary views users can add to their device’s homepage. — Widgets can use device data: The ability to use device data, such as location or contact records, enables widgets to offer information that has context, such as 49
  • 50. identifying social network contacts based on the entries in the device’s address book. — Widgets can generate revenue: They can be packaged and distributed via application stores so you can sell them just like native applications. 50
  • 51. If there is a challenge in creating widgets, it is the the lack of universal support for a common standard. W3C (together with many major players from the mobile ecosystem) is pushing forward with the definition of standards. This standardisation is still underway and information on its progress can be found in the W3C Wiki1. Because the stan- dards are not complete, it’s important to be aware that each widget technology has slightly different ways of imple- menting the draft specifications and not all environments implement all of the draft standards. In general, a widget that follows the specifications given by the W3C will enable you to target these widget environments: — Nokia WRT (Selected S60 3rd Edition, Feature Pack 2 and all S60 5th Edition devices): bit.ly/nokia-wrt — Blackberry (min. v5.0): bit.ly/blackberry-widgets — Windows Mobile (min. v6.5): bit.ly/winmo-widgets — Vodafone360: bit.ly/vf-widgets — J2ME, Blackberry, Android, etc.: bit.ly/es_skylight To port your widget over to for example iPhone and Android, you can use tools like PhoneGap2, Titanium from Appcelerator3, and Rhomobile4 among others. Of these options, PhoneGap offers a solution that is closest to the W3C approach. 1) www.w3.org/2008/webapps/wiki/WidgetSpecs 2) www.phonegap.com 3) www.appcelerator.com 4) www.rhomobile.com 51
  • 52. Prerequisites Widgets, just like websites, are created entirely in plain text. These text files are then packaged as a zip archive. This makes it possible to create widgets using a text editor, zip applica- tion, and a graphics application (to create an icon and graph- ics for the widget). If you have a tool for web development it can be used for widget development. The primary advantage of using a web editor is the support these tools provide for composing HTML, CSS, or JavaScript. There are also a number of tools specifically designed for developing widgets. These may be delivered as plug-ins to web authoring tools, such as the Nokia WRT plug-ins for Aptana Studio; Dreamweaver; and Visual Studio, or as standalone tools.. These tools provide template projects, preview environment, validation, packaging, and de- ployment features. Writing your code In general, there are no special requirements for writing code for a widget. The principal area where a widget differs from a website is the variety of relatively small screen sizes it has to work on. Devices running widgets may offer WVGA, nHD, QVGA, or other resolution screens. CSS provides an elegant solution to reformatting information to accommodate these varying screen sizes. By the way: Try to use CSS3 whenever possible and re- move any old compatibility code or you may run into issues. 52
  • 53. You can start by simply: 1. Creating index.html and config.xml files. 2. Zipping them at the command line using zip myWidget.wgt index.html config.xml. 3. Opening the myWidget.wgt file in Opera. Of course, your widget can also use AJAX and one of the vari- ous JavaScript libraries, such as jQuery, MooTools, YUI, Dojo, or Guarana. Depending on the widget platform you are targeting you may be able to use more advanced technologies such as Canvas, SVG, Flash Lite, or even HTML5 features such as the <audio> and <video> tags. In addition, each environment’s APIs for retrieving device information, accessing user data, storing data, or other environment specific tasks will need to be mastered. In most cases these APIs follow JavaScript conventions and are easy to learn. For example, the following code uses Nokia Platform Services 2.0 APIs to asynchronously determine a device’s location: serviceObj = nokia.device.load(“geolocation”); serviceObj.getCurrentPosition(success_callback, error_callback,positionOpts); … function success_callback(result){ Lat = result.coords.latitude; Long = result.coords.longitude; } 53
  • 54. While standards are still to be finalised, overall the APIs are moving in very similar directions. The W3C Geolocation API Specification proposes an almost identical API for the same task: navigator.geolocation.getCurrentPosition (successCallback,errorCallback, positionOptions); All the widget runtimes are advancing quickly, with new features being added regularly. While keeping up with these developments may be a challenge it is certainly worth while if you want to create leading edge widgets. Testing It is always good to be able to test on a PC and you can do this for your W3C compliant widgets in Opera 9 or later. How- ever, if your widget includes device integration or platform specific features you will need to look to other tools and fortunately most widget development tools provide a computer based preview environment as well. These preview tools enable you to display widgets in various screen resolutions and orientations, issue device triggers (such as removal of a memory card) to the widget, and testing against simulated device data (such as contacts and lo- cation data). Of course, once you finish desktop testing, final testing on your own phone will be essential. The way a widget looks and behaves can only be fully assessed on a real screen, under realistic lighting conditions, and in a real net- work. 54
  • 55. Signing Currently most widget environments don’t require widgets to be signed. This situation may change as the APIs to access device features become more advanced. It is worth noting that the W3C standards include a proposal for widget signing. Distribution While the W3C is working on standards that will enable widgets to be discovered from websites, in very much the same way RSS feeds are today, there is no universal mechanism for widget discovery, yet. However, some widget environments enable you to add a link to a widget on a website so that the widget installs directly into the environments or device when downloaded. For example, by identifying a Nokia WRT widget with the MIME type AddType x-nokiawidget .wgz downloading the widget will auto- matically initiate the installation process. Distribution via a website is not the only option. Many application stores welcome widgets. As we went to press, the only store that supports W3C widgets is the Vodafone Wid- get store1, but by packaging your widgets appropriately you can upload them into Nokia Ovi store2, the Windows Market- place7 or RIM Blackberry AppWorld4. You can use tools, such as PhoneGap, to port your widget to a native application envi- ronment, thus gaining the option to use other stores, such as Apple AppStore and Android Market among others. 1) widget.vodafone.com 2) store.ovi.com 3) www.windowsmarketplace.com 4) appworld.blackberry.com/webstore 55
  • 56. Mobile Developer’s Guide Programming Flash Applications Developing Flash applications (and Flash animations within applications) for mobile devices is the same methodology as developing browser-based Flash applications for the desktop, but you must be knowledgeable of the requirements of the target device. There are two components to consider when de- veloping Flash applications and animations: The Flash anima- tion itself, that theoretically can be run on any device, and the Flash engine or player installed in a device that has varied operating functionality. Adobe open sourced the Flash specification, permitting inde- pendent developers and companies to develop Flash-compatible engines and players. Authoring can be done using the Adobe Flash Professional or Adobe Creative Suite (any edition with Flash) software. There are also open source versions includ- ing Gnash1 and GameSWF2 which are designed for the desktop systems. Other commercial alternative Flash platforms exist that provide good integration with the host devices. Many of these Alternative Flash platforms run outside the browser environment working directly with a device’s native APIs. Pay special attention to how you design your Flash application. Adobe Creative Suite provides you the option of developing to run inside a web browser or as a standalone Adobe AIR appli- cation. Alternative Flash-compatible SDKs go further and can integrate Flash content into existing 2D and 3D software ap- plications. 1) www.gnashdev.org 2) tulrich.com/geekstuff/gameswf.html 56
  • 57. The Adobe Flash players installed in mobile devices are not upgradable in the field. This means that you must author the Flash application to match the Flash player version in the de- vice. Flash-compatible engines and players from alternative Flash-compatible SDK and tool vendors vary in the functionality provided, typically based on a vendor’s vertical market focus. Flash support on mobile devices varies widely from full support to no support. We anticipate that Flash support will become standardized on most mobile devices as the hardware platforms include faster CPUs and as they add-in GPUs with OpenGL ES graphics acceleration. Prerequisites If you are authoring or modifying Flash animations you require: — An authoring tool such as Adobe Creative Suite with Flash; — A Macintosh or Windows computer system that runs the authoring tool; — Animators, graphics artists and/or ActionScript developers who understand how to develop for mobile phones. A Flash application (or Flash movie) may consist of two dis- tinct pieces of software. The first is the animation engine that renders deterministic graphics to a display; the second is the ActionScript engine that uses input events (time, keyboard, mouse, XML) to make runtime decisions to play internal portions of a Flash animation or to load and play an ex- ternal animation or video. ActionScript is a scripting language based on ECMA-Script available in three versions. 57
  • 58. Then you must decide exactly how the application is going to operate and select the SDK that best supports your target device(s). It has been reported that Abobe Creative Suite 5 will support ActionScript 3.0 and Flash 10.1 with the full 3D and 2D feature set, and smartphones. If you want utilize the maximum features like 3D and ActionScript 3.0 compatibility, this is the way to go. As stated earlier in this guide, one drawback is poor perfor- mance: Large binary files may run too slowly on less powerful devices. Abobe Creative Suite 3, 4 or 5 can be used to author Flash content that runs on Alternative Flash-compatible SDKs, en- gines and players. These Alternative Flash-compatible SDKs generally support ActionScript 2.0, and Flash 8 or Flash Lite 3.1 with a full 2D feature set. Note that video and audio playback support was a feature introduced in Flash 6.1, so all players have the ability to support video playback. Flash is supported or installed on these devices: — Feature phones Many feature phones from Nokia, Samsung, Sony and a host of others have included support for Flash Lite. The Flash Lite player is compatible with Flash 3, 6 or 8 depending when the device was manufactured. These are perfect for simple Flash games (e.g., puzzle and card games). — Smartphones Some smartphones have a Flash engine or player pre-installed. This is a critical factor in developing Flash applications for these devices, and all applications must comply with the device manufacturer’s license terms and API specifications. 58
  • 59. Full Flash support has been announced for Android-based devices, and RIM’s Blackberry. Developers should clearly un- derstand the restrictions of each platform and also under- stand that there are a number of Alternative Flash-compatible products that can enable Flash to operate on a number of these devices. Now that you have selected tools and the target device(s), you need to license the development kit and follow the manufac- turer’s process for publishing to that platform. You will also need to purchase one of the target devices to do testing or you can use a web-based device testing service. 59
  • 60. Developing Flash Applications for Smartphones The new Adobe Creative Suite 5 has a new, built-in smartphone emulator. This enables developers to test their application on a supported target device. For devices not supported by Adobe Creative Suite 5, a developer may want to seek out alternative Flash-compatible SDK and tools vendors for testing. An important consideration for developing smartphone applica- tions is saving your Flash animation in a format that is compat- ible with your target device. A developer needs to be aware of the implications of saving their Flash animation in Flash 10.1, Flash 10, or Flash 8 (Flash Lite 3) and of using ActionScript 2.0 or 3.0. Tricks and Traps: — Avoid Flash animations that have very fancy visual ef- fects, simply for the sake of fancy effects. Test on the target smartphone to know what works well, and what does not. A Flash animation using ActionScript 3.0 will be 3-4 times larger in binary size and will likely result in poor performance. Decide carefully if you really need to use a feature that is only in ActionScript 3.0, as it is a completely different scripting language than ActionScript 2.0. ActionScript 3.0 is more complicated to learn and to program, and all object ori- ented languages require a lot more software developer experi- ence to use effectively. — Avoid sliding a Flash object across the screen unless you know it performs well. Redrawing every pixel multiple times a frame without a GPU is a performance killer. Select a SDK toolkit that minimizes CPU utilization to preserve battery life. 60
  • 61. If the Flash animation is not changing, the SDK toolkit should show 0% CPU utilization. — If the target smartphone has one display resolution, use 2D bitmaps to replace SVG objects that will never change size. — Test on your target phones to know how much memory is being use during the application runtime. The more memory be- ing used directly results in more CPU power required to execute the code, which affects the device’s battery life. — Minimize network connectivity to when it is absolutely re- quired. The more OS APIs and independent software you use, the more work is being done, again the faster the battery runs out of power. — Design the application to recover gracefully from power failures. Many of the Alternative Flash-compatible SDKs have additional APIs to support power failures and include database tools for the developer to implement in the application. So your user doesn’t need to re-key data after a power failure (save and restore settings). 61
  • 62. Testing How your Flash application is architected and on what target device your application will run has a direct impact on what testing is required. If you have developed an Adobe Flash browser-based application or Adobe AIR application, then it is best to test the application using the Adobe tools. How- ever, if you have developed a Flash animation (with or without ActionScript) or Flash animations that will be integrated into another 2D or 3D application, then you should consider testing the application with one of the alternative Flash-compatible SDKs or tools. Distribution Every manufacturer has a different method of publishing your application, and distributing it. Since you have selected your primary platforms, it should be fairly easy to determine the rules and revenue sharing amounts. Things to keep in mind: — It may take a few weeks from the time you submit your application to an app store until you receive a response and/or your application becomes available for purchase. Use that time to talk to other developers and media and get your marketing plans together. Once your application is available for purchase from an app store, the hard work begins to market it so that your application rises “above the noise” and gains attention and you start to build a user base. Of course your masterful application submission may also fail. Manufacturers’ can reject it for multiple reasons. Know what they expect before you spend development time. 62
  • 63. — During the submission process, you should plan you bug fix release schedule. The first release must be well tested, and free from all obvious or easy to find bugs. Your second release cycle starts the minute you publish the first release. — Above all, listen to customer feedback, and adjust your application to fulfill those requirements. Customer loyalty is the ultimate goal for an application developer. 63
  • 64. Mobile Developer’s Guide Windows Phone 7 Series Microsoft is making a fresh start with its Windows Phone 7 Se- ries. The former Windows Mobile operating system was declin- ing in both user acceptance and market share, so the need for innovation was clearly felt. The new platform geared towards consumers rather than business users, it brings new user expe- rience ideas and includes the Metro UI inspired by Microsoft’s Zune music player. Development Develop for Windows Phone with either Silverlight in the Visual Studio or with the XNA Game Studio. In both cases you will be using C# as the development language. Both runtime environments are present within the Windows Phone OS layer as shown in the following figure: 64
  • 65. Windows Phone 7 Series Framework Sensors FMRadio PhoneApplicationFrame PhoneApplicationPage PushNotification Camera Device Integration Launchers & Choosers Bing MapControl Pause / Resume Silverlight Presentation and Media XNA Frameworks Controls Drawing Media Input Media Markup Isolated Storage Content GamerService Navigation Shapes Graphics Audio Application Object Common Class Library Threading Collections Configuration Linq Text IO Net Diagnostics Security ComponentModel Location Reflection Runtime Resources Globalization 65
  • 66. Basically Silverlight is for developing applications and XNA is for game development. Use Silverlight if… Use XNA if… …you want to use Expression …you want to develop a 2D Blend for designing the or 3D game. (XAML based) UI. …you want to use standard …you want to manage Windows Phone controls. art assets such as models, meshes, sprites, textures, effects, terrains or anima- tions in the XNA Content Pipeline. …you want to use an HTML …you want to develop for web browser. Xbox or Windows 7 at the same while re-using lots of code. 66
  • 67. Windows Phone 7 Series Functions and Services With Windows Phone 7 the app has access to sensors, media playback, location and you can use services such as push notifi- cations for updating application tiles (small widgets that reside on the desktop of the phone). The initial version of Windows Phone 7 Series will not support multitasking (however applications are “tombstoned” and can be resumed later) nor copy & paste. In contrast to Windows Mobile developers cannot access the Windows APIs directly anymore. While this provides an additional security layer it restrains the extensibility of the platform and may have a negative impact on the performance of applications. In its current incarnation Silverlight on Windows Phone lacks some of the base UI controls like the pivot/panorama elements. At phone.codeplex.com you can download an intermediate so- lution if you want to use such controls. Distribution Microsoft uses its Marketplace service for distributing applica- tions. Application content is similarly restricted as Apple App- Store, Microsoft provides a fairly comprehensive overview about the submission process and and required application character- istics on developer.windowsphone.com. 67
  • 68. Resources Visit developer.windowsphone.com for tools and news re- garding Windows Phone development. The development team blogs on windowsteamblog.com/windows_phone, follow them on twitter@wp7dev for realtime news. Development forums are to be found under this short and sweet URL: social.msdn.microsoft.com/Forums/en-US/window- sphone7series. You can find useful open source projects on hwww.codeplex.com - search for “Windows Phone“. Testing You can unit test applications with the Windows Phone Test Framework (wptestlib.codeplex.com). There are public articles on unit testing Silverlight and Windows Phone applications 1, 2, 3. 1) live.visitmix.com/MIX10/Sessions/CL59 2) dotnet.dzone.com/news/test-driven-development 3) www.smartypantscoding.com/a-cheat-sheet-for-unit-testing-silverlight -apps-on-windows-phone-7 68
  • 69. Mobile Developer’s Guide Programming Bada Applications Prerequisites Bada is a new mobile platform from Samsung, introduced in November 2009. Bada can run either on a Linux kernel, for high-end devices; or real-time OS kernels, for low-end devices. Samsung wants Bada to be the “Smartphone for everybody”, and they aim to replace featurephones with Bada smartphones. Currently there are 3 devices available with Bada. Wave is a top level device, the other two focus on the mid level market. The Wave supports UMTS. The Bada UI is based on TouchWiz, as its already known from Samsung’s Android Handhelds. Samsung plans to sell about 20 Million Badaphones a year. In order to start developing for Bada you need to register at http://developer.bada.com and download the Bada SDK. The IDE and SDK are currently only available for Windows. The SDK includes the Bada IDE, which is based on eclipse CDT and the only IDE for Bada. The IDE includes a simulator. Also the IDE offers a GUI Tool, for designing the UI of your App. There is also a Bada Widget SDK, which supports BONDI JavaScript libraries. 69
  • 70. Implementation Native Bada apps are developed in C++. Samsung has put some restrictions on the use of C++ in Bada, for example, the API does not use exceptions. Instead Bada uses return values and a combination of macros for error handling. Also RTTI is turned off, so for example dynamic_cast does not work on Bada. New- comers to Bada and C++ need to understand Memory manage- ment, as the API often leaves this to the developer. The API does not use STL, but Samsung claims that you could use STL in your own code. Note that the STL version shipping with Bada is missing some parts, so you might need to use STLPort for full STL support. Porting other modern C++ Libraries like boost to work on Bada is possible, but the lack of RTTI and exceptions might make it hard. The Bada API is wrapped in a number of namespaces. The API offers UI Control and Container classes, but there are no UI Layout classes, so all your UI must be positioned by hand or within the code. You need to provide a UI layout for the land- scape and the portrait perspective. The API also provides most standard classes for XML, SQL or Network and resembles a pretty complete Framework. If you want to write Games for Bada, the SDK supports OpenGL ES 2.0. Also the SDK wraps parts of OpenGL for use in its own classes, you can also easily port existing OpenGL code to Bada. 70
  • 71. If you come from other programming languages such as Java or Python, make sure you first introduce yourself to C++. The Bada API has some easy patterns, like that you have to delete any pointer returned by a method ending in ‘N’. Also do take care about your own variables, every new shall have always its delete: MyType* var = new MyType(); // call delete MyType* array = new MyType[10];//call delete[] MyType type, stackarray[]; // ^ variables on the stack will be destroyed by scope, no delete Inside the IDE you will find a lots of Bada examples, which you can copy with one click in your own workspace. These examples provide a really good start, before you create your own “Hello World” Application. Also make use of the callbacks for impor- tant phone events in your application class, like low battery level or incoming call. The central resource for Bada developers is developer.bada.com, where Samsung provides a lot of information about Bada, and also maintains a forum for developers. The biggest indepen- dent Bada website and forum is currently BadaDev.com, they offer great tutorials about writing code for Bada. There is an IRC channel #bada at irc.freenode.net, and there are groups for Bada on most social networks. Testing Due to the specialties of Bada C++, there is currently no known Test Library for Bada native Apps. Also the SDK does not provide a Test API. Potentially some of the known C++ Test libraries 71
  • 72. like CppUnit might work on Bada. The Bada API does offer its own logging class and offers an AppLog method, so you should make extensive use of logging in debug builds. The AppLog will show up in the IDE directly. Also there are other logging classes available for Bada. With the IDE you can test and debug in the simulator or on a device. As performance is crucial for mobile applications, you must always test on a real Bada device. Also code that works on Simulator will sometimes not on the device. Distribution Bada is a closed platform, so the only way to distribute your apps is the Samsung App Store. The store offers free and paid apps, for a paid applications, as a developer, you get 70% of the price paid by the user. Before your app enters the store, there is a certification and validation process1 at Samsung to pass. The process it self can take between days and weeks, depending on the complexity of your app. Samsung has some strict rules for apps in Bada, one major rule is that an application is not allowed to link to software download sites. This means that currently no apps are accepted which use bannerads or 3rd party ads at all. As they could potentially provide such content. Samsung will maybe bring up its own ad system. 1) www.slideshare.net/samsungbada/introduction-of-application-certification 72
  • 73. Mobile Developer’s Guide Bringing Your Content to the Mobile Web “Don‘t make me think!“- this title of one of the most popular books about usability1 still summarizes very well what usability is all about. The developer should always keep in mind that it does not matter how fancy his mobile website might be: The user should be able to easily and intuitively use it. These 10 basic hints should help you to adapt your content properly for the mobile user: 1. Mobilize, don’t miniaturize: Create a concept that utilizes the possibilities of the technology. You won’t satisfy many people by simply offering a smaller version of your classical website. 2. Keep all paths open: Leave it up to the user to access either the mobile or the desktop version of your website. 3. Keep it simple: Avoid complex navigation structures, the user won’t dig that deep anyway while he is on the go. 4. Avoid text input wherever possible: Text input on mobiles sucks. If you really need to implement it, make sure to use wide input boxes so that the user sees what he is typing. 1) Steve Krug: “Don’t make me think - A Common Sense Approach to Web Usability”, New Riders, 2nd edition, 2005 73
  • 74. 5. Adapt the media: Adapt all pictures, videos etc. to be displayed properly on the handset (check the corresponding chapter in this guide: “Implementing Rich Media“). Avoid formats like .doc or pdf. 6. The user is a creature of habit; respect that: Adapt usage patterns from classic websites like linking logos to the starting page or offering corrections of mistyped search requests. 7. Think of stubby fingers: When optimizing your content for touchscreen phones don’t use clickable areas smaller than 1cm x 1cm. 8. Use sharp contrasts: fonts and back- ground colors which guarantee legibility in any surrounding, including bright sunlight. 9. Reflect continuously: Ask yourself if you would use the implemented features yourself. Ask your friends and colleagues as well before realizing your ideas. 10. Again: Don‘t make the user think!: Try to implement intuitive navigation, don’t force the user to make decisions more often than necessary. He will often click the first link in a list anyway. 74
  • 75. Mobile usage patterns and its consequences The usage pattern at a desktop computer is often described as “Hunt & Gather“. The mobile usage is totally different. When using internet on the mobile handset, the user is usually on the move. He wants to know more about his surrounding or just fill some minutes. Therefore, mobile internet usage is often described as “Quick Enjoyment“ Applications have to take these differences into account. For example, a search interface for stationary users has to offer comprehensive options, on the mobile handset it has to be more straight-forward, focused on the primary action. These adjustments cannot be realized by a machine. This is one reason why it is indispensable to create special mobile versions of websites. The mobile user has no mouse, often he has no real keyboard and the size of the screen is very limited. This means the con- tent of a mobile website has to be arranged accordingly: Images should not be too large, all relevant elements should be easily accessible as the user is not able to move a cursor freely along the site. It is best to test the usability of a site under real-life circum- stances: Take your mobile handset to a busy public place and try to find all relevant info of your application by just using one hand. You will see very quickly where your mobile site still needs to be trimmed. But apart from things like markup, image formats and naviga- tion, you should never forget about the most valuable thing to a mobile user: Battery power. Complex websites with a lot of JavaScript, CSS and Flash elements need a lot of processing power which means battery power. 75
  • 76. A History of the Mobile Web WAP: The stone age of mobile internet In the beginning, everybody in the business expected the mobile internet would be a cashcow. The WAP technology made it possible to send small texts on monochrome displays and black/white images in the WBMP format to the user’s cell- phones. The industry charged him for that by inventing compli- cated data transfer rates or strange subscription models. Many players expected to get rich by selling information which was already available for free on the internet. The Wireless Markup Language WML which was used by that time was another reason why the expected breakthrough did not happen as fast as some were thinking: While the different internet browsers (Internet Explorer and Netscape) allowed a “dirty” html, WML requested a valid XML structure and proper UTF-8 encoding. The usage of images was limited to black and white pictures which were a lot less sexy than what the users knew from their home computers. The first attempts to lift the mobile internet to the next level were made by NTT DoCoMo by inventing CHTML; and Microsoft’s Windows CE which worked best with HTML/3.2. Both of them were eventually replaced by XHTML/MP 1.0. Current Situation Today, 99% of all mobile browsers still support XHTML/MP 1.0, for many low-end devices this language still delivers the best results. On the other hand, the so-called Full Web Browsers have to support HTML/4.0, but they still have their differences when it comes to content-type or doctype and choose different views for distinguishing between mobile and desktop websites. The next big thing definitely is HTML5: Still under development, some of the latest browsers already support (parts) of this new standard. 76
  • 77. But HTML5 does not only bring new markup elements like <vid- eo/> and <audio/>, but also DOM Scripting, GPS access, CSS3 elements, CSS animations and the possibility of offline stor- age. At the same time, the W3C Device APIs and Policy Working Group (DAP) creates client-side APIs that will make it possible to develop web applications and web widgets that interact with device services such as calendar, contacts, camera, etc. How to adapt content for the mobile user Static Version Of course you can simply ignore the possibilities of automatic optimization and leave it up to the user: Create different versions of your content, let the user start with the most low- level version and let him decide manually which version he prefers for his device and usage patterns. However, since you are dealing with a user who is on the move and does not want to spend a lot of time discovering which ver- sion suits them best, this is probably not the best way to go… 77
  • 78. Automatic adaption technologies To adapt the content to different devices, you basically need two components: The first contains logic that detects the de- vice, knows about its browser and its characteristics — a device database. The second component interpretes these characteris- tics and adjusts the content accordingly. The most popular Open Source device database is the WURFL project1 which offers comprehensive information via XML. A lot of tools deliver APIs for detecting the browser, deliver- ing its properties and adjusting the content, the markup and the images. One example for an Open Source project which adjusts content is MyMobileWeb2, financed by public funds and Telefonica. But of course there are also commercial providers. Again, some concentrate on device data and detection; others focus on offering software platforms which adjust the content ac- cordingly. Examples for commercial device data and device detection providers: — dotMobi3 offers several APIs to access their device database DeviceAtlas4 and intelligent detection — DetectRight5 1) wurfl.sf.net 2) mymobileweb.morfeo-project.org 3) www.mtld.mobi 4) www.deviceatlas.com 5) www.detectright.com 78