Hide indexer scheme by default

Use xcschememanagement.plist to hide the indexer scheme by default.

PiperOrigin-RevId: 195159420
diff --git a/src/TulsiGenerator/XcodeProjectGenerator.swift b/src/TulsiGenerator/XcodeProjectGenerator.swift
index d82b222..7599634 100644
--- a/src/TulsiGenerator/XcodeProjectGenerator.swift
+++ b/src/TulsiGenerator/XcodeProjectGenerator.swift
@@ -661,6 +661,25 @@
     let xcschemesURL = projectURL.appendingPathComponent("xcshareddata/xcschemes")
     guard createDirectory(xcschemesURL) else { return }
 
+    let userSchemeSubpath = "xcuserdata/\(usernameFetcher()).xcuserdatad/xcschemes"
+    let userSchemesURL = projectURL.appendingPathComponent(userSchemeSubpath)
+    guard createDirectory(userSchemesURL) else { return }
+
+    func updateManagementDictionary(
+      _ dictionary: inout [String: Any],
+      schemeName: String,
+      shared: Bool = true,
+      visible: Bool = true
+    ) {
+      guard var schemeUserState = dictionary["SchemeUserState"] as? [String: Any] else {
+        return
+      }
+      let actualizedName = shared ? "\(schemeName)_^#shared#^_" : schemeName
+      let schemeDict: [String: Any] = ["isShown": visible]
+      schemeUserState[actualizedName] = schemeDict
+      dictionary["SchemeUserState"] = schemeUserState
+    }
+
     func targetForLabel(_ label: BuildLabel) -> PBXTarget? {
       if let pbxTarget = info.project.targetByName[label.targetName!] {
         return pbxTarget
@@ -713,6 +732,10 @@
       }
     }
 
+    var schemeManagementDict = [String: Any]()
+    schemeManagementDict["SchemeUserState"] = [String: Any]()
+    schemeManagementDict["SuppressBuildableAutocreation"] = [String: Any]()
+
     let runTestTargetBuildConfigPrefix = pbxTargetGeneratorType.getRunTestTargetBuildConfigPrefix()
     for entry in info.buildRuleEntries {
       // Generate an XcodeScheme with a test action set up to allow tests to be run without Xcode
@@ -788,6 +811,7 @@
 
       let data = xmlDocument.xmlData(options: XMLNode.Options.nodePrettyPrint)
       try writeDataHandler(url, data)
+      updateManagementDictionary(&schemeManagementDict, schemeName: filename)
     }
 
     func extractTestTargets(_ testSuite: RuleEntry) -> (Set<PBXTarget>, PBXTarget?) {
@@ -864,6 +888,7 @@
 
       let data = xmlDocument.xmlData(options: XMLNode.Options.nodePrettyPrint)
       try writeDataHandler(url, data)
+      updateManagementDictionary(&schemeManagementDict, schemeName: filename, visible: false)
     }
     try installSchemesForIndexerTargets()
 
@@ -897,6 +922,7 @@
 
       let data = xmlDocument.xmlData(options: XMLNode.Options.nodePrettyPrint)
       try writeDataHandler(url, data)
+      updateManagementDictionary(&schemeManagementDict, schemeName: filename)
     }
 
     var testSuiteSchemes = [String: [RuleEntry]]()
@@ -919,6 +945,9 @@
         try installSchemeForTestSuite(suite, named: suiteName)
       }
     }
+
+    let schemeManagementURL = userSchemesURL.appendingPathComponent("xcschememanagement.plist")
+    guard savePlist(schemeManagementDict, url: schemeManagementURL) else { return }
   }
 
   /// Create a file that contains the execution root for the workspace of the generated project.
@@ -1309,22 +1338,7 @@
       let plistName = plistPaths.plistFilename(forRuleEntry: entry)
       let targetURL = URL(string: plistName, relativeTo: targetDirectoryURL)!
 
-      let data: Data
-      do {
-        data = try PropertyListSerialization.data(fromPropertyList: plistTemplate, format: .xml, options: 0)
-      } catch let e {
-        localizedMessageLogger.error("SerializingPlistFailed",
-                                     comment: LocalizedMessageLogger.bugWorthyComment("Failed to serialize a plist template"),
-                                     context: config.projectName,
-                                     values: e.localizedDescription)
-        return
-      }
-
-      guard fileManager.createFile(atPath: targetURL.path, contents: data, attributes: nil) else {
-        localizedMessageLogger.error("WritingPlistFailed",
-                                     comment: LocalizedMessageLogger.bugWorthyComment("Failed to write a plist template"),
-                                     context: config.projectName,
-                                     values: targetURL.path)
+      guard savePlist(plistTemplate, url: targetURL) else {
         return
       }
     }
@@ -1333,6 +1347,30 @@
     localizedMessageLogger.logProfilingEnd(profilingToken)
   }
 
+  private func savePlist(_ plist: Any, url: URL) -> Bool {
+    let data: Data
+    do {
+      data = try PropertyListSerialization.data(fromPropertyList: plist, format: .xml, options: 0)
+    } catch let e {
+      let comment = LocalizedMessageLogger.bugWorthyComment("Failed to serialize a plist")
+      localizedMessageLogger.error("SerializingPlistFailed",
+                                   comment: comment,
+                                   context: config.projectName,
+                                   values: e.localizedDescription)
+      return false
+    }
+
+    guard fileManager.createFile(atPath: url.path, contents: data, attributes: nil) else {
+      let comment = LocalizedMessageLogger.bugWorthyComment("Failed to write a plist")
+      localizedMessageLogger.error("WritingPlistFailed",
+                                   comment: comment,
+                                   context: config.projectName,
+                                   values: url.path)
+      return false
+    }
+    return true
+  }
+
   private func createDirectory(_ resourceDirectoryURL: URL, failSilently: Bool = false) -> Bool {
     do {
       try fileManager.createDirectory(at: resourceDirectoryURL,
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/ComplexSingleProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/ComplexSingleProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..4cb2953
--- /dev/null
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/ComplexSingleProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>Application.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>TodayExtension.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>XCTest.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>_idx_Scheme.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+		</dict>
+	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict/>
+</dict>
+</plist>
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/IosLegacyTestProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/IosLegacyTestProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..920c087
--- /dev/null
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/IosLegacyTestProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>LegacyTests.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>_idx_Scheme.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+		</dict>
+	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict/>
+</dict>
+</plist>
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..26b8105
--- /dev/null
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>MyCommandLineApp.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>MyMacOSApp.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>MyTodayExtension.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>_idx_Scheme.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+		</dict>
+	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict/>
+</dict>
+</plist>
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSTestsProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSTestsProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..9759e05
--- /dev/null
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSTestsProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>MyMacOSApp.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>UITests.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>UnitTests.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>UnitTestsNoHost.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>_idx_Scheme.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+		</dict>
+	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict/>
+</dict>
+</plist>
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleCCProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleCCProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..e43f539
--- /dev/null
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleCCProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>_idx_Scheme.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+		</dict>
+		<key>ccBinary.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict/>
+</dict>
+</plist>
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..8286d52
--- /dev/null
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>Application.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>TargetApplication.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>XCTest.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>_idx_Scheme.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+		</dict>
+	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict/>
+</dict>
+</plist>
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleSkylarkProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleSkylarkProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..84a71dd
--- /dev/null
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleSkylarkProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>SkylarkApplication.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>SkylarkTargetApplication.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>StickerExtension.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>XCTest.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>XCUITest.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>_idx_Scheme.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+		</dict>
+	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict/>
+</dict>
+</plist>
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SwiftProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SwiftProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..36e5e1f
--- /dev/null
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SwiftProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>Application.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>_idx_Scheme.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+		</dict>
+	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict/>
+</dict>
+</plist>
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteExplicitXCTestsProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteExplicitXCTestsProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..39776d9
--- /dev/null
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteExplicitXCTestsProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>LogicTest.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>TestApplication.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>TestSuite-One-XCTest.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>TestSuite-Three-XCTest.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>TestSuite-Two-XCTest.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>_idx_Scheme.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+		</dict>
+		<key>explicit_XCTests_Suite.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict/>
+</dict>
+</plist>
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteLocalTaggedTestsProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteLocalTaggedTestsProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..faf5c47
--- /dev/null
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteLocalTaggedTestsProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>TestApplication.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>TestSuiteXCTest.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>_idx_Scheme.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+		</dict>
+		<key>local_tagged_tests_Suite.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict/>
+</dict>
+</plist>
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteRecursiveTestSuiteProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteRecursiveTestSuiteProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..62acbbe
--- /dev/null
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteRecursiveTestSuiteProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>TestApplication.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>TestSuiteXCTest.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>_idx_Scheme.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+		</dict>
+		<key>recursive_test_suite_Suite.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>tagged_tests_Suite.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>tagged_xctest_1.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>tagged_xctest_2.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict/>
+</dict>
+</plist>
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/WatchProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/WatchProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..61b0f4a
--- /dev/null
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/WatchProject.xcodeproj/xcuserdata/_TEST_USER_.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>Application.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>WatchApplication.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>WatchExtension.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<true/>
+		</dict>
+		<key>_idx_Scheme.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+		</dict>
+	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict/>
+</dict>
+</plist>
diff --git a/src/TulsiGeneratorTests/XcodeProjectGeneratorTests.swift b/src/TulsiGeneratorTests/XcodeProjectGeneratorTests.swift
index efa2e4b..7e3bd34 100644
--- a/src/TulsiGeneratorTests/XcodeProjectGeneratorTests.swift
+++ b/src/TulsiGeneratorTests/XcodeProjectGeneratorTests.swift
@@ -76,6 +76,9 @@
       XCTAssert(writtenFiles.contains("\(xcodeProjectPath)/project.xcworkspace/xcuserdata/USER.xcuserdatad/WorkspaceSettings.xcsettings"))
       XCTAssert(writtenFiles.contains("\(xcodeProjectPath)/xcshareddata/xcschemes/test-path-to-target-target.xcscheme"))
       XCTAssert(writtenFiles.contains("\(xcodeProjectPath)/xcshareddata/xcschemes/test-MainTarget.xcscheme"))
+
+      let xcp = "\(xcodeProjectPath)/xcuserdata/USER.xcuserdatad/xcschemes/xcschememanagement.plist"
+      XCTAssert(mockFileManager.writeOperations.keys.contains(xcp))
     } catch let e {
       XCTFail("Unexpected exception \(e)")
     }
@@ -315,6 +318,9 @@
     let xcschemes = projectURL.appendingPathComponent("xcshareddata/xcschemes")
     mockFileManager.allowedDirectoryCreates.insert(xcschemes.path)
 
+    let userXcschemes = projectURL.appendingPathComponent("xcuserdata/USER.xcuserdatad/xcschemes")
+    mockFileManager.allowedDirectoryCreates.insert(userXcschemes.path)
+
     let scripts = projectURL.appendingPathComponent(".tulsi/Scripts")
     mockFileManager.allowedDirectoryCreates.insert(scripts.path)