diff --git a/src/TulsiGeneratorTests/BazelSettingsProviderTests.swift b/src/TulsiGeneratorTests/BazelSettingsProviderTests.swift
index 2f83ca0..9f7cf8e 100644
--- a/src/TulsiGeneratorTests/BazelSettingsProviderTests.swift
+++ b/src/TulsiGeneratorTests/BazelSettingsProviderTests.swift
@@ -13,6 +13,7 @@
 // limitations under the License.
 
 import XCTest
+
 @testable import TulsiGenerator
 
 class BazelSettingsProviderTests: XCTestCase {
@@ -22,25 +23,27 @@
   let buildRuleEntries = Set<RuleEntry>()
   let bazelSettingsProvider = BazelSettingsProvider(universalFlags: BazelFlags())
 
-
   func testBazelBuildSettingsProviderForWatchOS() {
     let options = TulsiOptionSet()
-    let settings = bazelSettingsProvider.buildSettings(bazel:bazel,
-                                                       bazelExecRoot: bazelExecRoot,
-                                                       options: options,
-                                                       features: features,
-                                                       buildRuleEntries: buildRuleEntries)
+    let settings = bazelSettingsProvider.buildSettings(
+      bazel: bazel,
+      bazelExecRoot: bazelExecRoot,
+      options: options,
+      features: features,
+      buildRuleEntries: buildRuleEntries)
 
     let expectedFlag = "--watchos_cpus=armv7k,arm64_32"
     let expectedIdentifiers = Set(["watchos_armv7k", "watchos_arm64_32", "ios_arm64", "ios_arm64e"])
     // Check that both watchos flags are set for both architectures.
     for (identifier, flags) in settings.platformConfigurationFlags {
-      if (expectedIdentifiers.contains(identifier)) {
-        XCTAssert(flags.contains(expectedFlag),
-                  "\(expectedFlag) flag was not set for \(identifier).")
+      if expectedIdentifiers.contains(identifier) {
+        XCTAssert(
+          flags.contains(expectedFlag),
+          "\(expectedFlag) flag was not set for \(identifier).")
       } else {
-        XCTAssert(!flags.contains(expectedFlag),
-                  "\(expectedFlag) flag was unexpectedly set for \(identifier).")
+        XCTAssert(
+          !flags.contains(expectedFlag),
+          "\(expectedFlag) flag was unexpectedly set for \(identifier).")
       }
     }
   }
diff --git a/src/TulsiGeneratorTests/BuildLabelTests.swift b/src/TulsiGeneratorTests/BuildLabelTests.swift
index ba59fe9..b098eaa 100644
--- a/src/TulsiGeneratorTests/BuildLabelTests.swift
+++ b/src/TulsiGeneratorTests/BuildLabelTests.swift
@@ -13,6 +13,7 @@
 // limitations under the License.
 
 import XCTest
+
 @testable import TulsiGenerator
 
 class BuildLabelTests: XCTestCase {
diff --git a/src/TulsiGeneratorTests/BuildSettingsTests.swift b/src/TulsiGeneratorTests/BuildSettingsTests.swift
index f1d2047..94e6af1 100644
--- a/src/TulsiGeneratorTests/BuildSettingsTests.swift
+++ b/src/TulsiGeneratorTests/BuildSettingsTests.swift
@@ -13,6 +13,7 @@
 // limitations under the License.
 
 import XCTest
+
 @testable import TulsiGenerator
 
 class BuildSettingsTests: XCTestCase {
@@ -21,6 +22,7 @@
     XCTAssert(BazelFlags().isEmpty)
     XCTAssertEqual(BazelFlags().toPython(""), "BazelFlags()")
   }
+
   func testBazelFlagsOperators() {
     let a = BazelFlags(startupStr: "a b", buildStr: "x y")
     let b = BazelFlags(startupStr: "c d", buildStr: "z 1")
@@ -35,10 +37,13 @@
     XCTAssertEqual(c.build, ["x", "y", "z", "1"])
     XCTAssertNotEqual(c, b + a)
   }
+
   func testBazelFlagsPythonable() {
     let startup = ["--startup-flag"]
     let build = ["--build-flag"]
-    XCTAssertEqual(BazelFlags(startup: startup, build: build).toPython(""), """
+    XCTAssertEqual(
+      BazelFlags(startup: startup, build: build).toPython(""),
+      """
 BazelFlags(
     startup = [
         '--startup-flag',
@@ -47,13 +52,15 @@
         '--build-flag',
     ],
 )
-""")
+"""
+    )
   }
 
   func testBazelFlagsSetEmpty() {
     XCTAssert(BazelFlagsSet().isEmpty)
     XCTAssertEqual(BazelFlagsSet().toPython(""), "BazelFlagsSet()")
   }
+
   func testBazelFlagsSetInitializers() {
     let basicFlagsSet = BazelFlagsSet(startupFlags: ["a"], buildFlags: ["b"])
     let basicFlags = BazelFlags(startup: ["a"], build: ["b"])
@@ -62,15 +69,19 @@
     XCTAssertEqual(basicFlagsSet.getFlags(forDebug: true), basicFlagsSet.debug)
     XCTAssertEqual(basicFlagsSet.getFlags(forDebug: false), basicFlagsSet.release)
 
-    let complexFlagSet = BazelFlagsSet(debug: BazelFlags(startup: ["a"], build: ["b"]),
-                                       release: BazelFlags(startup: ["x"], build: ["y"]),
-                                       common: BazelFlags(startup: ["1"], build: ["2"]))
+    let complexFlagSet = BazelFlagsSet(
+      debug: BazelFlags(startup: ["a"], build: ["b"]),
+      release: BazelFlags(startup: ["x"], build: ["y"]),
+      common: BazelFlags(startup: ["1"], build: ["2"]))
     XCTAssertEqual(complexFlagSet.debug, BazelFlags(startup: ["a", "1"], build: ["b", "2"]))
     XCTAssertEqual(complexFlagSet.release, BazelFlags(startup: ["x", "1"], build: ["y", "2"]))
   }
+
   func testBazelFlagsSetPythonable() {
     let basicFlagsSet = BazelFlagsSet(startupFlags: ["a"], buildFlags: ["b"])
-    XCTAssertEqual(basicFlagsSet.toPython(""), """
+    XCTAssertEqual(
+      basicFlagsSet.toPython(""),
+      """
 BazelFlagsSet(
     flags = BazelFlags(
         startup = [
@@ -81,11 +92,15 @@
         ],
     ),
 )
-""")
-    let complexFlagSet = BazelFlagsSet(debug: BazelFlags(startup: ["a"], build: ["b"]),
-                                       release: BazelFlags(startup: ["x"], build: ["y"]),
-                                       common: BazelFlags(startup: ["1"], build: ["2"]))
-    XCTAssertEqual(complexFlagSet.toPython(""), """
+"""
+    )
+    let complexFlagSet = BazelFlagsSet(
+      debug: BazelFlags(startup: ["a"], build: ["b"]),
+      release: BazelFlags(startup: ["x"], build: ["y"]),
+      common: BazelFlags(startup: ["1"], build: ["2"]))
+    XCTAssertEqual(
+      complexFlagSet.toPython(""),
+      """
 BazelFlagsSet(
     debug = BazelFlags(
         startup = [
@@ -108,48 +123,54 @@
         ],
     ),
 )
-""")
+"""
+    )
   }
 
-    func testBazelBuildSettingsPythonable() {
-      let bazel = "/path/to/bazel"
-      let bazelExecRoot = "__MOCK_EXEC_ROOT__"
-      let defaultIdentifier = "fake_config"
-      let platformConfigurationFlags = [
-        "fake_config": ["a", "b"],
-        "another_one": ["--x", "-c"],
-      ]
+  func testBazelBuildSettingsPythonable() {
+    let bazel = "/path/to/bazel"
+    let bazelExecRoot = "__MOCK_EXEC_ROOT__"
+    let defaultIdentifier = "fake_config"
+    let platformConfigurationFlags = [
+      "fake_config": ["a", "b"],
+      "another_one": ["--x", "-c"],
+    ]
 
-      let swiftTargets: Set<String> = [
-          "//dir/swiftTarget:swiftTarget",
-          "//dir/nested/depOnswift:depOnswift"
-      ]
-      let cacheAffecting = BazelFlagsSet(startupFlags: ["--nocacheStartup"],
-                                         buildFlags: ["--nocacheBuild"])
-      let cacheSafe = BazelFlagsSet(startupFlags: ["--cacheSafeStartup"],
-                                    buildFlags: ["--cacheSafeBuild"])
-      let swift = BazelFlagsSet(buildFlags: ["--swift-only"])
-      let nonSwift = BazelFlagsSet(startupFlags: ["--non-swift-only"])
-      let projDefaults = BazelFlagsSet()
-      let projTargetFlags = [
-          "//dir/some/customized:target": BazelFlagsSet(buildFlags: ["a", "b"]),
-      ]
-      let swiftFeatures = [BazelSettingFeature.DebugPathNormalization.stringValue]
-      let nonSwiftFeatures = [BazelSettingFeature.DebugPathNormalization.stringValue]
-      let settings = BazelBuildSettings(bazel: bazel,
-                                        bazelExecRoot: bazelExecRoot,
-                                        defaultPlatformConfigIdentifier: defaultIdentifier,
-                                        platformConfigurationFlags: platformConfigurationFlags,
-                                        swiftTargets: swiftTargets,
-                                        tulsiCacheAffectingFlagsSet: cacheAffecting,
-                                        tulsiCacheSafeFlagSet: cacheSafe,
-                                        tulsiSwiftFlagSet: swift,
-                                        tulsiNonSwiftFlagSet: nonSwift,
-                                        swiftFeatures: swiftFeatures,
-                                        nonSwiftFeatures: nonSwiftFeatures,
-                                        projDefaultFlagSet: projDefaults,
-                                        projTargetFlagSets: projTargetFlags)
-      XCTAssertEqual(settings.toPython(""), """
+    let swiftTargets: Set<String> = [
+      "//dir/swiftTarget:swiftTarget",
+      "//dir/nested/depOnswift:depOnswift",
+    ]
+    let cacheAffecting = BazelFlagsSet(
+      startupFlags: ["--nocacheStartup"],
+      buildFlags: ["--nocacheBuild"])
+    let cacheSafe = BazelFlagsSet(
+      startupFlags: ["--cacheSafeStartup"],
+      buildFlags: ["--cacheSafeBuild"])
+    let swift = BazelFlagsSet(buildFlags: ["--swift-only"])
+    let nonSwift = BazelFlagsSet(startupFlags: ["--non-swift-only"])
+    let projDefaults = BazelFlagsSet()
+    let projTargetFlags = [
+      "//dir/some/customized:target": BazelFlagsSet(buildFlags: ["a", "b"]),
+    ]
+    let swiftFeatures = [BazelSettingFeature.DebugPathNormalization.stringValue]
+    let nonSwiftFeatures = [BazelSettingFeature.DebugPathNormalization.stringValue]
+    let settings = BazelBuildSettings(
+      bazel: bazel,
+      bazelExecRoot: bazelExecRoot,
+      defaultPlatformConfigIdentifier: defaultIdentifier,
+      platformConfigurationFlags: platformConfigurationFlags,
+      swiftTargets: swiftTargets,
+      tulsiCacheAffectingFlagsSet: cacheAffecting,
+      tulsiCacheSafeFlagSet: cacheSafe,
+      tulsiSwiftFlagSet: swift,
+      tulsiNonSwiftFlagSet: nonSwift,
+      swiftFeatures: swiftFeatures,
+      nonSwiftFeatures: nonSwiftFeatures,
+      projDefaultFlagSet: projDefaults,
+      projTargetFlagSets: projTargetFlags)
+    XCTAssertEqual(
+      settings.toPython(""),
+      """
 BazelBuildSettings(
     '\(bazel)',
     '\(bazelExecRoot)',
@@ -165,6 +186,7 @@
     \(projDefaults.toPython("    ")),
     \(projTargetFlags.toPython("    ")),
 )
-""")
+"""
+    )
   }
 }
diff --git a/src/TulsiGeneratorTests/CommandLineSplitterTests.swift b/src/TulsiGeneratorTests/CommandLineSplitterTests.swift
index bb28a47..e659670 100644
--- a/src/TulsiGeneratorTests/CommandLineSplitterTests.swift
+++ b/src/TulsiGeneratorTests/CommandLineSplitterTests.swift
@@ -13,8 +13,8 @@
 // limitations under the License.
 
 import XCTest
-@testable import TulsiGenerator
 
+@testable import TulsiGenerator
 
 class CommandLineSplitterTests: XCTestCase {
   var splitter: CommandLineSplitter! = nil
diff --git a/src/TulsiGeneratorTests/MockLocalizedMessageLogger.swift b/src/TulsiGeneratorTests/MockLocalizedMessageLogger.swift
index 9942661..c5f186a 100644
--- a/src/TulsiGeneratorTests/MockLocalizedMessageLogger.swift
+++ b/src/TulsiGeneratorTests/MockLocalizedMessageLogger.swift
@@ -13,6 +13,7 @@
 // limitations under the License.
 
 import XCTest
+
 @testable import TulsiGenerator
 
 // Stub LocalizedMessageLogger that does nothing.
@@ -20,21 +21,27 @@
   var syslogMessages = [String]()
   var infoMessages = [String]()
   var warningMessageKeys = [String]()
+
   let nonFatalWarningKeys = Set([
     "BootstrapLLDBInitFailed",
-    "CleanCachedDsymsFailed"
+    "CleanCachedDsymsFailed",
   ])
+
   var errorMessageKeys = [String]()
 
   init() {
     super.init(bundle: nil)
   }
 
-  override func error(_ key: String, comment: String, details: String?, context: String?, values: CVarArg...) {
+  override func error(
+    _ key: String, comment: String, details: String?, context: String?, values: CVarArg...
+  ) {
     errorMessageKeys.append(key)
   }
 
-  override func warning(_ key: String, comment: String, details: String?, context: String?, values: CVarArg...) {
+  override func warning(
+    _ key: String, comment: String, details: String?, context: String?, values: CVarArg...
+  ) {
     warningMessageKeys.append(key)
   }
 
@@ -47,17 +54,19 @@
   }
 
   func assertNoErrors(_ file: StaticString = #file, line: UInt = #line) {
-    XCTAssert(errorMessageKeys.isEmpty,
-              "Unexpected error messages printed: \(errorMessageKeys)",
-              file: file,
-              line: line)
+    XCTAssert(
+      errorMessageKeys.isEmpty,
+      "Unexpected error messages printed: \(errorMessageKeys)",
+      file: file,
+      line: line)
   }
 
   func assertNoWarnings(_ file: StaticString = #file, line: UInt = #line) {
     let hasOnlyNonFatalWarnings = Set(warningMessageKeys).isSubset(of: nonFatalWarningKeys)
-    XCTAssert(warningMessageKeys.isEmpty || hasOnlyNonFatalWarnings,
-              "Unexpected warning messages printed: \(warningMessageKeys)",
-              file: file,
-              line: line)
+    XCTAssert(
+      warningMessageKeys.isEmpty || hasOnlyNonFatalWarnings,
+      "Unexpected warning messages printed: \(warningMessageKeys)",
+      file: file,
+      line: line)
   }
 }
diff --git a/src/TulsiGeneratorTests/MockWorkspaceInfoExtractor.swift b/src/TulsiGeneratorTests/MockWorkspaceInfoExtractor.swift
index 1d80cfc..c0a0270 100644
--- a/src/TulsiGeneratorTests/MockWorkspaceInfoExtractor.swift
+++ b/src/TulsiGeneratorTests/MockWorkspaceInfoExtractor.swift
@@ -13,6 +13,7 @@
 // limitations under the License.
 
 import Foundation
+
 @testable import TulsiGenerator
 
 class MockBazelSettingsProvider: BazelSettingsProviderProtocol {
@@ -21,30 +22,35 @@
     return BazelFlags()
   }
 
-  func tulsiFlags(hasSwift: Bool,
-                  options: TulsiOptionSet?,
-                  features: Set<BazelSettingFeature>) -> BazelFlagsSet {
+  func tulsiFlags(
+    hasSwift: Bool,
+    options: TulsiOptionSet?,
+    features: Set<BazelSettingFeature>
+  ) -> BazelFlagsSet {
     return BazelFlagsSet()
   }
 
-  func buildSettings(bazel: String,
-                     bazelExecRoot: String,
-                     options: TulsiOptionSet,
-                     features: Set<BazelSettingFeature>,
-                     buildRuleEntries: Set<RuleEntry>) -> BazelBuildSettings {
-    return BazelBuildSettings(bazel: bazel,
-                              bazelExecRoot: bazelExecRoot,
-                              defaultPlatformConfigIdentifier: "",
-                              platformConfigurationFlags: nil,
-                              swiftTargets: [],
-                              tulsiCacheAffectingFlagsSet: BazelFlagsSet(),
-                              tulsiCacheSafeFlagSet: BazelFlagsSet(),
-                              tulsiSwiftFlagSet: BazelFlagsSet(),
-                              tulsiNonSwiftFlagSet: BazelFlagsSet(),
-                              swiftFeatures: [],
-                              nonSwiftFeatures: [],
-                              projDefaultFlagSet: BazelFlagsSet(),
-                              projTargetFlagSets: [:])
+  func buildSettings(
+    bazel: String,
+    bazelExecRoot: String,
+    options: TulsiOptionSet,
+    features: Set<BazelSettingFeature>,
+    buildRuleEntries: Set<RuleEntry>
+  ) -> BazelBuildSettings {
+    return BazelBuildSettings(
+      bazel: bazel,
+      bazelExecRoot: bazelExecRoot,
+      defaultPlatformConfigIdentifier: "",
+      platformConfigurationFlags: nil,
+      swiftTargets: [],
+      tulsiCacheAffectingFlagsSet: BazelFlagsSet(),
+      tulsiCacheSafeFlagSet: BazelFlagsSet(),
+      tulsiSwiftFlagSet: BazelFlagsSet(),
+      tulsiNonSwiftFlagSet: BazelFlagsSet(),
+      swiftFeatures: [],
+      nonSwiftFeatures: [],
+      projDefaultFlagSet: BazelFlagsSet(),
+      projTargetFlagSets: [:])
   }
 }
 
@@ -53,27 +59,31 @@
   let bazelSettingsProvider: BazelSettingsProviderProtocol = MockBazelSettingsProvider()
 
   var labelToRuleEntry = [BuildLabel: RuleEntry]()
+
   /// The set of labels passed to ruleEntriesForLabels that could not be found in the
   /// labelToRuleEntry dictionary.
   var invalidLabels = Set<BuildLabel>()
 
   var bazelURL = URL(fileURLWithPath: "")
   var bazelBinPath = "bazel-bin"
-  var bazelExecutionRoot = "/private/var/tmp/_bazel_localhost/1234567890abcdef1234567890abcdef/execroot/workspace_dir"
+  var bazelExecutionRoot
+    = "/private/var/tmp/_bazel_localhost/1234567890abcdef1234567890abcdef/execroot/workspace_dir"
   var workspaceRootURL = URL(fileURLWithPath: "")
 
   func extractRuleInfoFromProject(_ project: TulsiProject) -> [RuleInfo] {
     return []
   }
 
-  func ruleEntriesForLabels(_ labels: [BuildLabel],
-                            startupOptions: TulsiOption,
-                            extraStartupOptions: TulsiOption,
-                            buildOptions: TulsiOption,
-                            compilationModeOption: TulsiOption,
-                            platformConfigOption: TulsiOption,
-                            prioritizeSwiftOption: TulsiOption,
-                            features: Set<BazelSettingFeature>) throws -> RuleEntryMap {
+  func ruleEntriesForLabels(
+    _ labels: [BuildLabel],
+    startupOptions: TulsiOption,
+    extraStartupOptions: TulsiOption,
+    buildOptions: TulsiOption,
+    compilationModeOption: TulsiOption,
+    platformConfigOption: TulsiOption,
+    prioritizeSwiftOption: TulsiOption,
+    features: Set<BazelSettingFeature>
+  ) throws -> RuleEntryMap {
     invalidLabels.removeAll(keepingCapacity: true)
     let ret = RuleEntryMap()
     for label in labels {
@@ -86,7 +96,8 @@
     return ret
   }
 
-  func extractBuildfiles<T:Collection>(_ forTargets: T) -> Set<BuildLabel> where T.Iterator.Element == BuildLabel {
+  func extractBuildfiles<T: Collection>(_ forTargets: T) -> Set<BuildLabel>
+  where T.Iterator.Element == BuildLabel {
     return Set()
   }
 
diff --git a/src/TulsiGeneratorTests/NSURLExtensionsTests.swift b/src/TulsiGeneratorTests/NSURLExtensionsTests.swift
index 6e5373f..899c2b7 100644
--- a/src/TulsiGeneratorTests/NSURLExtensionsTests.swift
+++ b/src/TulsiGeneratorTests/NSURLExtensionsTests.swift
@@ -13,8 +13,8 @@
 // limitations under the License.
 
 import XCTest
-@testable import TulsiGenerator
 
+@testable import TulsiGenerator
 
 class NSURLExtensionsTests: XCTestCase {
   func testRelativePathOfEqualPaths() {
diff --git a/src/TulsiGeneratorTests/PBXObjectsTests.swift b/src/TulsiGeneratorTests/PBXObjectsTests.swift
index bc15e4c..fc6fde6 100644
--- a/src/TulsiGeneratorTests/PBXObjectsTests.swift
+++ b/src/TulsiGeneratorTests/PBXObjectsTests.swift
@@ -13,8 +13,8 @@
 // limitations under the License.
 
 import XCTest
-@testable import TulsiGenerator
 
+@testable import TulsiGenerator
 
 class PBXObjectsTests: XCTestCase {
   enum ExpectedStructure {
@@ -37,28 +37,40 @@
 
   func testProjectCreateGroupsAndFileReferencesForPaths() {
     let paths = [
-        "root",
-        "test/file",
-        "deeply/nested/files/1",
-        "deeply/nested/files/2",
-        "/empty/component",
+      "root",
+      "test/file",
+      "deeply/nested/files/1",
+      "deeply/nested/files/2",
+      "/empty/component",
     ]
     let expectedStructure: [ExpectedStructure] = [
-        .fileReference("root"),
-        .group("test", contents: [
-            .fileReference("test/file"),
+      .fileReference("root"),
+      .group(
+        "test",
+        contents: [
+          .fileReference("test/file"),
         ]),
-        .group("deeply", contents: [
-            .group("nested", contents: [
-                .group("files", contents: [
-                    .fileReference("deeply/nested/files/1"),
-                    .fileReference("deeply/nested/files/2"),
+      .group(
+        "deeply",
+        contents: [
+          .group(
+            "nested",
+            contents: [
+              .group(
+                "files",
+                contents: [
+                  .fileReference("deeply/nested/files/1"),
+                  .fileReference("deeply/nested/files/2"),
                 ]),
             ]),
         ]),
-        .group("/", contents: [
-            .group("empty", contents: [
-                .fileReference("/empty/component"),
+      .group(
+        "/",
+        contents: [
+          .group(
+            "empty",
+            contents: [
+              .fileReference("/empty/component"),
             ]),
         ]),
     ]
@@ -76,26 +88,30 @@
 
   func testProjectCreateGroupsAndFileReferencesForPathsMultiplePaths() {
     let paths1 = [
-        "1",
-        "unique/1",
-        "overlapping/file"
+      "1",
+      "unique/1",
+      "overlapping/file",
     ]
     let paths2 = [
-        "2",
-        "unique/2",
-        "overlapping/file",
-        "overlapping/2"
+      "2",
+      "unique/2",
+      "overlapping/file",
+      "overlapping/2",
     ]
     let expectedStructure: [ExpectedStructure] = [
-        .fileReference("1"),
-        .fileReference("2"),
-        .group("unique", contents: [
-            .fileReference("unique/1"),
-            .fileReference("unique/2"),
+      .fileReference("1"),
+      .fileReference("2"),
+      .group(
+        "unique",
+        contents: [
+          .fileReference("unique/1"),
+          .fileReference("unique/2"),
         ]),
-        .group("overlapping", contents: [
-            .fileReference("overlapping/file"),
-            .fileReference("overlapping/2"),
+      .group(
+        "overlapping",
+        contents: [
+          .fileReference("overlapping/file"),
+          .fileReference("overlapping/2"),
         ]),
     ]
 
@@ -106,17 +122,19 @@
 
   func testProjectCreateGroupsAndFileReferencesForBundlePath() {
     let paths = [
-        "test",
-        "bundle.xcassets/test_content",
-        "subdir/test.app/file_inside",
-        "subdir/test2.app/dir_inside/file_inside",
+      "test",
+      "bundle.xcassets/test_content",
+      "subdir/test.app/file_inside",
+      "subdir/test2.app/dir_inside/file_inside",
     ]
     let expectedStructure: [ExpectedStructure] = [
-        .fileReference("test"),
-        .fileReference("bundle.xcassets"),
-        .group("subdir", contents: [
-            .fileReference("subdir/test.app"),
-            .fileReference("subdir/test2.app"),
+      .fileReference("test"),
+      .fileReference("bundle.xcassets"),
+      .group(
+        "subdir",
+        contents: [
+          .fileReference("subdir/test.app"),
+          .fileReference("subdir/test2.app"),
         ]),
     ]
 
@@ -126,16 +144,16 @@
 
   func testSourceRelativePathGeneration() {
     let paths = [
-        "1",
-        "test/2",
-        "deeply/nested/files/3",
-        "deeply/nested/files/4"
+      "1",
+      "test/2",
+      "deeply/nested/files/3",
+      "deeply/nested/files/4",
     ]
     let expectedSourceRelativePaths = [
-        "1": "1",
-        "test/2": "test/2",
-        "deeply/nested/files/3": "deeply/nested/files/3",
-        "deeply/nested/files/4": "deeply/nested/files/4"
+      "1": "1",
+      "test/2": "test/2",
+      "deeply/nested/files/3": "deeply/nested/files/3",
+      "deeply/nested/files/4": "deeply/nested/files/4",
     ]
     project.getOrCreateGroupsAndFileReferencesForPaths(paths)
     for fileRef in project.mainGroup.allSources {
@@ -145,11 +163,11 @@
   }
 
   func testPBXReferenceFileExtension() {
-    let filenameToExt: Dictionary<String, String?> = [
-        "test.file": "file",
-        "test": nil,
-        "test.something.ext": "ext",
-        "/someplace/test.something.ext": "ext",
+    let filenameToExt: [String: String?] = [
+      "test.file": "file",
+      "test": nil,
+      "test.something.ext": "ext",
+      "/someplace/test.something.ext": "ext",
     ]
 
     for (filename, ext) in filenameToExt {
@@ -163,10 +181,10 @@
 
   func testPBXReferenceUTI() {
     let fileExtensionsToTest = [
-        "a",
-        "dylib",
-        "swift",
-        "xib",
+      "a",
+      "dylib",
+      "swift",
+      "xib",
     ]
     for ext in fileExtensionsToTest {
       let filename = "filename.\(ext)"
@@ -179,10 +197,10 @@
     }
 
     let bundleExtensionsToTest = [
-        "app",
-        "bundle",
-        "xcassets",
-        "xcstickers",
+      "app",
+      "bundle",
+      "xcassets",
+      "xcstickers",
     ]
     for ext in bundleExtensionsToTest {
       let filename = "filename.\(ext)"
@@ -204,15 +222,21 @@
       "external/project/src/file.ext",
     ]
     let expectedStructure: [ExpectedStructure] = [
-      .group("dir", contents: [
-        .fileReference("dir/file"),
-      ]),
-      .groupWithName("@project", path: movedDir, contents: [
-        .fileReference("README.md"),
-        .group("src", contents: [
-          .fileReference("src/file.ext"),
+      .group(
+        "dir",
+        contents: [
+          .fileReference("dir/file"),
         ]),
-      ]),
+      .groupWithName(
+        "@project", path: movedDir,
+        contents: [
+          .fileReference("README.md"),
+          .group(
+            "src",
+            contents: [
+              .fileReference("src/file.ext"),
+            ]),
+        ]),
     ]
 
     project.getOrCreateGroupsAndFileReferencesForPaths(paths)
@@ -227,14 +251,14 @@
         continue
       }
 
-      let newChild = mainGroup.getOrCreateChildGroupByName("@\(child.name)",
-                                                           path: movedDir,
-                                                           sourceTree: .Absolute)
+      let newChild = mainGroup.getOrCreateChildGroupByName(
+        "@\(child.name)",
+        path: movedDir,
+        sourceTree: .Absolute)
       newChild.migrateChildrenOfGroup(group)
     }
     mainGroup.removeChild(extGroup)
 
-
     assertProjectStructure(expectedStructure, forGroup: project.mainGroup)
   }
 
@@ -244,9 +268,11 @@
       "en.lproj/Localizable.strings",
     ]
     let expectedStructure: [ExpectedStructure] = [
-        .variantGroup("Localizable.strings", contents: [
-            .fileReferenceWithName("Base", path: "Base.lproj/Localizable.strings"),
-            .fileReferenceWithName("en", path: "en.lproj/Localizable.strings"),
+      .variantGroup(
+        "Localizable.strings",
+        contents: [
+          .fileReferenceWithName("Base", path: "Base.lproj/Localizable.strings"),
+          .fileReferenceWithName("en", path: "en.lproj/Localizable.strings"),
         ]),
     ]
 
@@ -256,62 +282,71 @@
 
   // MARK: - Helper methods
 
-  func assertProjectStructure(_ expectedStructure: [ExpectedStructure],
-                              forGroup group: PBXGroup,
-                              line: UInt = #line) {
-    XCTAssertEqual(group.children.count,
-                   expectedStructure.count,
-                   "Mismatch in child count for group '\(group.name)'",
-                   line: line)
+  func assertProjectStructure(
+    _ expectedStructure: [ExpectedStructure],
+    forGroup group: PBXGroup,
+    line: UInt = #line
+  ) {
+    XCTAssertEqual(
+      group.children.count,
+      expectedStructure.count,
+      "Mismatch in child count for group '\(group.name)'",
+      line: line)
 
     for element in expectedStructure {
       switch element {
-        case .fileReference(let name):
-          assertGroup(group, containsSourceTree: .Group, path: name, line: line)
+      case .fileReference(let name):
+        assertGroup(group, containsSourceTree: .Group, path: name, line: line)
 
-        case .fileReferenceWithName(let name, let path):
-          assertGroup(group, containsSourceTree: .Group, path: path, name: name, line: line)
+      case .fileReferenceWithName(let name, let path):
+        assertGroup(group, containsSourceTree: .Group, path: path, name: name, line: line)
 
-        case .group(let name, let grandChildren):
-          let childGroup = assertGroup(group, containsGroupWithName: name, line: line)
-          assertProjectStructure(grandChildren, forGroup: childGroup, line: line)
+      case .group(let name, let grandChildren):
+        let childGroup = assertGroup(group, containsGroupWithName: name, line: line)
+        assertProjectStructure(grandChildren, forGroup: childGroup, line: line)
 
-        case .groupWithName(let name, let path, let grandChildren):
-          let childGroup = assertGroup(group, containsGroupWithName: name, path: path, line: line)
-          assertProjectStructure(grandChildren, forGroup: childGroup, line: line)
+      case .groupWithName(let name, let path, let grandChildren):
+        let childGroup = assertGroup(group, containsGroupWithName: name, path: path, line: line)
+        assertProjectStructure(grandChildren, forGroup: childGroup, line: line)
 
-        case .variantGroup(let name, let grandChildren):
-          let childVariantGroup = assertGroup(group, containsVariantGroupWithName: name, line: line)
-          assertProjectStructure(grandChildren, forGroup: childVariantGroup, line: line)
+      case .variantGroup(let name, let grandChildren):
+        let childVariantGroup = assertGroup(group, containsVariantGroupWithName: name, line: line)
+        assertProjectStructure(grandChildren, forGroup: childVariantGroup, line: line)
       }
     }
   }
 
   @discardableResult
-  func assertGroup(_ group: PBXGroup,
-                   containsSourceTree sourceTree: SourceTree,
-                   path: String,
-                   name: String? = nil,
-                   line: UInt = #line) -> PBXFileReference {
+  func assertGroup(
+    _ group: PBXGroup,
+    containsSourceTree sourceTree: SourceTree,
+    path: String,
+    name: String? = nil,
+    line: UInt = #line
+  ) -> PBXFileReference {
     let sourceTreePath = SourceTreePath(sourceTree: sourceTree, path: path)
     let fileRef = group.fileReferencesBySourceTreePath[sourceTreePath]
-    XCTAssertNotNil(fileRef,
-                    "Failed to find expected PBXFileReference '\(path)' in group '\(group.name)",
-                    line: line)
+    XCTAssertNotNil(
+      fileRef,
+      "Failed to find expected PBXFileReference '\(path)' in group '\(group.name)",
+      line: line)
     if let name = name {
       XCTAssertEqual(name, fileRef!.name)
     }
     return fileRef!
   }
 
-  func assertGroup(_ group: PBXGroup,
-                   containsGroupWithName name: String,
-                   path: String? = nil,
-                   line: UInt = #line) -> PBXGroup {
+  func assertGroup(
+    _ group: PBXGroup,
+    containsGroupWithName name: String,
+    path: String? = nil,
+    line: UInt = #line
+  ) -> PBXGroup {
     let child = group.childGroupsByName[name]
-    XCTAssertNotNil(child,
-                    "Failed to find child group '\(name)' in group '\(group.name)'",
-                    line: line)
+    XCTAssertNotNil(
+      child,
+      "Failed to find child group '\(name)' in group '\(group.name)'",
+      line: line)
     if let path = path {
       XCTAssertNotNil(child!.path, "Expected child \(child!) to have a non-nil path")
       XCTAssertEqual(child!.path, path, "Child path \(child!.path!) != expected path \(path)")
@@ -321,13 +356,16 @@
     return child!
   }
 
-  func assertGroup(_ group: PBXGroup,
-                   containsVariantGroupWithName name: String,
-                   line: UInt = #line) -> PBXGroup {
+  func assertGroup(
+    _ group: PBXGroup,
+    containsVariantGroupWithName name: String,
+    line: UInt = #line
+  ) -> PBXGroup {
     let child = group.childVariantGroupsByName[name]
-    XCTAssertNotNil(child,
-                    "Failed to find child variant group '\(name)' in group '\(group.name)'",
-                    line: line)
+    XCTAssertNotNil(
+      child,
+      "Failed to find child variant group '\(name)' in group '\(group.name)'",
+      line: line)
     return child!
   }
 }
diff --git a/src/TulsiGeneratorTests/PBXProjSerializerTests.swift b/src/TulsiGeneratorTests/PBXProjSerializerTests.swift
index 9cb034e..3fde2f7 100644
--- a/src/TulsiGeneratorTests/PBXProjSerializerTests.swift
+++ b/src/TulsiGeneratorTests/PBXProjSerializerTests.swift
@@ -13,6 +13,7 @@
 // limitations under the License.
 
 import XCTest
+
 @testable import TulsiGenerator
 
 typealias StringToObjectDict = [String: NSObject]
@@ -34,7 +35,7 @@
 
   func testOpenStepSerializesEmptyDictionaries() {
     let config = project.buildConfigurationList.getOrCreateBuildConfiguration("Empty")
-    config.buildSettings = Dictionary<String, String>()
+    config.buildSettings = [String: String]()
     config.globalID = gidGenerator.generateReservedID()
 
     guard let openStepData = serializer.serialize() else {
@@ -43,18 +44,22 @@
     }
     let root: StringToObjectDict
     do {
-      root = try PropertyListSerialization.propertyList(from: openStepData,
-          options: [], format: nil) as! StringToObjectDict
+      root = try PropertyListSerialization.propertyList(
+        from: openStepData,
+        options: [], format: nil) as! StringToObjectDict
     } catch let error as NSError {
       let serializedData = String(data: openStepData, encoding: String.Encoding.utf8)!
-      XCTFail("Failed to parse OpenStep serialized data " + error.localizedDescription + "\n" + serializedData)
+      XCTFail(
+        "Failed to parse OpenStep serialized data " + error.localizedDescription + "\n"
+          + serializedData)
       return
     }
 
     let objects = root["objects"] as! StringToObjectDict
-    let buildConfigDict: StringToObjectDict! = getObjectByID(config.globalID,
-                                                             withPBXClass: "XCBuildConfiguration",
-                                                             fromObjects: objects)
+    let buildConfigDict: StringToObjectDict! = getObjectByID(
+      config.globalID,
+      withPBXClass: "XCBuildConfiguration",
+      fromObjects: objects)
     XCTAssertNotNil(buildConfigDict["buildSettings"])
   }
 
@@ -92,7 +97,8 @@
     let gid: String
     let isInputFile: Bool
 
-    init(sourceTree: SourceTree, path: String, uti: String?, gid: String, isInputFile: Bool = true) {
+    init(sourceTree: SourceTree, path: String, uti: String?, gid: String, isInputFile: Bool = true)
+    {
       self.sourceTree = sourceTree
       self.path = path
       self.uti = uti
@@ -102,11 +108,12 @@
 
     init(sourceTree: SourceTree, path: String, gid: String, isInputFile: Bool = true) {
       let uti = FileExtensionToUTI[(path as NSString).pathExtension]
-      self.init(sourceTree: sourceTree,
-                path: path,
-                uti: uti,
-                gid: gid,
-                isInputFile: isInputFile)
+      self.init(
+        sourceTree: sourceTree,
+        path: path,
+        uti: uti,
+        gid: gid,
+        isInputFile: isInputFile)
     }
   }
 
@@ -120,13 +127,15 @@
     let groups: [GroupDefinition]
     let expectedPBXClass: String
 
-    init(name: String,
-         sourceTree: SourceTree,
-         path: String?,
-         gid: String,
-         files: [FileDefinition],
-         groups: [GroupDefinition],
-         expectedPBXClass: String = "PBXGroup") {
+    init(
+      name: String,
+      sourceTree: SourceTree,
+      path: String?,
+      gid: String,
+      files: [FileDefinition],
+      groups: [GroupDefinition],
+      expectedPBXClass: String = "PBXGroup"
+    ) {
       self.name = name
       self.sourceTree = sourceTree
       self.path = path
@@ -139,13 +148,14 @@
     func groupByAddingGroup(_ group: GroupDefinition) -> GroupDefinition {
       var newGroups = groups
       newGroups.append(group)
-      return GroupDefinition(name: name,
-                             sourceTree: sourceTree,
-                             path: path,
-                             gid: gid,
-                             files: files,
-                             groups: newGroups,
-                             expectedPBXClass: expectedPBXClass)
+      return GroupDefinition(
+        name: name,
+        sourceTree: sourceTree,
+        path: path,
+        gid: gid,
+        files: files,
+        groups: newGroups,
+        expectedPBXClass: expectedPBXClass)
     }
   }
 
@@ -153,27 +163,30 @@
     let currentVersion: FileDefinition
     let versionGroupType: String
 
-    init(name: String,
-         sourceTree: SourceTree,
-         path: String?,
-         gid: String,
-         files: [FileDefinition],
-         groups: [GroupDefinition],
-         currentVersion: FileDefinition,
-         versionGroupType: String? = nil) {
+    init(
+      name: String,
+      sourceTree: SourceTree,
+      path: String?,
+      gid: String,
+      files: [FileDefinition],
+      groups: [GroupDefinition],
+      currentVersion: FileDefinition,
+      versionGroupType: String? = nil
+    ) {
       self.currentVersion = currentVersion
       if let versionGroupType = versionGroupType {
         self.versionGroupType = versionGroupType
       } else {
         self.versionGroupType = FileExtensionToUTI[(name as NSString).pathExtension] ?? ""
       }
-      super.init(name: name,
-                 sourceTree: sourceTree,
-                 path: path,
-                 gid: gid,
-                 files: files,
-                 groups: groups,
-                 expectedPBXClass: "XCVersionGroup")
+      super.init(
+        name: name,
+        sourceTree: sourceTree,
+        path: path,
+        gid: gid,
+        files: files,
+        groups: groups,
+        expectedPBXClass: "XCVersionGroup")
     }
   }
 
@@ -181,7 +194,7 @@
   struct SimpleProjectDefinition {
     struct NativeTargetDefinition {
       let name: String
-      let settings: Dictionary<String, String>
+      let settings: [String: String]
       let config: String
       let targetType: PBXTarget.ProductType
     }
@@ -194,7 +207,7 @@
     }
 
     let projectLevelBuildConfigName: String
-    let projectLevelBuildConfigSettings: Dictionary<String, String>
+    let projectLevelBuildConfigSettings: [String: String]
     let nativeTarget: NativeTargetDefinition
     let legacyTarget: LegacyTargetDefinition
     let mainGroupGID: String
@@ -206,19 +219,25 @@
   }
 
   @discardableResult
-  private func populateProject(_ targetProject: PBXProject, withGIDGenerator generator: MockGIDGenerator) -> SimpleProjectDefinition {
+  private func populateProject(
+    _ targetProject: PBXProject, withGIDGenerator generator: MockGIDGenerator
+  ) -> SimpleProjectDefinition {
     let projectLevelBuildConfigName = "ProjectConfig"
-    let projectLevelBuildConfigSettings = ["TEST_SETTING": "test_setting",
-                                           "QuotedSetting": "Quoted string value"]
-    let nativeTarget = SimpleProjectDefinition.NativeTargetDefinition(name: "NativeApplicationTarget",
-        settings: ["PRODUCT_NAME": "ProductName", "QuotedValue": "A quoted value"],
-        config: "Config1",
-        targetType: PBXTarget.ProductType.Application
+    let projectLevelBuildConfigSettings = [
+      "TEST_SETTING": "test_setting",
+      "QuotedSetting": "Quoted string value"
+    ]
+    let nativeTarget = SimpleProjectDefinition.NativeTargetDefinition(
+      name: "NativeApplicationTarget",
+      settings: ["PRODUCT_NAME": "ProductName", "QuotedValue": "A quoted value"],
+      config: "Config1",
+      targetType: PBXTarget.ProductType.Application
     )
-    let legacyTarget = SimpleProjectDefinition.LegacyTargetDefinition(name: "LegacyTarget",
-        buildToolPath: "buildToolPath",
-        buildArguments: "buildArguments",
-        buildWorkingDirectory: "buildWorkingDirectory")
+    let legacyTarget = SimpleProjectDefinition.LegacyTargetDefinition(
+      name: "LegacyTarget",
+      buildToolPath: "buildToolPath",
+      buildArguments: "buildArguments",
+      buildWorkingDirectory: "buildWorkingDirectory")
 
     // Note: This test relies on the fact that the current serializer implementation preserves the
     // GIDs of any objects it attempts to serialize.
@@ -226,93 +245,120 @@
     let mainGroupDefinition: GroupDefinition
     do {
       let mainGroupFiles = [
-          FileDefinition(sourceTree: .Group, path: "GroupFile.swift", gid: generator.generateReservedID()),
-          FileDefinition(sourceTree: .Absolute, path: "/fake/path/AbsoluteFile.swift", gid: generator.generateReservedID()),
+        FileDefinition(
+          sourceTree: .Group, path: "GroupFile.swift", gid: generator.generateReservedID()),
+        FileDefinition(
+          sourceTree: .Absolute, path: "/fake/path/AbsoluteFile.swift",
+          gid: generator.generateReservedID()),
       ]
-      let activeDatamodelVersion = FileDefinition(sourceTree: .Group,
-                                                  path: "v2.xcdatamodel",
-                                                  uti: DirExtensionToUTI["xcdatamodel"],
-                                                  gid: generator.generateReservedID(),
-                                                  isInputFile: true)
+      let activeDatamodelVersion = FileDefinition(
+        sourceTree: .Group,
+        path: "v2.xcdatamodel",
+        uti: DirExtensionToUTI["xcdatamodel"],
+        gid: generator.generateReservedID(),
+        isInputFile: true)
       let mainGroupGroups = [
-          GroupDefinition(name: "Products",
-              sourceTree: .Group,
-              path: nil,
-              gid: generator.generateReservedID(),
-              files: [],
-              groups: []
-          ),
-          GroupDefinition(name: "ChildGroup",
-              sourceTree: .Group,
-              path: "child_group_path",
-              gid: generator.generateReservedID(),
-              files: [
-                  FileDefinition(sourceTree: .Group, path: "ChildRelativeFile.swift", gid: generator.generateReservedID()),
-                  FileDefinition(sourceTree: .Group, path: "t.a", gid: generator.generateReservedID()),
-                  FileDefinition(sourceTree: .Group, path: "t.dylib", gid: generator.generateReservedID()),
-                  FileDefinition(sourceTree: .Group, path: "t.framework", gid: generator.generateReservedID()),
-                  FileDefinition(sourceTree: .Group, path: "t.jpg", gid: generator.generateReservedID()),
-                  FileDefinition(sourceTree: .Group, path: "t.m", gid: generator.generateReservedID()),
-                  FileDefinition(sourceTree: .Group, path: "t.mm", gid: generator.generateReservedID()),
-                  FileDefinition(sourceTree: .Group, path: "t.pch", gid: generator.generateReservedID()),
-                  FileDefinition(sourceTree: .Group, path: "t.plist", gid: generator.generateReservedID()),
-                  FileDefinition(sourceTree: .Group, path: "t.png", gid: generator.generateReservedID()),
-                  FileDefinition(sourceTree: .Group, path: "t.rtf", gid: generator.generateReservedID()),
-                  FileDefinition(sourceTree: .Group, path: "t.storyboard", gid: generator.generateReservedID()),
-                  FileDefinition(sourceTree: .Group, path: "t.xcassets", uti: DirExtensionToUTI["xcassets"], gid: generator.generateReservedID()),
-                  FileDefinition(sourceTree: .Group, path: "t.xcstickers", uti: DirExtensionToUTI["xcstickers"], gid: generator.generateReservedID()),
-                  FileDefinition(sourceTree: .Group, path: "t.xib", gid: generator.generateReservedID()),
-                  FileDefinition(sourceTree: .Group, path: "Test", uti: "text", gid: generator.generateReservedID()),
-                  FileDefinition(sourceTree: .Group, path: "Output.app", gid: generator.generateReservedID(), isInputFile: false),
-              ],
-              groups: []
-          ),
-          VersionGroupDefinition(name: "DataModel.xcdatamodeld",
-                                 sourceTree: .Group,
-                                 path: "DataModel.xcdatamodeld",
-                                 gid: generator.generateReservedID(),
-                                 files: [
-                                     FileDefinition(sourceTree: .Group,
-                                                    path: "v1.xcdatamodel",
-                                                    uti: DirExtensionToUTI["xcdatamodel"],
-                                                    gid: generator.generateReservedID(),
-                                                    isInputFile: true),
-                                     activeDatamodelVersion,
-                                 ],
-                                 groups: [],
-                                 currentVersion: activeDatamodelVersion,
-                                 versionGroupType: DirExtensionToUTI["xcdatamodeld"]
-          )
-      ]
-      mainGroupDefinition = GroupDefinition(name: "mainGroup",
-          sourceTree: .SourceRoot,
+        GroupDefinition(
+          name: "Products",
+          sourceTree: .Group,
           path: nil,
-          gid: mainGroupGID,
-          files: mainGroupFiles,
-          groups: mainGroupGroups)
+          gid: generator.generateReservedID(),
+          files: [],
+          groups: []
+        ),
+        GroupDefinition(
+          name: "ChildGroup",
+          sourceTree: .Group,
+          path: "child_group_path",
+          gid: generator.generateReservedID(),
+          files: [
+            FileDefinition(
+              sourceTree: .Group, path: "ChildRelativeFile.swift",
+              gid: generator.generateReservedID()),
+            FileDefinition(sourceTree: .Group, path: "t.a", gid: generator.generateReservedID()),
+            FileDefinition(
+              sourceTree: .Group, path: "t.dylib", gid: generator.generateReservedID()),
+            FileDefinition(
+              sourceTree: .Group, path: "t.framework", gid: generator.generateReservedID()),
+            FileDefinition(sourceTree: .Group, path: "t.jpg", gid: generator.generateReservedID()),
+            FileDefinition(sourceTree: .Group, path: "t.m", gid: generator.generateReservedID()),
+            FileDefinition(sourceTree: .Group, path: "t.mm", gid: generator.generateReservedID()),
+            FileDefinition(sourceTree: .Group, path: "t.pch", gid: generator.generateReservedID()),
+            FileDefinition(
+              sourceTree: .Group, path: "t.plist", gid: generator.generateReservedID()),
+            FileDefinition(sourceTree: .Group, path: "t.png", gid: generator.generateReservedID()),
+            FileDefinition(sourceTree: .Group, path: "t.rtf", gid: generator.generateReservedID()),
+            FileDefinition(
+              sourceTree: .Group, path: "t.storyboard", gid: generator.generateReservedID()),
+            FileDefinition(
+              sourceTree: .Group, path: "t.xcassets", uti: DirExtensionToUTI["xcassets"],
+              gid: generator.generateReservedID()),
+            FileDefinition(
+              sourceTree: .Group, path: "t.xcstickers", uti: DirExtensionToUTI["xcstickers"],
+              gid: generator.generateReservedID()),
+            FileDefinition(sourceTree: .Group, path: "t.xib", gid: generator.generateReservedID()),
+            FileDefinition(
+              sourceTree: .Group, path: "Test", uti: "text", gid: generator.generateReservedID()),
+            FileDefinition(
+              sourceTree: .Group, path: "Output.app", gid: generator.generateReservedID(),
+              isInputFile: false),
+          ],
+          groups: []
+        ),
+        VersionGroupDefinition(
+          name: "DataModel.xcdatamodeld",
+          sourceTree: .Group,
+          path: "DataModel.xcdatamodeld",
+          gid: generator.generateReservedID(),
+          files: [
+            FileDefinition(
+              sourceTree: .Group,
+              path: "v1.xcdatamodel",
+              uti: DirExtensionToUTI["xcdatamodel"],
+              gid: generator.generateReservedID(),
+              isInputFile: true),
+            activeDatamodelVersion,
+          ],
+          groups: [],
+          currentVersion: activeDatamodelVersion,
+          versionGroupType: DirExtensionToUTI["xcdatamodeld"]
+        ),
+      ]
+      mainGroupDefinition = GroupDefinition(
+        name: "mainGroup",
+        sourceTree: .SourceRoot,
+        path: nil,
+        gid: mainGroupGID,
+        files: mainGroupFiles,
+        groups: mainGroupGroups)
     }
-    let definition = SimpleProjectDefinition(projectLevelBuildConfigName: projectLevelBuildConfigName,
-        projectLevelBuildConfigSettings: projectLevelBuildConfigSettings,
-        nativeTarget: nativeTarget,
-        legacyTarget: legacyTarget,
-        mainGroupGID: mainGroupGID,
-        mainGroupDefinition: mainGroupDefinition
+    let definition = SimpleProjectDefinition(
+      projectLevelBuildConfigName: projectLevelBuildConfigName,
+      projectLevelBuildConfigSettings: projectLevelBuildConfigSettings,
+      nativeTarget: nativeTarget,
+      legacyTarget: legacyTarget,
+      mainGroupGID: mainGroupGID,
+      mainGroupDefinition: mainGroupDefinition
     )
 
     do {
-      let config = targetProject.buildConfigurationList.getOrCreateBuildConfiguration(projectLevelBuildConfigName)
+      let config = targetProject.buildConfigurationList.getOrCreateBuildConfiguration(
+        projectLevelBuildConfigName)
       config.buildSettings = projectLevelBuildConfigSettings
     }
-    let nativePBXTarget = targetProject.createNativeTarget(nativeTarget.name,
-                                                           deploymentTarget: nil,
-                                                           targetType: nativeTarget.targetType)
-    let config = nativePBXTarget.buildConfigurationList.getOrCreateBuildConfiguration(nativeTarget.config)
+    let nativePBXTarget = targetProject.createNativeTarget(
+      nativeTarget.name,
+      deploymentTarget: nil,
+      targetType: nativeTarget.targetType)
+    let config = nativePBXTarget.buildConfigurationList.getOrCreateBuildConfiguration(
+      nativeTarget.config)
     config.buildSettings = nativeTarget.settings
-    let legacyPBXTarget = targetProject.createLegacyTarget(legacyTarget.name,
-                                                           deploymentTarget: nil,
-                                                           buildToolPath: legacyTarget.buildToolPath,
-                                                           buildArguments: legacyTarget.buildArguments,
-                                                           buildWorkingDirectory: legacyTarget.buildWorkingDirectory)
+    let legacyPBXTarget = targetProject.createLegacyTarget(
+      legacyTarget.name,
+      deploymentTarget: nil,
+      buildToolPath: legacyTarget.buildToolPath,
+      buildArguments: legacyTarget.buildArguments,
+      buildWorkingDirectory: legacyTarget.buildWorkingDirectory)
     targetProject.linkTestTarget(legacyPBXTarget, toHostTarget: nativePBXTarget)
 
     do {
@@ -326,12 +372,14 @@
         for childDef in groupDefinition.groups {
           let childGroup: PBXGroup
           if let versionedChildDef = childDef as? VersionGroupDefinition {
-            let versionGroup = group.getOrCreateChildVersionGroupByName(versionedChildDef.name,
-                                                                        path: versionedChildDef.path)
+            let versionGroup = group.getOrCreateChildVersionGroupByName(
+              versionedChildDef.name,
+              path: versionedChildDef.path)
             versionGroup.versionGroupType = versionedChildDef.versionGroupType
             let currentVersionDef = versionedChildDef.currentVersion
-            let currentFileRef = versionGroup.getOrCreateFileReferenceBySourceTree(currentVersionDef.sourceTree,
-                                                                                   path: currentVersionDef.path)
+            let currentFileRef = versionGroup.getOrCreateFileReferenceBySourceTree(
+              currentVersionDef.sourceTree,
+              path: currentVersionDef.path)
             currentFileRef.globalID = currentVersionDef.gid
             currentFileRef.isInputFile = currentVersionDef.isInputFile
             versionGroup.currentVersion = currentFileRef
@@ -350,18 +398,23 @@
     return definition
   }
 
-  private func assertDict(_ dict: StringToObjectDict, isPBXObjectClass pbxClass: String, line: UInt = #line) {
+  private func assertDict(
+    _ dict: StringToObjectDict, isPBXObjectClass pbxClass: String, line: UInt = #line
+  ) {
     guard let isa = dict["isa"] as? String else {
       XCTFail("dictionary is not a PBXObject (missing 'isa' member)", line: line)
       return
     }
-    XCTAssertEqual(isa, pbxClass, "Serialized dict is not of the expected PBXObject type", line: line)
+    XCTAssertEqual(
+      isa, pbxClass, "Serialized dict is not of the expected PBXObject type", line: line)
   }
 
-  private func getObjectByID(_ gid: String,
-                             withPBXClass pbxClass: String,
-                             fromObjects objects: StringToObjectDict,
-                             line: UInt = #line) -> StringToObjectDict? {
+  private func getObjectByID(
+    _ gid: String,
+    withPBXClass pbxClass: String,
+    fromObjects objects: StringToObjectDict,
+    line: UInt = #line
+  ) -> StringToObjectDict? {
     guard let dict = objects[gid] as? StringToObjectDict else {
       XCTFail("Missing \(pbxClass) with globalID '\(gid)'", line: line)
       return nil
@@ -370,7 +423,6 @@
     return dict
   }
 
-
   /// Generates predictable GlobalID's for use in tests.
   // Note, this implementation is only suitable for projects with less than 4 billion objects.
   class MockGIDGenerator: GIDGeneratorProtocol {
@@ -385,13 +437,13 @@
 
     // MARK: - Methods for testing.
     func generateReservedID() -> String {
-      let reservedID = gidForCounter(nextID, prefix: 0xBAADF00D)
+      let reservedID = gidForCounter(nextID, prefix: 0xBAAD_F00D)
       nextID += 1
       return reservedID
     }
 
-    private func gidForCounter(_ counter : Int, prefix: Int = 0) -> String {
-      return String(format: "%08X%08X%08X", prefix, 0, counter & 0xFFFFFFFF)
+    private func gidForCounter(_ counter: Int, prefix: Int = 0) -> String {
+      return String(format: "%08X%08X%08X", prefix, 0, counter & 0xFFFF_FFFF)
     }
   }
 }
diff --git a/src/TulsiGeneratorTests/PBXTargetGeneratorTests.swift b/src/TulsiGeneratorTests/PBXTargetGeneratorTests.swift
index 9ecb372..e7abdce 100644
--- a/src/TulsiGeneratorTests/PBXTargetGeneratorTests.swift
+++ b/src/TulsiGeneratorTests/PBXTargetGeneratorTests.swift
@@ -13,6 +13,7 @@
 // limitations under the License.
 
 import XCTest
+
 @testable import TulsiGenerator
 
 // Note: Rather than test the serializer's output, we make use of the knowledge that
@@ -20,10 +21,13 @@
 class PBXTargetGeneratorTests: XCTestCase {
   let bazelPath = "__BAZEL_BINARY_"
   let workspaceRootURL = URL(fileURLWithPath: "/workspaceRootURL", isDirectory: true)
-  let stubPlistPaths = StubInfoPlistPaths(resourcesDirectory: "${PROJECT_FILE_PATH}/.tulsi/Resources",
-                                          defaultStub: "TestInfo.plist",
-                                          watchOSStub: "TestWatchOS2Info.plist",
-                                          watchOSAppExStub: "TestWatchOS2AppExInfo.plist")
+
+  let stubPlistPaths = StubInfoPlistPaths(
+    resourcesDirectory: "${PROJECT_FILE_PATH}/.tulsi/Resources",
+    defaultStub: "TestInfo.plist",
+    watchOSStub: "TestWatchOS2Info.plist",
+    watchOSAppExStub: "TestWatchOS2AppExInfo.plist")
+
   let testTulsiVersion = "9.99.999.9999"
   var project: PBXProject! = nil
   var targetGenerator: PBXTargetGenerator! = nil
@@ -31,15 +35,16 @@
   override func setUp() {
     super.setUp()
     project = PBXProject(name: "TestProject")
-    targetGenerator = PBXTargetGenerator(bazelPath: bazelPath,
-                                         bazelBinPath: "bazel-bin",
-                                         project: project,
-                                         buildScriptPath: "",
-                                         stubInfoPlistPaths: stubPlistPaths,
-                                         tulsiVersion: testTulsiVersion,
-                                         options: TulsiOptionSet(),
-                                         localizedMessageLogger: MockLocalizedMessageLogger(),
-                                         workspaceRootURL: workspaceRootURL)
+    targetGenerator = PBXTargetGenerator(
+      bazelPath: bazelPath,
+      bazelBinPath: "bazel-bin",
+      project: project,
+      buildScriptPath: "",
+      stubInfoPlistPaths: stubPlistPaths,
+      tulsiVersion: testTulsiVersion,
+      options: TulsiOptionSet(),
+      localizedMessageLogger: MockLocalizedMessageLogger(),
+      workspaceRootURL: workspaceRootURL)
 
   }
 
@@ -53,7 +58,9 @@
     let fileRef = project.mainGroup.allSources.first!
     let sourceRelativePath = fileRef.sourceRootRelativePath
     XCTAssertEqual(sourceRelativePath, buildFilePath)
-    XCTAssertEqual(fileRef.sourceTree, SourceTree.Group, "SourceTree mismatch for generated BUILD file \(buildFilePath)")
+    XCTAssertEqual(
+      fileRef.sourceTree, SourceTree.Group,
+      "SourceTree mismatch for generated BUILD file \(buildFilePath)")
   }
 
   func testGenerateFileReferenceForBUILDFilePaths() {
@@ -62,51 +69,76 @@
     XCTAssertEqual(project.mainGroup.children.count, buildFilePaths.count)
 
     for fileRef in project.mainGroup.allSources {
-      XCTAssert(buildFilePaths.contains(fileRef.sourceRootRelativePath), "Path mismatch for generated BUILD file \(String(describing: fileRef.path))")
-      XCTAssertEqual(fileRef.sourceTree, SourceTree.Group, "SourceTree mismatch for generated BUILD file \(String(describing: fileRef.path))")
+      XCTAssert(
+        buildFilePaths.contains(fileRef.sourceRootRelativePath),
+        "Path mismatch for generated BUILD file \(String(describing: fileRef.path))")
+      XCTAssertEqual(
+        fileRef.sourceTree, SourceTree.Group,
+        "SourceTree mismatch for generated BUILD file \(String(describing: fileRef.path))")
     }
   }
 
   func testMainGroupForOutputFolder() {
-    func assertOutputFolder(_ output: String,
-                            workspace: String,
-                            generatesSourceTree sourceTree: SourceTree,
-                            path: String?,
-                            line: UInt = #line) {
+    func assertOutputFolder(
+      _ output: String,
+      workspace: String,
+      generatesSourceTree sourceTree: SourceTree,
+      path: String?,
+      line: UInt = #line
+    ) {
       let outputURL = URL(fileURLWithPath: output, isDirectory: true)
       let workspaceURL = URL(fileURLWithPath: workspace, isDirectory: true)
-      let group = PBXTargetGenerator.mainGroupForOutputFolder(outputURL,
-                                                              workspaceRootURL: workspaceURL)
+      let group = PBXTargetGenerator.mainGroupForOutputFolder(
+        outputURL,
+        workspaceRootURL: workspaceURL)
       XCTAssertEqual(group.sourceTree, sourceTree, line: line)
       XCTAssertEqual(group.path, path, line: line)
     }
 
     assertOutputFolder("/", workspace: "/", generatesSourceTree: .SourceRoot, path: nil)
     assertOutputFolder("/output", workspace: "/output", generatesSourceTree: .SourceRoot, path: nil)
-    assertOutputFolder("/output/", workspace: "/output", generatesSourceTree: .SourceRoot, path: nil)
-    assertOutputFolder("/output", workspace: "/output/", generatesSourceTree: .SourceRoot, path: nil)
+    assertOutputFolder(
+      "/output/", workspace: "/output", generatesSourceTree: .SourceRoot, path: nil)
+    assertOutputFolder(
+      "/output", workspace: "/output/", generatesSourceTree: .SourceRoot, path: nil)
     assertOutputFolder("/", workspace: "/output", generatesSourceTree: .SourceRoot, path: "output")
-    assertOutputFolder("/output", workspace: "/output/workspace", generatesSourceTree: .SourceRoot, path: "workspace")
-    assertOutputFolder("/output/", workspace: "/output/workspace", generatesSourceTree: .SourceRoot, path: "workspace")
-    assertOutputFolder("/output", workspace: "/output/workspace/", generatesSourceTree: .SourceRoot, path: "workspace")
-    assertOutputFolder("/output", workspace: "/output/deep/path/workspace", generatesSourceTree: .SourceRoot, path: "deep/path/workspace")
-    assertOutputFolder("/path/to/workspace/output", workspace: "/path/to/workspace", generatesSourceTree: .SourceRoot, path: "..")
+    assertOutputFolder(
+      "/output", workspace: "/output/workspace", generatesSourceTree: .SourceRoot, path: "workspace"
+    )
+    assertOutputFolder(
+      "/output/", workspace: "/output/workspace", generatesSourceTree: .SourceRoot,
+      path: "workspace")
+    assertOutputFolder(
+      "/output", workspace: "/output/workspace/", generatesSourceTree: .SourceRoot,
+      path: "workspace")
+    assertOutputFolder(
+      "/output", workspace: "/output/deep/path/workspace", generatesSourceTree: .SourceRoot,
+      path: "deep/path/workspace")
+    assertOutputFolder(
+      "/path/to/workspace/output", workspace: "/path/to/workspace",
+      generatesSourceTree: .SourceRoot, path: "..")
     assertOutputFolder("/output", workspace: "/", generatesSourceTree: .SourceRoot, path: "..")
     assertOutputFolder("/output/", workspace: "/", generatesSourceTree: .SourceRoot, path: "..")
-    assertOutputFolder("/path/to/workspace/three/deep/output", workspace: "/path/to/workspace", generatesSourceTree: .SourceRoot, path: "../../..")
-    assertOutputFolder("/path/to/output", workspace: "/elsewhere/workspace", generatesSourceTree: .Absolute, path: "/elsewhere/workspace")
+    assertOutputFolder(
+      "/path/to/workspace/three/deep/output", workspace: "/path/to/workspace",
+      generatesSourceTree: .SourceRoot, path: "../../..")
+    assertOutputFolder(
+      "/path/to/output", workspace: "/elsewhere/workspace", generatesSourceTree: .Absolute,
+      path: "/elsewhere/workspace")
   }
 }
 
-
 class PBXTargetGeneratorTestsWithFiles: XCTestCase {
   let bazelPath = "__BAZEL_BINARY_"
   let workspaceRootURL = URL(fileURLWithPath: "/workspaceRootURL", isDirectory: true)
   let sdkRoot = "sdkRoot"
-  let stubPlistPaths = StubInfoPlistPaths(resourcesDirectory:"${PROJECT_ROOT}/asd",
-                                          defaultStub: "TestInfo.plist",
-                                          watchOSStub: "TestWatchOS2Info.plist",
-                                          watchOSAppExStub: "TestWatchOS2AppExInfo.plist")
+
+  let stubPlistPaths = StubInfoPlistPaths(
+    resourcesDirectory: "${PROJECT_ROOT}/asd",
+    defaultStub: "TestInfo.plist",
+    watchOSStub: "TestWatchOS2Info.plist",
+    watchOSAppExStub: "TestWatchOS2AppExInfo.plist")
+
   let testTulsiVersion = "9.99.999.9999"
 
   var project: PBXProject! = nil
@@ -128,15 +160,16 @@
     pchFile = project.mainGroup.getOrCreateFileReferenceBySourceTree(.Group, path: "pch.pch")
     let options = TulsiOptionSet()
     messageLogger = MockLocalizedMessageLogger()
-    targetGenerator = PBXTargetGenerator(bazelPath: bazelPath,
-                                         bazelBinPath: "bazel-bin",
-                                         project: project,
-                                         buildScriptPath: "",
-                                         stubInfoPlistPaths: stubPlistPaths,
-                                         tulsiVersion: testTulsiVersion,
-                                         options: options,
-                                         localizedMessageLogger: messageLogger,
-                                         workspaceRootURL: workspaceRootURL)
+    targetGenerator = PBXTargetGenerator(
+      bazelPath: bazelPath,
+      bazelBinPath: "bazel-bin",
+      project: project,
+      buildScriptPath: "",
+      stubInfoPlistPaths: stubPlistPaths,
+      tulsiVersion: testTulsiVersion,
+      options: options,
+      localizedMessageLogger: messageLogger,
+      workspaceRootURL: workspaceRootURL)
   }
 
   // MARK: - Tests
@@ -160,7 +193,9 @@
 
   func testGenerateBazelCleanTargetAppliesToRulesAddedBeforeAndAfter() {
     do {
-      try targetGenerator.generateBuildTargetsForRuleEntries([makeTestRuleEntry("before", type: "ios_application", productType: .Application)], ruleEntryMap: RuleEntryMap())
+      try targetGenerator.generateBuildTargetsForRuleEntries(
+        [makeTestRuleEntry("before", type: "ios_application", productType: .Application)],
+        ruleEntryMap: RuleEntryMap())
     } catch let e as NSError {
       XCTFail("Failed to generate build targets with error \(e.localizedDescription)")
     }
@@ -168,7 +203,9 @@
     targetGenerator.generateBazelCleanTarget("scriptPath")
 
     do {
-      try targetGenerator.generateBuildTargetsForRuleEntries([makeTestRuleEntry("after", type: "ios_application", productType: .Application)], ruleEntryMap: RuleEntryMap())
+      try targetGenerator.generateBuildTargetsForRuleEntries(
+        [makeTestRuleEntry("after", type: "ios_application", productType: .Application)],
+        ruleEntryMap: RuleEntryMap())
     } catch let e as NSError {
       XCTFail("Failed to generate build targets with error \(e.localizedDescription)")
     }
@@ -181,13 +218,20 @@
 
     for target in project.allTargets {
       if target === integrationTarget { continue }
-      XCTAssertEqual(target.dependencies.count, 1, "Mismatch in dependency count for target added \(target.name)")
+      XCTAssertEqual(
+        target.dependencies.count, 1, "Mismatch in dependency count for target added \(target.name)"
+      )
       let targetProxy = target.dependencies[0].targetProxy
-      XCTAssert(targetProxy.containerPortal === project, "Mismatch in container for dependency in target added \(target.name)")
-      XCTAssert(targetProxy.target === integrationTarget, "Mismatch in target dependency for target added \(target.name)")
-      XCTAssertEqual(targetProxy.proxyType,
-          PBXContainerItemProxy.ProxyType.targetReference,
-          "Mismatch in target dependency type for target added \(target.name)")
+      XCTAssert(
+        targetProxy.containerPortal === project,
+        "Mismatch in container for dependency in target added \(target.name)")
+      XCTAssert(
+        targetProxy.target === integrationTarget,
+        "Mismatch in target dependency for target added \(target.name)")
+      XCTAssertEqual(
+        targetProxy.proxyType,
+        PBXContainerItemProxy.ProxyType.targetReference,
+        "Mismatch in target dependency type for target added \(target.name)")
     }
   }
 
@@ -198,48 +242,52 @@
     XCTAssertEqual(topLevelConfigs.count, 4)
 
     let topLevelBuildSettings = [
-        "ALWAYS_SEARCH_USER_PATHS": "NO",
-        "CLANG_CXX_LANGUAGE_STANDARD": "c++11",
-        "CLANG_ENABLE_OBJC_ARC": "YES",
-        "CLANG_WARN_BOOL_CONVERSION": "YES",
-        "CLANG_WARN_CONSTANT_CONVERSION": "YES",
-        "CLANG_WARN_EMPTY_BODY": "YES",
-        "CLANG_WARN_ENUM_CONVERSION": "YES",
-        "CLANG_WARN_INT_CONVERSION": "YES",
-        "CLANG_WARN_UNREACHABLE_CODE": "YES",
-        "CLANG_WARN__DUPLICATE_METHOD_MATCH": "YES",
-        "CODE_SIGNING_REQUIRED": "NO",
-        "CODE_SIGN_IDENTITY": "",
-        "DONT_RUN_SWIFT_STDLIB_TOOL": "YES",
-        "ENABLE_TESTABILITY": "YES",
-        "FRAMEWORK_SEARCH_PATHS": "$(PLATFORM_DIR)/Developer/Library/Frameworks",
-        "GCC_WARN_64_TO_32_BIT_CONVERSION": "YES",
-        "GCC_WARN_ABOUT_RETURN_TYPE": "YES",
-        "GCC_WARN_UNDECLARED_SELECTOR": "YES",
-        "GCC_WARN_UNINITIALIZED_AUTOS": "YES",
-        "GCC_WARN_UNUSED_FUNCTION": "YES",
-        "GCC_WARN_UNUSED_VARIABLE": "YES",
-        "HEADER_SEARCH_PATHS": "$(TULSI_BWRS) $(TULSI_WR)/bazel-bin $(TULSI_WR)/bazel-genfiles "
-                               + "$(TULSI_BWRS)/\(PBXTargetGenerator.tulsiIncludesPath)",
-        "ONLY_ACTIVE_ARCH": "YES",
-        "PYTHONIOENCODING": "utf8",
-        "TULSI_VERSION": testTulsiVersion,
-        "TULSI_WR": "$(SRCROOT)",
-        "TULSI_BWRS": "$(PROJECT_FILE_PATH)/.tulsi/tulsi-workspace",
+      "ALWAYS_SEARCH_USER_PATHS": "NO",
+      "CLANG_CXX_LANGUAGE_STANDARD": "c++11",
+      "CLANG_ENABLE_OBJC_ARC": "YES",
+      "CLANG_WARN_BOOL_CONVERSION": "YES",
+      "CLANG_WARN_CONSTANT_CONVERSION": "YES",
+      "CLANG_WARN_EMPTY_BODY": "YES",
+      "CLANG_WARN_ENUM_CONVERSION": "YES",
+      "CLANG_WARN_INT_CONVERSION": "YES",
+      "CLANG_WARN_UNREACHABLE_CODE": "YES",
+      "CLANG_WARN__DUPLICATE_METHOD_MATCH": "YES",
+      "CODE_SIGNING_REQUIRED": "NO",
+      "CODE_SIGN_IDENTITY": "",
+      "DONT_RUN_SWIFT_STDLIB_TOOL": "YES",
+      "ENABLE_TESTABILITY": "YES",
+      "FRAMEWORK_SEARCH_PATHS": "$(PLATFORM_DIR)/Developer/Library/Frameworks",
+      "GCC_WARN_64_TO_32_BIT_CONVERSION": "YES",
+      "GCC_WARN_ABOUT_RETURN_TYPE": "YES",
+      "GCC_WARN_UNDECLARED_SELECTOR": "YES",
+      "GCC_WARN_UNINITIALIZED_AUTOS": "YES",
+      "GCC_WARN_UNUSED_FUNCTION": "YES",
+      "GCC_WARN_UNUSED_VARIABLE": "YES",
+      "HEADER_SEARCH_PATHS": "$(TULSI_BWRS) $(TULSI_WR)/bazel-bin $(TULSI_WR)/bazel-genfiles "
+        + "$(TULSI_BWRS)/\(PBXTargetGenerator.tulsiIncludesPath)",
+      "ONLY_ACTIVE_ARCH": "YES",
+      "PYTHONIOENCODING": "utf8",
+      "TULSI_VERSION": testTulsiVersion,
+      "TULSI_WR": "$(SRCROOT)",
+      "TULSI_BWRS": "$(PROJECT_FILE_PATH)/.tulsi/tulsi-workspace",
     ]
 
     XCTAssertNotNil(topLevelConfigs["Debug"])
-    XCTAssertEqual(topLevelConfigs["Debug"]!.buildSettings,
-                   debugBuildSettingsFromSettings(topLevelBuildSettings))
+    XCTAssertEqual(
+      topLevelConfigs["Debug"]!.buildSettings,
+      debugBuildSettingsFromSettings(topLevelBuildSettings))
     XCTAssertNotNil(topLevelConfigs["Release"])
-    XCTAssertEqual(topLevelConfigs["Release"]!.buildSettings,
-                   releaseBuildSettingsFromSettings(topLevelBuildSettings))
+    XCTAssertEqual(
+      topLevelConfigs["Release"]!.buildSettings,
+      releaseBuildSettingsFromSettings(topLevelBuildSettings))
     XCTAssertNotNil(topLevelConfigs["__TulsiTestRunner_Debug"])
-    XCTAssertEqual(topLevelConfigs["__TulsiTestRunner_Debug"]!.buildSettings,
-                   debugTestRunnerBuildSettingsFromSettings(topLevelBuildSettings))
+    XCTAssertEqual(
+      topLevelConfigs["__TulsiTestRunner_Debug"]!.buildSettings,
+      debugTestRunnerBuildSettingsFromSettings(topLevelBuildSettings))
     XCTAssertNotNil(topLevelConfigs["__TulsiTestRunner_Release"])
-    XCTAssertEqual(topLevelConfigs["__TulsiTestRunner_Release"]!.buildSettings,
-                   releaseTestRunnerBuildSettingsFromSettings(topLevelBuildSettings))
+    XCTAssertEqual(
+      topLevelConfigs["__TulsiTestRunner_Release"]!.buildSettings,
+      releaseTestRunnerBuildSettingsFromSettings(topLevelBuildSettings))
   }
 
   func testGenerateTopLevelBuildConfigurationsWithAnSDKROOT() {
@@ -250,49 +298,53 @@
     XCTAssertEqual(topLevelConfigs.count, 4)
 
     let topLevelBuildSettings = [
-        "ALWAYS_SEARCH_USER_PATHS": "NO",
-        "CLANG_CXX_LANGUAGE_STANDARD": "c++11",
-        "CLANG_ENABLE_OBJC_ARC": "YES",
-        "CLANG_WARN_BOOL_CONVERSION": "YES",
-        "CLANG_WARN_CONSTANT_CONVERSION": "YES",
-        "CLANG_WARN_EMPTY_BODY": "YES",
-        "CLANG_WARN_ENUM_CONVERSION": "YES",
-        "CLANG_WARN_INT_CONVERSION": "YES",
-        "CLANG_WARN_UNREACHABLE_CODE": "YES",
-        "CLANG_WARN__DUPLICATE_METHOD_MATCH": "YES",
-        "CODE_SIGNING_REQUIRED": "NO",
-        "CODE_SIGN_IDENTITY": "",
-        "DONT_RUN_SWIFT_STDLIB_TOOL": "YES",
-        "ENABLE_TESTABILITY": "YES",
-        "FRAMEWORK_SEARCH_PATHS": "$(PLATFORM_DIR)/Developer/Library/Frameworks",
-        "GCC_WARN_64_TO_32_BIT_CONVERSION": "YES",
-        "GCC_WARN_ABOUT_RETURN_TYPE": "YES",
-        "GCC_WARN_UNDECLARED_SELECTOR": "YES",
-        "GCC_WARN_UNINITIALIZED_AUTOS": "YES",
-        "GCC_WARN_UNUSED_FUNCTION": "YES",
-        "GCC_WARN_UNUSED_VARIABLE": "YES",
-        "HEADER_SEARCH_PATHS": "$(TULSI_BWRS) $(TULSI_WR)/bazel-bin $(TULSI_WR)/bazel-genfiles "
-                               + "$(TULSI_BWRS)/\(PBXTargetGenerator.tulsiIncludesPath)",
-        "SDKROOT": projectSDKROOT,
-        "ONLY_ACTIVE_ARCH": "YES",
-        "PYTHONIOENCODING": "utf8",
-        "TULSI_VERSION": testTulsiVersion,
-        "TULSI_WR": "$(SRCROOT)",
-        "TULSI_BWRS": "$(PROJECT_FILE_PATH)/.tulsi/tulsi-workspace",
+      "ALWAYS_SEARCH_USER_PATHS": "NO",
+      "CLANG_CXX_LANGUAGE_STANDARD": "c++11",
+      "CLANG_ENABLE_OBJC_ARC": "YES",
+      "CLANG_WARN_BOOL_CONVERSION": "YES",
+      "CLANG_WARN_CONSTANT_CONVERSION": "YES",
+      "CLANG_WARN_EMPTY_BODY": "YES",
+      "CLANG_WARN_ENUM_CONVERSION": "YES",
+      "CLANG_WARN_INT_CONVERSION": "YES",
+      "CLANG_WARN_UNREACHABLE_CODE": "YES",
+      "CLANG_WARN__DUPLICATE_METHOD_MATCH": "YES",
+      "CODE_SIGNING_REQUIRED": "NO",
+      "CODE_SIGN_IDENTITY": "",
+      "DONT_RUN_SWIFT_STDLIB_TOOL": "YES",
+      "ENABLE_TESTABILITY": "YES",
+      "FRAMEWORK_SEARCH_PATHS": "$(PLATFORM_DIR)/Developer/Library/Frameworks",
+      "GCC_WARN_64_TO_32_BIT_CONVERSION": "YES",
+      "GCC_WARN_ABOUT_RETURN_TYPE": "YES",
+      "GCC_WARN_UNDECLARED_SELECTOR": "YES",
+      "GCC_WARN_UNINITIALIZED_AUTOS": "YES",
+      "GCC_WARN_UNUSED_FUNCTION": "YES",
+      "GCC_WARN_UNUSED_VARIABLE": "YES",
+      "HEADER_SEARCH_PATHS": "$(TULSI_BWRS) $(TULSI_WR)/bazel-bin $(TULSI_WR)/bazel-genfiles "
+        + "$(TULSI_BWRS)/\(PBXTargetGenerator.tulsiIncludesPath)",
+      "SDKROOT": projectSDKROOT,
+      "ONLY_ACTIVE_ARCH": "YES",
+      "PYTHONIOENCODING": "utf8",
+      "TULSI_VERSION": testTulsiVersion,
+      "TULSI_WR": "$(SRCROOT)",
+      "TULSI_BWRS": "$(PROJECT_FILE_PATH)/.tulsi/tulsi-workspace",
     ]
 
     XCTAssertNotNil(topLevelConfigs["Debug"])
-    XCTAssertEqual(topLevelConfigs["Debug"]!.buildSettings,
-                   debugBuildSettingsFromSettings(topLevelBuildSettings))
+    XCTAssertEqual(
+      topLevelConfigs["Debug"]!.buildSettings,
+      debugBuildSettingsFromSettings(topLevelBuildSettings))
     XCTAssertNotNil(topLevelConfigs["Release"])
-    XCTAssertEqual(topLevelConfigs["Release"]!.buildSettings,
-                   releaseBuildSettingsFromSettings(topLevelBuildSettings))
+    XCTAssertEqual(
+      topLevelConfigs["Release"]!.buildSettings,
+      releaseBuildSettingsFromSettings(topLevelBuildSettings))
     XCTAssertNotNil(topLevelConfigs["__TulsiTestRunner_Debug"])
-    XCTAssertEqual(topLevelConfigs["__TulsiTestRunner_Debug"]!.buildSettings,
-                   debugTestRunnerBuildSettingsFromSettings(topLevelBuildSettings))
+    XCTAssertEqual(
+      topLevelConfigs["__TulsiTestRunner_Debug"]!.buildSettings,
+      debugTestRunnerBuildSettingsFromSettings(topLevelBuildSettings))
     XCTAssertNotNil(topLevelConfigs["__TulsiTestRunner_Release"])
-    XCTAssertEqual(topLevelConfigs["__TulsiTestRunner_Release"]!.buildSettings,
-                   releaseTestRunnerBuildSettingsFromSettings(topLevelBuildSettings))
+    XCTAssertEqual(
+      topLevelConfigs["__TulsiTestRunner_Release"]!.buildSettings,
+      releaseTestRunnerBuildSettingsFromSettings(topLevelBuildSettings))
   }
 
   func testGenerateTargetsForRuleEntriesWithNoEntries() {
@@ -332,87 +384,90 @@
 
     do {
       let expectedBuildSettings = [
-          "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
-          "BAZEL_TARGET": "test/app:TestApplication",
-          "DEBUG_INFORMATION_FORMAT": "dwarf",
-          "INFOPLIST_FILE": stubPlistPaths.defaultStub,
-          "PRODUCT_NAME": rule1TargetName,
-          "SDKROOT": "iphoneos",
-          "TULSI_BUILD_PATH": rule1BuildPath,
+        "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
+        "BAZEL_TARGET": "test/app:TestApplication",
+        "DEBUG_INFORMATION_FORMAT": "dwarf",
+        "INFOPLIST_FILE": stubPlistPaths.defaultStub,
+        "PRODUCT_NAME": rule1TargetName,
+        "SDKROOT": "iphoneos",
+        "TULSI_BUILD_PATH": rule1BuildPath,
       ]
       let expectedTarget = TargetDefinition(
-          name: rule1TargetName,
-          buildConfigurations: [
-              BuildConfigurationDefinition(
-                  name: "Debug",
-                  expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "Release",
-                  expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Debug",
-                  expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Release",
-                  expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-          ],
-          expectedBuildPhases: [
-              BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule1BuildTarget)
-          ]
+        name: rule1TargetName,
+        buildConfigurations: [
+          BuildConfigurationDefinition(
+            name: "Debug",
+            expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "Release",
+            expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Debug",
+            expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Release",
+            expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+        ],
+        expectedBuildPhases: [
+          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule1BuildTarget),
+        ]
       )
       assertTarget(expectedTarget, inTargets: targets)
     }
     do {
       let expectedBuildSettings = [
-          "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
-          "BAZEL_TARGET": "test/objclib:ObjectiveCLibrary",
-          "DEBUG_INFORMATION_FORMAT": "dwarf",
-          "INFOPLIST_FILE": stubPlistPaths.defaultStub,
-          "PRODUCT_NAME": rule2TargetName,
-          "SDKROOT": "iphoneos",
-          "TULSI_BUILD_PATH": rule2BuildPath,
+        "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
+        "BAZEL_TARGET": "test/objclib:ObjectiveCLibrary",
+        "DEBUG_INFORMATION_FORMAT": "dwarf",
+        "INFOPLIST_FILE": stubPlistPaths.defaultStub,
+        "PRODUCT_NAME": rule2TargetName,
+        "SDKROOT": "iphoneos",
+        "TULSI_BUILD_PATH": rule2BuildPath,
       ]
       let expectedTarget = TargetDefinition(
-          name: rule2TargetName,
-          buildConfigurations: [
-              BuildConfigurationDefinition(
-                  name: "Debug",
-                  expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "Release",
-                  expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Debug",
-                  expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Release",
-                  expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-          ],
-          expectedBuildPhases: [
-              BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule2BuildTarget)
-          ]
+        name: rule2TargetName,
+        buildConfigurations: [
+          BuildConfigurationDefinition(
+            name: "Debug",
+            expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "Release",
+            expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Debug",
+            expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Release",
+            expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+        ],
+        expectedBuildPhases: [
+          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule2BuildTarget),
+        ]
       )
       assertTarget(expectedTarget, inTargets: targets)
     }
   }
 
   func testGenerateTargetsForLinkedRuleEntriesWithNoSourcesAndSkylarkUnitTest() {
-    checkGenerateTargetsForLinkedRuleEntriesWithNoSources("ios_unit_test",
-                                                          testProductType: .UnitTest,
-                                                          testHostAttributeName: "test_host")
+    checkGenerateTargetsForLinkedRuleEntriesWithNoSources(
+      "ios_unit_test",
+      testProductType: .UnitTest,
+      testHostAttributeName: "test_host")
   }
 
-  func checkGenerateTargetsForLinkedRuleEntriesWithNoSources(_ testRuleType: String,
-                                                             testProductType: PBXTarget.ProductType,
-                                                             testHostAttributeName: String) {
+  func checkGenerateTargetsForLinkedRuleEntriesWithNoSources(
+    _ testRuleType: String,
+    testProductType: PBXTarget.ProductType,
+    testHostAttributeName: String
+  ) {
     let rule1BuildPath = "test/app"
     let rule1TargetName = "TestApplication"
     let rule1BuildTarget = "\(rule1BuildPath):\(rule1TargetName)"
@@ -422,12 +477,13 @@
     let rule2Attributes = [testHostAttributeName: rule1BuildTarget]
     let rules = Set([
       makeTestRuleEntry(rule1BuildTarget, type: "ios_application", productType: .Application),
-      makeTestRuleEntry(rule2BuildTarget,
-                        type: testRuleType,
-                        attributes: rule2Attributes as [String: AnyObject],
-                        productType: testProductType,
-                        platformType: "ios",
-                        osDeploymentTarget: "8.0"),
+      makeTestRuleEntry(
+        rule2BuildTarget,
+        type: testRuleType,
+        attributes: rule2Attributes as [String: AnyObject],
+        productType: testProductType,
+        platformType: "ios",
+        osDeploymentTarget: "8.0"),
     ])
 
     do {
@@ -445,77 +501,77 @@
 
     do {
       let expectedBuildSettings = [
-          "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
-          "BAZEL_TARGET": "test/app:TestApplication",
-          "DEBUG_INFORMATION_FORMAT": "dwarf",
-          "INFOPLIST_FILE": stubPlistPaths.defaultStub,
-          "PRODUCT_NAME": rule1TargetName,
-          "SDKROOT": "iphoneos",
-          "TULSI_BUILD_PATH": rule1BuildPath,
+        "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
+        "BAZEL_TARGET": "test/app:TestApplication",
+        "DEBUG_INFORMATION_FORMAT": "dwarf",
+        "INFOPLIST_FILE": stubPlistPaths.defaultStub,
+        "PRODUCT_NAME": rule1TargetName,
+        "SDKROOT": "iphoneos",
+        "TULSI_BUILD_PATH": rule1BuildPath,
       ]
       let expectedTarget = TargetDefinition(
-          name: rule1TargetName,
-          buildConfigurations: [
-              BuildConfigurationDefinition(
-                  name: "Debug",
-                  expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "Release",
-                  expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Debug",
-                  expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Release",
-                  expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-          ],
-          expectedBuildPhases: [
-              BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule1BuildTarget)
-          ]
+        name: rule1TargetName,
+        buildConfigurations: [
+          BuildConfigurationDefinition(
+            name: "Debug",
+            expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "Release",
+            expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Debug",
+            expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Release",
+            expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+        ],
+        expectedBuildPhases: [
+          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule1BuildTarget),
+        ]
       )
       assertTarget(expectedTarget, inTargets: targets)
     }
     do {
       let expectedBuildSettings = [
-          "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
-          "BAZEL_TARGET": "test/testbundle:TestBundle",
-          "BUNDLE_LOADER": "$(TEST_HOST)",
-          "DEBUG_INFORMATION_FORMAT": "dwarf",
-          "INFOPLIST_FILE": stubPlistPaths.defaultStub,
-          "IPHONEOS_DEPLOYMENT_TARGET": "8.0",
-          "PRODUCT_NAME": rule2TargetName,
-          "SDKROOT": "iphoneos",
-          "TEST_HOST": "$(BUILT_PRODUCTS_DIR)/\(rule1TargetName).app/\(rule1TargetName)",
-          "TULSI_BUILD_PATH": rule2BuildPath,
-          "TULSI_TEST_RUNNER_ONLY": "YES",
+        "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
+        "BAZEL_TARGET": "test/testbundle:TestBundle",
+        "BUNDLE_LOADER": "$(TEST_HOST)",
+        "DEBUG_INFORMATION_FORMAT": "dwarf",
+        "INFOPLIST_FILE": stubPlistPaths.defaultStub,
+        "IPHONEOS_DEPLOYMENT_TARGET": "8.0",
+        "PRODUCT_NAME": rule2TargetName,
+        "SDKROOT": "iphoneos",
+        "TEST_HOST": "$(BUILT_PRODUCTS_DIR)/\(rule1TargetName).app/\(rule1TargetName)",
+        "TULSI_BUILD_PATH": rule2BuildPath,
+        "TULSI_TEST_RUNNER_ONLY": "YES",
       ]
       let expectedTarget = TargetDefinition(
-          name: rule2TargetName,
-          buildConfigurations: [
-              BuildConfigurationDefinition(
-                  name: "Debug",
-                  expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "Release",
-                  expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Debug",
-                  expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Release",
-                  expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-          ],
-          expectedBuildPhases: [
-              BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule2BuildTarget)
-          ]
+        name: rule2TargetName,
+        buildConfigurations: [
+          BuildConfigurationDefinition(
+            name: "Debug",
+            expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "Release",
+            expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Debug",
+            expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Release",
+            expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+        ],
+        expectedBuildPhases: [
+          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule2BuildTarget),
+        ]
       )
       assertTarget(expectedTarget, inTargets: targets)
     }
@@ -533,13 +589,14 @@
     let rule2Attributes = [testHostAttributeName: rule1BuildTarget]
     let rules = Set([
       makeTestRuleEntry(rule1BuildTarget, type: "ios_application", productType: .Application),
-      makeTestRuleEntry(rule2BuildTarget,
-                        type: testRuleType,
-                        attributes: rule2Attributes as [String: AnyObject],
-                        productType: .UIUnitTest,
-                        platformType: "ios",
-                        osDeploymentTarget: "8.0"),
-      ])
+      makeTestRuleEntry(
+        rule2BuildTarget,
+        type: testRuleType,
+        attributes: rule2Attributes as [String: AnyObject],
+        productType: .UIUnitTest,
+        platformType: "ios",
+        osDeploymentTarget: "8.0"),
+    ])
 
     do {
       try targetGenerator.generateBuildTargetsForRuleEntries(rules, ruleEntryMap: RuleEntryMap())
@@ -563,7 +620,7 @@
         "PRODUCT_NAME": rule1TargetName,
         "SDKROOT": "iphoneos",
         "TULSI_BUILD_PATH": rule1BuildPath,
-        ]
+      ]
       let expectedTarget = TargetDefinition(
         name: rule1TargetName,
         buildConfigurations: [
@@ -583,9 +640,9 @@
             name: "__TulsiTestRunner_Release",
             expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
           ),
-          ],
+        ],
         expectedBuildPhases: [
-          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule1BuildTarget)
+          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule1BuildTarget),
         ]
       )
       assertTarget(expectedTarget, inTargets: targets)
@@ -602,7 +659,7 @@
         "TEST_TARGET_NAME": rule1TargetName,
         "TULSI_BUILD_PATH": rule2BuildPath,
         "TULSI_TEST_RUNNER_ONLY": "YES",
-        ]
+      ]
       let expectedTarget = TargetDefinition(
         name: rule2TargetName,
         buildConfigurations: [
@@ -622,9 +679,9 @@
             name: "__TulsiTestRunner_Release",
             expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
           ),
-          ],
+        ],
         expectedBuildPhases: [
-          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule2BuildTarget)
+          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule2BuildTarget),
         ]
       )
       assertTarget(expectedTarget, inTargets: targets)
@@ -642,18 +699,20 @@
     let rule2BuildTarget = "\(rule2BuildPath):\(rule2TargetName)"
     let rule2Attributes = [testHostAttributeName: rule1BuildTarget]
     let rules = Set([
-      makeTestRuleEntry(rule1BuildTarget,
-                        type: "macos_application",
-                        productType: .Application,
-                        platformType: "macos",
-                        osDeploymentTarget: "10.11"),
-      makeTestRuleEntry(rule2BuildTarget,
-                        type: testRuleType,
-                        attributes: rule2Attributes as [String: AnyObject],
-                        productType: .UnitTest,
-                        platformType: "macos",
-                        osDeploymentTarget: "10.11"),
-      ])
+      makeTestRuleEntry(
+        rule1BuildTarget,
+        type: "macos_application",
+        productType: .Application,
+        platformType: "macos",
+        osDeploymentTarget: "10.11"),
+      makeTestRuleEntry(
+        rule2BuildTarget,
+        type: testRuleType,
+        attributes: rule2Attributes as [String: AnyObject],
+        productType: .UnitTest,
+        platformType: "macos",
+        osDeploymentTarget: "10.11"),
+    ])
 
     do {
       try targetGenerator.generateBuildTargetsForRuleEntries(rules, ruleEntryMap: RuleEntryMap())
@@ -678,7 +737,7 @@
         "PRODUCT_NAME": rule1TargetName,
         "SDKROOT": "macosx",
         "TULSI_BUILD_PATH": rule1BuildPath,
-        ]
+      ]
       let expectedTarget = TargetDefinition(
         name: rule1TargetName,
         buildConfigurations: [
@@ -698,9 +757,9 @@
             name: "__TulsiTestRunner_Release",
             expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
           ),
-          ],
+        ],
         expectedBuildPhases: [
-          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule1BuildTarget)
+          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule1BuildTarget),
         ]
       )
       assertTarget(expectedTarget, inTargets: targets)
@@ -715,10 +774,11 @@
         "MACOSX_DEPLOYMENT_TARGET": "10.11",
         "PRODUCT_NAME": rule2TargetName,
         "SDKROOT": "macosx",
-        "TEST_HOST": "$(BUILT_PRODUCTS_DIR)/\(rule1TargetName).app/Contents/MacOS/\(rule1TargetName)",
+        "TEST_HOST":
+          "$(BUILT_PRODUCTS_DIR)/\(rule1TargetName).app/Contents/MacOS/\(rule1TargetName)",
         "TULSI_BUILD_PATH": rule2BuildPath,
         "TULSI_TEST_RUNNER_ONLY": "YES",
-        ]
+      ]
       let expectedTarget = TargetDefinition(
         name: rule2TargetName,
         buildConfigurations: [
@@ -738,9 +798,9 @@
             name: "__TulsiTestRunner_Release",
             expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
           ),
-          ],
+        ],
         expectedBuildPhases: [
-          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule2BuildTarget)
+          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule2BuildTarget),
         ]
       )
       assertTarget(expectedTarget, inTargets: targets)
@@ -758,18 +818,20 @@
     let rule2BuildTarget = "\(rule2BuildPath):\(rule2TargetName)"
     let rule2Attributes = [testHostAttributeName: rule1BuildTarget]
     let rules = Set([
-      makeTestRuleEntry(rule1BuildTarget,
-                        type: "macos_application",
-                        productType: .Application,
-                        platformType: "macos",
-                        osDeploymentTarget: "10.11"),
-      makeTestRuleEntry(rule2BuildTarget,
-                        type: testRuleType,
-                        attributes: rule2Attributes as [String: AnyObject],
-                        productType: .UIUnitTest,
-                        platformType: "macos",
-                        osDeploymentTarget: "10.11"),
-      ])
+      makeTestRuleEntry(
+        rule1BuildTarget,
+        type: "macos_application",
+        productType: .Application,
+        platformType: "macos",
+        osDeploymentTarget: "10.11"),
+      makeTestRuleEntry(
+        rule2BuildTarget,
+        type: testRuleType,
+        attributes: rule2Attributes as [String: AnyObject],
+        productType: .UIUnitTest,
+        platformType: "macos",
+        osDeploymentTarget: "10.11"),
+    ])
 
     do {
       try targetGenerator.generateBuildTargetsForRuleEntries(rules, ruleEntryMap: RuleEntryMap())
@@ -794,7 +856,7 @@
         "PRODUCT_NAME": rule1TargetName,
         "SDKROOT": "macosx",
         "TULSI_BUILD_PATH": rule1BuildPath,
-        ]
+      ]
       let expectedTarget = TargetDefinition(
         name: rule1TargetName,
         buildConfigurations: [
@@ -814,9 +876,9 @@
             name: "__TulsiTestRunner_Release",
             expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
           ),
-          ],
+        ],
         expectedBuildPhases: [
-          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule1BuildTarget)
+          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule1BuildTarget),
         ]
       )
       assertTarget(expectedTarget, inTargets: targets)
@@ -833,7 +895,7 @@
         "TEST_TARGET_NAME": rule1TargetName,
         "TULSI_BUILD_PATH": rule2BuildPath,
         "TULSI_TEST_RUNNER_ONLY": "YES",
-        ]
+      ]
       let expectedTarget = TargetDefinition(
         name: rule2TargetName,
         buildConfigurations: [
@@ -853,9 +915,9 @@
             name: "__TulsiTestRunner_Release",
             expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
           ),
-          ],
+        ],
         expectedBuildPhases: [
-          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule2BuildTarget)
+          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule2BuildTarget),
         ]
       )
       assertTarget(expectedTarget, inTargets: targets)
@@ -868,12 +930,13 @@
     let rule1TargetName = "TestBundle"
     let rule1BuildTarget = "\(rule1BuildPath):\(rule1TargetName)"
     let rules = Set([
-      makeTestRuleEntry(rule1BuildTarget,
-                        type: testRuleType,
-                        productType: .UnitTest,
-                        platformType: "macos",
-                        osDeploymentTarget: "10.11"),
-      ])
+      makeTestRuleEntry(
+        rule1BuildTarget,
+        type: testRuleType,
+        productType: .UnitTest,
+        platformType: "macos",
+        osDeploymentTarget: "10.11"),
+    ])
 
     do {
       try targetGenerator.generateBuildTargetsForRuleEntries(rules, ruleEntryMap: RuleEntryMap())
@@ -899,7 +962,7 @@
         "SDKROOT": "macosx",
         "TULSI_BUILD_PATH": rule1BuildPath,
         "TULSI_TEST_RUNNER_ONLY": "YES",
-        ]
+      ]
       let expectedTarget = TargetDefinition(
         name: rule1TargetName,
         buildConfigurations: [
@@ -919,9 +982,9 @@
             name: "__TulsiTestRunner_Release",
             expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
           ),
-          ],
+        ],
         expectedBuildPhases: [
-          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule1BuildTarget)
+          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule1BuildTarget),
         ]
       )
       assertTarget(expectedTarget, inTargets: targets)
@@ -935,13 +998,14 @@
     let rule1BuildTarget = "\(rule1BuildPath):\(rule1TargetName)"
     let testSources = ["test/src1.m", "test/src2.m"]
     let rules = Set([
-      makeTestRuleEntry(rule1BuildTarget,
-                        type: testRuleType,
-                        sourceFiles: testSources,
-                        productType: .UnitTest,
-                        platformType: "macos",
-                        osDeploymentTarget: "10.11"),
-      ])
+      makeTestRuleEntry(
+        rule1BuildTarget,
+        type: testRuleType,
+        sourceFiles: testSources,
+        productType: .UnitTest,
+        platformType: "macos",
+        osDeploymentTarget: "10.11"),
+    ])
 
     do {
       try targetGenerator.generateBuildTargetsForRuleEntries(rules, ruleEntryMap: RuleEntryMap())
@@ -967,7 +1031,7 @@
         "SDKROOT": "macosx",
         "TULSI_BUILD_PATH": rule1BuildPath,
         "TULSI_TEST_RUNNER_ONLY": "YES",
-        ]
+      ]
       let expectedTarget = TargetDefinition(
         name: rule1TargetName,
         buildConfigurations: [
@@ -987,7 +1051,7 @@
             name: "__TulsiTestRunner_Release",
             expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
           ),
-          ],
+        ],
         expectedBuildPhases: [
           BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule1BuildTarget),
           SourcesBuildPhaseDefinition(files: testSources, mainGroup: project.mainGroup),
@@ -999,14 +1063,17 @@
   }
 
   func testGenerateTargetsForLinkedRuleEntriesWithSourcesWithSkylarkUnitTest() {
-    checkGenerateTargetsForLinkedRuleEntriesWithSources("ios_unit_test",
-                                                        testProductType: .UnitTest,
-                                                        testHostAttributeName: "test_host")
+    checkGenerateTargetsForLinkedRuleEntriesWithSources(
+      "ios_unit_test",
+      testProductType: .UnitTest,
+      testHostAttributeName: "test_host")
   }
 
-  func checkGenerateTargetsForLinkedRuleEntriesWithSources(_ testRuleType: String,
-                                                           testProductType: PBXTarget.ProductType,
-                                                           testHostAttributeName: String) {
+  func checkGenerateTargetsForLinkedRuleEntriesWithSources(
+    _ testRuleType: String,
+    testProductType: PBXTarget.ProductType,
+    testHostAttributeName: String
+  ) {
     let rule1BuildPath = "test/app"
     let rule1TargetName = "TestHost"
     let rule1BuildTarget = "\(rule1BuildPath):\(rule1TargetName)"
@@ -1015,13 +1082,14 @@
     let testRuleBuildTarget = "\(testRuleBuildPath):\(testRuleTargetName)"
     let testRuleAttributes = [testHostAttributeName: rule1BuildTarget]
     let testSources = ["sourceFile1.m", "sourceFile2.mm"]
-    let testRule = makeTestRuleEntry(testRuleBuildTarget,
-                                     type: testRuleType,
-                                     attributes: testRuleAttributes as [String: AnyObject],
-                                     sourceFiles: testSources,
-                                     productType: testProductType,
-                                     platformType: "ios",
-                                     osDeploymentTarget: "8.0")
+    let testRule = makeTestRuleEntry(
+      testRuleBuildTarget,
+      type: testRuleType,
+      attributes: testRuleAttributes as [String: AnyObject],
+      sourceFiles: testSources,
+      productType: testProductType,
+      platformType: "ios",
+      osDeploymentTarget: "8.0")
     let rules = Set([
       makeTestRuleEntry(rule1BuildTarget, type: "ios_application", productType: .Application),
       testRule,
@@ -1037,81 +1105,83 @@
     XCTAssertEqual(targets.count, 2)
     do {
       let expectedBuildSettings = [
-          "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
-          "BAZEL_TARGET": "test/app:TestHost",
-          "DEBUG_INFORMATION_FORMAT": "dwarf",
-          "INFOPLIST_FILE": stubPlistPaths.defaultStub,
-          "PRODUCT_NAME": rule1TargetName,
-          "SDKROOT": "iphoneos",
-          "TULSI_BUILD_PATH": rule1BuildPath,
+        "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
+        "BAZEL_TARGET": "test/app:TestHost",
+        "DEBUG_INFORMATION_FORMAT": "dwarf",
+        "INFOPLIST_FILE": stubPlistPaths.defaultStub,
+        "PRODUCT_NAME": rule1TargetName,
+        "SDKROOT": "iphoneos",
+        "TULSI_BUILD_PATH": rule1BuildPath,
       ]
       let expectedTarget = TargetDefinition(
-          name: rule1TargetName,
-          buildConfigurations: [
-              BuildConfigurationDefinition(
-                  name: "Debug",
-                  expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "Release",
-                  expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Debug",
-                  expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Release",
-                  expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-          ],
-          expectedBuildPhases: [
-              BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath,
-                                              buildTarget: rule1BuildTarget),
-          ]
+        name: rule1TargetName,
+        buildConfigurations: [
+          BuildConfigurationDefinition(
+            name: "Debug",
+            expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "Release",
+            expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Debug",
+            expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Release",
+            expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+        ],
+        expectedBuildPhases: [
+          BazelShellScriptBuildPhaseDefinition(
+            bazelPath: bazelPath,
+            buildTarget: rule1BuildTarget),
+        ]
       )
       assertTarget(expectedTarget, inTargets: targets)
     }
     do {
       let expectedBuildSettings = [
-          "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
-          "BAZEL_TARGET": "test/testbundle:Tests",
-          "BUNDLE_LOADER": "$(TEST_HOST)",
-          "DEBUG_INFORMATION_FORMAT": "dwarf",
-          "INFOPLIST_FILE": stubPlistPaths.defaultStub,
-          "IPHONEOS_DEPLOYMENT_TARGET": "8.0",
-          "PRODUCT_NAME": testRuleTargetName,
-          "SDKROOT": "iphoneos",
-          "TEST_HOST": "$(BUILT_PRODUCTS_DIR)/\(rule1TargetName).app/\(rule1TargetName)",
-          "TULSI_BUILD_PATH": testRuleBuildPath,
-          "TULSI_TEST_RUNNER_ONLY": "YES",
+        "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
+        "BAZEL_TARGET": "test/testbundle:Tests",
+        "BUNDLE_LOADER": "$(TEST_HOST)",
+        "DEBUG_INFORMATION_FORMAT": "dwarf",
+        "INFOPLIST_FILE": stubPlistPaths.defaultStub,
+        "IPHONEOS_DEPLOYMENT_TARGET": "8.0",
+        "PRODUCT_NAME": testRuleTargetName,
+        "SDKROOT": "iphoneos",
+        "TEST_HOST": "$(BUILT_PRODUCTS_DIR)/\(rule1TargetName).app/\(rule1TargetName)",
+        "TULSI_BUILD_PATH": testRuleBuildPath,
+        "TULSI_TEST_RUNNER_ONLY": "YES",
       ]
       let expectedTarget = TargetDefinition(
-          name: testRuleTargetName,
-          buildConfigurations: [
-              BuildConfigurationDefinition(
-                  name: "Debug",
-                  expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "Release",
-                  expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Debug",
-                  expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Release",
-                  expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-          ],
-          expectedBuildPhases: [
-              SourcesBuildPhaseDefinition(files: testSources, mainGroup: project.mainGroup),
-              BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath,
-                                              buildTarget: testRuleBuildTarget),
-              ObjcDummyShellScriptBuildPhaseDefinition(),
-          ]
+        name: testRuleTargetName,
+        buildConfigurations: [
+          BuildConfigurationDefinition(
+            name: "Debug",
+            expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "Release",
+            expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Debug",
+            expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Release",
+            expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+        ],
+        expectedBuildPhases: [
+          SourcesBuildPhaseDefinition(files: testSources, mainGroup: project.mainGroup),
+          BazelShellScriptBuildPhaseDefinition(
+            bazelPath: bazelPath,
+            buildTarget: testRuleBuildTarget),
+          ObjcDummyShellScriptBuildPhaseDefinition(),
+        ]
       )
       assertTarget(expectedTarget, inTargets: targets)
     }
@@ -1123,12 +1193,15 @@
     let testHostTargetName = "App"
     let testRulePackage = "test/app"
     let testSources = ["test/app/Tests.m"]
-    let objcLibraryRuleEntry = makeTestRuleEntry("\(testRulePackage):ObjcLib",
+    let objcLibraryRuleEntry = makeTestRuleEntry(
+      "\(testRulePackage):ObjcLib",
       type: "objc_library",
       sourceFiles: testSources)
-    let testHostRuleEntry = makeTestRuleEntry("\(testRulePackage):\(testHostTargetName)",
+    let testHostRuleEntry = makeTestRuleEntry(
+      "\(testRulePackage):\(testHostTargetName)",
       type: "ios_application", productType: .Application)
-    let testRuleEntry = makeTestRuleEntry("\(testRulePackage):\(testRuleTargetName)",
+    let testRuleEntry = makeTestRuleEntry(
+      "\(testRulePackage):\(testRuleTargetName)",
       type: "\(testRuleType)",
       attributes: ["test_host": testHostRuleEntry.label.value as AnyObject],
       sourceFiles: testSources,
@@ -1136,13 +1209,16 @@
       platformType: "ios",
       osDeploymentTarget: "8.0")
 
-    let ruleEntryMap = makeRuleEntryMap(withRuleEntries: [objcLibraryRuleEntry,
-                                                          testHostRuleEntry,
-                                                          testRuleEntry])
+    let ruleEntryMap = makeRuleEntryMap(withRuleEntries: [
+      objcLibraryRuleEntry,
+      testHostRuleEntry,
+      testRuleEntry
+    ])
 
     do {
-      try targetGenerator.generateBuildTargetsForRuleEntries([testRuleEntry, testHostRuleEntry],
-                                                             ruleEntryMap: ruleEntryMap)
+      try targetGenerator.generateBuildTargetsForRuleEntries(
+        [testRuleEntry, testHostRuleEntry],
+        ruleEntryMap: ruleEntryMap)
     } catch let e as NSError {
       XCTFail("Failed to generate build targets with error \(e.localizedDescription)")
     }
@@ -1163,7 +1239,7 @@
       "TEST_HOST": "$(BUILT_PRODUCTS_DIR)/\(testHostTargetName).app/\(testHostTargetName)",
       "TULSI_BUILD_PATH": testRulePackage,
       "TULSI_TEST_RUNNER_ONLY": "YES",
-      ]
+    ]
     let expectedTarget = TargetDefinition(
       name: testRuleTargetName,
       buildConfigurations: [
@@ -1183,11 +1259,12 @@
           name: "__TulsiTestRunner_Release",
           expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
         ),
-        ],
+      ],
       expectedBuildPhases: [
         SourcesBuildPhaseDefinition(files: testSources, mainGroup: project.mainGroup),
-        BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath,
-                                             buildTarget: "\(testRulePackage):\(testRuleTargetName)"),
+        BazelShellScriptBuildPhaseDefinition(
+          bazelPath: bazelPath,
+          buildTarget: "\(testRulePackage):\(testRuleTargetName)"),
         ObjcDummyShellScriptBuildPhaseDefinition(),
       ]
     )
@@ -1200,27 +1277,35 @@
     let testHostTargetName = "App"
     let testRulePackage = "test/app"
     let testSources = ["test/app/Tests.swift"]
-    let swiftLibraryRuleEntry = makeTestRuleEntry("\(testRulePackage):SwiftLib",
-                                                  type: "swift_library",
-                                                  sourceFiles: testSources)
-    let testHostRuleEntry = makeTestRuleEntry("\(testRulePackage):\(testHostTargetName)",
-                                              type: "ios_application", productType: .Application)
-    let testRuleEntry = makeTestRuleEntry("\(testRulePackage):\(testRuleTargetName)",
-                                          type: "\(testRuleType)",
-                                          attributes: ["has_swift_dependency": true as AnyObject,
-                                                       "test_host": testHostRuleEntry.label.value as AnyObject],
-                                          sourceFiles: testSources,
-                                          productType: .UnitTest,
-                                          platformType: "ios",
-                                          osDeploymentTarget: "8.0")
+    let swiftLibraryRuleEntry = makeTestRuleEntry(
+      "\(testRulePackage):SwiftLib",
+      type: "swift_library",
+      sourceFiles: testSources)
+    let testHostRuleEntry = makeTestRuleEntry(
+      "\(testRulePackage):\(testHostTargetName)",
+      type: "ios_application", productType: .Application)
+    let testRuleEntry = makeTestRuleEntry(
+      "\(testRulePackage):\(testRuleTargetName)",
+      type: "\(testRuleType)",
+      attributes: [
+        "has_swift_dependency": true as AnyObject,
+        "test_host": testHostRuleEntry.label.value as AnyObject
+      ],
+      sourceFiles: testSources,
+      productType: .UnitTest,
+      platformType: "ios",
+      osDeploymentTarget: "8.0")
 
-    let ruleEntryMap = makeRuleEntryMap(withRuleEntries: [swiftLibraryRuleEntry,
-                                                          testHostRuleEntry,
-                                                          testRuleEntry])
+    let ruleEntryMap = makeRuleEntryMap(withRuleEntries: [
+      swiftLibraryRuleEntry,
+      testHostRuleEntry,
+      testRuleEntry
+    ])
 
     do {
-      try targetGenerator.generateBuildTargetsForRuleEntries([testRuleEntry, testHostRuleEntry],
-                                                             ruleEntryMap: ruleEntryMap)
+      try targetGenerator.generateBuildTargetsForRuleEntries(
+        [testRuleEntry, testHostRuleEntry],
+        ruleEntryMap: ruleEntryMap)
     } catch let e as NSError {
       XCTFail("Failed to generate build targets with error \(e.localizedDescription)")
     }
@@ -1241,7 +1326,7 @@
       "TEST_HOST": "$(BUILT_PRODUCTS_DIR)/\(testHostTargetName).app/\(testHostTargetName)",
       "TULSI_BUILD_PATH": testRulePackage,
       "TULSI_TEST_RUNNER_ONLY": "YES",
-      ]
+    ]
     let expectedTarget = TargetDefinition(
       name: testRuleTargetName,
       buildConfigurations: [
@@ -1261,12 +1346,13 @@
           name: "__TulsiTestRunner_Release",
           expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
         ),
-        ],
+      ],
       expectedBuildPhases: [
         SourcesBuildPhaseDefinition(files: testSources, mainGroup: project.mainGroup),
-        BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath,
-                                             buildTarget: "\(testRulePackage):\(testRuleTargetName)"),
-        SwiftDummyShellScriptBuildPhaseDefinition()
+        BazelShellScriptBuildPhaseDefinition(
+          bazelPath: bazelPath,
+          buildTarget: "\(testRulePackage):\(testRuleTargetName)"),
+        SwiftDummyShellScriptBuildPhaseDefinition(),
       ]
     )
     assertTarget(expectedTarget, inTargets: targets)
@@ -1292,17 +1378,18 @@
     let testRuleBuildTarget = "\(testRuleBuildPath):\(testRuleTargetName)"
     let testRuleAttributes = [testHostAttributeName: rule1BuildTarget]
     let testSources = ["sourceFile1.m", "sourceFile2.mm"]
-    let testRule = makeTestRuleEntry(testRuleBuildTarget,
-                                     type: testRuleType,
-                                     attributes: testRuleAttributes as [String: AnyObject],
-                                     sourceFiles: testSources,
-                                     productType: testProductType,
-                                     platformType: "ios",
-                                     osDeploymentTarget: "8.0")
+    let testRule = makeTestRuleEntry(
+      testRuleBuildTarget,
+      type: testRuleType,
+      attributes: testRuleAttributes as [String: AnyObject],
+      sourceFiles: testSources,
+      productType: testProductType,
+      platformType: "ios",
+      osDeploymentTarget: "8.0")
     let rules = Set([
       makeTestRuleEntry(rule1BuildTarget, type: "ios_application", productType: .Application),
       testRule,
-      ])
+    ])
     do {
       try targetGenerator.generateBuildTargetsForRuleEntries(rules, ruleEntryMap: RuleEntryMap())
     } catch let e as NSError {
@@ -1321,7 +1408,7 @@
         "PRODUCT_NAME": rule1TargetName,
         "SDKROOT": "iphoneos",
         "TULSI_BUILD_PATH": rule1BuildPath,
-        ]
+      ]
       let expectedTarget = TargetDefinition(
         name: rule1TargetName,
         buildConfigurations: [
@@ -1341,11 +1428,12 @@
             name: "__TulsiTestRunner_Release",
             expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
           ),
-          ],
+        ],
         expectedBuildPhases: [
-          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath,
-                                          buildTarget: rule1BuildTarget),
-          ]
+          BazelShellScriptBuildPhaseDefinition(
+            bazelPath: bazelPath,
+            buildTarget: rule1BuildTarget),
+        ]
       )
       assertTarget(expectedTarget, inTargets: targets)
     }
@@ -1361,7 +1449,7 @@
         "TEST_TARGET_NAME": rule1TargetName,
         "TULSI_BUILD_PATH": testRuleBuildPath,
         "TULSI_TEST_RUNNER_ONLY": "YES",
-        ]
+      ]
       let expectedTarget = TargetDefinition(
         name: testRuleTargetName,
         buildConfigurations: [
@@ -1381,11 +1469,12 @@
             name: "__TulsiTestRunner_Release",
             expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
           ),
-          ],
+        ],
         expectedBuildPhases: [
           SourcesBuildPhaseDefinition(files: testSources, mainGroup: project.mainGroup),
-          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath,
-                                          buildTarget: testRuleBuildTarget),
+          BazelShellScriptBuildPhaseDefinition(
+            bazelPath: bazelPath,
+            buildTarget: testRuleBuildTarget),
           ObjcDummyShellScriptBuildPhaseDefinition(),
         ]
       )
@@ -1393,18 +1482,25 @@
     }
   }
 
-  func testGenerateTargetsForLinkedRuleEntriesWithSameTestHostNameInDifferentPackagesWithSkylarkUnitTest() {
+  func
+    testGenerateTargetsForLinkedRuleEntriesWithSameTestHostNameInDifferentPackagesWithSkylarkUnitTest(
+    )
+  {
     checkGenerateTargetsForLinkedRuleEntriesWithSameTestHostNameInDifferentPackages(
       "ios_unit_test", testProductType: .UnitTest, testHostAttributeName: "test_host")
   }
 
-  func testGenerateTargetsForLinkedRuleEntriesWithSameTestHostNameInDifferentPackagesWithSkylarkUITest() {
+  func
+    testGenerateTargetsForLinkedRuleEntriesWithSameTestHostNameInDifferentPackagesWithSkylarkUITest(
+    )
+  {
     checkGenerateTargetsForLinkedRuleEntriesWithSameTestHostNameInDifferentPackages(
       "ios_ui_test", testProductType: .UIUnitTest, testHostAttributeName: "test_host")
   }
 
   func checkGenerateTargetsForLinkedRuleEntriesWithSameTestHostNameInDifferentPackages(
-    _ testRuleType: String, testProductType: PBXTarget.ProductType, testHostAttributeName: String) {
+    _ testRuleType: String, testProductType: PBXTarget.ProductType, testHostAttributeName: String
+  ) {
     let hostTargetName = "TestHost"
     let host1Package = "test/package/1"
     let host2Package = "test/package/2"
@@ -1417,16 +1513,18 @@
 
     let test1Target = "\(host1Package):\(test1TargetName)"
     let test2Target = "\(host2Package):\(test2TargetName)"
-    let test1Rule = makeTestRuleEntry(test1Target,
-                                      type: testRuleType,
-                                      attributes: [testHostAttributeName: host1Target as AnyObject],
-                                      sourceFiles: testSources,
-                                      productType: testProductType)
-    let test2Rule = makeTestRuleEntry(test2Target,
-                                      type: testRuleType,
-                                      attributes: [testHostAttributeName: host2Target as AnyObject],
-                                      sourceFiles: testSources,
-                                      productType: testProductType)
+    let test1Rule = makeTestRuleEntry(
+      test1Target,
+      type: testRuleType,
+      attributes: [testHostAttributeName: host1Target as AnyObject],
+      sourceFiles: testSources,
+      productType: testProductType)
+    let test2Rule = makeTestRuleEntry(
+      test2Target,
+      type: testRuleType,
+      attributes: [testHostAttributeName: host2Target as AnyObject],
+      sourceFiles: testSources,
+      productType: testProductType)
     let rules = Set([
       makeTestRuleEntry(host1Target, type: "ios_application", productType: .Application),
       makeTestRuleEntry(host2Target, type: "ios_application", productType: .Application),
@@ -1443,16 +1541,17 @@
 
   func testGenerateTargetsForLinkedRuleEntriesWithoutIncludingTheHostWarnsWithSkylarkUnitTest() {
     checkGenerateTargetsForLinkedRuleEntriesWithoutIncludingTheHostWarns(
-        "ios_unit_test", testHostAttributeName: "test_host")
+      "ios_unit_test", testHostAttributeName: "test_host")
   }
 
   func testGenerateTargetsForLinkedRuleEntriesWithoutIncludingTheHostWarnsWithSkylarkUITest() {
     checkGenerateTargetsForLinkedRuleEntriesWithoutIncludingTheHostWarns(
-        "ios_ui_test", testHostAttributeName: "test_host")
+      "ios_ui_test", testHostAttributeName: "test_host")
   }
 
   func checkGenerateTargetsForLinkedRuleEntriesWithoutIncludingTheHostWarns(
-      _ testRuleType: String, testHostAttributeName: String) {
+    _ testRuleType: String, testHostAttributeName: String
+  ) {
     let rule1BuildPath = "test/app"
     let rule1TargetName = "TestApplication"
     let rule1BuildTarget = "\(rule1BuildPath):\(rule1TargetName)"
@@ -1461,13 +1560,15 @@
     let testRuleBuildTarget = "\(testRuleBuildPath):\(testRuleTargetName)"
     let testRuleAttributes = [testHostAttributeName: rule1BuildTarget]
     let testSources = ["sourceFile1.m", "sourceFile2.mm"]
-    let testRule = makeTestRuleEntry(testRuleBuildTarget,
-                                     type: testRuleType,
-                                     attributes: testRuleAttributes as [String: AnyObject],
-                                     sourceFiles: testSources,
-                                     productType: .Application)
+    let testRule = makeTestRuleEntry(
+      testRuleBuildTarget,
+      type: testRuleType,
+      attributes: testRuleAttributes as [String: AnyObject],
+      sourceFiles: testSources,
+      productType: .Application)
     do {
-      try targetGenerator.generateBuildTargetsForRuleEntries([testRule], ruleEntryMap: RuleEntryMap())
+      try targetGenerator.generateBuildTargetsForRuleEntries(
+        [testRule], ruleEntryMap: RuleEntryMap())
     } catch let e as NSError {
       XCTFail("Failed to generate build targets with error \(e.localizedDescription)")
       return
@@ -1478,13 +1579,13 @@
     XCTAssertEqual(targets.count, 1)
     do {
       let expectedBuildSettings = [
-          "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
-          "BAZEL_TARGET": "test/testbundle:TestBundle",
-          "DEBUG_INFORMATION_FORMAT": "dwarf",
-          "INFOPLIST_FILE": stubPlistPaths.defaultStub,
-          "PRODUCT_NAME": testRuleTargetName,
-          "SDKROOT": "iphoneos",
-          "TULSI_BUILD_PATH": testRuleBuildPath,
+        "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
+        "BAZEL_TARGET": "test/testbundle:TestBundle",
+        "DEBUG_INFORMATION_FORMAT": "dwarf",
+        "INFOPLIST_FILE": stubPlistPaths.defaultStub,
+        "PRODUCT_NAME": testRuleTargetName,
+        "SDKROOT": "iphoneos",
+        "TULSI_BUILD_PATH": testRuleBuildPath,
       ]
       var testRunnerExpectedBuildSettings = expectedBuildSettings
       testRunnerExpectedBuildSettings["DEBUG_INFORMATION_FORMAT"] = "dwarf"
@@ -1492,29 +1593,30 @@
       testRunnerExpectedBuildSettings["OTHER_CFLAGS"] = "--version"
       testRunnerExpectedBuildSettings["OTHER_LDFLAGS"] = "--version"
       let expectedTarget = TargetDefinition(
-          name: testRuleTargetName,
-          buildConfigurations: [
-              BuildConfigurationDefinition(
-                  name: "Debug",
-                  expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "Release",
-                  expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Debug",
-                  expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Release",
-                  expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-          ],
-          expectedBuildPhases: [
-              BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath,
-                                                   buildTarget: testRuleBuildTarget),
-          ]
+        name: testRuleTargetName,
+        buildConfigurations: [
+          BuildConfigurationDefinition(
+            name: "Debug",
+            expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "Release",
+            expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Debug",
+            expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Release",
+            expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+        ],
+        expectedBuildPhases: [
+          BazelShellScriptBuildPhaseDefinition(
+            bazelPath: bazelPath,
+            buildTarget: testRuleBuildTarget),
+        ]
       )
       assertTarget(expectedTarget, inTargets: targets)
     }
@@ -1545,73 +1647,73 @@
 
     do {
       let expectedBuildSettings = [
-          "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
-          "BAZEL_TARGET": "test/test1:\(targetName)",
-          "DEBUG_INFORMATION_FORMAT": "dwarf",
-          "INFOPLIST_FILE": stubPlistPaths.defaultStub,
-          "PRODUCT_NAME": "test-test1-SameName",
-          "SDKROOT": "iphoneos",
-          "TULSI_BUILD_PATH": rule1BuildPath,
+        "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
+        "BAZEL_TARGET": "test/test1:\(targetName)",
+        "DEBUG_INFORMATION_FORMAT": "dwarf",
+        "INFOPLIST_FILE": stubPlistPaths.defaultStub,
+        "PRODUCT_NAME": "test-test1-SameName",
+        "SDKROOT": "iphoneos",
+        "TULSI_BUILD_PATH": rule1BuildPath,
       ]
       let expectedTarget = TargetDefinition(
-          name: "test-test1-SameName",
-          buildConfigurations: [
-              BuildConfigurationDefinition(
-                  name: "Debug",
-                  expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "Release",
-                  expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Debug",
-                  expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Release",
-                  expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-          ],
-          expectedBuildPhases: [
-              BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule1BuildTarget)
-          ]
+        name: "test-test1-SameName",
+        buildConfigurations: [
+          BuildConfigurationDefinition(
+            name: "Debug",
+            expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "Release",
+            expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Debug",
+            expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Release",
+            expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+        ],
+        expectedBuildPhases: [
+          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule1BuildTarget),
+        ]
       )
       assertTarget(expectedTarget, inTargets: targets)
     }
     do {
       let expectedBuildSettings = [
-          "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
-          "BAZEL_TARGET": "test/test2:\(targetName)",
-          "DEBUG_INFORMATION_FORMAT": "dwarf",
-          "INFOPLIST_FILE": stubPlistPaths.defaultStub,
-          "PRODUCT_NAME": "test-test2-SameName",
-          "SDKROOT": "iphoneos",
-          "TULSI_BUILD_PATH": rule2BuildPath,
+        "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
+        "BAZEL_TARGET": "test/test2:\(targetName)",
+        "DEBUG_INFORMATION_FORMAT": "dwarf",
+        "INFOPLIST_FILE": stubPlistPaths.defaultStub,
+        "PRODUCT_NAME": "test-test2-SameName",
+        "SDKROOT": "iphoneos",
+        "TULSI_BUILD_PATH": rule2BuildPath,
       ]
       let expectedTarget = TargetDefinition(
-          name: "test-test2-SameName",
-          buildConfigurations: [
-              BuildConfigurationDefinition(
-                  name: "Debug",
-                  expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "Release",
-                  expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Debug",
-                  expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Release",
-                  expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-          ],
-          expectedBuildPhases: [
-              BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule2BuildTarget)
-          ]
+        name: "test-test2-SameName",
+        buildConfigurations: [
+          BuildConfigurationDefinition(
+            name: "Debug",
+            expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "Release",
+            expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Debug",
+            expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Release",
+            expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+        ],
+        expectedBuildPhases: [
+          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: rule2BuildTarget),
+        ]
       )
       assertTarget(expectedTarget, inTargets: targets)
     }
@@ -1623,10 +1725,11 @@
     let buildTarget = "\(buildPath):\(targetName)"
     let bundleID = "bundleID"
     let rules = Set([
-      makeTestRuleEntry(buildTarget,
-                        type: "ios_application",
-                        bundleID: bundleID,
-                        productType: .Application),
+      makeTestRuleEntry(
+        buildTarget,
+        type: "ios_application",
+        bundleID: bundleID,
+        productType: .Application),
     ])
 
     do {
@@ -1643,38 +1746,38 @@
 
     do {
       let expectedBuildSettings = [
-          "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
-          "BAZEL_TARGET": buildTarget,
-          "DEBUG_INFORMATION_FORMAT": "dwarf",
-          "INFOPLIST_FILE": stubPlistPaths.defaultStub,
-          "PRODUCT_BUNDLE_IDENTIFIER": bundleID,
-          "PRODUCT_NAME": targetName,
-          "SDKROOT": "iphoneos",
-          "TULSI_BUILD_PATH": buildPath,
+        "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
+        "BAZEL_TARGET": buildTarget,
+        "DEBUG_INFORMATION_FORMAT": "dwarf",
+        "INFOPLIST_FILE": stubPlistPaths.defaultStub,
+        "PRODUCT_BUNDLE_IDENTIFIER": bundleID,
+        "PRODUCT_NAME": targetName,
+        "SDKROOT": "iphoneos",
+        "TULSI_BUILD_PATH": buildPath,
       ]
       let expectedTarget = TargetDefinition(
-          name: targetName,
-          buildConfigurations: [
-              BuildConfigurationDefinition(
-                  name: "Debug",
-                  expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "Release",
-                  expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Debug",
-                  expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Release",
-                  expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-          ],
-          expectedBuildPhases: [
-              BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: buildTarget)
-          ]
+        name: targetName,
+        buildConfigurations: [
+          BuildConfigurationDefinition(
+            name: "Debug",
+            expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "Release",
+            expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Debug",
+            expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Release",
+            expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+        ],
+        expectedBuildPhases: [
+          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: buildTarget),
+        ]
       )
       assertTarget(expectedTarget, inTargets: targets)
     }
@@ -1686,11 +1789,12 @@
     let buildTarget = "\(buildPath):\(targetName)"
     let bundleName = "bundleName"
     let rules = Set([
-      makeTestRuleEntry(buildTarget,
-                        type: "ios_application",
-                        bundleName: bundleName,
-                        productType: .Application),
-      ])
+      makeTestRuleEntry(
+        buildTarget,
+        type: "ios_application",
+        bundleName: bundleName,
+        productType: .Application),
+    ])
 
     do {
       try targetGenerator.generateBuildTargetsForRuleEntries(rules, ruleEntryMap: RuleEntryMap())
@@ -1733,9 +1837,9 @@
             name: "__TulsiTestRunner_Release",
             expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
           ),
-          ],
+        ],
         expectedBuildPhases: [
-          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: buildTarget)
+          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: buildTarget),
         ]
       )
       assertTarget(expectedTarget, inTargets: targets)
@@ -1758,27 +1862,30 @@
     let watchAppBundleID = "watchAppBundleID"
     let watchExtBundleID = "watchAppExtBundleID"
     let rules = Set([
-      makeTestRuleEntry(appBuildTarget,
-                        type: "ios_application",
-                        extensions: Set([BuildLabel(watchAppBuildTarget)]),
-                        bundleID: appBundleID,
-                        productType: .Application,
-                        platformType: "ios",
-                        osDeploymentTarget: "9.0"),
-      makeTestRuleEntry(watchAppBuildTarget,
-                        type: "watchos_application",
-                        extensions: Set([BuildLabel(watchExtBuildTarget)]),
-                        bundleID: watchAppBundleID,
-                        productType: .Watch2App,
-                        extensionBundleID: watchExtBundleID,
-                        platformType: "watchos",
-                        osDeploymentTarget: "2.0"),
-      makeTestRuleEntry(watchExtBuildTarget,
-                        type: "watchos_extension",
-                        bundleID: watchExtBundleID,
-                        productType: .Watch2Extension,
-                        platformType: "watchos",
-                        osDeploymentTarget: "2.0")
+      makeTestRuleEntry(
+        appBuildTarget,
+        type: "ios_application",
+        extensions: Set([BuildLabel(watchAppBuildTarget)]),
+        bundleID: appBundleID,
+        productType: .Application,
+        platformType: "ios",
+        osDeploymentTarget: "9.0"),
+      makeTestRuleEntry(
+        watchAppBuildTarget,
+        type: "watchos_application",
+        extensions: Set([BuildLabel(watchExtBuildTarget)]),
+        bundleID: watchAppBundleID,
+        productType: .Watch2App,
+        extensionBundleID: watchExtBundleID,
+        platformType: "watchos",
+        osDeploymentTarget: "2.0"),
+      makeTestRuleEntry(
+        watchExtBuildTarget,
+        type: "watchos_extension",
+        bundleID: watchExtBundleID,
+        productType: .Watch2Extension,
+        platformType: "watchos",
+        osDeploymentTarget: "2.0"),
     ])
 
     do {
@@ -1795,115 +1902,117 @@
 
     do {
       let expectedBuildSettings = [
-          "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
-          "BAZEL_TARGET": appBuildTarget,
-          "DEBUG_INFORMATION_FORMAT": "dwarf",
-          "INFOPLIST_FILE": stubPlistPaths.defaultStub,
-          "PRODUCT_BUNDLE_IDENTIFIER": appBundleID,
-          "PRODUCT_NAME": appTargetName,
-          "SDKROOT": "iphoneos",
-          "IPHONEOS_DEPLOYMENT_TARGET": "9.0",
-          "TULSI_BUILD_PATH": appBuildPath,
+        "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
+        "BAZEL_TARGET": appBuildTarget,
+        "DEBUG_INFORMATION_FORMAT": "dwarf",
+        "INFOPLIST_FILE": stubPlistPaths.defaultStub,
+        "PRODUCT_BUNDLE_IDENTIFIER": appBundleID,
+        "PRODUCT_NAME": appTargetName,
+        "SDKROOT": "iphoneos",
+        "IPHONEOS_DEPLOYMENT_TARGET": "9.0",
+        "TULSI_BUILD_PATH": appBuildPath,
       ]
       let expectedTarget = TargetDefinition(
-          name: appTargetName,
-          buildConfigurations: [
-              BuildConfigurationDefinition(
-                  name: "Debug",
-                  expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "Release",
-                  expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Debug",
-                  expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Release",
-                  expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-          ],
-          expectedBuildPhases: [
-              BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: appBuildTarget)
-          ]
+        name: appTargetName,
+        buildConfigurations: [
+          BuildConfigurationDefinition(
+            name: "Debug",
+            expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "Release",
+            expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Debug",
+            expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Release",
+            expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+        ],
+        expectedBuildPhases: [
+          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: appBuildTarget),
+        ]
       )
       assertTarget(expectedTarget, inTargets: targets)
     }
     do {
       let expectedBuildSettings = [
-          "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
-          "BAZEL_TARGET": watchAppBuildTarget,
-          "DEBUG_INFORMATION_FORMAT": "dwarf",
-          "INFOPLIST_FILE": stubPlistPaths.watchOSStub,
-          "PRODUCT_BUNDLE_IDENTIFIER": watchAppBundleID,
-          "PRODUCT_NAME": watchAppTargetName,
-          "SDKROOT": "watchos",
-          "WATCHOS_DEPLOYMENT_TARGET": "2.0",
-          "TULSI_BUILD_PATH": watchAppBuildPath,
+        "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
+        "BAZEL_TARGET": watchAppBuildTarget,
+        "DEBUG_INFORMATION_FORMAT": "dwarf",
+        "INFOPLIST_FILE": stubPlistPaths.watchOSStub,
+        "PRODUCT_BUNDLE_IDENTIFIER": watchAppBundleID,
+        "PRODUCT_NAME": watchAppTargetName,
+        "SDKROOT": "watchos",
+        "WATCHOS_DEPLOYMENT_TARGET": "2.0",
+        "TULSI_BUILD_PATH": watchAppBuildPath,
       ]
       let expectedTarget = TargetDefinition(
-          name: watchAppTargetName,
-          buildConfigurations: [
-              BuildConfigurationDefinition(
-                  name: "Debug",
-                  expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "Release",
-                  expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Debug",
-                  expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Release",
-                  expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-          ],
-          expectedBuildPhases: [
-              BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: watchAppBuildTarget)
-          ]
+        name: watchAppTargetName,
+        buildConfigurations: [
+          BuildConfigurationDefinition(
+            name: "Debug",
+            expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "Release",
+            expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Debug",
+            expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Release",
+            expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+        ],
+        expectedBuildPhases: [
+          BazelShellScriptBuildPhaseDefinition(
+            bazelPath: bazelPath, buildTarget: watchAppBuildTarget),
+        ]
       )
       assertTarget(expectedTarget, inTargets: targets)
     }
     do {
       let expectedBuildSettings = [
-          "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
-          "BAZEL_TARGET": watchExtBuildTarget,
-          "DEBUG_INFORMATION_FORMAT": "dwarf",
-          "INFOPLIST_FILE": stubPlistPaths.watchOSAppExStub,
-          "PRODUCT_BUNDLE_IDENTIFIER": watchExtBundleID,
-          "PRODUCT_NAME": watchExtTargetName,
-          "SDKROOT": "watchos",
-          "WATCHOS_DEPLOYMENT_TARGET": "2.0",
-          "TULSI_BUILD_PATH": watchExtBuildPath,
+        "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
+        "BAZEL_TARGET": watchExtBuildTarget,
+        "DEBUG_INFORMATION_FORMAT": "dwarf",
+        "INFOPLIST_FILE": stubPlistPaths.watchOSAppExStub,
+        "PRODUCT_BUNDLE_IDENTIFIER": watchExtBundleID,
+        "PRODUCT_NAME": watchExtTargetName,
+        "SDKROOT": "watchos",
+        "WATCHOS_DEPLOYMENT_TARGET": "2.0",
+        "TULSI_BUILD_PATH": watchExtBuildPath,
       ]
       let expectedTarget = TargetDefinition(
-          name: watchExtTargetName,
-          buildConfigurations: [
-              BuildConfigurationDefinition(
-                  name: "Debug",
-                  expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "Release",
-                  expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Debug",
-                  expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-              BuildConfigurationDefinition(
-                  name: "__TulsiTestRunner_Release",
-                  expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-              ),
-          ],
-          expectedBuildPhases: [
-            BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: watchExtBuildTarget)
-          ]
+        name: watchExtTargetName,
+        buildConfigurations: [
+          BuildConfigurationDefinition(
+            name: "Debug",
+            expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "Release",
+            expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Debug",
+            expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+          BuildConfigurationDefinition(
+            name: "__TulsiTestRunner_Release",
+            expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+          ),
+        ],
+        expectedBuildPhases: [
+          BazelShellScriptBuildPhaseDefinition(
+            bazelPath: bazelPath, buildTarget: watchExtBuildTarget),
+        ]
       )
       assertTarget(expectedTarget, inTargets: targets)
     }
@@ -1924,26 +2033,29 @@
     let macCLIAppBundleID = "macCLIAppBundleID"
     let macAppExtBundleID = "macAppExtBundleID"
     let rules = Set([
-      makeTestRuleEntry(appBuildTarget,
-                        type: "macos_application",
-                        extensions: Set([BuildLabel(macAppExtBuildTarget)]),
-                        bundleID: appBundleID,
-                        productType: .Application,
-                        platformType: "macos",
-                        osDeploymentTarget: "10.13"),
-      makeTestRuleEntry(macAppExtBuildTarget,
-                        type: "macos_extension",
-                        bundleID: macAppExtBundleID,
-                        productType: .AppExtension,
-                        platformType: "macos",
-                        osDeploymentTarget: "10.13"),
-      makeTestRuleEntry(macCLIAppBuildTarget,
-                        type: "macos_command_line_application",
-                        bundleID: macCLIAppBundleID,
-                        productType: .Tool,
-                        platformType: "macos",
-                        osDeploymentTarget: "10.13")
-      ])
+      makeTestRuleEntry(
+        appBuildTarget,
+        type: "macos_application",
+        extensions: Set([BuildLabel(macAppExtBuildTarget)]),
+        bundleID: appBundleID,
+        productType: .Application,
+        platformType: "macos",
+        osDeploymentTarget: "10.13"),
+      makeTestRuleEntry(
+        macAppExtBuildTarget,
+        type: "macos_extension",
+        bundleID: macAppExtBundleID,
+        productType: .AppExtension,
+        platformType: "macos",
+        osDeploymentTarget: "10.13"),
+      makeTestRuleEntry(
+        macCLIAppBuildTarget,
+        type: "macos_command_line_application",
+        bundleID: macCLIAppBundleID,
+        productType: .Tool,
+        platformType: "macos",
+        osDeploymentTarget: "10.13"),
+    ])
 
     do {
       try targetGenerator.generateBuildTargetsForRuleEntries(rules, ruleEntryMap: RuleEntryMap())
@@ -1990,7 +2102,7 @@
           ),
         ],
         expectedBuildPhases: [
-          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: appBuildTarget)
+          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: appBuildTarget),
         ]
       )
       assertTarget(expectedTarget, inTargets: targets)
@@ -2028,7 +2140,8 @@
           ),
         ],
         expectedBuildPhases: [
-          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: macAppExtBuildTarget)
+          BazelShellScriptBuildPhaseDefinition(
+            bazelPath: bazelPath, buildTarget: macAppExtBuildTarget),
         ]
       )
       assertTarget(expectedTarget, inTargets: targets)
@@ -2066,7 +2179,8 @@
           ),
         ],
         expectedBuildPhases: [
-          BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: macCLIAppBuildTarget)
+          BazelShellScriptBuildPhaseDefinition(
+            bazelPath: bazelPath, buildTarget: macCLIAppBuildTarget),
         ]
       )
       assertTarget(expectedTarget, inTargets: targets)
@@ -2076,10 +2190,11 @@
   func testGenerateIndexerWithNoSources() {
     let ruleEntry = makeTestRuleEntry("test/app:TestApp", type: "ios_application")
     var proccessedEntries = [RuleEntry: (NSOrderedSet)]()
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
     targetGenerator.generateIndexerTargets()
     let targets = project.targetByName
     XCTAssert(targets.isEmpty)
@@ -2087,16 +2202,18 @@
 
   func testGenerateIndexerWithNoPCHFile() {
     let buildLabel = BuildLabel("test/app:TestApp")
-    let ruleEntry = makeTestRuleEntry(buildLabel,
-                                      type: "ios_application",
-                                      sourceFiles: sourceFileNames)
+    let ruleEntry = makeTestRuleEntry(
+      buildLabel,
+      type: "ios_application",
+      sourceFiles: sourceFileNames)
     var proccessedEntries = [RuleEntry: (NSOrderedSet)]()
     let indexerTargetName = String(format: "_idx_TestApp_%08X_ios_min9.0", buildLabel.hashValue)
 
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
     targetGenerator.generateIndexerTargets()
 
     let targets = project.targetByName
@@ -2106,22 +2223,25 @@
 
   func testGenerateIndexer() {
     let buildLabel = BuildLabel("test/app:TestApp")
-    let ruleEntry = makeTestRuleEntry("test/app:TestApp",
-                                      type: "ios_application",
-                                      attributes: ["pch": ["path": pchFile.path!, "src": true] as AnyObject],
-                                      sourceFiles: sourceFileNames)
+    let ruleEntry = makeTestRuleEntry(
+      "test/app:TestApp",
+      type: "ios_application",
+      attributes: ["pch": ["path": pchFile.path!, "src": true] as AnyObject],
+      sourceFiles: sourceFileNames)
     var proccessedEntries = [RuleEntry: (NSOrderedSet)]()
     let indexerTargetName = String(format: "_idx_TestApp_%08X_ios_min9.0", buildLabel.hashValue)
 
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
     targetGenerator.generateIndexerTargets()
 
     let targets = project.targetByName
     XCTAssertEqual(targets.count, 1)
-    validateIndexerTarget(indexerTargetName, sourceFileNames: sourceFileNames, pchFile: pchFile, inTargets: targets)
+    validateIndexerTarget(
+      indexerTargetName, sourceFileNames: sourceFileNames, pchFile: pchFile, inTargets: targets)
   }
 
   func testGenerateIndexerWithBridgingHeader() {
@@ -2129,82 +2249,97 @@
     let ruleAttributes = ["bridging_header": ["path": bridgingHeaderFilePath, "src": true]]
 
     let buildLabel = BuildLabel("test/app:TestApp")
-    let ruleEntry = makeTestRuleEntry(buildLabel,
-                                      type: "ios_binary",
-                                      attributes: ruleAttributes as [String : AnyObject],
-                                      sourceFiles: sourceFileNames)
+    let ruleEntry = makeTestRuleEntry(
+      buildLabel,
+      type: "ios_binary",
+      attributes: ruleAttributes as [String: AnyObject],
+      sourceFiles: sourceFileNames)
     var proccessedEntries = [RuleEntry: (NSOrderedSet)]()
     let indexerTargetName = String(format: "_idx_TestApp_%08X_ios_min9.0", buildLabel.hashValue)
 
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
     targetGenerator.generateIndexerTargets()
 
     let targets = project.targetByName
     XCTAssertEqual(targets.count, 1)
-    validateIndexerTarget(indexerTargetName,
-                          sourceFileNames: sourceFileNames,
-                          bridgingHeader: "$(TULSI_BWRS)/\(bridgingHeaderFilePath)",
-                          inTargets: targets)
+    validateIndexerTarget(
+      indexerTargetName,
+      sourceFileNames: sourceFileNames,
+      bridgingHeader: "$(TULSI_BWRS)/\(bridgingHeaderFilePath)",
+      inTargets: targets)
   }
 
   func testGenerateIndexerWithGeneratedBridgingHeader() {
     let bridgingHeaderFilePath = "some/place/bridging-header.h"
-    let bridgingHeaderInfo = ["path": bridgingHeaderFilePath,
-                              "root": "bazel-genfiles",
-                              "src": false] as [String : Any]
+    let bridgingHeaderInfo = [
+      "path": bridgingHeaderFilePath,
+      "root": "bazel-genfiles",
+      "src": false
+    ] as [String: Any]
     let ruleAttributes = ["bridging_header": bridgingHeaderInfo]
 
     let buildLabel = BuildLabel("test/app:TestApp")
-    let ruleEntry = makeTestRuleEntry(buildLabel,
-                                      type: "ios_binary",
-                                      attributes: ruleAttributes as [String : AnyObject],
-                                      sourceFiles: sourceFileNames)
+    let ruleEntry = makeTestRuleEntry(
+      buildLabel,
+      type: "ios_binary",
+      attributes: ruleAttributes as [String: AnyObject],
+      sourceFiles: sourceFileNames)
     var proccessedEntries = [RuleEntry: (NSOrderedSet)]()
     let indexerTargetName = String(format: "_idx_TestApp_%08X_ios_min9.0", buildLabel.hashValue)
 
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
     targetGenerator.generateIndexerTargets()
 
     let targets = project.targetByName
     XCTAssertEqual(targets.count, 1)
-    validateIndexerTarget(indexerTargetName,
-                          sourceFileNames: sourceFileNames,
-                          bridgingHeader: "$(TULSI_WR)/bazel-genfiles/\(bridgingHeaderFilePath)",
-                          inTargets: targets)
+    validateIndexerTarget(
+      indexerTargetName,
+      sourceFileNames: sourceFileNames,
+      bridgingHeader: "$(TULSI_WR)/bazel-genfiles/\(bridgingHeaderFilePath)",
+      inTargets: targets)
   }
 
   func testGenerateIndexerWithXCDataModel() {
     let dataModel = "test.xcdatamodeld"
-    let ruleAttributes = ["datamodels": [["path": "\(dataModel)/v1.xcdatamodel", "src": true],
-                                         ["path": "\(dataModel)/v2.xcdatamodel", "src": true]]]
+    let ruleAttributes = [
+      "datamodels": [
+        ["path": "\(dataModel)/v1.xcdatamodel", "src": true],
+        ["path": "\(dataModel)/v2.xcdatamodel", "src": true]
+      ]
+    ]
 
     let buildLabel = BuildLabel("test/app:TestApp")
-    let ruleEntry = makeTestRuleEntry(buildLabel,
-                                      type: "ios_binary",
-                                      attributes: ruleAttributes as [String : AnyObject],
-                                      sourceFiles: sourceFileNames)
+    let ruleEntry = makeTestRuleEntry(
+      buildLabel,
+      type: "ios_binary",
+      attributes: ruleAttributes as [String: AnyObject],
+      sourceFiles: sourceFileNames)
     var proccessedEntries = [RuleEntry: (NSOrderedSet)]()
     let indexerTargetName = String(format: "_idx_TestApp_%08X_ios_min9.0", buildLabel.hashValue)
 
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters.union(Set([dataModel])),
-                                                processedEntries: &proccessedEntries)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters.union(Set([dataModel])),
+      processedEntries: &proccessedEntries)
     targetGenerator.generateIndexerTargets()
 
     var allSourceFiles = sourceFileNames
     allSourceFiles.append(dataModel)
     let targets = project.targetByName
     XCTAssertEqual(targets.count, 1)
-    validateIndexerTarget(indexerTargetName,
-                          sourceFileNames: allSourceFiles,
-                          inTargets: targets)
+    validateIndexerTarget(
+      indexerTargetName,
+      sourceFileNames: allSourceFiles,
+      inTargets: targets)
   }
 
   func testGenerateIndexerWithSourceFilter() {
@@ -2217,16 +2352,18 @@
     allSourceFiles.append("this/file/should/not/appear.m")
 
     let buildLabel = BuildLabel("test/app:TestApp")
-    let ruleEntry = makeTestRuleEntry(buildLabel,
-                                      type: "ios_application",
-                                      sourceFiles: allSourceFiles)
+    let ruleEntry = makeTestRuleEntry(
+      buildLabel,
+      type: "ios_application",
+      sourceFiles: allSourceFiles)
     var proccessedEntries = [RuleEntry: (NSOrderedSet)]()
     let indexerTargetName = String(format: "_idx_TestApp_%08X_ios_min9.0", buildLabel.hashValue)
 
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
     targetGenerator.generateIndexerTargets()
 
     let targets = project.targetByName
@@ -2244,16 +2381,18 @@
     allSourceFiles.append("filtered/file.m")
 
     let buildLabel = BuildLabel("test/app:TestApp")
-    let ruleEntry = makeTestRuleEntry(buildLabel,
-                                      type: "ios_application",
-                                      sourceFiles: allSourceFiles)
+    let ruleEntry = makeTestRuleEntry(
+      buildLabel,
+      type: "ios_application",
+      sourceFiles: allSourceFiles)
     var proccessedEntries = [RuleEntry: (NSOrderedSet)]()
     let indexerTargetName = String(format: "_idx_TestApp_%08X_ios_min9.0", buildLabel.hashValue)
 
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
     targetGenerator.generateIndexerTargets()
 
     let targets = project.targetByName
@@ -2265,15 +2404,17 @@
     let buildFilePath = "this/file/should/not/BUILD"
     pathFilters.insert("this/file/should")
     let buildLabel = BuildLabel("test/app:TestApp")
-    let ruleEntry = makeTestRuleEntry(buildLabel,
-                                      type: "ios_application",
-                                      sourceFiles: sourceFileNames,
-                                      buildFilePath: buildFilePath)
+    let ruleEntry = makeTestRuleEntry(
+      buildLabel,
+      type: "ios_application",
+      sourceFiles: sourceFileNames,
+      buildFilePath: buildFilePath)
     var proccessedEntries = [RuleEntry: (NSOrderedSet)]()
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
     targetGenerator.generateIndexerTargets()
     XCTAssertNil(fileRefForPath(buildFilePath))
   }
@@ -2282,15 +2423,17 @@
     let buildFilePath = "this/file/should/BUILD"
     pathFilters.insert("this/file/should")
     let buildLabel = BuildLabel("test/app:TestApp")
-    let ruleEntry = makeTestRuleEntry(buildLabel,
-                                      type: "ios_application",
-                                      sourceFiles: sourceFileNames,
-                                      buildFilePath: buildFilePath)
+    let ruleEntry = makeTestRuleEntry(
+      buildLabel,
+      type: "ios_application",
+      sourceFiles: sourceFileNames,
+      buildFilePath: buildFilePath)
     var proccessedEntries = [RuleEntry: (NSOrderedSet)]()
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
     targetGenerator.generateIndexerTargets()
     XCTAssertNotNil(fileRefForPath(buildFilePath))
   }
@@ -2299,15 +2442,17 @@
     let buildFilePath = "this/file/should/BUILD"
     pathFilters.insert("this/file/...")
     let buildLabel = BuildLabel("test/app:TestApp")
-    let ruleEntry = makeTestRuleEntry(buildLabel,
-                                      type: "ios_application",
-                                      sourceFiles: sourceFileNames,
-                                      buildFilePath: buildFilePath)
+    let ruleEntry = makeTestRuleEntry(
+      buildLabel,
+      type: "ios_application",
+      sourceFiles: sourceFileNames,
+      buildFilePath: buildFilePath)
     var proccessedEntries = [RuleEntry: (NSOrderedSet)]()
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
     targetGenerator.generateIndexerTargets()
     XCTAssertNotNil(fileRefForPath(buildFilePath))
   }
@@ -2316,52 +2461,60 @@
     let sourceFiles1 = ["1.swift", "1.cc"]
     let buildLabel1 = BuildLabel("test/app:TestBinary")
 
-    let ruleEntry1 = makeTestRuleEntry(buildLabel1,
-                                       type: "ios_binary",
-                                       attributes: ["pch": ["path": pchFile.path!, "src": true] as AnyObject],
-                                       sourceFiles: sourceFiles1)
+    let ruleEntry1 = makeTestRuleEntry(
+      buildLabel1,
+      type: "ios_binary",
+      attributes: ["pch": ["path": pchFile.path!, "src": true] as AnyObject],
+      sourceFiles: sourceFiles1)
     var proccessedEntries = [RuleEntry: (NSOrderedSet)]()
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry1,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry1,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
 
     let sourceFiles2 = ["2.swift"]
     let buildLabel2 = BuildLabel("test/app:TestLibrary")
-    let ruleEntry2 = makeTestRuleEntry(buildLabel2,
-                                       type: "objc_library",
-                                       attributes: ["pch": ["path": pchFile.path!, "src": true] as AnyObject],
-                                       sourceFiles: sourceFiles2)
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry2,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    let ruleEntry2 = makeTestRuleEntry(
+      buildLabel2,
+      type: "objc_library",
+      attributes: ["pch": ["path": pchFile.path!, "src": true] as AnyObject],
+      sourceFiles: sourceFiles2)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry2,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
     targetGenerator.generateIndexerTargets()
 
     let targets = project.targetByName
     XCTAssertEqual(targets.count, 1)
 
-    let indexerTargetName = String(format: "_idx_TestLibrary_TestBinary_%08X_ios_min9.0",
-                                   buildLabel1.hashValue &+ buildLabel2.hashValue)
-    validateIndexerTarget(indexerTargetName,
-                          sourceFileNames: sourceFiles1 + sourceFiles2,
-                          pchFile: pchFile,
-                          inTargets: targets)
+    let indexerTargetName = String(
+      format: "_idx_TestLibrary_TestBinary_%08X_ios_min9.0",
+      buildLabel1.hashValue &+ buildLabel2.hashValue)
+    validateIndexerTarget(
+      indexerTargetName,
+      sourceFileNames: sourceFiles1 + sourceFiles2,
+      pchFile: pchFile,
+      inTargets: targets)
   }
 
   func testIndexerCharacterLimit() {
     let sourceFiles1 = ["1.swift", "1.cc"]
     let buildTargetName1 = String(repeating: "A", count: 300)
     let buildLabel1 = BuildLabel("test/app:" + buildTargetName1)
-    let ruleEntry1 = makeTestRuleEntry(buildLabel1,
-                                       type: "ios_binary",
-                                       attributes: ["pch": ["path": pchFile.path!, "src": true] as AnyObject],
-                                       sourceFiles: sourceFiles1)
+    let ruleEntry1 = makeTestRuleEntry(
+      buildLabel1,
+      type: "ios_binary",
+      attributes: ["pch": ["path": pchFile.path!, "src": true] as AnyObject],
+      sourceFiles: sourceFiles1)
     var proccessedEntries = [RuleEntry: (NSOrderedSet)]()
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry1,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry1,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
     targetGenerator.generateIndexerTargets()
 
     let targets = project.targetByName
@@ -2370,37 +2523,42 @@
     let resultingTarget = targets.values.first!
     XCTAssertLessThan(resultingTarget.name.count, 255)
 
-    validateIndexerTarget(resultingTarget.name,
-                          sourceFileNames: sourceFiles1,
-                          pchFile: pchFile,
-                          inTargets: targets)
+    validateIndexerTarget(
+      resultingTarget.name,
+      sourceFileNames: sourceFiles1,
+      pchFile: pchFile,
+      inTargets: targets)
   }
 
   func testCompatibleIndexersMergeCharacterLimit() {
     let sourceFiles1 = ["1.swift", "1.cc"]
     let buildTargetName1 = String(repeating: "A", count: 200)
     let buildLabel1 = BuildLabel("test/app:" + buildTargetName1)
-    let ruleEntry1 = makeTestRuleEntry(buildLabel1,
-                                       type: "ios_binary",
-                                       attributes: ["pch": ["path": pchFile.path!, "src": true] as AnyObject],
-                                       sourceFiles: sourceFiles1)
+    let ruleEntry1 = makeTestRuleEntry(
+      buildLabel1,
+      type: "ios_binary",
+      attributes: ["pch": ["path": pchFile.path!, "src": true] as AnyObject],
+      sourceFiles: sourceFiles1)
     var proccessedEntries = [RuleEntry: (NSOrderedSet)]()
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry1,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry1,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
 
     let sourceFiles2 = ["2.swift"]
     let buildTargetName2 = String(repeating: "B", count: 255)
     let buildLabel2 = BuildLabel("test/app:" + buildTargetName2)
-    let ruleEntry2 = makeTestRuleEntry(buildLabel2,
-                                       type: "objc_library",
-                                       attributes: ["pch": ["path": pchFile.path!, "src": true] as AnyObject],
-                                       sourceFiles: sourceFiles2)
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry2,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    let ruleEntry2 = makeTestRuleEntry(
+      buildLabel2,
+      type: "objc_library",
+      attributes: ["pch": ["path": pchFile.path!, "src": true] as AnyObject],
+      sourceFiles: sourceFiles2)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry2,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
     targetGenerator.generateIndexerTargets()
 
     let targets = project.targetByName
@@ -2409,88 +2567,107 @@
     let resultingTarget = targets.values.first!
     XCTAssertLessThan(resultingTarget.name.count, 255)
 
-    validateIndexerTarget(resultingTarget.name,
-                          sourceFileNames: sourceFiles1 + sourceFiles2,
-                          pchFile: pchFile,
-                          inTargets: targets)
+    validateIndexerTarget(
+      resultingTarget.name,
+      sourceFileNames: sourceFiles1 + sourceFiles2,
+      pchFile: pchFile,
+      inTargets: targets)
   }
 
   func testDoesNotMergeIndexerWithPCHMismatch() {
     let buildLabel1 = BuildLabel("test/app:TestBinary")
-    let ruleEntry1 = makeTestRuleEntry(buildLabel1,
-                                       type: "ios_binary",
-                                       attributes: ["pch": ["path": pchFile.path!, "src": true] as AnyObject],
-                                       sourceFiles: sourceFileNames)
+    let ruleEntry1 = makeTestRuleEntry(
+      buildLabel1,
+      type: "ios_binary",
+      attributes: ["pch": ["path": pchFile.path!, "src": true] as AnyObject],
+      sourceFiles: sourceFileNames)
     var proccessedEntries = [RuleEntry: (NSOrderedSet)]()
-    let indexer1TargetName = String(format: "_idx_TestBinary_%08X_ios_min9.0", buildLabel1.hashValue)
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry1,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    let indexer1TargetName = String(
+      format: "_idx_TestBinary_%08X_ios_min9.0", buildLabel1.hashValue)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry1,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
 
     let buildLabel2 = BuildLabel("test/app:TestLibrary")
-    let ruleEntry2 = makeTestRuleEntry(buildLabel2,
-                                       type: "objc_library",
-                                       attributes: [:],
-                                       sourceFiles: sourceFileNames)
-    let indexer2TargetName = String(format: "_idx_TestLibrary_%08X_ios_min9.0", buildLabel2.hashValue)
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry2,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    let ruleEntry2 = makeTestRuleEntry(
+      buildLabel2,
+      type: "objc_library",
+      attributes: [:],
+      sourceFiles: sourceFileNames)
+    let indexer2TargetName = String(
+      format: "_idx_TestLibrary_%08X_ios_min9.0", buildLabel2.hashValue)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry2,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
     targetGenerator.generateIndexerTargets()
 
     let targets = project.targetByName
     XCTAssertEqual(targets.count, 2)
-    validateIndexerTarget(indexer1TargetName,
-                          sourceFileNames: sourceFileNames,
-                          pchFile: pchFile,
-                          inTargets: targets)
-    validateIndexerTarget(indexer2TargetName,
-                          sourceFileNames: sourceFileNames,
-                          inTargets: targets)
+    validateIndexerTarget(
+      indexer1TargetName,
+      sourceFileNames: sourceFileNames,
+      pchFile: pchFile,
+      inTargets: targets)
+    validateIndexerTarget(
+      indexer2TargetName,
+      sourceFileNames: sourceFileNames,
+      inTargets: targets)
   }
 
   func testDoesNotMergeIndexerWithGeneratedBridgingHeaderMismatch() {
     let bridgingHeaderFilePath = "some/place/bridging-header.h"
-    let bridgingHeaderInfo = ["path": bridgingHeaderFilePath,
-                              "root": "bazel-genfiles",
-                              "src": false] as [String : Any]
+    let bridgingHeaderInfo = [
+      "path": bridgingHeaderFilePath,
+      "root": "bazel-genfiles",
+      "src": false
+    ] as [String: Any]
     let ruleAttributes1 = ["bridging_header": bridgingHeaderInfo]
 
     let buildLabel1 = BuildLabel("test/app:TestBinary")
-    let ruleEntry1 = makeTestRuleEntry(buildLabel1,
-                                       type: "ios_binary",
-                                       attributes: ruleAttributes1 as [String : AnyObject],
-                                       sourceFiles: sourceFileNames)
+    let ruleEntry1 = makeTestRuleEntry(
+      buildLabel1,
+      type: "ios_binary",
+      attributes: ruleAttributes1 as [String: AnyObject],
+      sourceFiles: sourceFileNames)
     var proccessedEntries = [RuleEntry: (NSOrderedSet)]()
-    let indexer1TargetName = String(format: "_idx_TestBinary_%08X_ios_min9.0", buildLabel1.hashValue)
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry1,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    let indexer1TargetName = String(
+      format: "_idx_TestBinary_%08X_ios_min9.0", buildLabel1.hashValue)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry1,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
 
     let buildLabel2 = BuildLabel("test/app:TestLibrary")
-    let ruleEntry2 = makeTestRuleEntry(buildLabel2,
-                                       type: "objc_library",
-                                       attributes: [:],
-                                       sourceFiles: sourceFileNames)
-    let indexer2TargetName = String(format: "_idx_TestLibrary_%08X_ios_min9.0", buildLabel2.hashValue)
-    targetGenerator.registerRuleEntryForIndexer(ruleEntry2,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    let ruleEntry2 = makeTestRuleEntry(
+      buildLabel2,
+      type: "objc_library",
+      attributes: [:],
+      sourceFiles: sourceFileNames)
+    let indexer2TargetName = String(
+      format: "_idx_TestLibrary_%08X_ios_min9.0", buildLabel2.hashValue)
+    targetGenerator.registerRuleEntryForIndexer(
+      ruleEntry2,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
     targetGenerator.generateIndexerTargets()
 
     let targets = project.targetByName
     XCTAssertEqual(targets.count, 2)
-    validateIndexerTarget(indexer1TargetName,
-                          sourceFileNames: sourceFileNames,
-                          bridgingHeader: "$(TULSI_WR)/bazel-genfiles/\(bridgingHeaderFilePath)",
-                          inTargets: targets)
-    validateIndexerTarget(indexer2TargetName,
-                          sourceFileNames: sourceFileNames,
-                          inTargets: targets)
+    validateIndexerTarget(
+      indexer1TargetName,
+      sourceFileNames: sourceFileNames,
+      bridgingHeader: "$(TULSI_WR)/bazel-genfiles/\(bridgingHeaderFilePath)",
+      inTargets: targets)
+    validateIndexerTarget(
+      indexer2TargetName,
+      sourceFileNames: sourceFileNames,
+      inTargets: targets)
   }
 
   func testSwiftTargetsGeneratedSYMBundles() {
@@ -2502,17 +2679,19 @@
     let swiftTargetName = "SwiftTarget"
     let swiftTarget = "\(package):\(swiftTargetName)"
 
-    let testRule = makeTestRuleEntry(target,
-                                     type: targetType,
-                                     attributes: ["has_swift_dependency": true as AnyObject],
-                                     dependencies: Set([BuildLabel(swiftTarget)]),
-                                     productType: .Application)
+    let testRule = makeTestRuleEntry(
+      target,
+      type: targetType,
+      attributes: ["has_swift_dependency": true as AnyObject],
+      dependencies: Set([BuildLabel(swiftTarget)]),
+      productType: .Application)
     let swiftLibraryRule = makeTestRuleEntry(swiftTarget, type: "swift_library")
     let ruleEntryMap = makeRuleEntryMap(withRuleEntries: [swiftLibraryRule])
 
     do {
-      try targetGenerator.generateBuildTargetsForRuleEntries([testRule],
-                                                             ruleEntryMap: ruleEntryMap)
+      try targetGenerator.generateBuildTargetsForRuleEntries(
+        [testRule],
+        ruleEntryMap: ruleEntryMap)
     } catch let e as NSError {
       XCTFail("Failed to generate build targets with error \(e.localizedDescription)")
     }
@@ -2522,37 +2701,37 @@
     XCTAssertEqual(targets.count, 1)
 
     let expectedBuildSettings = [
-        "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
-        "BAZEL_TARGET": target,
-        "DEBUG_INFORMATION_FORMAT": "dwarf",
-        "INFOPLIST_FILE": "TestInfo.plist",
-        "PRODUCT_NAME": targetName,
-        "SDKROOT": "iphoneos",
-        "TULSI_BUILD_PATH": package,
+      "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME": "Stub Launch Image",
+      "BAZEL_TARGET": target,
+      "DEBUG_INFORMATION_FORMAT": "dwarf",
+      "INFOPLIST_FILE": "TestInfo.plist",
+      "PRODUCT_NAME": targetName,
+      "SDKROOT": "iphoneos",
+      "TULSI_BUILD_PATH": package,
     ]
     let expectedTarget = TargetDefinition(
-        name: "TestTarget",
-        buildConfigurations: [
-            BuildConfigurationDefinition(
-                name: "Debug",
-                expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
-            ),
-            BuildConfigurationDefinition(
-                name: "Release",
-                expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
-            ),
-            BuildConfigurationDefinition(
-                name: "__TulsiTestRunner_Debug",
-                expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-            ),
-            BuildConfigurationDefinition(
-                name: "__TulsiTestRunner_Release",
-                expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
-            ),
-        ],
-        expectedBuildPhases: [
-            BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: target)
-        ]
+      name: "TestTarget",
+      buildConfigurations: [
+        BuildConfigurationDefinition(
+          name: "Debug",
+          expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
+        ),
+        BuildConfigurationDefinition(
+          name: "Release",
+          expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
+        ),
+        BuildConfigurationDefinition(
+          name: "__TulsiTestRunner_Debug",
+          expectedBuildSettings: debugTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+        ),
+        BuildConfigurationDefinition(
+          name: "__TulsiTestRunner_Release",
+          expectedBuildSettings: releaseTestRunnerBuildSettingsFromSettings(expectedBuildSettings)
+        ),
+      ],
+      expectedBuildPhases: [
+        BazelShellScriptBuildPhaseDefinition(bazelPath: bazelPath, buildTarget: target),
+      ]
     )
     assertTarget(expectedTarget, inTargets: targets)
   }
@@ -2562,30 +2741,36 @@
 
     let swiftTargetName = "SwiftTarget"
     let swiftTargetBuildLabel = BuildLabel("\(package):\(swiftTargetName)")
-    let swiftTargetOpts = ["-I/include/foobar",  "-DCOMPILER_DEFINE"] as AnyObject
+    let swiftTargetOpts = ["-I/include/foobar", "-DCOMPILER_DEFINE"] as AnyObject
 
-    let swiftLibraryRule = makeTestRuleEntry(swiftTargetBuildLabel,
-                                             type: "swift_library",
-                                             attributes: ["swiftc_opts": swiftTargetOpts,
-                                                          "has_swift_info": true as AnyObject],
-                                             sourceFiles: sourceFileNames)
+    let swiftLibraryRule = makeTestRuleEntry(
+      swiftTargetBuildLabel,
+      type: "swift_library",
+      attributes: [
+        "swiftc_opts": swiftTargetOpts,
+        "has_swift_info": true as AnyObject
+      ],
+      sourceFiles: sourceFileNames)
 
     var proccessedEntries = [RuleEntry: (NSOrderedSet)]()
-    let indexerTargetName = String(format: "_idx_\(swiftTargetName)_%08X_ios_min9.0", swiftTargetBuildLabel.hashValue)
-    targetGenerator.registerRuleEntryForIndexer(swiftLibraryRule,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &proccessedEntries)
+    let indexerTargetName = String(
+      format: "_idx_\(swiftTargetName)_%08X_ios_min9.0", swiftTargetBuildLabel.hashValue)
+    targetGenerator.registerRuleEntryForIndexer(
+      swiftLibraryRule,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &proccessedEntries)
     targetGenerator.generateIndexerTargets()
 
     let targets = project.targetByName
     XCTAssertEqual(targets.count, 1)
-    validateIndexerTarget(indexerTargetName,
-                          sourceFileNames: sourceFileNames,
-                          swiftIncludePaths: "$(inherited) /include/foobar",
-                          otherSwiftFlags: "$(inherited) -DCOMPILER_DEFINE",
-                          isSwift: true,
-                          inTargets: targets)
+    validateIndexerTarget(
+      indexerTargetName,
+      sourceFileNames: sourceFileNames,
+      swiftIncludePaths: "$(inherited) /include/foobar",
+      otherSwiftFlags: "$(inherited) -DCOMPILER_DEFINE",
+      isSwift: true,
+      inTargets: targets)
   }
 
   func testIndexerCFlags() {
@@ -2595,27 +2780,33 @@
     let swiftTargetBuildLabel = BuildLabel("\(package):\(swiftTargetName)")
     let swiftTargetCOpts = ["-iquote", "foo/bar", "-iquote", "."] as AnyObject
 
-    let swiftLibraryRule = makeTestRuleEntry(swiftTargetBuildLabel,
-                                             type: "swift_library",
-                                             attributes: ["copts": swiftTargetCOpts,
-                                                          "has_swift_info": true as AnyObject],
-                                             sourceFiles: sourceFileNames)
+    let swiftLibraryRule = makeTestRuleEntry(
+      swiftTargetBuildLabel,
+      type: "swift_library",
+      attributes: [
+        "copts": swiftTargetCOpts,
+        "has_swift_info": true as AnyObject
+      ],
+      sourceFiles: sourceFileNames)
 
     var processedEntries = [RuleEntry: (NSOrderedSet)]()
-    let indexerTargetName = String(format: "_idx_\(swiftTargetName)_%08X_ios_min9.0", swiftTargetBuildLabel.hashValue)
-    targetGenerator.registerRuleEntryForIndexer(swiftLibraryRule,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &processedEntries)
+    let indexerTargetName = String(
+      format: "_idx_\(swiftTargetName)_%08X_ios_min9.0", swiftTargetBuildLabel.hashValue)
+    targetGenerator.registerRuleEntryForIndexer(
+      swiftLibraryRule,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &processedEntries)
     targetGenerator.generateIndexerTargets()
 
     let targets = project.targetByName
     XCTAssertEqual(targets.count, 1)
-    validateIndexerTarget(indexerTargetName,
-                          sourceFileNames: sourceFileNames,
-                          otherCFlags: "-iquote foo/bar -iquote .",
-                          isSwift: true,
-                          inTargets: targets)
+    validateIndexerTarget(
+      indexerTargetName,
+      sourceFileNames: sourceFileNames,
+      otherCFlags: "-iquote foo/bar -iquote .",
+      isSwift: true,
+      inTargets: targets)
   }
 
   func testIndexerCFlagsDefinesEscaping() {
@@ -2624,32 +2815,37 @@
     let objcTargetName = "ObjcTarget"
     let objcTargetBuildLabel = BuildLabel("\(package):\(objcTargetName)")
     let objcTargetDefines = [
-        "A=value with space",
-        "'B=preescaped value'",
-        "\"C=preescaped value\"",
-        "D=nospaces"
+      "A=value with space",
+      "'B=preescaped value'",
+      "\"C=preescaped value\"",
+      "D=nospaces",
     ] as AnyObject
 
-    let objcLibraryRule = makeTestRuleEntry(objcTargetBuildLabel,
-                                            type: "objc_library",
-                                            attributes: ["compiler_defines": objcTargetDefines],
-                                            sourceFiles: sourceFileNames)
+    let objcLibraryRule = makeTestRuleEntry(
+      objcTargetBuildLabel,
+      type: "objc_library",
+      attributes: ["compiler_defines": objcTargetDefines],
+      sourceFiles: sourceFileNames)
 
     var processedEntries = [RuleEntry: (NSOrderedSet)]()
-    let indexerTargetName = String(format: "_idx_\(objcTargetName)_%08X_ios_min9.0", objcTargetBuildLabel.hashValue)
-    targetGenerator.registerRuleEntryForIndexer(objcLibraryRule,
-                                                ruleEntryMap: RuleEntryMap(),
-                                                pathFilters: pathFilters,
-                                                processedEntries: &processedEntries)
+    let indexerTargetName = String(
+      format: "_idx_\(objcTargetName)_%08X_ios_min9.0", objcTargetBuildLabel.hashValue)
+    targetGenerator.registerRuleEntryForIndexer(
+      objcLibraryRule,
+      ruleEntryMap: RuleEntryMap(),
+      pathFilters: pathFilters,
+      processedEntries: &processedEntries)
     targetGenerator.generateIndexerTargets()
 
     let targets = project.targetByName
     XCTAssertEqual(targets.count, 1)
-    validateIndexerTarget(indexerTargetName,
-                          sourceFileNames: sourceFileNames,
-                          otherCFlags: "-D\"C=preescaped value\" -D'B=preescaped value' -D\"A=value with space\" -DD=nospaces",
-                          isSwift: false,
-                          inTargets: targets)
+    validateIndexerTarget(
+      indexerTargetName,
+      sourceFileNames: sourceFileNames,
+      otherCFlags:
+        "-D\"C=preescaped value\" -D'B=preescaped value' -D\"A=value with space\" -DD=nospaces",
+      isSwift: false,
+      inTargets: targets)
   }
 
   // MARK: - Helper methods
@@ -2666,12 +2862,16 @@
     return newSettings
   }
 
-  private func debugTestRunnerBuildSettingsFromSettings(_ settings: [String: String]) -> [String: String] {
+  private func debugTestRunnerBuildSettingsFromSettings(_ settings: [String: String]) -> [String:
+    String]
+  {
     let testRunnerSettings = addTestRunnerSettings(settings)
     return debugBuildSettingsFromSettings(testRunnerSettings)
   }
 
-  private func releaseTestRunnerBuildSettingsFromSettings(_ settings: [String: String]) -> [String: String] {
+  private func releaseTestRunnerBuildSettingsFromSettings(_ settings: [String: String]) -> [String:
+    String]
+  {
     let testRunnerSettings = addTestRunnerSettings(settings)
     return releaseBuildSettingsFromSettings(testRunnerSettings)
   }
@@ -2696,80 +2896,87 @@
   private func rebuildSourceFileReferences() {
     sourceFileReferences = []
     for file in sourceFileNames {
-      sourceFileReferences.append(project.mainGroup.getOrCreateFileReferenceBySourceTree(.Group, path: file))
+      sourceFileReferences.append(
+        project.mainGroup.getOrCreateFileReferenceBySourceTree(.Group, path: file))
     }
   }
 
-  private func makeTestRuleEntry(_ label: String,
-                                 type: String,
-                                 attributes: [String: AnyObject] = [:],
-                                 artifacts: [String] = [],
-                                 sourceFiles: [String] = [],
-                                 dependencies: Set<BuildLabel> = Set(),
-                                 extensions: Set<BuildLabel>? = nil,
-                                 bundleID: String? = nil,
-                                 bundleName: String? = nil,
-                                 productType: PBXTarget.ProductType? = nil,
-                                 extensionBundleID: String? = nil,
-                                 platformType: String? = nil,
-                                 osDeploymentTarget: String? = nil,
-                                 buildFilePath: String? = nil,
-                                 swiftLanguageVersion: String? = nil) -> RuleEntry {
-    return makeTestRuleEntry(BuildLabel(label),
-                             type: type,
-                             attributes: attributes,
-                             artifacts: artifacts,
-                             sourceFiles: sourceFiles,
-                             dependencies: dependencies,
-                             extensions: extensions,
-                             bundleID: bundleID,
-                             bundleName: bundleName,
-                             productType: productType,
-                             extensionBundleID: extensionBundleID,
-                             platformType: platformType,
-                             osDeploymentTarget: osDeploymentTarget,
-                             buildFilePath: buildFilePath,
-                             swiftLanguageVersion: swiftLanguageVersion)
+  private func makeTestRuleEntry(
+    _ label: String,
+    type: String,
+    attributes: [String: AnyObject] = [:],
+    artifacts: [String] = [],
+    sourceFiles: [String] = [],
+    dependencies: Set<BuildLabel> = Set(),
+    extensions: Set<BuildLabel>? = nil,
+    bundleID: String? = nil,
+    bundleName: String? = nil,
+    productType: PBXTarget.ProductType? = nil,
+    extensionBundleID: String? = nil,
+    platformType: String? = nil,
+    osDeploymentTarget: String? = nil,
+    buildFilePath: String? = nil,
+    swiftLanguageVersion: String? = nil
+  ) -> RuleEntry {
+    return makeTestRuleEntry(
+      BuildLabel(label),
+      type: type,
+      attributes: attributes,
+      artifacts: artifacts,
+      sourceFiles: sourceFiles,
+      dependencies: dependencies,
+      extensions: extensions,
+      bundleID: bundleID,
+      bundleName: bundleName,
+      productType: productType,
+      extensionBundleID: extensionBundleID,
+      platformType: platformType,
+      osDeploymentTarget: osDeploymentTarget,
+      buildFilePath: buildFilePath,
+      swiftLanguageVersion: swiftLanguageVersion)
   }
 
-  private class TestBazelFileInfo : BazelFileInfo {
+  private class TestBazelFileInfo: BazelFileInfo {
     init(fullPath: String) {
       super.init(rootPath: "", subPath: fullPath, isDirectory: false, targetType: .sourceFile)
     }
   }
 
-  private func makeTestRuleEntry(_ label: BuildLabel,
-                                 type: String,
-                                 attributes: [String: AnyObject] = [:],
-                                 artifacts: [String] = [],
-                                 sourceFiles: [String] = [],
-                                 dependencies: Set<BuildLabel> = Set(),
-                                 extensions: Set<BuildLabel>? = nil,
-                                 bundleID: String? = nil,
-                                 bundleName: String? = nil,
-                                 productType: PBXTarget.ProductType? = nil,
-                                 extensionBundleID: String? = nil,
-                                 platformType: String? = nil,
-                                 osDeploymentTarget: String? = nil,
-                                 buildFilePath: String? = nil,
-                                 swiftLanguageVersion: String? = nil) -> RuleEntry {
-    let artifactInfos = artifacts.map() { TestBazelFileInfo(fullPath: $0) }
-    let sourceInfos = sourceFiles.map() { TestBazelFileInfo(fullPath: $0) }
-    return RuleEntry(label: label,
-                     type: type,
-                     attributes: attributes,
-                     artifacts: artifactInfos,
-                     sourceFiles: sourceInfos,
-                     dependencies: dependencies,
-                     extensions: extensions,
-                     bundleID: bundleID,
-                     bundleName: bundleName,
-                     productType: productType,
-                     extensionBundleID: extensionBundleID,
-                     platformType: platformType,
-                     osDeploymentTarget: osDeploymentTarget,
-                     buildFilePath: buildFilePath,
-                     swiftLanguageVersion: swiftLanguageVersion)
+  private func makeTestRuleEntry(
+    _ label: BuildLabel,
+    type: String,
+    attributes: [String: AnyObject] = [:],
+    artifacts: [String] = [],
+    sourceFiles: [String] = [],
+    dependencies: Set<BuildLabel> = Set(),
+    extensions: Set<BuildLabel>? = nil,
+    bundleID: String? = nil,
+    bundleName: String? = nil,
+    productType: PBXTarget.ProductType? = nil,
+    extensionBundleID: String? = nil,
+    platformType: String? = nil,
+    osDeploymentTarget: String? = nil,
+    buildFilePath: String? = nil,
+    swiftLanguageVersion: String? = nil
+  ) -> RuleEntry {
+    let artifactInfos = artifacts.map { TestBazelFileInfo(fullPath: $0) }
+    let sourceInfos = sourceFiles.map { TestBazelFileInfo(fullPath: $0) }
+    return RuleEntry(
+      label: label,
+      type: type,
+      attributes: attributes,
+      artifacts: artifactInfos,
+      sourceFiles: sourceInfos,
+      dependencies: dependencies,
+      extensions: extensions,
+      bundleID: bundleID,
+      bundleName: bundleName,
+      productType: productType,
+      extensionBundleID: extensionBundleID,
+      platformType: platformType,
+      osDeploymentTarget: osDeploymentTarget,
+      buildFilePath: buildFilePath,
+      swiftLanguageVersion: swiftLanguageVersion)
   }
 
   private struct TargetDefinition {
@@ -2780,7 +2987,7 @@
 
   private struct BuildConfigurationDefinition {
     let name: String
-    let expectedBuildSettings: Dictionary<String, String>?
+    let expectedBuildSettings: [String: String]?
   }
 
   private class BuildPhaseDefinition {
@@ -2790,7 +2997,7 @@
     let mainGroup: PBXReference?
     let mnemonic: String
 
-    init (isa: String, files: [String], mainGroup: PBXReference? = nil, mnemonic: String = "") {
+    init(isa: String, files: [String], mainGroup: PBXReference? = nil, mnemonic: String = "") {
       self.isa = isa
       self.files = files
       self.fileSet = Set(files)
@@ -2800,18 +3007,20 @@
 
     func validate(_ phase: PBXBuildPhase, line: UInt = #line) {
       // Validate the file set.
-      XCTAssertEqual(phase.files.count,
-                     fileSet.count,
-                     "Mismatch in file count in build phase:\n\(phase.files)\n\(fileSet)",
-                     line: line)
+      XCTAssertEqual(
+        phase.files.count,
+        fileSet.count,
+        "Mismatch in file count in build phase:\n\(phase.files)\n\(fileSet)",
+        line: line)
       for buildFile in phase.files {
         guard let fileRef = buildFile.fileRef as? PBXFileReference else {
           continue
         }
         let path = fileRef.sourceRootRelativePath
-        XCTAssert(fileSet.contains(path),
-                  "Found unexpected file '\(path)' in build phase",
-                  line: line)
+        XCTAssert(
+          fileSet.contains(path),
+          "Found unexpected file '\(path)' in build phase",
+          line: line)
       }
       XCTAssertEqual(phase.mnemonic, mnemonic, "Mismatch in mnemonics")
     }
@@ -2822,10 +3031,11 @@
 
     init(files: [String], mainGroup: PBXReference, settings: [String: String]? = nil) {
       self.settings = settings
-      super.init(isa: "PBXSourcesBuildPhase",
-                 files: files,
-                 mainGroup: mainGroup,
-                 mnemonic: "CompileSources")
+      super.init(
+        isa: "PBXSourcesBuildPhase",
+        files: files,
+        mainGroup: mainGroup,
+        mnemonic: "CompileSources")
     }
 
     override func validate(_ phase: PBXBuildPhase, line: UInt = #line) {
@@ -2833,14 +3043,17 @@
 
       for buildFile in phase.files {
         if settings != nil {
-          XCTAssertNotNil(buildFile.settings, "Settings for file \(buildFile) must == \(String(describing: settings))",
-                          line: line)
+          XCTAssertNotNil(
+            buildFile.settings,
+            "Settings for file \(buildFile) must == \(String(describing: settings))",
+            line: line)
           if buildFile.settings != nil {
             XCTAssertEqual(buildFile.settings!, settings!, line: line)
           }
         } else {
-          XCTAssertNil(buildFile.settings, "Settings for file \(buildFile) must be nil",
-                       line: line)
+          XCTAssertNil(
+            buildFile.settings, "Settings for file \(buildFile) must be nil",
+            line: line)
         }
       }
     }
@@ -2865,12 +3078,14 @@
 
       let script = scriptBuildPhase.shellScript
 
-      XCTAssert(script.contains(bazelPath),
-                "Build script does not contain \(bazelPath)",
-                line: line)
-      XCTAssert(script.contains(buildTarget),
-                "Build script does not contain build target \(buildTarget)",
-                line: line)
+      XCTAssert(
+        script.contains(bazelPath),
+        "Build script does not contain \(bazelPath)",
+        line: line)
+      XCTAssert(
+        script.contains(buildTarget),
+        "Build script does not contain build target \(buildTarget)",
+        line: line)
     }
   }
 
@@ -2887,8 +3102,9 @@
       let scriptBuildPhase = phase as! PBXShellScriptBuildPhase
 
       let script = scriptBuildPhase.shellScript
-      XCTAssert(script.contains("touch"), "Build script does not contain 'touch'.",
-                line: line)
+      XCTAssert(
+        script.contains("touch"), "Build script does not contain 'touch'.",
+        line: line)
     }
   }
 
@@ -2905,8 +3121,9 @@
       let scriptBuildPhase = phase as! PBXShellScriptBuildPhase
 
       let script = scriptBuildPhase.shellScript
-      XCTAssert(script.contains("touch"), "Build script does not contain 'touch'.",
-                line: line)
+      XCTAssert(
+        script.contains("touch"), "Build script does not contain 'touch'.",
+        line: line)
     }
   }
 
@@ -2930,21 +3147,23 @@
     return nil
   }
 
-  private func validateIndexerTarget(_ indexerTargetName: String,
-                                     sourceFileNames: [String]?,
-                                     pchFile: PBXFileReference? = nil,
-                                     bridgingHeader: String? = nil,
-                                     swiftLanguageVersion: String? = nil,
-                                     swiftIncludePaths: String? = nil,
-                                     otherCFlags: String? = nil,
-                                     otherSwiftFlags: String? = nil,
-                                     isSwift: Bool = false,
-                                     inTargets targets: Dictionary<String, PBXTarget> = Dictionary<String, PBXTarget>(),
-                                     line: UInt = #line) {
+  private func validateIndexerTarget(
+    _ indexerTargetName: String,
+    sourceFileNames: [String]?,
+    pchFile: PBXFileReference? = nil,
+    bridgingHeader: String? = nil,
+    swiftLanguageVersion: String? = nil,
+    swiftIncludePaths: String? = nil,
+    otherCFlags: String? = nil,
+    otherSwiftFlags: String? = nil,
+    isSwift: Bool = false,
+    inTargets targets: [String: PBXTarget] = [String: PBXTarget](),
+    line: UInt = #line
+  ) {
     var expectedBuildSettings = [
-        "PRODUCT_NAME": indexerTargetName,
-        "SDKROOT": "iphoneos",
-        "IPHONEOS_DEPLOYMENT_TARGET": "9.0",
+      "PRODUCT_NAME": indexerTargetName,
+      "SDKROOT": "iphoneos",
+      "IPHONEOS_DEPLOYMENT_TARGET": "9.0",
     ]
     if !isSwift {
       expectedBuildSettings["USER_HEADER_SEARCH_PATHS"] = "$(TULSI_WR)"
@@ -2970,71 +3189,82 @@
 
     var expectedBuildPhases = [BuildPhaseDefinition]()
     if sourceFileNames != nil {
-      expectedBuildPhases.append(SourcesBuildPhaseDefinition(files: sourceFileNames!,
-                                                             mainGroup: project.mainGroup))
+      expectedBuildPhases.append(
+        SourcesBuildPhaseDefinition(
+          files: sourceFileNames!,
+          mainGroup: project.mainGroup))
     }
 
     let expectedTarget = TargetDefinition(
-        name: indexerTargetName,
-        buildConfigurations: [
-            BuildConfigurationDefinition(
-              name: "Debug",
-              expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
-            ),
-            BuildConfigurationDefinition(
-              name: "Release",
-              expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
-            ),
-        ],
-        expectedBuildPhases: expectedBuildPhases
+      name: indexerTargetName,
+      buildConfigurations: [
+        BuildConfigurationDefinition(
+          name: "Debug",
+          expectedBuildSettings: debugBuildSettingsFromSettings(expectedBuildSettings)
+        ),
+        BuildConfigurationDefinition(
+          name: "Release",
+          expectedBuildSettings: releaseBuildSettingsFromSettings(expectedBuildSettings)
+        ),
+      ],
+      expectedBuildPhases: expectedBuildPhases
     )
     assertTarget(expectedTarget, inTargets: targets, line: line)
   }
 
-  private func assertTarget(_ targetDef: TargetDefinition,
-                            inTargets targets: Dictionary<String, PBXTarget>,
-                            line: UInt = #line) {
+  private func assertTarget(
+    _ targetDef: TargetDefinition,
+    inTargets targets: [String: PBXTarget],
+    line: UInt = #line
+  ) {
     guard let target = targets[targetDef.name] else {
       XCTFail("Missing expected target '\(targetDef.name)'", line: line)
       return
     }
 
     let buildConfigs = target.buildConfigurationList.buildConfigurations
-    XCTAssertEqual(buildConfigs.count,
-                   targetDef.buildConfigurations.count,
-                   "Build config mismatch in target '\(targetDef.name)'",
-                   line: line)
+    XCTAssertEqual(
+      buildConfigs.count,
+      targetDef.buildConfigurations.count,
+      "Build config mismatch in target '\(targetDef.name)'",
+      line: line)
 
     for buildConfigDef in targetDef.buildConfigurations {
       guard let config = buildConfigs[buildConfigDef.name] else {
-        XCTFail("Missing expected build configuration '\(buildConfigDef.name)' in target '\(targetDef.name)'",
-                line: line)
+        XCTFail(
+          "Missing expected build configuration '\(buildConfigDef.name)' in target '\(targetDef.name)'",
+          line: line)
         continue
       }
 
       if buildConfigDef.expectedBuildSettings != nil {
-        XCTAssertEqual(config.buildSettings,
-                       buildConfigDef.expectedBuildSettings!,
-                       "Build config mismatch for configuration '\(buildConfigDef.name)' in target '\(targetDef.name)'",
-                       line: line)
+        XCTAssertEqual(
+          config.buildSettings,
+          buildConfigDef.expectedBuildSettings!,
+          "Build config mismatch for configuration '\(buildConfigDef.name)' in target '\(targetDef.name)'",
+          line: line)
       } else {
         XCTAssert(config.buildSettings.isEmpty, line: line)
       }
     }
 
-    validateExpectedBuildPhases(targetDef.expectedBuildPhases,
-                                inTarget: target,
-                                line: line)
+    validateExpectedBuildPhases(
+      targetDef.expectedBuildPhases,
+      inTarget: target,
+      line: line)
   }
 
-  private func validateExpectedBuildPhases(_ phaseDefs: [BuildPhaseDefinition],
-                                           inTarget target: PBXTarget,
-                                           line: UInt = #line) {
+  private func validateExpectedBuildPhases(
+    _ phaseDefs: [BuildPhaseDefinition],
+    inTarget target: PBXTarget,
+    line: UInt = #line
+  ) {
     let buildPhases = target.buildPhases
-    XCTAssertEqual(buildPhases.count,
-                   phaseDefs.count,
-                   "Build phase count mismatch in target '\(target.name)'",
-                   line: line)
+    XCTAssertEqual(
+      buildPhases.count,
+      phaseDefs.count,
+      "Build phase count mismatch in target '\(target.name)'",
+      line: line)
 
     var validationCount = 0
     for phaseDef in phaseDefs {
@@ -3046,8 +3276,9 @@
         validationCount += 1
       }
     }
-    XCTAssertEqual(validationCount,
-                   buildPhases.count,
-                   "Validation count mismatch in target '\(target.name)'")
+    XCTAssertEqual(
+      validationCount,
+      buildPhases.count,
+      "Validation count mismatch in target '\(target.name)'")
   }
 }
diff --git a/src/TulsiGeneratorTests/PythonableTests.swift b/src/TulsiGeneratorTests/PythonableTests.swift
index 02680d7..d719c93 100644
--- a/src/TulsiGeneratorTests/PythonableTests.swift
+++ b/src/TulsiGeneratorTests/PythonableTests.swift
@@ -13,6 +13,7 @@
 // limitations under the License.
 
 import XCTest
+
 @testable import TulsiGenerator
 
 class PythonableTests: XCTestCase {
@@ -37,7 +38,7 @@
     let arr = [
       "Hello",
       "Goodbye",
-      "'Escape'"
+      "'Escape'",
     ]
     XCTAssertEqual(arr.toPython(""), """
 [
@@ -46,7 +47,8 @@
     '\\'Escape\\'',
 ]
 """)
-    XCTAssertEqual(arr.toPython("  "), """
+    XCTAssertEqual(
+      arr.toPython("  "), """
 [
       'Hello',
       'Goodbye',
@@ -91,4 +93,3 @@
 """)
   }
 }
-
diff --git a/src/TulsiGeneratorTests/ShellEscapingTests.swift b/src/TulsiGeneratorTests/ShellEscapingTests.swift
index a07bb38..47f0a25 100644
--- a/src/TulsiGeneratorTests/ShellEscapingTests.swift
+++ b/src/TulsiGeneratorTests/ShellEscapingTests.swift
@@ -13,6 +13,7 @@
 // limitations under the License.
 
 import XCTest
+
 @testable import TulsiGenerator
 
 class ShellEscapingTests: XCTestCase {
diff --git a/src/TulsiGeneratorTests/TulsiGeneratorConfigTests.swift b/src/TulsiGeneratorTests/TulsiGeneratorConfigTests.swift
index 5ee0557..8b42811 100644
--- a/src/TulsiGeneratorTests/TulsiGeneratorConfigTests.swift
+++ b/src/TulsiGeneratorTests/TulsiGeneratorConfigTests.swift
@@ -13,14 +13,15 @@
 // limitations under the License.
 
 import XCTest
-@testable import TulsiGenerator
 
+@testable import TulsiGenerator
 
 class TulsiGeneratorConfigTests: XCTestCase {
   let projectName = "TestProject"
   let projectBundleURL = URL(fileURLWithPath: "/test/project/tulsiproject/")
   let projectBazelURL = URL(fileURLWithPath: "/test/project/path/to/bazel")
   let workspaceRootURL = URL(fileURLWithPath: "/test/project/root/")
+
   let bazelPackages = [
     "a/package",
     "b/where/are/we",
@@ -28,35 +29,42 @@
   ]
 
   let buildTargetLabels = ["build/target/label:1", "build/target/label:2"]
-  let pathFilters = Set<String>(["build/target/path/1",
-                                 "build/target/path/2",
-                                 "source/target/path"])
-  let additionalFilePaths = ["path/to/file", "path/to/another/file"]
 
+  let pathFilters = Set<String>([
+    "build/target/path/1",
+    "build/target/path/2",
+    "source/target/path"
+  ])
+
+  let additionalFilePaths = ["path/to/file", "path/to/another/file"]
 
   var project: TulsiProject! = nil
 
   override func setUp() {
     super.setUp()
-    project = TulsiProject(projectName: projectName,
-                           projectBundleURL: projectBundleURL,
-                           workspaceRootURL: workspaceRootURL,
-                           bazelPackages: bazelPackages)
+    project = TulsiProject(
+      projectName: projectName,
+      projectBundleURL: projectBundleURL,
+      workspaceRootURL: workspaceRootURL,
+      bazelPackages: bazelPackages)
     project.bazelURL = projectBazelURL
   }
 
   func testSave() {
     do {
-      let bazelURL = TulsiParameter(value: URL(fileURLWithPath: ""),
-                                source: .explicitlyProvided)
-      let config = TulsiGeneratorConfig(projectName: projectName,
-                                        buildTargetLabels: buildTargetLabels.map({ BuildLabel($0) }),
-                                        pathFilters: pathFilters,
-                                        additionalFilePaths: additionalFilePaths,
-                                        options: TulsiOptionSet(),
-                                        bazelURL: bazelURL)
+      let bazelURL = TulsiParameter(
+        value: URL(fileURLWithPath: ""),
+        source: .explicitlyProvided)
+      let config = TulsiGeneratorConfig(
+        projectName: projectName,
+        buildTargetLabels: buildTargetLabels.map({ BuildLabel($0) }),
+        pathFilters: pathFilters,
+        additionalFilePaths: additionalFilePaths,
+        options: TulsiOptionSet(),
+        bazelURL: bazelURL)
       let data = try config.save()
-      let dict = try JSONSerialization.jsonObject(with: data as Data, options: JSONSerialization.ReadingOptions()) as! [String: Any]
+      let dict = try JSONSerialization.jsonObject(
+        with: data as Data, options: JSONSerialization.ReadingOptions()) as! [String: Any]
       XCTAssertEqual(dict["additionalFilePaths"] as! [String], additionalFilePaths)
       XCTAssertEqual(dict["buildTargets"] as! [String], buildTargetLabels)
       XCTAssertEqual(dict["projectName"] as! String, projectName)
@@ -69,12 +77,13 @@
   func testLoad() {
     do {
       let dict = [
-          "additionalFilePaths": additionalFilePaths,
-          "buildTargets": buildTargetLabels,
-          "projectName": projectName,
-          "sourceFilters": [String](pathFilters),
-      ] as [String : Any]
-      let data = try JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions())
+        "additionalFilePaths": additionalFilePaths,
+        "buildTargets": buildTargetLabels,
+        "projectName": projectName,
+        "sourceFilters": [String](pathFilters),
+      ] as [String: Any]
+      let data = try JSONSerialization.data(
+        withJSONObject: dict, options: JSONSerialization.WritingOptions())
       let bazelURL = URL(fileURLWithPath: "/path/to/bazel")
       let config = try TulsiGeneratorConfig(data: data, bazelURL: bazelURL)
 
@@ -89,14 +98,15 @@
 
   func testLoadWithBuildLabelSourceFilters() {
     do {
-      let sourceFilters = pathFilters.map() { "//\($0)" }
+      let sourceFilters = pathFilters.map { "//\($0)" }
       let dict = [
-          "additionalFilePaths": additionalFilePaths,
-          "buildTargets": buildTargetLabels,
-          "projectName": projectName,
-          "sourceFilters": sourceFilters,
-      ] as [String : Any]
-      let data = try JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions())
+        "additionalFilePaths": additionalFilePaths,
+        "buildTargets": buildTargetLabels,
+        "projectName": projectName,
+        "sourceFilters": sourceFilters,
+      ] as [String: Any]
+      let data = try JSONSerialization.data(
+        withJSONObject: dict, options: JSONSerialization.WritingOptions())
       let bazelURL = URL(fileURLWithPath: "/path/to/bazel")
       let config = try TulsiGeneratorConfig(data: data, bazelURL: bazelURL)
 
@@ -115,8 +125,9 @@
         "additionalFilePaths": ["//path/to/file"],
         "buildTargets": buildTargetLabels,
         "projectName": projectName,
-      ] as [String : Any]
-      let data = try JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions())
+      ] as [String: Any]
+      let data = try JSONSerialization.data(
+        withJSONObject: dict, options: JSONSerialization.WritingOptions())
       _ = try TulsiGeneratorConfig(data: data)
 
       XCTFail("Unexpectedly succeeded with an invalid file path")
@@ -131,8 +142,9 @@
     do {
       let dict = [
         "projectName": projectName,
-      ] as [String : Any]
-      let data = try JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions())
+      ] as [String: Any]
+      let data = try JSONSerialization.data(
+        withJSONObject: dict, options: JSONSerialization.WritingOptions())
       let bazelURL = URL(fileURLWithPath: "/path/to/bazel")
       let config = try TulsiGeneratorConfig(data: data, bazelURL: bazelURL)
 
@@ -146,18 +158,21 @@
     do {
       let dict = [
         "projectName": projectName,
-      ] as [String : Any]
-      let data = try JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions())
+      ] as [String: Any]
+      let data = try JSONSerialization.data(
+        withJSONObject: dict, options: JSONSerialization.WritingOptions())
       let bazelURL = URL(fileURLWithPath: "/path/to/bazel")
       let optionsURL = URL(fileURLWithPath: "/options/path/to/bazel")
       let options = [
-        "optionSet": [ "BazelPath": [ "p": optionsURL.path ]],
-        ] as [String: Any]
-      let optionData = try JSONSerialization.data(withJSONObject: options, options: JSONSerialization.WritingOptions())
+        "optionSet": ["BazelPath": ["p": optionsURL.path]],
+      ] as [String: Any]
+      let optionData = try JSONSerialization.data(
+        withJSONObject: options, options: JSONSerialization.WritingOptions())
 
-      var config = try TulsiGeneratorConfig(data: data,
-                                            additionalOptionData: optionData,
-                                            bazelURL: bazelURL)
+      var config = try TulsiGeneratorConfig(
+        data: data,
+        additionalOptionData: optionData,
+        bazelURL: bazelURL)
       config = config.configByResolvingInheritedSettingsFromProject(project)
 
       XCTAssertEqual(config.bazelURL, bazelURL)
@@ -170,17 +185,20 @@
     do {
       let dict = [
         "projectName": projectName,
-      ] as [String : Any]
-      let data = try JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions())
+      ] as [String: Any]
+      let data = try JSONSerialization.data(
+        withJSONObject: dict, options: JSONSerialization.WritingOptions())
 
       let optionsURL = URL(fileURLWithPath: "/options/path/to/bazel")
       let options = [
-        "optionSet": [ "BazelPath": [ "p": optionsURL.path ]],
+        "optionSet": ["BazelPath": ["p": optionsURL.path]],
       ] as [String: Any]
-      let optionData = try JSONSerialization.data(withJSONObject: options, options: JSONSerialization.WritingOptions())
+      let optionData = try JSONSerialization.data(
+        withJSONObject: options, options: JSONSerialization.WritingOptions())
 
-      let config = try TulsiGeneratorConfig(data: data,
-                                            additionalOptionData: optionData)
+      let config = try TulsiGeneratorConfig(
+        data: data,
+        additionalOptionData: optionData)
       XCTAssertEqual(config.bazelURL, optionsURL)
     } catch {
       XCTFail("Unexpected assertion")
@@ -191,17 +209,20 @@
     do {
       let dict = [
         "projectName": projectName,
-      ] as [String : Any]
-      let data = try JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions())
+      ] as [String: Any]
+      let data = try JSONSerialization.data(
+        withJSONObject: dict, options: JSONSerialization.WritingOptions())
 
       let optionsURL = URL(fileURLWithPath: "/options/path/to/bazel")
       let options = [
-        "optionSet": [ "BazelPath": [ "p": optionsURL.path ]],
+        "optionSet": ["BazelPath": ["p": optionsURL.path]],
       ] as [String: Any]
-      let optionData = try JSONSerialization.data(withJSONObject: options, options: JSONSerialization.WritingOptions())
+      let optionData = try JSONSerialization.data(
+        withJSONObject: options, options: JSONSerialization.WritingOptions())
 
-      var config = try TulsiGeneratorConfig(data: data,
-                                            additionalOptionData: optionData)
+      var config = try TulsiGeneratorConfig(
+        data: data,
+        additionalOptionData: optionData)
       config = config.configByResolvingInheritedSettingsFromProject(project)
       XCTAssertEqual(config.bazelURL, optionsURL)
     } catch {
diff --git a/src/TulsiGeneratorTests/TulsiOptionSetTests.swift b/src/TulsiGeneratorTests/TulsiOptionSetTests.swift
index bd3ef81..ba2166c 100644
--- a/src/TulsiGeneratorTests/TulsiOptionSetTests.swift
+++ b/src/TulsiGeneratorTests/TulsiOptionSetTests.swift
@@ -13,6 +13,7 @@
 // limitations under the License.
 
 import XCTest
+
 @testable import TulsiGenerator
 
 class TulsiOptionSetTests: XCTestCase {
@@ -32,12 +33,12 @@
     let optionSet = TulsiOptionSet()
     optionSet[.ALWAYS_SEARCH_USER_PATHS].projectValue = "YES"
     optionSet[.BazelBuildOptionsDebug].targetValues = [
-        target1: "Target-Value1",
-        target2: "Target-Value2",
+      target1: "Target-Value1",
+      target2: "Target-Value2",
     ]
     optionSet[.BazelBuildOptionsRelease].projectValue = "releaseProjectValue"
     optionSet[.BazelBuildOptionsRelease].targetValues = [
-        target1: "Target-Release-Value1",
+      target1: "Target-Release-Value1",
     ]
     var dict = [String: AnyObject]()
     optionSet.saveAllOptionsIntoDictionary(&dict)
@@ -99,7 +100,8 @@
     optionSet.savePerUserOptionsIntoDictionary(&dict)
 
     let perUserOptions = optionSet.options.filter({ $1.optionType.contains(.PerUserOnly) })
-    let serializedValues = dict[TulsiOptionSet.PersistenceKey] as! [String: TulsiOption.PersistenceType]
+    let serializedValues = dict[TulsiOptionSet.PersistenceKey] as! [String: TulsiOption
+      .PersistenceType]
     XCTAssertEqual(serializedValues.count, perUserOptions.count)
 
     let optionsDict = TulsiOptionSet.getOptionsFromContainerDictionary(dict) ?? [:]
@@ -120,7 +122,6 @@
     parent[.SuppressSwiftUpdateCheck].projectValue = "NO"
     parent[.IncludeBuildSources].projectValue = "NO"
 
-
     let childValue = "ChildValue"
     let child = TulsiOptionSet(withInheritanceEnabled: true)
     child[.BazelBuildOptionsDebug].projectValue = childValue
diff --git a/src/TulsiGeneratorTests/TulsiProjectTests.swift b/src/TulsiGeneratorTests/TulsiProjectTests.swift
index 3acacb7..bae257d 100644
--- a/src/TulsiGeneratorTests/TulsiProjectTests.swift
+++ b/src/TulsiGeneratorTests/TulsiProjectTests.swift
@@ -13,36 +13,39 @@
 // limitations under the License.
 
 import XCTest
-@testable import TulsiGenerator
 
+@testable import TulsiGenerator
 
 class TulsiProjectTests: XCTestCase {
   let projectName = "TestProject"
   let projectBundleURL = URL(fileURLWithPath: "/test/project/tulsiproject/")
   let workspaceRootURL = URL(fileURLWithPath: "/test/project/root/")
+
   // Relative path from projectBundleURL to workspaceRootURL.
   let relativeRootPath = "../root"
+
   let bazelPackages = [
-      "some/package",
-      "another/package",
-      "package",
+    "some/package",
+    "another/package",
+    "package",
   ]
 
   var project: TulsiProject! = nil
 
   override func setUp() {
     super.setUp()
-    project = TulsiProject(projectName: projectName,
-                           projectBundleURL: projectBundleURL,
-                           workspaceRootURL: workspaceRootURL,
-                           bazelPackages: bazelPackages)
+    project = TulsiProject(
+      projectName: projectName,
+      projectBundleURL: projectBundleURL,
+      workspaceRootURL: workspaceRootURL,
+      bazelPackages: bazelPackages)
   }
 
-
   func testSave() {
     do {
       let data = try project.save()
-      let dict = try JSONSerialization.jsonObject(with: data as Data, options: JSONSerialization.ReadingOptions()) as! [String: Any]
+      let dict = try JSONSerialization.jsonObject(
+        with: data as Data, options: JSONSerialization.ReadingOptions()) as! [String: Any]
       XCTAssertEqual(dict["packages"] as! [String], bazelPackages)
       XCTAssertEqual(dict["projectName"] as! String, projectName)
       XCTAssertEqual(dict["workspaceRoot"] as! String, relativeRootPath)
@@ -57,8 +60,9 @@
         "packages": bazelPackages,
         "projectName": projectName,
         "workspaceRoot": relativeRootPath,
-      ] as [String : Any]
-      let data = try JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions())
+      ] as [String: Any]
+      let data = try JSONSerialization.data(
+        withJSONObject: dict, options: JSONSerialization.WritingOptions())
       project = try TulsiProject(data: data, projectBundleURL: projectBundleURL)
 
       XCTAssertEqual(project.bazelPackages, bazelPackages)
@@ -75,8 +79,9 @@
         "packages": bazelPackages,
         "projectName": projectName,
         "workspaceRoot": relativeRootPath + "/",
-      ] as [String : Any]
-      let data = try JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions())
+      ] as [String: Any]
+      let data = try JSONSerialization.data(
+        withJSONObject: dict, options: JSONSerialization.WritingOptions())
       project = try TulsiProject(data: data, projectBundleURL: projectBundleURL)
 
       XCTAssertEqual(project.bazelPackages, bazelPackages)
@@ -92,8 +97,9 @@
       let dict = [
         "packages": bazelPackages,
         "projectName": projectName,
-      ] as [String : Any]
-      let data = try JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions())
+      ] as [String: Any]
+      let data = try JSONSerialization.data(
+        withJSONObject: dict, options: JSONSerialization.WritingOptions())
       let _ = try TulsiProject(data: data, projectBundleURL: projectBundleURL)
       XCTFail("Unexpectedly succeeded without a workspace root")
     } catch TulsiProject.ProjectError.deserializationFailed {
@@ -109,8 +115,9 @@
         "packages": bazelPackages,
         "projectName": projectName,
         "workspaceRoot": "/invalid/absolute/path",
-      ] as [String : Any]
-      let data = try JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions())
+      ] as [String: Any]
+      let data = try JSONSerialization.data(
+        withJSONObject: dict, options: JSONSerialization.WritingOptions())
       let _ = try TulsiProject(data: data, projectBundleURL: projectBundleURL)
       XCTFail("Unexpectedly succeeded with an invalid workspace root")
     } catch TulsiProject.ProjectError.deserializationFailed {
diff --git a/src/TulsiGeneratorTests/XcodeProjectGeneratorTests.swift b/src/TulsiGeneratorTests/XcodeProjectGeneratorTests.swift
index 24a512c..be51cf9 100644
--- a/src/TulsiGeneratorTests/XcodeProjectGeneratorTests.swift
+++ b/src/TulsiGeneratorTests/XcodeProjectGeneratorTests.swift
@@ -13,39 +13,48 @@
 // limitations under the License.
 
 import XCTest
-@testable import TulsiGenerator
 
+@testable import TulsiGenerator
 
 class XcodeProjectGeneratorTests: XCTestCase {
   static let outputFolderPath = "/dev/null/project"
   static let projectName = "ProjectName"
 
   let outputFolderURL = URL(fileURLWithPath: XcodeProjectGeneratorTests.outputFolderPath)
-  let xcodeProjectPath = "\(XcodeProjectGeneratorTests.outputFolderPath)/\(XcodeProjectGeneratorTests.projectName).xcodeproj"
+  let xcodeProjectPath
+    = "\(XcodeProjectGeneratorTests.outputFolderPath)/\(XcodeProjectGeneratorTests.projectName).xcodeproj"
 
   let workspaceRoot = URL(fileURLWithPath: "/workspace")
   let testTulsiVersion = "9.99.999.9999"
 
-  let buildTargetLabels = ["//test:MainTarget", "//test/path/to/target:target"].map({ BuildLabel($0) })
+  let buildTargetLabels = ["//test:MainTarget", "//test/path/to/target:target"].map({
+    BuildLabel($0)
+  })
   let pathFilters = Set<String>(["test", "additional"])
 
   let additionalFilePaths = ["additional/File1", "additional/File2"]
 
-  let bazelURL = TulsiParameter(value: URL(fileURLWithPath: "/test/dir/testBazel"),
-                            source: .explicitlyProvided)
+  let bazelURL = TulsiParameter(
+    value: URL(fileURLWithPath: "/test/dir/testBazel"),
+    source: .explicitlyProvided)
 
   let resourceURLs = XcodeProjectGenerator.ResourceSourcePathURLs(
-      buildScript: URL(fileURLWithPath: "/scripts/Build"),
-      cleanScript: URL(fileURLWithPath: "/scripts/Clean"),
-      extraBuildScripts: [URL(fileURLWithPath: "/scripts/Logging")],
-      iOSUIRunnerEntitlements: URL(fileURLWithPath: "/generatedProjectResources/iOSXCTRunner.entitlements"),
-      macOSUIRunnerEntitlements: URL(fileURLWithPath: "/generatedProjectResources/macOSXCTRunner.entitlements"),
-      stubInfoPlist: URL(fileURLWithPath: "/generatedProjectResources/StubInfoPlist.plist"),
-      stubIOSAppExInfoPlistTemplate: URL(fileURLWithPath: "/generatedProjectResources/stubIOSAppExInfoPlist.plist"),
-      stubWatchOS2InfoPlist: URL(fileURLWithPath: "/generatedProjectResources/StubWatchOS2InfoPlist.plist"),
-      stubWatchOS2AppExInfoPlist: URL(fileURLWithPath: "/generatedProjectResources/StubWatchOS2AppExInfoPlist.plist"),
-      bazelWorkspaceFile: URL(fileURLWithPath: "/WORKSPACE"),
-      tulsiPackageFiles: [URL(fileURLWithPath: "/tulsi/tulsi_aspects.bzl")])
+    buildScript: URL(fileURLWithPath: "/scripts/Build"),
+    cleanScript: URL(fileURLWithPath: "/scripts/Clean"),
+    extraBuildScripts: [URL(fileURLWithPath: "/scripts/Logging")],
+    iOSUIRunnerEntitlements: URL(
+      fileURLWithPath: "/generatedProjectResources/iOSXCTRunner.entitlements"),
+    macOSUIRunnerEntitlements: URL(
+      fileURLWithPath: "/generatedProjectResources/macOSXCTRunner.entitlements"),
+    stubInfoPlist: URL(fileURLWithPath: "/generatedProjectResources/StubInfoPlist.plist"),
+    stubIOSAppExInfoPlistTemplate: URL(
+      fileURLWithPath: "/generatedProjectResources/stubIOSAppExInfoPlist.plist"),
+    stubWatchOS2InfoPlist: URL(
+      fileURLWithPath: "/generatedProjectResources/StubWatchOS2InfoPlist.plist"),
+    stubWatchOS2AppExInfoPlist: URL(
+      fileURLWithPath: "/generatedProjectResources/StubWatchOS2AppExInfoPlist.plist"),
+    bazelWorkspaceFile: URL(fileURLWithPath: "/WORKSPACE"),
+    tulsiPackageFiles: [URL(fileURLWithPath: "/tulsi/tulsi_aspects.bzl")])
 
   var config: TulsiGeneratorConfig! = nil
   var mockLocalizedMessageLogger: MockLocalizedMessageLogger! = nil
@@ -72,17 +81,27 @@
       mockLocalizedMessageLogger.assertNoWarnings()
 
       XCTAssert(writtenFiles.contains("\(xcodeProjectPath)/project.pbxproj"))
-      XCTAssert(writtenFiles.contains("\(xcodeProjectPath)/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings"))
-      XCTAssert(writtenFiles.contains("\(xcodeProjectPath)/project.xcworkspace/xcuserdata/USER.xcuserdatad/WorkspaceSettings.xcsettings"))
-      XCTAssert(writtenFiles.contains("\(xcodeProjectPath)/xcshareddata/xcschemes/test-path-to-target-target.xcscheme"))
-      XCTAssert(writtenFiles.contains("\(xcodeProjectPath)/xcshareddata/xcschemes/test-MainTarget.xcscheme"))
+      XCTAssert(
+        writtenFiles.contains(
+          "\(xcodeProjectPath)/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings"))
+      XCTAssert(
+        writtenFiles.contains(
+          "\(xcodeProjectPath)/project.xcworkspace/xcuserdata/USER.xcuserdatad/WorkspaceSettings.xcsettings"
+        ))
+      XCTAssert(
+        writtenFiles.contains(
+          "\(xcodeProjectPath)/xcshareddata/xcschemes/test-path-to-target-target.xcscheme"))
+      XCTAssert(
+        writtenFiles.contains("\(xcodeProjectPath)/xcshareddata/xcschemes/test-MainTarget.xcscheme")
+      )
 
       let supportScriptsURL = mockFileManager.homeDirectoryForCurrentUser.appendingPathComponent(
-          "Library/Application Support/Tulsi/Scripts", isDirectory: true)
+        "Library/Application Support/Tulsi/Scripts", isDirectory: true)
       XCTAssert(mockFileManager.directoryOperations.contains(supportScriptsURL.path))
 
-      let cacheReaderURL = supportScriptsURL.appendingPathComponent("bazel_cache_reader",
-                                                                    isDirectory: false)
+      let cacheReaderURL = supportScriptsURL.appendingPathComponent(
+        "bazel_cache_reader",
+        isDirectory: false)
       XCTAssert(mockFileManager.copyOperations.keys.contains(cacheReaderURL.path))
 
       let xcp = "\(xcodeProjectPath)/xcuserdata/USER.xcuserdatad/xcschemes/xcschememanagement.plist"
@@ -98,31 +117,42 @@
 
   func testExtensionPlistGeneration() {
     @discardableResult
-    func addRule(_ labelName: String,
-                 type: String,
-                 attributes: [String: AnyObject] = [:],
-                 weakDependencies: Set<BuildLabel>? = nil,
-                 extensions: Set<BuildLabel>? = nil,
-                 extensionType: String? = nil,
-                 productType: PBXTarget.ProductType? = nil) -> BuildLabel {
+    func addRule(
+      _ labelName: String,
+      type: String,
+      attributes: [String: AnyObject] = [:],
+      weakDependencies: Set<BuildLabel>? = nil,
+      extensions: Set<BuildLabel>? = nil,
+      extensionType: String? = nil,
+      productType: PBXTarget.ProductType? = nil
+    ) -> BuildLabel {
       let label = BuildLabel(labelName)
-      mockExtractor.labelToRuleEntry[label] = Swift.type(of: self).makeRuleEntry(label,
-                                                                           type: type,
-                                                                           attributes: attributes,
-                                                                           weakDependencies: weakDependencies,
-                                                                           extensions: extensions,
-                                                                           productType: productType,
-                                                                           extensionType: extensionType)
+      mockExtractor.labelToRuleEntry[label] = Swift.type(of: self).makeRuleEntry(
+        label,
+        type: type,
+        attributes: attributes,
+        weakDependencies: weakDependencies,
+        extensions: extensions,
+        productType: productType,
+        extensionType: extensionType)
       return label
     }
 
-    let test1 = addRule("//test:ExtFoo", type: "ios_extension", extensionType: "com.apple.extension-foo", productType: .AppExtension)
-    let test2 = addRule("//test:ExtBar", type: "ios_extension", extensionType: "com.apple.extension-bar", productType: .AppExtension)
-    addRule("//test:Application", type: "ios_application", extensions: [test1, test2], productType: .Application)
+    let test1 = addRule(
+      "//test:ExtFoo", type: "ios_extension", extensionType: "com.apple.extension-foo",
+      productType: .AppExtension)
+    let test2 = addRule(
+      "//test:ExtBar", type: "ios_extension", extensionType: "com.apple.extension-bar",
+      productType: .AppExtension)
+    addRule(
+      "//test:Application", type: "ios_application", extensions: [test1, test2],
+      productType: .Application)
     prepareGenerator(mockExtractor.labelToRuleEntry)
 
     func assertPlist(withData data: Data, equalTo value: NSDictionary) {
-      let content = try! PropertyListSerialization.propertyList(from: data, options: PropertyListSerialization.ReadOptions.mutableContainers, format: nil) as! NSDictionary
+      let content = try! PropertyListSerialization.propertyList(
+        from: data, options: PropertyListSerialization.ReadOptions.mutableContainers, format: nil)
+        as! NSDictionary
       XCTAssertEqual(content, value)
     }
 
@@ -131,13 +161,21 @@
       mockLocalizedMessageLogger.assertNoErrors()
       mockLocalizedMessageLogger.assertNoWarnings()
 
-      XCTAssert(mockFileManager.writeOperations.keys.contains("\(xcodeProjectPath)/.tulsi/Resources/Stub_test-ExtFoo.plist"))
-      assertPlist(withData: mockFileManager.writeOperations["\(xcodeProjectPath)/.tulsi/Resources/Stub_test-ExtFoo.plist"]!,
-                  equalTo: ["NSExtension": ["NSExtensionPointIdentifier": "com.apple.extension-foo"]])
+      XCTAssert(
+        mockFileManager.writeOperations.keys.contains(
+          "\(xcodeProjectPath)/.tulsi/Resources/Stub_test-ExtFoo.plist"))
+      assertPlist(
+        withData: mockFileManager.writeOperations[
+          "\(xcodeProjectPath)/.tulsi/Resources/Stub_test-ExtFoo.plist"]!,
+        equalTo: ["NSExtension": ["NSExtensionPointIdentifier": "com.apple.extension-foo"]])
 
-      XCTAssert(mockFileManager.writeOperations.keys.contains("\(xcodeProjectPath)/.tulsi/Resources/Stub_test-ExtBar.plist"))
-      assertPlist(withData: mockFileManager.writeOperations["\(xcodeProjectPath)/.tulsi/Resources/Stub_test-ExtBar.plist"]!,
-                  equalTo: ["NSExtension": ["NSExtensionPointIdentifier": "com.apple.extension-bar"]])
+      XCTAssert(
+        mockFileManager.writeOperations.keys.contains(
+          "\(xcodeProjectPath)/.tulsi/Resources/Stub_test-ExtBar.plist"))
+      assertPlist(
+        withData: mockFileManager.writeOperations[
+          "\(xcodeProjectPath)/.tulsi/Resources/Stub_test-ExtBar.plist"]!,
+        equalTo: ["NSExtension": ["NSExtensionPointIdentifier": "com.apple.extension-bar"]])
     } catch let e {
       XCTFail("Unexpected exception \(e)")
     }
@@ -168,8 +206,10 @@
     do {
       _ = try generator.generateXcodeProjectInFolder(invalidOutputFolderURL)
       XCTFail("Generation succeeded unexpectedly")
-    } catch XcodeProjectGenerator.ProjectGeneratorError.invalidXcodeProjectPath(let pathFound,
-                                                                                let reason) {
+    } catch XcodeProjectGenerator.ProjectGeneratorError.invalidXcodeProjectPath(
+      let pathFound,
+      let reason)
+    {
       // Expected failure on path with a /bazel-* directory.
       XCTAssertEqual(pathFound, invalidOutputFolderString)
       XCTAssertEqual(reason, "a Bazel generated temp directory (\"/bazel-\")")
@@ -179,44 +219,53 @@
   }
 
   func testTestSuiteSchemeGenerationWithSkylarkUnitTest() {
-    checkTestSuiteSchemeGeneration("ios_unit_test",
-                                   testProductType: .UnitTest,
-                                   testHostAttributeName: "test_host")
+    checkTestSuiteSchemeGeneration(
+      "ios_unit_test",
+      testProductType: .UnitTest,
+      testHostAttributeName: "test_host")
   }
 
   func testTestSuiteSchemeGenerationWithSkylarkUITest() {
-    checkTestSuiteSchemeGeneration("ios_ui_test",
-                                   testProductType: .UIUnitTest,
-                                   testHostAttributeName: "test_host")
+    checkTestSuiteSchemeGeneration(
+      "ios_ui_test",
+      testProductType: .UIUnitTest,
+      testHostAttributeName: "test_host")
   }
 
-  func checkTestSuiteSchemeGeneration(_ testRuleType: String,
-                                      testProductType: PBXTarget.ProductType,
-                                      testHostAttributeName: String) {
+  func checkTestSuiteSchemeGeneration(
+    _ testRuleType: String,
+    testProductType: PBXTarget.ProductType,
+    testHostAttributeName: String
+  ) {
     @discardableResult
-    func addRule(_ labelName: String,
-                 type: String,
-                 attributes: [String: AnyObject] = [:],
-                 weakDependencies: Set<BuildLabel>? = nil,
-                 productType: PBXTarget.ProductType? = nil) -> BuildLabel {
+    func addRule(
+      _ labelName: String,
+      type: String,
+      attributes: [String: AnyObject] = [:],
+      weakDependencies: Set<BuildLabel>? = nil,
+      productType: PBXTarget.ProductType? = nil
+    ) -> BuildLabel {
       let label = BuildLabel(labelName)
-      mockExtractor.labelToRuleEntry[label] = Swift.type(of: self).makeRuleEntry(label,
-                                                                             type: type,
-                                                                             attributes: attributes,
-                                                                             weakDependencies: weakDependencies,
-                                                                             productType: productType)
+      mockExtractor.labelToRuleEntry[label] = Swift.type(of: self).makeRuleEntry(
+        label,
+        type: type,
+        attributes: attributes,
+        weakDependencies: weakDependencies,
+        productType: productType)
       return label
     }
 
     let app = addRule("//test:Application", type: "ios_application", productType: .Application)
-    let test1 = addRule("//test:TestOne",
-                        type: testRuleType,
-                        attributes: [testHostAttributeName: app.value as AnyObject],
-                        productType: testProductType)
-    let test2 = addRule("//test:TestTwo",
-                        type: testRuleType,
-                        attributes: [testHostAttributeName: app.value as AnyObject],
-                        productType: testProductType)
+    let test1 = addRule(
+      "//test:TestOne",
+      type: testRuleType,
+      attributes: [testHostAttributeName: app.value as AnyObject],
+      productType: testProductType)
+    let test2 = addRule(
+      "//test:TestTwo",
+      type: testRuleType,
+      attributes: [testHostAttributeName: app.value as AnyObject],
+      productType: testProductType)
     addRule("//test:UnusedTest", type: testRuleType, productType: testProductType)
     addRule("//test:TestSuite", type: "test_suite", weakDependencies: Set([test1, test2]))
     prepareGenerator(mockExtractor.labelToRuleEntry)
@@ -227,13 +276,26 @@
       mockLocalizedMessageLogger.assertNoWarnings()
 
       XCTAssert(writtenFiles.contains("\(xcodeProjectPath)/project.pbxproj"))
-      XCTAssert(writtenFiles.contains("\(xcodeProjectPath)/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings"))
-      XCTAssert(writtenFiles.contains("\(xcodeProjectPath)/project.xcworkspace/xcuserdata/USER.xcuserdatad/WorkspaceSettings.xcsettings"))
-      XCTAssert(writtenFiles.contains("\(xcodeProjectPath)/xcshareddata/xcschemes/test-Application.xcscheme"))
-      XCTAssert(writtenFiles.contains("\(xcodeProjectPath)/xcshareddata/xcschemes/test-TestOne.xcscheme"))
-      XCTAssert(writtenFiles.contains("\(xcodeProjectPath)/xcshareddata/xcschemes/test-TestTwo.xcscheme"))
-      XCTAssert(writtenFiles.contains("\(xcodeProjectPath)/xcshareddata/xcschemes/test-UnusedTest.xcscheme"))
-      XCTAssert(writtenFiles.contains("\(xcodeProjectPath)/xcshareddata/xcschemes/TestSuite_Suite.xcscheme"))
+      XCTAssert(
+        writtenFiles.contains(
+          "\(xcodeProjectPath)/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings"))
+      XCTAssert(
+        writtenFiles.contains(
+          "\(xcodeProjectPath)/project.xcworkspace/xcuserdata/USER.xcuserdatad/WorkspaceSettings.xcsettings"
+        ))
+      XCTAssert(
+        writtenFiles.contains(
+          "\(xcodeProjectPath)/xcshareddata/xcschemes/test-Application.xcscheme"))
+      XCTAssert(
+        writtenFiles.contains("\(xcodeProjectPath)/xcshareddata/xcschemes/test-TestOne.xcscheme"))
+      XCTAssert(
+        writtenFiles.contains("\(xcodeProjectPath)/xcshareddata/xcschemes/test-TestTwo.xcscheme"))
+      XCTAssert(
+        writtenFiles.contains("\(xcodeProjectPath)/xcshareddata/xcschemes/test-UnusedTest.xcscheme")
+      )
+      XCTAssert(
+        writtenFiles.contains("\(xcodeProjectPath)/xcshareddata/xcschemes/TestSuite_Suite.xcscheme")
+      )
     } catch let e {
       XCTFail("Unexpected exception \(e)")
     }
@@ -241,11 +303,12 @@
 
   func testProjectSDKROOT() {
     func validate(_ types: [(String, String)], _ expectedSDKROOT: String?, line: UInt = #line) {
-      let rules = types.map() { tuple in
+      let rules = types.map { tuple in
         // Both the platform and osDeploymentTarget must be set in order to create a valid
         // deploymentTarget for the RuleEntry.
-        XcodeProjectGeneratorTests.makeRuleEntry(BuildLabel(tuple.0), type: tuple.0, platformType: tuple.1,
-                                                 osDeploymentTarget: "this_must_not_be_nil")
+        XcodeProjectGeneratorTests.makeRuleEntry(
+          BuildLabel(tuple.0), type: tuple.0, platformType: tuple.1,
+          osDeploymentTarget: "this_must_not_be_nil")
       }
       let sdkroot = XcodeProjectGenerator.projectSDKROOT(rules)
       XCTAssertEqual(sdkroot, expectedSDKROOT, line: line)
@@ -261,7 +324,9 @@
 
   // MARK: - Private methods
 
-  private static func labelToRuleEntryMapForLabels(_ labels: [BuildLabel]) -> [BuildLabel: RuleEntry] {
+  private static func labelToRuleEntryMapForLabels(_ labels: [BuildLabel]) -> [BuildLabel:
+    RuleEntry]
+  {
     var ret = [BuildLabel: RuleEntry]()
     for label in labels {
       ret[label] = makeRuleEntry(label, type: "ios_application", productType: .Application)
@@ -269,53 +334,57 @@
     return ret
   }
 
-  private static func makeRuleEntry(_ label: BuildLabel,
-                                    type: String,
-                                    attributes: [String: AnyObject] = [:],
-                                    artifacts: [BazelFileInfo] = [],
-                                    sourceFiles: [BazelFileInfo] = [],
-                                    nonARCSourceFiles: [BazelFileInfo] = [],
-                                    dependencies: Set<BuildLabel> = Set(),
-                                    secondaryArtifacts: [BazelFileInfo] = [],
-                                    weakDependencies: Set<BuildLabel>? = nil,
-                                    buildFilePath: String? = nil,
-                                    objcDefines: [String]? = nil,
-                                    swiftDefines: [String]? = nil,
-                                    includePaths: [RuleEntry.IncludePath]? = nil,
-                                    extensions: Set<BuildLabel>? = nil,
-                                    productType: PBXTarget.ProductType? = nil,
-                                    extensionType: String? = nil,
-                                    platformType: String? = nil,
-                                    osDeploymentTarget: String? = nil) -> RuleEntry {
-    return RuleEntry(label: label,
-                     type: type,
-                     attributes: attributes,
-                     artifacts: artifacts,
-                     sourceFiles: sourceFiles,
-                     nonARCSourceFiles: nonARCSourceFiles,
-                     dependencies: dependencies,
-                     secondaryArtifacts: secondaryArtifacts,
-                     weakDependencies: weakDependencies,
-                     extensions: extensions,
-                     productType: productType,
-                     platformType: platformType,
-                     osDeploymentTarget: osDeploymentTarget,
-                     buildFilePath: buildFilePath,
-                     objcDefines: objcDefines,
-                     swiftDefines: swiftDefines,
-                     includePaths: includePaths,
-                     extensionType: extensionType)
+  private static func makeRuleEntry(
+    _ label: BuildLabel,
+    type: String,
+    attributes: [String: AnyObject] = [:],
+    artifacts: [BazelFileInfo] = [],
+    sourceFiles: [BazelFileInfo] = [],
+    nonARCSourceFiles: [BazelFileInfo] = [],
+    dependencies: Set<BuildLabel> = Set(),
+    secondaryArtifacts: [BazelFileInfo] = [],
+    weakDependencies: Set<BuildLabel>? = nil,
+    buildFilePath: String? = nil,
+    objcDefines: [String]? = nil,
+    swiftDefines: [String]? = nil,
+    includePaths: [RuleEntry.IncludePath]? = nil,
+    extensions: Set<BuildLabel>? = nil,
+    productType: PBXTarget.ProductType? = nil,
+    extensionType: String? = nil,
+    platformType: String? = nil,
+    osDeploymentTarget: String? = nil
+  ) -> RuleEntry {
+    return RuleEntry(
+      label: label,
+      type: type,
+      attributes: attributes,
+      artifacts: artifacts,
+      sourceFiles: sourceFiles,
+      nonARCSourceFiles: nonARCSourceFiles,
+      dependencies: dependencies,
+      secondaryArtifacts: secondaryArtifacts,
+      weakDependencies: weakDependencies,
+      extensions: extensions,
+      productType: productType,
+      platformType: platformType,
+      osDeploymentTarget: osDeploymentTarget,
+      buildFilePath: buildFilePath,
+      objcDefines: objcDefines,
+      swiftDefines: swiftDefines,
+      includePaths: includePaths,
+      extensionType: extensionType)
   }
 
   private func prepareGenerator(_ ruleEntries: [BuildLabel: RuleEntry]) {
     let options = TulsiOptionSet()
     // To avoid creating ~/Library folders and changing UserDefaults during CI testing.
-    config = TulsiGeneratorConfig(projectName: XcodeProjectGeneratorTests.projectName,
-                                  buildTargetLabels: Array(ruleEntries.keys),
-                                  pathFilters: pathFilters,
-                                  additionalFilePaths: additionalFilePaths,
-                                  options: options,
-                                  bazelURL: bazelURL)
+    config = TulsiGeneratorConfig(
+      projectName: XcodeProjectGeneratorTests.projectName,
+      buildTargetLabels: Array(ruleEntries.keys),
+      pathFilters: pathFilters,
+      additionalFilePaths: additionalFilePaths,
+      options: options,
+      bazelURL: bazelURL)
     let projectURL = URL(fileURLWithPath: xcodeProjectPath, isDirectory: true)
     mockFileManager.allowedDirectoryCreates.insert(projectURL.path)
 
@@ -323,13 +392,14 @@
     mockFileManager.allowedDirectoryCreates.insert(tulsiworkspace.path)
 
     let bazelCacheReaderURL = mockFileManager.homeDirectoryForCurrentUser.appendingPathComponent(
-        "Library/Application Support/Tulsi/Scripts", isDirectory: true)
+      "Library/Application Support/Tulsi/Scripts", isDirectory: true)
     mockFileManager.allowedDirectoryCreates.insert(bazelCacheReaderURL.path)
 
     let xcshareddata = projectURL.appendingPathComponent("project.xcworkspace/xcshareddata")
     mockFileManager.allowedDirectoryCreates.insert(xcshareddata.path)
 
-    let xcuserdata = projectURL.appendingPathComponent("project.xcworkspace/xcuserdata/USER.xcuserdatad")
+    let xcuserdata = projectURL.appendingPathComponent(
+      "project.xcworkspace/xcuserdata/USER.xcuserdatad")
     mockFileManager.allowedDirectoryCreates.insert(xcuserdata.path)
 
     let xcschemes = projectURL.appendingPathComponent("xcshareddata/xcschemes")
@@ -354,19 +424,21 @@
     mockFileManager.allowedDirectoryCreates.insert(tulsiBazelPackage.path)
 
     let mockTemplate = ["NSExtension": ["NSExtensionPointIdentifier": "com.apple.intents-service"]]
-    let templateData = try! PropertyListSerialization.data(fromPropertyList: mockTemplate, format: .xml, options: 0)
+    let templateData = try! PropertyListSerialization.data(
+      fromPropertyList: mockTemplate, format: .xml, options: 0)
     mockFileManager.mockContent[resourceURLs.stubIOSAppExInfoPlistTemplate.path] = templateData
 
     mockExtractor.labelToRuleEntry = ruleEntries
 
-    generator = XcodeProjectGenerator(workspaceRootURL: workspaceRoot,
-                                      config: config,
-                                      localizedMessageLogger: mockLocalizedMessageLogger,
-                                      workspaceInfoExtractor: mockExtractor,
-                                      resourceURLs: resourceURLs,
-                                      tulsiVersion: testTulsiVersion,
-                                      fileManager: mockFileManager,
-                                      pbxTargetGeneratorType: MockPBXTargetGenerator.self)
+    generator = XcodeProjectGenerator(
+      workspaceRootURL: workspaceRoot,
+      config: config,
+      localizedMessageLogger: mockLocalizedMessageLogger,
+      workspaceInfoExtractor: mockExtractor,
+      resourceURLs: resourceURLs,
+      tulsiVersion: testTulsiVersion,
+      fileManager: mockFileManager,
+      pbxTargetGeneratorType: MockPBXTargetGenerator.self)
     generator.redactWorkspaceSymlink = true
     generator.suppressModifyingUserDefaults = true
     generator.suppressGeneratingBuildSettings = true
@@ -377,7 +449,6 @@
   }
 }
 
-
 class MockFileManager: FileManager {
   var filesThatExist = Set<String>()
   var allowedDirectoryCreates = Set<String>()
@@ -396,9 +467,11 @@
     return filesThatExist.contains(path)
   }
 
-  override func createDirectory(at url: URL,
-                                withIntermediateDirectories createIntermediates: Bool,
-                                attributes: [FileAttributeKey: Any]?) throws {
+  override func createDirectory(
+    at url: URL,
+    withIntermediateDirectories createIntermediates: Bool,
+    attributes: [FileAttributeKey: Any]?
+  ) throws {
     guard !allowedDirectoryCreates.contains(url.path) else {
       directoryOperations.append(url.path)
       if let attributes = attributes {
@@ -406,14 +479,17 @@
       }
       return
     }
-    throw NSError(domain: "MockFileManager: Directory creation disallowed",
-                  code: 0,
-                  userInfo: nil)
+    throw NSError(
+      domain: "MockFileManager: Directory creation disallowed",
+      code: 0,
+      userInfo: nil)
   }
 
-  override func createDirectory(atPath path: String,
-                                withIntermediateDirectories createIntermediates: Bool,
-                                attributes: [FileAttributeKey: Any]?) throws {
+  override func createDirectory(
+    atPath path: String,
+    withIntermediateDirectories createIntermediates: Bool,
+    attributes: [FileAttributeKey: Any]?
+  ) throws {
     guard !allowedDirectoryCreates.contains(path) else {
       directoryOperations.append(path)
       if let attributes = attributes {
@@ -421,9 +497,10 @@
       }
       return
     }
-    throw NSError(domain: "MockFileManager: Directory creation disallowed",
-                  code: 0,
-                  userInfo: nil)
+    throw NSError(
+      domain: "MockFileManager: Directory creation disallowed",
+      code: 0,
+      userInfo: nil)
   }
 
   override func removeItem(at URL: URL) throws {
@@ -446,7 +523,9 @@
     return mockContent[path]
   }
 
-  override func createFile(atPath path: String, contents data: Data?, attributes attr: [FileAttributeKey : Any]? = nil) -> Bool {
+  override func createFile(
+    atPath path: String, contents data: Data?, attributes attr: [FileAttributeKey: Any]? = nil
+  ) -> Bool {
     if writeOperations.keys.contains(path) {
       fatalError("Attempting to overwrite an existing file at \(path)")
     }
@@ -457,20 +536,21 @@
     return true
   }
 
-  fileprivate func setAttributes(_ attributes: [FileAttributeKey : Any], path: String) {
-    var currentAttributes = attributesMap[path] ?? [FileAttributeKey : Any]()
+  fileprivate func setAttributes(_ attributes: [FileAttributeKey: Any], path: String) {
+    var currentAttributes = attributesMap[path] ?? [FileAttributeKey: Any]()
     attributes.forEach { (k, v) in
       currentAttributes[k] = v
     }
     attributesMap[path] = currentAttributes
   }
 
-  override func setAttributes(_ attributes: [FileAttributeKey : Any], ofItemAtPath path: String) throws {
+  override func setAttributes(_ attributes: [FileAttributeKey: Any], ofItemAtPath path: String)
+    throws
+  {
     self.setAttributes(attributes, path: path)
   }
 }
 
-
 final class MockPBXTargetGenerator: PBXTargetGeneratorProtocol {
   var project: PBXProject
 
@@ -483,58 +563,68 @@
   }
 
   static func mainGroupForOutputFolder(_ outputFolderURL: URL, workspaceRootURL: URL) -> PBXGroup {
-    return PBXGroup(name: "mainGroup",
-                    path: "/A/Test/Path",
-                    sourceTree: .Absolute,
-                    parent: nil)
+    return PBXGroup(
+      name: "mainGroup",
+      path: "/A/Test/Path",
+      sourceTree: .Absolute,
+      parent: nil)
   }
 
-  required init(bazelPath: String,
-                bazelBinPath: String,
-                project: PBXProject,
-                buildScriptPath: String,
-                stubInfoPlistPaths: StubInfoPlistPaths,
-                tulsiVersion: String,
-                options: TulsiOptionSet,
-                localizedMessageLogger: LocalizedMessageLogger,
-                workspaceRootURL: URL,
-                suppressCompilerDefines: Bool,
-                redactWorkspaceSymlink: Bool) {
+  required init(
+    bazelPath: String,
+    bazelBinPath: String,
+    project: PBXProject,
+    buildScriptPath: String,
+    stubInfoPlistPaths: StubInfoPlistPaths,
+    tulsiVersion: String,
+    options: TulsiOptionSet,
+    localizedMessageLogger: LocalizedMessageLogger,
+    workspaceRootURL: URL,
+    suppressCompilerDefines: Bool,
+    redactWorkspaceSymlink: Bool
+  ) {
     self.project = project
   }
 
   func generateFileReferencesForFilePaths(_ paths: [String], pathFilters: Set<String>?) {
   }
 
-  func registerRuleEntryForIndexer(_ ruleEntry: RuleEntry,
-                                   ruleEntryMap: RuleEntryMap,
-                                   pathFilters: Set<String>,
-                                   processedEntries: inout [RuleEntry: (NSOrderedSet)]) {
+  func registerRuleEntryForIndexer(
+    _ ruleEntry: RuleEntry,
+    ruleEntryMap: RuleEntryMap,
+    pathFilters: Set<String>,
+    processedEntries: inout [RuleEntry: (NSOrderedSet)]
+  ) {
   }
 
   func generateIndexerTargets() -> [String: PBXTarget] {
     return [:]
   }
 
-  func generateBazelCleanTarget(_ scriptPath: String, workingDirectory: String,
-                                startupOptions: [String]) {
+  func generateBazelCleanTarget(
+    _ scriptPath: String, workingDirectory: String,
+    startupOptions: [String]
+  ) {
   }
 
   func generateTopLevelBuildConfigurations(_ buildSettingOverrides: [String: String]) {
   }
 
-  func generateBuildTargetsForRuleEntries(_ ruleEntries: Set<RuleEntry>,
-                                          ruleEntryMap: RuleEntryMap) throws {
+  func generateBuildTargetsForRuleEntries(
+    _ ruleEntries: Set<RuleEntry>,
+    ruleEntryMap: RuleEntryMap
+  ) throws {
     // This works as this file only tests native targets that don't have multiple configurations.
-    let namedRuleEntries = ruleEntries.map() { (e: RuleEntry) -> (String, RuleEntry) in
+    let namedRuleEntries = ruleEntries.map { (e: RuleEntry) -> (String, RuleEntry) in
       return (e.label.asFullPBXTargetName!, e)
     }
 
     var testTargetLinkages = [(PBXTarget, BuildLabel)]()
     for (name, entry) in namedRuleEntries {
-      let target = project.createNativeTarget(name,
-                                              deploymentTarget: entry.deploymentTarget,
-                                              targetType: entry.pbxTargetType!)
+      let target = project.createNativeTarget(
+        name,
+        deploymentTarget: entry.deploymentTarget,
+        targetType: entry.pbxTargetType!)
 
       if let hostLabelString = entry.attributes[.test_host] as? String {
         let hostLabel = BuildLabel(hostLabelString)
