conveyor generate cmake com.example.my-project
cd my-project
mkdir -p build/mac
cd build/mac
cmake ../..
make install
Install CMake and your distro's development tools. You may also need to install extra development libraries. On Ubuntu/Debian, try sudo apt install build-essential libx11-dev xserver-xorg-dev xorg-dev first.
Run these commands:
conveyor generate cmake com.example.my-project
cd my-project
mkdir -p build/linux
cd build/linux
cmake ../..
make install
In this tutorial we'll only build packages for the same OS you're running on, to avoid the need for cross-compilation.
Open conveyor.conf and replace the line that says machines = [windows.amd64, linux.amd64.glibc, mac.amd64, mac.aarch64] with
machines = windows.amd64
Open conveyor.conf and replace the line that says machines = [windows.amd64, linux.amd64.glibc, mac.amd64, mac.aarch64] with
machines = mac.amd64 (if on Intel) or machines = mac.aarch64 (if on Apple Silicon).
Open conveyor.conf and replace the line that says machines = [windows.amd64, linux.amd64.glibc, mac.amd64, mac.aarch64] with
machines = linux.amd64.glibc
It's self-signed, so you'll need to follow the instructions for how to install it. We'll fix that later.
Serving localhost
Above we use npm and the JavaScript serve module as a simple localhost web server. You can use any web server that properly supports
HTTP Content-Range requests. Some servers have bugs therefore we recommend using npx serve . even though this isn't a JavaScript project.
You can also use Caddyserver by running caddy file-server --browse --listen :3000. In particular
don't use the built in Python web server. It won't work correctly for Windows installs.
It's self-signed, so you'll need to follow the instructions for how to install it. We'll fix that later.
Change the const char *title string in src/main.cpp to something else.
Rebuild the binaries using CMake.
Edit conveyor.conf and change the version key to 2.
Run conveyor make site to regenerate the download site.
Run the program you installed in the previous step. You should see a window appear with a progress bar, the update be applied and
the app should then start, all without any user interaction.
This happens because the sample conveyor.conf file is using the app.updates = aggressive key. Learn more about update modes.
Run the program you installed in the previous step. You should see a window appear with a progress bar, the update be applied and
the app should then start, all without any user interaction.
This happens because the sample conveyor.conf file is using the app.updates = aggressive key. Learn more about update modes.
If on Debian derived distributions: Run apt-get update; apt-get upgrade to get the newest version of your app. Otherwise, there
is no automatic update supported right now, sorry.
Look in the output directory to find your new icons.
Basic, but functional.
Set the app.icons key to this:
app {
icons {
label = XY
gradient = blue
}
}
Rerun conveyor make rendered-icons and look at the results again.
Tip
Icon generation is meant for quick prototypes, internal tools, student projects and other cases where it's just not worth drawing a
pretty icon for your app.
Your installs will look for updates at the location set by app.site.base-url.
Set the app.license key to the name of your software license e.g. Apache 2, GPL-3 etc. Use SPDX codes if you aren't sure what to put here.
Upload your project source code to GitHub. In your config set this key: app.vcs-url = "https://github.com/you/your-project".
Run conveyor make site and create a GitHub Release with the contents of the output directory (you can skip the icon and download.html files, but need all the rest).
Your installs will update to whatever the latest release is.
You don't have to use GitHub. If you want to upload your site elsewhere make sure app.vcs-url is set to the URL of your source
repository and set app.site.base-url to the URL where the generated site will be uploaded to.
When your app.site.base-url key is set to localhost or a domain that ends in .local Conveyor is in testing mode and you can use
it for free. Once you set app.site.base-url to a real website you will be asked to pay and granted three license keys. Each key can
be used with one site URL. If you want different update channels (e.g. beta, testing) then you'll need to different site URLs and one
key for each.
Pick a site URL and set app.site.base-url to point to it, e.g. app { site.base-url = "https://downloads.example.com/myapp" }
Set the conveyor.billing-email key to the email address we can use to contact you for billing purposes.
Run conveyor make site.
You'll be asked to visit a payment URL where you can enter credit card data, and the conveyor.license-key key will be set to
a short random code. This key is linked to your chosen download site URL.
Pay us (boo/hooray!) and rerun conveyor make site. You should now get files that can be uploaded to your chosen site URL.
To release an update you just re-upload/overwrite the files at the site URL.
Automatic site uploads
If you aren't using GitHub Releases and your download site is accessible using SSH, Conveyor can upload the results for you.
Set app.site.copy-to to something like "sftp://example.com/var/www/example.com/downloads" i.e. the URL you'd use with sftp.
Then use conveyor make copied-site to build the site and upload it all in one step.
Your users must follow annoying instructions to install the app. That's because it's being self-signed, not signed by a
recognized certificate authority. Let's fix that.
When you ran your first command Conveyor announced it had generated a "root key" and that you should back it up. It also generated
two .csr files and printed the paths to them.
The root key is stored in your defaults.conf file and looks like this:
You must always back up your root key, even if you will later import signing keys you already have. The root key is also used for signing Mac update feeds, Linux packages and apt repositories.
It's represented as words so you can write it down with pen and paper for quick and safe offline backups. Remember to include the generation date!
All the different keys you need can be deterministically derived from this one root key.
How to buy new certificates
A certificate request file (CSR) can be uploaded to a certificate authority like Apple, DigiCert or ssl.com to get back a
certificate. The certificate links your public key to a verified personal or corporate identity and is included inside the app
binaries on Windows and macOS along with the signatures.
Log in using an Apple ID to the Apple developer programme. Joining will require a credit card payment.
Request a "Developer ID Application" certificate using the Apple Developer console. You can do this with any web browser and operating system, but you must be the account holder.
Upload the apple.csr file that was created next to your defaults.conf file when you created your root key above.
You'll get a .cer file back immediately. There is no review or approval process because the verification is linked to your credit card details.
Pick a certificate authority that sells Authenticode certificates. DigiCert is a good choice. Please refer to this FAQ section for more information on the difference between normal and EV certificates.
Upload the windows.csr file that was created next to your defaults.conf when you created a root key above. You will need to verify your identity with the CA.
Download the certificate in a format of your choice. Conveyor understands several but PEM works well.
Place your certificate files next to your defaults.conf. Name them apple.cer and windows.cer.