iOS
macOS and Xcode 15+ are required. There is no iOS flavor matrix — dart-defines select the environment. Deployment target is iOS 15.0.
Windows and Linux cannot archive iOS. A missing Xcode is a toolchain error, not a missing Flutter feature.
This documentation does not include author provisioning profiles or certificates. Store listing and review are your responsibility.
- Confirm
flutter doctor -vshows Xcode OK. A CocoaPods[!]does not block Android. - From the Flutter project root:
cd mobileflutter pub getflutter build ios --release --no-codesign \ --dart-define=APP_ENV=production \ --dart-define=API_BASE_URL=https://fsm.example.com \ --dart-define=APP_DISPLAY_NAME=Veldriq Field- Open
ios/Runner.xcworkspacein Xcode. - Select the Runner target, set your Team, set
PRODUCT_BUNDLE_IDENTIFIERto a bundle you own (template:com.cnonetech.veldriq.field). - Set
CFBundleDisplayNameinios/Runner/Info.plist(default Veldriq Field).APP_DISPLAY_NAMEdoes not change the home-screen label. - App Store / Springboard icon is
ios/Runner/Assets.xcassets/AppIcon.appiconset— see Branding. - Product → Archive, then distribute to TestFlight or export an IPA with your signing.
Development on a simulator
Section titled “Development on a simulator”flutter run \ --dart-define=APP_ENV=development \ --dart-define=API_BASE_URL=http://127.0.0.1:8000 \ --dart-define=APP_DISPLAY_NAME=Field\ DevCamera, barcode, and APNs are not equivalent on the Simulator — validate those on a device. Cleartext HTTP may still be blocked by ATS; production must be HTTPS.
Usage strings already in the template
Section titled “Usage strings already in the template”NSCameraUsageDescription explains profile photo, job evidence, and barcode scanning. NSPhotoLibraryUsageDescription explains profile photo and attaching an existing evidence photo. Do not add location usage strings. This app has no GPS.
Version strings come from pubspec.yaml 1.0.0+1. Bump before each App Store Connect upload.
If it fails
Section titled “If it fails”- “not configured for iOS” on Windows/Linux → use a Mac.
- Firebase plist missing → expected; login does not require it.
- Splash should become Welcome back, not Invalid configuration.