Docs

iOS & Android Apps — Build and Store Submission

How to turn the WafiWallet web wallet into installable iOS and Android apps with Capacitor, and submit them.

What you get

A native app shell (Capacitor) that opens the published WafiWallet wallet. Keys are created and encrypted on the phone, inside the app's private storage. Publish the web app first so the shell loads the latest version.

You need

  • A Mac with Xcode (for iOS) and/or Android Studio (for Android)
  • Node.js 20+
  • Apple Developer Program membership ($99/year)
  • Google Play Console account ($25 one-time)
  • App icons (1024×1024 for iOS, 512×512 for Play), screenshots, a privacy policy URL (/legal/privacy)

1. Get the code

  • Use "Export to GitHub" in Lovable, then git clone the repository.
  • Run: npm install

2. Add the native projects

npx cap add ios
npx cap add android
npx cap sync

3. Run on a device

npx cap open ios      # Xcode → pick your team under Signing → Run
npx cap open android  # Android Studio → Run

4. iOS submission (App Store Connect)

  • In Xcode set the Bundle ID com.wafiwallet.app, version and build number.
  • Add Face ID usage text (NSFaceIDUsageDescription) and camera usage text (NSCameraUsageDescription) for the QR scanner in Info.plist.
  • Product → Archive → Distribute App → App Store Connect.
  • In App Store Connect create the app, fill privacy 'nutrition labels' (no data collected from wallets), add screenshots, choose Finance category.
  • Explain in review notes: self-custody wallet, test networks only, no exchange of funds by the developer, keys never leave the device.
  • Submit to TestFlight first, then for review.

5. Android submission (Google Play)

  • In Android Studio: Build → Generate Signed Bundle (AAB). Keep the upload key safe.
  • Play Console → Create app → upload the AAB to Internal testing first.
  • Fill the Data safety form (no wallet data collected), content rating, target audience, and the Financial features declaration (choose crypto wallet, non-custodial).
  • Promote to Production when testing passes.

Review risks to plan for

  • Apple guideline 4.2 can reject apps that are only a website. Add native value before submitting: native biometric unlock, push notifications, secure enclave key storage (see Mobile architecture).
  • Both stores require crypto wallets to be non-custodial or licensed — WafiWallet is non-custodial.
  • Mainnet support must wait for the security audit (roadmap).

Updating the apps

Wallet screen changes reach the apps as soon as you publish the web app. Rebuild and resubmit only when changing native settings, icons or permissions.

Items marked NATIVE must be implemented as audited native code (Swift, Kotlin, Rust or C++), not in the web app.