Akinon Release Notes (05/12/2025) are now live! Click here to learn what's new.
LogoLogo
API Reference
  • Home
  • Quick Start
  • Tutorials
  • Technical Guides
  • Release Notes
  • Glossary
  • Welcome to Akinon Technical Guides
  • ACC
    • ACC CLI
    • Create Application via CLI
    • Deploy Environment Variables
    • App Store for Developers
  • Omnitron
    • Product Types
    • Product Categorization
    • Splitting a Merged Order Item
  • Commerce
    • Shipping Rules Calculator
    • Data Source Shipping Options
    • Attribute Based Shipping Options
    • Filtering Products
    • Conversation & Messages
    • Sitemap Configuration
    • Weight-Based Product Sales
    • Group Attribute Sets
    • Contract Management
    • Find in Store for Whippy Ware
    • Plugins
    • Remote Price
    • E-mail Templates
    • Loyalty Accounts
    • Search Structure
    • User Segmentation & Rules
    • Promotions
  • OMS
    • Getting Started with OMS
    • Basic Setup
    • Scenarios
    • Capacity Feature
    • Package Management
      • Packages
      • Transfer
      • States
    • Commands
      • Packages
        • Package Command Parameters
        • DeAllocate Package Reservations Command
        • Channel Based Complete Packaging without Shipment Command
        • Complete Packaging with Shipment Command
        • Complete Packaging without Shipment Command
        • Package Refuse with Denial Reason Command
        • Product Not Found & Wrong Product Command
        • Product Not Found & Wrong Product Command Advanced
        • Package Packed for Refund Command
        • Block The Package For Action Command
        • Unblock the Package For Action Command
        • Update The Package’s Invoice
        • Manual Planning Command
      • Transfer
        • Transfer Order Advanced Command
        • Product for Transfer Not Found & Wrong Product Command
        • Transfer Delivered Command
        • Transfer Dispatch Command
        • Transfer Ready for Dispatch Command
        • Transfer Out Of Stock
      • Shipment
        • Shipment Order Command
        • Package Advanced Shipment Command
        • Ship The Package Command
        • Ship The Package without Shipment Integration Command
        • Update The Package’s Shipment Status Command
        • Update Shipment Info of Package Command
    • Inventory Locations & Engine
      • Properties & Domain Relation
      • Customization
      • Inventory Engine
    • Fulfillment
      • Shipments
      • Invoice Integration
    • Webhooks
      • Webhook Examples
        • Order Webhook
        • Package Webhook
        • Shipment Webhook
        • Stock Location Webhook
        • Transfer Webhook
    • Integrating OMS with Seller Center
  • Instore
    • Getting Started
    • Cash Register Integration
    • OTP (One Time Password) Process
    • Services
      • Password Reset Services
  • Marketplace Dashboard
    • N11 Marketplace Setup Configurations
    • Trendyol Marketplace Setup Configurations
    • Walmart Marketplace Setup Configurations
    • Amazon Marketplace Setup Configurations
    • Hepsiburada Marketplace Setup Configurations
  • Project Zero
    • Django
      • Basic Setup
      • Project Structure
        • Templates & Components
        • Private Dependencies
        • Omnife Project Submodule
        • Webpack
        • ESLint Rules
        • Bundles
        • Multilanguage & Translation
        • Environmental File
        • Custom Error Pages
        • Icon Font
      • Page Types
        • Static Pages & Flatpages
        • Account Page
          • Template Rendering in Account Pages
          • Forms & Validation
        • Basket Page
          • Redux Basket State
          • Basket Page - View
        • Checkout
          • Redux Checkout State
          • View & Template Rendering
          • Masking & Validation
      • Theming & Styling
      • Widgets
      • SEO Management
      • Extending Project Zero
    • Next.js
      • Basic Setup
      • Deployment
      • Static Assets
      • Plugins
      • Widgets
      • Icons
      • Localization
      • SEO Management
      • Advanced Usage
      • Data Fetching
        • Client
          • Account
          • Address
          • Basket
          • Checkout
          • Misc
          • Product
          • User
          • Wishlist
        • Server
          • Category
          • Flat Page
          • List
          • Menu
          • Product
          • SEO
          • Special Page
          • Widget
  • App Maker
    • Setup Your Environment
    • Plugin Quickstart
    • Create Project
    • Setup Existing Project
    • Deploy Project
    • Users and Roles
    • Add Public Key
    • App Maker CLI
    • Create App on Stores
      • Creating App on Apple App Store
      • Creating App on Google Play Store
    • Mobile App Framework
      • Configuration
      • Framework
      • Project Structure
        • Structure
        • Data Containers
        • Pages
      • Dependency Integration
        • Plugins
        • Akinon Plugin Adapter
  • Akifast
    • HPP
      • Getting Started
      • Authorization
      • Payment Session Creation
        • Key Points Before Creating a Payment Session
        • Creating Payment Session
        • Redirecting to the Payment Page
        • Errors Encountered During Payment Session Creation
      • Merchant Services
        • Shipping Query URL
        • Agreement Query URL
        • Other URLs
  • B2B
    • Getting Started
    • B2B Setup
  • Adds-on
    • Invoicer
      • Introduction
      • Invoice & Pay On Delivery Service
  • Channel App Template
    • Introduction
    • Installation and Usage
    • Development Steps
      • Folder Structure
      • Starting Step
      • Encoding the Sales Channel
        • Introduction
        • Setup
        • Products
        • Product Price
        • Product Stock
        • Product Image
        • Orders
        • Product Data
      • Adding a New Command to Akinon
      • Listening for External Requests
    • Architecture
      • Introduction
      • Integration
      • Services (Flows)
        • Introduction
        • Product Service
        • Price Service
        • Stock Service
        • Image Service
        • Order Service
  • Multi Regional Settings
    • Multi Regional Settings
Powered by GitBook

© 2025 Akinon. All rights reserved.

On this page
  • Rules
  • Styles
  • Static Text Maps
  • Integration Maps
  • Theme Configs

Was this helpful?

  1. App Maker
  2. Mobile App Framework
  3. Project Structure

Structure

This comprehensive guide is designed to provide developers with an in-depth understanding of the structure and functionalities offered by the Akinon Mobile App Maker platform. The purpose of this guide is to equip developers with the knowledge needed to efficiently create high-quality, robust, and feature-rich mobile applications using the Akinon framework. By following this guide, developers will gain insight into the platform's architecture, components, and workflow, as well as practical tips and examples that will streamline the app development process.

Rules

This section is used to define certain settings to intended modules within the scope of the project from a fixed point.

Basket

Name
Description
Type
Default Value

basketItem

swipeToDelete

Indicates the Swipe to Delete process

boolean

true

swipeToDeleteOptions

Indicates the settings of the swipeToDelete value iconName: The name of the icon displayed while deleting

boolean

true

openModalForDelete

Indicates the opening status of the modal while deleting

boolean

false

itemImage

imageSize

Indicates the image size of the products in cart

object

{width: 400, height: 600}

itemPrice

showTotalPrice

Indicates the visibility of total price for retail products

boolean

true

itemRetailPrice

showTotalPrice

Indicates the visibility of total price for retail products

boolean

true

Combine

Name
Description
Type
Default Value / Link

imageViewer

swiperOptions

Indicates the values available for the swiper component displayed for product images on the combine page

object

swiperImageCropSizes

Indicates the size for the images displayed on the swiper

object

{width: 500, height: 500}

zoomViewerOptions

Indicates the zoom settings for the images displayed on the swiper

boolean

zoomImageCropSizes

Indicates the size of the image zoomed on the swiper

object

{imageWidth: 750, imageHeight: 750}

Product Detail

Name
Description
Type
Default Value / Link

gridElements

content

Indicates the value for the content element in product detail

object

Content

imageViewer

carouselOptions

Indicates the settings for the carousel component

object

carouselImageCropSizes

Indicates the size of the image displayed on the carousel component

object

{width: 400, height: 500}

zoomViewerOptions

Indicates the zoom settings of the images displayed on the carousel

boolean

zoomImageCropSizes

Indicates the size of the image zoomed on the carousel

object

{imageWidth: 750, imageHeight: 750}

page

addToCartAnimation

Indicates the animation type for adding to cart

‘modal’ , ‘snackbar’

‘modal’

modals

contentDrawer

modalImage

Indicates the status of the feature “quick add to cart”

object

{width: 35, height: 35}

quickAddToCart

isEnable

Indicates the size of the images on the modal where product variants can be examined

boolean

true

validationModal

isEnable

Indicates the visibility of the validation modal

boolean

false

variants

colors

buttonImage

Sets the size of color buttons

object

{width: 500, height: 400}

modalVariant

variantImage

Indicates the size of the modal images for product variants

object

{width: 500, height: 500}

Profile

Name
Description
Type
Default Value

page

resendSmsTime

Indicates the time to resend SMS to the user

number

180

Styles

Example

Creating a view on the homepage and defining a style.

As shown below, a style object starting with $rules_ must be exported in the styles/homePage/view.js path.

const $rules_customView = {
 viewStyle: {
   flex: 1,
   backgroundColor: "#ccc"
 }
}
export { $rules_customView };

All styles for the homePage in the styles/homePage/index.js path must be imported and exported.

import { $rules_view } from "./view.js";

export { $rules_view }

All styles written for the application in the styles/index.js path must be imported and exported.

import * as homePage from './homePage';

export { homePage }

When creating a style object with this structure, the className props of the View element should be given the homePage.customView.viewStyle value.

import { View } from "@elements";

<View className="homePage.customView.viewStyle" />

Static Text Maps

This is used to define the static texts used within the project from a fixed point. This is where static texts are configured based on language. All the static texts of the application are imported/exported to the path staticTextMaps/index.js.

Example

If a static text is to be used on the account page:

The text that is going to be used needs to be defined within staticTextMaps/account.json.

{
 "LOGOUT": { "tr": "Çıkış Yap", "en": "Log Out" },
}

This definition needs to be exported from the path staticTextMaps/index.js.

import account from './account.json';
export default {
  account,
  ...
};

Then, the file staticTextMaps/index.js needs to be imported within the page to destruct the account object.

import staticTextMaps from '../../staticTextMaps';
 
const { account: $account } = staticTextMaps;
 
<Button text={$account.LOGOUT} />

Multiple Language

The languages that are going to be used within the project are defined within staticTextMaps/languageConfig.json.

[
 {
   "name": "Turkish",
   "isDefault": false,
   "isRTL": false,
   "label": "Türkçe",
   "code": "tr",
   "region": "tr",
   "key": "tr"
 },
 {
   "name": "English",
   "isDefault": true,
   "isRTL": false,
   "label": "English",
   "code": "en",
   "region": "en",
   "key": "en"
 }
]

Integration Maps

Integration Map is used for the configuration of states that can be customized within the process of fetching data used within the project from the backend. For instance, it can be used to determine the field name with which the data will be fetched or the URLs to which the request will be sent. The application’s entire map layer is imported/exported with the path integrationMaps/index.js.

Example

There are a minimum of two integrationMap objects that need to be defined while fetching data from the backend. In our exemplary scenario, we can look at the user’s search process.

First, the endpoint to which the backend will send a request needs to be defined. We can work with this object integrationMaps/urls.json.

{ 
 "SEARCH": "/autocomplete/?search_text=",
 ...
}

Then, the generated data needs to be standardized. We can work with this object integrationMaps/search.json.

{
 "GROUPS": "groups",
 "TYPE": "suggestion_type",
 "ENTRIES": "entries",
 "CATEGORY": {
   "ID": "extra.category_id",
   "LABEL": "label",
   "PARENT_CATEGORIES": "extra.parent_categories"
 },
 "PRODUCT": {
   "TYPE": "extra.product_type",
   "LABEL": "label",
   "URL": "url",
   "IMAGE": "extra.image",
   "PRICE": "extra.price",
   "RETAIL_PRICE": "extra.retail_price"
 },
}

Follow this link to fetch data via integrationMap and for stages of modeling.

Deeplink

Deeplink enables you to open your mobile app using HTTPS links. For example, you can redirect users opening campaign links sent via email to your mobile application. Android refers to this concept as “deep links,” while iOS calls it “universal links”.

Universal Links on iOS

Apple App Site Association Configuration:

To use universal links, you must first verify the domain you own. Verification is performed by serving an AASA (Apple App Site Association) configuration file on your web server.

The AASA file should be served from https://<your-domain>.com/.well-known/apple-app-site-association (no extension). Its content type must be application/json. If you want links like https://<your-domain>.com/product/akinon to open in your mobile app, your AASA configuration file should look like this:

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "ABCDE.com.akinon.shop",
        "paths": ["/product/*"]
      }
    ]
  }
}

This configuration allows all links starting with /product/ to be opened by the app with the ID ABCDE.com.akinon.shop.

Akinon Configuration:

After completing domain verification, update the akinon.json file in your project as follows:

{
  "ios": {
    "associatedDomains": ["applinks:<your-domain>.com"]
  }
}

After this configuration, your links will open the mobile app. If your app does not open, ensure that the AASA file is in the correct directory and properly configured.

Deep Links on Android

Akinon Configuration:

To open your app with specific links, define an intentFilter for Android in akinon.json:

{
  "android": {
    "intentFilters": [
      {
        "action": "VIEW",
        "data": [
          {
            "scheme": "https",
            "host": "<your-domain>.com",
            "pathPrefix": "/"
          }
        ],
        "category": ["BROWSABLE", "DEFAULT"]
      }
    ]
  }
}

This configuration will prompt users to choose your app to open the link. To bypass this prompt and have your app open automatically (like on iOS), you need to perform additional verification steps.

Verify Your Domain:

Navigate to:

Release > Setup > App integrity > App Signing under the Digital Asset Links JSON section to obtain the fingerprints.

You need to define the "autoVerify": true configuration for the intentFilter specified in Akinon.json. This configuration instructs Android to check the assetlinks.json file on your server.

{
  "android": {
    "intentFilters": [
      {
        "action": "VIEW",
        "autoVerify": true // Add this line
        "data": [
          {
            "scheme": "https",
            "host": "<your-domain>.com",
            "pathPrefix": "/"
          }
        ],
        "category": ["BROWSABLE","DEFAULT"]
      }
    ],
  }
}

Handling Links into Your App

When your application is opened via universal links, you need to specify the URLs to redirect in your project's src/integrationMaps/deepLink.js file.

For example, if you want to redirect users opening the URL https://<your-domain>.com/baskets/basket to the Basket page in your application, you need to configure it as follows:

export const deepLink = [
  {
    page: 'Basket',
    viewname: 'baskets/basket',
    verifyRequired: false,
    exact: true,
    authRequired: false,
    params: {
      title: 'Basket',
    },
  },
];

Dynamic URLs:

Values added in the :variable format to the viewname field are passed as navigation parameters.

export const deepLink = [
  {
    page: 'Orders',
    viewname: 'users/orders/:orderId',
    verifyRequired: false,
    exact: false,
    authRequired: true,
    params: {
      title: 'Order Detail',
    },
  },
];

Params:

Field Descriptions:

Field Name
Type
Description

page

String

Navigation screen name

viewname

String

DeepLink or Pretty URLs API path

verifyRequired

Boolean

Used for Pretty URL dependencies

exact

Boolean

Checks if the path triggered by the deep link matches exactly the path specified in the viewname field

authRequired

Boolean

Should be set to true if the user needs to be logged in for the DeepLink to the page

params

Object

Default parameters to be sent during redirection to the page

Extract Patterns:

URLs opened via deep linking are modified according to the patterns defined under extractPatterns in the deepLinkConfig section of deepLink.js before being redirected to the page. This allows certain values in the URL to be excluded. Excluded parameters are sent as route parameters to the redirected page. If there are multiple values for the same pattern key, these values are sent as an array.

export const deepLinkConfig = {
  extractPatterns: [
    {
      key: 'locale',
      pattern: /\/tr-try/gi,
      replace: '',
    },
    {
      key: 'locale',
      pattern: /\/en-try/gi,
      replace: '',
    },
  ],
};
// Example of parameters sent to the page based on the above pattern
// shop://en-try/tr-try/akinon-banana
{ extractedParts: { locale: [ 'tr-try', 'en-try' ] }, newUrl: 'shop://akinon-banana' }

Params:

Field Descriptions:

Field Name
Type
Required
Description

key

String

Yes

Route parameter name

pattern

String

Yes

Regex pattern to be used for modifying the URL

replace

String

Yes

String to replace the matched pattern in the URL

Open With Browser:

URLs opened via deep linking are opened in the browser on Android if they match the patterns defined under openWithBrowser in the deepLinkConfig section of deepLink.js before being redirected to the page.

export const deepLinkConfig = {
  openWithBrowser: [
    {
      pattern: /testProduct/g,
      redirect: 'https://www.akinon.com',
    },
  ],
};

Params:

Field Descriptions:

Field Name
Type
Required
Description

pattern

String

Yes

Regex pattern to check the URL

redirect

String

No

URL to redirect to after the regex match

Theme Configs

This section manages the general style and component config settings within the application. Style definitions can be made on this module when a central standard management is required.

Name
Description

form

PICKER_HEADER

The style structure of picker headers

PICKER_ITEM_WRAPPER

The wrapper style structure of the items within pickers

CHECKBOX_AND_RADIO_LABEL

The style structure of the labels of CheckBox and radio components

VALIDATION_ERROR_TEXT

The style structure of the text of the validation error messages

DATE_PICKER_CONTAINER_IOS

The container style structure of the date pickers on the iOS platform

PICKER_MODAL

The general container style structure of the picker modal component

INPUT

The style structure of input components

RADIO_GROUP_TITLE

The title style structure of radio group component

PICKER_INPUT

The style structure of the input components of pickers

PICKER_ITEM_TEXT

The text style structure of the items within pickers

CHECKBOX_AND_RADIO

The general style structure of CheckBox and radio components

general

FACEBOOK_BUTTON

The general style structure of the Login with Facebook button

BUTTON_ICON

The general style structure of button icons

TEXT_LINE_HEIGHT_RATE

The value of text line height

CURRENCY_POSITION_RELATIVE_TO_PRICE

The value of currency position

BUTTON_ICON_CONTAINER

The container style structure of button icons

OUTLINE_BUTTON

The style structure of the outline button

DISABLE_BUTTON

The style structure of the disable button

CONTAINER

The general style structure of containers

BUTTON_CONFIGS

The general config structure of buttons

hasIcon

The visibility status of the icon

textColor

Text color

textAlign

Text alignment

CONTENT

The general style structure of content

TEXT

The style structure of texts

SUCCESS_BOX_BUTTON_CONTAINER

The container style structure of the success button component

BUTTON_STYLE

The general style structure of buttons

USE_BASE_CURRENCY_SYMBOL

The status of use for base currency value

header

SEARCH_BUTTON

Indicates the visibility of the search button in the header component

ALIGN_BODY_CONTENT

Indicates the alignment status of the body content

navbar

NAVBAR_ITEMS_CONTAINER

The container style structure of the items on the Navbar

SEARCH_INPUT

Indicates the input style value of the search bar

HEADER_TEXT

The style structure of the text in the header component

PROMOTION_TEXT_WRAPPER

The wrapper style structure of the text in the promotion component

SEARCH_INPUT_TEXT

Indicates the text style of the input on the search bar

BASKET_COUNT_WRAPPER

The wrapper style structure of the section to show the number of products in cart

BARCODE_SCANNER

The style structure of the barcode scan component

PROMOTION_TEXT

The style structure of the text in the promotion component

NAVBAR_CONFIGS

The config style structure of the Navbar

logoPositionCenter

The status for the central alignment of the logo

searchButtonVisible

The visibility of the search button

headerIconColor

The color value of the header icon

BASKET_COUNT_TEXT

The text style structure of the section to show the number of products in cart

searchComponent

BARCODE_BUTTON_VISIBLE

Indicates the visibility of the barcode scan button in the search component

sidebar

WIDTH

Indicates the width of the Sidebar

snackBar

SNACKBAR_CONFIGS

The structure for Snackbar’s config settings

successBgColor

The background color for Success status

successTextColor

The text color for Success status

spinner

HAS_ICON_SPINNER

Indicates the status of the icon in the spinner component

ICON_SPINNER_SIZE

Indicates the size of the spinner

textStatuses

secondary

The structure for the secondary font object information

bold

The structure for the bold style font object information

touchableOpacity

ACTIVE_OPACITY

The active opacity of the TouchableOpacity component

fonts

config

Defines the configuration for default font families, including the font used for regular text and bold text, as well as icon font configurations.

list

Contains a list of custom fonts used in the application. Each entry specifies the font family name and the source file associated with that font.

Fonts

config

(object) Contains configurations related to font processes.

defaultFontFamily

(string) Specifies the default Font Family to be used in the Text element.

import {Text} from "@elements";
<Text safelyTranslation> Default Text </Text>

defaultFontFamilyBold

(string) Specifies the Font Family to be used when the bold field is set to true in the Text element.

import {Text} from "@elements";

<Text bold safelyTranslation> Bold Text </Text>

ICOMOON_JSON

(object) Specifies the path to the Icomoon selection.json file.

RTL_ICOMOON_JSON

(object) Specifies the path to the Icomoon selection.json file to be used when the application is in a right-to-left flow.

list

(array) The list of fonts to be used within the application. Each font object should be structured as follows:

[
  {
    fontFamily: "FONT_FAMILY_NAME",
    src: require('FONT_PATH')
  }
]

Each fontFamily value specified here can be used as shown below:

import {Text} from "@elements";

<Text 
  defaultStyle={{
    fontFamily: "Jost-Medium"
  }}
  safelyTranslation
> 
  Medium Text 
</Text>
PreviousProject StructureNextData Containers

Was this helpful?

All the styles of the application are imported/exported to the styles/index.js path. The exported style objects are sent to the createApp function as a parameter via the styles key. Style objects must be exported as an object with a prefix starting with $rules_. The prefix of the style objects starting with the $rules_ prefix are split and created with . (For instance: $rules_homeStyles is created as homeStyles.) The style path is sent with the className props while using framework elements.

Replace the ABCDE field with your TEAM ID. You can find your team ID by logging into your Apple Developer account and visiting the membership details page. For more details, refer to .

You need to serve a JSON file containing your application information in the /well-known/assetlinks.json directory on your web server. This JSON file must include fields such as package_name and sha256_cert_fingerprints. You can access the necessary data for these fields via the .

For more information, refer to the .

Stylesheet.create
Apple's documentation
Google Play Console
Android Documentation
Props
Props
Props
Props