fn ios_start()

in components/support/nimbus-cli/src/cmd.rs [538:601]


    fn ios_start(&self, app_protocol: StartAppProtocol, open: &AppOpenArgs) -> Result<Command> {
        if let Self::Ios {
            app_id, device_id, ..
        } = self
        {
            let mut args: Vec<String> = Vec::new();

            let (starting_args, ending_args) = open.args();

            if let Some(deeplink) = self.deeplink(open)? {
                let deeplink = deeplink::longform_deeplink_url(&deeplink, &app_protocol)?;
                if deeplink.len() >= 2047 {
                    anyhow::bail!("Deeplink is too long for xcrun simctl openurl. Use --pbcopy to copy the URL to the clipboard")
                }
                args.push("openurl".to_string());
                args.extend_from_slice(starting_args);
                args.extend([device_id.to_string(), deeplink]);
            } else {
                args.push("launch".to_string());
                args.extend_from_slice(starting_args);
                args.extend([device_id.to_string(), app_id.to_string()]);

                let StartAppProtocol {
                    log_state,
                    experiments,
                    reset_db,
                } = app_protocol;

                if log_state || experiments.is_some() || reset_db {
                    args.extend([
                        "--nimbus-cli".to_string(),
                        "--version".to_string(),
                        "1".to_string(),
                    ]);
                }

                if reset_db {
                    // We don't check launch here, because reset-db is never used
                    // without enroll.
                    args.push("--reset-db".to_string());
                }
                if let Some(s) = experiments {
                    args.extend([
                        "--experiments".to_string(),
                        s.to_string().replace('\'', "&apos;"),
                    ]);
                }
                if log_state {
                    args.push("--log-state".to_string());
                }
            }
            args.extend_from_slice(ending_args);

            let mut cmd = self.exe()?;
            cmd.args(args.clone());

            let sh = format!(r#"xcrun simctl {}"#, args.join(" \\\n        "),);
            let term = Term::stdout();
            prompt(&term, &sh)?;
            Ok(cmd)
        } else {
            unreachable!()
        }
    }