Github
[ .NET MAUI ]
Workflow & Project Structure
The repository contains the essential files and configuration needed to build and deliver your .NET MAUI application for both Android and iOS:
- .NET MAUI Project (
*.csproj)
Located at the root of the repository, this file defines the project configuration, dependencies, and target platforms. - Workflow Files (
.github/workflows/)
GitHub Actions workflows for automated CI/CD are defined here: build-android.yml: Handles the build and signing process for the Android APK.build-ios.yml: Manages the build and signing of the iOS IPA.
These workflows are automatically triggered by specific repository events, such as:
Pushes to main or feature branches Pull requests targeting tracked branches You can customize the behavior of each workflow by adjusting the predefined environment variables and secrets defined in the repository settings. This allows you to tailor the CI/CD process to your app’s requirements, such as using different signing credentials, build configurations, or deployment targets.
Workflow Variables
Android
| VARIABLE | DESCRIPTION | EXAMPLE |
|---|---|---|
TYPE_RELEASE |
Release type (alpha, beta, release) |
alpha |
BUILD_CONFIGURATION |
Build Configuration (Debug, Release) |
Release |
BUILD_FRAMEWORK |
Target Framework for Android | net8.0-android |
APK_NAME |
APK base name (without extension) | com_appambit_testapp |
PROJECT_DIR |
MAUI Project Route | ./AppAmbitTestingApp |
KEYSTORE_ASC |
Name of the GPG encrypted keystore file | appambit.keystore.asc |
KEYSTORE_FILE |
File generated by decrypting the previous one | appambit.keystore |
iOS
| VARIABLE | DESCRIPTION | EXAMPLE |
|---|---|---|
TYPE_RELEASE |
Release type (alpha, beta, release) |
alpha |
PROJECT_PATH |
Relative path to your iOS project's .csproj file |
AppMauiTestApp/AppMauiTestApp.csproj |
IPA_NAME |
Base name of the IPA file (without .ipa extension) |
ipa_name_ios |
Repository Secrets
These secrets are configured on GitHub:
- Go to the repository on GitHub
- Go to Settings > Secrets > Actions
- Click New repository secret
Secrets and variables
Android
| SECRET | DESCRIPTION |
|---|---|
| ANDROID_KEYSTORE_FILE | Full contents of the encrypted .asc file (copied as plain text) |
| ANDROID_KEYSTORE_PASSWORD | Keystore password |
| ANDROID_KEYSTORE_PASSWORD_ALIAS | Password of the alias within the keystore |
| ANDROID_KEYSTORE_PASSWORD_GPG | Password used to decrypt the .asc file |
iOS
| SECRET | DESCRIPTION |
|---|---|
| IOS_APPLE_P12_PASSWORD | Password of the .p12 certificate used for signing |
| IOS_P12_CERTIFICATE_BASE64 | Base64-encoded .p12 distribution certificate |
| IOS_PROVISIONING_PROFILE_BASE64 | Provisioning profile in Base64 format |
Secrets
If you're not sure about having this credentials you can go to generating variables
[ Android ]
Workflow & Project Structure
The repository contains the essential files and configuration needed to build and deliver your Android application:
- Android Project (
build.gradle.kts)
Located at the root of the repository, this file defines the project configuration, dependencies and more config variables. - Workflow Files (
.github/workflows/)
GitHub Actions workflows for automated CI/CD are defined here: build-apk.yml: Handles the build and signing process for the Android APK.
These workflows are automatically triggered by specific repository events, such as:
Pushes to main or feature branches Pull requests targeting tracked branches You can customize the behavior of each workflow by adjusting the predefined environment variables and secrets defined in the repository settings. This allows you to tailor the CI/CD process to your app’s requirements, such as using different signing credentials, build configurations, or deployment targets.
Workflow Variables
| VARIABLE | DESCRIPTION | EXAMPLE / VALUE |
|---|---|---|
PACKAGE_NAME |
Package name of the app | appambit-testapp |
APK_NAME |
APK base name (without extension) | com_appambit_testapp |
SIGNING_KEY_STORE_PATH |
Path to the keystore file | keyname.keystore |
SIGNING_KEY_ALIAS |
Keystore alias | CompanyName |
SIGNING_KEY_PASSWORD |
Password for the keystore alias | SomePassword123 |
SIGNING_STORE_PASSWORD |
Password for the keystore file | SomeDifferentPassword123 |
ENCODED_STRING |
Base64 encoded keystore | <YOUR-BASE64-STRING> |
Variables
Put your variables secure using secrets, don't put this variables in plain text
Repository Secrets
These secrets are configured on GitHub:
- Go to the repository on GitHub
- Go to Settings > Secrets > Actions
- Click New repository secret
Secrets and variables
| SECRET | DESCRIPTION |
|---|---|
SIGNING_KEY_STORE_PATH |
Path where your .keystore file is saved |
SIGNING_KEY_ALIAS |
Keystore alias when you created the .keystore |
SIGNING_STORE_PASSWORD |
Password of the alias within the keystore |
SIGNING_KEY_PASSWORD |
Password of your .keystore |
SIGNING_KEY_STORE_BASE64 |
Keystore base64 string to generate .keystore file |
Secrets
If you're not sure about having this credentials you can go to generating variables
[ iOS ]
Workflow & Project Structure
The repository contains the essential files and configuration needed to build and deliver your iOS application:
- iOS Project (
*.xcodeproj)
Located at the root of the repository, this file defines the project configuration, dependencies and more config variables. - Workflow Files (
.github/workflows/)
GitHub Actions workflows for automated CI/CD are defined here: build-ipa.yml: Handles the build and signing process for the iOS IPA.
These workflows are automatically triggered by specific repository events, such as:
Pushes to main or feature branches Pull requests targeting tracked branches You can customize the behavior of each workflow by adjusting the predefined environment variables and secrets defined in the repository settings. This allows you to tailor the CI/CD process to your app’s requirements, such as using different signing credentials, build configurations, or deployment targets.
Workflow Variables
| VARIABLE | DESCRIPTION | EXAMPLE / VALUE |
|---|---|---|
BUNDLE_IDENTIFIER |
iOS bundle identifier | com.AppAmbit.TestApp |
IPA_NAME |
IPA base name (without extension) | app_appambit_testapp |
CONFIGURATION |
Build configuration (Debug / Release) |
Release |
SDK |
Target SDK for build | iphoneos |
DESTINATION |
Xcode destination | generic/platform=iOS |
XCODE_VERSION |
Version of Xcode to use | 16.2 |
SCHEME |
Xcode scheme name | AppAmbitTestingApp |
IOS_INFO_PLIST |
Path to Info.plist file | AppAmbit-Testing-App-Info-plist |
ARCHIVE_PATH |
Path to the generated xcarchive | AppAmbitTestingApp.xcarchive |
Repository Secrets
These secrets are configured on GitHub:
- Go to the repository on GitHub
- Go to Settings > Secrets > Actions
- Click New repository secret
Secrets and variables
| SECRET | DESCRIPTION |
|---|---|
IOS_P12_CERTIFICATE_BASE64 |
Base64 string of your exported .p12 certificate |
IOS_APPLE_P12_PASSWORD |
Password for your .p12 certificate |
IOS_PROVISIONING_PROFILE_BASE64 |
Base64 string of your provisioning profile |
IOS_ADHOC_PROFILE |
Name of the Ad Hoc provisioning profile |
IOS_APPLE_TEAM_ID |
Your Apple Developer Team ID |
Secrets
If you're not sure about having this credentials you can go to generating variables
[ Flutter ]
Workflow & Project Structure
The repository contains the essential files and configuration needed to build and deliver your Flutter application for both Android and iOS:
- Flutter Project (
pubspec.yml)
Located at the root of the repository, this file defines the project configuration, dependencies, and platforms. - Workflow Files (
.github/workflows/)
GitHub Actions workflows for automated CI/CD are defined here: build-android.yml: Handles the build and signing process for the Android APK.build-ios.yml: Manages the build and signing of the iOS IPA.
These workflows are automatically triggered by specific repository events, such as:
Pushes to main or feature branches Pull requests targeting tracked branches You can customize the behavior of each workflow by adjusting the predefined environment variables and secrets defined in the repository settings. This allows you to tailor the CI/CD process to your app’s requirements, such as using different signing credentials, build configurations, or deployment targets.
Workflow Variables
Android
| VARIABLE | DESCRIPTION | EXAMPLE |
|---|---|---|
KEYSTORE_FILE_NAME |
Keystore file name used for signing the Android build | appambit.keystore |
ARTIFACT_NAME |
Artifact or package name for the build output | app_appambit_testapp |
APK_PATH |
Full path to the generated APK file | appambit_sdk_flutter/appambit_test_app/build/app/outputs/flutter-apk/app-release.apk |
ROOT_DIR |
Root directory of the Flutter SDK project | appambit_sdk_flutter |
TEST_PROJECT_NAME |
Test Example folder name | appambit_test_app |
FLUTTER_VERSION |
Is you actual version for flutter | '3.35.4' |
iOS
| VARIABLE | DESCRIPTION | EXAMPLE |
|---|---|---|
IOS_INFO_PLIST |
Export options property list used for iOS builds | ExportOptions.plist |
BUNDLE_IDENTIFIER |
Unique iOS app bundle identifier | com.AppAmbit.TestApp |
ARTIFACT_NAME |
Artifact or package name for the generated IPA file | appambit-test-app-release-ipa |
IPA_NAME |
Base name of the IPA file (without .ipa extension) |
app_appambit_testapp |
ROOT_DIR |
Root directory of the Flutter SDK project | appambit_sdk_flutter |
TEST_PROJECT_NAME |
Test Example folder name | appambit_test_app |
FLUTTER_VERSION |
Is you actual version for flutter | '3.35.4' |
Repository Secrets
These secrets are configured on GitHub:
- Go to the repository on GitHub
- Go to Settings > Secrets > Actions
- Click New repository secret
Secrets and variables
Android
| SECRET | DESCRIPTION |
|---|---|
| KEYSTORE_BASE64 | Base64-encoded contents of the Android keystore file |
| KEYSTORE_PASSWORD | Password of the keystore used for signing |
| KEY_ALIAS. | Alias name of the key inside the keystore |
| KEY_PASSWORD | Password for the key alias inside the keystore |
iOS
| SECRET | DESCRIPTION |
|---|---|
| IOS_ADHOC_PROFILE | Ad hoc provisioning profile identifier used for distribution |
| IOS_APPLE_P12_PASSWORD | Password of the .p12 certificate used for signing |
| IOS_APPLE_TEAM_ID | Apple Developer Team ID associated with the signing account |
| IOS_KEYCHAIN_PASSWORD | Password used to create or unlock the temporary keychain |
| IOS_P12_CERTIFICATE_BASE64 | Base64-encoded .p12 distribution certificate |
| IOS_PROVISIONING_PROFILE_BASE64. | Base64-encoded iOS provisioning profile file |
Secrets
If you're not sure about having this credentials you can go to generating variables
Running the workflow for the first times
- Verify that the workflow file exists in the repository and is committed to the default branch (e.g., develop or main).
- Open GitHub repository and go to: -> Actions tab.
- Select the workflow named Build Apk or Build IPA.
- Click the
Run workflowbutton to run it manually for the first time. - After this, each run will generate an artifact with the signed APK or IPA and you can download it from summary.
Where to find the generated APK or IPA
- In GitHub Actions, after running the workflow, go to the corresponding run.
- In the Artifacts section, download the APK or IPA.
Delivering Builds with Push to AppAmbit
Once your CI/CD pipeline is configured, you’re ready to deliver builds to testers or users. Next Step: Push to AppAmbit to distribute your app directly from your CI pipeline.
Once your build setup is complete and you've pushed to AppAmbit, you can view and manage your releases directly from the dashboard.
AppAmbit website Dashboard > Releases tab