Building for macOS

This topic describes the Qbs features specific to macOS.

Note: Qbs does not yet support the Swift programming language.

The xcode module contains properties and rules for Xcode-based development.

Building User Interfaces

The ib module contains properties and rules for building Interface Builder documents, storyboards, asset catalogs, and icon sets.

Creating App Bundles

The bundle module contains properties and rules for building and working with Core Foundation bundles (application bundles and frameworks) on Apple platforms.

To build an application product as a bundle, or a dynamic or static library product as a framework, add a dependency on the bundle module and set the bundle.isBundle property to true:

Depends { name: "bundle" }
bundle.isBundle: true

Qbs also provides a number of powerful features to assist in creating the Info.plist file that is part of your bundle. In fact, you do not need to provide an Info.plist file at all. Instead, Qbs will generate one automatically with the necessary keys, based on the values of module properties set in the product.

If you do specify an Info.plist file, Qbs may still inject additional keys into the final output from other sources. One notable source of Info.plist keys are partial Info.plist files which are generated as a result of compiling other resources like asset catalogs, XIBs/NIBs, and storyboards.

You may also use the bundle.infoPlist property to apply a set of key-value pairs to be added to the final Info.plist. This can be used instead of or in addition to an actual Info.plist file on disk.

Multiple Architectures and Build Variants

Qbs uses multiplexing to create multi-architecture fat binaries and multi-variant frameworks, where a single framework can contain both a release and debug build of a library on Apple platforms.

You can set the qbs.architectures property to a list of CPU architectures (such as x86, x86_64, armv7a, armv7k, and arm64), and the qbs.buildVariants property to a list of build variants (such as debug and release), and Qbs will transparently perform the necessary steps to produce the various artifacts and combine them into a single bundle.

Since the individual build configurations are completely independent of one another, you can continue to use conditional branches in your projects such as the following:

Properties {
    condition: qbs.buildVariant === "release"
    cpp.optimization: "small"

Building macOS Disk Images

The AppleDiskImage and AppleApplicationDiskImage items have a dependency on the dmg module. The former represents a product that is a basic Apple disk image, while the latter extends the former to create a drag 'n' drop disk image installer used for installing single application bundles.

For example, the following code snippet creates a macOS disk image with a custom background and icon layout:

AppleApplicationDiskImage {
    targetName: "cocoa-application-" + version
    version: "1.0"

    files: [
        // comment out the following line to use a solid-color background
        // (see dmg.backgroundColor below)

    dmg.backgroundColor: "#41cd52"
    dmg.badgeVolumeIcon: true
    dmg.iconPositions: [
        {"x": 200, "y": 200, "path": "Cocoa"},
        {"x": 400, "y": 200, "path": "Applications"}
    dmg.windowX: 420
    dmg.windowY: 250
    dmg.windowWidth: 600
    dmg.windowHeight: 422 // this includes the macOS title bar height of 22
    dmg.iconSize: 64

In addition, Qbs supports multi-language license agreement prompts that appear when the DMG is opened, with full Unicode and rich-text formatting support.

© 2018 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.