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('\'', "'"),
]);
}
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!()
}
}