Nokia Qt SDK in action - Qt developer days 2010


Published on

Presentation for Qt developer days 2010 in Munich covering the details of using Nokia Qt SDK and publishing the applications to Ovi store. Focusing on Symbian but covering the current status of maemo. Explains the Ovi Store Symbian Signing Service.

Published in: Technology
No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Nokia Qt SDK in action - Qt developer days 2010

  1. 1. Nokia Qt SDK in Action Qt Developer Days 2010 12.10.2010 Pekka Kosonen Slides are available in
  2. 2. Soup of today Ingredients are: 1. Overview and demo of Nokia Qt SDK 1.0 2. Taking your Qt app to Nokia platforms using Nokia Qt SDK • The topics that you need to know about Symbian and Maemo and how to handle those. 3. Publishing to Ovi and Ovi Store Symbian Signing Service 4. Spicing up the soup with platform SDKs • When you might want to tap into platform specific SDKs – focusing on Symbian. Slides are available in
  3. 3. have now Where we will be have What we used to Slides are available in
  4. 4. Now - Nokia Qt SDK 1.0 overview Install. All in just one package. Easy to customize and update. Simulate. Fast, easy to use and lightweight simulator. Create. Qt Creator - Easy to use IDE Install Develop Simulate Deploy*
  5. 5. Simulator • Quick launch • Simulate Qt Mobility project features • Scripting possibilities • Skins for different platforms / form-factors
  6. 6. On-device Debugging Debugging host Qt Creator
  7. 7. Switching Target Platforms • Select Symbian or Maemo target • Build, deploy and debug • Supports also switching the target to Remote Compiler or Symbian Emulator
  8. 8. Remote compiler • For Mac and Linux local builds for Symbian are not supported • Builds can be done remotely using remote compiler – When installing Nokia Qt SDK select remote compiler from the „Experimental‟ section – Your application sources are sent to a Nokia server where the build is done – You get back a ready installer package (sis for symbian, deb for maemo)
  9. 9. Coding demo 1 //geoflickr, using location API, fetch //pictures from flickr taken near you. //run in simulator, N8 & N900 Geoflickr – simulator, symbian, maemo
  10. 10. Taking your Qt application to Nokia platforms The topics to consider
  11. 11. Taking your app to Nokia platforms – the laundry list Symbian - minimum laundry list Maemo - minimum laundry list 1. Optimize the app 1. Optimize the app 2. Get an UID 3. Figure out the capabilities 4. Do an icon 2. Do an icon 5. Modify .pro file 3. Modify .pro file 6. Test on several devices 4. Test on the Nokia N900 7. Create a sis file with Nokia Qt 5. Tweak the debian files for SDK Nokia Qt SDK 8. Sign the sis file 6. Create the debian package 9. Take smart installer into use 10. Distribute the embedded pkg 7. Distribute
  12. 12. Optimization • Know the limitations of the target devices. • To provide the best experience optimize – UI – Resource usage: Memory, network usage, speed • UI optimization, atleast: MainWindow w; w.showFullScreen(); //w.showMaximized(); • Network usage : avoid downloading huge packages, atleast if not in WLAN • Consider the usage of Qt Webkit in your application.
  13. 13. Application features • When taking your application from desktop to smartphones don‟t stop when you get it working. Think about how you can improve the user experience with mobile specific features. • Qt + Mobility offers already a pretty comprehensive set of features. – You might still want to spice up your application with some platform specific use cases like home screen.
  14. 14. Symbian platform security - background 1. Capability model – APIs protected with capabilities – Indicates application signing 2. Process identity – Each process has a unique identifier (UID) 3. Data caging – Apps can‟t access all data on the device • undamentals_of_Symbian_C%2B%2B) • html • Symbian signed test criteria :
  15. 15. Capabilities Ovi Store Symbian Signing Service and signing Capability Group Capability Name Self-Signed Open Signed Open Signed Express Signed Certified Online Offline Signed User Capabilities LocalServices Yes, with user Yes Yes Yes Yes Location confirmation at install time NetworkServices ReadUserData UserEnvironment WriteUserData System PowerMgmt No Yes Yes Yes Yes Capabilities ProtServ ReadDeviceData SurroundingsDD SwEvent TrustedUI WriteDeviceData Restricted CommDD No No Yes No Yes Capabilities DiskAdmin NetworkControl MultimediaDD Device AllFiles No No No No See below Manufacturer DRM Capabilities TCB
  16. 16. UID for Symbian applications • Each process has a unique identifier (UID) • Can be obtained from Ovi Store Symbian Signing Service (or Symbian signing) • No cost included • Defined in the applications .pro file symbian { #application UID here TARGET.UID3 = 0x21234567 } • For testing you can use any UID starting with 0xE
  17. 17. Figuring out the capabilities • Majority of Qt applications will manage with the user and system capabilities. – With few known exceptions, f.ex Bearer Mgmt APIs certain use cases require NetworkControl • How do I figure out the capabilities? – Documentation – Try, Error, Fix… – Use Symbian platform tooling – demo later on…
  18. 18. Icon • Use SVG-T • See examples, f.ex „C:NokiaQtSDKExamples4.6animationanimatedtiles‟ includes symbianpkgrules.pri file which defines the following vendorinfo = "; Localised Vendor name" "%{"Nokia, Qt"}" "" "; Unique Vendor name" ":"Nokia, Qt"" "" examples_deployment.pkg_prerules += vendorinfo DEPLOYMENT += examples_deployment isEmpty(ICON):ICON = $$PWD/qt.svg
  19. 19. Symbian platform security – “how to” in Qt • Everything you need in a Symbian OS MMP file, can be defined in the Qt .pro file – Symbian-specific extensions should be defined inside a special block as shown below TARGET = HelloWorld // Not Symbian-specific TEMPLATE = app // Not Symbian-specific symbian*:{ // LIBS-keyword as such is not Symbian-specific, but bitgdi library is LIBS += -lbitgdi ICON = ./images/myIcon.svg TARGET.UID2 = 0x100039CE TARGET.UID3 = 0xA000017F TARGET.SID = 0xA000017F TARGET.VID = 0x70000001 TARGET.CAPABILITY = NetworkServices // Qt app stack typically larger than 8kb TARGET.EPOCSTACKSIZE = 0x5000 // Min 128Kb, Max 16Mb TARGET.EPOCHEAPSIZE = “0x20000 0x1000000” } • This way the same .pro file would potentially work in other environments as well 2
  20. 20. Platform security & signing summary • Symbian native apps need to be signed. Needed signing process depends on applications capabilities – In case Restricted or Manufacturer capabilities are needed signing needs to happen in Symbian Signed, where a publisher ID is needed (and you need to have a company to get one) • CommDD ,DiskAdmin, NetworkControl, MultimediaDD & AllFiles, TCB, DRM • You should very rarely run into this situation. • Individuals can publish to Ovi store and get their application signed in Ovi Store Symbian Signing Service – free of charge
  21. 21. Packaging your application
  22. 22. Remember the laundry list? Symbian - minimum laundry list Maemo - minimum laundry list 1. Optimize the app 1. Optimize the app 2. Get an UID TODO 3. Figure out the capabilities 4. Do an icon 2. Do an icon 5. Modify .pro file 3. Modify .pro file 6. Test on several devices 4. Test on the Nokia N900 7. Create a sis file with Nokia Qt 5. Tweak the debian definitions SDK for Nokia Qt SDK 8. Sign the sis file 6. Create the debian package 9. Take smart installer into use 10. Distribute the embedded pkg 7. Distribute
  23. 23. Publishing Qt apps for maemo • First create the debian package and test it with Nokia Qt SDKs maemo tools (MAD) on N900 • The debian package created by Nokia Qt SDK is a “development” version. • To make one for publishing a bit of tweaking is needed. For details see
  24. 24. Smart Installer for Qt for Symbian The opportunity The The solution A Smart Installer tool that +100M Symbian devices problem checks whether needed could run cross-platform Qt Qt libraries need to applications already during Qt version is available on be post installed – the device – and if not, it this year most consumers will handle the installation might not bother Details •Tool called Smart Installer for Symbian devices •Comes with Nokia Qt SDK •A small binary to be packaged together with the Qt application targeted for Symbian devices •The Smart Installer will download OTA the needed Qt & Mobility version to the handset if it is not already present
  25. 25. Tools & SDKs – Smart Installer your_app.sis 1 Adm 3 2 Deps Check 4 Qt +Webkit +Mobility
  26. 26. Smart installer overview Embedded.sis • Scenario is Application.sis Smart installer.sis – Sign your application – Create a embedded package that contains • Your application • Smart installer – Publish the embedded package • Qt for Symbian SDKs qmake supports automatic creation of the package. • • alert/2010/08/02/qt-content-qa
  27. 27. smart installer and Qt versions • Note; The newest Qt versions may not be available for application distribution i.e exist in Smart Installer server. – Once you build an app with Qt the dependency is automagically set to that version (f.ex 4.7.0). • If that version is not available for the target device smart installer will fail – Using what is available in Nokia Qt SDK i.e Qt 4.6.3 is the current commercial solution – For checking what is available for distribution : – If you‟re using mobility or Qt Webkit the dependencies will be created automagically by qmake and those components will be installed along with your application • Smart installer sis file is in „NokiaQtSDK SymbianSDK‟ • Docs in „NokiaQtSDK SymbianSDK Nokia_Smart_Installer_for_Symbian_Developers_Guide_v1_0_en.pdf‟
  28. 28. Steps to take smart installer into usage • Build the app – Qmake – Make release-gcce • Now depending on the signing process you select 1. Ovi Store Symbian Signing Service : use the certificates you‟ve gotten from them to sign the application and the embedded package. Test. 2. Symbian signing : sign the application with your published ID. Send the application for signing. Once you have the signed application back create the embedded package. • Let‟s go through the creation of package for Ovi publishing (using Ovi Store Symbian Signing Service) next
  29. 29. Creating the package for Ovi publishing Planning to publish collindingmice (which I definitely own and have rights to publish ;) qmake make release-gcce make sis QT_SIS_CERTIFICATE=publisherid.cer QT_SIS_KEY=publisherid.key make installer_sis QT_SIS_CERTIFICATE=publisherid.cer QT_SIS_KEY=publisherid.key
  30. 30. To support Symbian^3 • After you‟ve run qmake patch the .pkg files (_template.pkg and _installer.pkg) • Locate the following lines ; Default HW/platform dependencies [0x101F7961],0,0,0,{"S60ProductID"} [0x102032BE],0,0,0,{"S60ProductID"} [0x102752AE],0,0,0,{"S60ProductID"} [0x1028315F],0,0,0,{"S60ProductID"} • Add Symbian^3 product ID to the list and save the file [0x20022E6D] ,0,0,0,{"S60ProductID"}
  31. 31. Patching continues… • Locate the UID from installers pkg file ; SIS header: name, uid, version #{"collidingmice installer"},(0xA000D7CE),1,0,0 • Change the UID to 0x2002CCCF #{"collidingmice installer"},(0x2002CCCF),1,0,0 • Set the vendor name to both packages ; Localised Vendor name %{"Vendor"} ; Unique Vendor name :"Vendor" • Replace “Vendor” with your Ovi store publisher name
  32. 32. Let‟s have a look at how it‟s done • TODO add the video here
  33. 33. Publishing
  34. 34. Final step in the laundry list Symbian - minimum laundry list Maemo - minimum laundry list 1. Optimize the app 1. Optimize the app 2. Get an UID 3. Figure out the capabilities 4. Do an icon 2. Do an icon 5. Modify .pro file 3. Modify .pro file 6. Test on several devices 4. Test on the Nokia N900 7. Create a sis file with Nokia Qt 5. Tweak the debian definitions SDK for Nokia Qt SDK 8. Sign the sis file 6. Create the debian package 9. Take smart installer into use 10. Distribute the embedded pkg 7. Distribute the .deb
  35. 35. Ovi Store: 6 numbers you should know 2.5 Million 30 91 downloads daily Languages operators 135+ 190+ 90% Mobile consumers devices countries w/local Store
  36. 36. Our goal is simple Let‟s make it easy to put your app in the hands of millions of consumers Consumers + Developers + Financial Enablers = $£€¥
  37. 37. Qt apps on Ovi store • Currently : – Qt apps can be published for Symbian and Maemo devices using Qt 4.6.3 – Currently 8 devices on the market (N8, X6, N97 mini, E6, 5800, 5530, 5230 and N900) are supported. • Early 2011 – Targeting +20 devices (by end of this year) that will cover the most popular devices causing downloads from the store. – Qt 4.7 based application distribution enabled* * 4.7 apps can be deployed to N900 already once PR 1.3 is available
  38. 38. Publishing Qt apps to Ovi • Register as an Ovi publisher – For individuals cost is 1 euro • For maemo no signing is needed, after testing one can move on directly to publishing • For Symbian – Ovi signing and publishing (which is also free) for individuals – Or symbian signed (in case of restricted/manufacturer capabilities) for companies • •
  39. 39. Publish to Ovi - registration
  40. 40. Ovi Store Symbian Signing Service Registering : 1. Emails publisher support ( to start the registration process. After accepting and signing the terms and conditions… 2. Publisher provides IMEI numbers for up to 5 devices for testing purposes 3. Ovi Publish support sends publisher UIDs, a cert installer, and developer cert/key pair for testing their app Publishing: 1. Ovi Publisher packages the SIS file using the UID provided and tests on their device making sure is tested against Symbian Signed test criteria 2. Ovi Publisher submits their app to the intake tool 3. QA will test the app based on Nokia content and store guideline, specific operator guideline and Symbian Signed test criteria. If it passes, it will be express signed by Nokia and published into Ovi Store
  41. 41. Publishing summary • Use smart installer for symbian • Individuals can publish their apps and get the applications signed using „Ovi Store Symbian Signing Service‟ – – registration to Ovi publishing costs 1€, after that it‟s free of charge. • We‟re continuosly adding new devices to be supported for Qt application distribution – currently 8 devices supported.
  42. 42. 5. Spicing up the development environment with platform specific tools
  43. 43. Tools and SDKs Nokia Qt SDK Symbian SDK Qt 4.6.3 Native APIs Qt Mobility Plug-in APIs Simulator Documentation On-device debugging Emulator Simplified Symbian SDK + additional tooling in For extended Carbide access Qt libraries for Symbian • Framework-only Enough for many • Documentation applications
  44. 44. Cases where Symbian SDK is needed • Can‟t use all Symbian C++ APIs without Symbian SDK – Examples : homescreen, … • Emulator provides improved platform look and feel – Menus – UI is more closer to the truth than in Qt simulator • Communication between multiple processes – Qt app to Qt app f.ex • Investigate platform specific painpoints like platform security • SDK available in – You can further spice it up with internal APIs from Symbian foundation
  45. 45. Using platform specific APIs from Qt
  46. 46. Paradigms for platform specific code 1. Same source files, #ifdef platform specific code 2. Isolate platform specific parts to separate files to include 3. Write a separate library
  47. 47. Code example 1 same source files, #ifdef platform specific code #include "signer.h" // Continued… // Convert signatureBase into a Symbian string: #ifdef Q_OS_SYMBIAN TPtrC8 basePtr(reinterpret_cast<const TUint8*>(signatureBase.constData()), #include <hash.h> signatureBase.length()); #else TBuf8<1024> baseString; #include <openssl/hmac.h> baseString.Copy(basePtr); #endif // Create the raw signature: QByteArray Signer::sign(QByteArray const TPtrC8 hashedSignature(hmac->Hash(baseString)); &signingSecret, QByteArray const &signatureBase) signature = QByteArray(reinterpret_cast<const char const *>(hashedSignature.Ptr()), { hashedSignature.Length()); QByteArray signature; #ifdef Q_OS_SYMBIAN CleanupStack::PopAndDestroy(hmac); // Convert signingSecret into a Symbian string: #else TPtrC8 keyPtr(reinterpret_cast<const unsigned char *md = new unsigned char[32]; TUint8*>(signingSecret.constData()), unsigned int md_len = 32; signingSecret.length()); HMAC(EVP_sha1(), signingSecret.constData(), signingSecret.length(), TBuf8<100> keyVal; reinterpret_cast<const unsigned char *>(signatureBase.constData()), keyVal.Copy(keyPtr); signatureBase.length(), md, &md_len); signature = QByteArray(reinterpret_cast<const char *>(md), md_len); // Initialize the signing-related objects: delete[] md; CSHA1 *sha1 = CSHA1::NewL(); #endif CHMAC *hmac = CHMAC::NewL(keyVal, sha1); CleanupStack::PushL(hmac); return signature.toBase64(); }
  48. 48. Code example 2 Isolate platform specific parts to separate files to include ... HEADERS += qbluetoothaddressdata.h # public header // bluetoothdiscovery.cpp SOURCES += bluetoothdiscovery.cpp # public class implementation ... ... #ifdef Q_OS_SYMBIAN symbian { #include ... ”bluetoothdiscovery_symbian_p.h” HEADERS += bluetoothdiscovery_symbian_p.h # #else Symbian private class header #include ”bluetoothdiscovery_stub_p.h” SOURCES += bluetoothdiscovery_symbian_p.cpp # Symbian private class source code // Stub for all other platforms LIBS += -lesock #endif -lbluetooth TARGET.CAPABILITY = LocalServices NetworkServices ReadUserData UserEnvironment WriteUserData }
  49. 49. Example 3 Write a separate library • Best resource is an_C%2B%2B_Together – Based on symbian-c-together/view • Provides a separate library for Symbian that isolates the use of Bluetooth Symbian APIs and provides a Qt like interface for it • Other resources: – For guidance on maemo see the maemo for mobile document in • LibLocation • LibCityinfo • MCEDev • ICD2
  50. 50. Using platform specific Tools with Qt
  51. 51. Symbian SDK Installation
  52. 52. Symbian – platform security demo1 • Run an app in simulator that renames files in c:sysbin. Works just fine. • Run in Symbian emulator and see what happens
  53. 53. Symbian – platsec demo2 • Run an application with no capabilities on simulator that uses location and network connectivity. Works just fine. • Run on symbian emulator and see what happens.
  54. 54. Maemo Platform SDK • Maemo Application SDK (called MAD) is included in Nokia Qt SDK • Maemo platform SDK is Scratchbox based – Hosting OS : Linux – No Qt Creator integration available.
  55. 55. Summary • Nokia Qt SDK 1.0 makes it easy to bring Qt applications to Nokia platforms – Spicing the SDK up with platform SDKs gives you access to (almost) all the features the devices offers + additional tooling • Once you‟ve wriggled through the signing jungle once it‟s piece of cake. • Publishing to Ovi store is in majority of cases free and open for individuals. • All these great things can only lead to… Slides are available in
  56. 56. Time for you to start thinking tricky questions while I prepare for final demo… Slides are available in
  57. 57. Still got one great demo to proof the power of Qt on Nokia and desktop platforms Slides are available in
  58. 58. Important Links • • • • • • • • •,descCd-tableOfContents.html