Hey everyone! Following up on 2.33.0, StoryPad 2.33.1 is now live with two more sync options and some handy new tools.
Multi-cloud backup (iCloud & Dropbox)
- Add iCloud as a backup/sync provider (iOS + macOS), backed by a small hand-written native Swift layer rather than a third-party package. Files live in a private, non-
Documentsarea of the app’s ubiquity container — the private-container analogue of Drive’s hiddenappDataFolder— so they never surface in the Files app. No in-app sign-in: availability is a live two-tiered check (local container resolution, then a CloudKit round-trip), and enable/disable hands off to Settings. Identity comes from CloudKit’sfetchUserRecordID, so iCloud aliases into purchase identity the same way Drive/Nextcloud do. - Add Dropbox as a fourth backup/sync provider, fully client-side with no backend: auth uses OAuth2’s PKCE flow for native clients, scoped to a sandboxed app folder, using Dropbox’s native trash instead of manual emulation.
- Gate Nextcloud/iCloud sync behind Pro — free tier keeps full backup via Google Drive; signing in to any provider stays free everywhere (for purchase-identity linking), only actual sync execution is gated. No grandfathering for existing Nextcloud users.
Export & search
- Add CSV export support for offline story export, alongside the existing JSON export.
- Allow multi-tag search filtering: the filter page now lets every tag category multi-select, matching stories that have any of the selected tags (OR) instead of only one tag per category.
Performance & reliability
- Paginate Home’s story list — unpinned stories now load a page at a time instead of the whole year at once, so active years with 500+ stories paint fast instead of decoding every story up front.
- Stop bucketing non-yearly data (tags, tag categories, templates, preferences, relax sound mixes) by creation year in cloud backups. They now live in a single global file, so editing e.g. one old tag no longer forces a full re-upload of that tag’s entire creation year’s backup.
- Fix the backup tile getting stuck on “Sync” forever after the non-yearly table split left some years’ remote timestamps permanently inflated.
- Batch home-list reloads across multiple signed-in sync providers into one refresh instead of one per provider.
- Avoid full-list reloads and flashes when archiving, binning, or putting back a story (single or bulk) — story lists now apply changes locally instead of remounting or refetching.
- Fix archived/put-back items lingering in Archives/Bin/Tag view until a manual pull-to-refresh.
- Fix a success snackbar (e.g. archive/unarchive) getting stuck on screen forever on tablet layouts.
Housekeeping
- Retire the Google Sheet translation pipeline — translations now live entirely in
translations/*.json(git is the source of truth), with CI enforcing that every locale file’s keys exactly matchen.json. - Version bump: 2.33.0+800 → 2.33.1+821.