From b456e4bdef69059afae7c95e73d475997c6725d5 Mon Sep 17 00:00:00 2001 From: Monish Syed Date: Tue, 7 Sep 2021 01:09:28 +0400 Subject: [PATCH 1/4] * Added ability to create a workflow without a worker * Worker template is now separate then workflow template that gives us the flexibility to use RxSwift or ReactiveSwift --- .../TemplateInfo.plist | 42 +++++++++++- .../___FILEBASENAME___Workflow.swift | 66 ------------------- 2 files changed, 41 insertions(+), 67 deletions(-) delete mode 100644 Tooling/Templates/Workflow (Verbose).xctemplate/___FILEBASENAME___Workflow.swift diff --git a/Tooling/Templates/Workflow (Verbose).xctemplate/TemplateInfo.plist b/Tooling/Templates/Workflow (Verbose).xctemplate/TemplateInfo.plist index 25f79240a..e0b4f6e47 100644 --- a/Tooling/Templates/Workflow (Verbose).xctemplate/TemplateInfo.plist +++ b/Tooling/Templates/Workflow (Verbose).xctemplate/TemplateInfo.plist @@ -18,12 +18,52 @@ Name Name: Description - The name of the workflow to create. "Workflow" will be appended to the name. + The name of the workflow to create. "Workflow" will be appended to the name. Type text Default HelloWorld + + Identifier + generateWorker + Required + + Name + Also create a Worker + Description + Workers define a unit of asynchronous work + Type + checkbox + Default + false + + + Identifier + streamType + Required + + Name + Uses: + Description + Whether to use RxSwift or ReactiveSwift + Type + popup + Default + RxSwift + RequiredOptions + + generateWorker + + true + + + Values + + RxSwift + ReactiveSwift + + diff --git a/Tooling/Templates/Workflow (Verbose).xctemplate/___FILEBASENAME___Workflow.swift b/Tooling/Templates/Workflow (Verbose).xctemplate/___FILEBASENAME___Workflow.swift deleted file mode 100644 index f72f25a79..000000000 --- a/Tooling/Templates/Workflow (Verbose).xctemplate/___FILEBASENAME___Workflow.swift +++ /dev/null @@ -1,66 +0,0 @@ -// ___FILEHEADER___ - -import ReactiveSwift -import Workflow -import WorkflowReactiveSwift -import WorkflowUI - -// MARK: Input and Output - -struct ___VARIABLE_productName___Workflow: Workflow { - enum Output {} -} - -// MARK: State and Initialization - -extension ___VARIABLE_productName___Workflow { - struct State {} - - func makeInitialState() -> ___VARIABLE_productName___Workflow.State { - return State() - } - - func workflowDidChange(from previousWorkflow: ___VARIABLE_productName___Workflow, state: inout State) {} -} - -// MARK: Actions - -extension ___VARIABLE_productName___Workflow { - enum Action: WorkflowAction { - typealias WorkflowType = ___VARIABLE_productName___Workflow - - func apply(toState state: inout ___VARIABLE_productName___Workflow.State) -> ___VARIABLE_productName___Workflow.Output? { - switch self { - // Update state and produce an optional output based on which action was received. - } - } - } -} - -// MARK: Workers - -extension ___VARIABLE_productName___Workflow { - struct ___VARIABLE_productName___Worker: Worker { - enum Output {} - - func run() -> SignalProducer { - fatalError() - } - - func isEquivalent(to otherWorker: ___VARIABLE_productName___Worker) -> Bool { - return true - } - } -} - -// MARK: Rendering - -extension ___VARIABLE_productName___Workflow { - // TODO: Change this to your actual rendering type - typealias Rendering = String - - func render(state: ___VARIABLE_productName___Workflow.State, context: RenderContext<___VARIABLE_productName___Workflow>) -> Rendering { - #warning("Don't forget your render implementation and to return the correct rendering type!") - return "This is likely not the rendering that you want to return" - } -} From 067a285116649130d4cd3327ef0ce66e02f6eb68 Mon Sep 17 00:00:00 2001 From: Monish Syed Date: Tue, 7 Sep 2021 01:16:35 +0400 Subject: [PATCH 2/4] Separating templates to default(without worker), with RxSwift Worker and with ReactiveSwift Worker. Also creating symlink for workflow template to avoid duplication --- .../Default/___FILEBASENAME___Workflow.swift | 48 +++++++++++++++++++ .../___FILEBASENAME___Worker.swift | 22 +++++++++ .../___FILEBASENAME___Workflow.swift | 1 + .../___FILEBASENAME___Worker.swift | 22 +++++++++ .../___FILEBASENAME___Workflow.swift | 1 + 5 files changed, 94 insertions(+) create mode 100644 Tooling/Templates/Workflow (Verbose).xctemplate/Default/___FILEBASENAME___Workflow.swift create mode 100644 Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerReactiveSwift/___FILEBASENAME___Worker.swift create mode 120000 Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerReactiveSwift/___FILEBASENAME___Workflow.swift create mode 100644 Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerRxSwift/___FILEBASENAME___Worker.swift create mode 120000 Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerRxSwift/___FILEBASENAME___Workflow.swift diff --git a/Tooling/Templates/Workflow (Verbose).xctemplate/Default/___FILEBASENAME___Workflow.swift b/Tooling/Templates/Workflow (Verbose).xctemplate/Default/___FILEBASENAME___Workflow.swift new file mode 100644 index 000000000..f4b44cda9 --- /dev/null +++ b/Tooling/Templates/Workflow (Verbose).xctemplate/Default/___FILEBASENAME___Workflow.swift @@ -0,0 +1,48 @@ +// ___FILEHEADER___ + +import Workflow +import WorkflowUI + +// MARK: Input and Output + +struct ___VARIABLE_productName___Workflow: Workflow { + enum Output {} +} + +// MARK: State and Initialization + +extension ___VARIABLE_productName___Workflow { + struct State {} + + func makeInitialState() -> ___VARIABLE_productName___Workflow.State { + return State() + } + + func workflowDidChange(from previousWorkflow: ___VARIABLE_productName___Workflow, state: inout State) {} +} + +// MARK: Actions + +extension ___VARIABLE_productName___Workflow { + enum Action: WorkflowAction { + typealias WorkflowType = ___VARIABLE_productName___Workflow + + func apply(toState state: inout ___VARIABLE_productName___Workflow.State) -> ___VARIABLE_productName___Workflow.Output? { + switch self { + // Update state and produce an optional output based on which action was received. + } + } + } +} + +// MARK: Rendering + +extension ___VARIABLE_productName___Workflow { + // TODO: Change this to your actual rendering type + typealias Rendering = String + + func render(state: ___VARIABLE_productName___Workflow.State, context: RenderContext<___VARIABLE_productName___Workflow>) -> Rendering { + #warning("Don't forget your render implementation and to return the correct rendering type!") + return "This is likely not the rendering that you want to return" + } +} diff --git a/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerReactiveSwift/___FILEBASENAME___Worker.swift b/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerReactiveSwift/___FILEBASENAME___Worker.swift new file mode 100644 index 000000000..c6c66aea8 --- /dev/null +++ b/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerReactiveSwift/___FILEBASENAME___Worker.swift @@ -0,0 +1,22 @@ +// ___FILEHEADER___ + +import ReactiveSwift +import Workflow +import WorkflowReactiveSwift +import WorkflowUI + +// MARK: Workers + +extension ___VARIABLE_productName___Workflow { + struct ___VARIABLE_productName___Worker: Worker { + enum Output {} + + func run() -> SignalProducer { + fatalError() + } + + func isEquivalent(to otherWorker: ___VARIABLE_productName___Worker) -> Bool { + return true + } + } +} diff --git a/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerReactiveSwift/___FILEBASENAME___Workflow.swift b/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerReactiveSwift/___FILEBASENAME___Workflow.swift new file mode 120000 index 000000000..1f57d68b7 --- /dev/null +++ b/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerReactiveSwift/___FILEBASENAME___Workflow.swift @@ -0,0 +1 @@ +/Users/monishsyed/Development/Personal/workflow-swift/Tooling/Templates/Workflow (Verbose).xctemplate/Default/___FILEBASENAME___Workflow.swift \ No newline at end of file diff --git a/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerRxSwift/___FILEBASENAME___Worker.swift b/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerRxSwift/___FILEBASENAME___Worker.swift new file mode 100644 index 000000000..ac6491969 --- /dev/null +++ b/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerRxSwift/___FILEBASENAME___Worker.swift @@ -0,0 +1,22 @@ +// ___FILEHEADER___ + +import RxSwift +import Workflow +import WorkflowRxSwift +import WorkflowUI + +// MARK: Workers + +extension ___VARIABLE_productName___Workflow { + struct ___VARIABLE_productName___Worker: Worker { + enum Output {} + + func run() -> Observable { + fatalError() + } + + func isEquivalent(to otherWorker: ___VARIABLE_productName___Worker) -> Bool { + return true + } + } +} diff --git a/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerRxSwift/___FILEBASENAME___Workflow.swift b/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerRxSwift/___FILEBASENAME___Workflow.swift new file mode 120000 index 000000000..1f57d68b7 --- /dev/null +++ b/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerRxSwift/___FILEBASENAME___Workflow.swift @@ -0,0 +1 @@ +/Users/monishsyed/Development/Personal/workflow-swift/Tooling/Templates/Workflow (Verbose).xctemplate/Default/___FILEBASENAME___Workflow.swift \ No newline at end of file From 0e42d35701a296fc32634ba42927d0d6edbcbc46 Mon Sep 17 00:00:00 2001 From: Monish Syed Date: Wed, 8 Sep 2021 22:00:55 +0400 Subject: [PATCH 3/4] Removing symlinks and adding copies of ___FILEBASENAME___Workflow.swift --- .../___FILEBASENAME___Workflow.swift | 49 ++++++++++++++++++- .../___FILEBASENAME___Workflow.swift | 49 ++++++++++++++++++- 2 files changed, 96 insertions(+), 2 deletions(-) mode change 120000 => 100644 Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerReactiveSwift/___FILEBASENAME___Workflow.swift mode change 120000 => 100644 Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerRxSwift/___FILEBASENAME___Workflow.swift diff --git a/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerReactiveSwift/___FILEBASENAME___Workflow.swift b/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerReactiveSwift/___FILEBASENAME___Workflow.swift deleted file mode 120000 index 1f57d68b7..000000000 --- a/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerReactiveSwift/___FILEBASENAME___Workflow.swift +++ /dev/null @@ -1 +0,0 @@ -/Users/monishsyed/Development/Personal/workflow-swift/Tooling/Templates/Workflow (Verbose).xctemplate/Default/___FILEBASENAME___Workflow.swift \ No newline at end of file diff --git a/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerReactiveSwift/___FILEBASENAME___Workflow.swift b/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerReactiveSwift/___FILEBASENAME___Workflow.swift new file mode 100644 index 000000000..f4b44cda9 --- /dev/null +++ b/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerReactiveSwift/___FILEBASENAME___Workflow.swift @@ -0,0 +1,48 @@ +// ___FILEHEADER___ + +import Workflow +import WorkflowUI + +// MARK: Input and Output + +struct ___VARIABLE_productName___Workflow: Workflow { + enum Output {} +} + +// MARK: State and Initialization + +extension ___VARIABLE_productName___Workflow { + struct State {} + + func makeInitialState() -> ___VARIABLE_productName___Workflow.State { + return State() + } + + func workflowDidChange(from previousWorkflow: ___VARIABLE_productName___Workflow, state: inout State) {} +} + +// MARK: Actions + +extension ___VARIABLE_productName___Workflow { + enum Action: WorkflowAction { + typealias WorkflowType = ___VARIABLE_productName___Workflow + + func apply(toState state: inout ___VARIABLE_productName___Workflow.State) -> ___VARIABLE_productName___Workflow.Output? { + switch self { + // Update state and produce an optional output based on which action was received. + } + } + } +} + +// MARK: Rendering + +extension ___VARIABLE_productName___Workflow { + // TODO: Change this to your actual rendering type + typealias Rendering = String + + func render(state: ___VARIABLE_productName___Workflow.State, context: RenderContext<___VARIABLE_productName___Workflow>) -> Rendering { + #warning("Don't forget your render implementation and to return the correct rendering type!") + return "This is likely not the rendering that you want to return" + } +} diff --git a/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerRxSwift/___FILEBASENAME___Workflow.swift b/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerRxSwift/___FILEBASENAME___Workflow.swift deleted file mode 120000 index 1f57d68b7..000000000 --- a/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerRxSwift/___FILEBASENAME___Workflow.swift +++ /dev/null @@ -1 +0,0 @@ -/Users/monishsyed/Development/Personal/workflow-swift/Tooling/Templates/Workflow (Verbose).xctemplate/Default/___FILEBASENAME___Workflow.swift \ No newline at end of file diff --git a/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerRxSwift/___FILEBASENAME___Workflow.swift b/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerRxSwift/___FILEBASENAME___Workflow.swift new file mode 100644 index 000000000..f4b44cda9 --- /dev/null +++ b/Tooling/Templates/Workflow (Verbose).xctemplate/generateWorkerRxSwift/___FILEBASENAME___Workflow.swift @@ -0,0 +1,48 @@ +// ___FILEHEADER___ + +import Workflow +import WorkflowUI + +// MARK: Input and Output + +struct ___VARIABLE_productName___Workflow: Workflow { + enum Output {} +} + +// MARK: State and Initialization + +extension ___VARIABLE_productName___Workflow { + struct State {} + + func makeInitialState() -> ___VARIABLE_productName___Workflow.State { + return State() + } + + func workflowDidChange(from previousWorkflow: ___VARIABLE_productName___Workflow, state: inout State) {} +} + +// MARK: Actions + +extension ___VARIABLE_productName___Workflow { + enum Action: WorkflowAction { + typealias WorkflowType = ___VARIABLE_productName___Workflow + + func apply(toState state: inout ___VARIABLE_productName___Workflow.State) -> ___VARIABLE_productName___Workflow.Output? { + switch self { + // Update state and produce an optional output based on which action was received. + } + } + } +} + +// MARK: Rendering + +extension ___VARIABLE_productName___Workflow { + // TODO: Change this to your actual rendering type + typealias Rendering = String + + func render(state: ___VARIABLE_productName___Workflow.State, context: RenderContext<___VARIABLE_productName___Workflow>) -> Rendering { + #warning("Don't forget your render implementation and to return the correct rendering type!") + return "This is likely not the rendering that you want to return" + } +} From 733177f6d14ab17b768d0b2034001d65e2d314d8 Mon Sep 17 00:00:00 2001 From: Monish Syed Date: Thu, 9 Sep 2021 18:36:55 +0400 Subject: [PATCH 4/4] Changed default selection for worker type from RxSwift to ReactiveSwift --- .../Templates/Workflow (Verbose).xctemplate/TemplateInfo.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tooling/Templates/Workflow (Verbose).xctemplate/TemplateInfo.plist b/Tooling/Templates/Workflow (Verbose).xctemplate/TemplateInfo.plist index e0b4f6e47..815ea6d76 100644 --- a/Tooling/Templates/Workflow (Verbose).xctemplate/TemplateInfo.plist +++ b/Tooling/Templates/Workflow (Verbose).xctemplate/TemplateInfo.plist @@ -50,7 +50,7 @@ Type popup Default - RxSwift + ReactiveSwift RequiredOptions generateWorker