https://github.com/kooijmaninc/genesis-x
The start of a complete library that integrates most common elements used in a program and/or app. Stay tuned
https://github.com/kooijmaninc/genesis-x
android cxx23 firebase ios linux macos notifications physics physics-engine push-notifications qmake qml qt qt6
Last synced: 2 months ago
JSON representation
The start of a complete library that integrates most common elements used in a program and/or app. Stay tuned
- Host: GitHub
- URL: https://github.com/kooijmaninc/genesis-x
- Owner: KooijmanInc
- License: apache-2.0
- Created: 2025-10-07T15:48:23.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2025-10-07T20:03:46.000Z (9 months ago)
- Last Synced: 2025-10-07T20:16:11.205Z (9 months ago)
- Topics: android, cxx23, firebase, ios, linux, macos, notifications, physics, physics-engine, push-notifications, qmake, qml, qt, qt6
- Language: QMake
- Homepage: https://www.kooijmaninc.nl
- Size: 123 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Genesis-X
[](https://github.com/KooijmanInc/Genesis-X/actions/workflows/quality.yml)
[](https://github.com/KooijmanInc/Genesis-X/actions/workflows/quality.yml)
Qt library with a physics-engine foundation and cross-platform notifications.
Tested with **Qt 6.10** (Qt Creator **17.0.2**).
---
## π Donations & Sponsorships
[](https://github.com/sponsors/KooijmanInc)
[](https://buy.stripe.com/3cIaEXeEt1n66BybcjaAw00)
[](https://buy.stripe.com/6oUfZh67X1n67FC4NVaAw01)
[](https://paypal.me/kooijmaninc)
If GenesisβX saved you time, consider supporting development:
- GitHub Sponsors: https://github.com/sponsors/KooijmanInc
- Stripe (oneβtime): https://buy.stripe.com/3cIaEXeEt1n66BybcjaAw00
- Stripe (monthly): https://buy.stripe.com/6oUfZh67X1n67FC4NVaAw01
- Company sponsorships (invoice/VAT): sponsors@kooijman-inc.com
See also **[BACKERS.md](BACKERS.md)** and **.github/FUNDING.yml**.
---
## New in this release
- **Biometrics**: C++ `BiometricsAuth` and QML `Biometrics` with `authenticate()`, `isAvailable`.
- **Permissions**: C++ `PermissionManager` and QML `Permissions` to check/request runtime permissions.
- **CommandController**: C++ Connecting to an api server. (we created a template api package in symfony for you to download at [https://github.com/KooijmanInc/gx-template-api](https://github.com/KooijmanInc/gx-template-api))
- **qdocs**: Written qdocs for easy access via F1 and help (usally it's autodetected, otherwise add the docs manually)
### QML quick start
```qml
import GenesisX.App.Biometrics 1.0
import GenesisX.App.Permissions 1.0
Biometrics {
id: bio
onResult: (ok, error) => console.log("Auth:", ok, error)
}
Permissions {
id: perms
}
Button {
text: "Unlock"
onClicked: bio.authenticate("Confirm your identity")
}
Button {
text: "Allow Notifications"
onClicked: perms.request(["notifications"])
}
```
```qmake
QT += genesisx_orm genesisx_app_notifications genesisx_app_biometrics genesisx_app_permissions
GX_LOADED_MODULES = $$QT
GX_LOADED_MODULES_CSV = $$join(GX_LOADED_MODULES, ",")
DEFINES += GX_LOADED_MODULES=\\\"$$GX_LOADED_MODULES_CSV\\\"
# ---------- Genesis-X pass app root path ----------
GENESISX_APP_ROOT = $$PWD
# ---------- Build type sets library path ----------
debug {
LOCAL_BUILD_PATH = debug
} else: profile {
LOCAL_BUILD_PATH = profile
} else {
LOCAL_BUILD_PATH = release
DEFINES += QT_NO_DEBUG_OUTPUT # disables qDebug()
#DEFINES += QT_NO_INFO_OUTPUT # uncomment to also disable qInfo()
#DEFINES += QT_NO_WARNING_OUTPUT # (usually keep warnings on)
}
# ---------- Set same build path optional ----------
DESTDIR = $$PWD/../$$LOCAL_DESTINATION_PATH/$$LOCAL_BUILD_PATH
DEST_LIBDIRS = $$DESTDIR
```
### C++ quick start
```cpp
#include
#include
#include
#include
#include
#include
int main (int argc, char* argv[])
{
GXOrm::TransportConfig cfg;
GXOrm::loadTransportConfig(":/config/config.json", cfg, u"dev");
auto* conn = GXOrm::gxOrmConnectionController();
conn->applyTransport(cfg);
auto* cmd = GXOrm::gxOrmCommandController();
cmd->cmdLogin("user@example.localhost", "your-password");
cmd->cmdPing();
QQmlApplicationEngine engine;
QQmlContext *rootContext = engine.rootContext();
GXCore::registerEnabledQmlModules(&engine, GX_LOADED_MODULES);
GXOrm::registerEnabledQmlModules(&engine);
}
```
```json
{
"backend": "http",
"api": {
"baseUrl": "https://api.example.com",
"appVersion": "1.0.0",
"userLanguage": "en",
"timeoutMs": 8000,
"retryCount": 0,
"allowInsecureDev": false,
"appKey": "app-key",
"apiToken": "2Y&1N+yBmJxgDp%D-you-token_%UJNHOUIuc0+!yFWW%OmJ",
"bearerToken": "",
"headers": {
"Accept": "application/json"
}
},
"sql": {
"driver": "",
"host": "",
"port": 3306,
"database": "",
"user": "",
"password": "",
"options": {}
},
"overrides": {
"dev": {
"api": {
"baseUrl": "https://api.example.localhost",
"allowInsecureDev": true
},
"sql": {
"host": "127.0.0.1",
"port": 3306,
"user": "dev",
"password": "secret"
}
},
"staging": {
"api": {
"baseUrl": "https://staging.api.example.com",
"allowInsecureDev": false
},
"sql": {
"host": "https://www.example.com",
"port": 3306,
"user": "staging",
"password": "secret"
}
}
}
}
```
---
## Features
- QMLβfriendly Core API
- Notifications:
- β
Android (Firebase C++ SDK)
- β
Windows
- β
Linux, iOS/iPadOS, macOS
- Permissions:
- β
Android
- Biometrics:
- β
Android
- Android Firebase integration autoβwired via generated `gradle.properties`
- Scripted 3rdβparty setup (kept out of Git)
---
## Requirements
- Qt 6.10 toolchains (Android kit if targeting Android)
- Android SDK + NDK (for Android builds)
- Git, PowerShell (Windows) or bash (macOS/Linux)
---
## Repo Layout (excerpt)
```
Genesis-X /
ββ common/
β ββ qmake-destination-path.pri
β ββ qmake-target-platform.pri
ββ config/
β ββ deps.json
ββ core/
β ββ android-template/
β β ββ build.gradle
β β ββ google-services.json
β β ββ gradle.properties
β β ββ gradle.properties.in
β ββ include/
β β ββ GenesisX/
β β ββ Auth/
β β β ββ Auth.h
β β ββ Biometrics/
β β β ββ Biometrics.h
β β ββ Permissions/
β β β ββ Permissions.h
β β ββ utils/
β β β ββ SystemInfo.h
β β ββ CoreQml.h
β β ββ genesisx_global.h
β ββ qml/
β β ββ GenesisX/
β β β ββ App/
β β β β ββ Biometrics/
β β β β β ββ biometrics.qmltypes
β β β β β ββ qmldir
β β β β ββ Permissions/
β β β β ββ permissions.qmltypes
β β β β ββ qmldir
β β β ββ Core/
β β β ββ Navigation/
β β β β ββ Link.qml
β β β β ββ NavHost.qml
β β β β ββ navigation.qmltypes
β β β β ββ qmldir
β β β ββ Notifications/
β β β β ββ notifications.qmltypes
β β β β ββ qmldir
β β β ββ SystemInfo/
β β β ββ qmldir
β β β ββ systeminfo.qmltypes
β β ββ core_modules.qrc
β ββ resources/
β β ββ core.qrc
β β ββ logo.ico
β ββ src/
β β ββ app/
β β β ββ ab/
β β β β ββ ABTesting.cpp
β β β β ββ ABTesting.h
β β β ββ analytics/
β β β β ββ analytics.cpp
β β β β ββ analytics.h
β β β ββ AudioRecorder/
β β β β ββ AudioRecorder.cpp
β β β β ββ AudioRecorder.h
β β β ββ Auth/
β β β β ββ Auth.cpp
β β β ββ Biometrics/
β β β β ββ android/
β β β β β ββ src/
β β β β β ββ main/
β β β β β ββ java/
β β β β β ββ biometrics/
β β β β β β ββ GxBiometrics.java
β β β β β ββ org/
β β β β β ββ qtproject/
β β β β β ββ qt/
β β β β β ββ android/
β β β β β ββ QtActivityUtils.java
β β β β ββ Biometrics.cpp
β β β β ββ BiometricsAndroid.cpp
β β β β ββ BiometricsQml.cpp
β β β β ββ BiometricsQml.h
β β β ββ notifications/
β β β β ββ fcm_android.cpp
β β β β ββ fcm_android.h
β β β β ββ GXAppDelegate+Push_ios.mm
β β β β ββ GXAppDelegate+Push_ios_old.mm
β β β β ββ GXAppDelegate+Push_macos.mm
β β β β ββ GXAppDelegate+Push_macos_old.mm
β β β β ββ GXPush_macos.mm
β β β β ββ GXPushBridge.mm
β β β β ββ NotificationHandler.cpp
β β β β ββ NotificationHandler.h
β β β β ββ NotificationHandler_apple.mm
β β β β ββ NotificationHandler_apple_bridge.h
β β β β ββ NotificationHandler_apple_old.mm
β β β β ββ NotificationsQml.cpp
β β β β ββ NotificationsQml.h
β β β ββ Permissions/
β β β ββ android/
β β β β ββ src/
β β β β ββ main/
β β β β ββ java/
β β β β ββ permissions/
β β β β ββ GxPermissions.java
β β β ββ Permissions.cpp
β β β ββ PermissionsAndroid.cpp
β β β ββ PermissionsQml.cpp
β β β ββ PermissionsQml.h
β β ββ core/
β β β ββ CoreQml.cpp
β β ββ navigation/
β β β ββ GxRouter.cpp
β β β ββ GxRouter.h
β β β ββ NavigationQml.cpp
β β β ββ NavigationQml.h
β β ββ utils/
β β ββ SystemInfo.cpp
β β ββ SystemInfoQml.cpp
β β ββ SystemInfoQml.h
β ββ core.pro
ββ docs/
β ββ images/
β β ββ arrow_bc.png
β ββ out/
β β ββ classes.html
β β ββ codegen-h.html
β β ββ coreqml-h.html
β β ββ genesisx-app-biometrics-qmlmodule.html
β β ββ genesisx-app-permissions-qmlmodule.html
β β ββ genesisx-core.html
β β ββ genesisx-guides-module.html
β β ββ genesisx-notifications-qmlmodule.html
β β ββ genesisx-orm-module.html
β β ββ genesisx-orm.html
β β ββ genesisx.index
β β ββ GenesisX.qch
β β ββ GenesisX.qhp
β β ββ getting-started.html
β β ββ gx-app-ab-abtesting.html
β β ββ gx-app-ab.html
β β ββ gx-app-analytics-analytics.html
β β ββ gx-app-analytics.html
β β ββ gx-app-audiorecorder-audiorecorder.html
β β ββ gx-app-audiorecorder.html
β β ββ gx-app-auth-auth.html
β β ββ gx-app-auth.html
β β ββ gx-app-biometrics-biometrics.html
β β ββ gx-app-biometrics.html
β β ββ gx-app-notifications-classes.html
β β ββ gx-app-notifications-notificationhandler.html
β β ββ gx-app-notifications.html
β β ββ gx-app-permissions-permissions.html
β β ββ gx-app-permissions.html
β β ββ gx-app.html
β β ββ gx-orm-codegen.html
β β ββ gx-orm-commandcontroller.html
β β ββ gx-orm-connectioncontroller.html
β β ββ gx-orm.html
β β ββ gx.html
β β ββ index.html
β β ββ namespaces-orm.html
β β ββ namespaces.html
β β ββ qml-genesisx-app-biometrics-biometrics-members.html
β β ββ qml-genesisx-app-biometrics-biometrics.html
β β ββ qml-genesisx-app-permissions-permissions-members.html
β β ββ qml-genesisx-app-permissions-permissions.html
β β ββ qml-genesisx-notifications-notificationhandler-members.html
β β ββ qml-genesisx-notifications-notificationhandler.html
β β ββ systeminfo-h.html
β ββ style/
β β ββ genesisx-dark.css
β ββ topics/
β β ββ classes.qdoc
β β ββ genesisx-core.qdoc
β β ββ getting-started.qdoc
β β ββ group_notifications.qdoc
β β ββ guides.qdoc
β β ββ gx-namespace.qdoc
β β ββ gx-orm.qdoc
β β ββ index.qdoc
β β ββ namespaces.qdoc
β ββ .gitignore
β ββ .qmake.stash
β ββ docs.pro
β ββ genesisx.qdocconf
β ββ Makefile
β ββ Makefile.Debug
β ββ Makefile.Release
β ββ qt-includes.qdocconf.in
ββ LICENSES/
β ββ GPL-3.0-only.txt
β ββ LicenseRef-KooijmanInc-Commercial.txt
ββ mkspecs/
β ββ features/
β β ββ conf/
β β β ββ gx_core.prf
β β β ββ gx_core_sub.prf
β β β ββ gx_orm.prf
β β β ββ gx_physics.prf
β β ββ genesisx_app_core.prf
β β ββ gx_app_ab.prf
β β ββ gx_app_analytics.prf
β β ββ gx_app_audiorecorder.prf
β β ββ gx_app_auth.prf
β β ββ gx_app_background.prf
β β ββ gx_app_billing.prf
β β ββ gx_app_biometrics.prf
β β ββ gx_app_calendar.prf
β β ββ gx_app_camera.prf
β β ββ gx_app_cast.prf
β β ββ gx_app_clipboard.prf
β β ββ gx_app_config.prf
β β ββ gx_app_connectivity.prf
β β ββ gx_app_contacts.prf
β β ββ gx_app_crash.prf
β β ββ gx_app_deeplinks.prf
β β ββ gx_app_files.prf
β β ββ gx_app_haptics.prf
β β ββ gx_app_imagepicker.prf
β β ββ gx_app_intents.prf
β β ββ gx_app_location.prf
β β ββ gx_app_logging.prf
β β ββ gx_app_media.prf
β β ββ gx_app_notifications.prf
β β ββ gx_app_permissions.prf
β β ββ gx_app_remoteconfig.prf
β β ββ gx_app_review.prf
β β ββ gx_app_root.prf
β β ββ gx_app_securestore.prf
β β ββ gx_app_sensors.prf
β β ββ gx_app_share.prf
β β ββ gx_app_updater.prf
β β ββ gx_runtime.prf
β ββ modules/
β ββ qt_lib_genesisx.pri
β ββ qt_lib_genesisx_app_ab.pri
β ββ qt_lib_genesisx_app_analytics.pri
β ββ qt_lib_genesisx_app_audiorecorder.pri
β ββ qt_lib_genesisx_app_auth.pri
β ββ qt_lib_genesisx_app_background.pri
β ββ qt_lib_genesisx_app_billing.pri
β ββ qt_lib_genesisx_app_biometrics.pri
β ββ qt_lib_genesisx_app_calendar.pri
β ββ qt_lib_genesisx_app_camera.pri
β ββ qt_lib_genesisx_app_cast.pri
β ββ qt_lib_genesisx_app_clipboard.pri
β ββ qt_lib_genesisx_app_config.pri
β ββ qt_lib_genesisx_app_connectivity.pri
β ββ qt_lib_genesisx_app_contacts.pri
β ββ qt_lib_genesisx_app_core.pri
β ββ qt_lib_genesisx_app_crash.pri
β ββ qt_lib_genesisx_app_deeplinks.pri
β ββ qt_lib_genesisx_app_files.pri
β ββ qt_lib_genesisx_app_haptics.pri
β ββ qt_lib_genesisx_app_imagepicker.pri
β ββ qt_lib_genesisx_app_intents.pri
β ββ qt_lib_genesisx_app_location.pri
β ββ qt_lib_genesisx_app_logging.pri
β ββ qt_lib_genesisx_app_media.pri
β ββ qt_lib_genesisx_app_notifications.pri
β ββ qt_lib_genesisx_app_permissions.pri
β ββ qt_lib_genesisx_app_preferences.pri
β ββ qt_lib_genesisx_app_remoteconfig.pri
β ββ qt_lib_genesisx_app_review.pri
β ββ qt_lib_genesisx_app_securestore.pri
β ββ qt_lib_genesisx_app_sensors.pri
β ββ qt_lib_genesisx_app_share.pri
β ββ qt_lib_genesisx_app_updater.pri
β ββ qt_lib_genesisx_orm.pri
β ββ qt_lib_genesisx_physics.pri
ββ orm/
β ββ include/
β β ββ GenesisX/
β β ββ Orm/
β β ββ AuthCredentials.h
β β ββ Codegen.h
β β ββ CommandController.h
β β ββ ConfigIO.h
β β ββ ConnectionCheck.h
β β ββ ConnectionController.h
β β ββ Controllers.h
β β ββ DataAccess.h
β β ββ genesisx_orm_global.h
β β ββ HttpConfig.h
β β ββ HttpResponse.h
β β ββ Json.h
β β ββ JsonAdapter.h
β β ββ OrmQml.h
β β ββ Repository.h
β β ββ RepositoryOld.h
β β ββ SqlConfig.h
β β ββ TransportConfig.h
β ββ src/
β β ββ core/
β β β ββ CommandController.cpp
β β β ββ CommandControllerQml.cpp
β β β ββ CommandControllerQml.h
β β β ββ ConfigIO.cpp
β β β ββ ConnectionController.cpp
β β β ββ Controllers.cpp
β β β ββ HttpConnectionChecker.cpp
β β β ββ HttpResponse.cpp
β β β ββ OrmQml.cpp
β β ββ tools/
β β ββ Codegen.cpp
β ββ orm.pro
ββ physics/
β ββ include/
β β ββ GenesisX/
β β ββ vehicles/
β β β ββ vehicle4w.h
β β ββ genesisx_physics_global.h
β ββ plugin/
β β ββ physics_plugin.cpp
β β ββ physics_plugin.pro
β ββ src/
β β ββ vehicles/
β β ββ vehicle4w.cpp
β ββ physics.json
β ββ physics.pro
ββ scripts/
β ββ ci/
β β ββ check-spdx-and-bom.bat
β β ββ check-spdx-and-bom.ps1
β β ββ check-spdx-and-bom.sh
β ββ packages/
β β ββ firebase.bat
β β ββ firebase.sh
β ββ add-headers.bat
β ββ add-headers.ps1
β ββ add-headers.sh
β ββ bootstrap.bat
β ββ bootstrap.sh
β ββ cleanup-merged-branches.bat
β ββ cleanup-merged-branches.ps1
β ββ cleanup-merged-branches.sh
β ββ collect-traffic.js
β ββ fetch-gpl-license.bat
β ββ fetch-gpl-license.ps1
β ββ fetch-gpl-license.sh
β ββ fix-bom.bat
β ββ fix-bom.ps1
β ββ install-prepush.bat
β ββ install-prepush.sh
β ββ release.bat
β ββ release.sh
ββ tools/
β ββ gxgen/
β β ββ debug/
β β β ββ config.json
β β β ββ genesisx.dll
β β β ββ genesisx_orm.dll
β β β ββ gxgen.exe
β β β ββ libgenesisx.a
β β β ββ libgenesisx_orm.a
β β ββ .qmake.stash
β β ββ gxgen.pro
β β ββ main.cpp
β β ββ Makefile
β β ββ Makefile.Debug
β β ββ Makefile.Release
β ββ qtcreator-snippets/
β β ββ snippets.xml
β ββ qtcreator-wizard/
β β ββ projects/
β β β ββ GenesisXApiDatabase/
β β β β ββ templates/
β β β β ββ config.json.tmpl
β β β ββ GenesisXApp/
β β β β ββ templates/
β β β β β ββ features/
β β β β β β ββ gx_app_root.prf.tmpl
β β β β β ββ project-ui/
β β β β β β ββ android/
β β β β β β β ββ AndroidManifest.xml.tmpl
β β β β β β β ββ google-services.json.tmpl
β β β β β β ββ apple/
β β β β β β β ββ ios/
β β β β β β β β ββ Entitlements.plist.tmpl
β β β β β β β β ββ Info.plist.tmpl
β β β β β β β ββ macos/
β β β β β β β β ββ Entitlements.plist.tmpl
β β β β β β β β ββ Info.plist.tmpl
β β β β β β β ββ GoogleService-Info.plist.tmpl
β β β β β β ββ assets/
β β β β β β β ββ genesisx-xcore.svg
β β β β β β β ββ qmldir.tmpl
β β β β β β β ββ Style.qml.tmpl
β β β β β β ββ components/
β β β β β β β ββ qmldir.tmpl
β β β β β β β ββ SplashWobble.qml.tmpl
β β β β β β ββ src/
β β β β β β β ββ main.cpp.tmpl
β β β β β β ββ views/
β β β β β β β ββ MasterView.qml.tmpl
β β β β β β ββ assets.qrc.tmpl
β β β β β β ββ components.qrc.tmpl
β β β β β β ββ icons.qrc.tmpl
β β β β β β ββ ui.pro.tmpl
β β β β β β ββ views.qrc.tmpl
β β β β β ββ .gitignore.tmpl
β β β β β ββ .qmake.conf.tmpl
β β β β β ββ project.pro
β β β β ββ wizard.json
β β β ββ GenesisXPhysicsApp/
β β β β ββ wizard.json
β β β ββ genesisx-xcore.png
β β ββ install-wizard.bat
β ββ update_gradle_props.ps1.in
ββ zdev/
β ββ readyFordeletion/
β β ββ ApiClient.cpp
β β ββ ApiClient.h
β ββ zdev.pro
ββ .gitattributes
ββ .gitignore
ββ .gitlab-ci.yml
ββ BACKERS.md
ββ CODE_OF_CONDUCT.md
ββ CONTRIBUTING.md
ββ dev.pri
ββ GenesisX.pro
ββ GenesisX.pro.user
ββ LICENSE
ββ LICENSING.md
ββ README.md
ββ SECURITY.md
ββ SUPPORT.md
```
---
## Install / Setup
### 1) Clone
```bash
git clone Genesis-X
cd Genesis-X
```
### 2) Fetch 3rdβparty packages (Firebase)
**Windows (PowerShell/cmd):**
```bat
scripts\bootstrap.bat firebase
:: or:
scripts\bootstrap.bat all
```
**macOS / Linux:**
```bash
./scripts/bootstrap.sh firebase
# or:
./scripts/bootstrap.sh all
```
What it does:
- Downloads `firebase_cpp_sdk_13.1.0.zip`
- Verifies SHAβ256
- Unzips to `3rdparty/firebase_cpp_sdk/` (Gitβignored)
---
## Integrate into Your App
> Goal: zero perβapp hardcoding of Firebase paths.
### A) App root: copy feature + `.qmake.conf`
Copy **`mkspecs/features`** from GenesisβX into your **app root**, then create **`.qmake.conf`** in your app root:
```ini
# .qmake.conf (in your APP root)
load(gx_app_root)
QMAKEPATH += /Genesis-X
```
### B) App `.pro`: set Android package dir
```qmake
# Where Qt copies Android template files from:
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
```
### C) Link GenesisβX modules in your app
```qmake
# Core
QT += genesisx
# Optional modules
QT += genesisx-physics
```
### D) (Soon optional, now mandatory) Clean output structure in your app
```qmake
# ---------- Build type ----------
CONFIG(debug, debug|release|profile) {
BUILD_PATH = debug
} else: CONFIG(profile, debug|release|profile) {
BUILD_PATH = profile
} else {
BUILD_PATH = release
}
DESTDIR = $$PWD/binaries/$$LOCAL_DESTINATION_PATH/$$BUILD_PATH
```
---
## How Android Path Resolution Works
**Problem:** Gradle needs absolute paths to Firebase C++ SDK.
**Solution:** GenesisβX generates them for youβno app changes needed.
1. `core/android-template/gradle.properties.in` contains tokens:
```properties
firebase_cpp_sdk_dir=$$FIREBASE_CPP_SDK_DIR
baseDir=$$FIREBASE_DEPENDENCIES_GRADLE
```
2. During **Run qmake**, the library computes:
- `$$FIREBASE_CPP_SDK_DIR` β `/3rdparty/firebase_cpp_sdk`
- `$$FIREBASE_DEPENDENCIES_GRADLE` β `<...>/Android/firebase_dependencies.gradle`
3. qmake writes the resolved file to the shadow build tree and the library build copies it back to:
```
core/android-template/gradle.properties
```
4. `qt_lib_genesisx.pri` copies `build.gradle` and the **generated** `gradle.properties` into your appβs `ANDROID_PACKAGE_SOURCE_DIR`.
Qt then copies those into `android-build/` and Gradle uses them.
> If you move GenesisβX, simply **rebuild the library**; paths are refreshed automatically.
---
## Scripts Reference
### Bootstrap (downloads 3rdβparty deps)
- **Windows**
```bat
scripts\bootstrap.bat firebase
scripts\bootstrap.bat all
```
- **macOS / Linux**
```bash
./scripts/bootstrap.sh firebase
./scripts/bootstrap.sh all
```
### SPDX headers (dual license)
```bash
# macOS/Linux
./scripts/add-headers.sh
# Windows
scripts\add-headers.bat
```
Writes **UTFβ8 (no BOM)** and respects shebangs. Override with env vars:
`COPYRIGHT_OWNER`, `COPYRIGHT_YEAR`, `LICENSE_EXPR`.
### Fix UTFβ8 BOM (Windows/qmake)
```bat
scripts\fix-bom.bat
```
### Preβpush protection (main/staging)
```bash
./install-prepush.sh
# Windows: install-prepush.bat
```
Blocks direct pushes to `main`/`staging`. Oneβoff override:
`ALLOW_PROTECTED_PUSH=1 git push β¦`.
### Fetch GPL text
```bash
scripts/fetch-gpl-license.sh
# or Windows:
scripts\fetch-gpl-license.ps1
```
---
## Governance & Policies
- **Contributing Guide:** [CONTRIBUTING.md](CONTRIBUTING.md)
- **Code of Conduct:** [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
- **Security Policy:** [SECURITY.md](SECURITY.md)
- **Support:** [SUPPORT.md](SUPPORT.md)
---
## Licensing
GenesisβX is **dualβlicensed**:
**(LicenseRef-KooijmanInc-Commercial OR GPL-3.0-only)**
See:
- `LICENSES/LicenseRef-KooijmanInc-Commercial.txt` (commercial terms)
- `LICENSES/GPL-3.0-only.txt` (GPL v3 only; use fetch script if placeholder)
All source files should include an SPDX header. See **LICENSING.md** for examples.
---
## Roadmap
- Linux notifications
- iOS/iPadOS/macOS notifications (APNs)
- Physics modules exposed to QML
- CI samples (bootstrap + Android matrix)
---
## Support
Open an issue/discussion and include:
- your appβs `ANDROID_PACKAGE_SOURCE_DIR`
- `core/android-template/gradle.properties` contents
- the Gradle error snippet