refactor(cli): synchronize pbxproj and export options, handle cert on build (#10669)

This commit is contained in:
Lucas Fernandes Nogueira 2024-08-21 11:38:02 -03:00 committed by GitHub
parent 9bcff3cd79
commit da8c9a7d30
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 2494 additions and 175 deletions

View File

@ -0,0 +1,6 @@
---
"tauri-cli": patch:breaking
"@tauri-apps/cli": patch:breaking
---
The `IOS_CERTIFICATE`, `IOS_CERTIFICATE_PASSWORD` and `IOS_MOBILE_PROVISION` environment variables are now read by the `ios build` command instead of `ios init`.

View File

@ -0,0 +1,6 @@
---
"tauri-cli": patch:bug
"@tauri-apps/cli": patch:bug
---
Synchronize Xcode project changes with the ExportOptions.plist file so `ios build` calls can work with code signing changes made in Xcode.

View File

@ -0,0 +1,6 @@
---
"tauri-cli": patch:enhance
"@tauri-apps/cli": patch:enhance
---
Modify both ExportOptions.plist and project.pbxproj to reflect changes for the `IOS_CERTIFICATE`, `IOS_CERTIFICATE_PASSWORD` and `IOS_MOBILE_PROVISION` environment variables.

84
tooling/cli/Cargo.lock generated
View File

@ -557,12 +557,12 @@ dependencies = [
[[package]]
name = "cargo-mobile2"
version = "0.13.3"
version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6b933d7440e2fd78462ae586f959883710837c6145ddcd501e8adcf4cb57b2cb"
checksum = "b8dd9a8451eeeb998885ec3acb08b9bd32353ccd119b18db5ae6ddc41814fc03"
dependencies = [
"colored",
"core-foundation",
"core-foundation 0.10.0",
"deunicode",
"duct",
"dunce",
@ -832,10 +832,20 @@ dependencies = [
]
[[package]]
name = "core-foundation-sys"
version = "0.8.6"
name = "core-foundation"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63"
dependencies = [
"core-foundation-sys",
"libc",
]
[[package]]
name = "core-foundation-sys"
version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
[[package]]
name = "core_maths"
@ -2295,6 +2305,18 @@ dependencies = [
"generic-array",
]
[[package]]
name = "insta"
version = "1.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "810ae6042d48e2c9e9215043563a58a80b877bc863228a74cf10c49d4620a6f5"
dependencies = [
"console",
"lazy_static",
"linked-hash-map",
"similar",
]
[[package]]
name = "interpolate_name"
version = "0.2.4"
@ -2713,6 +2735,12 @@ dependencies = [
"safemem",
]
[[package]]
name = "linked-hash-map"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
[[package]]
name = "linux-raw-sys"
version = "0.3.8"
@ -4673,7 +4701,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
dependencies = [
"bitflags 1.3.2",
"core-foundation",
"core-foundation 0.9.4",
"core-foundation-sys",
"libc",
"security-framework-sys",
@ -4976,6 +5004,12 @@ dependencies = [
"quote",
]
[[package]]
name = "similar"
version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e"
[[package]]
name = "simplecss"
version = "0.2.1"
@ -5406,6 +5440,7 @@ dependencies = [
"ignore",
"image",
"include_dir",
"insta",
"itertools 0.13.0",
"json-patch 2.0.0",
"jsonrpsee",
@ -5443,6 +5478,7 @@ dependencies = [
"tauri-macos-sign",
"tauri-utils 1.5.4",
"tauri-utils 2.0.0-rc.5",
"tempfile",
"tokio",
"toml 0.8.10",
"toml_edit 0.22.6",
@ -6467,11 +6503,11 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows"
version = "0.57.0"
version = "0.58.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143"
checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6"
dependencies = [
"windows-core 0.57.0",
"windows-core 0.58.0",
"windows-targets 0.52.6",
]
@ -6486,21 +6522,22 @@ dependencies = [
[[package]]
name = "windows-core"
version = "0.57.0"
version = "0.58.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d"
checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99"
dependencies = [
"windows-implement",
"windows-interface",
"windows-result 0.1.1",
"windows-result",
"windows-strings",
"windows-targets 0.52.6",
]
[[package]]
name = "windows-implement"
version = "0.57.0"
version = "0.58.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7"
checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
dependencies = [
"proc-macro2",
"quote",
@ -6509,9 +6546,9 @@ dependencies = [
[[package]]
name = "windows-interface"
version = "0.57.0"
version = "0.58.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7"
checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
dependencies = [
"proc-macro2",
"quote",
@ -6524,20 +6561,11 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0"
dependencies = [
"windows-result 0.2.0",
"windows-result",
"windows-strings",
"windows-targets 0.52.6",
]
[[package]]
name = "windows-result"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "749f0da9cc72d82e600d8d2e44cadd0b9eedb9038f71a1c58556ac1c5791813b"
dependencies = [
"windows-targets 0.52.6",
]
[[package]]
name = "windows-result"
version = "0.2.0"
@ -6553,7 +6581,7 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10"
dependencies = [
"windows-result 0.2.0",
"windows-result",
"windows-targets 0.52.6",
]

View File

@ -39,7 +39,7 @@ name = "cargo-tauri"
path = "src/main.rs"
[dependencies]
cargo-mobile2 = { version = "0.13.3", default-features = false }
cargo-mobile2 = { version = "0.13.4", default-features = false }
jsonrpsee = { version = "0.24", features = [ "server" ] }
jsonrpsee-core = "0.24"
jsonrpsee-client-transport = { version = "0.24", features = [ "ws" ] }
@ -101,6 +101,10 @@ phf = { version = "0.11", features = ["macros"] }
walkdir = "2"
elf = "0.7"
memchr = "2"
tempfile = "3"
[dev-dependencies]
insta = "1"
[target."cfg(windows)".dependencies.windows-sys]
version = "0.59"

View File

@ -10,6 +10,8 @@ pub mod flock;
pub mod framework;
pub mod fs;
pub mod npm;
#[cfg(target_os = "macos")]
pub mod pbxproj;
pub mod plugins;
pub mod prompts;
pub mod template;

View File

@ -0,0 +1,322 @@
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
use std::{
collections::BTreeMap,
fmt,
path::{Path, PathBuf},
};
pub fn parse<P: AsRef<Path>>(path: P) -> crate::Result<Pbxproj> {
let path = path.as_ref();
let pbxproj = std::fs::read_to_string(path)?;
let mut proj = Pbxproj {
path: path.to_owned(),
raw_lines: pbxproj.split('\n').map(ToOwned::to_owned).collect(),
xc_build_configuration: BTreeMap::new(),
xc_configuration_list: BTreeMap::new(),
additions: BTreeMap::new(),
has_changes: false,
};
let mut state = State::Idle;
let mut iter = proj.raw_lines.iter().enumerate();
while let Some((line_number, line)) = iter.next() {
match &state {
State::Idle => {
if line == "/* Begin XCBuildConfiguration section */" {
state = State::XCBuildConfiguration;
} else if line == "/* Begin XCConfigurationList section */" {
state = State::XCConfigurationList;
}
}
// XCBuildConfiguration
State::XCBuildConfiguration => {
if line == "/* End XCBuildConfiguration section */" {
state = State::Idle;
} else if let Some((_identation, token)) = split_at_identation(line) {
let id: String = token.chars().take_while(|c| c.is_alphanumeric()).collect();
proj.xc_build_configuration.insert(
id.clone(),
XCBuildConfiguration {
build_settings: Vec::new(),
},
);
state = State::XCBuildConfigurationObject { id };
}
}
State::XCBuildConfigurationObject { id } => {
if line.contains("buildSettings") {
state = State::XCBuildConfigurationObjectBuildSettings { id: id.clone() };
} else if split_at_identation(line).map_or(false, |(_ident, token)| token == "};") {
state = State::XCBuildConfiguration;
}
}
State::XCBuildConfigurationObjectBuildSettings { id } => {
if let Some((identation, token)) = split_at_identation(line) {
if token == "};" {
state = State::XCBuildConfigurationObject { id: id.clone() };
} else {
let assignment = token.trim_end_matches(';');
if let Some((key, value)) = assignment.split_once(" = ") {
// multiline value
let value = if value == "(" {
let mut value = value.to_string();
loop {
let Some((_next_line_number, next_line)) = iter.next() else {
break;
};
value.push_str(next_line);
value.push('\n');
if let Some((_, token)) = split_at_identation(next_line) {
if token == ");" {
break;
}
}
}
value
} else {
value.trim().to_string()
};
proj
.xc_build_configuration
.get_mut(id)
.unwrap()
.build_settings
.push(BuildSettings {
identation: identation.into(),
line_number,
key: key.trim().into(),
value,
});
}
}
}
}
// XCConfigurationList
State::XCConfigurationList => {
if line == "/* End XCConfigurationList section */" {
state = State::Idle;
} else if let Some((_identation, token)) = split_at_identation(line) {
let Some((id, comment)) = token.split_once(' ') else {
continue;
};
proj.xc_configuration_list.insert(
id.to_string(),
XCConfigurationList {
comment: comment.trim_end_matches(" = {").to_string(),
build_configurations: Vec::new(),
},
);
state = State::XCConfigurationListObject { id: id.to_string() };
}
}
State::XCConfigurationListObject { id } => {
if line.contains("buildConfigurations") {
state = State::XCConfigurationListObjectBuildConfigurations { id: id.clone() };
} else if split_at_identation(line).map_or(false, |(_ident, token)| token == "};") {
state = State::XCConfigurationList;
}
}
State::XCConfigurationListObjectBuildConfigurations { id } => {
if let Some((_identation, token)) = split_at_identation(line) {
if token == ");" {
state = State::XCConfigurationListObject { id: id.clone() };
} else {
let Some((build_configuration_id, comments)) = token.split_once(' ') else {
continue;
};
proj
.xc_configuration_list
.get_mut(id)
.unwrap()
.build_configurations
.push(BuildConfigurationRef {
id: build_configuration_id.to_string(),
comments: comments.trim_end_matches(',').to_string(),
});
}
}
}
}
}
Ok(proj)
}
fn split_at_identation(s: &str) -> Option<(&str, &str)> {
s.chars()
.position(|c| !c.is_ascii_whitespace())
.map(|pos| s.split_at(pos))
}
enum State {
Idle,
// XCBuildConfiguration
XCBuildConfiguration,
XCBuildConfigurationObject { id: String },
XCBuildConfigurationObjectBuildSettings { id: String },
// XCConfigurationList
XCConfigurationList,
XCConfigurationListObject { id: String },
XCConfigurationListObjectBuildConfigurations { id: String },
}
pub struct Pbxproj {
path: PathBuf,
raw_lines: Vec<String>,
pub xc_build_configuration: BTreeMap<String, XCBuildConfiguration>,
pub xc_configuration_list: BTreeMap<String, XCConfigurationList>,
// maps the line number to the line to add
additions: BTreeMap<usize, String>,
has_changes: bool,
}
impl fmt::Debug for Pbxproj {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("Pbxproj")
.field("xc_build_configuration", &self.xc_build_configuration)
.field("xc_configuration_list", &self.xc_configuration_list)
.finish()
}
}
impl Pbxproj {
pub fn has_changes(&self) -> bool {
!self.additions.is_empty() || self.has_changes
}
fn serialize(&self) -> String {
let mut proj = String::new();
let last_line_number = self.raw_lines.len() - 1;
for (number, line) in self.raw_lines.iter().enumerate() {
if let Some(new) = self.additions.get(&number) {
proj.push_str(new);
proj.push('\n');
}
proj.push_str(line);
if number != last_line_number {
proj.push('\n');
}
}
proj
}
pub fn save(&self) -> std::io::Result<()> {
std::fs::write(&self.path, self.serialize())
}
pub fn set_build_settings(&mut self, build_configuration_id: &str, key: &str, value: &str) {
let Some(build_configuration) = self.xc_build_configuration.get_mut(build_configuration_id)
else {
return;
};
if let Some(build_setting) = build_configuration
.build_settings
.iter_mut()
.find(|s| s.key == key)
{
let Some(line) = self.raw_lines.get_mut(build_setting.line_number) else {
return;
};
*line = format!("{}{key} = {value};", build_setting.identation);
self.has_changes = true;
} else {
let Some(last_build_setting) = build_configuration.build_settings.last().cloned() else {
return;
};
build_configuration.build_settings.push(BuildSettings {
identation: last_build_setting.identation.clone(),
line_number: last_build_setting.line_number + 1,
key: key.to_string(),
value: value.to_string(),
});
self.additions.insert(
last_build_setting.line_number + 1,
format!("{}{key} = {value};", last_build_setting.identation),
);
}
}
}
#[derive(Debug)]
pub struct XCBuildConfiguration {
build_settings: Vec<BuildSettings>,
}
impl XCBuildConfiguration {
pub fn get_build_setting(&self, key: &str) -> Option<&BuildSettings> {
self.build_settings.iter().find(|s| s.key == key)
}
}
#[derive(Debug, Clone)]
pub struct BuildSettings {
identation: String,
line_number: usize,
pub key: String,
pub value: String,
}
#[derive(Debug, Clone)]
pub struct XCConfigurationList {
pub comment: String,
pub build_configurations: Vec<BuildConfigurationRef>,
}
#[derive(Debug, Clone)]
pub struct BuildConfigurationRef {
pub id: String,
pub comments: String,
}
#[cfg(test)]
mod tests {
#[test]
fn parse() {
let manifest_dir = std::path::Path::new(env!("CARGO_MANIFEST_DIR"));
let fixtures_path = manifest_dir.join("tests").join("fixtures").join("pbxproj");
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(fixtures_path.join("snapshots"));
let _guard = settings.bind_to_scope();
insta::assert_debug_snapshot!(
"project.pbxproj",
super::parse(fixtures_path.join("project.pbxproj")).expect("failed to parse pbxproj")
);
}
#[test]
fn modify() {
let manifest_dir = std::path::Path::new(env!("CARGO_MANIFEST_DIR"));
let fixtures_path = manifest_dir.join("tests").join("fixtures").join("pbxproj");
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(fixtures_path.join("snapshots"));
let _guard = settings.bind_to_scope();
let mut pbxproj =
super::parse(fixtures_path.join("project.pbxproj")).expect("failed to parse pbxproj");
pbxproj.set_build_settings("DB0E254D0FD84970B57F6410", "PRODUCT_NAME", "\"Tauri Test\"");
pbxproj.set_build_settings("DB0E254D0FD84970B57F6410", "UNKNOWN", "9283j49238h");
insta::assert_snapshot!("project-modified.pbxproj", pbxproj.serialize());
}
}

View File

@ -24,7 +24,6 @@ use cargo_mobile2::{
use handlebars::{
Context, Handlebars, Helper, HelperResult, Output, RenderContext, RenderError, RenderErrorReason,
};
use serde::Serialize;
use std::{env::var_os, path::PathBuf};
@ -36,23 +35,8 @@ pub fn command(
) -> Result<()> {
let wrapper = TextWrapper::default();
let tauri_init_config = TauriInitConfig {
#[cfg(target_os = "macos")]
ios: {
let (keychain, provisioning_profile) = super::ios::signing_from_env()?;
super::ios::init_config(keychain.as_ref(), provisioning_profile.as_ref())?
},
};
exec(
target,
&wrapper,
&tauri_init_config,
ci,
reinstall_deps,
skip_targets_install,
)
.map_err(|e| anyhow::anyhow!("{:#}", e))?;
exec(target, &wrapper, ci, reinstall_deps, skip_targets_install)
.map_err(|e| anyhow::anyhow!("{:#}", e))?;
Ok(())
}
@ -93,33 +77,9 @@ pub fn configure_cargo(
dot_cargo.write(app).map_err(Into::into)
}
#[cfg(target_os = "macos")]
#[derive(Serialize)]
pub enum CodeSignStyle {
Manual,
Automatic,
}
#[cfg(target_os = "macos")]
#[derive(Serialize)]
#[serde(rename_all = "kebab-case")]
pub struct IosInitConfig {
pub code_sign_style: CodeSignStyle,
pub code_sign_identity: Option<String>,
pub team_id: Option<String>,
pub provisioning_profile_uuid: Option<String>,
}
#[derive(Serialize)]
pub struct TauriInitConfig {
#[cfg(target_os = "macos")]
ios: IosInitConfig,
}
pub fn exec(
target: Target,
wrapper: &TextWrapper,
tauri_init_config: &TauriInitConfig,
#[allow(unused_variables)] non_interactive: bool,
#[allow(unused_variables)] reinstall_deps: bool,
skip_targets_install: bool,
@ -133,8 +93,6 @@ pub fn exec(
let (handlebars, mut map) = handlebars(&app);
map.insert("tauri", tauri_init_config);
let mut args = std::env::args_os();
let (binary, mut build_args) = args

View File

@ -4,7 +4,8 @@
use super::{
configure_cargo, detect_target_ok, ensure_init, env, get_app, get_config, inject_resources,
log_finished, merge_plist, open_and_wait, MobileTarget, OptionsHandle,
load_pbxproj, log_finished, merge_plist, open_and_wait, project_config,
synchronize_project_config, MobileTarget, OptionsHandle,
};
use crate::{
build::Options as BuildOptions,
@ -138,7 +139,7 @@ pub fn command(options: Options, noise_level: NoiseLevel) -> Result<()> {
tauri_utils::platform::Target::Ios,
options.config.as_ref().map(|c| &c.0),
)?;
let (interface, app, config) = {
let (interface, app, mut config) = {
let tauri_config_guard = tauri_config.lock().unwrap();
let tauri_config_ = tauri_config_guard.as_ref().unwrap();
@ -170,33 +171,56 @@ pub fn command(options: Options, noise_level: NoiseLevel) -> Result<()> {
.project_dir()
.join(config.scheme())
.join("Info.plist");
merge_plist(
vec![
tauri_path.join("Info.plist").into(),
tauri_path.join("Info.ios.plist").into(),
],
&info_plist_path,
)?;
let merged_info_plist = merge_plist(vec![
info_plist_path.clone().into(),
tauri_path.join("Info.plist").into(),
tauri_path.join("Info.ios.plist").into(),
])?;
merged_info_plist.to_file_xml(&info_plist_path)?;
let mut env = env()?;
configure_cargo(&app, None)?;
let (keychain, provisioning_profile) = super::signing_from_env()?;
let init_config = super::init_config(keychain.as_ref(), provisioning_profile.as_ref())?;
if let Some(export_options_plist) =
create_export_options(&app, &init_config, options.export_method)
{
let export_options_plist_path = config.project_dir().join("ExportOptions.plist");
merge_plist(
vec![
export_options_plist_path.clone().into(),
export_options_plist.into(),
],
&export_options_plist_path,
)?;
let mut export_options_plist = plist::Dictionary::new();
if let Some(method) = options.export_method {
export_options_plist.insert("method".to_string(), method.to_string().into());
}
let (keychain, provisioning_profile) = super::signing_from_env()?;
let project_config = project_config(keychain.as_ref(), provisioning_profile.as_ref())?;
let mut pbxproj = load_pbxproj(&config)?;
// synchronize pbxproj and exportoptions
synchronize_project_config(
&app,
&mut pbxproj,
&mut export_options_plist,
&project_config,
options.debug,
)?;
if pbxproj.has_changes() {
pbxproj.save()?;
}
// merge export options and write to temp file
let _export_options_tmp = if !export_options_plist.is_empty() {
let export_options_plist_path = config.project_dir().join("ExportOptions.plist");
let export_options = tempfile::NamedTempFile::new()?;
let merged_plist = merge_plist(vec![
export_options.path().to_owned().into(),
export_options_plist_path.clone().into(),
plist::Value::from(export_options_plist).into(),
])?;
merged_plist.to_file_xml(export_options.path())?;
config.set_export_options_plist_path(export_options.path());
Some(export_options)
} else {
None
};
let open = options.open;
let _handle = run_build(
interface,
@ -215,41 +239,6 @@ pub fn command(options: Options, noise_level: NoiseLevel) -> Result<()> {
Ok(())
}
fn create_export_options(
app: &cargo_mobile2::config::app::App,
config: &super::super::init::IosInitConfig,
export_method: Option<ExportMethod>,
) -> Option<plist::Value> {
let mut plist = plist::Dictionary::new();
if let Some(method) = export_method {
plist.insert("method".to_string(), method.to_string().into());
}
if config.code_sign_identity.is_some() || config.provisioning_profile_uuid.is_some() {
plist.insert("signingStyle".to_string(), "manual".into());
}
if let Some(identity) = &config.code_sign_identity {
plist.insert("signingCertificate".to_string(), identity.clone().into());
}
if let Some(id) = &config.team_id {
plist.insert("teamID".to_string(), id.clone().into());
}
if let Some(profile_uuid) = &config.provisioning_profile_uuid {
let mut provisioning_profiles = plist::Dictionary::new();
provisioning_profiles.insert(app.reverse_identifier(), profile_uuid.clone().into());
plist.insert(
"provisioningProfiles".to_string(),
provisioning_profiles.into(),
);
}
(!plist.is_empty()).then(|| plist.into())
}
#[allow(clippy::too_many_arguments)]
fn run_build(
interface: AppInterface,

View File

@ -185,13 +185,12 @@ fn run_command(options: Options, noise_level: NoiseLevel) -> Result<()> {
.project_dir()
.join(config.scheme())
.join("Info.plist");
merge_plist(
vec![
tauri_path.join("Info.plist").into(),
tauri_path.join("Info.ios.plist").into(),
],
&info_plist_path,
)?;
let merged_info_plist = merge_plist(vec![
info_plist_path.clone().into(),
tauri_path.join("Info.plist").into(),
tauri_path.join("Info.ios.plist").into(),
])?;
merged_info_plist.to_file_xml(&info_plist_path)?;
run_dev(
interface,

View File

@ -32,6 +32,7 @@ use crate::{
helpers::{
app_paths::tauri_dir,
config::{BundleResources, Config as TauriConfig},
pbxproj,
},
Result,
};
@ -39,7 +40,7 @@ use crate::{
use std::{
env::{set_var, var_os},
fs::create_dir_all,
path::{Path, PathBuf},
path::PathBuf,
thread::sleep,
time::Duration,
};
@ -344,8 +345,8 @@ impl From<plist::Value> for PlistKind {
}
}
fn merge_plist(src: Vec<PlistKind>, dest: &Path) -> Result<()> {
let mut dest_plist = None;
fn merge_plist(src: Vec<PlistKind>) -> Result<plist::Value> {
let mut merged_plist = plist::Dictionary::new();
for plist_kind in src {
let plist = match plist_kind {
@ -353,61 +354,197 @@ fn merge_plist(src: Vec<PlistKind>, dest: &Path) -> Result<()> {
PlistKind::Plist(v) => Ok(v),
};
if let Ok(src_plist) = plist {
if dest_plist.is_none() {
dest_plist.replace(plist::Value::from_file(dest)?);
}
let plist = dest_plist.as_mut().expect("plist not loaded");
if let Some(plist) = plist.as_dictionary_mut() {
if let Some(dict) = src_plist.into_dictionary() {
for (key, value) in dict {
plist.insert(key, value);
}
if let Some(dict) = src_plist.into_dictionary() {
for (key, value) in dict {
merged_plist.insert(key, value);
}
}
}
}
if let Some(dest_plist) = dest_plist {
dest_plist.to_file_xml(dest)?;
}
Ok(())
Ok(plist::Value::Dictionary(merged_plist))
}
pub fn signing_from_env() -> Result<(
Option<tauri_macos_sign::Keychain>,
Option<tauri_macos_sign::ProvisioningProfile>,
)> {
let keychain = if let (Some(certificate), Some(certificate_password)) = (
let keychain = match (
var_os("IOS_CERTIFICATE"),
var_os("IOS_CERTIFICATE_PASSWORD"),
) {
tauri_macos_sign::Keychain::with_certificate(&certificate, &certificate_password).map(Some)?
} else {
None
(Some(certificate), Some(certificate_password)) => {
log::info!("Reading iOS certificates from ");
tauri_macos_sign::Keychain::with_certificate(&certificate, &certificate_password).map(Some)?
}
(Some(_), None) => {
log::warn!("The IOS_CERTIFICATE environment variable is set but not IOS_CERTIFICATE_PASSWORD. Ignoring the certificate...");
None
}
_ => None,
};
let provisioning_profile = if let Some(provisioning_profile) = var_os("IOS_MOBILE_PROVISION") {
tauri_macos_sign::ProvisioningProfile::from_base64(&provisioning_profile).map(Some)?
} else {
if keychain.is_some() {
log::warn!("You have provided an iOS certificate via environment variables but the IOS_MOBILE_PROVISION environment variable is not set. This will fail when signing unless the profile is set in your Xcode project.");
}
None
};
Ok((keychain, provisioning_profile))
}
pub fn init_config(
pub struct ProjectConfig {
pub code_sign_identity: Option<String>,
pub team_id: Option<String>,
pub provisioning_profile_uuid: Option<String>,
}
pub fn project_config(
keychain: Option<&tauri_macos_sign::Keychain>,
provisioning_profile: Option<&tauri_macos_sign::ProvisioningProfile>,
) -> Result<super::init::IosInitConfig> {
Ok(super::init::IosInitConfig {
code_sign_style: if keychain.is_some() && provisioning_profile.is_some() {
super::init::CodeSignStyle::Manual
} else {
super::init::CodeSignStyle::Automatic
},
) -> Result<ProjectConfig> {
Ok(ProjectConfig {
code_sign_identity: keychain.map(|k| k.signing_identity()),
team_id: keychain.and_then(|k| k.team_id().map(ToString::to_string)),
provisioning_profile_uuid: provisioning_profile.and_then(|p| p.uuid().ok()),
})
}
pub fn load_pbxproj(config: &AppleConfig) -> Result<pbxproj::Pbxproj> {
pbxproj::parse(
config
.project_dir()
.join(format!("{}.xcodeproj", config.app().name()))
.join("project.pbxproj"),
)
}
pub fn synchronize_project_config(
app: &App,
pbxproj: &mut pbxproj::Pbxproj,
export_options_list: &mut plist::Dictionary,
project_config: &ProjectConfig,
debug: bool,
) -> Result<()> {
let manual_signing = project_config.code_sign_identity.is_some()
|| project_config.provisioning_profile_uuid.is_some();
if let Some(xc_configuration_list) = pbxproj
.xc_configuration_list
.clone()
.into_values()
.find(|l| l.comment.contains("_iOS"))
{
for build_configuration_ref in xc_configuration_list.build_configurations {
if manual_signing {
pbxproj.set_build_settings(&build_configuration_ref.id, "CODE_SIGN_STYLE", "Manual");
}
if let Some(identity) = &project_config.code_sign_identity {
let identity = format!("\"{identity}\"");
pbxproj.set_build_settings(&build_configuration_ref.id, "CODE_SIGN_IDENTITY", &identity);
pbxproj.set_build_settings(
&build_configuration_ref.id,
"\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\"",
&identity,
);
}
if let Some(id) = &project_config.team_id {
pbxproj.set_build_settings(&build_configuration_ref.id, "DEVELOPMENT_TEAM", id);
pbxproj.set_build_settings(
&build_configuration_ref.id,
"\"DEVELOPMENT_TEAM[sdk=iphoneos*]\"",
id,
);
}
if let Some(profile_uuid) = &project_config.provisioning_profile_uuid {
let profile_uuid = format!("\"{profile_uuid}\"");
pbxproj.set_build_settings(
&build_configuration_ref.id,
"PROVISIONING_PROFILE_SPECIFIER",
&profile_uuid,
);
pbxproj.set_build_settings(
&build_configuration_ref.id,
"\"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]\"",
&profile_uuid,
);
}
}
}
let build_configuration = {
if let Some(xc_configuration_list) = pbxproj
.xc_configuration_list
.clone()
.into_values()
.find(|l| l.comment.contains("_iOS"))
{
let mut configuration = None;
let target = if debug { "debug" } else { "release" };
for build_configuration_ref in xc_configuration_list.build_configurations {
if build_configuration_ref.comments.contains(target) {
configuration = pbxproj
.xc_build_configuration
.get(&build_configuration_ref.id);
break;
}
}
configuration
} else {
None
}
};
if let Some(build_configuration) = build_configuration {
if let Some(style) = build_configuration.get_build_setting("CODE_SIGN_STYLE") {
export_options_list.insert(
"signingStyle".to_string(),
style.value.to_lowercase().into(),
);
}
if let Some(identity) = build_configuration
.get_build_setting("\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\"")
.or_else(|| build_configuration.get_build_setting("CODE_SIGN_IDENTITY"))
{
export_options_list.insert(
"signingCertificate".to_string(),
identity.value.trim_matches('"').into(),
);
}
if let Some(id) = build_configuration
.get_build_setting("\"DEVELOPMENT_TEAM[sdk=iphoneos*]\"")
.or_else(|| build_configuration.get_build_setting("DEVELOPMENT_TEAM"))
{
export_options_list.insert("teamID".to_string(), id.value.trim_matches('"').into());
}
let profile_uuid = project_config
.provisioning_profile_uuid
.clone()
.or_else(|| {
build_configuration
.get_build_setting("\"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]\"")
.or_else(|| build_configuration.get_build_setting("PROVISIONING_PROFILE_SPECIFIER"))
.map(|setting| setting.value.trim_matches('"').to_string())
});
if let Some(profile_uuid) = profile_uuid {
let mut provisioning_profiles = plist::Dictionary::new();
provisioning_profiles.insert(app.reverse_identifier(), profile_uuid.into());
export_options_list.insert(
"provisioningProfiles".to_string(),
provisioning_profiles.into(),
);
}
}
Ok(())
}

View File

@ -15,13 +15,6 @@ settingGroups:
{{#if apple.development-team}}
DEVELOPMENT_TEAM: {{apple.development-team}}
{{/if}}
CODE_SIGN_STYLE: {{tauri.ios.code-sign-style}}
{{#if tauri.ios.code-sign-identity}}
CODE_SIGN_IDENTITY: "{{tauri.ios.code-sign-identity}}"
{{/if}}
{{#if tauri.ios.provisioning-profile-uuid}}
PROVISIONING_PROFILE_SPECIFIER: "{{tauri.ios.provisioning-profile-uuid}}"
{{/if}}
targetTemplates:
app:
type: application

View File

@ -0,0 +1,474 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
2B78BA327A38C76093D36092 /* libapi_lib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A00E5F95D64FD14E47F85BD /* libapi_lib.a */; };
3043432501C9BC2DB6B4CB95 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 71EB788DE4662CFC0D97F567 /* CoreGraphics.framework */; };
328B4ADB3700C1873BEB7B10 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 90D3B673AFAB8D8AB561F616 /* main.mm */; };
6F379F15DA085785BA2624D4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6B7E79E23E646BA7968B457C /* Assets.xcassets */; };
9AADB041D25772D04E543F15 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62601E25FA39E62BE119B74D /* Metal.framework */; };
9DDA3BE70DD0E4013973FE38 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6082E363D51372A7658C351 /* UIKit.framework */; };
AC8BDC2C7A63FA3FDC5967F4 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4B2D1B108AE002010BDEC6D2 /* LaunchScreen.storyboard */; };
AFA0CA286325FD7A34968CA2 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 384966E551417F94A02D2706 /* Security.framework */; };
B60763BD194DFACA215EC7DA /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC377692DC31A070A0188C9D /* QuartzCore.framework */; };
C6D80743F168BDF017B7769E /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59CFE20DCF760BE67D9CE3D6 /* WebKit.framework */; };
DFFF888045C8D9D9FB69E8FD /* MetalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 338E66700FD330B99D434DD7 /* MetalKit.framework */; };
F86717F05E27C72C9FA1FB27 /* assets in Resources */ = {isa = PBXBuildFile; fileRef = 74A8FDFB350B966F5AAD4A24 /* assets */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
0E96CE07CD20273DD46BF325 /* main.rs */ = {isa = PBXFileReference; path = main.rs; sourceTree = "<group>"; };
1C1AB1B414CA2795AFBEDDB9 /* tray.rs */ = {isa = PBXFileReference; path = tray.rs; sourceTree = "<group>"; };
2F63E2AA460089BB58D40C79 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
338E66700FD330B99D434DD7 /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; };
384966E551417F94A02D2706 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
3CA88F22095BE63D88585625 /* menu_plugin.rs */ = {isa = PBXFileReference; path = menu_plugin.rs; sourceTree = "<group>"; };
4A00E5F95D64FD14E47F85BD /* libapi_lib.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libapi_lib.a; sourceTree = "<group>"; };
4B2D1B108AE002010BDEC6D2 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
59CFE20DCF760BE67D9CE3D6 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
5AC703CEBA41A121596066F3 /* api_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = api_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
62601E25FA39E62BE119B74D /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
6B7E79E23E646BA7968B457C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
71EB788DE4662CFC0D97F567 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
74A8FDFB350B966F5AAD4A24 /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; path = assets; sourceTree = SOURCE_ROOT; };
785D025E9542F7E098BF22B5 /* lib.rs */ = {isa = PBXFileReference; path = lib.rs; sourceTree = "<group>"; };
879941AE3DAA14534BBC6391 /* api_iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = api_iOS.entitlements; sourceTree = "<group>"; };
90D3B673AFAB8D8AB561F616 /* main.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = "<group>"; };
B6082E363D51372A7658C351 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
DC377692DC31A070A0188C9D /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
EC8C7948C50C3C9B5D96CB61 /* bindings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bindings.h; sourceTree = "<group>"; };
F835F52713CE8F029D5D252C /* cmd.rs */ = {isa = PBXFileReference; path = cmd.rs; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
11E18DCDB3ADFE87C18915EF /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
2B78BA327A38C76093D36092 /* libapi_lib.a in Frameworks */,
3043432501C9BC2DB6B4CB95 /* CoreGraphics.framework in Frameworks */,
9AADB041D25772D04E543F15 /* Metal.framework in Frameworks */,
DFFF888045C8D9D9FB69E8FD /* MetalKit.framework in Frameworks */,
B60763BD194DFACA215EC7DA /* QuartzCore.framework in Frameworks */,
AFA0CA286325FD7A34968CA2 /* Security.framework in Frameworks */,
9DDA3BE70DD0E4013973FE38 /* UIKit.framework in Frameworks */,
C6D80743F168BDF017B7769E /* WebKit.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
0677CEAF1F282F38CBA0F140 = {
isa = PBXGroup;
children = (
74A8FDFB350B966F5AAD4A24 /* assets */,
6B7E79E23E646BA7968B457C /* Assets.xcassets */,
4B2D1B108AE002010BDEC6D2 /* LaunchScreen.storyboard */,
F2116A6428EED18BE2A07E2B /* api_iOS */,
86D903732E10FAC4D300E8DF /* Externals */,
7A9A7AC155D9E22E54D6D847 /* Sources */,
CF9AA87D2F6E9C389B7AB70B /* src */,
10C9FC3FA3E12D6A4A67999D /* Frameworks */,
4AC51E67B71E27F15B02C5CD /* Products */,
);
sourceTree = "<group>";
};
07051859D6E2D8109C8FB128 /* bindings */ = {
isa = PBXGroup;
children = (
EC8C7948C50C3C9B5D96CB61 /* bindings.h */,
);
path = bindings;
sourceTree = "<group>";
};
10C9FC3FA3E12D6A4A67999D /* Frameworks */ = {
isa = PBXGroup;
children = (
71EB788DE4662CFC0D97F567 /* CoreGraphics.framework */,
4A00E5F95D64FD14E47F85BD /* libapi_lib.a */,
62601E25FA39E62BE119B74D /* Metal.framework */,
338E66700FD330B99D434DD7 /* MetalKit.framework */,
DC377692DC31A070A0188C9D /* QuartzCore.framework */,
384966E551417F94A02D2706 /* Security.framework */,
B6082E363D51372A7658C351 /* UIKit.framework */,
59CFE20DCF760BE67D9CE3D6 /* WebKit.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
4AC51E67B71E27F15B02C5CD /* Products */ = {
isa = PBXGroup;
children = (
5AC703CEBA41A121596066F3 /* api_iOS.app */,
);
name = Products;
sourceTree = "<group>";
};
7A9A7AC155D9E22E54D6D847 /* Sources */ = {
isa = PBXGroup;
children = (
A3574F52DBC5463B9C3D043D /* api */,
);
path = Sources;
sourceTree = "<group>";
};
86D903732E10FAC4D300E8DF /* Externals */ = {
isa = PBXGroup;
children = (
);
path = Externals;
sourceTree = "<group>";
};
A3574F52DBC5463B9C3D043D /* api */ = {
isa = PBXGroup;
children = (
90D3B673AFAB8D8AB561F616 /* main.mm */,
07051859D6E2D8109C8FB128 /* bindings */,
);
path = api;
sourceTree = "<group>";
};
CF9AA87D2F6E9C389B7AB70B /* src */ = {
isa = PBXGroup;
children = (
F835F52713CE8F029D5D252C /* cmd.rs */,
785D025E9542F7E098BF22B5 /* lib.rs */,
0E96CE07CD20273DD46BF325 /* main.rs */,
3CA88F22095BE63D88585625 /* menu_plugin.rs */,
1C1AB1B414CA2795AFBEDDB9 /* tray.rs */,
);
name = src;
path = ../../src;
sourceTree = "<group>";
};
F2116A6428EED18BE2A07E2B /* api_iOS */ = {
isa = PBXGroup;
children = (
879941AE3DAA14534BBC6391 /* api_iOS.entitlements */,
2F63E2AA460089BB58D40C79 /* Info.plist */,
);
path = api_iOS;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
54DC6E273C78071F3BA12EF3 /* api_iOS */ = {
isa = PBXNativeTarget;
buildConfigurationList = 01CBC40275452376830D79B1 /* Build configuration list for PBXNativeTarget "api_iOS" */;
buildPhases = (
FF948951157DE71465B5BD5F /* Build Rust Code */,
71E73CC9AB5F1323EC1F6365 /* Sources */,
CA2BEC44B6EDA1F21B6155CD /* Resources */,
11E18DCDB3ADFE87C18915EF /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = api_iOS;
productName = api_iOS;
productReference = 5AC703CEBA41A121596066F3 /* api_iOS.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
9BC88C3717DA5D4B78A51C15 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1430;
TargetAttributes = {
54DC6E273C78071F3BA12EF3 = {
DevelopmentTeam = Q93MBH6S2F;
};
};
};
buildConfigurationList = 8FA67D0F928A09CD639137D1 /* Build configuration list for PBXProject "api" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
Base,
en,
);
mainGroup = 0677CEAF1F282F38CBA0F140;
projectDirPath = "";
projectRoot = "";
targets = (
54DC6E273C78071F3BA12EF3 /* api_iOS */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
CA2BEC44B6EDA1F21B6155CD /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
6F379F15DA085785BA2624D4 /* Assets.xcassets in Resources */,
AC8BDC2C7A63FA3FDC5967F4 /* LaunchScreen.storyboard in Resources */,
F86717F05E27C72C9FA1FB27 /* assets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
FF948951157DE71465B5BD5F /* Build Rust Code */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
name = "Build Rust Code";
outputFileListPaths = (
);
outputPaths = (
"$(SRCROOT)/Externals/x86_64/${CONFIGURATION}/libapi_lib.a",
"$(SRCROOT)/Externals/arm64/${CONFIGURATION}/libapi_lib.a",
"$(SRCROOT)/Externals/arm64-sim/${CONFIGURATION}/libapi_lib.a",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "cargo tauri ios xcode-script -v --platform ${PLATFORM_DISPLAY_NAME:?} --sdk-root ${SDKROOT:?} --framework-search-paths \"${FRAMEWORK_SEARCH_PATHS:?}\" --header-search-paths \"${HEADER_SEARCH_PATHS:?}\" --gcc-preprocessor-definitions \"${GCC_PREPROCESSOR_DEFINITIONS:-}\" --configuration ${CONFIGURATION:?} ${FORCE_COLOR} ${ARCHS:?}";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
71E73CC9AB5F1323EC1F6365 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
328B4ADB3700C1873BEB7B10 /* main.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
A83F70B4C02DD0222038C7F1 /* release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
};
name = release;
};
B6AD77E490F315562F75D3D7 /* debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
"DEBUG=1",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
};
name = debug;
};
BF284FE6E7AE0C8DDCCE398B /* debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ARCHS = (
arm64,
"arm64-sim",
);
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = api_iOS/api_iOS.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
DEVELOPMENT_TEAM = Q93MBH6S2F;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphoneos*]" = "arm64-sim x86_64";
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\".\"",
);
INFOPLIST_FILE = api_iOS/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
"LIBRARY_SEARCH_PATHS[arch=arm64-sim]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64-sim/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
"LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
"LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
PRODUCT_BUNDLE_IDENTIFIER = com.tauri.api;
PRODUCT_NAME = "Tauri API";
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALID_ARCHS = "arm64 arm64-sim";
};
name = debug;
};
DB0E254D0FD84970B57F6410 /* release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ARCHS = (
arm64,
"arm64-sim",
);
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = api_iOS/api_iOS.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
DEVELOPMENT_TEAM = Q93MBH6S2F;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphoneos*]" = "arm64-sim x86_64";
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\".\"",
);
INFOPLIST_FILE = api_iOS/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
"LIBRARY_SEARCH_PATHS[arch=arm64-sim]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64-sim/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
"LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
"LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
PRODUCT_BUNDLE_IDENTIFIER = com.tauri.api;
PRODUCT_NAME = "Tauri API";
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALID_ARCHS = "arm64 arm64-sim";
};
name = release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
01CBC40275452376830D79B1 /* Build configuration list for PBXNativeTarget "api_iOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
BF284FE6E7AE0C8DDCCE398B /* debug */,
DB0E254D0FD84970B57F6410 /* release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = debug;
};
8FA67D0F928A09CD639137D1 /* Build configuration list for PBXProject "api" */ = {
isa = XCConfigurationList;
buildConfigurations = (
B6AD77E490F315562F75D3D7 /* debug */,
A83F70B4C02DD0222038C7F1 /* release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = debug;
};
/* End XCConfigurationList section */
};
rootObject = 9BC88C3717DA5D4B78A51C15 /* Project object */;
}

View File

@ -0,0 +1,479 @@
---
source: src/helpers/pbxproj.rs
expression: pbxproj.serialize()
---
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
2B78BA327A38C76093D36092 /* libapi_lib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A00E5F95D64FD14E47F85BD /* libapi_lib.a */; };
3043432501C9BC2DB6B4CB95 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 71EB788DE4662CFC0D97F567 /* CoreGraphics.framework */; };
328B4ADB3700C1873BEB7B10 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 90D3B673AFAB8D8AB561F616 /* main.mm */; };
6F379F15DA085785BA2624D4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6B7E79E23E646BA7968B457C /* Assets.xcassets */; };
9AADB041D25772D04E543F15 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62601E25FA39E62BE119B74D /* Metal.framework */; };
9DDA3BE70DD0E4013973FE38 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6082E363D51372A7658C351 /* UIKit.framework */; };
AC8BDC2C7A63FA3FDC5967F4 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4B2D1B108AE002010BDEC6D2 /* LaunchScreen.storyboard */; };
AFA0CA286325FD7A34968CA2 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 384966E551417F94A02D2706 /* Security.framework */; };
B60763BD194DFACA215EC7DA /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC377692DC31A070A0188C9D /* QuartzCore.framework */; };
C6D80743F168BDF017B7769E /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59CFE20DCF760BE67D9CE3D6 /* WebKit.framework */; };
DFFF888045C8D9D9FB69E8FD /* MetalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 338E66700FD330B99D434DD7 /* MetalKit.framework */; };
F86717F05E27C72C9FA1FB27 /* assets in Resources */ = {isa = PBXBuildFile; fileRef = 74A8FDFB350B966F5AAD4A24 /* assets */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
0E96CE07CD20273DD46BF325 /* main.rs */ = {isa = PBXFileReference; path = main.rs; sourceTree = "<group>"; };
1C1AB1B414CA2795AFBEDDB9 /* tray.rs */ = {isa = PBXFileReference; path = tray.rs; sourceTree = "<group>"; };
2F63E2AA460089BB58D40C79 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
338E66700FD330B99D434DD7 /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; };
384966E551417F94A02D2706 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
3CA88F22095BE63D88585625 /* menu_plugin.rs */ = {isa = PBXFileReference; path = menu_plugin.rs; sourceTree = "<group>"; };
4A00E5F95D64FD14E47F85BD /* libapi_lib.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libapi_lib.a; sourceTree = "<group>"; };
4B2D1B108AE002010BDEC6D2 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
59CFE20DCF760BE67D9CE3D6 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
5AC703CEBA41A121596066F3 /* api_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = api_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
62601E25FA39E62BE119B74D /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
6B7E79E23E646BA7968B457C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
71EB788DE4662CFC0D97F567 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
74A8FDFB350B966F5AAD4A24 /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; path = assets; sourceTree = SOURCE_ROOT; };
785D025E9542F7E098BF22B5 /* lib.rs */ = {isa = PBXFileReference; path = lib.rs; sourceTree = "<group>"; };
879941AE3DAA14534BBC6391 /* api_iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = api_iOS.entitlements; sourceTree = "<group>"; };
90D3B673AFAB8D8AB561F616 /* main.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = "<group>"; };
B6082E363D51372A7658C351 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
DC377692DC31A070A0188C9D /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
EC8C7948C50C3C9B5D96CB61 /* bindings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bindings.h; sourceTree = "<group>"; };
F835F52713CE8F029D5D252C /* cmd.rs */ = {isa = PBXFileReference; path = cmd.rs; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
11E18DCDB3ADFE87C18915EF /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
2B78BA327A38C76093D36092 /* libapi_lib.a in Frameworks */,
3043432501C9BC2DB6B4CB95 /* CoreGraphics.framework in Frameworks */,
9AADB041D25772D04E543F15 /* Metal.framework in Frameworks */,
DFFF888045C8D9D9FB69E8FD /* MetalKit.framework in Frameworks */,
B60763BD194DFACA215EC7DA /* QuartzCore.framework in Frameworks */,
AFA0CA286325FD7A34968CA2 /* Security.framework in Frameworks */,
9DDA3BE70DD0E4013973FE38 /* UIKit.framework in Frameworks */,
C6D80743F168BDF017B7769E /* WebKit.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
0677CEAF1F282F38CBA0F140 = {
isa = PBXGroup;
children = (
74A8FDFB350B966F5AAD4A24 /* assets */,
6B7E79E23E646BA7968B457C /* Assets.xcassets */,
4B2D1B108AE002010BDEC6D2 /* LaunchScreen.storyboard */,
F2116A6428EED18BE2A07E2B /* api_iOS */,
86D903732E10FAC4D300E8DF /* Externals */,
7A9A7AC155D9E22E54D6D847 /* Sources */,
CF9AA87D2F6E9C389B7AB70B /* src */,
10C9FC3FA3E12D6A4A67999D /* Frameworks */,
4AC51E67B71E27F15B02C5CD /* Products */,
);
sourceTree = "<group>";
};
07051859D6E2D8109C8FB128 /* bindings */ = {
isa = PBXGroup;
children = (
EC8C7948C50C3C9B5D96CB61 /* bindings.h */,
);
path = bindings;
sourceTree = "<group>";
};
10C9FC3FA3E12D6A4A67999D /* Frameworks */ = {
isa = PBXGroup;
children = (
71EB788DE4662CFC0D97F567 /* CoreGraphics.framework */,
4A00E5F95D64FD14E47F85BD /* libapi_lib.a */,
62601E25FA39E62BE119B74D /* Metal.framework */,
338E66700FD330B99D434DD7 /* MetalKit.framework */,
DC377692DC31A070A0188C9D /* QuartzCore.framework */,
384966E551417F94A02D2706 /* Security.framework */,
B6082E363D51372A7658C351 /* UIKit.framework */,
59CFE20DCF760BE67D9CE3D6 /* WebKit.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
4AC51E67B71E27F15B02C5CD /* Products */ = {
isa = PBXGroup;
children = (
5AC703CEBA41A121596066F3 /* api_iOS.app */,
);
name = Products;
sourceTree = "<group>";
};
7A9A7AC155D9E22E54D6D847 /* Sources */ = {
isa = PBXGroup;
children = (
A3574F52DBC5463B9C3D043D /* api */,
);
path = Sources;
sourceTree = "<group>";
};
86D903732E10FAC4D300E8DF /* Externals */ = {
isa = PBXGroup;
children = (
);
path = Externals;
sourceTree = "<group>";
};
A3574F52DBC5463B9C3D043D /* api */ = {
isa = PBXGroup;
children = (
90D3B673AFAB8D8AB561F616 /* main.mm */,
07051859D6E2D8109C8FB128 /* bindings */,
);
path = api;
sourceTree = "<group>";
};
CF9AA87D2F6E9C389B7AB70B /* src */ = {
isa = PBXGroup;
children = (
F835F52713CE8F029D5D252C /* cmd.rs */,
785D025E9542F7E098BF22B5 /* lib.rs */,
0E96CE07CD20273DD46BF325 /* main.rs */,
3CA88F22095BE63D88585625 /* menu_plugin.rs */,
1C1AB1B414CA2795AFBEDDB9 /* tray.rs */,
);
name = src;
path = ../../src;
sourceTree = "<group>";
};
F2116A6428EED18BE2A07E2B /* api_iOS */ = {
isa = PBXGroup;
children = (
879941AE3DAA14534BBC6391 /* api_iOS.entitlements */,
2F63E2AA460089BB58D40C79 /* Info.plist */,
);
path = api_iOS;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
54DC6E273C78071F3BA12EF3 /* api_iOS */ = {
isa = PBXNativeTarget;
buildConfigurationList = 01CBC40275452376830D79B1 /* Build configuration list for PBXNativeTarget "api_iOS" */;
buildPhases = (
FF948951157DE71465B5BD5F /* Build Rust Code */,
71E73CC9AB5F1323EC1F6365 /* Sources */,
CA2BEC44B6EDA1F21B6155CD /* Resources */,
11E18DCDB3ADFE87C18915EF /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = api_iOS;
productName = api_iOS;
productReference = 5AC703CEBA41A121596066F3 /* api_iOS.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
9BC88C3717DA5D4B78A51C15 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1430;
TargetAttributes = {
54DC6E273C78071F3BA12EF3 = {
DevelopmentTeam = Q93MBH6S2F;
};
};
};
buildConfigurationList = 8FA67D0F928A09CD639137D1 /* Build configuration list for PBXProject "api" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
Base,
en,
);
mainGroup = 0677CEAF1F282F38CBA0F140;
projectDirPath = "";
projectRoot = "";
targets = (
54DC6E273C78071F3BA12EF3 /* api_iOS */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
CA2BEC44B6EDA1F21B6155CD /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
6F379F15DA085785BA2624D4 /* Assets.xcassets in Resources */,
AC8BDC2C7A63FA3FDC5967F4 /* LaunchScreen.storyboard in Resources */,
F86717F05E27C72C9FA1FB27 /* assets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
FF948951157DE71465B5BD5F /* Build Rust Code */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
name = "Build Rust Code";
outputFileListPaths = (
);
outputPaths = (
"$(SRCROOT)/Externals/x86_64/${CONFIGURATION}/libapi_lib.a",
"$(SRCROOT)/Externals/arm64/${CONFIGURATION}/libapi_lib.a",
"$(SRCROOT)/Externals/arm64-sim/${CONFIGURATION}/libapi_lib.a",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "cargo tauri ios xcode-script -v --platform ${PLATFORM_DISPLAY_NAME:?} --sdk-root ${SDKROOT:?} --framework-search-paths \"${FRAMEWORK_SEARCH_PATHS:?}\" --header-search-paths \"${HEADER_SEARCH_PATHS:?}\" --gcc-preprocessor-definitions \"${GCC_PREPROCESSOR_DEFINITIONS:-}\" --configuration ${CONFIGURATION:?} ${FORCE_COLOR} ${ARCHS:?}";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
71E73CC9AB5F1323EC1F6365 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
328B4ADB3700C1873BEB7B10 /* main.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
A83F70B4C02DD0222038C7F1 /* release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
};
name = release;
};
B6AD77E490F315562F75D3D7 /* debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
"DEBUG=1",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
};
name = debug;
};
BF284FE6E7AE0C8DDCCE398B /* debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ARCHS = (
arm64,
"arm64-sim",
);
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = api_iOS/api_iOS.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
DEVELOPMENT_TEAM = Q93MBH6S2F;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphoneos*]" = "arm64-sim x86_64";
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\".\"",
);
INFOPLIST_FILE = api_iOS/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
"LIBRARY_SEARCH_PATHS[arch=arm64-sim]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64-sim/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
"LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
"LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
PRODUCT_BUNDLE_IDENTIFIER = com.tauri.api;
PRODUCT_NAME = "Tauri API";
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALID_ARCHS = "arm64 arm64-sim";
};
name = debug;
};
DB0E254D0FD84970B57F6410 /* release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ARCHS = (
arm64,
"arm64-sim",
);
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = api_iOS/api_iOS.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
DEVELOPMENT_TEAM = Q93MBH6S2F;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphoneos*]" = "arm64-sim x86_64";
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\".\"",
);
INFOPLIST_FILE = api_iOS/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
"LIBRARY_SEARCH_PATHS[arch=arm64-sim]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64-sim/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
"LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
"LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
PRODUCT_BUNDLE_IDENTIFIER = com.tauri.api;
PRODUCT_NAME = "Tauri Test";
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALID_ARCHS = "arm64 arm64-sim";
UNKNOWN = 9283j49238h;
};
name = release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
01CBC40275452376830D79B1 /* Build configuration list for PBXNativeTarget "api_iOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
BF284FE6E7AE0C8DDCCE398B /* debug */,
DB0E254D0FD84970B57F6410 /* release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = debug;
};
8FA67D0F928A09CD639137D1 /* Build configuration list for PBXProject "api" */ = {
isa = XCConfigurationList;
buildConfigurations = (
B6AD77E490F315562F75D3D7 /* debug */,
A83F70B4C02DD0222038C7F1 /* release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = debug;
};
/* End XCConfigurationList section */
};
rootObject = 9BC88C3717DA5D4B78A51C15 /* Project object */;
}

View File

@ -0,0 +1,916 @@
---
source: src/helpers/pbxproj.rs
expression: "super::parse(fixtures_path.join(\"project.pbxproj\")).expect(\"failed to parse pbxproj\")"
---
Pbxproj {
xc_build_configuration: {
"A83F70B4C02DD0222038C7F1": XCBuildConfiguration {
build_settings: [
BuildSettings {
identation: "\t\t\t\t",
line_number: 263,
key: "ALWAYS_SEARCH_USER_PATHS",
value: "NO",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 264,
key: "CLANG_ANALYZER_NONNULL",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 265,
key: "CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION",
value: "YES_AGGRESSIVE",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 266,
key: "CLANG_CXX_LANGUAGE_STANDARD",
value: "\"gnu++14\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 267,
key: "CLANG_CXX_LIBRARY",
value: "\"libc++\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 268,
key: "CLANG_ENABLE_MODULES",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 269,
key: "CLANG_ENABLE_OBJC_ARC",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 270,
key: "CLANG_ENABLE_OBJC_WEAK",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 271,
key: "CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 272,
key: "CLANG_WARN_BOOL_CONVERSION",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 273,
key: "CLANG_WARN_COMMA",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 274,
key: "CLANG_WARN_CONSTANT_CONVERSION",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 275,
key: "CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 276,
key: "CLANG_WARN_DIRECT_OBJC_ISA_USAGE",
value: "YES_ERROR",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 277,
key: "CLANG_WARN_DOCUMENTATION_COMMENTS",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 278,
key: "CLANG_WARN_EMPTY_BODY",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 279,
key: "CLANG_WARN_ENUM_CONVERSION",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 280,
key: "CLANG_WARN_INFINITE_RECURSION",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 281,
key: "CLANG_WARN_INT_CONVERSION",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 282,
key: "CLANG_WARN_NON_LITERAL_NULL_CONVERSION",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 283,
key: "CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 284,
key: "CLANG_WARN_OBJC_LITERAL_CONVERSION",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 285,
key: "CLANG_WARN_OBJC_ROOT_CLASS",
value: "YES_ERROR",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 286,
key: "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 287,
key: "CLANG_WARN_RANGE_LOOP_ANALYSIS",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 288,
key: "CLANG_WARN_STRICT_PROTOTYPES",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 289,
key: "CLANG_WARN_SUSPICIOUS_MOVE",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 290,
key: "CLANG_WARN_UNGUARDED_AVAILABILITY",
value: "YES_AGGRESSIVE",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 291,
key: "CLANG_WARN_UNREACHABLE_CODE",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 292,
key: "CLANG_WARN__DUPLICATE_METHOD_MATCH",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 293,
key: "COPY_PHASE_STRIP",
value: "NO",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 294,
key: "DEBUG_INFORMATION_FORMAT",
value: "\"dwarf-with-dsym\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 295,
key: "ENABLE_NS_ASSERTIONS",
value: "NO",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 296,
key: "ENABLE_STRICT_OBJC_MSGSEND",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 297,
key: "GCC_C_LANGUAGE_STANDARD",
value: "gnu11",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 298,
key: "GCC_NO_COMMON_BLOCKS",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 299,
key: "GCC_WARN_64_TO_32_BIT_CONVERSION",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 300,
key: "GCC_WARN_ABOUT_RETURN_TYPE",
value: "YES_ERROR",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 301,
key: "GCC_WARN_UNDECLARED_SELECTOR",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 302,
key: "GCC_WARN_UNINITIALIZED_AUTOS",
value: "YES_AGGRESSIVE",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 303,
key: "GCC_WARN_UNUSED_FUNCTION",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 304,
key: "GCC_WARN_UNUSED_VARIABLE",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 305,
key: "IPHONEOS_DEPLOYMENT_TARGET",
value: "13.0",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 306,
key: "MTL_ENABLE_DEBUG_INFO",
value: "NO",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 307,
key: "MTL_FAST_MATH",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 308,
key: "PRODUCT_NAME",
value: "\"$(TARGET_NAME)\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 309,
key: "SDKROOT",
value: "iphoneos",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 310,
key: "SWIFT_COMPILATION_MODE",
value: "wholemodule",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 311,
key: "SWIFT_OPTIMIZATION_LEVEL",
value: "\"-O\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 312,
key: "SWIFT_VERSION",
value: "5.0",
},
],
},
"B6AD77E490F315562F75D3D7": XCBuildConfiguration {
build_settings: [
BuildSettings {
identation: "\t\t\t\t",
line_number: 319,
key: "ALWAYS_SEARCH_USER_PATHS",
value: "NO",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 320,
key: "CLANG_ANALYZER_NONNULL",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 321,
key: "CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION",
value: "YES_AGGRESSIVE",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 322,
key: "CLANG_CXX_LANGUAGE_STANDARD",
value: "\"gnu++14\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 323,
key: "CLANG_CXX_LIBRARY",
value: "\"libc++\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 324,
key: "CLANG_ENABLE_MODULES",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 325,
key: "CLANG_ENABLE_OBJC_ARC",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 326,
key: "CLANG_ENABLE_OBJC_WEAK",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 327,
key: "CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 328,
key: "CLANG_WARN_BOOL_CONVERSION",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 329,
key: "CLANG_WARN_COMMA",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 330,
key: "CLANG_WARN_CONSTANT_CONVERSION",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 331,
key: "CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 332,
key: "CLANG_WARN_DIRECT_OBJC_ISA_USAGE",
value: "YES_ERROR",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 333,
key: "CLANG_WARN_DOCUMENTATION_COMMENTS",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 334,
key: "CLANG_WARN_EMPTY_BODY",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 335,
key: "CLANG_WARN_ENUM_CONVERSION",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 336,
key: "CLANG_WARN_INFINITE_RECURSION",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 337,
key: "CLANG_WARN_INT_CONVERSION",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 338,
key: "CLANG_WARN_NON_LITERAL_NULL_CONVERSION",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 339,
key: "CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 340,
key: "CLANG_WARN_OBJC_LITERAL_CONVERSION",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 341,
key: "CLANG_WARN_OBJC_ROOT_CLASS",
value: "YES_ERROR",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 342,
key: "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 343,
key: "CLANG_WARN_RANGE_LOOP_ANALYSIS",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 344,
key: "CLANG_WARN_STRICT_PROTOTYPES",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 345,
key: "CLANG_WARN_SUSPICIOUS_MOVE",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 346,
key: "CLANG_WARN_UNGUARDED_AVAILABILITY",
value: "YES_AGGRESSIVE",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 347,
key: "CLANG_WARN_UNREACHABLE_CODE",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 348,
key: "CLANG_WARN__DUPLICATE_METHOD_MATCH",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 349,
key: "COPY_PHASE_STRIP",
value: "NO",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 350,
key: "DEBUG_INFORMATION_FORMAT",
value: "dwarf",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 351,
key: "ENABLE_STRICT_OBJC_MSGSEND",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 352,
key: "ENABLE_TESTABILITY",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 353,
key: "GCC_C_LANGUAGE_STANDARD",
value: "gnu11",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 354,
key: "GCC_DYNAMIC_NO_PIC",
value: "NO",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 355,
key: "GCC_NO_COMMON_BLOCKS",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 356,
key: "GCC_OPTIMIZATION_LEVEL",
value: "0",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 357,
key: "GCC_PREPROCESSOR_DEFINITIONS",
value: "(\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t);\n",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 361,
key: "GCC_WARN_64_TO_32_BIT_CONVERSION",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 362,
key: "GCC_WARN_ABOUT_RETURN_TYPE",
value: "YES_ERROR",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 363,
key: "GCC_WARN_UNDECLARED_SELECTOR",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 364,
key: "GCC_WARN_UNINITIALIZED_AUTOS",
value: "YES_AGGRESSIVE",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 365,
key: "GCC_WARN_UNUSED_FUNCTION",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 366,
key: "GCC_WARN_UNUSED_VARIABLE",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 367,
key: "IPHONEOS_DEPLOYMENT_TARGET",
value: "13.0",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 368,
key: "MTL_ENABLE_DEBUG_INFO",
value: "INCLUDE_SOURCE",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 369,
key: "MTL_FAST_MATH",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 370,
key: "ONLY_ACTIVE_ARCH",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 371,
key: "PRODUCT_NAME",
value: "\"$(TARGET_NAME)\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 372,
key: "SDKROOT",
value: "iphoneos",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 373,
key: "SWIFT_ACTIVE_COMPILATION_CONDITIONS",
value: "DEBUG",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 374,
key: "SWIFT_OPTIMIZATION_LEVEL",
value: "\"-Onone\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 375,
key: "SWIFT_VERSION",
value: "5.0",
},
],
},
"BF284FE6E7AE0C8DDCCE398B": XCBuildConfiguration {
build_settings: [
BuildSettings {
identation: "\t\t\t\t",
line_number: 382,
key: "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 383,
key: "ARCHS",
value: "(\t\t\t\t\tarm64,\n\t\t\t\t\t\"arm64-sim\",\n\t\t\t\t);\n",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 387,
key: "ASSETCATALOG_COMPILER_APPICON_NAME",
value: "AppIcon",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 388,
key: "CODE_SIGN_ENTITLEMENTS",
value: "api_iOS/api_iOS.entitlements",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 389,
key: "CODE_SIGN_IDENTITY",
value: "\"iPhone Developer\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 390,
key: "DEVELOPMENT_TEAM",
value: "Q93MBH6S2F",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 391,
key: "ENABLE_BITCODE",
value: "NO",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 392,
key: "\"EXCLUDED_ARCHS[sdk=iphoneos*]\"",
value: "\"arm64-sim x86_64\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 393,
key: "\"EXCLUDED_ARCHS[sdk=iphonesimulator*]\"",
value: "arm64",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 394,
key: "FRAMEWORK_SEARCH_PATHS",
value: "(\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"\\\".\\\"\",\n\t\t\t\t);\n",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 398,
key: "INFOPLIST_FILE",
value: "api_iOS/Info.plist",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 399,
key: "LD_RUNPATH_SEARCH_PATHS",
value: "(\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 403,
key: "\"LIBRARY_SEARCH_PATHS[arch=arm64-sim]\"",
value: "\"$(inherited) $(PROJECT_DIR)/Externals/arm64-sim/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 404,
key: "\"LIBRARY_SEARCH_PATHS[arch=arm64]\"",
value: "\"$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 405,
key: "\"LIBRARY_SEARCH_PATHS[arch=x86_64]\"",
value: "\"$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 406,
key: "PRODUCT_BUNDLE_IDENTIFIER",
value: "com.tauri.api",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 407,
key: "PRODUCT_NAME",
value: "\"Tauri API\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 408,
key: "SDKROOT",
value: "iphoneos",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 409,
key: "TARGETED_DEVICE_FAMILY",
value: "\"1,2\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 410,
key: "VALID_ARCHS",
value: "\"arm64 arm64-sim\"",
},
],
},
"DB0E254D0FD84970B57F6410": XCBuildConfiguration {
build_settings: [
BuildSettings {
identation: "\t\t\t\t",
line_number: 417,
key: "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES",
value: "YES",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 418,
key: "ARCHS",
value: "(\t\t\t\t\tarm64,\n\t\t\t\t\t\"arm64-sim\",\n\t\t\t\t);\n",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 422,
key: "ASSETCATALOG_COMPILER_APPICON_NAME",
value: "AppIcon",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 423,
key: "CODE_SIGN_ENTITLEMENTS",
value: "api_iOS/api_iOS.entitlements",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 424,
key: "CODE_SIGN_IDENTITY",
value: "\"iPhone Developer\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 425,
key: "DEVELOPMENT_TEAM",
value: "Q93MBH6S2F",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 426,
key: "ENABLE_BITCODE",
value: "NO",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 427,
key: "\"EXCLUDED_ARCHS[sdk=iphoneos*]\"",
value: "\"arm64-sim x86_64\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 428,
key: "\"EXCLUDED_ARCHS[sdk=iphonesimulator*]\"",
value: "arm64",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 429,
key: "FRAMEWORK_SEARCH_PATHS",
value: "(\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"\\\".\\\"\",\n\t\t\t\t);\n",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 433,
key: "INFOPLIST_FILE",
value: "api_iOS/Info.plist",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 434,
key: "LD_RUNPATH_SEARCH_PATHS",
value: "(\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 438,
key: "\"LIBRARY_SEARCH_PATHS[arch=arm64-sim]\"",
value: "\"$(inherited) $(PROJECT_DIR)/Externals/arm64-sim/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 439,
key: "\"LIBRARY_SEARCH_PATHS[arch=arm64]\"",
value: "\"$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 440,
key: "\"LIBRARY_SEARCH_PATHS[arch=x86_64]\"",
value: "\"$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 441,
key: "PRODUCT_BUNDLE_IDENTIFIER",
value: "com.tauri.api",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 442,
key: "PRODUCT_NAME",
value: "\"Tauri API\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 443,
key: "SDKROOT",
value: "iphoneos",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 444,
key: "TARGETED_DEVICE_FAMILY",
value: "\"1,2\"",
},
BuildSettings {
identation: "\t\t\t\t",
line_number: 445,
key: "VALID_ARCHS",
value: "\"arm64 arm64-sim\"",
},
],
},
},
xc_configuration_list: {
"01CBC40275452376830D79B1": XCConfigurationList {
comment: "/* Build configuration list for PBXNativeTarget \"api_iOS\" */",
build_configurations: [
BuildConfigurationRef {
id: "BF284FE6E7AE0C8DDCCE398B",
comments: "/* debug */",
},
BuildConfigurationRef {
id: "DB0E254D0FD84970B57F6410",
comments: "/* release */",
},
],
},
"8FA67D0F928A09CD639137D1": XCConfigurationList {
comment: "/* Build configuration list for PBXProject \"api\" */",
build_configurations: [
BuildConfigurationRef {
id: "B6AD77E490F315562F75D3D7",
comments: "/* debug */",
},
BuildConfigurationRef {
id: "A83F70B4C02DD0222038C7F1",
comments: "/* release */",
},
],
},
},
}