/** Refuses early, with the remedy, on machines that cannot build iOS at all. */ export declare function preflightXcodebuild(platform?: typeof process.platform): void; export interface SimulatorBuildOptions { xcodeprojDir: string; derivedDataDir: string; productName: string; log: (message: string) => void; } export interface SimulatorBuildResult { appPath: string; /** True when the asset-catalog fallback fired and the app shipped without its icon. */ iconSkipped: boolean; } /** * Build the unsigned Simulator .app and return its path. * * Deliberately the destination-free `-target -sdk iphonesimulator` form, not `-scheme` with a * destination: destination resolution refuses outright on a Mac whose Xcode has no iOS DEVICE * platform installed (a fresh install commonly has only simulators), while the target build * needs nothing but the simulator SDK. * * The retry handles the other fresh-Xcode gap: actool refuses to compile an asset catalog when * no installed simulator runtime matches the SDK (an SDK-bumped Xcode before the matching * runtime download). The app then builds without its icon — cosmetic on a simulator — and the * caller says so, with the real remedy. */ export declare function buildSimulatorApp(options: SimulatorBuildOptions): SimulatorBuildResult; export interface ArchiveOptions { xcodeprojDir: string; derivedDataDir: string; distDir: string; productName: string; teamId: string; log: (message: string) => void; } export interface ArchiveResult { archivePath: string; ipaPath: string; } /** Archive for device and export a signed .ipa. Signing errors surface with xcodebuild's tail. */ export declare function archiveAndExportIpa(options: ArchiveOptions): ArchiveResult; export interface SubmitOptions { archivePath: string; distDir: string; teamId: string; keyPath: string; keyId: string; issuerId: string; log: (message: string) => void; } /** Upload the archive to App Store Connect — the headless path now that altool is gone. */ export declare function uploadArchive(options: SubmitOptions): void; interface SimctlDevice { udid: string; name: string; state: string; isAvailable: boolean; } /** * The simulator to run on: whatever is already booted, else the newest available iPhone. * Exported for tests; the runtime keys sort lexicographically into version order within the * same major-number width, which is as much precision as "pick a recent phone" needs. */ export declare function chooseSimulator(devicesByRuntime: Record): { udid: string; name: string; booted: boolean; } | null; /** Boot (if needed) a simulator, install the app, launch the bundle — the `--run` tail. */ export declare function runOnSimulator(appPath: string, bundleId: string, log: (m: string) => void): void; export {};