Trapeze is part of the Ionic Ecosystem →
Skip to main content

Configure your mobile
apps with confidence.

A powerful native and cross-platform mobile project configuration toolbox

  • Easy to Use

    Trapeze modifies native iOS and Android projects with a simple configuration-driven experience or Node.js-based API.

  • Great Mobile Support

    Trapeze works with most popular mobile frameworks—traditional iOS and Android, Capacitor, React Native, and Flutter.

  • CI/CD Ready

    Trapeze integrates well into Mobile CI/CD and DevOps services like Appflow for powerful project automation at scale.

Automate

Automate your tasks.

Automate many common iOS and Android configuration tasks with a single YAML-based configuration.

platforms:
ios:
targets:
App:
incrementBuild: true
version: 16.4
productName: Awesome App
displayName: My Awesome App

buildSettings:
ENABLE_BITCODE: false
STRIP_SWIFT_SYMBOLS: false

plist:
replace: false
entries:
- NSFaceIDUsageDescription: Use Face ID to authenticate yourself and login

entitlements:
- keychain-access-groups:
[
'com.keychain.access.group'
]

frameworks:
- CoreServices.framework
- ImageIO.framework
- LocalAuthentication.framework
- WebKit.framework
platforms:
android:
incrementVersionCode: true

manifest:
- file: AndroidManifest.xml
target: manifest/application
attrs:
android:name: com.example.App

- file: AndroidManifest.xml
target: manifest
inject: |
<queries>
<intent>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent>
</queries>
gradle:
- file: app/build.gradle
target:
dependencies:
insert: |
implementation "com.stripe:stripe-java:20.133.0"
res:
- path: raw
file: config.json
text: |
{
"value": true
}
- path: drawable
file: icon.png
source: ./public/assets/icon/icon.png
Customizable

Custom config scripts.

Write custom iOS and Android configuration scripts using the powerful Trapeze API

import { MobileProject, MobileProjectConfig } from '@trapezedev/project';

const project = new MobileProject(projectDir, {
path: 'ios',
},
android: {
path: 'android',
});
await project.load();

// Updating plist files for targets and builds
await project.ios?.updateInfoPlist('App', 'Debug', {
NSFaceIDUsageDescription: 'The better to see you with',
});

// Adding frameworks
project.ios?.addFramework(targetName, 'Custom.framework', {
embed: true,
});

await project.commit();
Variables

Environment variables

Pull values from environment variables for easy templating and customization. Supports JSON values that can even reference existing variables.

vars:
BUNDLE_ID:
default: dev.trapeze.defaultBundleId
PACKAGE_NAME:
default: dev.trapeze.defaultPackageName
KEYCHAIN_GROUPS:
default:
[
'$BUNDLE_ID',
]


platforms:
ios:
targets:
App:
bundleId: $BUNDLE_ID
entitlements:
- keychain-access-groups: $KEYCHAIN_GROUPS

android:
packageName: $PACKAGE_NAME

Automation

Automate with ease.

Automate configuration in a CI/CD workflow, such as Appflow Code.

vars:
CI_BUILD_NUMBER:
default: 1

platforms:
ios:
buildNumber: $CI_BUILD_NUMBER
android:
versionCode: $CI_BUILD_NUMBER
"scripts": {
"appflow:build": "if [ "$CI_PLATFORM" != "web" ]; then npx trapeze run ci.yaml -y --$CI_PLATFORM; fi && npm run build",
},