I was trying to publish an app to Ovi last month using Nokia’s free signing service (the Nokia-recommended way), and was a little confused with instructions spread across different sites and with different approaches. I mailed Ovi Publish to understand the process better. (Thanks to Kevin from Ovi Publish for patiently answering all my questions.) From my experience, here’s a one-page howto on Publishing to Ovi.
You can use these instructions if you:
- Want to publish a Qt app for a Nokia Symbian device to the Ovi Store
- Do not use any of these in TARGET.CAPABILITY in your pro file: NetworkControl, MultimediaDD, CommDD, DiskAdmin, AllFiles, DRM and TCB
- Have Nokia Qt SDK 1.0 (with Smart Installer) or Qt SDK 1.1 (beta/pre-release) in Windows platform to build the release executable
- Have 1 euro to spare on your credit card
Pre-submission instructions:
(Start on this at least 4 days before your app’s coding/testing is expected to complete)
1. Go to publish.ovi.com and register yourself (it’ll cost you 1 euro)
2. Make a request for Nokia UIDs by sending an email to publishtoovi.support@nokia.com with the following information:
- your Ovi Publish login id
- the company name under which you registered for Ovi Publish (if any)
- IMEI numbers of devices (upto 5) you intend to use for testing the app
3. You should receive a reply from Ovi Publish with a Terms and Conditions pdf (something like this (pdf)), asking you to print it, sign (or get signed by a company representative), scan and email that back to them. Sign on and scan all pages.
4. Once you email them the scan, you should receive the following:
- Five 8-digit hexadecimal numbers: Nokia UIDs (you can publish exactly one app with each UID)
- Three files (probably in a zip archive): <something>.cer, <something>.key and <somethingelse>.sis
5. Specify the version number of your app in the .pro file.
VERSION = 1.0.0
6. Create an icon for your app (256×256 pixels, PNG format) to be shown in the phone’s applications menu. Update your .pro file with a path to the icon.
symbian:ICON = icon.png
(Warning: Using PNGs as icon is undocumented afaik, but works. We’re supposed to use Tiny SVGs but the svgs I created out of Inkscape didn’t work – maybe they weren’t “tiny” enough.)
7. Identify the Symbian versions/devices you’re targeting the app for. If you support all Symbian versions, you can skip this step. If you support only Symbian^1 and ^3 (like me), include the following in your .pro file:
symbian {
supported_platforms = \
"[0x1028315F],0,0,0,{\"S60ProductID\"}" \ # only Symbian^1
"[0x20022E6D],0,0,0,{\"S60ProductID\"}" # and Symbian^3
# remove default platforms
default_deployment.pkg_prerules -= pkg_platform_dependencies
# add our platforms
platform_deploy.pkg_prerules += supported_platforms
DEPLOYMENT += platform_deploy
}
For including support for other Symbian versions, pickup the appropriate hex codes from here. If a user tries to install the app in a version of Symbian not specified in the list, he will see a warning during installation (something like: “This software is not supported in this platform. Continue installation / Cancel?”).
8. Include the vendor name in the .pro file. (If you specified a company name in step 2, the vendor name should be the company name. Else, the vendor name can be the name of the author of the app.)
symbian {
vendorinfo = "%{\"InsertVendorNameHere\"}" \
":\"InsertVendorNameHere\""
vendor_deploy.pkg_prerules += vendorinfo
DEPLOYMENT += vendor_deploy
}
Submission instructions:
(Start on this after your app’s coding/testing is complete.)
9. Create a screenshot of the app. You can get it by PrintScreen-ing on Qt Simulator running at phone resolution. But in case your app doesn’t work well on the simulator (like mine), you can temporarily hack your QMainWindow to draw itself to a file on the device.
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
...
// grab a screenshot 5 secs after startup
QTimer::singleShot(5000, this, SLOT(getScreenshot()));
}
void MainWindow::getScreenshot()
{
QPixmap pixmap = QPixmap::grabWidget(this);
pixmap.save("E:/app_screenshot.png", "PNG");
qDebug() << "Saved screenshot";
}
One way to transfer this image from your phone to your PC is to choose Connectivity > USB > Mass storage in the phone and then connect the phone to the PC by USB cable.
Ovi accepts only square images as screenshots (why that is the case when my phone doesn’t have a square screen is one of those life’s little mysteries). So open up the screenshot in your favourite image editor (Gimp or Inkscape or MS Paint or whatever) and cut out a square portion or add a square background (256×256 or bigger, PNG or JPG format).
10. You now have two options to create the .sis file for submission to Ovi Publish. Option A is dead simple, but needs you to have a very recent Qt Creator. Option B is a tad complexer, but is also nicer as it lets us try out the .sis file before submission. Make your pick.
Option A:
- Check your Qt Creator’s version (in Windows, where you will be compiling the app for shipping). If it’s anything less than 2.2.81, install the latest bleeding-edge snapshot version. (If you compile Qt Creator yourself from source, make sure you have commit 8d781af).
- Open your project in this uber-recent version of Qt Creator, select the Symbian Device build target. Choose Build > Publish Project and follow instructions from the wizard that opens up.
- In the wizard, change the Application UID field to one of the Nokia UIDs sent to you in step (4) by Ovi Publish.
- Once you hit the Commit button in the wizard, you might have to wait a while until the Open Containing Folder button gets enabled. When it does, you can click that to pickup <yourapp>_installer.sis from that folder. Copy that file to someplace safe (maybe add it to your version control). This .sis is what you’ll be uploading to Ovi Publish. You cannot try out this .sis on the device, though.
- During step iv, Qt Creator changes the TARGET.UID3 specified in your pro file. To continue testing the app on your device (during further development), you might want to revert the UID to the earlier value.
Option B:
- Change the TARGET.UID3 specified your .pro file to one of the Nokia UIDs sent to you in step (4) by Ovi Publish.
- Open Qt for Symbian Command Prompt from the Windows start menu and run the following commands. Use the local path to the .cer and .key files you received in step (4).
make clean rm *.pkg rm *.sis qmake make release-gcce make sis QT_SIS_CERTIFICATE=path/to/something.cer QT_SIS_KEY=path/to/something.key
- Open <yourapp>_installer.pkg in a text editor. You should find something like:
#{"appname installer"},(0xA000D7CE),1,0,0where appname is the name of your app and 1,0,0 is the version number you specified in step (5). The UID has to be either 0x2002CCCF or 0xA000D7CE. If it’s anything else, change the UID to 0x2002CCCF.
- You should also find a line specifying where it should get installed on the device:
"C:/path/in/dev/env/to/app/appname.sis" – "c:\private\2002CCCE\import\appname.sis"
Change the “c:\private\2002CCCE\import\” in the right hand side to “!:\private\2002CCCE\import\”. The “!” tells the Symbian packager to allow the user of the app to choose a drive during installation.
- Go back to the open Qt for Symbian Command Prompt window and run:
make installer_sis QT_SIS_CERTIFICATE=path/to/something.cer QT_SIS_KEY=path/to/something.key
This creates a <yourapp>_installer.sis in the same folder. Copy that file to someplace safe (maybe add it to your version control). This .sis is what you’ll be uploading to Ovi Publish.
- Pick a test device (whose IMEI you sent to Ovi Publish in step (2)), and install on it the .sis file you received in step (4).
- You can now try out the <yourapp>_installer.sis on the test device. Apart from being able to make a test run of the actual binary you’re going to submit, you can get a feel for what the user experience would be during installation. (For eg., I noticed that the installation fails if there’s no internet, even if the device has the required version of Qt.) You can also make sure that your (or your company’s) name and the app’s version number are showing up correctly during installation.
11. Login to publish.ovi.com, and hit Create New Content. Choose Qt Based App, answer a few legal questions, and hit Continue. Fill the form that follows, making use of the icon you created in step (6) and the screenshot you created in step (9). Hit Create.
12. Click on the Content files tab. Click the button next to Qt file and upload the <yourapp>_installer.sis file you created in step (10).
13. Enter the Nokia UID that you used in step (10).
14. Select Requesting Nokia Signing as the Symbian Signed Type. Hit Upload & Continue
15. For the platforms/devices that you identified in step (7), specify the amount of testing done. Leave the rest of the platforms as is. Click Next
16. Select the countries to publish in, hit Next, select the languages that it works with, hit Save. Then click on the Submit to QA button under the Distribution tab. You might have to wait 6-8 working days for the QA to complete.
17. Be happy.
References:
[1] Guide_to_Publishing_Qt_Applications_to_the_Ovi_Store
[2] Qt content Q&A
[3] Ovi Publisher Guide (pdf)
[4] Packaging and signing
Update:
11/May/2011: Commands order changed in step 10 B (ii) – the .pkg files created by qmake shouldn’t get deleted.