Stefan Lange-Hegermann 9673bde107 Review: ask on value milestones, not exports
The old gate needed two exports, three days of install age, one prompt per
version and 120 days between prompts. Aptabase shows only 9% of users ever
export and 5% export twice, so `Review Prompt Requested` never fired once in
19 days and the store has a single rating.

Replace the export counter with three milestones -- a fully configured system,
an opened bill of materials, a completed export -- each counted at most once
per install, and ask once two different ones are reached. Recording and asking
are now separate: milestones are booked mid-task, where StoreKit and Play drop
the request, so the ask happens from calm screens only (system overview,
export preview dismissal, share sheet dismissal).

Two fixes that made the old prompt lose its slot for good: the throttle keys
were written before checking for a foreground scene, and the export trigger
fired while the Quick Look sheet was still animating away. Both platforms now
mark the throttle only once the store API really has a review flow to show.

Add a Settings entry that links straight to the store review page. It is never
throttled, and 45% of users open Settings versus 9% who export. New analytics
event `Review Milestone Reached` makes the funnel measurable.

Existing installs keep their legacy export credit and still need a second
milestone before being asked.
2026-08-19 15:07:46 +02:00
2025-10-13 09:38:22 +02:00
2026-08-18 11:19:25 +02:00
2025-11-07 11:18:03 +01:00
2025-09-11 10:34:08 +02:00
2025-10-13 09:38:22 +02:00
2025-09-16 22:00:04 +02:00
2025-10-07 22:38:11 +02:00
2025-09-24 19:43:26 +02:00
2025-11-07 11:18:03 +01:00
2025-10-07 22:45:02 +02:00

Cable

Cable is a SwiftUI app for laying out low voltage electrical systems. It helps you size conductors, manage saved loads, and browse the VoltPlan component library so you can assemble accurate bills of materials for off-grid or mobile installs.

Requirements

  • macOS with Xcode 15 or newer
  • iOS 17 simulator (iPhone 15 target used in CI)
  • SwiftData and SwiftUI are bundled with the Xcode toolchain; no additional dependencies are required

Getting Started

  • open Cable.xcodeproj launches the project with the correct scheme configuration
  • Alternatively run xed Cable.xcodeproj from Terminal to open the project in Xcode
  • Select the Cable scheme and the iPhone 15 simulator, then press Run

Build & Test from the Command Line

  • Build: xcodebuild -scheme Cable -destination 'platform=iOS Simulator,name=iPhone 15' build
  • Test (unit + UI bundles): xcodebuild -scheme Cable -destination 'platform=iOS Simulator,name=iPhone 15' test
  • Clean derived data if Xcode caches cause issues: xcodebuild -scheme Cable clean

Project Layout

  • Cable/ – SwiftUI source, models, and assets (CableApp.swift, CalculatorView, SystemEditorView, ComponentLibraryView, etc.)
  • CableTests/ – Focused XCTest coverage for calculator logic, unit conversions, and persistence helpers
  • CableUITests/ – UI automation flows that exercise onboarding, load editing, and the component browser
  • fastlane/ – Automation scripts for screenshots and releases
  • Cable.xcodeproj – Project configuration targeting iOS 17

Core Features

  • Interactive cable sizing calculator with support for metric and imperial unit systems
  • SwiftData-backed storage for electrical systems and saved loads
  • Remote VoltPlan component library with searchable affiliate links
  • Onboarding flows that guide new users through system setup and load entry

Development Tips

  • Stick to idiomatic Swift style: four-space indentation, trailing commas on multiline collections, and UpperCamelCase/lowerCamelCase naming
  • Keep SwiftUI view files focused on a single primary view; extract helpers when logic grows
  • Run the test targets before opening a pull request to maintain coverage
  • Commit messages should be short, imperative phrases (e.g., Update library paging)
Description
No description provided
Readme 75 MiB
Languages
Swift 59.6%
Kotlin 31.4%
PureBasic 3.8%
Shell 2.7%
HTML 1.1%
Other 1.4%