فهرست منبع

fix(cli): pbxproj parser not expecting underlines in build config IDs (#11168)

Lucas Fernandes Nogueira 10 ماه پیش
والد
کامیت
df24cb9442

+ 6 - 0
.changes/fix-pbxproj-id-parse.md

@@ -0,0 +1,6 @@
+---
+"tauri-cli": patch:bug
+"@tauri-apps/cli": patch:bug
+---
+
+Fixes Xcode pbxproj file parsing not expecting `_` in build configuration IDs.

+ 7 - 3
crates/tauri-cli/src/helpers/pbxproj.rs

@@ -39,7 +39,7 @@ pub fn parse<P: AsRef<Path>>(path: P) -> crate::Result<Pbxproj> {
         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();
+          let id: String = token.chars().take_while(|c| !c.is_whitespace()).collect();
           proj.xc_build_configuration.insert(
             id.clone(),
             XCBuildConfiguration {
@@ -316,8 +316,12 @@ mod tests {
     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");
+    pbxproj.set_build_settings(
+      "DB_0E254D0FD84970B57F6410",
+      "PRODUCT_NAME",
+      "\"Tauri Test\"",
+    );
+    pbxproj.set_build_settings("DB_0E254D0FD84970B57F6410", "UNKNOWN", "9283j49238h");
 
     insta::assert_snapshot!("project-modified.pbxproj", pbxproj.serialize());
   }

+ 5 - 5
crates/tauri-cli/src/mobile/ios/mod.rs

@@ -425,7 +425,7 @@ pub fn synchronize_project_config(
   config: &AppleConfig,
   tauri_config: &ConfigHandle,
   pbxproj: &mut pbxproj::Pbxproj,
-  export_options_list: &mut plist::Dictionary,
+  export_options_plist: &mut plist::Dictionary,
   project_config: &ProjectConfig,
   debug: bool,
 ) -> Result<()> {
@@ -522,7 +522,7 @@ pub fn synchronize_project_config(
 
   if let Some(build_configuration) = build_configuration {
     if let Some(style) = build_configuration.get_build_setting("CODE_SIGN_STYLE") {
-      export_options_list.insert(
+      export_options_plist.insert(
         "signingStyle".to_string(),
         style.value.to_lowercase().into(),
       );
@@ -532,7 +532,7 @@ pub fn synchronize_project_config(
       .get_build_setting("\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\"")
       .or_else(|| build_configuration.get_build_setting("CODE_SIGN_IDENTITY"))
     {
-      export_options_list.insert(
+      export_options_plist.insert(
         "signingCertificate".to_string(),
         identity.value.trim_matches('"').into(),
       );
@@ -542,7 +542,7 @@ pub fn synchronize_project_config(
       .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());
+      export_options_plist.insert("teamID".to_string(), id.value.trim_matches('"').into());
     }
 
     let profile_uuid = project_config
@@ -557,7 +557,7 @@ pub fn synchronize_project_config(
     if let Some(profile_uuid) = profile_uuid {
       let mut provisioning_profiles = plist::Dictionary::new();
       provisioning_profiles.insert(config.app().identifier().to_string(), profile_uuid.into());
-      export_options_list.insert(
+      export_options_plist.insert(
         "provisioningProfiles".to_string(),
         provisioning_profiles.into(),
       );

+ 2 - 2
crates/tauri-cli/tests/fixtures/pbxproj/project.pbxproj

@@ -412,7 +412,7 @@
 			};
 			name = debug;
 		};
-		DB0E254D0FD84970B57F6410 /* release */ = {
+		DB_0E254D0FD84970B57F6410 /* release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
@@ -454,7 +454,7 @@
 			isa = XCConfigurationList;
 			buildConfigurations = (
 				BF284FE6E7AE0C8DDCCE398B /* debug */,
-				DB0E254D0FD84970B57F6410 /* release */,
+				DB_0E254D0FD84970B57F6410 /* release */,
 			);
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = debug;

+ 2 - 2
crates/tauri-cli/tests/fixtures/pbxproj/snapshots/tauri_cli__helpers__pbxproj__tests__project-modified.pbxproj.snap

@@ -416,7 +416,7 @@ expression: pbxproj.serialize()
 			};
 			name = debug;
 		};
-		DB0E254D0FD84970B57F6410 /* release */ = {
+		DB_0E254D0FD84970B57F6410 /* release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
@@ -459,7 +459,7 @@ expression: pbxproj.serialize()
 			isa = XCConfigurationList;
 			buildConfigurations = (
 				BF284FE6E7AE0C8DDCCE398B /* debug */,
-				DB0E254D0FD84970B57F6410 /* release */,
+				DB_0E254D0FD84970B57F6410 /* release */,
 			);
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = debug;

+ 2 - 2
crates/tauri-cli/tests/fixtures/pbxproj/snapshots/tauri_cli__helpers__pbxproj__tests__project.pbxproj.snap

@@ -760,7 +760,7 @@ Pbxproj {
                 },
             ],
         },
-        "DB0E254D0FD84970B57F6410": XCBuildConfiguration {
+        "DB_0E254D0FD84970B57F6410": XCBuildConfiguration {
             build_settings: [
                 BuildSettings {
                     identation: "\t\t\t\t",
@@ -894,7 +894,7 @@ Pbxproj {
                     comments: "/* debug */",
                 },
                 BuildConfigurationRef {
-                    id: "DB0E254D0FD84970B57F6410",
+                    id: "DB_0E254D0FD84970B57F6410",
                     comments: "/* release */",
                 },
             ],