 private func shouldBuildScheme(buildArguments: BuildArguments) -> ColdSignal<Bool> {
 	precondition(buildArguments.scheme != nil)
 
-	return buildSettings(buildArguments)
-		.map(productType)
-		.merge(identity)
+	return BuildSettings.loadWithArguments(buildArguments)
+		.tryMap { settings in settings.productType }
 		.map { type in
 			switch type {
 			case let .Framework:


						return copyBuildProductIntoDirectory(folderURL, deviceSettings)
							.map { productURL in
								let mergeProductBinaries = URLToBuiltExecutable(simulatorSettings)
									.concat(URLToBuiltExecutable(deviceSettings))
									.reduce(initial: []) { $0 + [ $1 ] }
									// TODO: This should be a zip.
									.combineLatestWith(valueForBuildSetting("EXECUTABLE_PATH", deviceSettings).map(folderURL.URLByAppendingPathComponent))
									.map { (executableURLs: [NSURL], outputURL: NSURL) -> ColdSignal<()> in
										return mergeExecutables(executableURLs, outputURL)
									}
									.merge(identity)

								let sourceModulesURL = pathToModulesFolder(simulatorSettings)
									// TODO: This should be a zip.
									.combineLatestWith(URLToBuildProductsDirectory(simulatorSettings))
									.map { (modulesPath, productsURL) -> NSURL in
										return productsURL.URLByAppendingPathComponent(modulesPath)
									}

								let destinationModulesURL = pathToModulesFolder(deviceSettings)
									.map { modulesPath -> NSURL in
										return folderURL.URLByAppendingPathComponent(modulesPath)
									}

								let mergeProductModules = sourceModulesURL

	let (stdoutSignal, stdoutSink) = HotSignal<NSData>.pipe()
	let buildArgs = BuildArguments(project: project, scheme: scheme, configuration: configuration)

	let buildPlatform = { (platform: Platform) -> ColdSignal<BuildSettings> in
		var copiedArgs = buildArgs
		copiedArgs.platform = platform

