iPhone

Smart Fleet – iPhone App Documentation

Apps v1.0.0 · needs website v2.0+

Overview

Smart Fleet Mobile Apps are two iPhone apps for the Smart Fleet SaaS vehicle rental and tracking website: Smart Fleet Customer for the people who rent from your owners and Smart Fleet Driver for your drivers. Owners, managers and the super admin keep using the website. The apps talk only to your website, so all data stays on your server.

One app for every ownerOne published build serves all your owners. People enter the app code (or scan the owner's QR code) and the app shows that owner's logo, name and colours after sign-in.
Same rules as the websiteEvery action runs the website's own code: availability, prices, free-cancellation window, permissions and notifications are identical.
Live tripsCustomers follow a running trip on the map; drivers share their position while a trip runs, also with the screen off.
Push notificationsThrough Firebase, configured on the website in Mobile App Console.
SecureLogin token in the phone's secure storage; HTTPS only in release builds; card payments happen on the website's own secure page, never inside the app.
Ready for the App StoreStep-by-step build, upload and store submission in this guide.

What is in the package

AppFolderPackage nameFor
Smart Fleet Customeriphone_app/ in the customer zipcom.smartfleet.customerAppYour owners' customers (users of type client)
Smart Fleet Driveriphone_app/ in the driver zipcom.smartfleet.driverAppDrivers (users of type driver)

Inside each folder:

Folder / fileWhat it is
lib/The app's source code (Flutter / Dart): api.dart, config.dart, theme.dart, widgets.dart, push.dart and screens/.
ios/The iPhone project, already set up (permissions, icons, signing hooks).
assets/icon.png and icon_foreground.png (app icon), logo.png and mark.png (shown before sign-in).
test/, tool/Automated tests and the script that makes store screenshots.
docs/openapi.yamlThe website API the app uses (for developers who want to extend it). docs/screenshots/ has sample pictures.
pubspec.yamlApp version and the list of libraries.
documentation/This guide.
Required: the apps need Smart Fleet SaaS v2.0 or newer installed on a domain with HTTPS (SSL certificate). The website is a separate product.

Features

Smart Fleet Customer

AreaWhat the customer can do
HomeWelcome text and banner of the owner, "your trip right now" or next trip, quick buttons and the owner's call / WhatsApp / email buttons.
VehiclesList of the owner's vehicles with photos and rates. Search by name, model, colour or plate. Pick a date range to see only the vehicles that are free (marked Available). Save favourites with the heart.
Vehicle & requestPhotos, features, price per day / week / month. Live price for the chosen dates, then send the booking request with pick-up and drop-off address and travellers.
My tripsBookings and requests with status. Pay online (opens the owner's secure payment page, already signed in), cancel inside the free-cancellation window, rate a finished trip.
Trip detailsProgress timeline, route with directions, your driver with call button, vehicle, payment and balance, trip log (distance, fuel), rental agreement, invoice, and a live tracking link you can share.
StatementTotals paid and due and every booking with its balance.
DocumentsPhotograph your ID or driving licence and upload it; see when it is approved.
ProfileEdit name, phone and address, change password, saved vehicles, contact buttons, sign out.
PushNotifications about requests, confirmations and trips.

Smart Fleet Driver

AreaWhat the driver can do
TodayCurrent trip, trips of the day and upcoming trips; the assigned vehicle with its daily check.
TripProgress, route with navigate buttons (opens the maps app), customer with call, notes, vehicle, readings.
Start & finishOdometer, fuel level, checklist and up to 4 photos at start and at finish. Distance is calculated for you.
GPS sharingWhile a trip runs the app shares the position with the office and the customer's live link, also when the app is in the background (a notification is shown). It stops when the trip ends.
ExpensesLog fuel (litres, amount, odometer) and expenses (toll, parking, wash …) with a receipt photo; list of recent entries.
ReportReport a breakdown, damage, accident or SOS with photos; the office is told straight away with your position, and replies show in the app.
Trips & profileFinished trips, edit profile and password, contact buttons.
OfflineFuel, expenses and reports are saved on the phone when there is no signal and sent automatically when it returns.
PushNotifications when the office assigns or changes a trip.

Common to both

Requirements

Your computer (to build the app)

ItemNeeded
SystemA Mac with a recent macOS (iPhone apps can only be built with Xcode)
XcodeLatest stable version from the Mac App Store, with the command-line tools
Flutter SDKStable channel, Dart 3.3 or newer
CocoaPodssudo gem install cocoapods (or Homebrew)

Phones that can run the app

iPhone with iOS 15 or newer.

Accounts

Website

Smart Fleet SaaS v2.0 or newer on HTTPS, with the migrations run (php artisan migrate).

Install Xcode & Flutter

  1. Install Xcode from the Mac App Store, open it once and accept the licence. Then:
    sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
    sudo xcodebuild -runFirstLaunch
  2. Install Flutter from docs.flutter.dev and CocoaPods.
  3. Check everything:
    flutter doctor
    Flutter and Xcode should show green ticks.

Prepare the website

  1. Update the website to Smart Fleet SaaS v2.0 or newer and run php artisan migrate. This adds the tables the apps need (device tokens, app settings).
  2. Make sure the site opens on HTTPS and APP_URL in .env is the real address.
  3. As super admin, open Mobile App Console: set the latest and minimum app version, the four store links (customer and driver, Google Play and App Store), maintenance mode, the features that are on and the Firebase key for push. You can also switch the apps off completely.
  4. As owner, open Mobile Web App (menu): your app code, logo, colours, welcome text, contact buttons, which tabs customers see, and the QR code to print or share. The same code and QR also appear on your public website.
  5. For photos: set upload_max_filesize = 12M and post_max_size = 40M in php.ini (a driver request can carry several photos).
The app code is the short code customers and drivers type once in the app. If an owner changes it, old QR codes and links stop working.

Open the project

Unlike a bare Flutter source package, the iPhone project is already included, so there is no setup script. Unzip, then in the app folder:

cd iphone_app
flutter pub get

The identifiers are com.smartfleet.customerApp (customer) and com.smartfleet.driverApp (driver). Change them to your own before you publish:

Point the app at your website

Give the website address when you build; it is then fixed in the app. The address ends with /api/v2:

flutter run --dart-define=API_BASE=https://your-domain.com/api/v2

To build an app for one owner only (the code screen is skipped), add that owner's app code:

flutter run --dart-define=API_BASE=https://your-domain.com/api/v2 --dart-define=COMPANY=AB12CD

Run on an iPhone or simulator

Xcode signing

  1. Run flutter pub get, then cd ios && pod install.
  2. Open ios/Runner.xcworkspace (not the .xcodeproj) in Xcode.
  3. Select Runner → Signing & Capabilities, tick Automatically manage signing, choose your Team and set your own Bundle Identifier.
  4. Add the capabilities Push Notifications and Background Modes → Remote notifications (driver app: also Location updates).

Simulator

open -a Simulator
flutter run --dart-define=API_BASE=https://your-domain.com/api/v2

Camera and push notifications do not work in the simulator.

Your iPhone

Connect it, trust the computer, turn on Developer Mode (Settings → Privacy & Security) and run flutter run. The first time, trust your developer certificate under Settings → General → VPN & Device Management.

Testing against a local website (http)

Debug builds accept plain http:// (use your Mac's address, for example http://192.168.1.20/…). Release builds require HTTPS.

Company code & branding

Changes that need no new build (from the website)

WhatWhere
Owner name, logo, colours, light / dark, welcome title and text, banner, contact buttonsOwner → Mobile Web App. The app shows them after sign-in (the sign-in screen itself keeps the Smart Fleet logo and name).
App code and QR codeSame page. The QR code can be printed or sent; scanning it fills in the code in both apps.
Which tabs the customer seesSame page (Home, Vehicles, My trips, Documents, Profile; at least two).
Store links, latest and minimum version, maintenance, features on / off, Firebase keySuper admin → Mobile App Console
System logo and name shown before sign-inSuper admin → system settings (logo, favicon, title)

The app sends X-App-Version; the website answers 426 update_required below the minimum version, 503 maintenance during maintenance and 403 when the apps are switched off.

Changes in the code (then build again)

Push notifications (Firebase + APNs)

Optional. Without it everything works; only the phone pop-ups are missing.

  1. Create a project in the Firebase console and add two iOS apps with the bundle identifiers of the Customer and Driver apps.
  2. Download each GoogleService-Info.plist and add it to ios/Runner/ in Xcode (tick Copy items if needed and the Runner target).
  3. In Apple Developer create an APNs Auth Key (.p8) and upload it in Firebase → Project settings → Cloud Messaging → Apple app configuration.
  4. On the website: Firebase console → Project settings → Service accounts → Generate new private key. As super admin open Mobile App Console and paste the whole JSON file into Firebase service-account JSON.
  5. In Xcode add Push Notifications and Background Modes → Remote notifications, build again and sign in once.

When users are notified

A push is sent for booking request updates, confirmations, trip start and finish (customers) and for trips assigned or changed by the office (drivers).

Version numbers

Set the version in pubspec.yaml: version: 1.0.0+1. 1.0.0 is the version people see; +1 is the build number. Increase the build number for every upload to App Store Connect. Also set the same number in lib/config.dart (appVersion) and raise Latest version in Mobile App Console.

Create the app in App Store Connect

  1. Apple Developer → Identifiers: register your bundle identifiers (or let Xcode do it).
  2. App Store Connect → Apps → + → New App. Choose the bundle identifier, name (Smart Fleet Customer / Smart Fleet Driver or your own), language and a SKU.

Build & upload

flutter build ipa --release --dart-define=API_BASE=https://your-domain.com/api/v2

Then open build/ios/archive/Runner.xcarchive in Xcode (Window → Organizer) and choose Distribute App → App Store Connect → Upload, or use the Transporter app with the .ipa. Do this for both apps.

TestFlight (beta testing)

After processing, the build appears in App Store Connect → TestFlight. Add internal testers (up to 100, no review) or external testers (short Apple review).

Publish on the App Store

  1. App information & pricing: category (Travel or Business), privacy policy URL, price (free).
  2. App Privacy: describe the data the app collects (see Privacy & data safety).
  3. Version page: description, keywords, support URL, screenshots (6.9" and 6.5" sizes; tool/screenshots.sh makes sample pictures) and select the uploaded build.
  4. App Review information: give a demo account (a client for the Customer app, a driver for the Driver app) and the app code, so the reviewer can sign in.
  5. Submit for review.

Common rejection reasons and how to avoid them

Privacy & data safety

You publish the apps, so you are responsible for the store forms. What the apps handle:

DataWhy
Name, email, phone, addressAccount and booking contact details
Photos of ID / licence (Customer)Rental verification, uploaded to your website and visible only to the owner's staff
Location (Driver only)Share the vehicle position with the office and the customer while a trip runs, including in the background; stops when the trip ends
Photos (Driver)Vehicle condition, receipts and problem reports sent to the office
Device push tokenSend notifications

All data is sent to your website over HTTPS. The apps contain no ads and no third-party analytics. Users can ask the owner to delete their data.

iPhone permissions used

Key in Info.plistAppText shown
NSCameraUsageDescriptionBothPhotos of documents, vehicle and receipts; QR scan
NSPhotoLibraryUsageDescriptionBothChoose photos to attach
NSLocationWhenInUseUsageDescription, NSLocationAlwaysAndWhenInUseUsageDescriptionDriverShare the position during a trip, also in the background

Code structure

lib/
  main.dart, config.dart      start-up, server address and app version
  api.dart                    the API client (token, errors, uploads)
  push.dart                   Firebase push (does nothing until Firebase is set up)
  theme.dart, widgets.dart    colours and shared pieces
  format.dart                 dates and money
  screens/                    every screen (sign-in, home tabs, trip, vehicles, expenses ...)
  tracking.dart, offline_queue.dart   driver app only: GPS sharing and the no-signal queue
test/         unit and screen tests (run offline with a fake server)
tool/         screenshots for the stores (tool/screenshots.sh)
docs/         API list (openapi.yaml) and screenshots

Run the tests with flutter test and the checks with flutter analyze.

Updating to a new version

  1. Update the website first (apps work with a website of the same or a newer version).
  2. Back up your own changes, unzip the new package and copy your changes back (lib/, icon, package name, bundle identifier, GoogleService-Info.plist).
  3. Run flutter pub get, raise the build number and build again.

Troubleshooting

ProblemWhat to do
"We could not find that code"Check the app code on the owner's Mobile Web App page, and that the website is reachable on HTTPS from the phone.
"Could not reach the server" / "You are offline"Check API_BASE (it must end with /api/v2), the SSL certificate and that the address opens in the phone's browser. Debug builds may use http://, release builds need HTTPS.
"Update required" / "Maintenance"Super admin → Mobile App Console: lower the minimum version, or turn maintenance off.
Apps are switched offSuper admin → Mobile App Console → App is live.
No vehicles shownThe owner must tick Show on website for a vehicle (Website Vehicles).
Photos fail to uploadRaise upload_max_filesize and post_max_size in php.ini.
No push notificationsCheck the Firebase key in Mobile App Console and GoogleService-Info.plist and the APNs key in the app; sign in again on the phone.
Driver position is not updatedAllow location all the time for the Driver app and do not stop the app from running in the background (battery saver).
Website error 500 after updateRun php artisan migrate on the website.
flutter pub get failsUpdate Flutter (flutter upgrade) so a recent Dart is installed.
Xcode signing errorsChoose your Team and a unique Bundle Identifier in Signing & Capabilities; run pod install again.

FAQ

Do I need to publish a separate app for each owner?

No. One build of each app serves every owner; people choose theirs with the app code or QR code.

Can the apps work without the website?

No. They are companions to the Smart Fleet SaaS website and use its API.

Can I publish the apps under my own name?

Yes: your package name, app name, icon and store account.

Do I need a Mac?

Yes. Apple only allows iPhone apps to be built with Xcode on a Mac.

Is a payment taken inside the app?

No. The app opens the owner's secure payment page in the browser; card data never passes through the app.

Is there a version without the Smart Fleet logo?

The logo shown before sign-in comes from assets/logo.png and assets/mark.png and the system logo of your website. Replace them with your own.

Support & changelog

Before contacting support, check Troubleshooting and run flutter doctor -v.

When you contact support, include: your purchase code, the app version (pubspec.yaml) and website version, the output of flutter doctor -v, the exact error message or a screenshot, and what you did just before the problem.

Support covers installation questions, bugs and help with the steps in this guide. Customisations (new features, design changes) are not included but can be ordered separately.

Changelog

VersionDateChanges
1.0.0October 2026First release: Smart Fleet Customer and Smart Fleet Driver apps. Vehicle search and availability, booking requests, trip details, online payment, live tracking, statement, document upload, driver trips with start / finish, GPS sharing, fuel and expenses, daily check, problem and SOS reports, offline saving for the driver, push notifications, app code / QR sign-in with the owner's branding.