Mobile App (iOS)¶
Install and run TrackMyRupee on your iPhone as a native app using Capacitor, which wraps the live web app.
What the mobile app is
The iOS app is a Capacitor shell that loads https://trackmyrupee.com. It uses your real account and real data in real time. It is not a separate offline app and requires an internet connection. Building it requires a Mac with Xcode.
1. Prerequisites¶
Before you begin, make sure you have the following installed on your Mac:
- macOS with the latest stable Xcode (download from the Mac App Store)
- Node.js (version 18 or later) and npm from nodejs.org
- CocoaPods: run
sudo gem install cocoapodsin your terminal - The repository cloned locally:
git clone <repository-url> && cd django-finance-tracker
2. Syncing Capacitor¶
Navigate to the mobile/ directory and sync the Capacitor bridge. This copies the necessary plugins and configuration into the iOS project.
cd mobile
npm install
npm run ios:sync
3. Opening in Xcode¶
Run the following command to open the project in Xcode automatically:
npm run ios:open
Alternatively, open mobile/ios/App/App.xcworkspace manually in Xcode. Always open the .xcworkspace file, not the .xcodeproj file.
4. Selecting Your Signing Team¶
- In Xcode, click the App target in the left panel.
- Go to Signing and Capabilities.
- Under Team, select your Apple ID. A free personal team is sufficient for personal use.
- If Xcode shows a bundle ID conflict, change the Bundle Identifier to something unique such as
com.yourname.trackmyrupee.
5. Building and Running¶
- Build only: Press
Cmd + B - Run on a connected iPhone: Select your device in the top bar and press
Cmd + R - Archive for distribution: Go to Product → Archive, then use Distribute App in the Organizer
First launch on iPhone: Untrusted Developer
When you install via a free Personal Team, iOS shows an "Untrusted Developer" error on first open. To fix it, go to Settings → General → VPN and Device Management → [your Apple ID] → Trust. Make sure your iPhone has an active internet connection during this step because it contacts Apple's servers to verify the certificate.
6. Free vs. Paid Development¶
| Feature | Free (Personal Team) | Paid ($99/year Apple Developer Program) |
|---|---|---|
| Cost | Free | $99 USD per year |
| Run on your own iPhone | Yes | Yes |
| App expires on device | Every 7 days | No |
| App Store distribution | No | Yes |
| TestFlight beta | No | Yes |
| Push notifications | No | Yes |
| Maximum active apps on device | 3 | Unlimited |
For personal use on your own phone, the free option is sufficient.
7. Troubleshooting¶
CocoaPods errors¶
cd mobile/ios/App
pod install
"Communication with Apple failed" in Signing and Capabilities¶
- Make sure your physical iPhone (not a simulator) is selected as the run destination in Xcode's top bar.
- Change the Bundle Identifier to a unique value (see step 4 above).
- Disable any VPN because VPNs can block Apple's signing servers.
- Go to Xcode → Settings → Accounts and confirm your Apple ID is listed with a valid Development certificate.
App will not verify on iPhone¶
- Ensure the iPhone has Wi-Fi or cellular data (not just a local network without internet access).
- Temporarily disable VPN, AdGuard, or custom DNS settings.
- Go to Settings → General → Date and Time → Set Automatically and make sure it is enabled.
- Delete the app from your iPhone, restart the phone, and re-run from Xcode.
Real-world use case
Ananya builds the app once on her Mac, signs it with her free Apple ID, and installs it on her iPhone. She re-runs it from Xcode every 7 days, which takes about 30 seconds, to renew the certificate. The app opens as a full-screen experience with the bottom navigation bar, identical to the browser version but without the browser chrome.