Documentation

iOS verification & App Store

How Shernova phone verification works on iOS, App Store expectations, and UX differences from Android auto-return.

shernova_core and shernova_ui both work on iOS via Flutter. There is no native iOS plugin — behavior differs from Android by design and App Store policy.

Current iOS flow

  1. User enters phone number in verifyPhone() (or your custom UI with Shernova.verify()).
  2. App shows the gateway number and a Call button.
  3. Tapping call opens the system Phone app via tel: (url_launcher).
  4. User completes the missed call and returns to your app manually (app switcher or back gesture).
  5. When the app resumes, Shernova polls the API and shows Verified — typically within a few seconds.

Difference from Android

FeatureAndroid (shernova_ui)iOS
Auto-return after callYes — foreground service + telephonyNo — user returns manually
Native pluginYes (Kotlin)No — Flutter + url_launcher only
Extra permissionsPhone, notifications, optional CALL_PHONENone beyond your app’s normal setup
Play/App Store declarationsFGS + phone forms on Google PlayNo special Shernova declarations

App Store review expectations

  • No CallKit or private APIs — Shernova does not intercept calls on iOS.
  • tel: scheme — Standard; ensure your app’s purpose strings and privacy policy mention phone verification if you collect numbers.
  • Privacy Nutrition Labels — Declare phone number collection if you send it to Shernova or your backend.
  • Manual return is normal — Apple does not allow the same background telephony monitoring as Android; manual return is the compliant v1 UX.

UX recommendations for iOS v1

  • Show clear copy: “After calling, return to this app to finish verification.”
  • Keep the verification screen in the navigation stack so resuming is one tap from the app switcher.
  • Use afterVerified to run signup while a progress overlay is visible once status is verified.
  • Optional future improvement: local notification or push when verified — not required for App Store approval today.

Dashboard setup

Register Bundle ID and Apple Team ID in Dashboard → Application → iOS signature (same as Android SHA256 registration). Run dart run shernova_cli setup — the CLI reads Xcode project when available.