Jolla and SailfishOS
Programming Jolla SailfishOS Harbour Apps
The App-Store supported by Jolla is called "Harbour".
For an App to have a chance to be accepted for Harbour by the Jolla QA team it has to pass the RPM validator build into the SDK.
It turns out that this check, performed at the end of the development cycle, when you think you are done and you just have to ship the product, can become quite an inconvenience. The following sections list a couple of things I ran into writing my first Harbour approved App "D-Bus Inspector".
Running the RPM validator
Run it immediately after the SDK has created your new project.
- It really sucks, to rename an ill named project by hand.
- It is much easier to dump it and let the SDK create a new one with a valid name.
BTW, the RPM validator is only run if you deploy the project:
- Set your project to:
Build: Release
- Set your project to:
Deploy: Deploy by building an RPM package
- Run:
Build | Deploy Project "..."
App names
Before you even start programming, THINK about your app's name.
Harbour has restrictions on what a valid app-name is. If you mess up the RPM validator complains:
:-1: error: RPM Validation: Package name: [helloJolla] Name is not valid. Must start with 'harbour-', matching '^harbour-[-a-z0-9_\.]+$'. [helloJolla] Please see our FAQ here: https://harbour.jolla.com/faq#Naming
There is an FAQ for what names are accepted and why, that unfortunately does not mention, that you can only use:
- Lower case characters
- Numbers
- Hyphens
- Underscores
- Dots
It seems that the general consensus is to use hyphens to separate the parts of an app name, like:
harbour-dbus-inspector
The harbour prefix is mandatory for the app name, app's icon names and a couple of other files in the project (see the FAQ).
If you mess up the name you have to rename not only the files, but also all references, including those in the configuration files.
That is no fun!
Custom types
If you import custom types (e.g. from you C++ code) into QML via
qmlRegisterType<>make sure your URI is well formed, like:
harbour.dbus.inspector.DSessionBusServicesModel
If you mess up the RPM validator will annoy you with messages, that your package is not allowed:
:-1: error: RPM Validation: QML files: [/usr/share/harbour-dbus-inspector/qml/pages/DSessionBusServicesPage.qml] Import 'dbus.inspector.DSessionBusServicesModel 1.0' is not allowed [harbour-dbus-inspector] Please see our FAQ here: https://harbour.jolla.com/faq#QML_API
Here is the project setup for my D-Bus Inspector App, as accepted by Jolla's Harbour QA team: