 
 	/// Reads the current value of `cachedVersions` on the appropriate
 	/// scheduler.
-	private func readCachedVersions() -> ColdSignal<[ProjectIdentifier: [PinnedVersion]]> {
-		return ColdSignal.lazy {
-				return .single(self.cachedVersions)
-			}
-			.evaluateOn(cachedVersionsScheduler)
-			.deliverOn(QueueScheduler())
+	private func readCachedVersions() -> SignalProducer<[ProjectIdentifier: [PinnedVersion]], NoError> {
+		return SignalProducer.try {
+				return success(self.cachedVersions)
+			}
+			|> startOn(cachedVersionsScheduler)
+			|> observeOn(QueueScheduler())
 	}
 
 	/// Adds a given version to `cachedVersions` on the appropriate scheduler.

	/// folder.
	///
	/// Sends the URL to the framework after copying.
	private func copyFrameworkToBuildFolder(frameworkURL: NSURL) -> ColdSignal<NSURL> {
		return architecturesInFramework(frameworkURL)
			.filter { arch in arch.hasPrefix("arm") }
			.map { _ in SDK.iPhoneOS }
			.concat(ColdSignal.single(SDK.MacOSX))
			.take(1)
			.map { sdk in sdk.platform }
			.map { platform in self.directoryURL.URLByAppendingPathComponent(platform.relativePath, isDirectory: true) }
			.map { platformFolderURL in platformFolderURL.URLByAppendingPathComponent(frameworkURL.lastPathComponent!) }
			.mergeMap { destinationFrameworkURL in copyFramework(frameworkURL, destinationFrameworkURL) }
	}

	/// Checks out the given project into its intended working directory,
	/// cloning it first if need be.
	private func checkoutOrCloneProject(project: ProjectIdentifier, atRevision revision: String, submodulesByPath: [String: Submodule]) -> ColdSignal<()> {
		let repositoryURL = repositoryFileURLForProject(project)
		let workingDirectoryURL = directoryURL.URLByAppendingPathComponent(project.relativePath, isDirectory: true)

		let checkoutSignal = ColdSignal<()>.lazy {
				var submodule: Submodule?

				if var foundSubmodule = submodulesByPath[project.relativePath] {

}

/// Loads the Cartfile for the given dependency, at the given version.
private func cartfileForDependency(dependency: Dependency<PinnedVersion>) -> SignalProducer<Cartfile, CarthageError> {
	let repositoryURL = repositoryFileURLForProject(dependency.project)

	return contentsOfFileInRepository(repositoryURL, CarthageProjectCartfilePath, revision: dependency.version.commitish)
		|> catch { _ in .empty }
		|> tryMap { Cartfile.fromString($0) }
}

/// Returns the URL that the project's remote repository exists at.
