Enhance DiveCommand App with Offline Support and Subscription

via Freelancer ·

Budget / Salary$30–250
TypeFreelance project
LocationRemote
Posted1 hour ago
Title: iOS developer (Swift/WKWebView + StoreKit 2): add offline support and a free/Pro subscription to a live dive-planning app

About the app
DiveCommand is a scuba dive-planning app that’s already live on the App Store. It’s a native Swift wrapper (WKWebView) around a single self-contained HTML/JavaScript file. All the decompression math runs in JavaScript on the device. There’s no backend, no accounts and no login. User data (dive log, settings) is stored on the device in localStorage. The web code is finished and tested; I’ll supply every HTML file. This job is the iOS wrapper only. The previous developer is no longer available, so you’ll be taking over an existing Xcode project.

The current problem
The wrapper loads the page from my website. With no connection, it shows a native “No Internet Connection — Retry” alert and the app is unusable. Divers plan on boats and at remote sites, so it must work fully offline.

Scope

Offline-first loading
Remove the “No Internet Connection” alert.
Ship a copy of the HTML inside the app bundle so a fresh install works with no connection.
When online, load the live page from my website, so I can update the app without App Store review. Then download and save a copy on the device. Check the download is complete and valid before replacing the saved copy.
When offline, or if the live load fails, load the saved copy, falling back to the bundled copy. Use loadHTMLString with my website’s URL as baseURL, so localStorage is shared and user data is the same online and offline. Users must never lose their dive log, including people upgrading from the current App Store version.
Free tier and Pro subscription (StoreKit 2)
One app, free to download. The free tier matches the current free web version: recreational planning only, with Pro features locked. I supply separate free and Pro HTML files.
Pro is an auto-renewing yearly subscription at $49/yr through Apple In-App Purchase. Verify purchases on the device with StoreKit 2; no server.
The wrapper loads the free or Pro HTML based on the user’s subscription status, and switches straight away after a purchase or restore.
The upgrade prompt in the free version (a JavaScript call I’ll specify) must open the native purchase sheet.
Include a Restore Purchases button, handle an expired subscription by returning the user to free, and handle the sandbox, refunds and Ask to Buy.
The saved offline copy from item 1 has to work for both free and Pro.
Keep the existing native features working. The page calls these webkit.messageHandlers, and all of them must keep working:
nativeShare, nativeGetLocation, nativeTakePhoto, nativeHaptic, nativeScheduleNoFlyNotification, nativeCancelNoFlyNotification, nativeUpdateWidgetData (home-screen widget)
App Store submission
Set up the subscription in App Store Connect.
Fill in the privacy labels.
Add Terms of Use and a Privacy Policy link (I’ll provide the URLs).
Write the review notes, and see the build through review, including responding to any rejection.

Acceptance tests (each one must pass before payment)

Fresh install in Airplane Mode: the app opens and plans dives.
A dive logged online still shows in Airplane Mode, and the reverse.
Upgrading from the current App Store version keeps the existing dive log.
I upload a changed HTML file to my website, and the app shows the change on next launch with no new build.
Buy, restore, expire and refund all work in the sandbox, and free and Pro switch correctly.
All 7 native bridges work on a real device.
Tested on at least iOS 16, 17 and 18 and on a small and a large iPhone.

Milestones (fixed price, paid per milestone)

Offline-first wrapper and data preserved; TestFlight build
StoreKit 2 subscription, free/Pro switching, restore; TestFlight build
App Store approval

Requirements

Swift, WKWebView and StoreKit 2, with at least one shipped app that has an auto-renewing subscription. Send the App Store link.
Code goes into my GitHub repository at every milestone. I own all the code.
A short progress update at least every 2 business days, and replies within 24 hours on weekdays.
Access through my Apple Developer team (App Manager role). I won’t share my Apple ID.

To apply, answer these three questions:

How would you keep users’ localStorage data identical between the live page and the saved offline copy?
Which shipped app of yours uses StoreKit 2 subscriptions?
When can you start, and how many hours do you estimate for each milestone?

Bids that don’t answer these three questions won’t be considered.

Please know this is a not to exceed price, so no low bids looking to add on doing what i call the freelancer hustle.
mobile app development ios development swift package manager app store optimization
Apply on Freelancer →

Project sourced from Freelancer.com. Applications happen directly on the original platform — we never collect your data.