Skip to content

Commit

Permalink
feat(cli): add ios build command (#5002)
Browse files Browse the repository at this point in the history
  • Loading branch information
lucasfernog committed Aug 22, 2022
1 parent 4c9ea45 commit 403859d
Show file tree
Hide file tree
Showing 5 changed files with 224 additions and 57 deletions.
6 changes: 6 additions & 0 deletions .changes/cli-ios-build.md
@@ -0,0 +1,6 @@
---
"cli.rs": patch
"cli.js": patch
---

Added `ios build` command.
2 changes: 1 addition & 1 deletion tooling/cli/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

76 changes: 42 additions & 34 deletions tooling/cli/src/mobile/android.rs
Expand Up @@ -139,7 +139,7 @@ pub struct BuildOptions {
multiple_values(true),
value_parser(clap::builder::PossibleValuesParser::new(Target::name_list()))
)]
targets: Option<Vec<String>>,
pub targets: Option<Vec<String>>,
/// List of cargo features to activate
#[clap(short, long, multiple_occurrences(true), multiple_values(true))]
pub features: Option<Vec<String>>,
Expand Down Expand Up @@ -279,6 +279,7 @@ fn run_build(mut options: BuildOptions, config: &AndroidConfig, env: Env) -> Res
} else {
Profile::Release
};
let noise_level = NoiseLevel::Polite;

if !(options.apk || options.aab) {
// if the user didn't specify the format to build, we'll do both
Expand Down Expand Up @@ -320,7 +321,7 @@ fn run_build(mut options: BuildOptions, config: &AndroidConfig, env: Env) -> Res
apk::build(
config,
&env,
NoiseLevel::Polite,
noise_level,
profile,
get_targets_or_all(Vec::new())?,
options.split_per_abi,
Expand All @@ -333,7 +334,7 @@ fn run_build(mut options: BuildOptions, config: &AndroidConfig, env: Env) -> Res
aab::build(
config,
&env,
NoiseLevel::Polite,
noise_level,
profile,
get_targets_or_all(Vec::new())?,
options.split_per_abi,
Expand All @@ -360,15 +361,20 @@ fn log_finished(outputs: Vec<PathBuf>, kind: &str) {
}

fn dev(options: DevOptions) -> Result<()> {
with_config(|_, config, _metadata| {
with_config(|root_conf, config, metadata| {
ensure_init(config.project_dir(), MobileTarget::Android)
.map_err(|e| Error::ProjectNotInitialized(e.to_string()))?;
run_dev(options, config).map_err(|e| Error::DevFailed(e.to_string()))
run_dev(options, root_conf, config, metadata).map_err(|e| Error::DevFailed(e.to_string()))
})
.map_err(Into::into)
}

fn run_dev(options: DevOptions, config: &AndroidConfig) -> Result<()> {
fn run_dev(
options: DevOptions,
root_conf: &Config,
config: &AndroidConfig,
metadata: &AndroidMetadata,
) -> Result<()> {
let mut dev_options = options.clone().into();
let mut interface = crate::dev::setup(&mut dev_options)?;

Expand Down Expand Up @@ -407,7 +413,7 @@ fn run_dev(options: DevOptions, config: &AndroidConfig) -> Result<()> {
if open {
open_dev(config)
} else {
match run(options) {
match run(options, root_conf, config, metadata) {
Ok(c) => Ok(Box::new(c) as Box<dyn DevProcess>),
Err(Error::FailedToPromptForDevice(e)) => {
log::error!("{}", e);
Expand Down Expand Up @@ -439,37 +445,42 @@ fn open() -> Result<()> {
.map_err(Into::into)
}

fn run(options: MobileOptions) -> Result<DevChild, Error> {
fn run(
options: MobileOptions,
root_conf: &Config,
config: &AndroidConfig,
metadata: &AndroidMetadata,
) -> Result<DevChild, Error> {
let profile = if options.debug {
Profile::Debug
} else {
Profile::Release
};
let noise_level = NoiseLevel::Polite;

with_config(|root_conf, config, metadata| {
let build_app_bundle = metadata.asset_packs().is_some();
let build_app_bundle = metadata.asset_packs().is_some();

ensure_init(config.project_dir(), MobileTarget::Android)
.map_err(|e| Error::ProjectNotInitialized(e.to_string()))?;
let env = Env::new().map_err(Error::EnvInitFailed)?;
super::init::init_dot_cargo(root_conf, Some(&env)).map_err(Error::InitDotCargo)?;

let env = Env::new().map_err(Error::EnvInitFailed)?;
super::init::init_dot_cargo(root_conf, Some(&env)).map_err(Error::InitDotCargo)?;
device_prompt(&env)
.map_err(Error::FailedToPromptForDevice)?
.run(
config,
&env,
noise_level,
profile,
None,
build_app_bundle,
false,
".MainActivity".into(),
)
.map(|c| DevChild(Some(c)))
.map_err(Error::RunFailed)
}

device_prompt(&env)
.map_err(Error::FailedToPromptForDevice)?
.run(
config,
&env,
NoiseLevel::Polite,
profile,
None,
build_app_bundle,
false,
".MainActivity".into(),
)
.map_err(Error::RunFailed)
})
.map(|c| DevChild(Some(c)))
fn detect_target_ok<'a>(env: &Env) -> Option<&'a Target<'a>> {
device_prompt(env).map(|device| device.target()).ok()
}

fn android_studio_script(options: AndroidStudioScriptOptions) -> Result<()> {
Expand All @@ -478,10 +489,7 @@ fn android_studio_script(options: AndroidStudioScriptOptions) -> Result<()> {
} else {
Profile::Debug
};

fn detect_target_ok<'a>(env: &Env) -> Option<&'a Target<'a>> {
device_prompt(env).map(|device| device.target()).ok()
}
let noise_level = NoiseLevel::Polite;

with_config(|root_conf, config, metadata| {
ensure_init(config.project_dir(), MobileTarget::Android)
Expand All @@ -496,7 +504,7 @@ fn android_studio_script(options: AndroidStudioScriptOptions) -> Result<()> {
&env,
|target: &Target| {
target
.build(config, metadata, &env, NoiseLevel::Polite, true, profile)
.build(config, metadata, &env, noise_level, true, profile)
.map_err(Error::AndroidStudioScriptFailed)
},
)
Expand Down

0 comments on commit 403859d

Please sign in to comment.