Sngine timeline App Documentation
This document explains the basic setup process for the Sngine Flutter app before delivery or website distribution. It covers Flutter installation, development tools, first run, package name changes, app name changes, app icon and splash replacement, Google Login setup, and basic dashboard configuration.
The instructions are based on the current project files, so buyers can follow them directly without digging through the codebase.
1. Requirements
At the time this document was updated on April 24, 2026, the latest stable versions shown in the official sources were:
| Tool | Stable Version | Notes |
|---|---|---|
| Flutter | 3.41.5 |
Reflected by the official Flutter documentation at the time of writing. |
| Xcode | 26.4.1 |
Shown on Apple Releases on April 16, 2026. |
| Android Studio | Panda 4 | 2025.3.4 |
Shown as the latest stable release on April 21, 2026. |
License Notice
This product is sold only through our official website: store.fluttercrafters.com
2. Install Flutter
- Download Flutter SDK from the official Flutter website.
- Extract it to a fixed location such as
/Users/yourname/development/flutter. - Add
flutter/binto your systemPATH. - Run
flutter doctor. - Complete any missing dependencies reported by Flutter Doctor.
Useful commands
flutter --version
flutter doctor
flutter doctor -v
flutter doctor shows a clean setup for the platforms you want to build.
3. Xcode and Android Studio
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -runFirstLaunch
Important
- Xcode is required if you want to build the iOS version on macOS.
- Android Studio is required for Android SDK, emulator, and platform tools.
- After installation, run
flutter doctoragain and confirm everything is ready.
4. Run the Project
flutter pub get
flutter run
Build release files
flutter build apk --release
flutter build appbundle --release
flutter build ios --release
5. Upload to Server
Yes, the server-side files must also be uploaded if you want the mobile app to work correctly with the backend features provided with this package.
- Upload the backend addon files to your server in the correct project location.
- Make sure the addon is installed and accessible from your website domain.
- Use the admin/backend setup before testing the app login and app settings.
Important after upload
After uploading the addon files, run the addon update script so the app settings and related backend definitions are registered correctly on your server.
https://your-domain.com/api-addons/update.php
Or run it from the server terminal if your hosting allows CLI access:
php api-addons/update.php
Minimum server checks
- Open
/api-addons/update.phponce after upload. - Confirm your API credentials exist in
/admincp/apis. - Open the app settings dashboard in
/api-addons/admin. - Check that
GET /api-addons/app/settingsreturns valid data.
6. Create Android Keystore
Before publishing the Android version, create your own release keystore. This is required for signed release builds and for long-term app updates on Google Play.
Create a keystore
keytool -genkeypair -v \
-keystore ~/your-app-release-key.jks \
-keyalg RSA \
-keysize 2048 \
-validity 10000 \
-alias your_key_alias
Recommended next step
After creating the keystore, store its values in your Android signing configuration, usually through
android/key.properties and your Gradle release signing setup.
storePassword=YOUR_STORE_PASSWORD
keyPassword=YOUR_KEY_PASSWORD
keyAlias=your_key_alias
storeFile=/full/path/to/your-app-release-key.jks
7. Get SHA Fingerprints for Google Login
Google Sign-In for Android often requires your app SHA certificate fingerprints, especially
SHA-1 and sometimes SHA-256, inside Firebase or Google Cloud settings.
Get SHA from your release keystore
keytool -list -v \
-alias your_key_alias \
-keystore ~/your-app-release-key.jks
Get SHA from the default debug keystore
keytool -list -v \
-alias androiddebugkey \
-keystore ~/.android/debug.keystore \
-storepass android \
-keypass android
Copy the SHA-1 and SHA-256 values and add them to your Android app inside
Firebase before downloading the final google-services.json file.
8. Change Package Name / Bundle ID
The current project still uses default test identifiers. Before publishing the app, replace them
with your final package name, for example com.yourcompany.yourapp.
Main files to update
| Platform | File | Current Value |
|---|---|---|
| Android | android/app/build.gradle.kts |
com.example.sngineapp |
| iOS | ios/Runner.xcodeproj/project.pbxproj |
com.example.sngineapp |
| Android Firebase | android/app/google-services.json |
Must be replaced with a file that matches your final package name |
- Update
applicationIdandnamespacefor Android. - Update
PRODUCT_BUNDLE_IDENTIFIERfor iOS. - Create matching Firebase apps for Android and iOS.
- Replace the Firebase configuration files.
- Update any related URL schemes or deep links if needed.
9. Change App Name
The current visible app name is Sngine timeline, and some internal branding still
uses Sngine.
Main files to update
lib/settings.dartfor the default internal app name.android/app/src/main/AndroidManifest.xmlforandroid:label.ios/Runner/Info.plistforCFBundleDisplayNameandCFBundleName.
Old name: Sngine timeline
New name: Your App Name
10. Change App Icon and Splash Screen
The project already includes separate branding files for the launcher icon and splash screen. Replace those files with your own final branding before building the release version.
App icon files
| Purpose | File | Notes |
|---|---|---|
| Main icon source | assets/branding/app_icon.png |
Used by flutter_launcher_icons for Android and iOS. |
| Launcher icon config | pubspec.yaml |
Contains the flutter_launcher_icons settings and adaptive Android background color. |
How to replace the app icon
- Replace
assets/branding/app_icon.pngwith your square icon image. - If needed, change
adaptive_icon_backgroundinpubspec.yaml. - Run the icon generator command from the project root.
flutter pub get
dart run flutter_launcher_icons
Splash screen files
| Platform | File | Usage |
|---|---|---|
| Flutter in-app splash | assets/branding/splash_light.png |
Displayed by the splash widget in lib/main.dart. |
| Optional dark splash asset | assets/branding/splash_dark.png |
Keep it updated if you also use dark-mode branding in future changes. |
| Android native splash image | android/app/src/main/res/drawable-*/splash.png |
Loaded by launch_background.xml. Replace all density versions such as mdpi, hdpi, xhdpi, xxhdpi, and xxxhdpi. |
| Android native splash background | android/app/src/main/res/drawable*/background.png |
Full-screen background image behind the centered splash logo, including the drawable-v21 and dark-mode versions if you use them. |
| iOS splash logo images | ios/Runner/Assets.xcassets/LaunchImage.imageset/ |
Replace LaunchImage.png, @2x, @3x and dark variants. |
| iOS splash background | ios/Runner/Assets.xcassets/LaunchBackground.imageset/ |
Replace background.png and darkbackground.png if needed. |
How to replace the splash screen
- Replace
assets/branding/splash_light.pngwith your final fullscreen splash design. - Replace all Android native splash assets in the matching
drawable-*folders, not only one file. - Replace the iOS launch assets inside
LaunchImage.imagesetandLaunchBackground.imageset. - If you need a different background color in Flutter, update the color inside
lib/main.dart. - Run a clean build after changing branding assets.
flutter clean
flutter pub get
flutter run
11. Google Login
Google Sign-In is already included in the current project, but it must be configured correctly before release.
What already exists in the project
google_sign_inis already included inpubspec.yaml.- Google settings exist in
lib/settings.dart. - Android Firebase config exists in
android/app/google-services.json. - iOS Google client setup exists in
ios/Runner/Info.plist.
What these files do
| File | Platform | Purpose | Where it must go |
|---|---|---|---|
google-services.json |
Android | Contains your Firebase Android app identifiers, project settings, API keys, and Google services configuration. | android/app/google-services.json |
GoogleService-Info.plist |
iOS | Contains your Firebase iOS app identifiers, project settings, reversed client ID, and Google services configuration. | ios/Runner/GoogleService-Info.plist |
Where to download them
- Open the Firebase Console: https://console.firebase.google.com/
- Add an Android app using the final package name from your Flutter project.
- Download the Android config file
google-services.json. - Add an iOS app using the final bundle ID from your Flutter project.
- Download the iOS config file
GoogleService-Info.plist.
Official Google / Firebase links
- Firebase Console: console.firebase.google.com
- Add Firebase to Android: firebase.google.com/docs/android/setup
- Add Firebase to iOS: firebase.google.com/docs/ios/setup
Required setup steps
- Create or use your Firebase project.
- Add an Android app using your final package name.
- Add an iOS app using your final bundle ID.
- Replace
google-services.jsoninandroid/app/. - Copy
GoogleService-Info.plisttoios/Runner/and add it to the iOS Runner target in Xcode. - Update
googleIosClientIdandgoogleAndroidClientIdin your app settings dashboard. - Update the iOS URL scheme in
Info.plistif your Google iOS client changes.
Android placement
The Android file must be placed directly inside the app module, not in the root project folder. The correct path is:
sngine-app/android/app/google-services.json
If this file belongs to a different package name than your current applicationId,
Google login and Firebase services will fail on Android.
iOS placement
The iOS file must be copied into the Runner app folder and included in the Xcode project so it is bundled with the app at build time.
sngine-app/ios/Runner/GoogleService-Info.plist
- Copy
GoogleService-Info.plistintoios/Runner/. - Open
ios/Runner.xcworkspacein Xcode. - Right click
Runnerin the file navigator, then chooseAdd Files to "Runner". - Select
GoogleService-Info.plist. - Make sure
Runnertarget is checked before confirming.
Google client IDs used by the app
This project does not rely only on the Firebase files. The Flutter login flow also reads Google client IDs from the public app settings returned by the backend.
googleIosClientIdfor iOS Google Sign-In initialization.googleAndroidClientIdfor Android server client configuration.GIDClientIDinios/Runner/Info.plistmust match the iOS client.- The reversed iOS client ID must be present inside
CFBundleURLSchemesinInfo.plist.
GoogleService-Info.plist into the folder alone is not always enough. In iOS,
it should also be added to the Runner target inside Xcode.
Quick example paths
Android:
android/app/google-services.json
iOS:
ios/Runner/GoogleService-Info.plist
12. License Activation
Before using the app in production, generate and download your license from the official license portal.
License portal
https://license.fluttercrafters.com/
Required information
- Your website domain.
- Your purchase code.
- Open the license portal.
- Enter your website domain.
- Enter your purchase code.
- Generate and download the app license file.
- Replace the local license file in this path:
sngine-app/lib/core/license/licenses.dart
sngine-app/lib/core/license/licenses.dart before building the app.
API credentials from your script admin panel
You will also need the API credentials from your own website admin panel:
https://your-domain.com/admincp/apis
API KeyAPI Secret
13. Dashboard Settings
After installation, some app-related settings can be changed from the admin dashboard, such as general app options, visible interface items, branding-related options, and other basic settings.
Example URL
https://your-domain.com/api-addons/admin
14. App Settings and Integrations
The app loads public settings from the backend during startup. This means some important values should be configured from the server dashboard, not only from local Flutter files.
Main public settings endpoint
GET https://your-domain.com/api-addons/app/settings
Main admin endpoints
https://your-domain.com/api-addons/admin
https://your-domain.com/api-addons/admin/app/settings
Important values to configure in app settings
| Key | Why it matters |
|---|---|
appName |
Used by the app UI and should match your final branding. |
googleIosClientId |
Required by iOS Google Sign-In inside Flutter. |
googleAndroidClientId |
Required by Android Google Sign-In server client configuration. |
onesignalEnabled |
Controls whether OneSignal is initialized when the app starts. |
onesignalAppId / onesignalTimelineAppId |
Required if you want push notifications to work. |
agoraAppId |
Required only if you want live streaming features. |
messengerUrlScheme |
Used when opening the separate Messenger app from the timeline app. |
messengerAndroidPackageId |
Used for Play Store fallback links to Messenger. |
messengerDomain |
Used for deep links and store fallback behavior. |
Optional integrations
- OneSignal: optional. If unused, keep
onesignalEnabled=false. - Agora live streaming: optional. If unused, keep
agoraAppIdempty. - Apple Sign In: the button exists in UI, but the API flow is not wired yet in the current app build.
15. Screenshots Guide
This section is prepared for real setup screenshots. Save your screenshots inside
docs/screenshots/ using the exact filenames below and they will appear here automatically.
Recommended: show the main Firebase project dashboard before adding Android and iOS apps.
Recommended: show the Android package name field and the download button for google-services.json.
Recommended: show the bundle ID field and the download button for GoogleService-Info.plist.
Recommended: show where SHA-1 and SHA-256 are added in Firebase Android app settings.
Recommended: show Add Files to "Runner" and confirm the Runner target is checked.
Recommended: show the selected Apple team and the final bundle identifier.
Recommended: show googleIosClientId, googleAndroidClientId, onesignalEnabled, and agoraAppId.
Recommended: show where the OneSignal App ID is copied from the OneSignal dashboard.
Recommended: show the Agora project page where the App ID is copied.
Optional: show the Google OAuth client page if you want to explain where the Google client IDs come from.
16. Release Checklist
- Upload the backend addon files and run
api-addons/update.php. - Generate and replace
lib/core/license/licenses.dartwith the customer license file. - Confirm
API KeyandAPI Secretare active in/admincp/apis. - Change Android
applicationIdand iOSbundle ID. - Replace
google-services.jsonandGoogleService-Info.plist. - Update Google client IDs in app settings and iOS
Info.plist. - Change app name, launcher icon, and splash assets.
- Create the Android release keystore and configure
android/key.properties. - In Xcode, set your Apple team in
Signing & Capabilitiesand verify the bundle identifier. - Update the app version in
pubspec.yamlbefore the final store build. - Run
flutter clean,flutter pub get, then test Android and iOS separately.
version: 1.0.0+1
17. Troubleshooting
Google Sign-In fails on Android
- Check that
google-services.jsonmatches the final Android package name. - Check that the correct
SHA-1andSHA-256were added in Firebase. - Check that
googleAndroidClientIdis correct in app settings.
Google Sign-In fails on iOS
- Check that
GoogleService-Info.plistwas added to theRunnertarget in Xcode. - Check that
GIDClientIDand the reversed URL scheme inInfo.plistmatch your current iOS client. - Check that the iOS bundle ID matches the Firebase iOS app exactly.
App opens but some settings look wrong
- Open
/api-addons/adminand review the app settings values. - Check that
GET /api-addons/app/settingsreturns the expected public settings. - Check that the license file belongs to the same final website domain.
Push notifications do not work
- Make sure
onesignalEnabledis enabled in app settings. - Make sure a valid
OneSignal App IDis configured. - Make sure the device granted notification permission.
The app fails immediately on startup
- Check that
lib/core/license/licenses.dartwas replaced with a valid generated license file. - Run
flutter cleanandflutter pub getafter configuration changes. - Check the terminal or Xcode/Android Studio logs for the first thrown error.
18. Important Notes
- Use a unique package name before uploading to Google Play or the App Store.
- Replace all demo Firebase files with your own production files.
- Update launcher icons and native splash assets for both Android and iOS before release.
- Run
api-addons/update.phpafter uploading or updating the backend addon files. - Some runtime values are loaded from
/api-addons/app/settings, not only from local Flutter code. - Complete license activation and confirm your API credentials before production use.
- Some app settings can be managed later from the admin dashboard after installation.
- Run
flutter cleanandflutter pub getafter major configuration changes. - Always test Android and iOS builds separately before final release.
19. Official Sources
- Flutter Installation Guide
- Flutter SDK Archive
- Flutter Android Deployment
- Flutter iOS Deployment
- Android App Signing
- Add SHA Fingerprints in Firebase
- Add Firebase to Android
- Add Firebase to iOS
- Apple Releases
- Xcode Updates
- Android Latest Updates
- Android Studio