Smart DMS – iPhone app

Install, connect to your website, set up push messages and publish.

1. What you need

2. First-time set-up

cd iphone_app
./setup.sh com.yourcompany "Your App Name"
cd ios && pod install && cd ..

The script creates the ios/ folder with your bundle id and app name and applies what the app needs: camera, photo and Face ID texts, iOS 15 as the minimum, and the app icon. Then open ios/Runner.xcworkspace in Xcode, choose your Team under Signing & Capabilities, and run:

flutter run --dart-define=API_BASE=https://dms.yourcompany.com

3. Connect it to your website

The app talks to your Smart DMS website through its mobile API (/api/mobile/v1, described in docs/API.md). Nothing has to be switched on in the website.

Everyone signs in with the same email and password as on the website (two-factor codes are asked for when switched on). Owners and staff see documents, scanning, approvals and signatures; clients see their documents, uploads and signatures. The super admin uses the website only.

ScreenWhat it does
HomeWhat needs attention (approvals, signatures, expiring documents, messages), latest documents, next reminders
DocumentsSearch, filter by category / expiring, open PDFs and pictures, comments, keep a file on the phone, share it. "+" scans paper, turns photos into a PDF or uploads a file
TasksApprove or reject, sign with a finger (choose page and position), decline with a reason
InboxMessages from the website; tapping a push message opens the right tab
MoreNotification settings, fingerprint / face lock, files saved on the phone, signed-in devices, sign out

4. Push messages (optional)

  1. In Firebase add an iOS app with your bundle id and download GoogleService-Info.plist; drag it into Runner in Xcode (tick "Copy items" and the Runner target).
  2. In Xcode → Signing & Capabilities add Push Notifications and Background Modes → Remote notifications.
  3. In the Apple Developer site create an APNs key (.p8) and upload it in Firebase → Project settings → Cloud Messaging.
  4. In Firebase: Project settings → Service accounts → Generate new private key. Store it on the website's server outside the public folder and set FCM_CREDENTIALS=/path/to/key.json in the website's .env.
Push does not work in the iOS simulator; test on a real iPhone.

5. Publish on the App Store

flutter build ipa --release --dart-define=API_BASE=https://dms.yourcompany.com

Upload the result with Xcode Organizer or the Transporter app, test with TestFlight, then submit for review in App Store Connect. Raise the number after + in pubspec.yaml for every upload. Replace assets/icon.png (1024×1024) and run dart run flutter_launcher_icons to change the icon.

Apple asks for: a privacy-policy address (your website's privacy page), screenshots, descriptions, the data the app handles (account details, documents, camera, push tokens) and a demo login for the reviewer.

6. Problems

SymptomTry
"The server address does not look right" / "No connection"Open the address in Safari on the phone first. Apple requires https with a valid certificate.
pod install failscd ios && pod repo update && pod install; make sure ios/Podfile starts with platform :ios, '15.0'.
"Signing for Runner requires a development team"Xcode → Runner → Signing & Capabilities → choose your Team.
No push messagesCheck the plist, the two capabilities, the APNs key in Firebase, FCM_CREDENTIALS, and the phone's notification permission.
Face ID prompt missingCheck NSFaceIDUsageDescription in ios/Runner/Info.plist (the setup script adds it).