diff --git a/CHANGELOG.md b/CHANGELOG.md index d60e150f..a87b5bb3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -143,6 +143,8 @@ - Config setting presets can now also be loaded from the main bundle when bundling XcodeGenKit #1135 @SofteqDG - Added ability to generate multiple projects in one XcodeGen launch #1270 @skofgar - Use memoization during recursive SpecFiles creation. This provides a drastic performance boost with lots of recursive includes #1275 @ma-oli +- Added `--render-markdowns` command flag to generate the `.xcodesamplecode.plist` inside the project container and let Xcode render the markdown files with `md` extension. +- Added `renderMarkdown` spec option generate the `.xcodesamplecode.plist` inside the project container and let Xcode render the markdown files with `md` extension. ### Fixed diff --git a/Sources/ProjectSpec/SpecOptions.swift b/Sources/ProjectSpec/SpecOptions.swift index a5df4e28..96a76d15 100644 --- a/Sources/ProjectSpec/SpecOptions.swift +++ b/Sources/ProjectSpec/SpecOptions.swift @@ -16,6 +16,7 @@ public struct SpecOptions: Equatable { public var carthageBuildPath: String? public var carthageExecutablePath: String? public var createIntermediateGroups: Bool + public var renderMarkdowns: Bool? public var bundleIdPrefix: String? public var settingPresets: SettingPresets public var disabledValidations: [ValidationType] @@ -80,6 +81,7 @@ public struct SpecOptions: Equatable { carthageBuildPath: String? = nil, carthageExecutablePath: String? = nil, createIntermediateGroups: Bool = createIntermediateGroupsDefault, + renderMarkdowns: Bool? = nil, bundleIdPrefix: String? = nil, settingPresets: SettingPresets = settingPresetsDefault, developmentLanguage: String? = nil, @@ -106,6 +108,7 @@ public struct SpecOptions: Equatable { self.carthageBuildPath = carthageBuildPath self.carthageExecutablePath = carthageExecutablePath self.createIntermediateGroups = createIntermediateGroups + self.renderMarkdowns = renderMarkdowns self.bundleIdPrefix = bundleIdPrefix self.settingPresets = settingPresets self.developmentLanguage = developmentLanguage @@ -142,6 +145,7 @@ extension SpecOptions: JSONObjectConvertible { bundleIdPrefix = jsonDictionary.json(atKeyPath: "bundleIdPrefix") settingPresets = jsonDictionary.json(atKeyPath: "settingPresets") ?? SpecOptions.settingPresetsDefault createIntermediateGroups = jsonDictionary.json(atKeyPath: "createIntermediateGroups") ?? SpecOptions.createIntermediateGroupsDefault + renderMarkdowns = jsonDictionary.json(atKeyPath: "renderMarkdowns") developmentLanguage = jsonDictionary.json(atKeyPath: "developmentLanguage") usesTabs = jsonDictionary.json(atKeyPath: "usesTabs") xcodeVersion = jsonDictionary.json(atKeyPath: "xcodeVersion") diff --git a/Sources/XcodeGenCLI/Commands/GenerateCommand.swift b/Sources/XcodeGenCLI/Commands/GenerateCommand.swift index 385846e5..f666a01a 100644 --- a/Sources/XcodeGenCLI/Commands/GenerateCommand.swift +++ b/Sources/XcodeGenCLI/Commands/GenerateCommand.swift @@ -19,6 +19,9 @@ class GenerateCommand: ProjectCommand { @Flag("--only-plists", description: "Generate only plist files") var onlyPlists: Bool + + @Flag("--render-markdowns", description: "Render markdown files with `.md` extension") + var renderMarkdowns: Bool init(version: Version) { super.init(version: version, @@ -119,6 +122,39 @@ class GenerateCommand: ProjectCommand { } catch { throw GenerationError.writingError(error) } + + switch project.options.renderMarkdowns { + case .some(true): + do { + try fileWriter.writeMarkdownRendererPlist() + success("Xcode markdown rendering enabled") + } catch { + throw GenerationError.writingError(error) + } + case .some(false): + do { + try fileWriter.deleteMarkdownRendererPlist() + success("Xcode markdown rendering disabled") + } catch { + info("Failed to disable Xcode markdown rendering: \(error.localizedDescription)") + } + case .none: break + // No need for change + } + + // add markdown renderer if needed + /// - Note: this flag will override the spec option + if renderMarkdowns && project.options.renderMarkdowns != true { + do { + if project.options.renderMarkdowns == false { + info("Overriding markdown rendering option because of the given --render-markdowns flag") + } + try fileWriter.writeMarkdownRendererPlist() + success("Xcode markdown rendering enabled") + } catch { + throw GenerationError.writingError(error) + } + } // write cache if let cacheFile = cacheFile { diff --git a/Sources/XcodeGenKit/FileWriter.swift b/Sources/XcodeGenKit/FileWriter.swift index 17af96c5..98edfee0 100644 --- a/Sources/XcodeGenKit/FileWriter.swift +++ b/Sources/XcodeGenKit/FileWriter.swift @@ -40,6 +40,16 @@ public class FileWriter { } } } + + public func writeMarkdownRendererPlist() throws { + let path = project.defaultProjectPath + ".xcodesamplecode.plist" + try writePlist([:], path: path.string) + } + + public func deleteMarkdownRendererPlist() throws { + let path = project.defaultProjectPath + ".xcodesamplecode.plist" + try path.delete() + } private func writePlist(_ plist: [String: Any], path: String) throws { let path = project.basePath + path