{"id":48890562,"url":"https://github.com/mendix/hybrid-app-template","last_synced_at":"2026-04-16T07:36:01.893Z","repository":{"id":18960344,"uuid":"85674495","full_name":"mendix/hybrid-app-template","owner":"mendix","description":"This repository contains a template for building a Phonegap package for your Mendix application","archived":false,"fork":false,"pushed_at":"2025-03-21T14:32:31.000Z","size":3298,"stargazers_count":11,"open_issues_count":14,"forks_count":10,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-08-23T04:27:07.611Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mendix.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-21T08:00:48.000Z","updated_at":"2025-03-21T14:32:32.000Z","dependencies_parsed_at":"2023-11-20T11:29:56.960Z","dependency_job_id":"bd36e493-e37a-4917-b658-418211d3b561","html_url":"https://github.com/mendix/hybrid-app-template","commit_stats":{"total_commits":146,"total_committers":13,"mean_commits":11.23076923076923,"dds":0.6506849315068493,"last_synced_commit":"3b9eb4e222e224218f40d580d2c43b450a827a76"},"previous_names":[],"tags_count":34,"template":false,"template_full_name":null,"purl":"pkg:github/mendix/hybrid-app-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mendix%2Fhybrid-app-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mendix%2Fhybrid-app-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mendix%2Fhybrid-app-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mendix%2Fhybrid-app-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mendix","download_url":"https://codeload.github.com/mendix/hybrid-app-template/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mendix%2Fhybrid-app-template/sbom","scorecard":{"id":636353,"data":{"date":"2025-08-11","repo":{"name":"github.com/mendix/hybrid-app-template","commit":"e653f180207d7a796260b50dedfc01fd4d021baf"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"12 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-pfq8-rq6v-vf5m","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-cvv5-9h9w-qp2m","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T09:16:39.494Z","repository_id":18960344,"created_at":"2025-08-21T09:16:39.494Z","updated_at":"2025-08-21T09:16:39.494Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31876782,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"online","status_checked_at":"2026-04-16T02:00:06.042Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-16T07:36:01.210Z","updated_at":"2026-04-16T07:36:01.879Z","avatar_url":"https://github.com/mendix.png","language":"JavaScript","readme":"# Important\r\n#### For support related questions regarding Mendix Hybrid please contact [Mendix support](https://support.mendix.com)\r\n\r\n# Mendix PhoneGap Build App Template\r\n\r\nMendix apps can simply be viewed in mobile web browsers. However, some features of mobile devices\r\ncannot be accessed through HTML and JavaScript. Also, if you want to publish your app in the Apple\r\nApp Store or Google Play Store, you have to wrap your app in a native shell. We use\r\n[Cordova/PhoneGap](https://phonegap.com) to do this. PhoneGap creates a native wrapper around a web\r\napplication and provides access to native functionality through a JavaScript API. These apps are\r\ncalled _hybrid_ apps because they are a hybrid of a web and a native app.\r\n\r\nThis project contains the Mendix PhoneGap Build app template. You can use it to\r\n\r\n- customize your mobile Mendix app: styling, icons, splash screens and code,\r\n- open the platform specific code inside the appropriate IDEs,\r\n- debug the app using emulators,\r\n- build installable packages, either locally\r\n\r\n# Table of Contents\r\n* [Prerequisites](#prerequisites)\r\n* [Customize DTAP endpoint](#customize-dtap-endpoint)\r\n* [App signing](#app-signing)\r\n* [Build and run locally](#build-run-locally)\r\n* [Customizing your app](#customize-app)\r\n* [Troubleshooting](#troubleshooting)\r\n\r\n# \u003ca name=\"prerequisites\"\u003e\u003c/a\u003ePrerequisites\r\n\r\nMake sure that the following is installed on your system:\r\n\r\n- A clone of this repository or the customizable package for your app, available in the 'Deploy'\r\n  section of the Mendix Portal. When starting from a customizable package, basic configuration for\r\n  your app has already been done.\r\n- Recent `Node.js`. This code was tested with version 20. You can check by running `node -v`.\r\n    - Windows: install from [nodejs.org](https://nodejs.org/en/download/)\r\n    - MacOS: use [Brew](https://brew.sh/) to install `Node.js`: `brew install node`\r\n    - Linux, BSD, etc: install using the available package manager, e.g. on Debian: `sudo apt-get install node`\r\n- Java version 8\r\n\r\nFor building locally you also need a development environment for your target platform:\r\n\r\n- Android\r\n    - [Android Studio](https://developer.android.com/studio/index.html) by following\r\n  [the instructions](https://developer.android.com/studio/install.html)\r\n- iOS (only available for Apple computers, e.g. MacBook, iMac)\r\n    - [XCode](https://developer.apple.com/xcode/)\r\n    - [CocoaPods](https://guides.cocoapods.org/using/getting-started.html), e.g. by running `sudo gem install cocoapods` (see link for sudo-less install)\r\n\r\nMake sure that the following changes are applied:\r\n- To customize the runtime behavior, include the following configuration: Set [com.mendix.core.SameSiteCookies](https://docs.mendix.com/refguide/custom-settings/#commendixcoreSameSiteCookies) to `None` in Studio Pro.\r\n- Deploy and test the application using HTTPS.\r\n\r\n# \u003ca name=\"customize-dtap-endpoint\"\u003e\u003c/a\u003eCustomize DTAP endpoint\r\nVarious environments can be set in the `config/environments.json` file. To target a specific DTAP endpoint with your app you can specify it as a parameter to `npm run package` or `npm run package:x86`, e.g:\r\n```\r\n$ npm run package -- --env.target=test  # target the test endpoint for ARM architecture\r\n```\r\n\r\nPossible targets are `development`, `test`, `acceptance`, `production` (default) and `sandbox`. For\r\nconvencience you can shorten these to the first letter.\r\n\r\n# \u003ca name=\"app-signing\"\u003e\u003c/a\u003eApp signing\r\n\r\nIn case you want to deploy your app on a real device, you will likely need to sign your app.\r\nPlease refer to the appropriate Cordova documentation for details:\r\n\r\n- [iOS](https://cordova.apache.org/docs/en/latest/guide/platforms/ios/#signing-an-app)\r\n- [Android](https://cordova.apache.org/docs/en/latest/guide/platforms/android/#signing-an-app)\r\n\r\n# \u003ca name=\"build-run-locally\"\u003e\u003c/a\u003eBuild and run locally\r\n\r\nIf this is the initial build, first do some preparation:\r\n\r\n```\r\n$ npm install                       # install dependencies\r\n\r\n$ npm run package                   # prepare `build` directory for all architectures, or\r\n$ npm run package:x86               # prepare `build` directory for x86, or\r\n$ npm run package:x86_64            # prepare `build` directory for x86_64, or\r\n$ npm run package:arm               # prepare `build` directory for arm, or\r\n$ npm run package:arm64             # prepare `build` directory for arm64\r\n\r\n$ npm run platform:all              # setup for Android and iOS, or\r\n$ npm run platform:android          # setup for Android, or\r\n$ npm run platform:ios              # setup for iOS\r\n```\r\n\r\nIf you cloned the repository or want to change some settings, edit the file `config/parameters.json`\r\n(create it if necessary). It should at least contain the following properties, with values\r\nappropriate for your app:\r\n\r\n```json\r\n{\r\n    \"identifier\": \"io.mxapps.myapp\",\r\n    \"name\": \"My App\",\r\n    \"url\": \"https://myapp.mxapps.io\"\r\n}\r\n```\r\n\r\nFor information on further customization, refer to [Customizing your app](#customizing-your-app).\r\n\r\nNow, build and run the app:\r\n\r\n```\r\n$ npm run package                   # prepare `build` directory for all architectures, or\r\n$ npm run package:x86               # prepare `build` directory for x86, or\r\n$ npm run package:x86_64            # prepare `build` directory for x86_64, or\r\n$ npm run package:arm               # prepare `build` directory for arm, or\r\n$ npm run package:arm64             # prepare `build` directory for arm64\r\n\r\n$ npm run platform:all              # setup for Android and iOS, or\r\n$ npm run build               \r\n```\r\n\r\nBuild will generate necessary Android and IOS files in order to run the project.\r\n\r\nMake sure you checkout the [Trouble Shooting Section](#troubleshooting) \r\n\r\n##### For best experience open each platform project on their native IDE (Android studio for android, Xcode for IOS):\r\n\r\n###### IOS\r\n- Open `./build/platforms/ios/yourAppName.xcworkspace` from your Xcode\r\n- In recent version of Xcode you might need to set the build system; *File \u003e Project Settings*. Set the Shared or per-user project settings: the `Build system` to `Legacy Build Systems`.\r\n- Run the app on desired simulator\r\n\r\n###### Android\r\n- Open `./build/platforms/android/` in Android Studio\r\n- Run the app on desired simulator\r\n\r\n# \u003ca name=\"customize-app\"\u003e\u003c/a\u003eCustomizing your app\r\n\r\nWhen you first download this project, it is mostly empty. All functionality and styling is by\r\ndefault implemented as part of one this project's dependencies, called `mendix-hybrid-app-base`.\r\n\r\nYou can customize your hybrid app in several ways. All defaults from the base package can be\r\noverridden and/or extended, including the build process itself.\r\n\r\n## Folder structure\r\n\r\nThe project structure consists of the following elements:\r\n\r\n- `src/`: this is where you place all customizations for your app\r\n    - `www/`:\r\n        - `images`: any images that you'd like to use on e.g. the login screen\r\n        - `styles`: CSS files with styling for e.g. the login screen\r\n        - `scripts`: JavaScript files that customize the behavior of your app\r\n        - `index.html.mustache`: Mustache template file used to generate the index page\r\n    - `resources/`: icons and splash screens\r\n    - `config.xml.mustache`: template file that is used to generate the Phonegap configuration file\r\n- `config/`: this is where external configuration files go; these files are optional, overriding the\r\n  defaults. Example files containing the defaults are put here upon `npm install`. Possible\r\n  configuration files are:\r\n    - `environments.json`: a description of all available deployment environments for your app,\r\n      including the app IDs and URLs\r\n    - `parameters.json`: settings that influence some aspects of the build process and the resulting\r\n      app, such as Android/iOS support, offline mode, and pin login\r\n    - `resources.json`: descriptions of all resources, such as icons and splash screens, including\r\n      their types and sizes\r\n    - `texts.json`: translations/customizations for the static texts in the hybrid shell part of\r\n      your app\r\n- `build/`: (generated) contains all intermediate build files, such as the bundles javascript and\r\n  css. The contents of this folder are overwritten every time you run a build\r\n- `dist/`: (generated) the final build packages will end up here\r\n- `webpack.config.js`: starting point for the build process\r\n\r\n## Basic app settings\r\n\r\nSeveral simple app settings, such as the app name and identifier, can be set in\r\n`config/parameters.json`. If you've downloaded this project from the Mendix Portal, the file is\r\nalready there. Otherwise, you can look at the `config/parameters.json.example` file.\r\n\r\n## Styling\r\n\r\nTo customize the styling of the login screen (including the pin screen), add a .css file to\r\n`src/www/styles/`. It will be automatically picked up by the build process.\r\n\r\n## Page structure\r\n\r\nTo change the structure and contents of the login screen (including the pin screen), you can adapt\r\n`src/www/index.html.mustache`.\r\n\r\n## Translations / custom text\r\n\r\nAll static text in the hybrid app can be customized and/or translated. To do so, create a file\r\n`config/texts.json` containing the original text as keys and the replacement text as values. You can\r\ntake a look at `config/texts.json.example` to see which texts are available for translation.\r\n\r\n## Icons \u0026 Splash screens\r\n\r\nIcons and splash screens are configured in two separate places. The image files themselves should be\r\nstored in `src/resources/`. The configuration of each icon and splash screen should be updated in\r\n`config/resources.json`. You can take a look at `config/resources.json.example` for an example.\r\n\r\nIn case you have downloaded this package through the Mendix Portal, all configured icons and splash\r\nscreens have already been prepackaged and preconfigured.\r\n\r\n## Client behavior (advanced)\r\n\r\nYou can run custom code in two specific cases:\r\n- on client configuration setup\r\n- on Mendix client load\r\n\r\nTo implement custom behavior for these cases, edit `src/www/scripts/entry.js`.\r\n\r\n## Customizing the build process (advanced)\r\n\r\nYou can customize the build process by making changes to `webpack.config.js` in the root folder of\r\nthis project. All Webpack configuration you add here will be merged with the default Webpack\r\nconfiguration. You can read more about this in the\r\n[webpack-merge documentation](https://www.npmjs.com/package/webpack-merge).\r\n\r\n## Upgrading the base package\r\n\r\nDefault functionality and styling is implemented in the `mendix-hybrid-app-base` package. We will\r\noccasionally release updates to this package. You can upgrade the base package by running\r\n`npm upgrade` from the root of your project.\r\n\r\n# \u003ca name=\"troubleshooting\"\u003e\u003c/a\u003eTroubleshooting\r\n\r\n## PIN feature on iOS simulator\r\nWhen using the PIN feature while running your app on an iOS simulator, you experience an issue where the\r\napp will prompt you to setup a PIN every time app is launched. This is due to the underlying way Cordova access the Keychain.\r\nEither use a device, or enable `Keychain Sharing` in `Capabilities` of your project.\r\nSee [here](https://github.com/Crypho/cordova-plugin-secure-storage/issues/48) for more information.\r\n\r\n## iPhone X support\r\nPlease see [here](IPHONEX.md) for the steps to support iPhone X in your app.\r\n\r\n## Building the Android project locally\r\nWhen building your hybrid app locally, the Android build might fail.\r\nThis can have various reasons, but it generally boils down to version mismatches related to Gradle and/or the Android SDK in use.\r\n\r\n### Missing Gradle installation\r\n\r\n```\r\nCould not find an installed version of Gradle either in Android Studio,\r\nor on your system to install the gradle wrapper. Please include gradle\r\nin your path, or install Android Studio\r\n```\r\n\r\nEither\r\n\r\n- open the Android project (located in `build/platforms/android`) in Android Studio and accept its suggestion to install the Gradle wrapper; or\r\n- make sure that Gradle is available on your path, e.g. `export PATH=$PATH:/Users/MyUser/.gradle/wrapper/dists/gradle-4.4-all/xxx/gradle-4.4/bin`.\r\n\r\nYou can find installation instruction for Gradle on the [Gradle website](https://gradle.org/install/).\r\n\r\n### Minimum supported Gradle version is x.x.x. Current version is x.x.x. If using the gradle wrapper, try editing the distributionUrl\r\n\r\nMake sure you are have `CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL` in your path or export it to particular terminal session with correct distribution enabled eg:\r\n\r\n\u003eCORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL=https://services.gradle.org/distributions/gradle-x.x.x-all.zip\r\n\r\nBear in mind that other Cordova projects would also be effected by this change.\r\n\r\n### No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android\r\n\r\nIn build/platforms/android/build.gradle, replace\r\n\r\n`classpath 'com.android.tools.build:gradle:3.0.1'` with `classpath 'com.android.tools.build:gradle:3.1.2'`\r\n\r\nand perform a Gradle sync.\r\n\r\n### Execution failed for task ':app:processX86DebugResources' (or similar)\r\n\r\n```\r\nAGPBI: {\"kind\":\"error\",\"text\":\"error: resource android:attr/fontVariationSettings not found.\",\"sources\":[{\"file\":\"/Users/UserName/.gradle/caches/transforms-1/files-1.1/support-compat-28.0.0.aar/4abf4d56829ea1da7befcfae3c8fd6c7/res/values/values.xml\",\"position\":{\"startLine\":132,\"startColumn\":4,\"startOffset\":7725,\"endColumn\":69,\"endOffset\":7790}}],\"original\":\"\",\"tool\":\"AAPT\"}\r\nAGPBI: {\"kind\":\"error\",\"text\":\"error: resource android:attr/ttcIndex not found.\",\"sources\":[{\"file\":\"/Users/UserName/.gradle/caches/transforms-1/files-1.1/support-compat-28.0.0.aar/4abf4d56829ea1da7befcfae3c8fd6c7/res/values/values.xml\",\"position\":{\"startLine\":132,\"startColumn\":4,\"startOffset\":7725,\"endColumn\":69,\"endOffset\":7790}}],\"original\":\"\",\"tool\":\"AAPT\"}\r\n```\r\n\r\nIn build/platforms/android/project.properties, replace\r\n\r\n`target=android-27` with `target=android-28`\r\n\r\nand perform a Gradle sync.\r\n\r\n### Localhost \r\nIn case you build against localhost your app might not able to run, and throw an error: `Failed to load resource: net::ERR_CLEARTEXT_NOT_PERMITTED`.\r\n\r\nYou might have to add this element:\r\n\r\n```\r\n\u003cedit-config file=\"app/src/main/AndroidManifest.xml\" mode=\"merge\" target=\"/manifest/application\"\u003e\r\n  \u003capplication android:usesCleartextTraffic=\"true\" /\u003e\r\n\u003c/edit-config\u003e\r\n``` \r\n\r\ninside of `\u003cplatform name=\"android\"\u003e`\r\n\r\nin `src/config.xml.mustache`\r\n\r\nBear in mind that this config allows http requests and it shouldn't be in your production build.\r\n\r\n### No installed build tools found. Install the Android build tools version 19.1.0 or higher.\r\nEven when Android Studio is installed, you might need to install to build tools separately\r\n\r\n1. Launch Android Studio. Then go to *Preferences -\u003e Appearance \u0026 Behavior -\u003e System SEttings -\u003e Android SDK*. You will find `Android SDK Location`. For example `/Users/${user_name}/Library/Android/sdk`.\r\n\r\n2. Go to `SDK tools` tab and check `show package details`. `Android SDK build tools` will be there. Please make sure Android SDK build tools 19.1.0 or higher is installed.\r\n\r\n3. For MacOS: Edit *~/.bash_profile*, and set ANDROID_HOME as \"Android SDK Location\" which you found in the Android Studio.\r\n    ```\r\n    export ANDROID_HOME=/Users/${user_name}/Library/Android/sdk\r\n    export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools\r\n    ```\r\n    For Windows: Edit `Environment Variables`, Add entries for the relevant locations to the PATH. For example (substitute the paths with your local Android SDK installation's location):\r\n    ```\r\n    C:\\Users\\[your user]\\AppData\\Local\\Android\\Sdk\\platform-tools\r\n    C:\\Users\\[your user]\\AppData\\Local\\Android\\Sdk\\tools\r\n    ```\r\n    \r\nSee Cordova guide: [Android](https://cordova.apache.org/docs/en/latest/guide/platforms/android/index.html) or [iOS](https://cordova.apache.org/docs/en/latest/guide/platforms/ios/index.html)\r\n\r\n\r\n### Adding iOS platform fails\r\n\r\nWhen building your app locally, you should add the platforms of your choosing by running:\r\n\r\n```\r\n$ npm run platform:all              # setup for Android and iOS, or\r\n$ npm run platform:android          # setup for Android, or\r\n$ npm run platform:ios              # setup for iOS\r\n```\r\n\r\nWhen Android is your only target, you can choose the second option.\r\nUnfortunately, this does not work in the case of iOS, because some plugins require the android platform to be present.\r\nTo work around this, you should make sure that the Android platform was added before running npm run package:ios, either by running `npm run platform:all`, or by running `npm run platform:android` beforehand.\r\n\r\nIf required, you can later remove the android platform by running `npm run platform -- remove android`.\r\n\r\n### Menu bar is cut off at the bottom (e.g. on iPhone X)\r\n\r\nOn recent iOS devices, the menu bar (Simple Menu Widget) is not always fully visible.\r\nTo solve this, make the following changes in your styling:\r\n\r\nIn your app styling:\r\n\r\n```\r\nhtml, body {\r\n    height: 100vh; height: 100vh;\r\n}\r\n```\r\n\r\nIn your hybrid app styling:\r\n\r\n```\r\n.mx-hybridapp #content \u003e .mx-page {\r\n    padding-bottom: env(safe-area-inset-bottom); min-height: 100vh;\r\n}\r\n```\r\n\r\n### Failed iOS build with Missing or Invalid 'Team' configuration\r\n\r\nThis can be circumvented by opening the `.xcworkspace` project located in the `build/platforms/ios` directory with XCode and configuring the Development team in the project settings.\r\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmendix%2Fhybrid-app-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmendix%2Fhybrid-app-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmendix%2Fhybrid-app-template/lists"}