Build File

Build file for Android and iOS compilation

Specify the following in the build file:

  • Android specific settings
  • iOS specific settings
  • SPM 3rd party packages

Mandatory attributes for preparing a release version of an app

Building an iOS app for release

Apple's app creation process includes signing of its components and generating a provision profile file. Below are the important attributes that need to be set in the build.yaml file before creating an iOS app.

Section

Attribute

provision-profile

Your iOS mobileprovision file

certificate:

Your iOS certificate

export-method:

  • ad-hoc
  • app-store

Choose between ad-hoc and app-store mode. Always set to app-store when deploying for consumption.

supported-interface-orientations:

  • portrait
  • upside_down
  • landscape_left
  • landscape_right

Use any of its elements to set the orientation of your application on an iPhone device.

device-family:

  • iphone
  • ipad
  • universal

Specify the platforms on which the application can be used.

plist:

  • CFBundleShortVersionString
  • CFBundleVersion
  • NSLocationWhenInUseUsageDescription
  • NSCameraUsageDescription
  • NSPhotoLibraryUsageDescription

Set CFBundleShortVersionString to store the version number.

Set CFBundleVersion to store the build number.

NSLocationWhenInUseUsageDescription: a notification that explains to users why the app needs access to their location while it is running in the foreground.

NSCameraUsageDescription: Take pictures from camera.

NSPhotoLibraryUsageDescription: Choose a photo from your library.

entitlements-file

Set the path to the .entitlements file.

app-delegate-file

Set the path to the AppDelegate.swift file.

icons

Set the necessary icons for the app.

Building an Android app for release

Attribute

Description

build-type

  • Debug
  • Release

Set the build-type to either Debug or Release mode. Always set to Release when deploying for consumption.

key-store-properties

Set the path to the keystore.properties file

google-api-key

Set the API Key for Google Platforms (when needed).

manifest-file

Set the path to the AndroidManifest.xml file

permissions: []

Set Android permissions to access any of the user's device's protected features.

Example:
[CAMERA, BLUETOOTH, BLUETOOTH_ADMIN, ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION][CAMERA, BLUETOOTH, BLUETOOTH_ADMIN, ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION]

version-name

Set version-name to store the application version.

version-code

Set version-name to store the application version code.

icons

Set the app's appropriate icons.

SPM

Attribute

Description

url

search-paths

linked-libs

Adding extra properties to the Build file to improve Responsiveness and User Experience

Build file with Deep Link information Example

The deep link feature can build impressive mobile app shortcuts to automate tasks and increase overall efficiency. Its idea is to tell apps what links and certain app pages they should detect and open to perform a given task.

A deep link begins with a project-uri and continues with the rest of the link:

                      <project-uri>://<anything-You-Want>

Add this to the plist section of the iOS part of your build file:

plist:
  - key: CFBundleURLTypes
    type: list
    values:
      - type: dict
        values:
          - key: CFBundleURLName
            type: string
            value: project-id
          - key: CFBundleURLSchemes
            type: list
            values:
              - type: string
                value: project-uri

You need to set the values for CFBundleURLName and the CFBundleURLSchemes items array.
For example, we set project-uri as the value for the CFBundleURLSchemes items array.

And also set values to the properties of the intent-filters section of the Android part of your build file:

intent-filters:
  - action: android.intent.action.VIEW
    scheme: project-uri
    categories: [android.intent.category.DEFAULT, android.intent.category.BROWSABLE]

The Build file with sample entries

# Build file with examples
spm:
  - url: https://github.com/nicklockwood/Expression
    from: 0.13.1
    path:
    branch:
    exact:
    revision: 
    search-paths: []
    linked-libs: []

search-paths: []
linked-libs: []

# Search paths for 
search-paths: []
linked-libs: [Expression] 

# IOS specific settings
ios:
  name: m1
  id: com.scade.m1
  device-family: iphone # iphone, ipad or universal
  supported-interface-orientations: ['portrait'] # portrait, upside_down, landscape_left or landscape_right
  supported-interface-orientationsiPad: ['portrait']
  entitlements-file: 
  app-delegate-file:
  simulator:
    os: 12.1
    output: m1/.build/ios-simulator
    extra-args:
    search-paths: []
    linked-libs: []
  device: 
    os: 12.1
    output: m1/.build/ios-device
    extra-args: 
    search-paths: []
    linked-libs: []
  mac:
    os: 10.11
    output: m1/.build/scade-simulator
    extra-args: 
    search-paths: []
    linked-libs: []
  # Please specify your mobileprovision file and your security certificate
  sign:
    provision-profile: /Users/flangel/certs/FrankBlackDeviceDev.mobileprovision
    certificate: /Users/flangel/certs/FrankBlackDeviceDevPrivate2.p12
  icons:
    iphone: # or ipad, sizes: 20X20, 29X29, 40X40, 60X60, 76X76, 83.5X83.5
      60X60_2X: ./res/icon1.png
      76X76_2X:
      76X76_3X:
      83.5X83.5_2X:
    marketing:
      1024X1024_1X:
  plist:
    CFBundleShortVersionString: string# 1.0
    CFBundleVersion: string# 1
    NSLocationWhenInUseUsageDescription:
    NSCameraUsageDescription: Take pictures from camera
    NSPhotoLibraryUsageDescription: Choose a photo from your library
  - key: CFBundleURLTypes
    type: list
    values:
      - type: dict
        values:
          - key: CFBundleURLName
            type: string
            value: com.Scade.UgSystemDemo
          - key: CFBundleURLSchemes
            type: list
            values:
              - type: string
                value: scadedeeplink

# Android specific settings
android:
  name: m1
  id: com.scade.m1
  version-name: 1.0.0
  version-code: 1
  build-type: Debug
  key-store-properties:
  google-api-key: 
  manifest-file:
  permissions: []
  armeabi-v7a:
    output: m1/.build/android-armeabi-v7a
    product-path: m1/Product/android-armeabi-v7a
    extra-args:
    search-paths: []
    linked-libs: []
  arm64-v8a:
    output: m1/.build/android-arm64-v8a
    product-path: m1/Product/android-arm64-v8a
    extra-args:
    search-paths: []
    linked-libs: []
  x86:
    output: m1/.build/android-x86
    product-path: m1/Product/android-x86
    extra-args:
    search-paths: []
    linked-libs: []
  x86_64:
    output: m1/.build/android-x86_64
    product-path: m1/Product/android-x86_64
    extra-args:
    search-paths: []
    linked-libs: []
  intent-filters:
  - action: android.intent.action.VIEW
    scheme: scadedeeplink
    categories: [android.intent.category.DEFAULT, android.intent.category.BROWSABLE]
  icons:
    mdpi: ./res/icon1.png
    hdpi:
    xhdpi: 
    xxhdpi: