# Configuration

**akinon.json** file is used to manage the native side of the application. It allows managing the fields in native side such as application name, icon and version during the application build process.

## <mark style="color:red;">Properties</mark>

### displayName

**(string)** is the name of the application in the home page. This data is used to manage the `app_name` field in `android/app/src/main/res/values/strings.xml` and `Display Name` field in XCode.

### productName

**(string)** is used to entitle the `.ipa` and `.app` files. Special characters are not allowed.

### version

**(string)** refers to the application version in IOS and Android platforms. It allows managing the fields [CFBundleShortVersionString](https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring) in IOS and [versionName](https://developer.android.com/studio/publish/versioning#appversioning) in Android.

### scheme

**(array)** is the field to define Custom [URL Scheme](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app). It allows to identify the URLs like `akinon://product-detail` for deeplink.

```json
{
    "scheme":  ["akinon"]
}
```

### icon

**(object)** Defines the base app icon used across all platforms. The `image` field is required and serves as the fallback for both Android and iOS. Platform-specific icon options can be configured under `android.icon` and `ios.icon`.

* `image` **(string)**: Local path to the icon image. Must be a `.png` file. It is recommended to use a `1024x1024` resolution.

```json
{
  "icon": {
    "image": "./src/assets/images/icon.png"
  }
}
```

### splashScreen

**(object)** Used to configure the application's splash screen.

* `image` **(string)** The splash screen image should be provided as a local path. It is recommended to use a `.png` file.
* `resizeMode` **(string)** Determines how the image will be displayed on the splash screen. Acceptable values are `center`, `contain`, or `cover`.
* `backgroundColor` **(string)** The color that fills the background of the splash screen.

```json
{
  "splashScreen": {
    "image": "./src/assets/images/launchscreen.png",
    "resizeMode": "cover",
    "backgroundColor": "#FFFFFF"
  }
}
```

### build

**(object)** Defines the configurations to be used during the application's build process.

#### **production**

**(object)** Contains specific configurations for the production environment.

* `ios` **(object)**\
  Contains settings specific to the iOS platform.
  * `xcodeVersion` **(string)**\
    Specifies the version of XCode to be used during the build process. Supported XCode versions:
    * `14.2`
    * `15.0.1`
    * `15.3`
    * `15.4`
* `android` **(object)**\
  Contains settings specific to the Android platform.
  * `javaVersion` **(string)**\
    Specifies the version of Java to be used during the build process. Supported Java versions:
    * `11`
    * `17`

```json
{
  "build": {
    "production": {
      "ios": {
        "xcodeVersion": "14.2"
      },
      "android": {
        "javaVersion": "11"
      }
    }
  }
}
```

### notification

**(object)** is used to configure push notifications.

* `icon` **(string)**: Notification icon must be given as a local path. For more info, please check [Google Design Principles](https://material.io/design/iconography/product-icons.html#grid-and-keyline-shapes).
* `androidSound` **(string)**: Local path of the notification sound that will be used in Android must be given. Recommended sound format is `.mp3`.
* `iosSound` **(string)**: Local path of the notification sound that will be used in IOS must be given. Recommended sound format is `.mp3`.

```json
{
  "notification": {
    "icon": "./src/assets/androidNotificationIcon.png",
    "androidSound": "./src/assets/sounds/notification_android_sound.mp3",
    "iosSound": "./src/assets/sounds/notification_ios_sound.mp3"
  }
}
```

### android

**(object)** is used to configure the Android platform.

* `icon` **(object)** *(optional)* Platform-specific icon configuration. If `image` is omitted, falls back to the top-level `icon.image`.
  * `image` **(string)**: Local path to the Android-specific icon. Must be a `.png` file. Overrides `icon.image` for Android.
  * `backgroundColor` **(string)**: Background color for the adaptive icon (hex). Required when `foregroundImage` is set.
  * `foregroundImage` **(string)**: Local path to the foreground layer image for the adaptive icon. Must be a `.png` file.
  * `monochromeImage` **(string)**: Local path to the monochrome icon used for themed icons. Must be a `.png` file.

```json
{
  "android": {
    "icon": {
      "image": "./src/assets/images/icon-android.png",
      "backgroundColor": "#FFFFFF",
      "foregroundImage": "./src/assets/images/icon-foreground.png",
      "monochromeImage": "./src/assets/images/icon-monochrome.png"
    }
  }
}
```

* `package` **(string)** is the name of application package where the name must be unique in Play Store and cannot be changed once published.
* `versionCode` **(number)** is the version number for Google Play. It's recommended to increase the version number incrementally. [Please check here for more info.](https://developer.android.com/studio/publish/versioning.html)
* `intentFilters` **(array)** defines the URL variants for deep linking. [Please check here for more info.](https://developer.android.com/guide/components/intents-filters)

```json
{
  "android" : {
    "intentFilters": [{
      "action": "VIEW",
      "data": [{
        "scheme": "https",
        "host": "demo.akinon.net",
        "pathPrefix": "/"
      }],
      "category": ["BROWSABLE", "DEFAULT"],
      "autoVerify": true
    }]
  }
}
```

* `permissions` **(array)** is the list of permissions that are used by the application. Below are the list of permissons for different purporses:
  * `android.permission.INTERNET`
  * `android.permission.ACCESS_NETWORK_STATE`
  * `android.permission.SYSTEM_ALERT_WINDOW`
  * `android.permission.WAKE_LOCK`
  * `com.google.android.c2dm.permission.RECEIVE`
  * `android.permission.ACCESS_WIFI_STATE`
  * `android.permission.ACCESS_COARSE_LOCATION`
  * `android.permission.ACCESS_FINE_LOCATION`
  * `android.permission.CAMERA`
  * `android.permission.MANAGE_DOCUMENTS`
  * `android.permission.READ_CONTACTS`
  * `android.permission.WRITE_CONTACTS`
  * `android.permission.READ_CALENDAR`
  * `android.permission.WRITE_CALENDAR`
  * `android.permission.READ_EXTERNAL_STORAGE`
  * `android.permission.READ_INTERNAL_STORAGE`
  * `android.permission.READ_PHONE_STATE`
  * `android.permission.RECORD_AUDIO`
  * `android.permission.USE_FINGERPRINT`
  * `android.permission.VIBRATE`
  * `android.permission.WRITE_EXTERNAL_STORAGE`
  * `android.permission.READ_SMS`
  * `com.anddoes.launcher.permission.UPDATE_COUNT`
  * `com.android.launcher.permission.INSTALL_SHORTCUT`
  * `com.google.android.gms.permission.ACTIVITY_RECOGNITION`
  * `com.google.android.providers.gsf.permission.READ_GSERVICES`
  * `com.htc.launcher.permission.READ_SETTINGS`
  * `com.htc.launcher.permission.UPDATE_SHORTCUT`
  * `com.majeur.launcher.permission.UPDATE_BADGE`
  * `com.sec.android.provider.badge.permission.READ`
  * `com.sec.android.provider.badge.permission.WRITE`
  * `com.sonyericsson.home.permission.BROADCAST_BADGE`
  * `android.permission.FOREGROUND_SERVICE`
  * `android.permission.USE_BIOMETRIC`

```json
{
  "android" : {
    "permissions": ["android.permission.CAMERA", "android.permission.INTERNET" ]
  }
}
```

* `removePermissions` **(array)** If there are permissions to be removed during the build process, they should be added to the `removePermissions` array. The specified permissions will be removed during the build using the `tools:node="remove"` configuration.

```json
{
  "android" : {
    "removePermissions": ["android.permission.CAMERA", "android.permission.INTERNET" ]
  }
}
```

### ios

* `icon` **(object)** *(optional)* Platform-specific icon configuration. If `image` is omitted, falls back to the top-level `icon.image`.
  * `image` **(string)**: Local path to the iOS-specific icon. Accepts `.png` for a standard icon or `.icon` for a Liquid Glass icon bundle created with Icon Composer.
  * `darkImage` **(string)**: Local path to the icon displayed in dark mode. Must be a `.png` file.
  * `tintedImage` **(string)**: Local path to the icon displayed in tinted mode. Must be a `.png` file.

**Standard icon:**

```json
{
  "ios": {
    "icon": {
      "image": "./src/assets/images/icon-ios.png",
      "darkImage": "./src/assets/images/icon-dark.png",
      "tintedImage": "./src/assets/images/icon-tinted.png"
    }
  }
}
```

**Liquid Glass icon (iOS 26+):**

```json
{
  "ios": {
    "icon": {
      "image": "./src/assets/AppIcon.icon"
    }
  }
}
```

> **Note — Liquid Glass and legacy iOS icons**
>
> When `image` points to a `.icon` bundle, Xcode uses it as the primary icon source for all iOS versions. The asset catalog generated from the top-level `icon.image` is used as the PNG source but its output is overridden.
>
> * **iOS 26 and later:** The Liquid Glass icon from the `.icon` bundle is displayed.
> * **iOS 18 and earlier:** Xcode automatically generates a fallback icon from the `.icon` bundle. This fallback may differ visually from the original `image` you provided.
>
> If you want the original icon to appear on iOS 18 and earlier, use a `.png` file instead. See [Creating your app icon using Icon Composer](https://developer.apple.com/documentation/Xcode/creating-your-app-icon-using-icon-composer) for details.

* `bundleIdentifier` **(string)** is the independent bundle identifier for the application which allows iOS and macOS to recognize the updates in the application. Bundle identifier must be registered in Apple and unique for the application.
* `associatedDomains` **(array)**: URLs that will be subject to deep linking are defined as string list. In order for the service to work properly, the `Associated Domains` field in the identifiers must be activated through Developer Apple. [Please check here for more info.](https://developer.apple.com/documentation/xcode/supporting-associated-domains)

```json
{
  "ios" : {
    "associatedDomains": ["applinks:demo.akinon.net"]
  }
}
```

* `teamIdentifier` **(string)** is unified with teamId and bundleIdentifier in order for the application to be recognized by the app store. You must enter the `teamId` which is existing in Developer Apple into this field.
* `usesAppleSignIn` is to decide whether the apolication will use Apple Sign-In or not.
* `infoPlist` **(object)** is used to configure Info Plist file.

```json
{
 "ios": {
    "infoPlist": {
     "NSCameraUsageDescription": "This app uses the camera to scan barcodes on event tickets.",
     "CFBundleAllowMixedLocalizations" : true,
     "LSApplicationQueriesSchemes": ["akinon"]
    }
  }
}
```

### huawei

**(object)** Used to configure the Huawei platform.

* `appGalleryConnectServiceFile` **(string)** Used for communication with AppGallery Connect services. The local path to the `agconnect-services.json` file should be provided.

```json
{
  "huawei": {
    "appGalleryConnectServiceFile": "./src/assets/resources/agconnect-services.json"
  }
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.akinon.com/technical-guides/app-maker/mobile/mobile-app-framework/configuration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
