#!/usr/bin/env python3 """Create an isolated simulator project using the real UI and local fictitious data.""" from pathlib import Path import shutil, sys root = Path(__file__).resolve().parents[2] dest = Path(sys.argv[1]).resolve() if dest == root or root in dest.parents: raise SystemExit('Capture project must be outside the production project, in Scratch.') dest.mkdir(parents=True, exist_ok=True) for name in ['Tarnax', 'Tarnax.xcodeproj']: shutil.copytree(root/name, dest/name, dirs_exist_ok=True) p = dest/'Tarnax/App.swift' s = p.read_text().replace('@StateObject private var model = AppModel()', '@StateObject private var model = StoreCapture.model()', 1) s = s.replace('@SceneStorage("selectedSection") private var selected = "Home"', '@State private var selected = StoreCapture.section\n @State private var capturePath = StoreCapture.path', 1) s = s.replace('@State private var add = false', '@State private var add = StoreCapture.screen == "add"', 1) s = s.replace('NavigationStack { section(page) }', 'NavigationStack(path: $capturePath) { section(page) }') s = s.replace('NavigationStack { section(selected) }', 'NavigationStack(path: $capturePath) { section(selected) }') s = s.replace('guard phase == .active, model.connected, !model.locked else { return }', 'guard false else { return }', 1) s += '\n' + (root/'appstore/tools/CaptureFixture.swift').read_text() p.write_text(s) p = dest/'Tarnax/Core.swift' s = p.read_text().replace('@Published private(set) var transferHistory = TransferHistory()', '@Published private(set) var transferHistory = StoreCapture.history', 1) s = s.replace('@Published private(set) var preferences: [String: Any] = [:]', '@Published private(set) var preferences: [String: Any] = StoreCapture.preferences', 1) p.write_text(s) p = dest/'Tarnax/Details.swift' s = p.read_text().replace('@State private var tab = "Overview"', '@State private var tab = StoreCapture.screen == "files" ? "Files" : "Overview"', 1) p.write_text(s) p = dest/'Tarnax.xcodeproj/project.pbxproj' p.write_text(p.read_text().replace('net.absdev.Tarnax', 'net.absdev.TarnaxStoreCapture')) print(dest/'Tarnax.xcodeproj')