- Xcode 16+
- XcodeGen
- iOS 17 simulator or device
xcodegen generate
xcodebuild -project SaneScan.xcodeproj -scheme SaneScan -destination 'platform=iOS Simulator,name=iPhone 17 Pro' build
xcodebuild -project SaneScan.xcodeproj -scheme SaneScan -destination 'platform=iOS Simulator,name=iPhone 17 Pro' testUse the Mac Mini for canonical SaneApps build and simulator proof:
ssh mini 'cd ~/SaneApps/apps/SaneScan && xcodegen generate && xcodebuild -project SaneScan.xcodeproj -scheme SaneScan -destination "platform=iOS Simulator,name=iPhone 17 Pro" test'If the simulator name changes, run:
ssh mini 'xcrun simctl list devices available'- Unit tests live in
Tests/. - UI tests live in
UITests/and cover the empty library, fixture library detail, native PDF share sheet, and paywall unavailable state. - UI/runtime camera proof needs a real device because
VNDocumentCameraViewControlleris not available on all simulators. - Simulator proof should still cover launch, Photos import UI, library display, paywall UI, PDF export code paths where possible.
SaneScan opts into the shared professional product-quality checklist in
Tests/CustomerUIActions.yml:
ruby scripts/customer_ui_action_sweep.rb
./scripts/SaneMaster.rb customer_ui_contract --json --no-exit
ruby ../../infra/SaneProcess/scripts/appstore_public_screenshot_audit.rb \
--project-root /Users/stephansmac/SaneApps/apps/SaneScan --country usThe checklist has 30+ hard questions across product fit, first run, core
workflow, visual proof, marketing parity, monetization, accessibility,
privacy/trust, error recovery, performance, App Store readiness, and funnel
telemetry. Release is blocked when any product-quality item is failed or
unknown.
Current known blockers from the 2026-06-07 sweep:
- Real-device VisionKit scanner proof is still pending.
- StoreKit transaction proof still needs a real Xcode StoreKit, sandbox/TestFlight, or attached-device purchase/cancel/failure/restore run.
Verified fixes from the 2026-06-07 remediation:
- Local screenshot asset order leads with a real document-detail/OCR/PDF screen.
- Local paywall screenshot shows the approved annual product only.
- Large Dynamic Type, failure-recovery, cold-launch/performance, accessibility label/order, and App Store funnel event schema checks are covered by tests or source receipts.
- The live public App Store screenshot parity audit passes and writes
outputs/appstore-public-audit.
Apple rejected attempts to delete/recreate live App Store screenshots on version
1.0 after submission. Updating public screenshots requires a new editable App
Store version.
Latest Mini receipt, 2026-05-18 02:58 ET:
xcodebuild -project SaneScan.xcodeproj -scheme SaneScan \
-destination "id=7A11FD35-2A11-46B2-A70B-D4BCD92B66C2" \
-configuration Debug CODE_SIGNING_ALLOWED=NO testResult: TEST SUCCEEDED; 4 Swift Testing unit tests and 4 XCTest UI tests passed in Test-SaneScan-2026.05.18_02-57-54--0400.xcresult. The added unit test verifies PDF export surfaces missing page-image failures instead of silently producing blank PDF pages. swiftlint lint --quiet and swiftformat --lint --trailing-commas never passed on the Mini.
Product IDs are defined in PurchaseManager:
com.sanescan.app.pro.yearly6
Only the approved annual product is active in the app and in
iOS/SaneScan.storekit.
Current App Store Connect state, 2026-06-07:
- Bundle ID
com.sanescan.appexists in Apple Developer/App Store Connect asUT3A85VYT3. - App Store Connect app ID is
6770391054. - App Store version
1.0reportsREADY_FOR_SALE; submission ID528b035a-b097-445f-834b-257d4e059720. - Public US App Store URL
https://apps.apple.com/us/app/sanescan/id6770391054returns HTTP 200. - The annual subscription product is
com.sanescan.app.pro.yearly6and is approved. June 2026 pricing remediation targets$9.99/yearfor the first App Store conversion test. - Local/public privacy policy copy has been updated for limited aggregate purchase-flow diagnostics; App Store Connect App Privacy metadata should be reviewed before the next editable submission.
- GitHub remote exists at
https://github.com/sane-apps/SaneScan. - Latest Mini release proof: explicit iPhone simulator
xcodebuildpassed on 2026-05-18 after the top-right screenshot artifact fix and final asset refresh; exit code 0. - Latest visual proof:
outputs/visual-audit-final16-2026-05-18/contact-sheet.png,outputs/visual-audit-final17-2026-05-18/marketing-assets-contact-sheet.png, andoutputs/website-audit-2026-05-18/final17/.
Known tooling note: SaneMaster now supports iOS-only destinations for SaneScan, but product-quality review blockers intentionally prevent treating the current proof set as fully release-clear.