diff --git a/Sources/XcodeSurgery-CLI/Transplant/Transplant.swift b/Sources/XcodeSurgery-CLI/Transplant/Transplant.swift index 0ebc821..103aa77 100644 --- a/Sources/XcodeSurgery-CLI/Transplant/Transplant.swift +++ b/Sources/XcodeSurgery-CLI/Transplant/Transplant.swift @@ -40,13 +40,18 @@ extension XcodeSurgery { @Option(name: .customLong("filesToRemove"), parsing: .upToNextOption, - help: "Files to remove (separated by spaces)") + help: "Files to remove (separated by comma)") var filesToRemove: [String] = [] @Option(name: .customLong("filesToInject"), parsing: .upToNextOption, help: "Files to inject (separated by spaces)") var filesToInject: [String] = [] + + @Option(name: .customLong("foldersToPatch"), + help: "Folder to patch over with (separated by comma)") + var foldersToPatch: [String] = [] + @Option(name: [.customLong("debugInformationFormat"), .customLong("dif")], diff --git a/Sources/XcodeSurgery-CLI/Transplant/TransplantActionable.swift b/Sources/XcodeSurgery-CLI/Transplant/TransplantActionable.swift index fe34399..c277b6f 100644 --- a/Sources/XcodeSurgery-CLI/Transplant/TransplantActionable.swift +++ b/Sources/XcodeSurgery-CLI/Transplant/TransplantActionable.swift @@ -28,7 +28,8 @@ extension TransplantActionable { func removeFiles() throws { XcodeSurgery.log("----- begin removeFiles") - let filesToRemove = self.transplantCommand.filesToRemove + let filesToRemoveBeforeSplit = self.transplantCommand.filesToRemove.joined(separator: ",") + let filesToRemove = filesToRemoveBeforeSplit.split(separator: ",") XcodeSurgery.log("filesToRemove: \(filesToRemove)") let fileManager = FileManager.default try fileManager.removeItem(atPath: "\(self.pathOfWorkingFolder)/Info.plist") @@ -54,6 +55,29 @@ extension TransplantActionable { try fileManager.copyItem(atPath: fileToInject, toPath: destination) } + + let foldersToPatch = self.transplantCommand.foldersToPatch + let workingDirectory = self.transplantCommand.workingDirectory + for folderToPatch in foldersToPatch { + + guard let folderToPatchURL = URL(string: folderToPatch) else { + throw NSError(domain: "Invalid file url: \(folderToPatch)", code: 0, userInfo: nil) + } + let folderName = folderToPatchURL.lastPathComponent + let destination = "\(pathOfWorkingFolder)/\(folderName)" + + XcodeSurgery.log("------- workingDirectory: \(workingDirectory)") + XcodeSurgery.log("------- pathOfWorkingFolder: \(pathOfWorkingFolder)") + XcodeSurgery.log("------- folderToPatch: \(folderToPatch)") + XcodeSurgery.log("------- destination: \(destination)") + + guard let destinationURL = URL(string: destination) else { + throw NSError(domain: "Invalid file url: \(destination)", code: 0, userInfo: nil) + } + try _ = fileManager.replaceItemAt(destinationURL, withItemAt: folderToPatchURL, options: [.usingNewMetadataOnly]) + + XcodeSurgery.log("------- [ok]folderToPatch OK") + } } func renameBinary() throws {