                         let buildPhase = PBXShellScriptBuildPhase(name: scriptName,
                                                                   inputFileListPaths: [inputFileListPath],
                                                                   outputFileListPaths: [outputFileListPath],
-                                                                  shellScript: Keys.carthageScript)
+                                                                  shellScript: Constants.carthageScript)
 
                         target.buildPhases.append(buildPhase)
                         xcodeproj.pbxproj.add(object: buildPhase)

    enum Error: Swift.Error {
        case projectFileReadingFailed
        case targetFilterFailed(name: String)
        case nothingToUpdate
        case noTargets(name: String?)
    }

    private enum Keys {
        static let projectExtension = "xcodeproj"
        static let carthageScript = "/usr/local/bin/carthage copy-frameworks"
    }

    public let projectDirectoryPath: String?

        let folder = try Folder(path: directoryPath)
        return folder.subfolders
            .filter { folder in
                let projectName = folder.name.deleting(suffix: "." + Constants.projectExtension)
                var isValid = folder.name.hasSuffix(Constants.projectExtension)
                if filterNames.isEmpty == false {
                    isValid = isValid && filterNames.contains(projectName)
                }
