polyhorn_cli/ios/commands/
run.rs

1use ansi_term::Colour::Red;
2use simctl::Simctl;
3
4use super::select_device;
5use crate::core::Executioner;
6use crate::ios::tasks::{self, IOSContext, IOSTask};
7use crate::Config;
8
9/// iOS specific implementation of the `polyhorn run` command.
10pub fn run(config: Config) {
11    let device = select_device(Simctl::new().list().unwrap().devices());
12
13    let result = Executioner::execute(
14        &[
15            IOSTask::InstallDependencies(tasks::InstallDependencies {
16                dependencies: vec![
17                    tasks::Dependency::cli(
18                        "resvg",
19                        &["resvg", "-V"],
20                        &["cargo", "install", "resvg"],
21                    ),
22                    tasks::Dependency::cli(
23                        "xcodegen",
24                        &["xcodegen", "--version"],
25                        &["brew", "install", "xcodegen"],
26                    ),
27                ],
28            }),
29            IOSTask::InstallTarget(tasks::InstallTarget("x86_64-apple-ios")),
30            IOSTask::BuildRuntimeLibrary(tasks::BuildRuntimeLibrary {
31                target: "x86_64-apple-ios",
32                profile: "debug",
33            }),
34            IOSTask::CreateUniversalBinary(tasks::CreateUniversalBinary),
35            IOSTask::GenerateXcassets(tasks::GenerateXcassets),
36            IOSTask::GenerateXcodeproj(tasks::GenerateXcodeproj),
37            IOSTask::BuildXcodeproj(tasks::BuildXcodeproj {
38                scheme: config.spec.app.name.clone() + "_iOS",
39                configuration: "Debug".to_owned(),
40                destination_platform: "iOS Simulator".to_owned(),
41                destination_name: device.name.clone(),
42            }),
43            IOSTask::BootIOSSimulator(tasks::BootIOSSimulator {
44                device: device.clone(),
45            }),
46            IOSTask::OpenIOSSimulator(tasks::OpenIOSSimulator),
47            IOSTask::InstallOnIOSSimulator(tasks::InstallOnIOSSimulator {
48                device: device.clone(),
49                configuration: "Debug".to_owned(),
50            }),
51            IOSTask::RunOnIOSSimulator(tasks::RunOnIOSSimulator {
52                device: device.clone(),
53                env: vec![],
54            }),
55        ],
56        IOSContext {
57            config,
58            products: Default::default(),
59            universal_binary_path: None,
60        },
61    );
62
63    match result {
64        Ok(_) => {}
65        Err(error) => {
66            eprintln!("{}: {:?}", Red.bold().paint("error"), error);
67            std::process::exit(1);
68        }
69    }
70}