Adding DBGShellCommands interactions to Tulsi.

This serves as a replacement for Spotlight in finding debug symbols,
as a primary source with Spotlight as a fallback. In instances when
the Spotlight service cannot be relied upon to find dSYM bundles,
or when Spotlight takes too long to index a new dSYM UUID, we instead
use a SQLite database using the API recommended by Apple to reference
locations to those dSYM bundles by architecture.

Lookups are done by a small C program, for maximum efficiency.

All other interactions with the database are handled by Python
scripts, including managing the schema.

Database is cleaned of references to dSYMs that cannot be found
during project generation.

This feature can be turned off through the Tulsi GUI, in the Shared
Options tab, on a per-Tulsi project basis.

Requires an Xcode.app restart to acknowledge new DBGShellCommands
settings. This goes for all changes to com.apple.DebugSymbols.

https://lldb.llvm.org/symbols.html for more information.

As we now have a means to find dSYMs in addition to Spotlight, the
Spotlight requirement checks have been removed as well.

PiperOrigin-RevId: 188931719
diff --git a/src/Tulsi.xcodeproj/project.pbxproj b/src/Tulsi.xcodeproj/project.pbxproj
index 669d5c7..0e4a7c1 100644
--- a/src/Tulsi.xcodeproj/project.pbxproj
+++ b/src/Tulsi.xcodeproj/project.pbxproj
@@ -142,8 +142,12 @@
 		D33C204F1EC108CC00867450 /* tulsi_logging.py in Resources */ = {isa = PBXBuildFile; fileRef = D33C204E1EC108CC00867450 /* tulsi_logging.py */; };
 		D3F78C681F391E9700AE0571 /* bazel_options.py in Resources */ = {isa = PBXBuildFile; fileRef = D3F78C671F391E9700AE0571 /* bazel_options.py */; };
 		E107EFD7200B135600257E2F /* BuildScriptOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = E107EFD6200B135500257E2F /* BuildScriptOption.swift */; };
+		E11AFAB02052655500C97875 /* bazel_cache_reader in Copy Utilty resources */ = {isa = PBXBuildFile; fileRef = E1D770EA20523E790026802A /* bazel_cache_reader */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
 		E155E20C1FCE47DA002B16BB /* BazelBuildSettingsFeatures.swift in Sources */ = {isa = PBXBuildFile; fileRef = E155E20B1FCE47D9002B16BB /* BazelBuildSettingsFeatures.swift */; };
 		E19C1C571F5886A000D6E38A /* QueuedLogging.swift in Sources */ = {isa = PBXBuildFile; fileRef = E19C1C561F5886A000D6E38A /* QueuedLogging.swift */; };
+		E1C0186D2051B65D000580CC /* clean_symbol_cache.py in Resources */ = {isa = PBXBuildFile; fileRef = E1C018692051B65B000580CC /* clean_symbol_cache.py */; };
+		E1C018702051B65D000580CC /* symbol_cache_schema.py in Resources */ = {isa = PBXBuildFile; fileRef = E1C0186C2051B65C000580CC /* symbol_cache_schema.py */; };
+		E1C018722051B66C000580CC /* update_symbol_cache.py in Resources */ = {isa = PBXBuildFile; fileRef = E1C018712051B66C000580CC /* update_symbol_cache.py */; };
 		E1C0EBDB1F70982300FA2054 /* XcodeGeneratorInvalidPaths.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1C0EBDA1F70982300FA2054 /* XcodeGeneratorInvalidPaths.swift */; };
 		E1D27C2A1F57782D000B9B13 /* SimpleBad.BUILD in Resources */ = {isa = PBXBuildFile; fileRef = E1D27C281F57781A000B9B13 /* SimpleBad.BUILD */; };
 /* End PBXBuildFile section */
@@ -184,6 +188,20 @@
 			remoteGlobalIDString = 3D9926621C29F0A20094E098;
 			remoteInfo = TulsiGenerator;
 		};
+		E11AFAAD205264C200C97875 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = E1D770E520523E780026802A /* bazel_cache_reader.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = E1D770DA20523E770026802A;
+			remoteInfo = bazel_cache_reader;
+		};
+		E1D770E920523E790026802A /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = E1D770E520523E780026802A /* bazel_cache_reader.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = E1D770DB20523E770026802A;
+			remoteInfo = bazel_cache_reader;
+		};
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXCopyFilesBuildPhase section */
@@ -204,6 +222,7 @@
 			dstPath = Utilities;
 			dstSubfolderSpec = 7;
 			files = (
+				E11AFAB02052655500C97875 /* bazel_cache_reader in Copy Utilty resources */,
 				3D648FB31D747B8100A3DBE2 /* post_processor in Copy Utilty resources */,
 			);
 			name = "Copy Utilty resources";
@@ -356,8 +375,12 @@
 		E132B8B51F86FA3400DF7F9A /* tulsi_aspects_paths.bzl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tulsi_aspects_paths.bzl; path = tulsi/tulsi_aspects_paths.bzl; sourceTree = "<group>"; };
 		E155E20B1FCE47D9002B16BB /* BazelBuildSettingsFeatures.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BazelBuildSettingsFeatures.swift; sourceTree = "<group>"; };
 		E19C1C561F5886A000D6E38A /* QueuedLogging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QueuedLogging.swift; sourceTree = "<group>"; };
+		E1C018692051B65B000580CC /* clean_symbol_cache.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = clean_symbol_cache.py; sourceTree = "<group>"; };
+		E1C0186C2051B65C000580CC /* symbol_cache_schema.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = symbol_cache_schema.py; sourceTree = "<group>"; };
+		E1C018712051B66C000580CC /* update_symbol_cache.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = update_symbol_cache.py; sourceTree = "<group>"; };
 		E1C0EBDA1F70982300FA2054 /* XcodeGeneratorInvalidPaths.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XcodeGeneratorInvalidPaths.swift; sourceTree = "<group>"; };
 		E1D27C281F57781A000B9B13 /* SimpleBad.BUILD */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = SimpleBad.BUILD; path = Resources/SimpleBad.BUILD; sourceTree = "<group>"; };
+		E1D770E520523E780026802A /* bazel_cache_reader.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = bazel_cache_reader.xcodeproj; path = tools/bazel_cache_reader/bazel_cache_reader.xcodeproj; sourceTree = "<group>"; };
 		F4469ECE1C5BCA5900BCFAA1 /* TulsiVersion.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = TulsiVersion.xcconfig; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
@@ -533,6 +556,9 @@
 				D33C204E1EC108CC00867450 /* tulsi_logging.py */,
 				D3F78C671F391E9700AE0571 /* bazel_options.py */,
 				3D156AE11C1C8D9C00183439 /* bazel_clean.sh */,
+				E1C018692051B65B000580CC /* clean_symbol_cache.py */,
+				E1C0186C2051B65C000580CC /* symbol_cache_schema.py */,
+				E1C018712051B66C000580CC /* update_symbol_cache.py */,
 				3DFB7C4A1C81F78000376760 /* command_line_splitter.sh */,
 			);
 			path = Scripts;
@@ -613,6 +639,7 @@
 		8B8F558E1BE3ECDC0095AF7F = {
 			isa = PBXGroup;
 			children = (
+				E1D770E520523E780026802A /* bazel_cache_reader.xcodeproj */,
 				3DBA776A1D6CAF5E00BD5B7C /* post_processor.xcodeproj */,
 				8B8F55981BE3ECDC0095AF7F /* Products */,
 				8B8F55991BE3ECDC0095AF7F /* Tulsi */,
@@ -678,6 +705,14 @@
 			path = Tulsi;
 			sourceTree = "<group>";
 		};
+		E1D770E620523E780026802A /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				E1D770EA20523E790026802A /* bazel_cache_reader */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
 		F4469ECD1C5BCA3200BCFAA1 /* XcodeConfig */ = {
 			isa = PBXGroup;
 			children = (
@@ -713,6 +748,7 @@
 			buildRules = (
 			);
 			dependencies = (
+				E11AFAAE205264C200C97875 /* PBXTargetDependency */,
 				3D648FB11D747B7E00A3DBE2 /* PBXTargetDependency */,
 			);
 			name = TulsiGenerator;
@@ -816,6 +852,10 @@
 			projectDirPath = "";
 			projectReferences = (
 				{
+					ProductGroup = E1D770E620523E780026802A /* Products */;
+					ProjectRef = E1D770E520523E780026802A /* bazel_cache_reader.xcodeproj */;
+				},
+				{
 					ProductGroup = 3D256D161D7131B4007A3ED3 /* Products */;
 					ProjectRef = 3DBA776A1D6CAF5E00BD5B7C /* post_processor.xcodeproj */;
 				},
@@ -838,6 +878,13 @@
 			remoteRef = 3D256D191D7131B4007A3ED3 /* PBXContainerItemProxy */;
 			sourceTree = BUILT_PRODUCTS_DIR;
 		};
+		E1D770EA20523E790026802A /* bazel_cache_reader */ = {
+			isa = PBXReferenceProxy;
+			fileType = "compiled.mach-o.executable";
+			path = bazel_cache_reader;
+			remoteRef = E1D770E920523E790026802A /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
 /* End PBXReferenceProxy section */
 
 /* Begin PBXResourcesBuildPhase section */
@@ -846,6 +893,8 @@
 			buildActionMask = 2147483647;
 			files = (
 				2D7A8EB51F67220400392DA3 /* macOSXCTRunner.entitlements in Resources */,
+				E1C018702051B65D000580CC /* symbol_cache_schema.py in Resources */,
+				E1C0186D2051B65D000580CC /* clean_symbol_cache.py in Resources */,
 				2D9DB34A1E5DECA40021EAF4 /* iOSXCTRunner.entitlements in Resources */,
 				3D329D0E1C4831EF00DFBD0F /* bazel_build.py in Resources */,
 				D33C204F1EC108CC00867450 /* tulsi_logging.py in Resources */,
@@ -859,6 +908,7 @@
 				3DAFE8AE1DF1F23D0055AF56 /* StubIOSAppExtensionInfoPlist.plist in Resources */,
 				3DCD08111D779576006ABE5B /* StubWatchOS2AppExtensionInfoPlist.plist in Resources */,
 				3D903A7A1D775AE800B034E9 /* StubWatchOS2InfoPlist.plist in Resources */,
+				E1C018722051B66C000580CC /* update_symbol_cache.py in Resources */,
 				3DCFE5D51C80A64600D7F31B /* WORKSPACE in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -1080,6 +1130,11 @@
 			target = 3D9926621C29F0A20094E098 /* TulsiGenerator */;
 			targetProxy = 3DAEE4691C85EB6100BA1C67 /* PBXContainerItemProxy */;
 		};
+		E11AFAAE205264C200C97875 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = bazel_cache_reader;
+			targetProxy = E11AFAAD205264C200C97875 /* PBXContainerItemProxy */;
+		};
 /* End PBXTargetDependency section */
 
 /* Begin PBXVariantGroup section */
diff --git a/src/Tulsi.xcodeproj/xcshareddata/xcschemes/TulsiApp.xcscheme b/src/Tulsi.xcodeproj/xcshareddata/xcschemes/TulsiApp.xcscheme
index 3d90e02..78bc373 100644
--- a/src/Tulsi.xcodeproj/xcshareddata/xcschemes/TulsiApp.xcscheme
+++ b/src/Tulsi.xcodeproj/xcshareddata/xcschemes/TulsiApp.xcscheme
@@ -26,6 +26,7 @@
       buildConfiguration = "Debug"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      language = ""
       shouldUseLaunchSchemeArgsEnv = "YES"
       codeCoverageEnabled = "YES">
       <Testables>
@@ -56,6 +57,7 @@
       buildConfiguration = "Debug"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      language = ""
       launchStyle = "0"
       useCustomWorkingDirectory = "NO"
       ignoresPersistentStateOnLaunch = "NO"
diff --git a/src/TulsiGenerator/Base.lproj/Localizable.strings b/src/TulsiGenerator/Base.lproj/Localizable.strings
index f1f18d3..b4a2b98 100644
--- a/src/TulsiGenerator/Base.lproj/Localizable.strings
+++ b/src/TulsiGenerator/Base.lproj/Localizable.strings
@@ -44,6 +44,9 @@
 /* Error when parsing a Bazel Build Event for BEP when running Bazel. */
 "BazelParseBuildEventFailed" = "Failed to parse a Bazel Build Event. This may be a Tulsi bug, please report. Additional Context: %1$@";
 
+/* Warning when a failure occurred while cleaning dSYMs in the SQLite store used by the DBGShellCommands script. */
+"CleanCachedDsymsFailed" = "Failed to clean cache of dSYMs, clean script returned %1$@.";
+
 /* Failed to copy an important file resource, the resulting project will most likely be broken. A bug should be reported. */
 "CopyingResourceFailed" = "Failed to copy project resource '%1$@' to '%2$@'. The generated project will probably malfunction, please report. Error: %3$@";
 
@@ -106,3 +109,6 @@
 
 /* Warning shown when generating an Xcode schema for target %1$@ which uses unsupported legacy ios_extension rule */
 "LegacyIOSExtensionNotSupported" = "iOS extension %1$@ is using legacy packaging rules which is not supported. Please migrate to the new rules.";
+
+/* Warning when updating the user's DBGShellCommands script in ~/Library/Application Support/Tulsi failed. */
+"UpdatingDBGShellCommandsFailed" = "Failed to update the DBGShellCommands script used to locate dSYM bundles: received error '%1$@'.";
diff --git a/src/TulsiGenerator/Base.lproj/Options.strings b/src/TulsiGenerator/Base.lproj/Options.strings
index ddaa34d..0c8ae26 100644
--- a/src/TulsiGenerator/Base.lproj/Options.strings
+++ b/src/TulsiGenerator/Base.lproj/Options.strings
@@ -25,6 +25,9 @@
 "UseAspectForTestSuites" = "Expand test_suites via an aspect instead of bazel query.";
 "UseAspectForTestSuites_DESC" = "Requires a Bazel which supports --noexpand_test_suites";
 
+"DisableDBGShellCommandsCaching" = "Disable DBGShellCommands caching of dSYM bundles.";
+"DisableDBGShellCommandsCaching_DESC" = "Explicitly turns off all actions surrounding caching paths for dSYM bundles in a local SQLite database.";
+
 "CommandlineArguments" = "Commandline arguments";
 "EnvironmentVariables" = "Environment variables";
 
diff --git a/src/TulsiGenerator/PBXTargetGenerator.swift b/src/TulsiGenerator/PBXTargetGenerator.swift
index 2b07837..bdf41e5 100644
--- a/src/TulsiGenerator/PBXTargetGenerator.swift
+++ b/src/TulsiGenerator/PBXTargetGenerator.swift
@@ -1479,15 +1479,6 @@
     let dSYMEnabled = entry.attributes[.has_swift_dependency] as? Bool ?? false
     buildSettings["TULSI_MUST_USE_DSYM"] = dSYMEnabled ? "YES" : "NO"
 
-    if ProcessInfo.processInfo.environment["TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK"] == "YES" {
-      // TODO(b/72865565): E2E test infra has Spotlight disabled. Remove when Spotlight is enabled.
-      buildSettings["TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK"] = "YES"
-    } else {
-      // Present an option to bypass the build script's check for Spotlight. Turning off Spotlight
-      // is not recommended as it leads to a severely poor debugging experience.
-      buildSettings["TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK"] = "NO"
-    }
-
     // Disable Xcode's attempts at generating dSYM bundles as it conflicts with the operation of the
     // special test runner build configurations (which have associated sources but don't actually
     // compile anything).
diff --git a/src/TulsiGenerator/Scripts/bazel_build.py b/src/TulsiGenerator/Scripts/bazel_build.py
index a0760af..024cdc9 100755
--- a/src/TulsiGenerator/Scripts/bazel_build.py
+++ b/src/TulsiGenerator/Scripts/bazel_build.py
@@ -40,6 +40,7 @@
 import bazel_options
 from execroot_path import BAZEL_EXECUTION_ROOT
 import tulsi_logging
+from update_symbol_cache import UpdateSymbolCache
 
 
 # List of frameworks that Xcode injects into test host targets that should be
@@ -488,8 +489,6 @@
 
   BUILD_EVENTS_FILE = 'build_events.json'
 
-  SPOTLIGHT_CHECK_ENVVAR = 'TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK'
-
   def __init__(self):
     self.verbose = 0
     self.build_path = None
@@ -505,15 +504,15 @@
       self.xcode_action = 'build'
 
     self.tulsi_version = os.environ.get('TULSI_VERSION', 'UNKNOWN')
-
-    self.build_without_spotlight = os.environ.get(
-        BazelBuildBridge.SPOTLIGHT_CHECK_ENVVAR, 'NO') == 'YES'
-
     self.generate_dsym = (os.environ.get('TULSI_ALL_DSYM', 'NO') == 'YES' or
                           os.environ.get('TULSI_MUST_USE_DSYM', 'NO') == 'YES')
     self.use_debug_prefix_map = os.environ.get('TULSI_DEBUG_PREFIX_MAP',
                                                'NO') == 'YES'
     self.extra_remap_path = os.environ.get('TULSI_EXTRA_REMAP_PATH', '')
+    update_dsym_cache = os.environ.get('TULSI_UPDATE_DSYM_CACHE',
+                                       'NO') == 'YES'
+    if update_dsym_cache:
+      self.update_symbol_cache = UpdateSymbolCache()
 
     # Target architecture.  Must be defined for correct setting of
     # the --config flag
@@ -601,11 +600,6 @@
       sys.stderr.write('Xcode action is %s, ignoring.' % self.xcode_action)
       return 0
 
-    if not self.build_without_spotlight:
-      spotlight_status = self._CheckSpotlightStatus()
-      if spotlight_status:
-        return spotlight_status
-
     parser = _OptionsParser(self.sdk_version,
                             self.platform_name,
                             self.arch,
@@ -746,19 +740,6 @@
         _PrintXcodeWarning('Updating .lldbinit action failed with code %d' %
                            exit_code)
 
-    if dsym_paths:
-      # TODO(b/71705491): Find a means where LLDB and associated tooling can
-      # locate the dSYM bundle, accounting for Spotlight latency.
-      #
-      # On some builds, DebugSymbols.framework will be unable to find the
-      # dSYM bundle, which can be resolved through rebuilding... but that is
-      # a horrible solution that we can improve on.
-      #
-      # mdimport alone does not work, even though we have confirmed the
-      # indexing of dSYMs with mdfind on the com_apple_xcode_dsym_uuids
-      # attribute. Might rely on DBGShellCommands instead.
-      time.sleep(2)
-
     return 0
 
   def _BuildBazelCommand(self, options):
@@ -1535,17 +1516,18 @@
 
     return dsym_binaries
 
-  def _UUIDsForBinaryAtPath(self, source_binary_path):
-    """Returns exit code of dwarfdump along with every UUID found for a binary.
+  def _UUIDInfoForBinary(self, source_binary_path):
+    """Returns exit code of dwarfdump along with every UUID + arch found.
 
     Args:
       source_binary_path: absolute path to the binary file.
 
     Returns:
-      (Int, str[]): a tuple containing the return code of dwarfdump as its
-                    first element, and a list of strings representing each UUID
-                    found for each given binary slice found within the binary,
-                    if no error has occcured.
+      (Int, str[(str, str)]): a tuple containing the return code of dwarfdump
+                              as its first element, and a list of strings
+                              representing each UUID found for each given
+                              binary slice found within the binary with its
+                              given architecture, if no error has occcured.
     """
 
     returncode, output = self._RunSubprocess([
@@ -1567,22 +1549,27 @@
     for dwarfdump_output in output.split('\n'):
       if not dwarfdump_output:
         continue
-      found_output = re.match(r'^(?:UUID: )([^ ]+)', dwarfdump_output)
+      found_output = re.match(r'^(?:UUID: )([^ ]+) \(([^)]+)', dwarfdump_output)
       if not found_output:
         continue
       found_uuid = found_output.group(1)
-      if found_uuid:
-        uuids_found.append(found_uuid)
+      if not found_uuid:
+        continue
+      found_arch = found_output.group(2)
+      if not found_arch:
+        continue
+      uuids_found.append((found_uuid, found_arch))
 
     return (0, uuids_found)
 
-  def _CreateUUIDPlist(self, dsym_bundle_path, uuid, source_maps):
+  def _CreateUUIDPlist(self, dsym_bundle_path, uuid, arch, source_maps):
     """Creates a UUID.plist in a dSYM bundle to redirect sources.
 
     Args:
       dsym_bundle_path: absolute path to the dSYM bundle.
       uuid: string representing the UUID of the binary slice with paths to
             remap in the dSYM bundle.
+      arch: the architecture of the binary slice.
       source_maps: a set of tuples representing all absolute paths to source
                    files compiled by Bazel as strings ($0) associated with the
                    paths to Xcode-visible sources used for the purposes of
@@ -1625,6 +1612,16 @@
                        (remap_plist, e))
       return False
 
+    # Update the dSYM symbol cache with a reference to this dSYM bundle.
+    if self.update_symbol_cache:
+      err_msg = self.update_symbol_cache.UpdateUUID(uuid,
+                                                    dsym_bundle_path,
+                                                    arch)
+      if err_msg:
+        _PrintXcodeWarning('Attempted to save (uuid, dsym_bundle_path, arch) '
+                           'to DBGShellCommands\' dSYM cache, but got error '
+                           '\"%s\".' % err_msg)
+
     return True
 
   def _PlistdSYMPaths(self, dsym_bundle_path):
@@ -1651,17 +1648,18 @@
     # Find the binary slice UUIDs with dwarfdump from each binary.
     for source_binary_path in dsym_binaries:
 
-      returncode, uuids_found = self._UUIDsForBinaryAtPath(source_binary_path)
+      returncode, uuid_info_found = self._UUIDInfoForBinary(source_binary_path)
       if returncode:
         return returncode
 
       # Create a plist per UUID, each indicating a binary slice to remap paths.
-      for uuid in uuids_found:
-        if not self._CreateUUIDPlist(dsym_bundle_path, uuid, source_maps):
+      for uuid, arch in uuid_info_found:
+        if not self._CreateUUIDPlist(dsym_bundle_path, uuid, arch, source_maps):
           return 405
 
     # Update spotlight index with this updated dSYM bundle in case the binary's
     # UUID changed.
+    # TODO(b/71705491): Remove if DBGShellCommands does not cause any issues.
     self._RunSubprocess(['mdimport', dsym_bundle_path])
 
     return 0
@@ -1800,53 +1798,6 @@
           'Linking Tulsi Workspace to %s failed.' % tulsi_workspace)
       return -1
 
-  def _PrintSpotlightDisabledMessaging(self):
-    """Prints errors to the console indicating that Spotlight is required."""
-    spotlight_required_msg = ('Spotlight is needed to find debugging info '
-                              'for Bazel-built sources.')
-    spotlight_enable_msg = ('Please enable Spotlight with `sudo mdutil -i on /`'
-                            ' in the Terminal.')
-    spotlight_check_disable_msg = ('If you need to disable this check and '
-                                   'proceed with a compromised debugging '
-                                   'experience set %s to YES.' %
-                                   BazelBuildBridge.SPOTLIGHT_CHECK_ENVVAR)
-    _PrintXcodeError(spotlight_required_msg)
-    _PrintXcodeError(spotlight_enable_msg)
-    _PrintXcodeWarning(spotlight_check_disable_msg)
-
-  def _CheckSpotlightStatus(self):
-    """Check if Spotlight has been enabled on root, error if it hasn't been.
-
-    Returns:
-      Int: 0 if Spotlight reports that indexing is enabled on the root dir.
-           -1 if Spotlight indexing was not found to be enabled on the root
-           dir. The return code if the mdutil query on the root dir failed
-           to execute properly.
-    """
-    sys.stdout.write('Checking Spotlight status on the startup disk.\n')
-    sys.stdout.flush()
-    returncode, output = self._RunSubprocess([
-        'mdutil',
-        '-s',
-        '/'
-    ])
-    output_single_line = output.replace('\n', '').replace('\t', ' ')
-    if returncode != 0:
-      _PrintXcodeError('Could not verify status of Spotlight on the startup '
-                       'disk.')
-      _PrintXcodeError('mdutil exited with %s: "%s".' % (returncode,
-                                                         output_single_line))
-      self._PrintSpotlightDisabledMessaging()
-      return returncode
-    # Attempt to match on "Indexing enabled." and any possible variants.
-    if 'enabled' not in output:
-      _PrintXcodeError('Spotlight has been turned off on the startup disk.')
-      _PrintXcodeError('Status returned from mdutil was "%s".' %
-                       output_single_line)
-      self._PrintSpotlightDisabledMessaging()
-      return -1
-    return 0
-
   @staticmethod
   def _SplitPathComponents(path):
     """Splits the given path into an array of all of its components."""
diff --git a/src/TulsiGenerator/Scripts/clean_symbol_cache.py b/src/TulsiGenerator/Scripts/clean_symbol_cache.py
new file mode 100755
index 0000000..69ab9b2
--- /dev/null
+++ b/src/TulsiGenerator/Scripts/clean_symbol_cache.py
@@ -0,0 +1,57 @@
+#!/usr/bin/python
+# Copyright 2018 The Tulsi Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Clean invalid entries from the dSYM symbol cache."""
+
+import os
+import sys
+from symbol_cache_schema import SQLITE_SYMBOL_CACHE_PATH
+from symbol_cache_schema import SymbolCacheSchema
+
+
+class CleanSymbolCache(object):
+  """Cleans all orphaned entries in the DBGScriptCommands database."""
+
+  def CleanMissingDSYMs(self):
+    """Removes all entries where dsym_path cannot be found."""
+    connection = self.cache_schema.connection
+    cursor = connection.cursor()
+    cursor.execute('SELECT DISTINCT dsym_path FROM symbol_cache;')
+    dsym_path_rows = cursor.fetchall()
+
+    dsym_paths_to_delete = []
+
+    for dsym_path_row in dsym_path_rows:
+      dsym_path = dsym_path_row[0]
+
+      # dSYM bundles are directories, not files.
+      if not os.path.isdir(dsym_path):
+        dsym_paths_to_delete.append(dsym_path)
+
+    if dsym_paths_to_delete:
+      paths_to_delete = ['dsym_path = "%s"' % x for x in dsym_paths_to_delete]
+      delete_query_where = ' OR '.join(paths_to_delete)
+      cursor.execute('DELETE FROM symbol_cache '
+                     'WHERE %s' % delete_query_where)
+
+    connection.commit()
+
+  def __init__(self, db_path=SQLITE_SYMBOL_CACHE_PATH):
+    self.cache_schema = SymbolCacheSchema(db_path)
+
+
+if __name__ == '__main__':
+  CleanSymbolCache().CleanMissingDSYMs()
+  sys.exit(0)
diff --git a/src/TulsiGenerator/Scripts/clean_symbol_cache_tests.py b/src/TulsiGenerator/Scripts/clean_symbol_cache_tests.py
new file mode 100755
index 0000000..dfd0efd
--- /dev/null
+++ b/src/TulsiGenerator/Scripts/clean_symbol_cache_tests.py
@@ -0,0 +1,71 @@
+#!/usr/bin/python
+# Copyright 2018 The Tulsi Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Test cleaning invalid entries from the dSYM cache."""
+
+import unittest
+from clean_symbol_cache import CleanSymbolCache
+import sqlite3
+
+
+SHARED_MEMORY_DB = 'file::memory:?cache=shared'
+
+
+class TestCleaningSymbolCache(unittest.TestCase):
+
+  def testEntriesPreserved(self):
+    uuid = 'E56A19D3-CA4C-3760-8855-26C98A9E1865'
+    dsym_path = '/usr/bin'  # Using a directory in place of dSYM.
+    arch = 'x86_64'
+
+    clean_symbol_cache = CleanSymbolCache(SHARED_MEMORY_DB)
+    connection = sqlite3.connect(SHARED_MEMORY_DB)
+    cursor = connection.cursor()
+    cursor.execute('INSERT INTO symbol_cache '
+                   'VALUES("%s", "%s", "%s");' %
+                   (uuid, dsym_path, arch))
+    connection.commit()
+
+    clean_symbol_cache.CleanMissingDSYMs()
+
+    cursor.execute('SELECT uuid, dsym_path, architecture FROM symbol_cache;')
+    rows_inserted = cursor.fetchall()
+    self.assertEqual(len(rows_inserted), 1)
+    self.assertEqual(rows_inserted[0][0], uuid)
+    self.assertEqual(rows_inserted[0][1], dsym_path)
+    self.assertEqual(rows_inserted[0][2], arch)
+
+  def testCleaningNonexistantEntries(self):
+    uuid = 'E56A19D3-CA4C-3760-8855-26C98A9E1812'
+    dsym_path = '/usr/bin/trogdor'
+    arch = 'x86_64'
+
+    clean_symbol_cache = CleanSymbolCache(SHARED_MEMORY_DB)
+    connection = sqlite3.connect(SHARED_MEMORY_DB)
+    cursor = connection.cursor()
+    cursor.execute('INSERT INTO symbol_cache '
+                   'VALUES("%s", "%s", "%s");' %
+                   (uuid, dsym_path, arch))
+    connection.commit()
+
+    clean_symbol_cache.CleanMissingDSYMs()
+
+    cursor.execute('SELECT uuid, dsym_path, architecture FROM symbol_cache;')
+    rows_found = cursor.fetchall()
+    self.assertFalse(rows_found)
+
+
+if __name__ == '__main__':
+  unittest.main()
diff --git a/src/TulsiGenerator/Scripts/symbol_cache_schema.py b/src/TulsiGenerator/Scripts/symbol_cache_schema.py
new file mode 100755
index 0000000..4637e8d
--- /dev/null
+++ b/src/TulsiGenerator/Scripts/symbol_cache_schema.py
@@ -0,0 +1,119 @@
+#!/usr/bin/python
+# Copyright 2018 The Tulsi Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Manages our dSYM SQLite database schema."""
+
+import errno
+import os
+import sqlite3
+
+
+SQLITE_SYMBOL_CACHE_PATH = os.path.expanduser('~/Library/Application Support/'
+                                              'Tulsi/Scripts/symbol_cache.db')
+
+
+class SymbolCacheSchema(object):
+  """Defines and updates the SQLite database used for DBGShellCommands."""
+
+  current_version = 1
+
+  def UpdateSchemaV1(self, connection):
+    """Updates the database to the v1 schema.
+
+    Args:
+      connection: Connection to the database that needs to be updated.
+
+    Returns:
+      True if the database reported that it was updated to v1.
+      False if not.
+    """
+    # Create the table (schema version 1).
+    cursor = connection.cursor()
+    cursor.execute('CREATE TABLE symbol_cache('
+                   'uuid TEXT PRIMARY KEY, '
+                   'dsym_path TEXT, '
+                   'architecture TEXT'
+                   ');')
+    # NOTE: symbol_cache (uuid) already has an index, as the PRIMARY KEY.
+    # Create a unique index to keep dSYM paths and architectures unique.
+    cursor.execute('CREATE UNIQUE INDEX idx_dsym_arch '
+                   'ON '
+                   'symbol_cache('
+                   'dsym_path, '
+                   'architecture'
+                   ');')
+    cursor.execute('PRAGMA user_version = 1;')
+
+    # Verify the updated user_version, as confirmation of the update.
+    cursor.execute('PRAGMA user_version;')
+    return cursor.fetchone()[0] == 1
+
+  def VerifySchema(self, connection):
+    """Updates the database to the latest schema.
+
+    Args:
+      connection: Connection to the database that needs to be updated.
+
+    Returns:
+      True if the database reported that it was updated to the latest schema.
+      False if not.
+    """
+    cursor = connection.cursor()
+    cursor.execute('PRAGMA user_version;')  # Default is 0
+    db_version = cursor.fetchone()[0]
+
+    # Update to the latest schema in the given database, if necessary.
+    if db_version < self.current_version:
+      # Future schema updates will build on this.
+      if self.UpdateSchemaV1(connection):
+        db_version = 1
+
+    # Return if the database has been updated to the latest schema.
+    return db_version == self.current_version
+
+  def InitDB(self, db_path):
+    """Initializes a new connection to a SQLite database.
+
+    Args:
+      db_path: String representing a reference to the SQLite database.
+
+    Returns:
+      A sqlite3.connection object representing an active connection to
+      the database referenced by db_path.
+    """
+    # If this is not an in-memory SQLite database...
+    if ':memory:' not in db_path:
+      # Create all subdirs before we create a new db or connect to existing.
+      if not os.path.isfile(db_path):
+        try:
+          os.makedirs(os.path.dirname(db_path))
+        except OSError as e:
+          if e.errno != errno.EEXIST:
+            raise
+
+    connection = sqlite3.connect(db_path)
+
+    # Update to the latest schema and return the db connection.
+    if self.VerifySchema(connection):
+      return connection
+    else:
+      return None
+
+  def __init__(self, db_path=SQLITE_SYMBOL_CACHE_PATH):
+    self.connection = self.InitDB(db_path)
+
+  def __del__(self):
+    if self.connection:
+      self.connection.close()
diff --git a/src/TulsiGenerator/Scripts/symbol_cache_schema_tests.py b/src/TulsiGenerator/Scripts/symbol_cache_schema_tests.py
new file mode 100755
index 0000000..0cd7c19
--- /dev/null
+++ b/src/TulsiGenerator/Scripts/symbol_cache_schema_tests.py
@@ -0,0 +1,49 @@
+#!/usr/bin/python
+# Copyright 2018 The Tulsi Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Test the schema generated for the shared database."""
+
+import unittest
+from symbol_cache_schema import SymbolCacheSchema
+
+
+SHARED_MEMORY_DB = 'file::memory:?cache=shared'
+
+
+class TestSymbolCacheSchema(unittest.TestCase):
+
+  def testSchemaColumns(self):
+    uuid = 'E56A19D3-CA4C-3760-8855-26C98A9E1865'
+    dsym_path = '/usr/bin'  # Using a directory in place of dSYM.
+    arch = 'x86_64'
+
+    symbol_cache = SymbolCacheSchema(SHARED_MEMORY_DB)
+    connection = symbol_cache.connection
+    cursor = connection.cursor()
+    cursor.execute('INSERT INTO symbol_cache '
+                   'VALUES("%s", "%s", "%s");' %
+                   (uuid, dsym_path, arch))
+    connection.commit()
+
+    cursor.execute('SELECT uuid, dsym_path, architecture FROM symbol_cache;')
+    rows_inserted = cursor.fetchall()
+    self.assertEqual(len(rows_inserted), 1)
+    self.assertEqual(rows_inserted[0][0], uuid)
+    self.assertEqual(rows_inserted[0][1], dsym_path)
+    self.assertEqual(rows_inserted[0][2], arch)
+
+
+if __name__ == '__main__':
+  unittest.main()
diff --git a/src/TulsiGenerator/Scripts/update_symbol_cache.py b/src/TulsiGenerator/Scripts/update_symbol_cache.py
new file mode 100644
index 0000000..575cf59
--- /dev/null
+++ b/src/TulsiGenerator/Scripts/update_symbol_cache.py
@@ -0,0 +1,54 @@
+#!/usr/bin/python
+# Copyright 2018 The Tulsi Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Update the Tulsi dSYM symbol cache."""
+
+import sqlite3
+from symbol_cache_schema import SQLITE_SYMBOL_CACHE_PATH
+from symbol_cache_schema import SymbolCacheSchema
+
+
+class UpdateSymbolCache(object):
+  """Provides a common interface to update a UUID referencing a dSYM."""
+
+  def UpdateUUID(self, uuid, dsym_path, arch):
+    """Updates a given UUID entry in the database.
+
+    Args:
+      uuid: A UUID representing a binary slice in the dSYM bundle.
+      dsym_path: An absolute path to the dSYM bundle.
+      arch: The binary slice's architecture.
+
+    Returns:
+      None: If no error occurred in inserting the new set of values.
+      String: If a sqlite3.error was raised upon attempting to store new
+              values into the dSYM cache.
+    """
+    con = self.cache_schema.connection
+    cur = con.cursor()
+    # Relies on the UNIQUE constraint between dsym_path + architecture to
+    # update the UUID if dsym_path and arch match an existing pair, or
+    # create a new row if this combination of dsym_path and arch is unique.
+    try:
+      cur.execute('INSERT OR REPLACE INTO symbol_cache '
+                  '(uuid, dsym_path, architecture) '
+                  'VALUES("%s", "%s", "%s");' % (uuid, dsym_path, arch))
+      con.commit()
+    except sqlite3.Error as e:
+      return e.message
+    return None
+
+  def __init__(self, db_path=SQLITE_SYMBOL_CACHE_PATH):
+    self.cache_schema = SymbolCacheSchema(db_path)
diff --git a/src/TulsiGenerator/Scripts/update_symbol_cache_tests.py b/src/TulsiGenerator/Scripts/update_symbol_cache_tests.py
new file mode 100755
index 0000000..ef0954f
--- /dev/null
+++ b/src/TulsiGenerator/Scripts/update_symbol_cache_tests.py
@@ -0,0 +1,91 @@
+#!/usr/bin/python
+# Copyright 2018 The Tulsi Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Test updating entries in the dSYM cache."""
+
+import unittest
+import sqlite3
+from update_symbol_cache import UpdateSymbolCache
+
+
+SHARED_MEMORY_DB = 'file::memory:?cache=shared'
+
+
+class TestUpdatingSymbolCache(unittest.TestCase):
+
+  def testUpdatingTwoDifferentUUIDs(self):
+    uuid = '706D191F-BFB6-35EE-9817-ED494F68ED76'
+    dsym_path = '/usr/bin'  # Using a directory in place of dSYM.
+    arch = 'i386'
+
+    uuid2 = 'E56A19D3-CA4C-3760-8855-26C98A9E1865'
+    dsym_path2 = '/usr/bin'  # Using the same directory (like fat binary)
+    arch2 = 'x86_64'
+
+    update_symbol_cache = UpdateSymbolCache(SHARED_MEMORY_DB)
+    err_msg = update_symbol_cache.UpdateUUID(uuid, dsym_path, arch)
+    self.assertFalse(err_msg)
+    err_msg = update_symbol_cache.UpdateUUID(uuid2, dsym_path2, arch2)
+    self.assertFalse(err_msg)
+
+    connection = sqlite3.connect(SHARED_MEMORY_DB)
+    cursor = connection.cursor()
+    cursor.execute('SELECT uuid, dsym_path, architecture '
+                   'FROM symbol_cache '
+                   'ORDER BY uuid;')
+    rows_inserted = cursor.fetchall()
+    self.assertEqual(len(rows_inserted), 2)
+    self.assertEqual(rows_inserted[0][0], uuid)
+    self.assertEqual(rows_inserted[0][1], dsym_path)
+    self.assertEqual(rows_inserted[0][2], arch)
+    self.assertEqual(rows_inserted[1][0], uuid2)
+    self.assertEqual(rows_inserted[1][1], dsym_path2)
+    self.assertEqual(rows_inserted[1][2], arch2)
+
+  def testUpdatingWithChangedUUIDs(self):
+    uuid = 'E56A19D3-CA4C-3760-8855-26C98A9E1865'
+    dsym_path = '/usr/bin'  # Using a directory in place of dSYM.
+    arch = 'x86_64'
+
+    update_symbol_cache = UpdateSymbolCache(SHARED_MEMORY_DB)
+    err_msg = update_symbol_cache.UpdateUUID(uuid, dsym_path, arch)
+    self.assertFalse(err_msg)
+
+    connection = sqlite3.connect(SHARED_MEMORY_DB)
+    cursor = connection.cursor()
+    cursor.execute('SELECT uuid, dsym_path, architecture FROM symbol_cache;')
+    rows_inserted = cursor.fetchall()
+    self.assertEqual(len(rows_inserted), 1)
+    self.assertEqual(rows_inserted[0][0], uuid)
+    self.assertEqual(rows_inserted[0][1], dsym_path)
+    self.assertEqual(rows_inserted[0][2], arch)
+
+    uuid2 = '706D191F-BFB6-35EE-9817-ED494F68ED76'
+
+    err_msg = update_symbol_cache.UpdateUUID(uuid2, dsym_path, arch)
+    self.assertFalse(err_msg)
+
+    connection = sqlite3.connect(SHARED_MEMORY_DB)
+    cursor = connection.cursor()
+    cursor.execute('SELECT uuid, dsym_path, architecture FROM symbol_cache;')
+    rows_inserted = cursor.fetchall()
+    self.assertEqual(len(rows_inserted), 1)
+    self.assertEqual(rows_inserted[0][0], uuid2)
+    self.assertEqual(rows_inserted[0][1], dsym_path)
+    self.assertEqual(rows_inserted[0][2], arch)
+
+
+if __name__ == '__main__':
+  unittest.main()
diff --git a/src/TulsiGenerator/TulsiOptionSet.swift b/src/TulsiGenerator/TulsiOptionSet.swift
index 613a940..696ed28 100644
--- a/src/TulsiGenerator/TulsiOptionSet.swift
+++ b/src/TulsiGenerator/TulsiOptionSet.swift
@@ -44,7 +44,10 @@
       IncludeBuildSources,
 
       // Configures test_suite targets based using bazel aspects instead of bazel query.
-      UseAspectForTestSuites
+      UseAspectForTestSuites,
+
+      // Explicitly turns off all actions around caching paths for dSYM in a local SQLite database.
+      DisableDBGShellCommandsCaching
 
 
   // Options for build invocations.
@@ -272,6 +275,7 @@
     addBoolOption(.ALWAYS_SEARCH_USER_PATHS, .BuildSetting, false)
     addBoolOption(.BazelContinueBuildingAfterError, .Generic, false)
     addBoolOption(.UseAspectForTestSuites, .Generic, true)
+    addBoolOption(.DisableDBGShellCommandsCaching, .Generic, false)
     addStringOption(.BazelBuildOptionsDebug, [.TargetSpecializable, .SupportsInheritKeyword])
     addStringOption(.BazelBuildOptionsRelease, [.TargetSpecializable, .SupportsInheritKeyword])
     addStringOption(.BazelBuildStartupOptionsDebug, [.TargetSpecializable, .SupportsInheritKeyword])
diff --git a/src/TulsiGenerator/TulsiXcodeProjectGenerator.swift b/src/TulsiGenerator/TulsiXcodeProjectGenerator.swift
index fd67f96..9b9a1d3 100644
--- a/src/TulsiGenerator/TulsiXcodeProjectGenerator.swift
+++ b/src/TulsiGenerator/TulsiXcodeProjectGenerator.swift
@@ -51,7 +51,9 @@
         cleanScript: bundle.url(forResource: "bazel_clean", withExtension: "sh")!,
         extraBuildScripts: [bundle.url(forResource: "tulsi_logging", withExtension: "py")!,
                             bundle.url(forResource: "bazel_options", withExtension: "py")!,
-                            bundle.url(forResource: "bazel_build_events", withExtension: "py")!],
+                            bundle.url(forResource: "bazel_build_events", withExtension: "py")!,
+                            bundle.url(forResource: "symbol_cache_schema", withExtension: "py")!,
+                            bundle.url(forResource: "update_symbol_cache", withExtension: "py")!],
         postProcessor: bundle.url(forResource: "post_processor",
                                              withExtension: "",
                                              subdirectory: "Utilities")!,
diff --git a/src/TulsiGenerator/XcodeProjectGenerator.swift b/src/TulsiGenerator/XcodeProjectGenerator.swift
index 70b95fc..48e67fe 100644
--- a/src/TulsiGenerator/XcodeProjectGenerator.swift
+++ b/src/TulsiGenerator/XcodeProjectGenerator.swift
@@ -69,6 +69,8 @@
   static let ProjectResourcesDirectorySubpath = "\(TulsiArtifactDirectory)/Resources"
   private static let BuildScript = "bazel_build.py"
   private static let CleanScript = "bazel_clean.sh"
+  private static let ShellCommandsUtil = "bazel_cache_reader"
+  private static let ShellCommandsCleanScript = "clean_symbol_cache"
   private static let WorkspaceFile = "WORKSPACE"
   private static let PostProcessorUtil = "post_processor"
   private static let IOSUIRunnerEntitlements = "iOSXCTRunner.entitlements"
@@ -78,6 +80,7 @@
   private static let StubWatchOS2AppExInfoPlistFilename = "StubWatchOS2AppExInfoPlist.plist"
   private static let CachedExecutionRootFilename = "execroot_path.py"
   private static let DefaultSwiftVersion = "4"
+  private static let SupportScriptsPath = "Library/Application Support/Tulsi/Scripts/"
 
   /// Rules which should not be generated at the top level.
   private static let LibraryRulesForTopLevelWarning =
@@ -116,6 +119,11 @@
 
   var cachedDefaultSwiftVersion: String?
 
+  /// Computed property to determine if DBGShellCommands is actively caching dSYM for this project.
+  var disableDBGShellCommandsCaching: Bool {
+    return config.options[.DisableDBGShellCommandsCaching].commonValueAsBool ?? true
+  }
+
   init(workspaceRootURL: URL,
        config: TulsiGeneratorConfig,
        localizedMessageLogger: LocalizedMessageLogger,
@@ -503,6 +511,12 @@
         buildSettings[featureFlag] = "YES"
       }
 
+      if (self.disableDBGShellCommandsCaching) {
+        buildSettings["TULSI_UPDATE_DSYM_CACHE"] = "NO"
+      } else {
+        buildSettings["TULSI_UPDATE_DSYM_CACHE"] = "YES"
+      }
+
       for buildScriptOption in buildScriptOptions {
         buildSettings[buildScriptOption.identifier.rawValue] = buildScriptOption.arguments
       }
@@ -523,6 +537,21 @@
     profileAction("patching_external_repository_references") {
       referencePatcher.patchExternalRepositoryReferences(xcodeProject)
     }
+    profileAction("updating_dbgshellcommands") {
+      do {
+        try updateShellCommands()
+      } catch {
+        self.localizedMessageLogger.warning("UpdatingDBGShellCommandsFailed",
+                                            comment: LocalizedMessageLogger.bugWorthyComment("Failed to update the script to find cached dSYM bundles via DBGShellCommands."),
+                                            context: self.config.projectName,
+                                            values: "\(error)")
+      }
+    }
+    if (!self.disableDBGShellCommandsCaching) {
+      profileAction("cleaning_cached_dsym_paths") {
+        cleanCachedDsymPaths()
+      }
+    }
     return GeneratedProjectInfo(project: xcodeProject,
                                 buildRuleEntries: targetRules,
                                 testSuiteRuleEntries: testSuiteRules,
@@ -871,6 +900,201 @@
     }
   }
 
+  /// Copy the bazel_cache_reader to a subfolder in the user's Library, return the absolute path.
+  private func installShellCommands(atURL supportScriptsAbsoluteURL: URL) throws -> String {
+
+    // Create all intermediate directories if they aren't present.
+    var isDir = ObjCBool(false)
+    if !fileManager.fileExists(atPath: supportScriptsAbsoluteURL.path, isDirectory: &isDir) {
+      try fileManager.createDirectory(atPath: supportScriptsAbsoluteURL.path,
+                                      withIntermediateDirectories: true,
+                                      attributes: nil)
+    }
+
+    // Find bazel_cache_reader in Tulsi.app's Utilities folder.
+    let bundle = Bundle(for: type(of: self))
+    let symbolCacheSourceURL = bundle.url(forResource: XcodeProjectGenerator.ShellCommandsUtil,
+                                          withExtension: "",
+                                          subdirectory: "Utilities")!
+
+    // Copy bazel_cache_reader to ~/Library/Application Support/Tulsi/Scripts
+    installFiles([(symbolCacheSourceURL, XcodeProjectGenerator.ShellCommandsUtil)],
+                 toDirectory: supportScriptsAbsoluteURL)
+
+    // Return the absolute path to ~/Library/Application Support/Tulsi/Scripts/bazel_cache_reader.
+    let shellCommandsURL =
+        supportScriptsAbsoluteURL.appendingPathComponent(XcodeProjectGenerator.ShellCommandsUtil)
+
+    return shellCommandsURL.path
+  }
+
+  /// Update the global user defaults to reference bazel_cache_reader
+  private func updateGlobalUserDefaultsWithShellCommands(shellCommandsPath: String) {
+
+    // Check that bazel_cache_reader exists at the given path. If not, do nothing.
+    var isDir = ObjCBool(false)
+    guard fileManager.fileExists(atPath: shellCommandsPath, isDirectory: &isDir) else {
+      return
+    }
+
+    // Find if there is an existing entry for com.apple.DebugSymbols.
+    let dbgDefaults = UserDefaults.standard.persistentDomain(forName: "com.apple.DebugSymbols")
+
+    guard var currentDBGDefaults = dbgDefaults else {
+      // If no com.apple.DebugSymbols ever existed, create a new dictionary with our script for
+      // DBGShellCommands, and set DBGSpotlightPaths to an empty array to continue using Spotlight
+      // as a fallback for dSYM searches via LLDB and Instruments.
+      UserDefaults.standard.setPersistentDomain(["DBGShellCommands": [shellCommandsPath],
+                                                 "DBGSpotlightPaths": []],
+                                                forName: "com.apple.DebugSymbols")
+      return
+    }
+
+    // If there is one...
+    var newShellCommands : [String] = []
+
+    if let currentShellCommands = currentDBGDefaults["DBGShellCommands"] as? [String] {
+      // Check if shellCommandsPath is already in DBGShellCommands's array of Strings.
+      guard !currentShellCommands.contains(shellCommandsPath) else {
+        // Do nothing if it is.
+        return
+      }
+      // Copy all the current shell commands to the new DBGShellCommands array.
+      newShellCommands = currentShellCommands
+
+    } else if let currentShellCommand = currentDBGDefaults["DBGShellCommands"] as? String {
+      // Check that the single path at DBGShellCommands is not the same as shellCommandsPath.
+      if currentShellCommand != shellCommandsPath {
+        // Add it to our new DBGShellCommands array in progress if it's not.
+        newShellCommands.append(currentShellCommand)
+      }
+    }
+    // Add shellCommandsPath to the new DBGShellCommands array.
+    newShellCommands.append(shellCommandsPath)
+
+    // Replace DBGShellCommands in the existing com.apple.DebugSymbols defaults.
+    currentDBGDefaults["DBGShellCommands"] = newShellCommands
+    UserDefaults.standard.setPersistentDomain(currentDBGDefaults, forName: "com.apple.DebugSymbols")
+  }
+
+  /// Remove the bazel_cache_reader from a subfolder in ~/Library and in global user defaults.
+  private func removeShellCommands(atURL shellCommandsURL: URL) throws -> String? {
+
+    // If a file exists at ~/Library/Application Support/Tulsi/Scripts/bazel_cache_reader...
+    var isDir = ObjCBool(false)
+    guard fileManager.fileExists(atPath: shellCommandsURL.path, isDirectory: &isDir) else {
+      // Exit early if it doesn't.
+      return nil
+    }
+
+    // ...otherwise, remove it.
+    try fileManager.removeItem(at: shellCommandsURL)
+
+    // Return the path to the bazel_cache_reader after removal.
+    return shellCommandsURL.path
+  }
+
+  /// Update the global user defaults to reference bazel_cache_reader
+  private func removeUnusedShellCommandsFromGlobalUserDefaults(shellCommandsPath : String) {
+
+    // Check that bazel_cache_reader does not exist at the given path. If it does, do nothing.
+    var isDir = ObjCBool(false)
+    guard !fileManager.fileExists(atPath: shellCommandsPath, isDirectory: &isDir) else {
+      return
+    }
+
+    // Update DBGShellCommands such that the path to bazel_cache_reader isn't there anymore.
+    let dbgDefaults = UserDefaults.standard.persistentDomain(forName: "com.apple.DebugSymbols")
+
+    guard var currentDBGDefaults = dbgDefaults else {
+      return
+    }
+    if var shellCommands = currentDBGDefaults["DBGShellCommands"] as? [String] {
+
+      // Check if shellCommandsPath is already in DBGShellCommands's array of Strings.
+      guard let pathFound = shellCommands.index(of: shellCommandsPath) else {
+        return
+      }
+
+      // Remove it if it was.
+      shellCommands.remove(at: pathFound)
+
+      // Update with the modified com.apple.DebugSymbols global defaults.
+      currentDBGDefaults["DBGShellCommands"] = shellCommands
+
+    } else if let shellCommand = currentDBGDefaults["DBGShellCommands"] as? String {
+
+      // Cover the single value case, which (3/13) would only apply if the user manually set it.
+      if shellCommand == shellCommandsPath {
+        currentDBGDefaults.removeValue(forKey: "DBGShellCommands")
+      } else {
+        return
+      }
+
+    } else {
+      return
+    }
+
+    // Update com.apple.DebugSymbols if we need to update DBGShellCommands.
+    UserDefaults.standard.setPersistentDomain(currentDBGDefaults,
+                                              forName: "com.apple.DebugSymbols")
+  }
+
+  /// Install the latest bazel_cache_reader or remove it, as requested by config options.
+  private func updateShellCommands() throws {
+
+    // Construct a URL to ~/Library/Application Support/Tulsi/Scripts.
+    let supportScriptsAbsoluteURL = fileManager.homeDirectoryForCurrentUser.appendingPathComponent(
+      XcodeProjectGenerator.SupportScriptsPath, isDirectory: true)
+
+    // If the config disabled DBGShellCommands caching...
+    if (self.disableDBGShellCommandsCaching) {
+
+      // Create a URL to ~/Library/Application Support/Tulsi/Scripts/bazel_cache_reader.
+      let shellCommandsURL =
+        supportScriptsAbsoluteURL.appendingPathComponent(XcodeProjectGenerator.ShellCommandsUtil)
+
+      // Attempt to remove the app at that path.
+      if let shellCommandsAppPath = try removeShellCommands(atURL: shellCommandsURL) {
+
+        // If the delete was successful, remove its reference from global user defaults.
+        removeUnusedShellCommandsFromGlobalUserDefaults(shellCommandsPath: shellCommandsAppPath)
+      }
+    } else {
+
+      // If DBGShellCommands caching is enabled, install the latest version of the app to
+      // ~/Library/Application Support/Tulsi/Scripts/
+      let shellCommandsAppPath = try installShellCommands(atURL: supportScriptsAbsoluteURL)
+
+      // Add a reference to it in global user defaults.
+      updateGlobalUserDefaultsWithShellCommands(shellCommandsPath: shellCommandsAppPath)
+    }
+  }
+
+  private func cleanCachedDsymPaths() {
+    // Execute the script to clean up missing dSYM bundles asynchronously.
+    let bundle = Bundle(for: type(of: self))
+    let cleanSymbolsSourceURL = bundle.url(forResource: XcodeProjectGenerator.ShellCommandsCleanScript, withExtension: "py")!
+
+    let process = ProcessRunner.createProcess(cleanSymbolsSourceURL.path,
+                                              arguments: [String]()) {
+      completionInfo in
+      if let stderr = NSString(data: completionInfo.stderr,
+                               encoding: String.Encoding.utf8.rawValue) {
+        guard !stderr.trimmingCharacters(in: .whitespaces).isEmpty else {
+          return
+        }
+        Thread.doOnMainQueue {
+          self.localizedMessageLogger.warning("CleanCachedDsymsFailed",
+                                              comment: LocalizedMessageLogger.bugWorthyComment("Failed to clean cached references to existing dSYM bundles."),
+                                              context: self.config.projectName,
+                                              values: stderr)
+        }
+      }
+    }
+    process.launch()
+  }
+
   private func installTulsiScripts(_ projectURL: URL) {
 
     let scriptDirectoryURL = projectURL.appendingPathComponent(XcodeProjectGenerator.ScriptDirectorySubpath,
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/ComplexSingleProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/ComplexSingleProject.xcodeproj/project.pbxproj
index f213281..a025841 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/ComplexSingleProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/ComplexSingleProject.xcodeproj/project.pbxproj
@@ -505,7 +505,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE4755839DDBAE2300000000 /* Build configuration list for PBXNativeTarget "TodayExtension" */;
 			buildPhases = (
-				84B42271E388CBE100000000 /* ShellScript */,
+				84B42271EDFA8BDF00000000 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -556,7 +556,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE475583F843F89400000000 /* Build configuration list for PBXNativeTarget "Application" */;
 			buildPhases = (
-				84B4227142194F0B00000000 /* ShellScript */,
+				84B422719191909A00000000 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -623,7 +623,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE475583B2A6125600000000 /* Build configuration list for PBXNativeTarget "XCTest" */;
 			buildPhases = (
-				84B422714611B8BC00000000 /* ShellScript */,
+				84B4227112F47D1700000000 /* ShellScript */,
 				605793E20000000000000000 /* Sources */,
 			);
 			buildRules = (
@@ -691,7 +691,7 @@
 /* End PBXProject section */
 
 /* Begin PBXShellScriptBuildPhase section */
-		84B4227142194F0B00000000 /* ShellScript */ = {
+		84B4227112F47D1700000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -702,10 +702,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_complex:Application --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_complex:XCTest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B422714611B8BC00000000 /* ShellScript */ = {
+		84B422719191909A00000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -716,10 +716,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_complex:XCTest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_complex:Application --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B42271E388CBE100000000 /* ShellScript */ = {
+		84B42271EDFA8BDF00000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -730,7 +730,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_complex:TodayExtension --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_complex:TodayExtension --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
 /* End PBXShellScriptBuildPhase section */
@@ -857,7 +857,6 @@
 				SDKROOT = iphoneos;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Application.app/Application";
 				TULSI_BUILD_PATH = tulsi_e2e_complex;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -876,7 +875,6 @@
 				PRODUCT_NAME = Application;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_complex;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = Debug;
@@ -910,6 +908,7 @@
 				SDKROOT = iphoneos;
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = ComplexSingleProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -928,7 +927,6 @@
 				PRODUCT_NAME = TodayExtension;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_complex;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = Debug;
@@ -1023,7 +1021,6 @@
 				SDKROOT = iphoneos;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Application.app/Application";
 				TULSI_BUILD_PATH = tulsi_e2e_complex;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -1042,7 +1039,6 @@
 				PRODUCT_NAME = Application;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_complex;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Release;
@@ -1077,6 +1073,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = ComplexSingleProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -1095,7 +1092,6 @@
 				PRODUCT_NAME = TodayExtension;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_complex;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Release;
@@ -1197,7 +1193,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Application.app/Application";
 				TULSI_BUILD_PATH = tulsi_e2e_complex;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -1224,7 +1219,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_complex;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = __TulsiTestRunner_Debug;
@@ -1263,6 +1257,7 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = ComplexSingleProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -1289,7 +1284,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_complex;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = __TulsiTestRunner_Debug;
@@ -1317,7 +1311,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Application.app/Application";
 				TULSI_BUILD_PATH = tulsi_e2e_complex;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -1344,7 +1337,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_complex;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Release;
@@ -1384,6 +1376,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = ComplexSingleProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -1410,7 +1403,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_complex;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Release;
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/IosLegacyTestProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/IosLegacyTestProject.xcodeproj/project.pbxproj
index 98ab588..66e3792 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/IosLegacyTestProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/IosLegacyTestProject.xcodeproj/project.pbxproj
@@ -103,7 +103,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE4755838B7B6C8800000000 /* Build configuration list for PBXNativeTarget "LegacyTests" */;
 			buildPhases = (
-				84B42271043F818E00000000 /* ShellScript */,
+				84B42271A6BA3E3D00000000 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -141,7 +141,7 @@
 /* End PBXProject section */
 
 /* Begin PBXShellScriptBuildPhase section */
-		84B42271043F818E00000000 /* ShellScript */ = {
+		84B42271A6BA3E3D00000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -152,7 +152,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_ios_legacy_test:LegacyTests --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_ios_legacy_test:LegacyTests --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
 /* End PBXShellScriptBuildPhase section */
@@ -205,6 +205,7 @@
 				SDKROOT = iphoneos;
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = IosLegacyTestProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -223,7 +224,6 @@
 				PRODUCT_NAME = LegacyTests;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_ios_legacy_test;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = Debug;
@@ -269,6 +269,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = IosLegacyTestProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -287,7 +288,6 @@
 				PRODUCT_NAME = LegacyTests;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_ios_legacy_test;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Release;
@@ -337,6 +337,7 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = IosLegacyTestProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -363,7 +364,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_ios_legacy_test;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = __TulsiTestRunner_Debug;
@@ -403,6 +403,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = IosLegacyTestProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -429,7 +430,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_ios_legacy_test;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Release;
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSProject.xcodeproj/project.pbxproj
index 73c1369..fcc973f 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSProject.xcodeproj/project.pbxproj
@@ -162,7 +162,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE4755832C9B8E5500000000 /* Build configuration list for PBXNativeTarget "MyCommandLineApp" */;
 			buildPhases = (
-				84B42271082EC71600000000 /* ShellScript */,
+				84B422711507A0A200000000 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -178,7 +178,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE4755839935C7EB00000000 /* Build configuration list for PBXNativeTarget "MyTodayExtension" */;
 			buildPhases = (
-				84B42271082EC71600000001 /* ShellScript */,
+				84B422711507A0A200000001 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -194,7 +194,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE47558336864DFB00000000 /* Build configuration list for PBXNativeTarget "MyMacOSApp" */;
 			buildPhases = (
-				84B422714611B8BC00000000 /* ShellScript */,
+				84B4227112F47D1700000000 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -250,7 +250,7 @@
 /* End PBXProject section */
 
 /* Begin PBXShellScriptBuildPhase section */
-		84B42271082EC71600000000 /* ShellScript */ = {
+		84B4227112F47D1700000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -261,10 +261,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_mac:MyCommandLineApp --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_mac:MyMacOSApp --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B42271082EC71600000001 /* ShellScript */ = {
+		84B422711507A0A200000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -275,10 +275,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_mac:MyTodayExtension --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_mac:MyCommandLineApp --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B422714611B8BC00000000 /* ShellScript */ = {
+		84B422711507A0A200000001 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -289,7 +289,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_mac:MyMacOSApp --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_mac:MyTodayExtension --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
 /* End PBXShellScriptBuildPhase section */
@@ -345,6 +345,7 @@
 				SDKROOT = macosx;
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = MacOSProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -363,7 +364,6 @@
 				PRODUCT_NAME = MyCommandLineApp;
 				SDKROOT = macosx;
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = Debug;
@@ -381,7 +381,6 @@
 				PRODUCT_NAME = MyMacOSApp;
 				SDKROOT = macosx;
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = Debug;
@@ -399,7 +398,6 @@
 				PRODUCT_NAME = MyTodayExtension;
 				SDKROOT = macosx;
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = Debug;
@@ -445,6 +443,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = MacOSProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -463,7 +462,6 @@
 				PRODUCT_NAME = MyCommandLineApp;
 				SDKROOT = macosx;
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Release;
@@ -481,7 +479,6 @@
 				PRODUCT_NAME = MyMacOSApp;
 				SDKROOT = macosx;
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Release;
@@ -499,7 +496,6 @@
 				PRODUCT_NAME = MyTodayExtension;
 				SDKROOT = macosx;
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Release;
@@ -549,6 +545,7 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = MacOSProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -575,7 +572,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = __TulsiTestRunner_Debug;
@@ -601,7 +597,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = __TulsiTestRunner_Debug;
@@ -627,7 +622,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = __TulsiTestRunner_Debug;
@@ -667,6 +661,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = MacOSProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -693,7 +688,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Release;
@@ -719,7 +713,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Release;
@@ -745,7 +738,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Release;
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSTestsProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSTestsProject.xcodeproj/project.pbxproj
index 854e39a..5db90bd 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSTestsProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSTestsProject.xcodeproj/project.pbxproj
@@ -189,7 +189,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE47558302B841D300000000 /* Build configuration list for PBXNativeTarget "UnitTests" */;
 			buildPhases = (
-				84B422715243D50F00000000 /* ShellScript */,
+				84B422711BCD09D600000000 /* ShellScript */,
 				605793E20000000000000000 /* Sources */,
 			);
 			buildRules = (
@@ -207,7 +207,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE4755836E46667200000000 /* Build configuration list for PBXNativeTarget "UnitTestsNoHost" */;
 			buildPhases = (
-				84B4227142194F0B00000000 /* ShellScript */,
+				84B422719191909A00000000 /* ShellScript */,
 				605793E20000000000000002 /* Sources */,
 			);
 			buildRules = (
@@ -240,7 +240,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE475583737127CF00000000 /* Build configuration list for PBXNativeTarget "UITests" */;
 			buildPhases = (
-				84B42271E742770D00000000 /* ShellScript */,
+				84B42271C1E6048E00000000 /* ShellScript */,
 				605793E20000000000000001 /* Sources */,
 			);
 			buildRules = (
@@ -274,7 +274,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE47558336864DFB00000000 /* Build configuration list for PBXNativeTarget "MyMacOSApp" */;
 			buildPhases = (
-				84B422714611B8BC00000000 /* ShellScript */,
+				84B4227112F47D1700000000 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -324,7 +324,7 @@
 /* End PBXProject section */
 
 /* Begin PBXShellScriptBuildPhase section */
-		84B4227142194F0B00000000 /* ShellScript */ = {
+		84B4227112F47D1700000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -335,10 +335,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_mac:UnitTestsNoHost --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_mac:MyMacOSApp --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B422714611B8BC00000000 /* ShellScript */ = {
+		84B422711BCD09D600000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -349,10 +349,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_mac:MyMacOSApp --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_mac:UnitTests --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B422715243D50F00000000 /* ShellScript */ = {
+		84B422719191909A00000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -363,10 +363,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_mac:UnitTests --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_mac:UnitTestsNoHost --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B42271E742770D00000000 /* ShellScript */ = {
+		84B42271C1E6048E00000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -377,7 +377,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_mac:UITests --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_mac:UITests --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
 /* End PBXShellScriptBuildPhase section */
@@ -457,7 +457,6 @@
 				SDKROOT = macosx;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MyMacOSApp.app/Contents/MacOS/MyMacOSApp";
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -476,7 +475,6 @@
 				PRODUCT_NAME = MyMacOSApp;
 				SDKROOT = macosx;
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = Debug;
@@ -496,7 +494,6 @@
 				SDKROOT = macosx;
 				TEST_TARGET_NAME = MyMacOSApp;
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -531,6 +528,7 @@
 				SDKROOT = macosx;
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = MacOSTestsProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -550,7 +548,6 @@
 				PRODUCT_NAME = UnitTestsNoHost;
 				SDKROOT = macosx;
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -594,7 +591,6 @@
 				SDKROOT = macosx;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MyMacOSApp.app/Contents/MacOS/MyMacOSApp";
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -613,7 +609,6 @@
 				PRODUCT_NAME = MyMacOSApp;
 				SDKROOT = macosx;
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Release;
@@ -633,7 +628,6 @@
 				SDKROOT = macosx;
 				TEST_TARGET_NAME = MyMacOSApp;
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -669,6 +663,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = MacOSTestsProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -688,7 +683,6 @@
 				PRODUCT_NAME = UnitTestsNoHost;
 				SDKROOT = macosx;
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -739,7 +733,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MyMacOSApp.app/Contents/MacOS/MyMacOSApp";
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -766,7 +759,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = __TulsiTestRunner_Debug;
@@ -793,7 +785,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_TARGET_NAME = MyMacOSApp;
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -833,6 +824,7 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = MacOSTestsProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -859,7 +851,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -888,7 +879,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MyMacOSApp.app/Contents/MacOS/MyMacOSApp";
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -915,7 +905,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Release;
@@ -942,7 +931,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_TARGET_NAME = MyMacOSApp;
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -983,6 +971,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = MacOSTestsProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -1009,7 +998,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_mac;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleCCProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleCCProject.xcodeproj/project.pbxproj
index 93d756c..6a944f1 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleCCProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleCCProject.xcodeproj/project.pbxproj
@@ -145,7 +145,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE475583130F2B4800000000 /* Build configuration list for PBXNativeTarget "ccBinary" */;
 			buildPhases = (
-				84B42271AD42FF0300000000 /* ShellScript */,
+				84B42271BE3E215900000000 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -183,7 +183,7 @@
 /* End PBXProject section */
 
 /* Begin PBXShellScriptBuildPhase section */
-		84B42271AD42FF0300000000 /* ShellScript */ = {
+		84B42271BE3E215900000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -194,7 +194,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_ccsimple:ccBinary --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_ccsimple:ccBinary --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
 /* End PBXShellScriptBuildPhase section */
@@ -249,6 +249,7 @@
 				SDKROOT = iphoneos;
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = SimpleCCProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -277,7 +278,6 @@
 				PRODUCT_NAME = ccBinary;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_ccsimple;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = Debug;
@@ -312,6 +312,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = SimpleCCProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -340,7 +341,6 @@
 				PRODUCT_NAME = ccBinary;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_ccsimple;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Release;
@@ -379,6 +379,7 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = SimpleCCProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -404,7 +405,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_ccsimple;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = __TulsiTestRunner_Debug;
@@ -444,6 +444,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = SimpleCCProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -469,7 +470,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_ccsimple;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Release;
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleProject.xcodeproj/project.pbxproj
index f71db5e..cecab45 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleProject.xcodeproj/project.pbxproj
@@ -296,7 +296,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE475583978C206500000000 /* Build configuration list for PBXNativeTarget "TargetApplication" */;
 			buildPhases = (
-				84B422716CCCB08600000000 /* ShellScript */,
+				84B42271826D930E00000000 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -329,7 +329,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE475583F843F89400000000 /* Build configuration list for PBXNativeTarget "Application" */;
 			buildPhases = (
-				84B422713698E07C00000000 /* ShellScript */,
+				84B42271C9411DCB00000000 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -378,7 +378,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE475583B2A6125600000000 /* Build configuration list for PBXNativeTarget "XCTest" */;
 			buildPhases = (
-				84B42271FF8D61DF00000000 /* ShellScript */,
+				84B42271CC70386D00000000 /* ShellScript */,
 				605793E20000000000000000 /* Sources */,
 			);
 			buildRules = (
@@ -427,7 +427,7 @@
 /* End PBXProject section */
 
 /* Begin PBXShellScriptBuildPhase section */
-		84B422713698E07C00000000 /* ShellScript */ = {
+		84B42271826D930E00000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -438,10 +438,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_simple:Application --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_simple:TargetApplication --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B422716CCCB08600000000 /* ShellScript */ = {
+		84B42271C9411DCB00000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -452,10 +452,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_simple:TargetApplication --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_simple:Application --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B42271FF8D61DF00000000 /* ShellScript */ = {
+		84B42271CC70386D00000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -466,7 +466,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_simple:XCTest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_simple:XCTest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
 /* End PBXShellScriptBuildPhase section */
@@ -543,7 +543,6 @@
 				SDKROOT = iphoneos;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Application.app/Application";
 				TULSI_BUILD_PATH = tulsi_e2e_simple;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -562,7 +561,6 @@
 				PRODUCT_NAME = Application;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_simple;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = Debug;
@@ -596,6 +594,7 @@
 				SDKROOT = iphoneos;
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = SimpleProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -614,7 +613,6 @@
 				PRODUCT_NAME = TargetApplication;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_simple;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = Debug;
@@ -672,7 +670,6 @@
 				SDKROOT = iphoneos;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Application.app/Application";
 				TULSI_BUILD_PATH = tulsi_e2e_simple;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -691,7 +688,6 @@
 				PRODUCT_NAME = Application;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_simple;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Release;
@@ -726,6 +722,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = SimpleProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -744,7 +741,6 @@
 				PRODUCT_NAME = TargetApplication;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_simple;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Release;
@@ -809,7 +805,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Application.app/Application";
 				TULSI_BUILD_PATH = tulsi_e2e_simple;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -836,7 +831,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_simple;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = __TulsiTestRunner_Debug;
@@ -875,6 +869,7 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = SimpleProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -901,7 +896,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_simple;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = __TulsiTestRunner_Debug;
@@ -929,7 +923,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Application.app/Application";
 				TULSI_BUILD_PATH = tulsi_e2e_simple;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -956,7 +949,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_simple;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Release;
@@ -996,6 +988,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = SimpleProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -1022,7 +1015,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_simple;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Release;
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleSkylarkProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleSkylarkProject.xcodeproj/project.pbxproj
index 6cd3dec..d20de63 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleSkylarkProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleSkylarkProject.xcodeproj/project.pbxproj
@@ -419,7 +419,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE475583903428F900000000 /* Build configuration list for PBXNativeTarget "StickerExtension" */;
 			buildPhases = (
-				84B42271ABB9A2FC00000000 /* ShellScript */,
+				84B4227188CD951200000000 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -435,7 +435,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE4755837696EE3600000000 /* Build configuration list for PBXNativeTarget "XCUITest" */;
 			buildPhases = (
-				84B42271A35C025600000000 /* ShellScript */,
+				84B42271CEE7712000000000 /* ShellScript */,
 				605793E20000000000000000 /* Sources */,
 			);
 			buildRules = (
@@ -453,7 +453,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE475583218595F600000000 /* Build configuration list for PBXNativeTarget "SkylarkApplication" */;
 			buildPhases = (
-				84B4227168EB510E00000000 /* ShellScript */,
+				84B42271CC32BF6800000000 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -469,7 +469,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE475583B2A6125600000000 /* Build configuration list for PBXNativeTarget "XCTest" */;
 			buildPhases = (
-				84B42271D017AD0300000000 /* ShellScript */,
+				84B422715611829000000000 /* ShellScript */,
 				84B42271B548D02D00000000 /* ShellScript */,
 				605793E20000000000000001 /* Sources */,
 			);
@@ -488,7 +488,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE4755835CC0E52B00000000 /* Build configuration list for PBXNativeTarget "SkylarkTargetApplication" */;
 			buildPhases = (
-				84B42271381C4A4300000000 /* ShellScript */,
+				84B422717B92420A00000000 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -542,7 +542,7 @@
 /* End PBXProject section */
 
 /* Begin PBXShellScriptBuildPhase section */
-		84B42271381C4A4300000000 /* ShellScript */ = {
+		84B422715611829000000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -553,10 +553,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_simple_skylark:SkylarkTargetApplication --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_simple_skylark:XCTest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B4227168EB510E00000000 /* ShellScript */ = {
+		84B422717B92420A00000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -567,10 +567,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_simple_skylark:SkylarkApplication --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_simple_skylark:SkylarkTargetApplication --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B42271A35C025600000000 /* ShellScript */ = {
+		84B4227188CD951200000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -581,21 +581,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_simple_skylark:XCUITest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
-			showEnvVarsInLog = 1;
-		};
-		84B42271ABB9A2FC00000000 /* ShellScript */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 0;
-			files = (
-			);
-			inputPaths = (
-			);
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_simple_skylark:StickerExtension --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_simple_skylark:StickerExtension --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
 		84B42271B548D02D00000000 /* ShellScript */ = {
@@ -612,7 +598,7 @@
 			shellScript = "# Script to generate specific Swift files Xcode expects when running tests.\nset -eu\nARCH_ARRAY=($ARCHS)\nSUFFIXES=(swiftdoc swiftmodule)\nfor ARCH in \"${ARCH_ARRAY[@]}\"\ndo\n  touch \"$OBJECT_FILE_DIR_normal/$ARCH/$SWIFT_OBJC_INTERFACE_HEADER_NAME\"\n  for SUFFIX in \"${SUFFIXES[@]}\"\n  do\n    touch \"$OBJECT_FILE_DIR_normal/$ARCH/$PRODUCT_MODULE_NAME.$SUFFIX\"\n  done\ndone\n";
 			showEnvVarsInLog = 1;
 		};
-		84B42271D017AD0300000000 /* ShellScript */ = {
+		84B42271CC32BF6800000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -623,7 +609,21 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_simple_skylark:XCTest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_simple_skylark:SkylarkApplication --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
+			showEnvVarsInLog = 1;
+		};
+		84B42271CEE7712000000000 /* ShellScript */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 0;
+			files = (
+			);
+			inputPaths = (
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/bash;
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_simple_skylark:XCUITest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 --keep_going -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
 /* End PBXShellScriptBuildPhase section */
@@ -725,7 +725,6 @@
 				SDKROOT = iphoneos;
 				TEST_TARGET_NAME = SkylarkApplication;
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -744,7 +743,6 @@
 				PRODUCT_NAME = SkylarkApp;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = Debug;
@@ -766,7 +764,6 @@
 				SWIFT_INCLUDE_PATHS = "$(inherited) $(TULSI_BWRS)/_tulsi-includes/x/x/tulsi_e2e_simple_skylark/XCTestCodeSwift/_objs";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SkylarkApplication.app/SkylarkApplication";
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -799,9 +796,10 @@
 				ONLY_ACTIVE_ARCH = YES;
 				PYTHONIOENCODING = utf8;
 				SDKROOT = iphoneos;
-				SWIFT_VERSION = 4.0;
+				SWIFT_VERSION = 4.1;
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = SimpleSkylarkProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -820,7 +818,6 @@
 				PRODUCT_NAME = SkylarkTargetApplication;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = Debug;
@@ -838,7 +835,6 @@
 				PRODUCT_NAME = StickerExtension;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = Debug;
@@ -918,7 +914,6 @@
 				SDKROOT = iphoneos;
 				TEST_TARGET_NAME = SkylarkApplication;
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -937,7 +932,6 @@
 				PRODUCT_NAME = SkylarkApp;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Release;
@@ -959,7 +953,6 @@
 				SWIFT_INCLUDE_PATHS = "$(inherited) $(TULSI_BWRS)/_tulsi-includes/x/x/tulsi_e2e_simple_skylark/XCTestCodeSwift/_objs";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SkylarkApplication.app/SkylarkApplication";
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -992,10 +985,11 @@
 				ONLY_ACTIVE_ARCH = YES;
 				PYTHONIOENCODING = utf8;
 				SDKROOT = iphoneos;
-				SWIFT_VERSION = 4.0;
+				SWIFT_VERSION = 4.1;
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = SimpleSkylarkProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -1014,7 +1008,6 @@
 				PRODUCT_NAME = SkylarkTargetApplication;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Release;
@@ -1032,7 +1025,6 @@
 				PRODUCT_NAME = StickerExtension;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Release;
@@ -1119,7 +1111,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_TARGET_NAME = SkylarkApplication;
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -1146,7 +1137,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = __TulsiTestRunner_Debug;
@@ -1175,7 +1165,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SkylarkApplication.app/SkylarkApplication";
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -1213,9 +1202,10 @@
 				SDKROOT = iphoneos;
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
-				SWIFT_VERSION = 4.0;
+				SWIFT_VERSION = 4.1;
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = SimpleSkylarkProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -1242,7 +1232,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = __TulsiTestRunner_Debug;
@@ -1268,7 +1257,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = __TulsiTestRunner_Debug;
@@ -1295,7 +1283,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_TARGET_NAME = SkylarkApplication;
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -1322,7 +1309,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Release;
@@ -1351,7 +1337,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SkylarkApplication.app/SkylarkApplication";
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -1389,10 +1374,11 @@
 				SDKROOT = iphoneos;
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
-				SWIFT_VERSION = 4.0;
+				SWIFT_VERSION = 4.1;
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = SimpleSkylarkProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -1419,7 +1405,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Release;
@@ -1445,7 +1430,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_simple_skylark;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Release;
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SwiftProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SwiftProject.xcodeproj/project.pbxproj
index 3629c02..dbf519a 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SwiftProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SwiftProject.xcodeproj/project.pbxproj
@@ -198,7 +198,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE475583F843F89400000000 /* Build configuration list for PBXNativeTarget "Application" */;
 			buildPhases = (
-				84B42271AD42FF0300000000 /* ShellScript */,
+				84B42271BE3E215900000000 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -270,7 +270,7 @@
 /* End PBXProject section */
 
 /* Begin PBXShellScriptBuildPhase section */
-		84B42271AD42FF0300000000 /* ShellScript */ = {
+		84B42271BE3E215900000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -281,7 +281,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_swift:Application --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_swift:Application --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
 /* End PBXShellScriptBuildPhase section */
@@ -354,6 +354,7 @@
 				SWIFT_VERSION = 4;
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = SwiftProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -372,7 +373,6 @@
 				PRODUCT_NAME = Application;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_swift;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Debug;
@@ -446,6 +446,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = SwiftProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -464,7 +465,6 @@
 				PRODUCT_NAME = Application;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_swift;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Release;
@@ -542,6 +542,7 @@
 				SWIFT_VERSION = 4;
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = SwiftProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -568,7 +569,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_swift;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Debug;
@@ -609,6 +609,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = SwiftProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -635,7 +636,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_swift;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Release;
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteExplicitXCTestsProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteExplicitXCTestsProject.xcodeproj/project.pbxproj
index b5a6fed..5eaf706 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteExplicitXCTestsProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteExplicitXCTestsProject.xcodeproj/project.pbxproj
@@ -221,7 +221,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE47558391D6432200000000 /* Build configuration list for PBXNativeTarget "TestSuite-One-XCTest" */;
 			buildPhases = (
-				84B422713AB3170E00000000 /* ShellScript */,
+				84B42271F62EA48B00000000 /* ShellScript */,
 				605793E20000000000000000 /* Sources */,
 			);
 			buildRules = (
@@ -239,7 +239,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE4755834E80A3C200000000 /* Build configuration list for PBXNativeTarget "TestSuite-Three-XCTest" */;
 			buildPhases = (
-				84B4227102E3F51000000000 /* ShellScript */,
+				84B42271E67D29D300000000 /* ShellScript */,
 				605793E20000000000000002 /* Sources */,
 			);
 			buildRules = (
@@ -257,7 +257,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE47558341AF1CEC00000000 /* Build configuration list for PBXNativeTarget "LogicTest" */;
 			buildPhases = (
-				84B422715243D50F00000000 /* ShellScript */,
+				84B422711BCD09D600000000 /* ShellScript */,
 				605793E20000000000000003 /* Sources */,
 			);
 			buildRules = (
@@ -274,7 +274,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE4755831AEA36FA00000000 /* Build configuration list for PBXNativeTarget "TestSuite-Two-XCTest" */;
 			buildPhases = (
-				84B422713AB3170E00000001 /* ShellScript */,
+				84B42271F62EA48B00000001 /* ShellScript */,
 				605793E20000000000000001 /* Sources */,
 			);
 			buildRules = (
@@ -292,7 +292,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE47558305B5AF7800000000 /* Build configuration list for PBXNativeTarget "TestApplication" */;
 			buildPhases = (
-				84B422715E4198BB00000000 /* ShellScript */,
+				84B4227131E45D1A00000000 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -361,7 +361,7 @@
 /* End PBXProject section */
 
 /* Begin PBXShellScriptBuildPhase section */
-		84B4227102E3F51000000000 /* ShellScript */ = {
+		84B422711BCD09D600000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -372,10 +372,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite/Three:XCTest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite/One:LogicTest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B422713AB3170E00000000 /* ShellScript */ = {
+		84B4227131E45D1A00000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -386,10 +386,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite/One:XCTest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite:TestApplication --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B422713AB3170E00000001 /* ShellScript */ = {
+		84B42271E67D29D300000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -400,10 +400,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite/Two:XCTest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite/Three:XCTest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B422715243D50F00000000 /* ShellScript */ = {
+		84B42271F62EA48B00000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -414,10 +414,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite/One:LogicTest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite/One:XCTest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B422715E4198BB00000000 /* ShellScript */ = {
+		84B42271F62EA48B00000001 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -428,7 +428,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite:TestApplication --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite/Two:XCTest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
 /* End PBXShellScriptBuildPhase section */
@@ -512,7 +512,6 @@
 				SDKROOT = iphoneos;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/One;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -531,7 +530,6 @@
 				PRODUCT_NAME = TestApplication;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = Debug;
@@ -552,7 +550,6 @@
 				SDKROOT = iphoneos;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/Two;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -574,7 +571,6 @@
 				SDKROOT = iphoneos;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/Three;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -609,6 +605,7 @@
 				SDKROOT = iphoneos;
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = TestSuiteExplicitXCTestsProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -628,7 +625,6 @@
 				PRODUCT_NAME = LogicTest;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = TestSuite/One;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -661,7 +657,6 @@
 				SDKROOT = iphoneos;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/One;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -680,7 +675,6 @@
 				PRODUCT_NAME = TestApplication;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Release;
@@ -701,7 +695,6 @@
 				SDKROOT = iphoneos;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/Two;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -723,7 +716,6 @@
 				SDKROOT = iphoneos;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/Three;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -759,6 +751,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = TestSuiteExplicitXCTestsProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -778,7 +771,6 @@
 				PRODUCT_NAME = LogicTest;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = TestSuite/One;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -818,7 +810,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/One;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -845,7 +836,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = __TulsiTestRunner_Debug;
@@ -873,7 +863,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/Two;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -902,7 +891,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/Three;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -942,6 +930,7 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = TestSuiteExplicitXCTestsProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -968,7 +957,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = TestSuite/One;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -997,7 +985,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/One;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -1024,7 +1011,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Release;
@@ -1052,7 +1038,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/Two;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -1081,7 +1066,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/Three;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -1122,6 +1106,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = TestSuiteExplicitXCTestsProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -1148,7 +1133,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = TestSuite/One;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteLocalTaggedTestsProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteLocalTaggedTestsProject.xcodeproj/project.pbxproj
index 374f779..91e7a1b 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteLocalTaggedTestsProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteLocalTaggedTestsProject.xcodeproj/project.pbxproj
@@ -178,7 +178,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE47558395C0260B00000000 /* Build configuration list for PBXNativeTarget "TestSuiteXCTest" */;
 			buildPhases = (
-				84B422715E4198BB00000000 /* ShellScript */,
+				84B4227131E45D1A00000000 /* ShellScript */,
 				605793E20000000000000000 /* Sources */,
 			);
 			buildRules = (
@@ -212,7 +212,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE47558305B5AF7800000000 /* Build configuration list for PBXNativeTarget "TestApplication" */;
 			buildPhases = (
-				84B422715E4198BB00000001 /* ShellScript */,
+				84B4227131E45D1A00000001 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -256,7 +256,7 @@
 /* End PBXProject section */
 
 /* Begin PBXShellScriptBuildPhase section */
-		84B422715E4198BB00000000 /* ShellScript */ = {
+		84B4227131E45D1A00000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -267,10 +267,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite:TestSuiteXCTest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite:TestSuiteXCTest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B422715E4198BB00000001 /* ShellScript */ = {
+		84B4227131E45D1A00000001 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -281,7 +281,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite:TestApplication --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite:TestApplication --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
 /* End PBXShellScriptBuildPhase section */
@@ -335,7 +335,6 @@
 				SDKROOT = iphoneos;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -354,7 +353,6 @@
 				PRODUCT_NAME = TestApplication;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = Debug;
@@ -388,6 +386,7 @@
 				SDKROOT = iphoneos;
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = TestSuiteLocalTaggedTestsProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -420,7 +419,6 @@
 				SDKROOT = iphoneos;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -439,7 +437,6 @@
 				PRODUCT_NAME = TestApplication;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Release;
@@ -474,6 +471,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = TestSuiteLocalTaggedTestsProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -513,7 +511,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -540,7 +537,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = __TulsiTestRunner_Debug;
@@ -579,6 +575,7 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = TestSuiteLocalTaggedTestsProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -607,7 +604,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -634,7 +630,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Release;
@@ -674,6 +669,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = TestSuiteLocalTaggedTestsProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteRecursiveTestSuiteProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteRecursiveTestSuiteProject.xcodeproj/project.pbxproj
index ba3de2b..b4f937b 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteRecursiveTestSuiteProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteRecursiveTestSuiteProject.xcodeproj/project.pbxproj
@@ -202,7 +202,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE47558395C0260B00000000 /* Build configuration list for PBXNativeTarget "TestSuiteXCTest" */;
 			buildPhases = (
-				84B422715E4198BB00000000 /* ShellScript */,
+				84B4227131E45D1A00000000 /* ShellScript */,
 				605793E20000000000000000 /* Sources */,
 			);
 			buildRules = (
@@ -220,7 +220,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE475583CC86731D00000000 /* Build configuration list for PBXNativeTarget "tagged_xctest_2" */;
 			buildPhases = (
-				84B42271F85E271500000000 /* ShellScript */,
+				84B42271C53300A100000000 /* ShellScript */,
 				605793E20000000000000001 /* Sources */,
 			);
 			buildRules = (
@@ -238,7 +238,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE4755838C86721A00000000 /* Build configuration list for PBXNativeTarget "tagged_xctest_1" */;
 			buildPhases = (
-				84B42271F85E271500000001 /* ShellScript */,
+				84B42271C53300A100000001 /* ShellScript */,
 				605793E20000000000000002 /* Sources */,
 			);
 			buildRules = (
@@ -272,7 +272,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE47558305B5AF7800000000 /* Build configuration list for PBXNativeTarget "TestApplication" */;
 			buildPhases = (
-				84B422715E4198BB00000001 /* ShellScript */,
+				84B4227131E45D1A00000001 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -324,7 +324,7 @@
 /* End PBXProject section */
 
 /* Begin PBXShellScriptBuildPhase section */
-		84B422715E4198BB00000000 /* ShellScript */ = {
+		84B4227131E45D1A00000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -335,10 +335,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite:TestSuiteXCTest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite:TestSuiteXCTest --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B422715E4198BB00000001 /* ShellScript */ = {
+		84B4227131E45D1A00000001 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -349,10 +349,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite:TestApplication --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite:TestApplication --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B42271F85E271500000000 /* ShellScript */ = {
+		84B42271C53300A100000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -363,10 +363,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite/Three:tagged_xctest_2 --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite/Three:tagged_xctest_2 --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B42271F85E271500000001 /* ShellScript */ = {
+		84B42271C53300A100000001 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -377,7 +377,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite/Three:tagged_xctest_1 --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //TestSuite/Three:tagged_xctest_1 --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
 /* End PBXShellScriptBuildPhase section */
@@ -451,7 +451,6 @@
 				SDKROOT = iphoneos;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -470,7 +469,6 @@
 				PRODUCT_NAME = TestApplication;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = Debug;
@@ -491,7 +489,6 @@
 				SDKROOT = iphoneos;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/Three;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -513,7 +510,6 @@
 				SDKROOT = iphoneos;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/Three;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -548,6 +544,7 @@
 				SDKROOT = iphoneos;
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = TestSuiteRecursiveTestSuiteProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -580,7 +577,6 @@
 				SDKROOT = iphoneos;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -599,7 +595,6 @@
 				PRODUCT_NAME = TestApplication;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Release;
@@ -620,7 +615,6 @@
 				SDKROOT = iphoneos;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/Three;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -642,7 +636,6 @@
 				SDKROOT = iphoneos;
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/Three;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -678,6 +671,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = TestSuiteRecursiveTestSuiteProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -717,7 +711,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -744,7 +737,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = __TulsiTestRunner_Debug;
@@ -772,7 +764,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/Three;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -801,7 +792,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/Three;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -841,6 +831,7 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = TestSuiteRecursiveTestSuiteProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -869,7 +860,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -896,7 +886,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = TestSuite;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Release;
@@ -924,7 +913,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/Three;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -953,7 +941,6 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestApplication.app/TestApplication";
 				TULSI_BUILD_PATH = TestSuite/Three;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_TEST_RUNNER_ONLY = YES;
 			};
@@ -994,6 +981,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = TestSuiteRecursiveTestSuiteProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/WatchProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/WatchProject.xcodeproj/project.pbxproj
index 18a47ee..efd3b4c 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/WatchProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/WatchProject.xcodeproj/project.pbxproj
@@ -226,7 +226,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE4755834598A69000000000 /* Build configuration list for PBXNativeTarget "WatchApplication" */;
 			buildPhases = (
-				84B42271E388CBE100000000 /* ShellScript */,
+				84B42271EDFA8BDF00000000 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -243,7 +243,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE475583F843F89400000000 /* Build configuration list for PBXNativeTarget "Application" */;
 			buildPhases = (
-				84B42271AD42FF0300000000 /* ShellScript */,
+				84B42271BE3E215900000000 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -275,7 +275,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = DE4755830DB9CDD900000000 /* Build configuration list for PBXNativeTarget "WatchExtension" */;
 			buildPhases = (
-				84B42271082EC71600000000 /* ShellScript */,
+				84B422711507A0A200000000 /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -316,7 +316,7 @@
 /* End PBXProject section */
 
 /* Begin PBXShellScriptBuildPhase section */
-		84B42271082EC71600000000 /* ShellScript */ = {
+		84B422711507A0A200000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -327,10 +327,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_watch:WatchExtension --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_watch:WatchExtension --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B42271AD42FF0300000000 /* ShellScript */ = {
+		84B42271BE3E215900000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -341,10 +341,10 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_watch:Application --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_watch:Application --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
-		84B42271E388CBE100000000 /* ShellScript */ = {
+		84B42271EDFA8BDF00000000 /* ShellScript */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 0;
 			files = (
@@ -355,7 +355,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/bash;
-			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_watch:WatchApplication --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null --  --install_generated_artifacts";
+			shellScript = "set -e\ncd \"${SRCROOT}/..\"\nexec \"${PROJECT_FILE_PATH}/.tulsi/Scripts/bazel_build.py\" //tulsi_e2e_watch:WatchApplication --bazel \"/fake/tulsi_test_bazel\" --bazel_bin_path \"bazel-bin\" --verbose --bazel_options[Debug] --define=TULSI_TEST=dbg --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_options[Release] --define=TULSI_TEST=rel --ios_minimum_os=7.0 --macos_minimum_os=10.10 --tvos_minimum_os=10.0 --watchos_minimum_os=3.0 --xcode_version=9.2 -- --bazel_startup_options[Debug] --bazelrc=/dev/null -- ";
 			showEnvVarsInLog = 1;
 		};
 /* End PBXShellScriptBuildPhase section */
@@ -420,6 +420,7 @@
 				SDKROOT = iphoneos;
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = WatchProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -438,7 +439,6 @@
 				PRODUCT_NAME = Application;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_watch;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = Debug;
@@ -455,7 +455,6 @@
 				PRODUCT_NAME = WatchApplication;
 				SDKROOT = watchos;
 				TULSI_BUILD_PATH = tulsi_e2e_watch;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				WATCHOS_DEPLOYMENT_TARGET = 3.0;
 			};
@@ -473,7 +472,6 @@
 				PRODUCT_NAME = WatchExtension;
 				SDKROOT = watchos;
 				TULSI_BUILD_PATH = tulsi_e2e_watch;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				WATCHOS_DEPLOYMENT_TARGET = 3.0;
 			};
@@ -531,6 +529,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = WatchProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -549,7 +548,6 @@
 				PRODUCT_NAME = Application;
 				SDKROOT = iphoneos;
 				TULSI_BUILD_PATH = tulsi_e2e_watch;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = Release;
@@ -566,7 +564,6 @@
 				PRODUCT_NAME = WatchApplication;
 				SDKROOT = watchos;
 				TULSI_BUILD_PATH = tulsi_e2e_watch;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				WATCHOS_DEPLOYMENT_TARGET = 3.0;
 			};
@@ -584,7 +581,6 @@
 				PRODUCT_NAME = WatchExtension;
 				SDKROOT = watchos;
 				TULSI_BUILD_PATH = tulsi_e2e_watch;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				WATCHOS_DEPLOYMENT_TARGET = 3.0;
 			};
@@ -646,6 +642,7 @@
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_PROJECT = WatchProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -672,7 +669,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_watch;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 			};
 			name = __TulsiTestRunner_Debug;
@@ -697,7 +693,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_watch;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				WATCHOS_DEPLOYMENT_TARGET = 3.0;
 			};
@@ -723,7 +718,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_watch;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = NO;
 				WATCHOS_DEPLOYMENT_TARGET = 3.0;
 			};
@@ -764,6 +758,7 @@
 				TULSI_BWRS = "${TULSI_WR}/tulsi-workspace";
 				TULSI_MUST_USE_DSYM = YES;
 				TULSI_PROJECT = WatchProject;
+				TULSI_UPDATE_DSYM_CACHE = YES;
 				TULSI_VERSION = 9.99.999.9999;
 				TULSI_WR = "${SRCROOT}/..";
 			};
@@ -790,7 +785,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_watch;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 			};
 			name = __TulsiTestRunner_Release;
@@ -815,7 +809,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_watch;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				WATCHOS_DEPLOYMENT_TARGET = 3.0;
 			};
@@ -841,7 +834,6 @@
 				SWIFT_INSTALL_OBJC_HEADER = NO;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(PRODUCT_NAME).h";
 				TULSI_BUILD_PATH = tulsi_e2e_watch;
-				TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK = YES;
 				TULSI_MUST_USE_DSYM = YES;
 				WATCHOS_DEPLOYMENT_TARGET = 3.0;
 			};
diff --git a/src/TulsiGeneratorTests/PBXTargetGeneratorTests.swift b/src/TulsiGeneratorTests/PBXTargetGeneratorTests.swift
index 691f09c..e363bc0 100644
--- a/src/TulsiGeneratorTests/PBXTargetGeneratorTests.swift
+++ b/src/TulsiGeneratorTests/PBXTargetGeneratorTests.swift
@@ -335,7 +335,6 @@
           "PRODUCT_NAME": rule1TargetName,
           "SDKROOT": "iphoneos",
           "TULSI_BUILD_PATH": rule1BuildPath,
-          "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
           "TULSI_MUST_USE_DSYM": "NO",
       ]
       let expectedTarget = TargetDefinition(
@@ -373,7 +372,6 @@
           "PRODUCT_NAME": rule2TargetName,
           "SDKROOT": "iphoneos",
           "TULSI_BUILD_PATH": rule2BuildPath,
-          "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
           "TULSI_MUST_USE_DSYM": "NO",
       ]
       let expectedTarget = TargetDefinition(
@@ -452,7 +450,6 @@
           "PRODUCT_NAME": rule1TargetName,
           "SDKROOT": "iphoneos",
           "TULSI_BUILD_PATH": rule1BuildPath,
-          "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
           "TULSI_MUST_USE_DSYM": "NO",
       ]
       let expectedTarget = TargetDefinition(
@@ -494,7 +491,6 @@
           "SDKROOT": "iphoneos",
           "TEST_HOST": "$(BUILT_PRODUCTS_DIR)/\(rule1TargetName).app/\(rule1TargetName)",
           "TULSI_BUILD_PATH": rule2BuildPath,
-          "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
           "TULSI_MUST_USE_DSYM": "NO",
           "TULSI_TEST_RUNNER_ONLY": "YES",
       ]
@@ -568,7 +564,6 @@
         "PRODUCT_NAME": rule1TargetName,
         "SDKROOT": "iphoneos",
         "TULSI_BUILD_PATH": rule1BuildPath,
-        "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
         "TULSI_MUST_USE_DSYM": "NO",
         ]
       let expectedTarget = TargetDefinition(
@@ -609,7 +604,6 @@
         "SDKROOT": "iphoneos",
         "TEST_TARGET_NAME": rule1TargetName,
         "TULSI_BUILD_PATH": rule2BuildPath,
-        "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
         "TULSI_TEST_RUNNER_ONLY": "YES",
         "TULSI_MUST_USE_DSYM": "NO",
         ]
@@ -688,7 +682,6 @@
         "PRODUCT_NAME": rule1TargetName,
         "SDKROOT": "macosx",
         "TULSI_BUILD_PATH": rule1BuildPath,
-        "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
         "TULSI_MUST_USE_DSYM": "NO",
         ]
       let expectedTarget = TargetDefinition(
@@ -730,7 +723,6 @@
         "SDKROOT": "macosx",
         "TEST_HOST": "$(BUILT_PRODUCTS_DIR)/\(rule1TargetName).app/Contents/MacOS/\(rule1TargetName)",
         "TULSI_BUILD_PATH": rule2BuildPath,
-        "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
         "TULSI_MUST_USE_DSYM": "NO",
         "TULSI_TEST_RUNNER_ONLY": "YES",
         ]
@@ -809,7 +801,6 @@
         "PRODUCT_NAME": rule1TargetName,
         "SDKROOT": "macosx",
         "TULSI_BUILD_PATH": rule1BuildPath,
-        "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
         "TULSI_MUST_USE_DSYM": "NO",
         ]
       let expectedTarget = TargetDefinition(
@@ -850,7 +841,6 @@
         "SDKROOT": "macosx",
         "TEST_TARGET_NAME": rule1TargetName,
         "TULSI_BUILD_PATH": rule2BuildPath,
-        "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
         "TULSI_MUST_USE_DSYM": "NO",
         "TULSI_TEST_RUNNER_ONLY": "YES",
         ]
@@ -919,7 +909,6 @@
         "PRODUCT_NAME": rule1TargetName,
         "SDKROOT": "macosx",
         "TULSI_BUILD_PATH": rule1BuildPath,
-        "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
         "TULSI_MUST_USE_DSYM": "NO",
         "TULSI_TEST_RUNNER_ONLY": "YES",
         ]
@@ -990,7 +979,6 @@
         "PRODUCT_NAME": rule1TargetName,
         "SDKROOT": "macosx",
         "TULSI_BUILD_PATH": rule1BuildPath,
-        "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
         "TULSI_MUST_USE_DSYM": "NO",
         "TULSI_TEST_RUNNER_ONLY": "YES",
         ]
@@ -1069,7 +1057,6 @@
           "PRODUCT_NAME": rule1TargetName,
           "SDKROOT": "iphoneos",
           "TULSI_BUILD_PATH": rule1BuildPath,
-          "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
           "TULSI_MUST_USE_DSYM": "NO",
       ]
       let expectedTarget = TargetDefinition(
@@ -1112,7 +1099,6 @@
           "SDKROOT": "iphoneos",
           "TEST_HOST": "$(BUILT_PRODUCTS_DIR)/\(rule1TargetName).app/\(rule1TargetName)",
           "TULSI_BUILD_PATH": testRuleBuildPath,
-          "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
           "TULSI_MUST_USE_DSYM": "NO",
           "TULSI_TEST_RUNNER_ONLY": "YES",
       ]
@@ -1201,7 +1187,6 @@
       "SDKROOT": "iphoneos",
       "TEST_HOST": "$(BUILT_PRODUCTS_DIR)/\(testHostTargetName).app/\(testHostTargetName)",
       "TULSI_BUILD_PATH": testRulePackage,
-      "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
       "TULSI_MUST_USE_DSYM": "NO",
       "TULSI_TEST_RUNNER_ONLY": "YES",
       ]
@@ -1290,7 +1275,6 @@
       "SDKROOT": "iphoneos",
       "TEST_HOST": "$(BUILT_PRODUCTS_DIR)/\(testHostTargetName).app/\(testHostTargetName)",
       "TULSI_BUILD_PATH": testRulePackage,
-      "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
       "TULSI_MUST_USE_DSYM": "YES",
       "TULSI_TEST_RUNNER_ONLY": "YES",
       ]
@@ -1373,7 +1357,6 @@
         "PRODUCT_NAME": rule1TargetName,
         "SDKROOT": "iphoneos",
         "TULSI_BUILD_PATH": rule1BuildPath,
-        "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
         "TULSI_MUST_USE_DSYM": "NO",
         ]
       let expectedTarget = TargetDefinition(
@@ -1415,7 +1398,6 @@
         "SDKROOT": "iphoneos",
         "TEST_TARGET_NAME": rule1TargetName,
         "TULSI_BUILD_PATH": testRuleBuildPath,
-        "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
         "TULSI_MUST_USE_DSYM": "NO",
         "TULSI_TEST_RUNNER_ONLY": "YES",
         ]
@@ -1541,7 +1523,6 @@
           "PRODUCT_NAME": testRuleTargetName,
           "SDKROOT": "iphoneos",
           "TULSI_BUILD_PATH": testRuleBuildPath,
-          "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
           "TULSI_MUST_USE_DSYM": "NO",
       ]
       var testRunnerExpectedBuildSettings = expectedBuildSettings
@@ -1610,7 +1591,6 @@
           "PRODUCT_NAME": "test-test1-SameName",
           "SDKROOT": "iphoneos",
           "TULSI_BUILD_PATH": rule1BuildPath,
-          "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
           "TULSI_MUST_USE_DSYM": "NO",
       ]
       let expectedTarget = TargetDefinition(
@@ -1648,7 +1628,6 @@
           "PRODUCT_NAME": "test-test2-SameName",
           "SDKROOT": "iphoneos",
           "TULSI_BUILD_PATH": rule2BuildPath,
-          "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
           "TULSI_MUST_USE_DSYM": "NO",
       ]
       let expectedTarget = TargetDefinition(
@@ -1713,7 +1692,6 @@
           "PRODUCT_NAME": targetName,
           "SDKROOT": "iphoneos",
           "TULSI_BUILD_PATH": buildPath,
-          "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
           "TULSI_MUST_USE_DSYM": "NO",
       ]
       let expectedTarget = TargetDefinition(
@@ -1777,7 +1755,6 @@
         "PRODUCT_NAME": bundleName,
         "SDKROOT": "iphoneos",
         "TULSI_BUILD_PATH": buildPath,
-        "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
         "TULSI_MUST_USE_DSYM": "NO",
       ]
       let expectedTarget = TargetDefinition(
@@ -1870,7 +1847,6 @@
           "SDKROOT": "iphoneos",
           "IPHONEOS_DEPLOYMENT_TARGET": "9.0",
           "TULSI_BUILD_PATH": appBuildPath,
-          "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
           "TULSI_MUST_USE_DSYM": "NO",
       ]
       let expectedTarget = TargetDefinition(
@@ -1910,7 +1886,6 @@
           "SDKROOT": "watchos",
           "WATCHOS_DEPLOYMENT_TARGET": "2.0",
           "TULSI_BUILD_PATH": watchAppBuildPath,
-          "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
           "TULSI_MUST_USE_DSYM": "NO",
       ]
       let expectedTarget = TargetDefinition(
@@ -1950,7 +1925,6 @@
           "SDKROOT": "watchos",
           "WATCHOS_DEPLOYMENT_TARGET": "2.0",
           "TULSI_BUILD_PATH": watchExtBuildPath,
-          "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
           "TULSI_MUST_USE_DSYM": "NO",
       ]
       let expectedTarget = TargetDefinition(
@@ -2040,7 +2014,6 @@
         "SDKROOT": "macosx",
         "MACOSX_DEPLOYMENT_TARGET": "10.12",
         "TULSI_BUILD_PATH": appBuildPath,
-        "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
         "TULSI_MUST_USE_DSYM": "NO",
       ]
       let expectedTarget = TargetDefinition(
@@ -2080,7 +2053,6 @@
         "SDKROOT": "macosx",
         "MACOSX_DEPLOYMENT_TARGET": "10.12",
         "TULSI_BUILD_PATH": macAppExtBuildPath,
-        "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
         "TULSI_MUST_USE_DSYM": "NO",
       ]
       let expectedTarget = TargetDefinition(
@@ -2120,7 +2092,6 @@
         "SDKROOT": "macosx",
         "MACOSX_DEPLOYMENT_TARGET": "10.12",
         "TULSI_BUILD_PATH": macCLIAppBuildPath,
-        "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
         "TULSI_MUST_USE_DSYM": "NO",
       ]
       let expectedTarget = TargetDefinition(
@@ -2607,7 +2578,6 @@
         "PRODUCT_NAME": targetName,
         "SDKROOT": "iphoneos",
         "TULSI_BUILD_PATH": package,
-        "TULSI_BUILD_WITHOUT_SPOTLIGHT_AT_MY_OWN_RISK": "NO",
         "TULSI_MUST_USE_DSYM": "YES",
     ]
     let expectedTarget = TargetDefinition(
diff --git a/src/TulsiGeneratorTests/XcodeProjectGeneratorTests.swift b/src/TulsiGeneratorTests/XcodeProjectGeneratorTests.swift
index 0421e70..071ec75 100644
--- a/src/TulsiGeneratorTests/XcodeProjectGeneratorTests.swift
+++ b/src/TulsiGeneratorTests/XcodeProjectGeneratorTests.swift
@@ -292,11 +292,14 @@
   }
 
   private func prepareGenerator(_ ruleEntries: [BuildLabel: RuleEntry]) {
+    let options = TulsiOptionSet()
+    // To avoid creating ~/Library folders and changing UserDefaults during CI testing.
+    options.options[.DisableDBGShellCommandsCaching]?.projectValue = "YES"
     config = TulsiGeneratorConfig(projectName: XcodeProjectGeneratorTests.projectName,
                                   buildTargetLabels: Array(ruleEntries.keys),
                                   pathFilters: pathFilters,
                                   additionalFilePaths: additionalFilePaths,
-                                  options: TulsiOptionSet(),
+                                  options: options,
                                   bazelURL: bazelURL)
     let projectURL = URL(fileURLWithPath: xcodeProjectPath, isDirectory: true)
     mockFileManager.allowedDirectoryCreates.insert(projectURL.path)
@@ -355,6 +358,7 @@
   var allowedDirectoryCreates = Set<String>()
   var copyOperations = [String: String]()
   var writeOperations = [String: Data]()
+  var removeOperations = [String]()
   var mockContent = [String: Data]()
 
   override func fileExists(atPath path: String) -> Bool {
@@ -380,11 +384,11 @@
   }
 
   override func removeItem(at URL: URL) throws {
-    throw NSError(domain: "MockFileManager: removeItem disallowed", code: 0, userInfo: nil)
+    removeOperations.append(URL.path)
   }
 
   override func removeItem(atPath path: String) throws {
-    throw NSError(domain: "MockFileManager: removeItem disallowed", code: 0, userInfo: nil)
+    removeOperations.append(path)
   }
 
   override func copyItem(at srcURL: URL, to dstURL: URL) throws {
diff --git a/src/tools/bazel_cache_reader/bazel_cache_reader.xcodeproj/project.pbxproj b/src/tools/bazel_cache_reader/bazel_cache_reader.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..57c4b75
--- /dev/null
+++ b/src/tools/bazel_cache_reader/bazel_cache_reader.xcodeproj/project.pbxproj
@@ -0,0 +1,284 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 48;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		E1D770DF20523E770026802A /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = E1D770DE20523E770026802A /* main.c */; };
+		E1D770ED20523F0D0026802A /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = E1D770EC20523F0D0026802A /* libsqlite3.tbd */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		E1D770D920523E770026802A /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = /usr/share/man/man1/;
+			dstSubfolderSpec = 0;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 1;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		E1D770DB20523E770026802A /* bazel_cache_reader */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = bazel_cache_reader; sourceTree = BUILT_PRODUCTS_DIR; };
+		E1D770DE20523E770026802A /* main.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = "<group>"; };
+		E1D770EC20523F0D0026802A /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		E1D770D820523E770026802A /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				E1D770ED20523F0D0026802A /* libsqlite3.tbd in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		E1D770D220523E770026802A = {
+			isa = PBXGroup;
+			children = (
+				E1D770DD20523E770026802A /* bazel_cache_reader */,
+				E1D770DC20523E770026802A /* Products */,
+				E1D770EB20523F0D0026802A /* Frameworks */,
+			);
+			sourceTree = "<group>";
+		};
+		E1D770DC20523E770026802A /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				E1D770DB20523E770026802A /* bazel_cache_reader */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		E1D770DD20523E770026802A /* bazel_cache_reader */ = {
+			isa = PBXGroup;
+			children = (
+				E1D770DE20523E770026802A /* main.c */,
+			);
+			path = bazel_cache_reader;
+			sourceTree = "<group>";
+		};
+		E1D770EB20523F0D0026802A /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				E1D770EC20523F0D0026802A /* libsqlite3.tbd */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		E1D770DA20523E770026802A /* bazel_cache_reader */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = E1D770E220523E770026802A /* Build configuration list for PBXNativeTarget "bazel_cache_reader" */;
+			buildPhases = (
+				E1D770D720523E770026802A /* Sources */,
+				E1D770D820523E770026802A /* Frameworks */,
+				E1D770D920523E770026802A /* CopyFiles */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = bazel_cache_reader;
+			productName = bazel_cache_reader;
+			productReference = E1D770DB20523E770026802A /* bazel_cache_reader */;
+			productType = "com.apple.product-type.tool";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		E1D770D320523E770026802A /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0920;
+				ORGANIZATIONNAME = "Google Inc";
+				TargetAttributes = {
+					E1D770DA20523E770026802A = {
+						CreatedOnToolsVersion = 9.2;
+						ProvisioningStyle = Automatic;
+					};
+				};
+			};
+			buildConfigurationList = E1D770D620523E770026802A /* Build configuration list for PBXProject "bazel_cache_reader" */;
+			compatibilityVersion = "Xcode 8.0";
+			developmentRegion = en;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = E1D770D220523E770026802A;
+			productRefGroup = E1D770DC20523E770026802A /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				E1D770DA20523E770026802A /* bazel_cache_reader */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+		E1D770D720523E770026802A /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				E1D770DF20523E770026802A /* main.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		E1D770E020523E770026802A /* 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_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = 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_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				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;
+				CODE_SIGN_IDENTITY = "-";
+				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 = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				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;
+				MACOSX_DEPLOYMENT_TARGET = 10.12;
+				MTL_ENABLE_DEBUG_INFO = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = macosx;
+			};
+			name = Debug;
+		};
+		E1D770E120523E770026802A /* 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_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = 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_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				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;
+				CODE_SIGN_IDENTITY = "-";
+				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;
+				MACOSX_DEPLOYMENT_TARGET = 10.12;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				SDKROOT = macosx;
+			};
+			name = Release;
+		};
+		E1D770E320523E770026802A /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CODE_SIGN_STYLE = Automatic;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Debug;
+		};
+		E1D770E420523E770026802A /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CODE_SIGN_STYLE = Automatic;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		E1D770D620523E770026802A /* Build configuration list for PBXProject "bazel_cache_reader" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				E1D770E020523E770026802A /* Debug */,
+				E1D770E120523E770026802A /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		E1D770E220523E770026802A /* Build configuration list for PBXNativeTarget "bazel_cache_reader" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				E1D770E320523E770026802A /* Debug */,
+				E1D770E420523E770026802A /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = E1D770D320523E770026802A /* Project object */;
+}
diff --git a/src/tools/bazel_cache_reader/bazel_cache_reader/main.c b/src/tools/bazel_cache_reader/bazel_cache_reader/main.c
new file mode 100644
index 0000000..a938d21
--- /dev/null
+++ b/src/tools/bazel_cache_reader/bazel_cache_reader/main.c
@@ -0,0 +1,111 @@
+// Copyright 2018 The Tulsi Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include <sqlite3.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+const char *db_path = "/Library/Application Support/Tulsi"
+                      "/Scripts/symbol_cache.db";
+
+// Response handler for each row returned by the sqlite3_exec query below.
+static int callback(void *unused, int argc, char **argv, char **az_col_name) {
+  if (argc != 3) {
+    // If the number of columns returned wasn't 3, return an error.
+    return 1;
+  } else if (access(argv[1], F_OK) == -1) {
+    // If the file does not exist, return early. DebugSymbols.framework will not
+    // try to find the dSYM in Spotlight if we give it a non-existent result.
+    return 0;
+  }
+
+  // Print the plist needed by DebugSymbols.framework to find this dSYM.
+  printf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+         "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" "
+         "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
+         "<plist version=\"1.0\">\n"
+         "<dict>\n"
+         "<key>%s</key>\n"
+         "<dict>\n"
+         "<key>DBGArchitecture</key>\n"
+         "<string>%s</string>\n"
+         "<key>DBGDSYMPath</key>\n"
+         "<string>%s</string>\n"
+         "</dict>\n"
+         "</dict>\n"
+         "</plist>\n", argv[0], argv[2], argv[1]);
+  return 0;
+}
+
+// This will be called by DebugSymbols.framework with the UUID as its sole arg.
+int main(int argc, const char *argv[]) {
+
+  // Print usage information if no or more than one input was detected.
+  if (argc != 2) {
+    fprintf(stderr, "Usage: %s UUID\n", argv[0]);
+    return 1;
+  }
+
+  // The UUID is expected to be exactly 36 characters long,
+  // but we want to overestimate our buffers in C.
+
+  // Concatenate a path to the database.
+  int returncode;
+  sqlite3 *db_handler;
+  char path_buffer[512];
+  char *home_dir = getenv("HOME");
+  strlcpy(path_buffer, home_dir, sizeof(path_buffer));
+  strlcat(path_buffer, db_path, sizeof(path_buffer));
+
+  // Open a new connection with the database.
+  returncode = sqlite3_open(path_buffer, &db_handler);
+  if (returncode != SQLITE_OK) {
+    fprintf(stderr,
+            "Can't open database: %s\n",
+            sqlite3_errmsg(db_handler));
+    sqlite3_close(db_handler);
+    return 1;
+  }
+
+  // Execute a query to retrieve the three fields needed for a
+  // DebugSymbols.framework plist.
+  char *exec_error_msg = NULL;
+  char query_buffer[256];  // should fit in 128 but being safe...
+  sqlite3_snprintf(sizeof(query_buffer),
+                   query_buffer,
+                   "SELECT uuid, dsym_path, architecture "
+                   "FROM symbol_cache "
+                   "WHERE uuid=\"%q\" "
+                   "LIMIT 1;",
+                   argv[1]);
+
+  // Query prints out a single plist, via callback above.
+  returncode = sqlite3_exec(db_handler,
+                            query_buffer,
+                            callback,
+                            0,
+                            &exec_error_msg);
+  if (returncode != SQLITE_OK) {
+    fprintf(stderr,
+            "Couldn't execute query to find UUID: %s, %s\n",
+            sqlite3_errmsg(db_handler), exec_error_msg);
+    sqlite3_close(db_handler);
+    return 1;
+  }
+
+  // Close connection when we're finished.
+  return sqlite3_close(db_handler);
+}
diff --git a/src/tools/bazel_cache_reader/bazel_cache_reader_speed_test.sh b/src/tools/bazel_cache_reader/bazel_cache_reader_speed_test.sh
new file mode 100755
index 0000000..56a4682
--- /dev/null
+++ b/src/tools/bazel_cache_reader/bazel_cache_reader_speed_test.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+# Copyright 2018 The Tulsi Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+# Standalone benchmark to imitate LLDB's image lookups in the first session.
+#
+# `log enable lldb host` in ~/.lldbinit to see each lookup in LLDB.
+#
+# Run this script as /usr/bin/time's argument for worst case performance.
+
+for i in `seq 1 410`;
+do
+  $HOME/Library/Application\ Support/Tulsi/Scripts/bazel_cache_reader $RANDOM > /dev/null
+done