Last updated: 16 April 2026
FlipperHelper Changelog
Public release notes for FlipperHelper, the iOS reselling tracker. First commit on 20 February 2026. Shipped by a solo developer based in London, active weekly, with a full test suite gating every build.
April 2026
16 April — iCloud Backup & Restore. Your data is now automatically backed up to iCloud every 5 minutes — enabled by default, works completely offline (iOS syncs when you're back online). Restore from iCloud on the same device or after a fresh install, with a live progress indicator and cancel button if the download is slow. Three independent backup paths now exist: iCloud (automatic), file export (manual ZIP via share sheet), and Google Sheets & Drive export for desktop analysis. The backup engine was rewritten with a custom ZIP writer that produces reliable archives — the previous system-level ZIP creator could produce files that silently restored as empty. Old backups remain fully compatible. Google Drive export progress (folder IDs, spreadsheet links, sync timestamps) is now preserved when restoring from any backup, so you don't lose your Sheets export setup. The “Backup & Restore” section in Settings is now a single unified section instead of two confusing ones, with clearer labels: “Export to File” and “Import from File” for manual backups. The Google Drive section is renamed to “Google Sheets & Drive” to reflect that it exports both spreadsheets and images.
15 April — Dashboard deep links. The app now registers a custom URL scheme (flipperhelper://) that routes to the Dashboard, Add Item, and Items List screens. Used by the App Store in-app event "Car Boot Season 2026" to jump straight into the right screen.
11 April — Sold button on search results. Requested by a user with ~170 listed items, who pointed out that scrolling a long list to mark a single sale was painful. Search now shows a one-tap sold button on any listed item that hasn't sold yet. Saves a tap-tap-tap.
9 April — Custom dashboard ranges. Before, the dashboard only showed "this month". Now you can pick a custom date range, a specific week, or a specific month — useful for reviewing how a single weekend went, or looking back at March after it ended.
9 April — Dates on entry fees and expenses. If you paid a £5 entry fee on Saturday but only logged it on Sunday, the date used to be wrong. Now you can pick the date when you log any fee or expense. Item costs also show as a separate line in the dashboard summary, so at a glance you can see stock cost vs entry fees, transport, and other expenses.
March 2026
Main theme: UX polish, faster backups, better notifications.
- CSV + GZIP sync — replaced the old JSON export pipeline. Backups are now compressed CSV: smaller files, faster uploads to Google Drive, no backend required. A 100k-item backup round-trips end-to-end.
- Background photo sync — photos keep uploading to Google Drive using iOS background task continuation, even when the app is suspended. Queue is resumed on next launch if interrupted.
- Listing reminder notifications — optional local push reminders for unlisted items. Configurable per day of week and time. No server involved; processed entirely on device.
- Entry fee lifecycle per market — entry fees are now linked to markets. Add a fee once; it auto-suggests for the next visit. Option to disable a market from prompting for entry fees.
- Multi-platform listing flow — list the same item across eBay, Vinted, Depop, Facebook, and others in one pass. Dates and asking prices tracked per platform.
- Device currency on first login — the app now picks your iPhone's region currency by default (GBP, EUR, USD, CAD) instead of asking.
- Exchange rates — auto-updated daily, stored for 365 days locally, used for multi-currency profit calculation.
- Data backup and restore — full backup as ZIP archive, including items, markets, sellers, expenses, settings, and photos. Restore works on a fresh install.
- SKU display — tap-to-copy SKU on item details (Crockford Base32 format, e.g.
FH-20D6G0NR). - UX — haptics on delete and save, dropped keyboard on outside tap, scroll to profit after selling, cleanup of new-item state on leave.
- Localization — English as the canonical language; dropped a partial Russian locale that wasn't being maintained.
February 2026 — v1.0 launch
First commit: 20 February 2026. First TestFlight release: 26 February 2026. Initial scope:
- Photo-first item tracking with automatic SKU generation
- 16 listing platforms (eBay, Vinted, Facebook, Depop, Poshmark, Mercari, OfferUp, Craigslist, ThredUp, Etsy, Gumtree, Shpock, Preloved, Nextdoor, Grailed, ShopThing)
- 18 sold platforms (the 16 above plus Car Boot and Sold Offline)
- Markets with optional GPS and radius-based auto-suggestion
- Sellers linked to markets
- Transport expenses by mode (car, bus, train, taxi, van, bike rental)
- Other expenses (packaging, fees, etc.)
- Google Drive integration using the restricted
drive.fileand email OAuth scopes - CSV export that Google Drive auto-converts to a Sheet — no Sheets API required
- Offline-first: fully functional without a network
- iOS 17+ with SwiftUI
- Automatic TestFlight upload on release tag (GitHub Actions + manual code signing)
Testing & QA pipeline
Every release is gated by three layers of automated testing before a TestFlight build goes out.
Swift unit tests
10 test files, 3,424 lines of test code covering the data layer, services, and helpers:
DatabaseTests.swift— SQLite / GRDB queries and migrations (523 lines)DataStoreTests.swift— actor-based DataStore concurrency and persistence (497 lines)StressTests.swift— large-dataset benchmarks (688 lines, see below)ModelTests.swift— Item, Market, Seller, expense models (456 lines)MigrationServiceTests.swift— schema migrations and legacy data imports (333 lines)HelperTests.swift— formatters, currency helpers, utilities (323 lines)ExchangeRateServiceTests.swift— multi-currency rate fetching and caching (192 lines)UUID7Tests.swift— time-ordered UUID v7 generation (165 lines)ExportServiceTests.swift— CSV generation for Google Sheets export (153 lines)SKUGeneratorTests.swift— Crockford Base32 SKU uniqueness and format (94 lines)
Stress tests — 100,000 items
The stress suite loads a generated fixture into the real SQLite database used in production:
- 100,000 items
- 50,000 transport expenses
- 20 markets across multiple currencies
- 50 sellers
- 3 months of purchase history (Jan, Feb, Mar 2026)
Benchmarks on that fixture cover: count-all-items query, fetch-all-item-records, filtered sold-items query, filtered date-range (February) query, monthly aggregation SQL, stats-by-market SQL, CSV export of all 100k items, restore from backup end-to-end, and getMonthlyFinancialSummary through the real DatabaseStore. Each benchmark uses XCTest's measure block so regressions show up as a wall-clock slowdown, not a silent correctness bug. Row counts are asserted after every restore so truncated fixtures fail loudly instead of silently.
Maestro end-to-end tests — 63 flows
FlipperHelper uses Maestro to run UI flows against the simulator. 63 .yaml flow files cover:
- Full item lifecycle: add → list → sell → profit verification
- Multi-currency flows: EUR buy / GBP sell, USD buy / EUR sell, base currency changes
- Payment-method combinations: cash buy / card sell, card buy / cash sell
- Listing on multiple platforms, platform toggles, quick-list icons, unlist / relist
- Selling offline (car boot sales), selling in a different currency, editing a sold item
- Markets: create, edit, delete (with and without items), currency mismatch, GPS geolocation, market currency auto-change
- Sellers: lifecycle, create seller with market, multi-seller per market
- Expenses: entry fees per market, transport (all modes), expense summaries, empty states, edit / delete
- Foreign currency expenses, suggested-amount reuse
- Settings: notifications, platform toggles, edit market, edit seller, danger zone, exchange rates view
- Navigation: all tabs, stress navigation, dashboard stats, long-text edge cases
- Data: full backup flow, rapid item creation, delete item
- App Store screenshot automation (
99_app_store_screenshots.yaml)
Where it's going
For what's being considered next, see the FAQ and the r/flipperhelper subreddit, where shipped changes are announced and requests are collected. If you use FlipperHelper and want something added, the subreddit or email is the fastest way.