Jolla and SailfishOS

Programming Jolla SailfishOS Harbour Apps

2017-04-05 04:01

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.

BTW, the RPM validator is only run if you deploy the project:

  1. Set your project to:
    Build: Release
  2. Set your project to:
    Deploy: Deploy by building an RPM package
  3. 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:

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: