Clean up built products group

- Fix issue causing built products to wrongly be resolved through
  tulsi-workspace
- Put indexer targets' products in their own separate folder, to
  be hidden away

PiperOrigin-RevId: 189246142
diff --git a/src/TulsiGenerator/BazelXcodeProjectPatcher.swift b/src/TulsiGenerator/BazelXcodeProjectPatcher.swift
index 1809310..34b730a 100644
--- a/src/TulsiGenerator/BazelXcodeProjectPatcher.swift
+++ b/src/TulsiGenerator/BazelXcodeProjectPatcher.swift
@@ -44,6 +44,9 @@
     // We only want to modify the path if the current path doesn't point to a valid file.
     guard !fileManager.fileExists(atPath: url.path) else { return }
 
+    // Don't patch anything that isn't group relative.
+    guard file.sourceTree == .Group else { return }
+
     // Remove .xcassets that are not present. Unfortunately, Xcode's handling of .xcassets has
     // quite a number of issues with Tulsi and readonly files.
     //
diff --git a/src/TulsiGenerator/PBXObjects.swift b/src/TulsiGenerator/PBXObjects.swift
index bdd48bc..1d7f357 100644
--- a/src/TulsiGenerator/PBXObjects.swift
+++ b/src/TulsiGenerator/PBXObjects.swift
@@ -1086,6 +1086,8 @@
 final class PBXProject: PBXObjectProtocol {
   // Name of the group in which target file references are stored.
   static let ProductsGroupName = "Products"
+  // Name of the group inside ProductsGroupName to store indexer target file references.
+  static let IndexerProductsGroupName = "Indexer"
 
   var globalID: String = ""
   let name: String
@@ -1141,14 +1143,19 @@
 
   func createNativeTarget(_ name: String,
                           deploymentTarget: DeploymentTarget?,
-                          targetType: PBXTarget.ProductType) -> PBXNativeTarget {
+                          targetType: PBXTarget.ProductType,
+                          isIndexerTarget: Bool = false) -> PBXNativeTarget {
     let value = PBXNativeTarget(name: name,
                                 deploymentTarget: deploymentTarget,
                                 productType: targetType)
     targetByName[name] = value
 
-    let productsGroup = mainGroup.getOrCreateChildGroupByName(PBXProject.ProductsGroupName,
+    var productsGroup = mainGroup.getOrCreateChildGroupByName(PBXProject.ProductsGroupName,
                                                               path: nil)
+    if isIndexerTarget {
+      productsGroup = productsGroup.getOrCreateChildGroupByName(PBXProject.IndexerProductsGroupName,
+                                                                path: nil)
+    }
     let productName = targetType.productName(name)
     let productReference = productsGroup.getOrCreateFileReferenceBySourceTree(.BuiltProductsDir,
                                                                               path: productName)
diff --git a/src/TulsiGenerator/PBXTargetGenerator.swift b/src/TulsiGenerator/PBXTargetGenerator.swift
index df769c1..c611433 100644
--- a/src/TulsiGenerator/PBXTargetGenerator.swift
+++ b/src/TulsiGenerator/PBXTargetGenerator.swift
@@ -642,7 +642,10 @@
     func generateIndexer(_ name: String,
                          indexerType: PBXTarget.ProductType,
                          data: IndexerData) {
-      let indexingTarget = project.createNativeTarget(name, deploymentTarget: nil, targetType: indexerType)
+      let indexingTarget = project.createNativeTarget(name,
+                                                      deploymentTarget: nil,
+                                                      targetType: indexerType,
+                                                      isIndexerTarget: true)
       indexingTarget.buildPhases.append(data.buildPhase)
       addConfigsForIndexingTarget(indexingTarget, data: data)
 
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/ComplexSingleProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/ComplexSingleProject.xcodeproj/project.pbxproj
index 9f8ea8f..9ec1c7a 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/ComplexSingleProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/ComplexSingleProject.xcodeproj/project.pbxproj
@@ -78,19 +78,18 @@
 
 /* Begin PBXFileReference section */
 		43D68C280CF925C900000000 /* Localized.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Localized.strings; path = "tulsi-workspace/tulsi_e2e_complex/Application/Base.lproj/Localized.strings"; sourceTree = "<group>"; };
-		43D68C280F624C0C00000000 /* lib_idx_TodayExtensionLibrary_CoreDataResources_NonPropagatedLibrary_TestLibrary_79AD2A0E_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_TodayExtensionLibrary_CoreDataResources_NonPropagatedLibrary_TestLibrary_79AD2A0E_ios_min8.0.a; path = "tulsi-workspace/lib_idx_TodayExtensionLibrary_CoreDataResources_NonPropagatedLibrary_TestLibrary_79AD2A0E_ios_min8.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28151F1CC400000000 /* non_propagated.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = non_propagated.m; path = "tulsi-workspace/tulsi_e2e_complex/NonPropagatedLibrary/srcs/non_propagated.m"; sourceTree = "<group>"; };
 		43D68C281A41382100000000 /* src.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = src.mm; path = "tulsi-workspace/tulsi_e2e_complex/SubLibraryWithDefines/srcs/src.mm"; sourceTree = "<group>"; };
 		43D68C2829C9947000000000 /* ObjCBundle.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = ObjCBundle.bundle; path = "tulsi-workspace/tulsi_e2e_complex/ObjCBundle.bundle"; sourceTree = "<group>"; };
 		43D68C283148FC2600000000 /* src.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = src.mm; path = "tulsi-workspace/tulsi_e2e_complex/SubLibrary/srcs/src.mm"; sourceTree = "<group>"; };
-		43D68C2831D4876E00000000 /* lib_idx_SubLibrary_19588DB9_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_SubLibrary_19588DB9_ios_min8.0.a; path = "tulsi-workspace/lib_idx_SubLibrary_19588DB9_ios_min8.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C283591DFD900000000 /* DataModelsTestv1.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; name = DataModelsTestv1.xcdatamodel; path = tulsi_e2e_complex/Test.xcdatamodeld/DataModelsTestv1.xcdatamodel; sourceTree = "<group>"; };
-		43D68C2840BBFB5200000000 /* Application.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = Application.app; path = "tulsi-workspace/Application.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C283A3B027E00000000 /* TodayExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; name = TodayExtension.appex; path = TodayExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28442EC9D700000000 /* SrcsHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SrcsHeader.h; path = "tulsi-workspace/tulsi_e2e_complex/Library/srcs/SrcsHeader.h"; sourceTree = "<group>"; };
 		43D68C2845AE2B9000000000 /* xib.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = xib.xib; path = "tulsi-workspace/tulsi_e2e_complex/Library/xib.xib"; sourceTree = "<group>"; };
-		43D68C28500D65D400000000 /* lib_idx_SubLibraryWithDifferentDefines_32E5A9BC_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_SubLibraryWithDifferentDefines_32E5A9BC_ios_min8.0.a; path = "tulsi-workspace/lib_idx_SubLibraryWithDifferentDefines_32E5A9BC_ios_min8.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2852C6516600000000 /* Localized.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Localized.strings; path = "tulsi-workspace/tulsi_e2e_complex/Application/es.lproj/Localized.strings"; sourceTree = "<group>"; };
+		43D68C2853B580F400000000 /* lib_idx_ApplicationLibrary_30DD5A4B_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_ApplicationLibrary_30DD5A4B_ios_min8.0.a; path = lib_idx_ApplicationLibrary_30DD5A4B_ios_min8.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2858F5ABDF00000000 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = Info.plist; path = "tulsi-workspace/tulsi_e2e_complex/Application/Info.plist"; sourceTree = "<group>"; };
+		43D68C285E266A6000000000 /* XCTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = XCTest.xctest; path = XCTest.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C285EBBC35700000000 /* One.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = One.storyboard; path = "tulsi-workspace/tulsi_e2e_complex/Application/Base.lproj/One.storyboard"; sourceTree = "<group>"; };
 		43D68C286266EC1F00000000 /* Localized.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Localized.strings; path = "tulsi-workspace/tulsi_e2e_complex/Application/en.lproj/Localized.strings"; sourceTree = "<group>"; };
 		43D68C28627DA73600000000 /* file2.file */ = {isa = PBXFileReference; lastKnownFileType = dyn.age80q4pqqy; name = file2.file; path = "tulsi-workspace/tulsi_e2e_complex/TodayExtension/resources/file2.file"; sourceTree = "<group>"; };
@@ -99,36 +98,50 @@
 		43D68C2875C5141000000000 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "tulsi-workspace/tulsi_e2e_complex/Application/srcs/main.m"; sourceTree = "<group>"; };
 		43D68C2879357B7500000000 /* AnotherPCHFile.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AnotherPCHFile.pch; path = "tulsi-workspace/tulsi_e2e_complex/SubLibrary/pch/AnotherPCHFile.pch"; sourceTree = "<group>"; };
 		43D68C287C31BCDA00000000 /* sub_library_with_identical_defines.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = sub_library_with_identical_defines.m; path = "tulsi-workspace/tulsi_e2e_complex/SubLibraryWithIdenticalDefines/srcs/sub_library_with_identical_defines.m"; sourceTree = "<group>"; };
-		43D68C287C44782900000000 /* lib_idx_ApplicationLibrary_30DD5A4B_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_ApplicationLibrary_30DD5A4B_ios_min8.0.a; path = "tulsi-workspace/lib_idx_ApplicationLibrary_30DD5A4B_ios_min8.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C287C841B0C00000000 /* ComplexSingle.bzl */ = {isa = PBXFileReference; lastKnownFileType = com.google.bazel.skylark; name = ComplexSingle.bzl; path = tulsi_e2e_complex/ComplexSingle.bzl; sourceTree = "<group>"; };
 		43D68C2885A048FD00000000 /* entitlements.entitlements */ = {isa = PBXFileReference; lastKnownFileType = "com.apple.xcode.entitlements-property-list"; name = entitlements.entitlements; path = "tulsi-workspace/tulsi_e2e_complex/Application/entitlements.entitlements"; sourceTree = "<group>"; };
-		43D68C288788BCE600000000 /* lib_idx_Library_20EC2F4A_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_Library_20EC2F4A_ios_min8.0.a; path = "tulsi-workspace/lib_idx_Library_20EC2F4A_ios_min8.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C288970786C00000000 /* src1.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = src1.m; path = "tulsi-workspace/tulsi_e2e_complex/LibrarySources/srcs/src1.m"; sourceTree = "<group>"; };
 		43D68C288E876E6400000000 /* Plist1.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = Plist1.plist; path = tulsi_e2e_complex/TodayExtension/Plist1.plist; sourceTree = "<group>"; };
 		43D68C28937235E300000000 /* Application-MergedInfo.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; name = "Application-MergedInfo.plist"; path = "tulsi-workspace/_tulsi-includes/x/x/tulsi_e2e_complex/Application-MergedInfo.plist"; sourceTree = "<group>"; };
 		43D68C28958553E300000000 /* src5.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = src5.mm; path = "tulsi-workspace/tulsi_e2e_complex/Library/srcs/src5.mm"; sourceTree = "<group>"; };
-		43D68C289AE39C4A00000000 /* TodayExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; name = TodayExtension.appex; path = "tulsi-workspace/TodayExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C289B31F4AA00000000 /* src2.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = src2.m; path = "tulsi-workspace/tulsi_e2e_complex/LibrarySources/srcs/src2.m"; sourceTree = "<group>"; };
+		43D68C28A0499AFA00000000 /* lib_idx_Library_20EC2F4A_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_Library_20EC2F4A_ios_min8.0.a; path = lib_idx_Library_20EC2F4A_ios_min8.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28A6D7A7EC00000000 /* BUILD */ = {isa = PBXFileReference; lastKnownFileType = text; name = BUILD; path = tulsi_e2e_complex/BUILD; sourceTree = "<group>"; };
 		43D68C28A7AABE7100000000 /* EN.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = EN.strings; path = "tulsi-workspace/tulsi_e2e_complex/Application/en.lproj/EN.strings"; sourceTree = "<group>"; };
+		43D68C28A85F1C2000000000 /* lib_idx_TodayExtensionLibrary_CoreDataResources_NonPropagatedLibrary_TestLibrary_79AD2A0E_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_TodayExtensionLibrary_CoreDataResources_NonPropagatedLibrary_TestLibrary_79AD2A0E_ios_min8.0.a; path = lib_idx_TodayExtensionLibrary_CoreDataResources_NonPropagatedLibrary_TestLibrary_79AD2A0E_ios_min8.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28AB2790F000000000 /* src3.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = src3.m; path = "tulsi-workspace/tulsi_e2e_complex/LibrarySources/srcs/src3.m"; sourceTree = "<group>"; };
-		43D68C28AE6E0F8C00000000 /* XCTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = XCTest.xctest; path = "tulsi-workspace/XCTest.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28B112D95100000000 /* structured_resources.file2 */ = {isa = PBXFileReference; lastKnownFileType = dyn.age80q4pqqy3a; name = structured_resources.file2; path = "tulsi-workspace/tulsi_e2e_complex/Application/structured_resources.file2"; sourceTree = "<group>"; };
 		43D68C28B72F496D00000000 /* test.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = test.framework; path = "tulsi-workspace/tulsi_e2e_complex/ObjCFramework/test.framework"; sourceTree = "<group>"; };
+		43D68C28B7BD546800000000 /* lib_idx_SubLibraryWithDifferentDefines_32E5A9BC_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_SubLibraryWithDifferentDefines_32E5A9BC_ios_min8.0.a; path = lib_idx_SubLibraryWithDifferentDefines_32E5A9BC_ios_min8.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28BAE52D2E00000000 /* src4.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = src4.m; path = "tulsi-workspace/tulsi_e2e_complex/LibrarySources/srcs/src4.m"; sourceTree = "<group>"; };
 		43D68C28BD12D84F00000000 /* structured_resources.file1 */ = {isa = PBXFileReference; lastKnownFileType = dyn.age80q4pqqy2u; name = structured_resources.file1; path = "tulsi-workspace/tulsi_e2e_complex/Application/structured_resources.file1"; sourceTree = "<group>"; };
 		43D68C28CF36936300000000 /* Localizable.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Localizable.strings; path = "tulsi-workspace/tulsi_e2e_complex/Application/Base.lproj/Localizable.strings"; sourceTree = "<group>"; };
 		43D68C28CFB68C6700000000 /* memleaks.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = memleaks.m; path = tools/objc/memleaks/memleaks.m; sourceTree = "<group>"; };
+		43D68C28D757BE4200000000 /* lib_idx_SubLibrary_19588DB9_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_SubLibrary_19588DB9_ios_min8.0.a; path = lib_idx_SubLibrary_19588DB9_ios_min8.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28DACF7BDE00000000 /* DataModelsTestv2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; name = DataModelsTestv2.xcdatamodel; path = tulsi_e2e_complex/Test.xcdatamodeld/DataModelsTestv2.xcdatamodel; sourceTree = "<group>"; };
 		43D68C28DC6A997500000000 /* NonARCFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = NonARCFile.mm; path = "tulsi-workspace/tulsi_e2e_complex/Application/non_arc_srcs/NonARCFile.mm"; sourceTree = "<group>"; };
-		43D68C28E53936CF00000000 /* lib_idx_SubLibraryWithIdenticalDefines_SubLibraryWithDefines_EC7E0D8E_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_SubLibraryWithIdenticalDefines_SubLibraryWithDefines_EC7E0D8E_ios_min8.0.a; path = "tulsi-workspace/lib_idx_SubLibraryWithIdenticalDefines_SubLibraryWithDefines_EC7E0D8E_ios_min8.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28ED583D0500000000 /* today_extension_library.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = today_extension_library.m; path = "tulsi-workspace/tulsi_e2e_complex/TodayExtension/srcs/today_extension_library.m"; sourceTree = "<group>"; };
 		43D68C28EEE1AA8400000000 /* file1 */ = {isa = PBXFileReference; lastKnownFileType = text; name = file1; path = "tulsi-workspace/tulsi_e2e_complex/TodayExtension/resources/file1"; sourceTree = "<group>"; };
+		43D68C28F49055A600000000 /* Application.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = Application.app; path = Application.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28F643652200000000 /* defaultTestSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = defaultTestSource.m; path = "tulsi-workspace/tulsi_e2e_complex/XCTest/srcs/defaultTestSource.m"; sourceTree = "<group>"; };
+		43D68C28F83513A200000000 /* lib_idx_SubLibraryWithIdenticalDefines_SubLibraryWithDefines_EC7E0D8E_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_SubLibraryWithIdenticalDefines_SubLibraryWithDefines_EC7E0D8E_ios_min8.0.a; path = lib_idx_SubLibraryWithIdenticalDefines_SubLibraryWithDefines_EC7E0D8E_ios_min8.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28FE8BFD3900000000 /* HdrsHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = HdrsHeader.h; path = "tulsi-workspace/tulsi_e2e_complex/Library/hdrs/HdrsHeader.h"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXGroup section */
+		966FB6DE0562C2F700000000 /* Indexer */ = {
+			isa = PBXGroup;
+			children = (
+				43D68C2853B580F400000000 /* lib_idx_ApplicationLibrary_30DD5A4B_ios_min8.0.a */,
+				43D68C28A0499AFA00000000 /* lib_idx_Library_20EC2F4A_ios_min8.0.a */,
+				43D68C28B7BD546800000000 /* lib_idx_SubLibraryWithDifferentDefines_32E5A9BC_ios_min8.0.a */,
+				43D68C28F83513A200000000 /* lib_idx_SubLibraryWithIdenticalDefines_SubLibraryWithDefines_EC7E0D8E_ios_min8.0.a */,
+				43D68C28D757BE4200000000 /* lib_idx_SubLibrary_19588DB9_ios_min8.0.a */,
+				43D68C28A85F1C2000000000 /* lib_idx_TodayExtensionLibrary_CoreDataResources_NonPropagatedLibrary_TestLibrary_79AD2A0E_ios_min8.0.a */,
+			);
+			name = Indexer;
+			sourceTree = "<group>";
+		};
 		966FB6DE05BF9AE300000000 /* objc */ = {
 			isa = PBXGroup;
 			children = (
@@ -191,16 +204,11 @@
 		966FB6DE2BD1037D00000000 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				43D68C2840BBFB5200000000 /* Application.app */,
-				43D68C289AE39C4A00000000 /* TodayExtension.appex */,
-				43D68C28AE6E0F8C00000000 /* XCTest.xctest */,
+				43D68C28F49055A600000000 /* Application.app */,
+				966FB6DE0562C2F700000000 /* Indexer */,
+				43D68C283A3B027E00000000 /* TodayExtension.appex */,
+				43D68C285E266A6000000000 /* XCTest.xctest */,
 				966FB6DE07201E0200000000 /* _tulsi-includes */,
-				43D68C287C44782900000000 /* lib_idx_ApplicationLibrary_30DD5A4B_ios_min8.0.a */,
-				43D68C288788BCE600000000 /* lib_idx_Library_20EC2F4A_ios_min8.0.a */,
-				43D68C28500D65D400000000 /* lib_idx_SubLibraryWithDifferentDefines_32E5A9BC_ios_min8.0.a */,
-				43D68C28E53936CF00000000 /* lib_idx_SubLibraryWithIdenticalDefines_SubLibraryWithDefines_EC7E0D8E_ios_min8.0.a */,
-				43D68C2831D4876E00000000 /* lib_idx_SubLibrary_19588DB9_ios_min8.0.a */,
-				43D68C280F624C0C00000000 /* lib_idx_TodayExtensionLibrary_CoreDataResources_NonPropagatedLibrary_TestLibrary_79AD2A0E_ios_min8.0.a */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -514,7 +522,7 @@
 			);
 			name = TodayExtension;
 			productName = TodayExtension;
-			productReference = 43D68C289AE39C4A00000000 /* TodayExtension.appex */;
+			productReference = 43D68C283A3B027E00000000 /* TodayExtension.appex */;
 			productType = "com.apple.product-type.app-extension";
 		};
 		3D31C5E6202AA80600000000 /* _idx_Library_20EC2F4A_ios_min8.0 */ = {
@@ -533,7 +541,7 @@
 			);
 			name = _idx_Library_20EC2F4A_ios_min8.0;
 			productName = _idx_Library_20EC2F4A_ios_min8.0;
-			productReference = 43D68C288788BCE600000000 /* lib_idx_Library_20EC2F4A_ios_min8.0.a */;
+			productReference = 43D68C28A0499AFA00000000 /* lib_idx_Library_20EC2F4A_ios_min8.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E65DB0F3F800000000 /* _idx_SubLibrary_19588DB9_ios_min8.0 */ = {
@@ -549,7 +557,7 @@
 			);
 			name = _idx_SubLibrary_19588DB9_ios_min8.0;
 			productName = _idx_SubLibrary_19588DB9_ios_min8.0;
-			productReference = 43D68C2831D4876E00000000 /* lib_idx_SubLibrary_19588DB9_ios_min8.0.a */;
+			productReference = 43D68C28D757BE4200000000 /* lib_idx_SubLibrary_19588DB9_ios_min8.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E66B144ABC00000000 /* Application */ = {
@@ -565,7 +573,7 @@
 			);
 			name = Application;
 			productName = Application;
-			productReference = 43D68C2840BBFB5200000000 /* Application.app */;
+			productReference = 43D68C28F49055A600000000 /* Application.app */;
 			productType = "com.apple.product-type.application";
 		};
 		3D31C5E68C6469FA00000000 /* _idx_TodayExtensionLibrary_CoreDataResources_NonPropagatedLibrary_TestLibrary_79AD2A0E_ios_min8.0 */ = {
@@ -581,7 +589,7 @@
 			);
 			name = _idx_TodayExtensionLibrary_CoreDataResources_NonPropagatedLibrary_TestLibrary_79AD2A0E_ios_min8.0;
 			productName = _idx_TodayExtensionLibrary_CoreDataResources_NonPropagatedLibrary_TestLibrary_79AD2A0E_ios_min8.0;
-			productReference = 43D68C280F624C0C00000000 /* lib_idx_TodayExtensionLibrary_CoreDataResources_NonPropagatedLibrary_TestLibrary_79AD2A0E_ios_min8.0.a */;
+			productReference = 43D68C28A85F1C2000000000 /* lib_idx_TodayExtensionLibrary_CoreDataResources_NonPropagatedLibrary_TestLibrary_79AD2A0E_ios_min8.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E6C106276200000000 /* _idx_ApplicationLibrary_30DD5A4B_ios_min8.0 */ = {
@@ -600,7 +608,7 @@
 			);
 			name = _idx_ApplicationLibrary_30DD5A4B_ios_min8.0;
 			productName = _idx_ApplicationLibrary_30DD5A4B_ios_min8.0;
-			productReference = 43D68C287C44782900000000 /* lib_idx_ApplicationLibrary_30DD5A4B_ios_min8.0.a */;
+			productReference = 43D68C2853B580F400000000 /* lib_idx_ApplicationLibrary_30DD5A4B_ios_min8.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E6E3993AD600000000 /* _idx_SubLibraryWithDifferentDefines_32E5A9BC_ios_min8.0 */ = {
@@ -616,7 +624,7 @@
 			);
 			name = _idx_SubLibraryWithDifferentDefines_32E5A9BC_ios_min8.0;
 			productName = _idx_SubLibraryWithDifferentDefines_32E5A9BC_ios_min8.0;
-			productReference = 43D68C28500D65D400000000 /* lib_idx_SubLibraryWithDifferentDefines_32E5A9BC_ios_min8.0.a */;
+			productReference = 43D68C28B7BD546800000000 /* lib_idx_SubLibraryWithDifferentDefines_32E5A9BC_ios_min8.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E6EF2E7F4000000000 /* XCTest */ = {
@@ -634,7 +642,7 @@
 			);
 			name = XCTest;
 			productName = XCTest;
-			productReference = 43D68C28AE6E0F8C00000000 /* XCTest.xctest */;
+			productReference = 43D68C285E266A6000000000 /* XCTest.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
 		};
 		3D31C5E6FBA8FA0800000000 /* _idx_SubLibraryWithIdenticalDefines_SubLibraryWithDefines_EC7E0D8E_ios_min8.0 */ = {
@@ -650,7 +658,7 @@
 			);
 			name = _idx_SubLibraryWithIdenticalDefines_SubLibraryWithDefines_EC7E0D8E_ios_min8.0;
 			productName = _idx_SubLibraryWithIdenticalDefines_SubLibraryWithDefines_EC7E0D8E_ios_min8.0;
-			productReference = 43D68C28E53936CF00000000 /* lib_idx_SubLibraryWithIdenticalDefines_SubLibraryWithDefines_EC7E0D8E_ios_min8.0.a */;
+			productReference = 43D68C28F83513A200000000 /* lib_idx_SubLibraryWithIdenticalDefines_SubLibraryWithDefines_EC7E0D8E_ios_min8.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 /* End PBXNativeTarget section */
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/IosLegacyTestProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/IosLegacyTestProject.xcodeproj/project.pbxproj
index 0b60d57..8577be5 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/IosLegacyTestProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/IosLegacyTestProject.xcodeproj/project.pbxproj
@@ -21,12 +21,20 @@
 
 /* Begin PBXFileReference section */
 		43D68C281D04D2FA00000000 /* BUILD */ = {isa = PBXFileReference; lastKnownFileType = text; name = BUILD; path = tulsi_e2e_ios_legacy_test/BUILD; sourceTree = "<group>"; };
+		43D68C2825268D4600000000 /* lib_idx_LegacyTestsLib_A268D14B_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_LegacyTestsLib_A268D14B_ios_min8.0.a; path = lib_idx_LegacyTestsLib_A268D14B_ios_min8.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C2844CBC58E00000000 /* LegacyTests.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = LegacyTests.app; path = LegacyTests.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2865653B6900000000 /* LegacyTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = LegacyTests.m; path = "tulsi-workspace/tulsi_e2e_ios_legacy_test/LegacyTests/LegacyTests.m"; sourceTree = "<group>"; };
-		43D68C288C718B3A00000000 /* LegacyTests.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = LegacyTests.app; path = "tulsi-workspace/LegacyTests.app"; sourceTree = BUILT_PRODUCTS_DIR; };
-		43D68C28BECEAE7200000000 /* lib_idx_LegacyTestsLib_A268D14B_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_LegacyTestsLib_A268D14B_ios_min8.0.a; path = "tulsi-workspace/lib_idx_LegacyTestsLib_A268D14B_ios_min8.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXGroup section */
+		966FB6DE0562C2F700000000 /* Indexer */ = {
+			isa = PBXGroup;
+			children = (
+				43D68C2825268D4600000000 /* lib_idx_LegacyTestsLib_A268D14B_ios_min8.0.a */,
+			);
+			name = Indexer;
+			sourceTree = "<group>";
+		};
 		966FB6DE10DDA96300000000 /* tulsi_e2e_ios_legacy_test */ = {
 			isa = PBXGroup;
 			children = (
@@ -39,8 +47,8 @@
 		966FB6DE2BD1037D00000000 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				43D68C288C718B3A00000000 /* LegacyTests.app */,
-				43D68C28BECEAE7200000000 /* lib_idx_LegacyTestsLib_A268D14B_ios_min8.0.a */,
+				966FB6DE0562C2F700000000 /* Indexer */,
+				43D68C2844CBC58E00000000 /* LegacyTests.app */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -96,7 +104,7 @@
 			);
 			name = _idx_LegacyTestsLib_A268D14B_ios_min8.0;
 			productName = _idx_LegacyTestsLib_A268D14B_ios_min8.0;
-			productReference = 43D68C28BECEAE7200000000 /* lib_idx_LegacyTestsLib_A268D14B_ios_min8.0.a */;
+			productReference = 43D68C2825268D4600000000 /* lib_idx_LegacyTestsLib_A268D14B_ios_min8.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E6F6EB9AA400000000 /* LegacyTests */ = {
@@ -112,7 +120,7 @@
 			);
 			name = LegacyTests;
 			productName = LegacyTests;
-			productReference = 43D68C288C718B3A00000000 /* LegacyTests.app */;
+			productReference = 43D68C2844CBC58E00000000 /* LegacyTests.app */;
 			productType = "com.apple.product-type.application";
 		};
 /* End PBXNativeTarget section */
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSProject.xcodeproj/project.pbxproj
index f0caf54..b0cef15 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSProject.xcodeproj/project.pbxproj
@@ -23,25 +23,33 @@
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXFileReference section */
-		43D68C2812A383BA00000000 /* MyTodayExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; name = MyTodayExtension.appex; path = "tulsi-workspace/MyTodayExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C2810C8DA6C00000000 /* MyMacOSApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = MyMacOSApp.app; path = MyMacOSApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C281E9E743E00000000 /* MyCommandLineApp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; name = MyCommandLineApp; path = MyCommandLineApp; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C282511224F00000000 /* TodayViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = TodayViewController.m; path = "tulsi-workspace/tulsi_e2e_mac/src/extensions/today/ExtSources/TodayViewController.m"; sourceTree = "<group>"; };
 		43D68C2834A5AC2900000000 /* TodayViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = TodayViewController.xib; path = "tulsi-workspace/tulsi_e2e_mac/Resources/extensions/today/TodayViewController.xib"; sourceTree = "<group>"; };
 		43D68C283646FFE900000000 /* MyTodayExtension-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = "MyTodayExtension-Info.plist"; path = "tulsi-workspace/tulsi_e2e_mac/MyTodayExtension-Info.plist"; sourceTree = "<group>"; };
 		43D68C283C553F8E00000000 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "tulsi-workspace/tulsi_e2e_mac/src/main.m"; sourceTree = "<group>"; };
 		43D68C2859BF633C00000000 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = "tulsi-workspace/tulsi_e2e_mac/src/AppDelegate.h"; sourceTree = "<group>"; };
 		43D68C2859FC82CA00000000 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = "tulsi-workspace/tulsi_e2e_mac/src/AppDelegate.m"; sourceTree = "<group>"; };
-		43D68C285EA2C3D800000000 /* MyMacOSApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = MyMacOSApp.app; path = "tulsi-workspace/MyMacOSApp.app"; sourceTree = BUILT_PRODUCTS_DIR; };
-		43D68C285F49BD9400000000 /* MyCommandLineApp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; name = MyCommandLineApp; path = "tulsi-workspace/MyCommandLineApp"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C286BE5C4F400000000 /* TodayViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TodayViewController.h; path = "tulsi-workspace/tulsi_e2e_mac/src/extensions/today/TodayViewController.h"; sourceTree = "<group>"; };
 		43D68C2876BC0BC700000000 /* MyTodayExtension-Entitlements.entitlements */ = {isa = PBXFileReference; lastKnownFileType = "com.apple.xcode.entitlements-property-list"; name = "MyTodayExtension-Entitlements.entitlements"; path = "tulsi-workspace/tulsi_e2e_mac/MyTodayExtension-Entitlements.entitlements"; sourceTree = "<group>"; };
 		43D68C289199386500000000 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = Info.plist; path = "tulsi-workspace/tulsi_e2e_mac/Info.plist"; sourceTree = "<group>"; };
+		43D68C28936F558E00000000 /* MyTodayExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; name = MyTodayExtension.appex; path = MyTodayExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C28A6703B8200000000 /* lib_idx_MyTodayExtensionSources_MyCommandLineAppSource_MyMacAppSources_F8389608_macos_min10.12.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_MyTodayExtensionSources_MyCommandLineAppSource_MyMacAppSources_F8389608_macos_min10.12.a; path = lib_idx_MyTodayExtensionSources_MyCommandLineAppSource_MyMacAppSources_F8389608_macos_min10.12.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28CBE52D2300000000 /* BUILD */ = {isa = PBXFileReference; lastKnownFileType = text; name = BUILD; path = tulsi_e2e_mac/BUILD; sourceTree = "<group>"; };
-		43D68C28D588B98800000000 /* lib_idx_MyTodayExtensionSources_MyCommandLineAppSource_MyMacAppSources_F8389608_macos_min10.12.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_MyTodayExtensionSources_MyCommandLineAppSource_MyMacAppSources_F8389608_macos_min10.12.a; path = "tulsi-workspace/lib_idx_MyTodayExtensionSources_MyCommandLineAppSource_MyMacAppSources_F8389608_macos_min10.12.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28DE68C70F00000000 /* Main.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Main.storyboard; path = "tulsi-workspace/tulsi_e2e_mac/Resources/Main.storyboard"; sourceTree = "<group>"; };
 		43D68C28F1794D7D00000000 /* MyCommandLineApp-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = "MyCommandLineApp-Info.plist"; path = "tulsi-workspace/tulsi_e2e_mac/MyCommandLineApp-Info.plist"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXGroup section */
+		966FB6DE0562C2F700000000 /* Indexer */ = {
+			isa = PBXGroup;
+			children = (
+				43D68C28A6703B8200000000 /* lib_idx_MyTodayExtensionSources_MyCommandLineAppSource_MyMacAppSources_F8389608_macos_min10.12.a */,
+			);
+			name = Indexer;
+			sourceTree = "<group>";
+		};
 		966FB6DE05FFEC7B00000000 /* extensions */ = {
 			isa = PBXGroup;
 			children = (
@@ -70,10 +78,10 @@
 		966FB6DE2BD1037D00000000 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				43D68C285F49BD9400000000 /* MyCommandLineApp */,
-				43D68C285EA2C3D800000000 /* MyMacOSApp.app */,
-				43D68C2812A383BA00000000 /* MyTodayExtension.appex */,
-				43D68C28D588B98800000000 /* lib_idx_MyTodayExtensionSources_MyCommandLineAppSource_MyMacAppSources_F8389608_macos_min10.12.a */,
+				966FB6DE0562C2F700000000 /* Indexer */,
+				43D68C281E9E743E00000000 /* MyCommandLineApp */,
+				43D68C2810C8DA6C00000000 /* MyMacOSApp.app */,
+				43D68C28936F558E00000000 /* MyTodayExtension.appex */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -171,7 +179,7 @@
 			);
 			name = MyCommandLineApp;
 			productName = MyCommandLineApp;
-			productReference = 43D68C285F49BD9400000000 /* MyCommandLineApp */;
+			productReference = 43D68C281E9E743E00000000 /* MyCommandLineApp */;
 			productType = "com.apple.product-type.tool";
 		};
 		3D31C5E665954B6A00000000 /* MyTodayExtension */ = {
@@ -187,7 +195,7 @@
 			);
 			name = MyTodayExtension;
 			productName = MyTodayExtension;
-			productReference = 43D68C2812A383BA00000000 /* MyTodayExtension.appex */;
+			productReference = 43D68C28936F558E00000000 /* MyTodayExtension.appex */;
 			productType = "com.apple.product-type.app-extension";
 		};
 		3D31C5E6F53E4F0A00000000 /* MyMacOSApp */ = {
@@ -203,7 +211,7 @@
 			);
 			name = MyMacOSApp;
 			productName = MyMacOSApp;
-			productReference = 43D68C285EA2C3D800000000 /* MyMacOSApp.app */;
+			productReference = 43D68C2810C8DA6C00000000 /* MyMacOSApp.app */;
 			productType = "com.apple.product-type.application";
 		};
 		3D31C5E6F77D1C0800000000 /* _idx_MyTodayExtensionSources_MyCommandLineAppSource_MyMacAppSources_F8389608_macos_min10.12 */ = {
@@ -219,7 +227,7 @@
 			);
 			name = _idx_MyTodayExtensionSources_MyCommandLineAppSource_MyMacAppSources_F8389608_macos_min10.12;
 			productName = _idx_MyTodayExtensionSources_MyCommandLineAppSource_MyMacAppSources_F8389608_macos_min10.12;
-			productReference = 43D68C28D588B98800000000 /* lib_idx_MyTodayExtensionSources_MyCommandLineAppSource_MyMacAppSources_F8389608_macos_min10.12.a */;
+			productReference = 43D68C28A6703B8200000000 /* lib_idx_MyTodayExtensionSources_MyCommandLineAppSource_MyMacAppSources_F8389608_macos_min10.12.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 /* End PBXNativeTarget section */
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSTestsProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSTestsProject.xcodeproj/project.pbxproj
index b02e7fd..e884582 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSTestsProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/MacOSTestsProject.xcodeproj/project.pbxproj
@@ -34,29 +34,38 @@
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXFileReference section */
+		43D68C2810C8DA6C00000000 /* MyMacOSApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = MyMacOSApp.app; path = MyMacOSApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C281B1E0BED00000000 /* UnitTestsNoHost.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = UnitTestsNoHost.m; path = "tulsi-workspace/tulsi_e2e_mac/test/UnitTestsNoHost.m"; sourceTree = "<group>"; };
 		43D68C282511224F00000000 /* TodayViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = TodayViewController.m; path = "tulsi-workspace/tulsi_e2e_mac/src/extensions/today/ExtSources/TodayViewController.m"; sourceTree = "<group>"; };
 		43D68C2834A5AC2900000000 /* TodayViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = TodayViewController.xib; path = "tulsi-workspace/tulsi_e2e_mac/Resources/extensions/today/TodayViewController.xib"; sourceTree = "<group>"; };
 		43D68C283646FFE900000000 /* MyTodayExtension-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = "MyTodayExtension-Info.plist"; path = "tulsi-workspace/tulsi_e2e_mac/MyTodayExtension-Info.plist"; sourceTree = "<group>"; };
 		43D68C283C553F8E00000000 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "tulsi-workspace/tulsi_e2e_mac/src/main.m"; sourceTree = "<group>"; };
+		43D68C283E3D735200000000 /* UITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = UITests.xctest; path = UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2859BF633C00000000 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = "tulsi-workspace/tulsi_e2e_mac/src/AppDelegate.h"; sourceTree = "<group>"; };
 		43D68C2859FC82CA00000000 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = "tulsi-workspace/tulsi_e2e_mac/src/AppDelegate.m"; sourceTree = "<group>"; };
-		43D68C285EA2C3D800000000 /* MyMacOSApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = MyMacOSApp.app; path = "tulsi-workspace/MyMacOSApp.app"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2867EA07A300000000 /* UITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = UITests.m; path = "tulsi-workspace/tulsi_e2e_mac/test/UITests.m"; sourceTree = "<group>"; };
 		43D68C286BE5C4F400000000 /* TodayViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TodayViewController.h; path = "tulsi-workspace/tulsi_e2e_mac/src/extensions/today/TodayViewController.h"; sourceTree = "<group>"; };
+		43D68C2870F6EB5A00000000 /* UnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = UnitTests.xctest; path = UnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2876BC0BC700000000 /* MyTodayExtension-Entitlements.entitlements */ = {isa = PBXFileReference; lastKnownFileType = "com.apple.xcode.entitlements-property-list"; name = "MyTodayExtension-Entitlements.entitlements"; path = "tulsi-workspace/tulsi_e2e_mac/MyTodayExtension-Entitlements.entitlements"; sourceTree = "<group>"; };
-		43D68C28772B9C7E00000000 /* UITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = UITests.xctest; path = "tulsi-workspace/UITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
-		43D68C289089AFFC00000000 /* lib_idx_UnitTestsLib_MyMacAppSources_MyTodayExtensionSources_UITestsLib_5415F9E2_macos_min10.12.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_UnitTestsLib_MyMacAppSources_MyTodayExtensionSources_UITestsLib_5415F9E2_macos_min10.12.a; path = "tulsi-workspace/lib_idx_UnitTestsLib_MyMacAppSources_MyTodayExtensionSources_UITestsLib_5415F9E2_macos_min10.12.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C289199386500000000 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = Info.plist; path = "tulsi-workspace/tulsi_e2e_mac/Info.plist"; sourceTree = "<group>"; };
-		43D68C28B1A85B8400000000 /* UnitTestsNoHost.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = UnitTestsNoHost.xctest; path = "tulsi-workspace/UnitTestsNoHost.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
-		43D68C28C3A472F400000000 /* lib_idx_UnitTestsNoHostLib_EC0877C6_macos_min10.10.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_UnitTestsNoHostLib_EC0877C6_macos_min10.10.a; path = "tulsi-workspace/lib_idx_UnitTestsNoHostLib_EC0877C6_macos_min10.10.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C28A14CEB9800000000 /* UnitTestsNoHost.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = UnitTestsNoHost.xctest; path = UnitTestsNoHost.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28C47949AB00000000 /* UnitTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = UnitTests.m; path = "tulsi-workspace/tulsi_e2e_mac/test/UnitTests.m"; sourceTree = "<group>"; };
 		43D68C28CBE52D2300000000 /* BUILD */ = {isa = PBXFileReference; lastKnownFileType = text; name = BUILD; path = tulsi_e2e_mac/BUILD; sourceTree = "<group>"; };
-		43D68C28D2EA8F7E00000000 /* UnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = UnitTests.xctest; path = "tulsi-workspace/UnitTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28DE68C70F00000000 /* Main.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Main.storyboard; path = "tulsi-workspace/tulsi_e2e_mac/Resources/Main.storyboard"; sourceTree = "<group>"; };
+		43D68C28E22D54F800000000 /* lib_idx_UnitTestsNoHostLib_EC0877C6_macos_min10.10.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_UnitTestsNoHostLib_EC0877C6_macos_min10.10.a; path = lib_idx_UnitTestsNoHostLib_EC0877C6_macos_min10.10.a; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C28FCC1A51000000000 /* lib_idx_UnitTestsLib_MyMacAppSources_MyTodayExtensionSources_UITestsLib_5415F9E2_macos_min10.12.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_UnitTestsLib_MyMacAppSources_MyTodayExtensionSources_UITestsLib_5415F9E2_macos_min10.12.a; path = lib_idx_UnitTestsLib_MyMacAppSources_MyTodayExtensionSources_UITestsLib_5415F9E2_macos_min10.12.a; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXGroup section */
+		966FB6DE0562C2F700000000 /* Indexer */ = {
+			isa = PBXGroup;
+			children = (
+				43D68C28FCC1A51000000000 /* lib_idx_UnitTestsLib_MyMacAppSources_MyTodayExtensionSources_UITestsLib_5415F9E2_macos_min10.12.a */,
+				43D68C28E22D54F800000000 /* lib_idx_UnitTestsNoHostLib_EC0877C6_macos_min10.10.a */,
+			);
+			name = Indexer;
+			sourceTree = "<group>";
+		};
 		966FB6DE05FFEC7B00000000 /* extensions */ = {
 			isa = PBXGroup;
 			children = (
@@ -85,12 +94,11 @@
 		966FB6DE2BD1037D00000000 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				43D68C285EA2C3D800000000 /* MyMacOSApp.app */,
-				43D68C28772B9C7E00000000 /* UITests.xctest */,
-				43D68C28D2EA8F7E00000000 /* UnitTests.xctest */,
-				43D68C28B1A85B8400000000 /* UnitTestsNoHost.xctest */,
-				43D68C289089AFFC00000000 /* lib_idx_UnitTestsLib_MyMacAppSources_MyTodayExtensionSources_UITestsLib_5415F9E2_macos_min10.12.a */,
-				43D68C28C3A472F400000000 /* lib_idx_UnitTestsNoHostLib_EC0877C6_macos_min10.10.a */,
+				966FB6DE0562C2F700000000 /* Indexer */,
+				43D68C2810C8DA6C00000000 /* MyMacOSApp.app */,
+				43D68C283E3D735200000000 /* UITests.xctest */,
+				43D68C2870F6EB5A00000000 /* UnitTests.xctest */,
+				43D68C28A14CEB9800000000 /* UnitTestsNoHost.xctest */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -200,7 +208,7 @@
 			);
 			name = UnitTests;
 			productName = UnitTests;
-			productReference = 43D68C28D2EA8F7E00000000 /* UnitTests.xctest */;
+			productReference = 43D68C2870F6EB5A00000000 /* UnitTests.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
 		};
 		3D31C5E6211D1A7800000000 /* UnitTestsNoHost */ = {
@@ -217,7 +225,7 @@
 			);
 			name = UnitTestsNoHost;
 			productName = UnitTestsNoHost;
-			productReference = 43D68C28B1A85B8400000000 /* UnitTestsNoHost.xctest */;
+			productReference = 43D68C28A14CEB9800000000 /* UnitTestsNoHost.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
 		};
 		3D31C5E63AACEB6600000000 /* _idx_UnitTestsNoHostLib_EC0877C6_macos_min10.10 */ = {
@@ -233,7 +241,7 @@
 			);
 			name = _idx_UnitTestsNoHostLib_EC0877C6_macos_min10.10;
 			productName = _idx_UnitTestsNoHostLib_EC0877C6_macos_min10.10;
-			productReference = 43D68C28C3A472F400000000 /* lib_idx_UnitTestsNoHostLib_EC0877C6_macos_min10.10.a */;
+			productReference = 43D68C28E22D54F800000000 /* lib_idx_UnitTestsNoHostLib_EC0877C6_macos_min10.10.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E660313F3200000000 /* UITests */ = {
@@ -251,7 +259,7 @@
 			);
 			name = UITests;
 			productName = UITests;
-			productReference = 43D68C28772B9C7E00000000 /* UITests.xctest */;
+			productReference = 43D68C283E3D735200000000 /* UITests.xctest */;
 			productType = "com.apple.product-type.bundle.ui-testing";
 		};
 		3D31C5E6F27F76B800000000 /* _idx_UnitTestsLib_MyMacAppSources_MyTodayExtensionSources_UITestsLib_5415F9E2_macos_min10.12 */ = {
@@ -267,7 +275,7 @@
 			);
 			name = _idx_UnitTestsLib_MyMacAppSources_MyTodayExtensionSources_UITestsLib_5415F9E2_macos_min10.12;
 			productName = _idx_UnitTestsLib_MyMacAppSources_MyTodayExtensionSources_UITestsLib_5415F9E2_macos_min10.12;
-			productReference = 43D68C289089AFFC00000000 /* lib_idx_UnitTestsLib_MyMacAppSources_MyTodayExtensionSources_UITestsLib_5415F9E2_macos_min10.12.a */;
+			productReference = 43D68C28FCC1A51000000000 /* lib_idx_UnitTestsLib_MyMacAppSources_MyTodayExtensionSources_UITestsLib_5415F9E2_macos_min10.12.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E6F53E4F0A00000000 /* MyMacOSApp */ = {
@@ -283,7 +291,7 @@
 			);
 			name = MyMacOSApp;
 			productName = MyMacOSApp;
-			productReference = 43D68C285EA2C3D800000000 /* MyMacOSApp.app */;
+			productReference = 43D68C2810C8DA6C00000000 /* MyMacOSApp.app */;
 			productType = "com.apple.product-type.application";
 		};
 /* End PBXNativeTarget section */
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleCCProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleCCProject.xcodeproj/project.pbxproj
index 17f4e28..524d3d1 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleCCProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleCCProject.xcodeproj/project.pbxproj
@@ -25,11 +25,11 @@
 		43D68C280B4C210700000000 /* BUILD */ = {isa = PBXFileReference; lastKnownFileType = text; name = BUILD; path = tulsi_e2e_ccsimple/BUILD; sourceTree = "<group>"; };
 		43D68C2836E2B24400000000 /* src2.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = src2.c; path = "tulsi-workspace/tulsi_e2e_ccsimple/Library/srcs/src2.c"; sourceTree = "<group>"; };
 		43D68C2840C4A2B300000000 /* main.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = main.cc; path = "tulsi-workspace/tulsi_e2e_ccsimple/Binary/srcs/main.cc"; sourceTree = "<group>"; };
-		43D68C2878DA00BA00000000 /* ccBinary.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = ccBinary.app; path = "tulsi-workspace/ccBinary.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C287BD278C400000000 /* lib_idx_ccLibrary_ccBinary_F372BDE7_ios_min7.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_ccLibrary_ccBinary_F372BDE7_ios_min7.0.a; path = lib_idx_ccLibrary_ccBinary_F372BDE7_ios_min7.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28B55D3E0600000000 /* src1.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = src1.c; path = "tulsi-workspace/tulsi_e2e_ccsimple/Library/srcs/src1.c"; sourceTree = "<group>"; };
+		43D68C28BEB0070E00000000 /* ccBinary.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = ccBinary.app; path = ccBinary.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28D27C3EF200000000 /* SrcsHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SrcsHeader.h; path = "tulsi-workspace/tulsi_e2e_ccsimple/Library/srcs/SrcsHeader.h"; sourceTree = "<group>"; };
 		43D68C28ED21EAD400000000 /* HdrsHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = HdrsHeader.h; path = "tulsi-workspace/tulsi_e2e_ccsimple/Library/hdrs/HdrsHeader.h"; sourceTree = "<group>"; };
-		43D68C28F186CBE100000000 /* lib_idx_ccLibrary_ccBinary_F372BDE7_ios_min7.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_ccLibrary_ccBinary_F372BDE7_ios_min7.0.a; path = "tulsi-workspace/lib_idx_ccLibrary_ccBinary_F372BDE7_ios_min7.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXGroup section */
@@ -43,11 +43,19 @@
 			name = tulsi_e2e_ccsimple;
 			sourceTree = "<group>";
 		};
+		966FB6DE0562C2F700000000 /* Indexer */ = {
+			isa = PBXGroup;
+			children = (
+				43D68C287BD278C400000000 /* lib_idx_ccLibrary_ccBinary_F372BDE7_ios_min7.0.a */,
+			);
+			name = Indexer;
+			sourceTree = "<group>";
+		};
 		966FB6DE2BD1037D00000000 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				43D68C2878DA00BA00000000 /* ccBinary.app */,
-				43D68C28F186CBE100000000 /* lib_idx_ccLibrary_ccBinary_F372BDE7_ios_min7.0.a */,
+				966FB6DE0562C2F700000000 /* Indexer */,
+				43D68C28BEB0070E00000000 /* ccBinary.app */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -138,7 +146,7 @@
 			);
 			name = _idx_ccLibrary_ccBinary_F372BDE7_ios_min7.0;
 			productName = _idx_ccLibrary_ccBinary_F372BDE7_ios_min7.0;
-			productReference = 43D68C28F186CBE100000000 /* lib_idx_ccLibrary_ccBinary_F372BDE7_ios_min7.0.a */;
+			productReference = 43D68C287BD278C400000000 /* lib_idx_ccLibrary_ccBinary_F372BDE7_ios_min7.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E689384A2400000000 /* ccBinary */ = {
@@ -154,7 +162,7 @@
 			);
 			name = ccBinary;
 			productName = ccBinary;
-			productReference = 43D68C2878DA00BA00000000 /* ccBinary.app */;
+			productReference = 43D68C28BEB0070E00000000 /* ccBinary.app */;
 			productType = "com.apple.product-type.application";
 		};
 /* End PBXNativeTarget section */
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleProject.xcodeproj/project.pbxproj
index 2cd475b..f7bba08 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleProject.xcodeproj/project.pbxproj
@@ -41,35 +41,45 @@
 
 /* Begin PBXFileReference section */
 		43D68C2805AAC31600000000 /* TextualHdrsHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TextualHdrsHeader.h; path = "tulsi-workspace/tulsi_e2e_simple/Library/textual_hdrs/TextualHdrsHeader.h"; sourceTree = "<group>"; };
-		43D68C280FCC570E00000000 /* lib_idx_Library_1A8360DD_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_Library_1A8360DD_ios_min8.0.a; path = "tulsi-workspace/lib_idx_Library_1A8360DD_ios_min8.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C280BFD6EFC00000000 /* TargetApplication.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = TargetApplication.app; path = TargetApplication.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28130596E000000000 /* TargetApplication-MergedInfo.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; name = "TargetApplication-MergedInfo.plist"; path = "tulsi-workspace/_tulsi-includes/x/x/tulsi_e2e_simple/TargetApplication-MergedInfo.plist"; sourceTree = "<group>"; };
 		43D68C2819E313D100000000 /* src1.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = src1.mm; path = "tulsi-workspace/tulsi_e2e_simple/XCTest/srcs/src1.mm"; sourceTree = "<group>"; };
+		43D68C28376F90AC00000000 /* lib_idx_ApplicationLibrary_BB2F88FA_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_ApplicationLibrary_BB2F88FA_ios_min8.0.a; path = lib_idx_ApplicationLibrary_BB2F88FA_ios_min8.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C283892747200000000 /* Application-MergedInfo.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; name = "Application-MergedInfo.plist"; path = "tulsi-workspace/_tulsi-includes/x/x/tulsi_e2e_simple/Application-MergedInfo.plist"; sourceTree = "<group>"; };
-		43D68C283A1CB63600000000 /* lib_idx_TestLibrary_92E29781_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_TestLibrary_92E29781_ios_min8.0.a; path = "tulsi-workspace/lib_idx_TestLibrary_92E29781_ios_min8.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
-		43D68C2840BBFB5200000000 /* Application.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = Application.app; path = "tulsi-workspace/Application.app"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2841E053A700000000 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "tulsi-workspace/tulsi_e2e_simple/ApplicationLibrary/srcs/main.m"; sourceTree = "<group>"; };
 		43D68C284759C53900000000 /* PCHFile.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PCHFile.pch; path = "tulsi-workspace/tulsi_e2e_simple/Library/pch/PCHFile.pch"; sourceTree = "<group>"; };
 		43D68C2854A2185400000000 /* Launch.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Launch.storyboard; path = "tulsi-workspace/tulsi_e2e_simple/Application/Launch.storyboard"; sourceTree = "<group>"; };
 		43D68C28594CBB3F00000000 /* BUILD */ = {isa = PBXFileReference; lastKnownFileType = text; name = BUILD; path = tulsi_e2e_simple/BUILD; sourceTree = "<group>"; };
 		43D68C285A65770D00000000 /* xib.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = xib.xib; path = "tulsi-workspace/tulsi_e2e_simple/Library/xibs/xib.xib"; sourceTree = "<group>"; };
-		43D68C286357703D00000000 /* lib_idx_ApplicationLibrary_BB2F88FA_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_ApplicationLibrary_BB2F88FA_ios_min8.0.a; path = "tulsi-workspace/lib_idx_ApplicationLibrary_BB2F88FA_ios_min8.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C285E266A6000000000 /* XCTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = XCTest.xctest; path = XCTest.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C288B9856D200000000 /* src1.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = src1.m; path = "tulsi-workspace/tulsi_e2e_simple/Library/srcs/src1.m"; sourceTree = "<group>"; };
 		43D68C28A556FB7A00000000 /* SimpleDataModelsTestv1.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; name = SimpleDataModelsTestv1.xcdatamodel; path = tulsi_e2e_simple/SimpleTest.xcdatamodeld/SimpleDataModelsTestv1.xcdatamodel; sourceTree = "<group>"; };
 		43D68C28AC13992A00000000 /* SrcsHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SrcsHeader.h; path = "tulsi-workspace/tulsi_e2e_simple/Library/srcs/SrcsHeader.h"; sourceTree = "<group>"; };
 		43D68C28AD49D31000000000 /* src2.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = src2.m; path = "tulsi-workspace/tulsi_e2e_simple/Library/srcs/src2.m"; sourceTree = "<group>"; };
-		43D68C28AE6E0F8C00000000 /* XCTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = XCTest.xctest; path = "tulsi-workspace/XCTest.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C28B173B88A00000000 /* lib_idx_TestLibrary_92E29781_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_TestLibrary_92E29781_ios_min8.0.a; path = lib_idx_TestLibrary_92E29781_ios_min8.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28B6B94D0C00000000 /* HdrsHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = HdrsHeader.h; path = "tulsi-workspace/tulsi_e2e_simple/Library/hdrs/HdrsHeader.h"; sourceTree = "<group>"; };
 		43D68C28CD6F6F5600000000 /* src3.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = src3.m; path = "tulsi-workspace/tulsi_e2e_simple/Library/srcs/src3.m"; sourceTree = "<group>"; };
 		43D68C28CFB68C6700000000 /* memleaks.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = memleaks.m; path = tools/objc/memleaks/memleaks.m; sourceTree = "<group>"; };
+		43D68C28D3EF7BE200000000 /* lib_idx_Library_1A8360DD_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_Library_1A8360DD_ios_min8.0.a; path = lib_idx_Library_1A8360DD_ios_min8.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28D69C1D8C00000000 /* entitlements.entitlements */ = {isa = PBXFileReference; lastKnownFileType = "com.apple.xcode.entitlements-property-list"; name = entitlements.entitlements; path = "tulsi-workspace/tulsi_e2e_simple/Application/entitlements.entitlements"; sourceTree = "<group>"; };
 		43D68C28D98253B200000000 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = Info.plist; path = "tulsi-workspace/tulsi_e2e_simple/Application/Info.plist"; sourceTree = "<group>"; };
 		43D68C28ECA2D00200000000 /* One.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = One.storyboard; path = "tulsi-workspace/tulsi_e2e_simple/ApplicationLibrary/Base.lproj/One.storyboard"; sourceTree = "<group>"; };
 		43D68C28ED1C8B9400000000 /* src4.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = src4.m; path = "tulsi-workspace/tulsi_e2e_simple/Library/srcs/src4.m"; sourceTree = "<group>"; };
 		43D68C28EFB26B8400000000 /* SimpleDataModelsTestv2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; name = SimpleDataModelsTestv2.xcdatamodel; path = tulsi_e2e_simple/SimpleTest.xcdatamodeld/SimpleDataModelsTestv2.xcdatamodel; sourceTree = "<group>"; };
-		43D68C28F590358800000000 /* TargetApplication.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = TargetApplication.app; path = "tulsi-workspace/TargetApplication.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C28F49055A600000000 /* Application.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = Application.app; path = Application.app; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXGroup section */
+		966FB6DE0562C2F700000000 /* Indexer */ = {
+			isa = PBXGroup;
+			children = (
+				43D68C28376F90AC00000000 /* lib_idx_ApplicationLibrary_BB2F88FA_ios_min8.0.a */,
+				43D68C28D3EF7BE200000000 /* lib_idx_Library_1A8360DD_ios_min8.0.a */,
+				43D68C28B173B88A00000000 /* lib_idx_TestLibrary_92E29781_ios_min8.0.a */,
+			);
+			name = Indexer;
+			sourceTree = "<group>";
+		};
 		966FB6DE05BF9AE300000000 /* objc */ = {
 			isa = PBXGroup;
 			children = (
@@ -89,13 +99,11 @@
 		966FB6DE2BD1037D00000000 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				43D68C2840BBFB5200000000 /* Application.app */,
-				43D68C28F590358800000000 /* TargetApplication.app */,
-				43D68C28AE6E0F8C00000000 /* XCTest.xctest */,
+				43D68C28F49055A600000000 /* Application.app */,
+				966FB6DE0562C2F700000000 /* Indexer */,
+				43D68C280BFD6EFC00000000 /* TargetApplication.app */,
+				43D68C285E266A6000000000 /* XCTest.xctest */,
 				966FB6DE07201E0200000000 /* _tulsi-includes */,
-				43D68C286357703D00000000 /* lib_idx_ApplicationLibrary_BB2F88FA_ios_min8.0.a */,
-				43D68C280FCC570E00000000 /* lib_idx_Library_1A8360DD_ios_min8.0.a */,
-				43D68C283A1CB63600000000 /* lib_idx_TestLibrary_92E29781_ios_min8.0.a */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -305,7 +313,7 @@
 			);
 			name = TargetApplication;
 			productName = TargetApplication;
-			productReference = 43D68C28F590358800000000 /* TargetApplication.app */;
+			productReference = 43D68C280BFD6EFC00000000 /* TargetApplication.app */;
 			productType = "com.apple.product-type.application";
 		};
 		3D31C5E657AF671A00000000 /* _idx_ApplicationLibrary_BB2F88FA_ios_min8.0 */ = {
@@ -322,7 +330,7 @@
 			);
 			name = _idx_ApplicationLibrary_BB2F88FA_ios_min8.0;
 			productName = _idx_ApplicationLibrary_BB2F88FA_ios_min8.0;
-			productReference = 43D68C286357703D00000000 /* lib_idx_ApplicationLibrary_BB2F88FA_ios_min8.0.a */;
+			productReference = 43D68C28376F90AC00000000 /* lib_idx_ApplicationLibrary_BB2F88FA_ios_min8.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E66B144ABC00000000 /* Application */ = {
@@ -338,7 +346,7 @@
 			);
 			name = Application;
 			productName = Application;
-			productReference = 43D68C2840BBFB5200000000 /* Application.app */;
+			productReference = 43D68C28F49055A600000000 /* Application.app */;
 			productType = "com.apple.product-type.application";
 		};
 		3D31C5E6BB25C05600000000 /* _idx_Library_1A8360DD_ios_min8.0 */ = {
@@ -354,7 +362,7 @@
 			);
 			name = _idx_Library_1A8360DD_ios_min8.0;
 			productName = _idx_Library_1A8360DD_ios_min8.0;
-			productReference = 43D68C280FCC570E00000000 /* lib_idx_Library_1A8360DD_ios_min8.0.a */;
+			productReference = 43D68C28D3EF7BE200000000 /* lib_idx_Library_1A8360DD_ios_min8.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E6DDB1401000000000 /* _idx_TestLibrary_92E29781_ios_min8.0 */ = {
@@ -371,7 +379,7 @@
 			);
 			name = _idx_TestLibrary_92E29781_ios_min8.0;
 			productName = _idx_TestLibrary_92E29781_ios_min8.0;
-			productReference = 43D68C283A1CB63600000000 /* lib_idx_TestLibrary_92E29781_ios_min8.0.a */;
+			productReference = 43D68C28B173B88A00000000 /* lib_idx_TestLibrary_92E29781_ios_min8.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E6EF2E7F4000000000 /* XCTest */ = {
@@ -389,7 +397,7 @@
 			);
 			name = XCTest;
 			productName = XCTest;
-			productReference = 43D68C28AE6E0F8C00000000 /* XCTest.xctest */;
+			productReference = 43D68C285E266A6000000000 /* XCTest.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
 		};
 /* End PBXNativeTarget section */
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleSkylarkProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleSkylarkProject.xcodeproj/project.pbxproj
index 079b113..246374a 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleSkylarkProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SimpleSkylarkProject.xcodeproj/project.pbxproj
@@ -48,11 +48,14 @@
 		43D68C28016874A200000000 /* SimpleDataModelsTestv1.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; name = SimpleDataModelsTestv1.xcdatamodel; path = tulsi_e2e_simple_skylark/SimpleTest.xcdatamodeld/SimpleDataModelsTestv1.xcdatamodel; sourceTree = "<group>"; };
 		43D68C280363E91A00000000 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "tulsi-workspace/tulsi_e2e_simple_skylark/App/srcs/main.m"; sourceTree = "<group>"; };
 		43D68C2807AD023D00000000 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Tests.swift; path = "tulsi-workspace/tulsi_e2e_simple_skylark/XCTest/srcs/Tests.swift"; sourceTree = "<group>"; };
+		43D68C2814E234EC00000000 /* lib_idx_XCUITestCode_XCTestCode_1D881332_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_XCUITestCode_XCTestCode_1D881332_ios_min8.0.a; path = lib_idx_XCUITestCode_XCTestCode_1D881332_ios_min8.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2815D95F4700000000 /* SkylarkTargetApplication-MergedInfo.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; name = "SkylarkTargetApplication-MergedInfo.plist"; path = "tulsi-workspace/_tulsi-includes/x/x/tulsi_e2e_simple_skylark/SkylarkTargetApplication-MergedInfo.plist"; sourceTree = "<group>"; };
 		43D68C281CB1D2D900000000 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = Settings.bundle; path = "tulsi-workspace/tulsi_e2e_simple_skylark/Settings.bundle"; sourceTree = "<group>"; };
-		43D68C2820B0B4E200000000 /* SkylarkApplication.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = SkylarkApplication.app; path = "tulsi-workspace/SkylarkApplication.app"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28259988BC00000000 /* Launch.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Launch.storyboard; path = "tulsi-workspace/tulsi_e2e_simple_skylark/Application/Launch.storyboard"; sourceTree = "<group>"; };
+		43D68C2826D093AA00000000 /* StickerExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; name = StickerExtension.appex; path = StickerExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2826E7EF3100000000 /* SkylarkApplication-MergedInfo.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; name = "SkylarkApplication-MergedInfo.plist"; path = "tulsi-workspace/_tulsi-includes/x/x/tulsi_e2e_simple_skylark/SkylarkApplication-MergedInfo.plist"; sourceTree = "<group>"; };
+		43D68C28360062FC00000000 /* lib_idx_JavaLibrary_C16E964B_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_JavaLibrary_C16E964B_ios_min8.0.a; path = lib_idx_JavaLibrary_C16E964B_ios_min8.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C283786664A00000000 /* _idx_XCTestCodeSwift_2FB5517B_ios_min8.0.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; name = _idx_XCTestCodeSwift_2FB5517B_ios_min8.0.framework; path = _idx_XCTestCodeSwift_2FB5517B_ios_min8.0.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C283943564C00000000 /* HdrsHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = HdrsHeader.h; path = "tulsi-workspace/tulsi_e2e_simple_skylark/Library/hdrs/HdrsHeader.h"; sourceTree = "<group>"; };
 		43D68C28395860BE00000000 /* TextualHdrsHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TextualHdrsHeader.h; path = "tulsi-workspace/tulsi_e2e_simple_skylark/Library/textual_hdrs/TextualHdrsHeader.h"; sourceTree = "<group>"; };
 		43D68C283A0868B500000000 /* Stickers.xcstickers */ = {isa = PBXFileReference; lastKnownFileType = folder.stickers; name = Stickers.xcstickers; path = tulsi_e2e_simple_skylark/Stickers.xcstickers; sourceTree = "<group>"; };
@@ -60,31 +63,40 @@
 		43D68C2844067B5100000000 /* XCUITests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = XCUITests.mm; path = "tulsi-workspace/tulsi_e2e_simple_skylark/XCUITest/srcs/XCUITests.mm"; sourceTree = "<group>"; };
 		43D68C28594086D300000000 /* ProtoFile.proto */ = {isa = PBXFileReference; lastKnownFileType = dyn.age81a6xtsv1u; name = ProtoFile.proto; path = "tulsi-workspace/tulsi_e2e_simple_skylark/ProtoFile.proto"; sourceTree = "<group>"; };
 		43D68C285AC5B07A00000000 /* src1.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = src1.m; path = "tulsi-workspace/tulsi_e2e_simple_skylark/Library/srcs/src1.m"; sourceTree = "<group>"; };
+		43D68C285E266A6000000000 /* XCTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = XCTest.xctest; path = XCTest.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C285F948D5E00000000 /* lib_idx_Library_22D3B3D5_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_Library_22D3B3D5_ios_min8.0.a; path = lib_idx_Library_22D3B3D5_ios_min8.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C286C872CB800000000 /* src2.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = src2.m; path = "tulsi-workspace/tulsi_e2e_simple_skylark/Library/srcs/src2.m"; sourceTree = "<group>"; };
+		43D68C286DAAC6CC00000000 /* SkylarkTargetApplication.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = SkylarkTargetApplication.app; path = SkylarkTargetApplication.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2875414ABA00000000 /* SrcsHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SrcsHeader.h; path = "tulsi-workspace/tulsi_e2e_simple_skylark/Library/srcs/SrcsHeader.h"; sourceTree = "<group>"; };
-		43D68C287B970FF800000000 /* SkylarkTargetApplication.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = SkylarkTargetApplication.app; path = "tulsi-workspace/SkylarkTargetApplication.app"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C287C84C8BE00000000 /* src3.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = src3.m; path = "tulsi-workspace/tulsi_e2e_simple_skylark/Library/srcs/src3.m"; sourceTree = "<group>"; };
 		43D68C288BD42CAC00000000 /* SimpleDataModelsTestv2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; name = SimpleDataModelsTestv2.xcdatamodel; path = tulsi_e2e_simple_skylark/SimpleTest.xcdatamodeld/SimpleDataModelsTestv2.xcdatamodel; sourceTree = "<group>"; };
 		43D68C288C4244FC00000000 /* src4.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = src4.m; path = "tulsi-workspace/tulsi_e2e_simple_skylark/Library/srcs/src4.m"; sourceTree = "<group>"; };
 		43D68C288EA0254100000000 /* Ext-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = "Ext-Info.plist"; path = "tulsi_e2e_simple_skylark/Ext-Info.plist"; sourceTree = "<group>"; };
-		43D68C2892E77E5800000000 /* lib_idx_MainLibrary_E33E600C_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_MainLibrary_E33E600C_ios_min8.0.a; path = "tulsi-workspace/lib_idx_MainLibrary_E33E600C_ios_min8.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
-		43D68C28947D851600000000 /* StickerExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; name = StickerExtension.appex; path = "tulsi-workspace/StickerExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
-		43D68C289E96F26800000000 /* lib_idx_JavaLibrary_C16E964B_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_JavaLibrary_C16E964B_ios_min8.0.a; path = "tulsi-workspace/lib_idx_JavaLibrary_C16E964B_ios_min8.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28A669C03500000000 /* xib.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = xib.xib; path = "tulsi-workspace/tulsi_e2e_simple_skylark/Library/xibs/xib.xib"; sourceTree = "<group>"; };
 		43D68C28A96EB07300000000 /* PCHFile.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PCHFile.pch; path = "tulsi-workspace/tulsi_e2e_simple_skylark/Library/pch/PCHFile.pch"; sourceTree = "<group>"; };
-		43D68C28AE6E0F8C00000000 /* XCTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = XCTest.xctest; path = "tulsi-workspace/XCTest.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
-		43D68C28B3F4C8CA00000000 /* lib_idx_Library_22D3B3D5_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_Library_22D3B3D5_ios_min8.0.a; path = "tulsi-workspace/lib_idx_Library_22D3B3D5_ios_min8.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C28AB52552000000000 /* XCUITest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = XCUITest.xctest; path = XCUITest.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28B88954B500000000 /* One.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = One.storyboard; path = "tulsi-workspace/tulsi_e2e_simple_skylark/App/Base.lproj/One.storyboard"; sourceTree = "<group>"; };
-		43D68C28C7197ACC00000000 /* XCUITest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = XCUITest.xctest; path = "tulsi-workspace/XCUITest.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
-		43D68C28CCAE3A7800000000 /* lib_idx_XCUITestCode_XCTestCode_1D881332_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_XCUITestCode_XCTestCode_1D881332_ios_min8.0.a; path = "tulsi-workspace/lib_idx_XCUITestCode_XCTestCode_1D881332_ios_min8.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C28B9C699F600000000 /* SkylarkApplication.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = SkylarkApplication.app; path = SkylarkApplication.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28CFB68C6700000000 /* memleaks.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = memleaks.m; path = tools/objc/memleaks/memleaks.m; sourceTree = "<group>"; };
 		43D68C28D035C16900000000 /* XCTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = XCTests.mm; path = "tulsi-workspace/tulsi_e2e_simple_skylark/XCTest/srcs/XCTests.mm"; sourceTree = "<group>"; };
-		43D68C28DB34393600000000 /* _idx_XCTestCodeSwift_2FB5517B_ios_min8.0.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; name = _idx_XCTestCodeSwift_2FB5517B_ios_min8.0.framework; path = "tulsi-workspace/_idx_XCTestCodeSwift_2FB5517B_ios_min8.0.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28F44F077B00000000 /* file.java */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.java; name = file.java; path = "tulsi-workspace/tulsi_e2e_simple_skylark/file.java"; sourceTree = "<group>"; };
 		43D68C28FB7A74E700000000 /* BUILD */ = {isa = PBXFileReference; lastKnownFileType = text; name = BUILD; path = tulsi_e2e_simple_skylark/BUILD; sourceTree = "<group>"; };
+		43D68C28FEECDEEC00000000 /* lib_idx_MainLibrary_E33E600C_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_MainLibrary_E33E600C_ios_min8.0.a; path = lib_idx_MainLibrary_E33E600C_ios_min8.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXGroup section */
+		966FB6DE0562C2F700000000 /* Indexer */ = {
+			isa = PBXGroup;
+			children = (
+				43D68C283786664A00000000 /* _idx_XCTestCodeSwift_2FB5517B_ios_min8.0.framework */,
+				43D68C28360062FC00000000 /* lib_idx_JavaLibrary_C16E964B_ios_min8.0.a */,
+				43D68C285F948D5E00000000 /* lib_idx_Library_22D3B3D5_ios_min8.0.a */,
+				43D68C28FEECDEEC00000000 /* lib_idx_MainLibrary_E33E600C_ios_min8.0.a */,
+				43D68C2814E234EC00000000 /* lib_idx_XCUITestCode_XCTestCode_1D881332_ios_min8.0.a */,
+			);
+			name = Indexer;
+			sourceTree = "<group>";
+		};
 		966FB6DE05BF9AE300000000 /* objc */ = {
 			isa = PBXGroup;
 			children = (
@@ -104,17 +116,13 @@
 		966FB6DE2BD1037D00000000 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				43D68C2820B0B4E200000000 /* SkylarkApplication.app */,
-				43D68C287B970FF800000000 /* SkylarkTargetApplication.app */,
-				43D68C28947D851600000000 /* StickerExtension.appex */,
-				43D68C28AE6E0F8C00000000 /* XCTest.xctest */,
-				43D68C28C7197ACC00000000 /* XCUITest.xctest */,
-				43D68C28DB34393600000000 /* _idx_XCTestCodeSwift_2FB5517B_ios_min8.0.framework */,
+				966FB6DE0562C2F700000000 /* Indexer */,
+				43D68C28B9C699F600000000 /* SkylarkApplication.app */,
+				43D68C286DAAC6CC00000000 /* SkylarkTargetApplication.app */,
+				43D68C2826D093AA00000000 /* StickerExtension.appex */,
+				43D68C285E266A6000000000 /* XCTest.xctest */,
+				43D68C28AB52552000000000 /* XCUITest.xctest */,
 				966FB6DE07201E0200000000 /* _tulsi-includes */,
-				43D68C289E96F26800000000 /* lib_idx_JavaLibrary_C16E964B_ios_min8.0.a */,
-				43D68C28B3F4C8CA00000000 /* lib_idx_Library_22D3B3D5_ios_min8.0.a */,
-				43D68C2892E77E5800000000 /* lib_idx_MainLibrary_E33E600C_ios_min8.0.a */,
-				43D68C28CCAE3A7800000000 /* lib_idx_XCUITestCode_XCTestCode_1D881332_ios_min8.0.a */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -346,7 +354,7 @@
 			);
 			name = _idx_Library_22D3B3D5_ios_min8.0;
 			productName = _idx_Library_22D3B3D5_ios_min8.0;
-			productReference = 43D68C28B3F4C8CA00000000 /* lib_idx_Library_22D3B3D5_ios_min8.0.a */;
+			productReference = 43D68C285F948D5E00000000 /* lib_idx_Library_22D3B3D5_ios_min8.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E626CA755A00000000 /* _idx_XCUITestCode_XCTestCode_1D881332_ios_min8.0 */ = {
@@ -363,7 +371,7 @@
 			);
 			name = _idx_XCUITestCode_XCTestCode_1D881332_ios_min8.0;
 			productName = _idx_XCUITestCode_XCTestCode_1D881332_ios_min8.0;
-			productReference = 43D68C28CCAE3A7800000000 /* lib_idx_XCUITestCode_XCTestCode_1D881332_ios_min8.0.a */;
+			productReference = 43D68C2814E234EC00000000 /* lib_idx_XCUITestCode_XCTestCode_1D881332_ios_min8.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E65C6B61BE00000000 /* _idx_XCTestCodeSwift_2FB5517B_ios_min8.0 */ = {
@@ -379,7 +387,7 @@
 			);
 			name = _idx_XCTestCodeSwift_2FB5517B_ios_min8.0;
 			productName = _idx_XCTestCodeSwift_2FB5517B_ios_min8.0;
-			productReference = 43D68C28DB34393600000000 /* _idx_XCTestCodeSwift_2FB5517B_ios_min8.0.framework */;
+			productReference = 43D68C283786664A00000000 /* _idx_XCTestCodeSwift_2FB5517B_ios_min8.0.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		3D31C5E666B361EA00000000 /* _idx_JavaLibrary_C16E964B_ios_min8.0 */ = {
@@ -395,7 +403,7 @@
 			);
 			name = _idx_JavaLibrary_C16E964B_ios_min8.0;
 			productName = _idx_JavaLibrary_C16E964B_ios_min8.0;
-			productReference = 43D68C289E96F26800000000 /* lib_idx_JavaLibrary_C16E964B_ios_min8.0.a */;
+			productReference = 43D68C28360062FC00000000 /* lib_idx_JavaLibrary_C16E964B_ios_min8.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E681C6DCDA00000000 /* _idx_MainLibrary_E33E600C_ios_min8.0 */ = {
@@ -412,7 +420,7 @@
 			);
 			name = _idx_MainLibrary_E33E600C_ios_min8.0;
 			productName = _idx_MainLibrary_E33E600C_ios_min8.0;
-			productReference = 43D68C2892E77E5800000000 /* lib_idx_MainLibrary_E33E600C_ios_min8.0.a */;
+			productReference = 43D68C28FEECDEEC00000000 /* lib_idx_MainLibrary_E33E600C_ios_min8.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E6BB03F10600000000 /* StickerExtension */ = {
@@ -428,7 +436,7 @@
 			);
 			name = StickerExtension;
 			productName = StickerExtension;
-			productReference = 43D68C28947D851600000000 /* StickerExtension.appex */;
+			productReference = 43D68C2826D093AA00000000 /* StickerExtension.appex */;
 			productType = "com.apple.product-type.app-extension.messages-sticker-pack";
 		};
 		3D31C5E6BECFDF8000000000 /* XCUITest */ = {
@@ -446,7 +454,7 @@
 			);
 			name = XCUITest;
 			productName = XCUITest;
-			productReference = 43D68C28C7197ACC00000000 /* XCUITest.xctest */;
+			productReference = 43D68C28AB52552000000000 /* XCUITest.xctest */;
 			productType = "com.apple.product-type.bundle.ui-testing";
 		};
 		3D31C5E6C3E8068C00000000 /* SkylarkApplication */ = {
@@ -462,7 +470,7 @@
 			);
 			name = SkylarkApplication;
 			productName = SkylarkApplication;
-			productReference = 43D68C2820B0B4E200000000 /* SkylarkApplication.app */;
+			productReference = 43D68C28B9C699F600000000 /* SkylarkApplication.app */;
 			productType = "com.apple.product-type.application";
 		};
 		3D31C5E6EF2E7F4000000000 /* XCTest */ = {
@@ -481,7 +489,7 @@
 			);
 			name = XCTest;
 			productName = XCTest;
-			productReference = 43D68C28AE6E0F8C00000000 /* XCTest.xctest */;
+			productReference = 43D68C285E266A6000000000 /* XCTest.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
 		};
 		3D31C5E6F353FBEA00000000 /* SkylarkTargetApplication */ = {
@@ -497,7 +505,7 @@
 			);
 			name = SkylarkTargetApplication;
 			productName = SkylarkTargetApplication;
-			productReference = 43D68C287B970FF800000000 /* SkylarkTargetApplication.app */;
+			productReference = 43D68C286DAAC6CC00000000 /* SkylarkTargetApplication.app */;
 			productType = "com.apple.product-type.application";
 		};
 /* End PBXNativeTarget section */
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SwiftProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SwiftProject.xcodeproj/project.pbxproj
index dd813c9..a7ac1c3 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SwiftProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/SwiftProject.xcodeproj/project.pbxproj
@@ -25,22 +25,32 @@
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXFileReference section */
-		43D68C280F383DA200000000 /* _idx_SwiftLibrary_EA7FC891_ios_min8.0.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; name = _idx_SwiftLibrary_EA7FC891_ios_min8.0.framework; path = "tulsi-workspace/_idx_SwiftLibrary_EA7FC891_ios_min8.0.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
-		43D68C2840BBFB5200000000 /* Application.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = Application.app; path = "tulsi-workspace/Application.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C281A91031800000000 /* _idx_SwiftLibraryV4_56AA3A59_ios_min8.0.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; name = _idx_SwiftLibraryV4_56AA3A59_ios_min8.0.framework; path = _idx_SwiftLibraryV4_56AA3A59_ios_min8.0.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C283DDF903600000000 /* _idx_SwiftLibrary_EA7FC891_ios_min8.0.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; name = _idx_SwiftLibrary_EA7FC891_ios_min8.0.framework; path = _idx_SwiftLibrary_EA7FC891_ios_min8.0.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C2875CB931600000000 /* _idx_SwiftLibraryV3_56AA3A57_ios_min8.0.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; name = _idx_SwiftLibraryV3_56AA3A57_ios_min8.0.framework; path = _idx_SwiftLibraryV3_56AA3A57_ios_min8.0.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28804B7D5400000000 /* Application-MergedInfo.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; name = "Application-MergedInfo.plist"; path = "tulsi-workspace/_tulsi-includes/x/x/tulsi_e2e_swift/Application-MergedInfo.plist"; sourceTree = "<group>"; };
 		43D68C2897AEEFA100000000 /* a.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = a.swift; path = "tulsi-workspace/tulsi_e2e_swift/SwiftLibraryV3/srcs/a.swift"; sourceTree = "<group>"; };
 		43D68C28A81C321400000000 /* a.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = a.swift; path = "tulsi-workspace/tulsi_e2e_swift/SwiftLibrary/srcs/a.swift"; sourceTree = "<group>"; };
-		43D68C28AA7DBEF600000000 /* _idx_SwiftLibraryV4_56AA3A59_ios_min8.0.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; name = _idx_SwiftLibraryV4_56AA3A59_ios_min8.0.framework; path = "tulsi-workspace/_idx_SwiftLibraryV4_56AA3A59_ios_min8.0.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28ADF10C6300000000 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = Info.plist; path = "tulsi-workspace/tulsi_e2e_swift/Info.plist"; sourceTree = "<group>"; };
 		43D68C28BF9D04A000000000 /* a.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = a.swift; path = "tulsi-workspace/tulsi_e2e_swift/SwiftLibraryV4/srcs/a.swift"; sourceTree = "<group>"; };
 		43D68C28DA373E9A00000000 /* b.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = b.swift; path = "tulsi-workspace/tulsi_e2e_swift/SwiftLibrary/srcs/b.swift"; sourceTree = "<group>"; };
 		43D68C28E006042300000000 /* b.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = b.swift; path = "tulsi-workspace/tulsi_e2e_swift/SwiftLibraryV3/srcs/b.swift"; sourceTree = "<group>"; };
+		43D68C28F49055A600000000 /* Application.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = Application.app; path = Application.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28F61CF22100000000 /* BUILD */ = {isa = PBXFileReference; lastKnownFileType = text; name = BUILD; path = tulsi_e2e_swift/BUILD; sourceTree = "<group>"; };
 		43D68C28F7BC10E600000000 /* b.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = b.swift; path = "tulsi-workspace/tulsi_e2e_swift/SwiftLibraryV4/srcs/b.swift"; sourceTree = "<group>"; };
-		43D68C28FE249EEE00000000 /* _idx_SwiftLibraryV3_56AA3A57_ios_min8.0.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; name = _idx_SwiftLibraryV3_56AA3A57_ios_min8.0.framework; path = "tulsi-workspace/_idx_SwiftLibraryV3_56AA3A57_ios_min8.0.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXGroup section */
+		966FB6DE0562C2F700000000 /* Indexer */ = {
+			isa = PBXGroup;
+			children = (
+				43D68C2875CB931600000000 /* _idx_SwiftLibraryV3_56AA3A57_ios_min8.0.framework */,
+				43D68C281A91031800000000 /* _idx_SwiftLibraryV4_56AA3A59_ios_min8.0.framework */,
+				43D68C283DDF903600000000 /* _idx_SwiftLibrary_EA7FC891_ios_min8.0.framework */,
+			);
+			name = Indexer;
+			sourceTree = "<group>";
+		};
 		966FB6DE07201E0200000000 /* _tulsi-includes */ = {
 			isa = PBXGroup;
 			children = (
@@ -52,10 +62,8 @@
 		966FB6DE2BD1037D00000000 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				43D68C2840BBFB5200000000 /* Application.app */,
-				43D68C28FE249EEE00000000 /* _idx_SwiftLibraryV3_56AA3A57_ios_min8.0.framework */,
-				43D68C28AA7DBEF600000000 /* _idx_SwiftLibraryV4_56AA3A59_ios_min8.0.framework */,
-				43D68C280F383DA200000000 /* _idx_SwiftLibrary_EA7FC891_ios_min8.0.framework */,
+				43D68C28F49055A600000000 /* Application.app */,
+				966FB6DE0562C2F700000000 /* Indexer */,
 				966FB6DE07201E0200000000 /* _tulsi-includes */,
 			);
 			name = Products;
@@ -191,7 +199,7 @@
 			);
 			name = _idx_SwiftLibraryV4_56AA3A59_ios_min8.0;
 			productName = _idx_SwiftLibraryV4_56AA3A59_ios_min8.0;
-			productReference = 43D68C28AA7DBEF600000000 /* _idx_SwiftLibraryV4_56AA3A59_ios_min8.0.framework */;
+			productReference = 43D68C281A91031800000000 /* _idx_SwiftLibraryV4_56AA3A59_ios_min8.0.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		3D31C5E66B144ABC00000000 /* Application */ = {
@@ -207,7 +215,7 @@
 			);
 			name = Application;
 			productName = Application;
-			productReference = 43D68C2840BBFB5200000000 /* Application.app */;
+			productReference = 43D68C28F49055A600000000 /* Application.app */;
 			productType = "com.apple.product-type.application";
 		};
 		3D31C5E685D0530A00000000 /* _idx_SwiftLibraryV3_56AA3A57_ios_min8.0 */ = {
@@ -223,7 +231,7 @@
 			);
 			name = _idx_SwiftLibraryV3_56AA3A57_ios_min8.0;
 			productName = _idx_SwiftLibraryV3_56AA3A57_ios_min8.0;
-			productReference = 43D68C28FE249EEE00000000 /* _idx_SwiftLibraryV3_56AA3A57_ios_min8.0.framework */;
+			productReference = 43D68C2875CB931600000000 /* _idx_SwiftLibraryV3_56AA3A57_ios_min8.0.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		3D31C5E68D4F012A00000000 /* _idx_SwiftLibrary_EA7FC891_ios_min8.0 */ = {
@@ -239,7 +247,7 @@
 			);
 			name = _idx_SwiftLibrary_EA7FC891_ios_min8.0;
 			productName = _idx_SwiftLibrary_EA7FC891_ios_min8.0;
-			productReference = 43D68C280F383DA200000000 /* _idx_SwiftLibrary_EA7FC891_ios_min8.0.framework */;
+			productReference = 43D68C283DDF903600000000 /* _idx_SwiftLibrary_EA7FC891_ios_min8.0.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 /* End PBXNativeTarget section */
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteExplicitXCTestsProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteExplicitXCTestsProject.xcodeproj/project.pbxproj
index dd3f0b9..5743346 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteExplicitXCTestsProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteExplicitXCTestsProject.xcodeproj/project.pbxproj
@@ -39,26 +39,34 @@
 
 /* Begin PBXFileReference section */
 		43D68C280514D6D800000000 /* BUILD */ = {isa = PBXFileReference; lastKnownFileType = text; name = BUILD; path = TestSuite/Three/BUILD; sourceTree = "<group>"; };
-		43D68C282042886700000000 /* lib_idx_XCTestLib_ApplicationLibrary_LogicTestLib_XCTestLib_XCTestLib_0F4BF70A_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_XCTestLib_ApplicationLibrary_LogicTestLib_XCTestLib_XCTestLib_0F4BF70A_ios_min8.0.a; path = "tulsi-workspace/lib_idx_XCTestLib_ApplicationLibrary_LogicTestLib_XCTestLib_XCTestLib_0F4BF70A_ios_min8.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
-		43D68C282EFEC1E400000000 /* TestSuite-Three-XCTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = "TestSuite-Three-XCTest.xctest"; path = "tulsi-workspace/TestSuite-Three-XCTest.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2830D2727A00000000 /* XCTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = XCTest.m; path = "tulsi-workspace/TestSuite/Three/XCTest.m"; sourceTree = "<group>"; };
 		43D68C2837CE81F900000000 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "tulsi-workspace/TestSuite/Application/srcs/main.m"; sourceTree = "<group>"; };
-		43D68C284E4730EA00000000 /* TestApplication.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = TestApplication.app; path = "tulsi-workspace/TestApplication.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C284D91E30200000000 /* lib_idx_XCTestLib_ApplicationLibrary_LogicTestLib_XCTestLib_XCTestLib_0F4BF70A_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_XCTestLib_ApplicationLibrary_LogicTestLib_XCTestLib_XCTestLib_0F4BF70A_ios_min8.0.a; path = lib_idx_XCTestLib_ApplicationLibrary_LogicTestLib_XCTestLib_XCTestLib_0F4BF70A_ios_min8.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C284E81BC7800000000 /* TestSuite-Three-XCTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = "TestSuite-Three-XCTest.xctest"; path = "TestSuite-Three-XCTest.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2853A382C000000000 /* BUILD */ = {isa = PBXFileReference; lastKnownFileType = text; name = BUILD; path = TestSuite/One/BUILD; sourceTree = "<group>"; };
-		43D68C28566D25CD00000000 /* LogicTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = LogicTest.xctest; path = "tulsi-workspace/LogicTest.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28588752AD00000000 /* BUILD */ = {isa = PBXFileReference; lastKnownFileType = text; name = BUILD; path = TestSuite/BUILD; sourceTree = "<group>"; };
+		43D68C285A2F8B6E00000000 /* TestApplication.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = TestApplication.app; path = TestApplication.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2864939ADF00000000 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = Info.plist; path = "tulsi-workspace/TestSuite/Info.plist"; sourceTree = "<group>"; };
-		43D68C286BC2F86400000000 /* TestSuite-Two-XCTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = "TestSuite-Two-XCTest.xctest"; path = "tulsi-workspace/TestSuite-Two-XCTest.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C288021770E00000000 /* LogicTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = LogicTest.m; path = "tulsi-workspace/TestSuite/One/LogicTest.m"; sourceTree = "<group>"; };
-		43D68C2887CC81F400000000 /* TestSuite-One-XCTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = "TestSuite-One-XCTest.xctest"; path = "tulsi-workspace/TestSuite-One-XCTest.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C288E51A48C00000000 /* LogicTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = LogicTest.xctest; path = LogicTest.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2899C3A61800000000 /* BUILD */ = {isa = PBXFileReference; lastKnownFileType = text; name = BUILD; path = TestSuite/Two/BUILD; sourceTree = "<group>"; };
 		43D68C28CFB68C6700000000 /* memleaks.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = memleaks.m; path = tools/objc/memleaks/memleaks.m; sourceTree = "<group>"; };
 		43D68C28D835DF2200000000 /* XCTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = XCTest.m; path = "tulsi-workspace/TestSuite/One/XCTest.m"; sourceTree = "<group>"; };
 		43D68C28DEBA0EC500000000 /* TestApplication-MergedInfo.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; name = "TestApplication-MergedInfo.plist"; path = "tulsi-workspace/_tulsi-includes/x/x/TestSuite/TestApplication-MergedInfo.plist"; sourceTree = "<group>"; };
+		43D68C28DEE022F800000000 /* TestSuite-Two-XCTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = "TestSuite-Two-XCTest.xctest"; path = "TestSuite-Two-XCTest.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28E8EE103A00000000 /* XCTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = XCTest.m; path = "tulsi-workspace/TestSuite/Two/XCTest.m"; sourceTree = "<group>"; };
+		43D68C28FF916CC800000000 /* TestSuite-One-XCTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = "TestSuite-One-XCTest.xctest"; path = "TestSuite-One-XCTest.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXGroup section */
+		966FB6DE0562C2F700000000 /* Indexer */ = {
+			isa = PBXGroup;
+			children = (
+				43D68C284D91E30200000000 /* lib_idx_XCTestLib_ApplicationLibrary_LogicTestLib_XCTestLib_XCTestLib_0F4BF70A_ios_min8.0.a */,
+			);
+			name = Indexer;
+			sourceTree = "<group>";
+		};
 		966FB6DE05BF9AE300000000 /* objc */ = {
 			isa = PBXGroup;
 			children = (
@@ -87,13 +95,13 @@
 		966FB6DE2BD1037D00000000 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				43D68C28566D25CD00000000 /* LogicTest.xctest */,
-				43D68C284E4730EA00000000 /* TestApplication.app */,
-				43D68C2887CC81F400000000 /* TestSuite-One-XCTest.xctest */,
-				43D68C282EFEC1E400000000 /* TestSuite-Three-XCTest.xctest */,
-				43D68C286BC2F86400000000 /* TestSuite-Two-XCTest.xctest */,
+				966FB6DE0562C2F700000000 /* Indexer */,
+				43D68C288E51A48C00000000 /* LogicTest.xctest */,
+				43D68C285A2F8B6E00000000 /* TestApplication.app */,
+				43D68C28FF916CC800000000 /* TestSuite-One-XCTest.xctest */,
+				43D68C284E81BC7800000000 /* TestSuite-Three-XCTest.xctest */,
+				43D68C28DEE022F800000000 /* TestSuite-Two-XCTest.xctest */,
 				966FB6DE07201E0200000000 /* _tulsi-includes */,
-				43D68C282042886700000000 /* lib_idx_XCTestLib_ApplicationLibrary_LogicTestLib_XCTestLib_XCTestLib_0F4BF70A_ios_min8.0.a */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -232,7 +240,7 @@
 			);
 			name = "TestSuite-One-XCTest";
 			productName = "TestSuite-One-XCTest";
-			productReference = 43D68C2887CC81F400000000 /* TestSuite-One-XCTest.xctest */;
+			productReference = 43D68C28FF916CC800000000 /* TestSuite-One-XCTest.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
 		};
 		3D31C5E6042EA8D800000000 /* TestSuite-Three-XCTest */ = {
@@ -250,7 +258,7 @@
 			);
 			name = "TestSuite-Three-XCTest";
 			productName = "TestSuite-Three-XCTest";
-			productReference = 43D68C282EFEC1E400000000 /* TestSuite-Three-XCTest.xctest */;
+			productReference = 43D68C284E81BC7800000000 /* TestSuite-Three-XCTest.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
 		};
 		3D31C5E60AB7D76C00000000 /* LogicTest */ = {
@@ -267,7 +275,7 @@
 			);
 			name = LogicTest;
 			productName = LogicTest;
-			productReference = 43D68C28566D25CD00000000 /* LogicTest.xctest */;
+			productReference = 43D68C288E51A48C00000000 /* LogicTest.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
 		};
 		3D31C5E67C4CFB5800000000 /* TestSuite-Two-XCTest */ = {
@@ -285,7 +293,7 @@
 			);
 			name = "TestSuite-Two-XCTest";
 			productName = "TestSuite-Two-XCTest";
-			productReference = 43D68C286BC2F86400000000 /* TestSuite-Two-XCTest.xctest */;
+			productReference = 43D68C28DEE022F800000000 /* TestSuite-Two-XCTest.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
 		};
 		3D31C5E6EC64700400000000 /* TestApplication */ = {
@@ -301,7 +309,7 @@
 			);
 			name = TestApplication;
 			productName = TestApplication;
-			productReference = 43D68C284E4730EA00000000 /* TestApplication.app */;
+			productReference = 43D68C285A2F8B6E00000000 /* TestApplication.app */;
 			productType = "com.apple.product-type.application";
 		};
 		3D31C5E6F51B7BE800000000 /* _idx_XCTestLib_ApplicationLibrary_LogicTestLib_XCTestLib_XCTestLib_0F4BF70A_ios_min8.0 */ = {
@@ -317,7 +325,7 @@
 			);
 			name = _idx_XCTestLib_ApplicationLibrary_LogicTestLib_XCTestLib_XCTestLib_0F4BF70A_ios_min8.0;
 			productName = _idx_XCTestLib_ApplicationLibrary_LogicTestLib_XCTestLib_XCTestLib_0F4BF70A_ios_min8.0;
-			productReference = 43D68C282042886700000000 /* lib_idx_XCTestLib_ApplicationLibrary_LogicTestLib_XCTestLib_XCTestLib_0F4BF70A_ios_min8.0.a */;
+			productReference = 43D68C284D91E30200000000 /* lib_idx_XCTestLib_ApplicationLibrary_LogicTestLib_XCTestLib_XCTestLib_0F4BF70A_ios_min8.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 /* End PBXNativeTarget section */
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteLocalTaggedTestsProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteLocalTaggedTestsProject.xcodeproj/project.pbxproj
index 2b8cc10..c3b9643 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteLocalTaggedTestsProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteLocalTaggedTestsProject.xcodeproj/project.pbxproj
@@ -29,18 +29,26 @@
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXFileReference section */
+		43D68C2806905DA000000000 /* lib_idx_TestSuiteXCTestLib_ApplicationLibrary_96607F05_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_TestSuiteXCTestLib_ApplicationLibrary_96607F05_ios_min8.0.a; path = lib_idx_TestSuiteXCTestLib_ApplicationLibrary_96607F05_ios_min8.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2837CE81F900000000 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "tulsi-workspace/TestSuite/Application/srcs/main.m"; sourceTree = "<group>"; };
-		43D68C284E4730EA00000000 /* TestApplication.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = TestApplication.app; path = "tulsi-workspace/TestApplication.app"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28588752AD00000000 /* BUILD */ = {isa = PBXFileReference; lastKnownFileType = text; name = BUILD; path = TestSuite/BUILD; sourceTree = "<group>"; };
+		43D68C285A2F8B6E00000000 /* TestApplication.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = TestApplication.app; path = TestApplication.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2864939ADF00000000 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = Info.plist; path = "tulsi-workspace/TestSuite/Info.plist"; sourceTree = "<group>"; };
-		43D68C288597860400000000 /* lib_idx_TestSuiteXCTestLib_ApplicationLibrary_96607F05_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_TestSuiteXCTestLib_ApplicationLibrary_96607F05_ios_min8.0.a; path = "tulsi-workspace/lib_idx_TestSuiteXCTestLib_ApplicationLibrary_96607F05_ios_min8.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
-		43D68C28A9E0F4F600000000 /* TestSuiteXCTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = TestSuiteXCTest.xctest; path = "tulsi-workspace/TestSuiteXCTest.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C28A6179FCA00000000 /* TestSuiteXCTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = TestSuiteXCTest.xctest; path = TestSuiteXCTest.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28CFB68C6700000000 /* memleaks.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = memleaks.m; path = tools/objc/memleaks/memleaks.m; sourceTree = "<group>"; };
 		43D68C28DEBA0EC500000000 /* TestApplication-MergedInfo.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; name = "TestApplication-MergedInfo.plist"; path = "tulsi-workspace/_tulsi-includes/x/x/TestSuite/TestApplication-MergedInfo.plist"; sourceTree = "<group>"; };
 		43D68C28E1F52E9200000000 /* TestSuiteXCTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = TestSuiteXCTest.m; path = "tulsi-workspace/TestSuite/TestSuite/TestSuiteXCTest.m"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXGroup section */
+		966FB6DE0562C2F700000000 /* Indexer */ = {
+			isa = PBXGroup;
+			children = (
+				43D68C2806905DA000000000 /* lib_idx_TestSuiteXCTestLib_ApplicationLibrary_96607F05_ios_min8.0.a */,
+			);
+			name = Indexer;
+			sourceTree = "<group>";
+		};
 		966FB6DE05BF9AE300000000 /* objc */ = {
 			isa = PBXGroup;
 			children = (
@@ -60,10 +68,10 @@
 		966FB6DE2BD1037D00000000 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				43D68C284E4730EA00000000 /* TestApplication.app */,
-				43D68C28A9E0F4F600000000 /* TestSuiteXCTest.xctest */,
+				966FB6DE0562C2F700000000 /* Indexer */,
+				43D68C285A2F8B6E00000000 /* TestApplication.app */,
+				43D68C28A6179FCA00000000 /* TestSuiteXCTest.xctest */,
 				966FB6DE07201E0200000000 /* _tulsi-includes */,
-				43D68C288597860400000000 /* lib_idx_TestSuiteXCTestLib_ApplicationLibrary_96607F05_ios_min8.0.a */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -189,7 +197,7 @@
 			);
 			name = TestSuiteXCTest;
 			productName = TestSuiteXCTest;
-			productReference = 43D68C28A9E0F4F600000000 /* TestSuiteXCTest.xctest */;
+			productReference = 43D68C28A6179FCA00000000 /* TestSuiteXCTest.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
 		};
 		3D31C5E6899BE7FE00000000 /* _idx_TestSuiteXCTestLib_ApplicationLibrary_96607F05_ios_min8.0 */ = {
@@ -205,7 +213,7 @@
 			);
 			name = _idx_TestSuiteXCTestLib_ApplicationLibrary_96607F05_ios_min8.0;
 			productName = _idx_TestSuiteXCTestLib_ApplicationLibrary_96607F05_ios_min8.0;
-			productReference = 43D68C288597860400000000 /* lib_idx_TestSuiteXCTestLib_ApplicationLibrary_96607F05_ios_min8.0.a */;
+			productReference = 43D68C2806905DA000000000 /* lib_idx_TestSuiteXCTestLib_ApplicationLibrary_96607F05_ios_min8.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E6EC64700400000000 /* TestApplication */ = {
@@ -221,7 +229,7 @@
 			);
 			name = TestApplication;
 			productName = TestApplication;
-			productReference = 43D68C284E4730EA00000000 /* TestApplication.app */;
+			productReference = 43D68C285A2F8B6E00000000 /* TestApplication.app */;
 			productType = "com.apple.product-type.application";
 		};
 /* End PBXNativeTarget section */
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteRecursiveTestSuiteProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteRecursiveTestSuiteProject.xcodeproj/project.pbxproj
index 0ecda48..af792eb 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteRecursiveTestSuiteProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/TestSuiteRecursiveTestSuiteProject.xcodeproj/project.pbxproj
@@ -38,20 +38,28 @@
 		43D68C280514D6D800000000 /* BUILD */ = {isa = PBXFileReference; lastKnownFileType = text; name = BUILD; path = TestSuite/Three/BUILD; sourceTree = "<group>"; };
 		43D68C28203681C000000000 /* tagged_xctest_2.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = tagged_xctest_2.m; path = "tulsi-workspace/TestSuite/Three/tagged_xctest_2.m"; sourceTree = "<group>"; };
 		43D68C2828386DC200000000 /* tagged_xctest_1.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = tagged_xctest_1.m; path = "tulsi-workspace/TestSuite/Three/tagged_xctest_1.m"; sourceTree = "<group>"; };
+		43D68C282CFB11EE00000000 /* tagged_xctest_2.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = tagged_xctest_2.xctest; path = tagged_xctest_2.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2837CE81F900000000 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "tulsi-workspace/TestSuite/Application/srcs/main.m"; sourceTree = "<group>"; };
-		43D68C284E4730EA00000000 /* TestApplication.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = TestApplication.app; path = "tulsi-workspace/TestApplication.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C284EFC4AE200000000 /* lib_idx_tagged_xctest_2_lib_ApplicationLibrary_TestSuiteXCTestLib_tagged_xctest_1_lib_345F39DA_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_tagged_xctest_2_lib_ApplicationLibrary_TestSuiteXCTestLib_tagged_xctest_1_lib_345F39DA_ios_min8.0.a; path = lib_idx_tagged_xctest_2_lib_ApplicationLibrary_TestSuiteXCTestLib_tagged_xctest_1_lib_345F39DA_ios_min8.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28588752AD00000000 /* BUILD */ = {isa = PBXFileReference; lastKnownFileType = text; name = BUILD; path = TestSuite/BUILD; sourceTree = "<group>"; };
+		43D68C285A2F8B6E00000000 /* TestApplication.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = TestApplication.app; path = TestApplication.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2864939ADF00000000 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = Info.plist; path = "tulsi-workspace/TestSuite/Info.plist"; sourceTree = "<group>"; };
-		43D68C287CBC2BDA00000000 /* tagged_xctest_2.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = tagged_xctest_2.xctest; path = "tulsi-workspace/tagged_xctest_2.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
-		43D68C28A9E0F4F600000000 /* TestSuiteXCTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = TestSuiteXCTest.xctest; path = "tulsi-workspace/TestSuiteXCTest.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
-		43D68C28C1E85D9400000000 /* tagged_xctest_1.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = tagged_xctest_1.xctest; path = "tulsi-workspace/tagged_xctest_1.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C28672DE3E800000000 /* tagged_xctest_1.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = tagged_xctest_1.xctest; path = tagged_xctest_1.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C28A6179FCA00000000 /* TestSuiteXCTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; name = TestSuiteXCTest.xctest; path = TestSuiteXCTest.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28CFB68C6700000000 /* memleaks.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = memleaks.m; path = tools/objc/memleaks/memleaks.m; sourceTree = "<group>"; };
 		43D68C28DEBA0EC500000000 /* TestApplication-MergedInfo.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; name = "TestApplication-MergedInfo.plist"; path = "tulsi-workspace/_tulsi-includes/x/x/TestSuite/TestApplication-MergedInfo.plist"; sourceTree = "<group>"; };
 		43D68C28E1F52E9200000000 /* TestSuiteXCTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = TestSuiteXCTest.m; path = "tulsi-workspace/TestSuite/TestSuite/TestSuiteXCTest.m"; sourceTree = "<group>"; };
-		43D68C28E2388D0800000000 /* lib_idx_tagged_xctest_2_lib_ApplicationLibrary_TestSuiteXCTestLib_tagged_xctest_1_lib_345F39DA_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_tagged_xctest_2_lib_ApplicationLibrary_TestSuiteXCTestLib_tagged_xctest_1_lib_345F39DA_ios_min8.0.a; path = "tulsi-workspace/lib_idx_tagged_xctest_2_lib_ApplicationLibrary_TestSuiteXCTestLib_tagged_xctest_1_lib_345F39DA_ios_min8.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXGroup section */
+		966FB6DE0562C2F700000000 /* Indexer */ = {
+			isa = PBXGroup;
+			children = (
+				43D68C284EFC4AE200000000 /* lib_idx_tagged_xctest_2_lib_ApplicationLibrary_TestSuiteXCTestLib_tagged_xctest_1_lib_345F39DA_ios_min8.0.a */,
+			);
+			name = Indexer;
+			sourceTree = "<group>";
+		};
 		966FB6DE05BF9AE300000000 /* objc */ = {
 			isa = PBXGroup;
 			children = (
@@ -81,12 +89,12 @@
 		966FB6DE2BD1037D00000000 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				43D68C284E4730EA00000000 /* TestApplication.app */,
-				43D68C28A9E0F4F600000000 /* TestSuiteXCTest.xctest */,
+				966FB6DE0562C2F700000000 /* Indexer */,
+				43D68C285A2F8B6E00000000 /* TestApplication.app */,
+				43D68C28A6179FCA00000000 /* TestSuiteXCTest.xctest */,
 				966FB6DE07201E0200000000 /* _tulsi-includes */,
-				43D68C28E2388D0800000000 /* lib_idx_tagged_xctest_2_lib_ApplicationLibrary_TestSuiteXCTestLib_tagged_xctest_1_lib_345F39DA_ios_min8.0.a */,
-				43D68C28C1E85D9400000000 /* tagged_xctest_1.xctest */,
-				43D68C287CBC2BDA00000000 /* tagged_xctest_2.xctest */,
+				43D68C28672DE3E800000000 /* tagged_xctest_1.xctest */,
+				43D68C282CFB11EE00000000 /* tagged_xctest_2.xctest */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -213,7 +221,7 @@
 			);
 			name = TestSuiteXCTest;
 			productName = TestSuiteXCTest;
-			productReference = 43D68C28A9E0F4F600000000 /* TestSuiteXCTest.xctest */;
+			productReference = 43D68C28A6179FCA00000000 /* TestSuiteXCTest.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
 		};
 		3D31C5E67E0C424E00000000 /* tagged_xctest_2 */ = {
@@ -231,7 +239,7 @@
 			);
 			name = tagged_xctest_2;
 			productName = tagged_xctest_2;
-			productReference = 43D68C287CBC2BDA00000000 /* tagged_xctest_2.xctest */;
+			productReference = 43D68C282CFB11EE00000000 /* tagged_xctest_2.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
 		};
 		3D31C5E67E0D424800000000 /* tagged_xctest_1 */ = {
@@ -249,7 +257,7 @@
 			);
 			name = tagged_xctest_1;
 			productName = tagged_xctest_1;
-			productReference = 43D68C28C1E85D9400000000 /* tagged_xctest_1.xctest */;
+			productReference = 43D68C28672DE3E800000000 /* tagged_xctest_1.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
 		};
 		3D31C5E69E47A3C800000000 /* _idx_tagged_xctest_2_lib_ApplicationLibrary_TestSuiteXCTestLib_tagged_xctest_1_lib_345F39DA_ios_min8.0 */ = {
@@ -265,7 +273,7 @@
 			);
 			name = _idx_tagged_xctest_2_lib_ApplicationLibrary_TestSuiteXCTestLib_tagged_xctest_1_lib_345F39DA_ios_min8.0;
 			productName = _idx_tagged_xctest_2_lib_ApplicationLibrary_TestSuiteXCTestLib_tagged_xctest_1_lib_345F39DA_ios_min8.0;
-			productReference = 43D68C28E2388D0800000000 /* lib_idx_tagged_xctest_2_lib_ApplicationLibrary_TestSuiteXCTestLib_tagged_xctest_1_lib_345F39DA_ios_min8.0.a */;
+			productReference = 43D68C284EFC4AE200000000 /* lib_idx_tagged_xctest_2_lib_ApplicationLibrary_TestSuiteXCTestLib_tagged_xctest_1_lib_345F39DA_ios_min8.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E6EC64700400000000 /* TestApplication */ = {
@@ -281,7 +289,7 @@
 			);
 			name = TestApplication;
 			productName = TestApplication;
-			productReference = 43D68C284E4730EA00000000 /* TestApplication.app */;
+			productReference = 43D68C285A2F8B6E00000000 /* TestApplication.app */;
 			productType = "com.apple.product-type.application";
 		};
 /* End PBXNativeTarget section */
diff --git a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/WatchProject.xcodeproj/project.pbxproj b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/WatchProject.xcodeproj/project.pbxproj
index 7215f0a..3df24e9 100644
--- a/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/WatchProject.xcodeproj/project.pbxproj
+++ b/src/TulsiGeneratorIntegrationTests/Resources/GoldenProjects/WatchProject.xcodeproj/project.pbxproj
@@ -27,27 +27,36 @@
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXFileReference section */
-		43D68C28035AF2CA00000000 /* lib_idx_ApplicationLibrary_06BBE256_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_ApplicationLibrary_06BBE256_ios_min8.0.a; path = "tulsi-workspace/lib_idx_ApplicationLibrary_06BBE256_ios_min8.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2806CBDC2C00000000 /* Interface.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Interface.storyboard; path = "tulsi-workspace/tulsi_e2e_watch/Watch2Extension/Interface.storyboard"; sourceTree = "<group>"; };
 		43D68C2816ADE03E00000000 /* Application-MergedInfo.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; name = "Application-MergedInfo.plist"; path = "tulsi-workspace/_tulsi-includes/x/x/tulsi_e2e_watch/Application-MergedInfo.plist"; sourceTree = "<group>"; };
-		43D68C281B86312000000000 /* lib_idx_WatchExtensionLibrary_6997976B_watchos_min3.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_WatchExtensionLibrary_6997976B_watchos_min3.0.a; path = "tulsi-workspace/lib_idx_WatchExtensionLibrary_6997976B_watchos_min3.0.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C283686445A00000000 /* ext_resources.file */ = {isa = PBXFileReference; lastKnownFileType = dyn.age80q4pqqy; name = ext_resources.file; path = "tulsi-workspace/tulsi_e2e_watch/Watch2Extension/ext_resources.file"; sourceTree = "<group>"; };
-		43D68C283BF65FD600000000 /* WatchExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; name = WatchExtension.appex; path = "tulsi-workspace/WatchExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C283FF4EFB600000000 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "tulsi-workspace/tulsi_e2e_watch/Library/srcs/main.m"; sourceTree = "<group>"; };
-		43D68C2840BBFB5200000000 /* Application.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = Application.app; path = "tulsi-workspace/Application.app"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C2849C0CECB00000000 /* BUILD */ = {isa = PBXFileReference; lastKnownFileType = text; name = BUILD; path = tulsi_e2e_watch/BUILD; sourceTree = "<group>"; };
 		43D68C284AC8D59B00000000 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = Info.plist; path = "tulsi-workspace/tulsi_e2e_watch/Watch2Extension/app_infoplists/Info.plist"; sourceTree = "<group>"; };
+		43D68C284E902D9E00000000 /* WatchApplication.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = WatchApplication.app; path = WatchApplication.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		43D68C2858A082E200000000 /* lib_idx_ApplicationLibrary_06BBE256_ios_min8.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_ApplicationLibrary_06BBE256_ios_min8.0.a; path = lib_idx_ApplicationLibrary_06BBE256_ios_min8.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C285B0DEC7800000000 /* entitlements.entitlements */ = {isa = PBXFileReference; lastKnownFileType = "com.apple.xcode.entitlements-property-list"; name = entitlements.entitlements; path = "tulsi-workspace/tulsi_e2e_watch/Application/entitlements.entitlements"; sourceTree = "<group>"; };
+		43D68C285F5DD83400000000 /* lib_idx_WatchExtensionLibrary_6997976B_watchos_min3.0.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = lib_idx_WatchExtensionLibrary_6997976B_watchos_min3.0.a; path = lib_idx_WatchExtensionLibrary_6997976B_watchos_min3.0.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C289E265EE800000000 /* ext_structured_resources.file */ = {isa = PBXFileReference; lastKnownFileType = dyn.age80q4pqqy; name = ext_structured_resources.file; path = "tulsi-workspace/tulsi_e2e_watch/Watch2Extension/ext_structured_resources.file"; sourceTree = "<group>"; };
 		43D68C289ECDDEA400000000 /* watch2_extension_binary.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = watch2_extension_binary.m; path = "tulsi-workspace/tulsi_e2e_watch/Watch2ExtensionBinary/srcs/watch2_extension_binary.m"; sourceTree = "<group>"; };
-		43D68C289EDFA4AA00000000 /* WatchApplication.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = WatchApplication.app; path = "tulsi-workspace/WatchApplication.app"; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28AFD9A63E00000000 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = Info.plist; path = "tulsi-workspace/tulsi_e2e_watch/Application/Info.plist"; sourceTree = "<group>"; };
 		43D68C28B713E4AE00000000 /* structured_resources.file1 */ = {isa = PBXFileReference; lastKnownFileType = dyn.age80q4pqqy2u; name = structured_resources.file1; path = "tulsi-workspace/tulsi_e2e_watch/Application/structured_resources.file1"; sourceTree = "<group>"; };
+		43D68C28BBC8EE6A00000000 /* WatchExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; name = WatchExtension.appex; path = WatchExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28EFD4953600000000 /* ext_entitlements.entitlements */ = {isa = PBXFileReference; lastKnownFileType = "com.apple.xcode.entitlements-property-list"; name = ext_entitlements.entitlements; path = "tulsi-workspace/tulsi_e2e_watch/Watch2Extension/ext_entitlements.entitlements"; sourceTree = "<group>"; };
+		43D68C28F49055A600000000 /* Application.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; name = Application.app; path = Application.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		43D68C28FC1765AB00000000 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = Info.plist; path = "tulsi-workspace/tulsi_e2e_watch/Watch2Extension/ext_infoplists/Info.plist"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXGroup section */
+		966FB6DE0562C2F700000000 /* Indexer */ = {
+			isa = PBXGroup;
+			children = (
+				43D68C2858A082E200000000 /* lib_idx_ApplicationLibrary_06BBE256_ios_min8.0.a */,
+				43D68C285F5DD83400000000 /* lib_idx_WatchExtensionLibrary_6997976B_watchos_min3.0.a */,
+			);
+			name = Indexer;
+			sourceTree = "<group>";
+		};
 		966FB6DE07201E0200000000 /* _tulsi-includes */ = {
 			isa = PBXGroup;
 			children = (
@@ -92,12 +101,11 @@
 		966FB6DE2BD1037D00000000 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				43D68C2840BBFB5200000000 /* Application.app */,
-				43D68C289EDFA4AA00000000 /* WatchApplication.app */,
-				43D68C283BF65FD600000000 /* WatchExtension.appex */,
+				43D68C28F49055A600000000 /* Application.app */,
+				966FB6DE0562C2F700000000 /* Indexer */,
+				43D68C284E902D9E00000000 /* WatchApplication.app */,
+				43D68C28BBC8EE6A00000000 /* WatchExtension.appex */,
 				966FB6DE07201E0200000000 /* _tulsi-includes */,
-				43D68C28035AF2CA00000000 /* lib_idx_ApplicationLibrary_06BBE256_ios_min8.0.a */,
-				43D68C281B86312000000000 /* lib_idx_WatchExtensionLibrary_6997976B_watchos_min3.0.a */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -219,7 +227,7 @@
 			);
 			name = _idx_WatchExtensionLibrary_6997976B_watchos_min3.0;
 			productName = _idx_WatchExtensionLibrary_6997976B_watchos_min3.0;
-			productReference = 43D68C281B86312000000000 /* lib_idx_WatchExtensionLibrary_6997976B_watchos_min3.0.a */;
+			productReference = 43D68C285F5DD83400000000 /* lib_idx_WatchExtensionLibrary_6997976B_watchos_min3.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E61E7C5AB400000000 /* WatchApplication */ = {
@@ -236,7 +244,7 @@
 			);
 			name = WatchApplication;
 			productName = WatchApplication;
-			productReference = 43D68C289EDFA4AA00000000 /* WatchApplication.app */;
+			productReference = 43D68C284E902D9E00000000 /* WatchApplication.app */;
 			productType = "com.apple.product-type.application.watchapp2";
 		};
 		3D31C5E66B144ABC00000000 /* Application */ = {
@@ -252,7 +260,7 @@
 			);
 			name = Application;
 			productName = Application;
-			productReference = 43D68C2840BBFB5200000000 /* Application.app */;
+			productReference = 43D68C28F49055A600000000 /* Application.app */;
 			productType = "com.apple.product-type.application";
 		};
 		3D31C5E6C6B1A54800000000 /* _idx_ApplicationLibrary_06BBE256_ios_min8.0 */ = {
@@ -268,7 +276,7 @@
 			);
 			name = _idx_ApplicationLibrary_06BBE256_ios_min8.0;
 			productName = _idx_ApplicationLibrary_06BBE256_ios_min8.0;
-			productReference = 43D68C28035AF2CA00000000 /* lib_idx_ApplicationLibrary_06BBE256_ios_min8.0.a */;
+			productReference = 43D68C2858A082E200000000 /* lib_idx_ApplicationLibrary_06BBE256_ios_min8.0.a */;
 			productType = "com.apple.product-type.library.static";
 		};
 		3D31C5E6CD47F3C600000000 /* WatchExtension */ = {
@@ -284,7 +292,7 @@
 			);
 			name = WatchExtension;
 			productName = WatchExtension;
-			productReference = 43D68C283BF65FD600000000 /* WatchExtension.appex */;
+			productReference = 43D68C28BBC8EE6A00000000 /* WatchExtension.appex */;
 			productType = "com.apple.product-type.watchkit2-extension";
 		};
 /* End PBXNativeTarget section */