├── Blaupause ├── bin └── Blaupause ├── Blaupause.xcodeproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcuserdata │ │ └── marius.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcshareddata │ │ └── Blaupause.xcscmblueprint ├── xcshareddata │ └── xcschemes │ │ ├── xcschememanagement.plist │ │ └── Blaupause.xcscheme ├── Files_Info.plist ├── Result_Info.plist ├── Commandant_Info.plist ├── SwiftyJSON_Info.plist ├── xcuserdata │ └── marius.xcuserdatad │ │ └── xcschemes │ │ ├── xcschememanagement.plist │ │ └── Blaupause.xcscheme └── project.pbxproj ├── Package.swift ├── Sources └── Blaupause │ ├── PlaceHolder │ ├── PlaceHoldable.swift │ └── PlaceHolderNameInjector.swift │ ├── Commands │ ├── MVCCommand.swift │ ├── MVVMCommand.swift │ ├── ViperCommand.swift │ ├── AbstractTemplateCommand.swift │ └── TemplateCommand.swift │ ├── Templates │ ├── Types │ │ ├── File.swift │ │ ├── TemplateProtocols.swift │ │ └── Folder.swift │ ├── TemplateGenerator.swift │ ├── TemplateParser.swift │ └── BuildInTemplates.swift │ └── main.swift ├── Package.pins ├── Example └── .blaupause.json ├── LICENSE ├── .gitignore └── README.md /Blaupause: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mRs-/Blaupause/HEAD/Blaupause -------------------------------------------------------------------------------- /bin/Blaupause: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mRs-/Blaupause/HEAD/bin/Blaupause -------------------------------------------------------------------------------- /Blaupause.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Blaupause.xcodeproj/project.xcworkspace/xcuserdata/marius.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mRs-/Blaupause/HEAD/Blaupause.xcodeproj/project.xcworkspace/xcuserdata/marius.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | import PackageDescription 2 | 3 | let packe = Package( 4 | name: "Blaupause", 5 | dependencies: [ 6 | .Package(url: "https://github.com/JohnSundell/Files.git", majorVersion: 1), 7 | .Package(url: "https://github.com/Carthage/Commandant.git", majorVersion: 0) 8 | ] 9 | ) 10 | -------------------------------------------------------------------------------- /Blaupause.xcodeproj/xcshareddata/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SchemeUserState 5 | 6 | Blaupause.xcscheme 7 | 8 | 9 | SuppressBuildableAutocreation 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Sources/Blaupause/PlaceHolder/PlaceHoldable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PlaceHoldable.swift 3 | // Blaupause 4 | // 5 | // Created by Marius Landwehr on 17.04.17. 6 | // 7 | // 8 | 9 | import Foundation 10 | 11 | protocol PlaceholderNameable { 12 | var placeHolderName: String { get set } 13 | } 14 | 15 | struct PlaceHolderProvider: PlaceholderNameable { 16 | var placeHolderName: String = "Map" 17 | } 18 | -------------------------------------------------------------------------------- /Sources/Blaupause/Commands/MVCCommand.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MVCCommand.swift 3 | // Blaupause 4 | // 5 | // Created by Marius Landwehr on 17.04.17. 6 | // 7 | // 8 | 9 | import Foundation 10 | 11 | final class MVCCommand: AbstractTemplateCommand { 12 | 13 | override var verb: String { 14 | return "mvc" 15 | } 16 | 17 | override var function: String { 18 | return "Creates the default template for a MVC Module" 19 | } 20 | 21 | override var template: BuildInTemplates! { 22 | return .MVC 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Sources/Blaupause/Commands/MVVMCommand.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MVVMCommand.swift 3 | // Blaupause 4 | // 5 | // Created by Marius Landwehr on 17.04.17. 6 | // 7 | // 8 | 9 | import Foundation 10 | 11 | final class MVVMCommand: AbstractTemplateCommand { 12 | 13 | override var verb: String { 14 | return "mvvm" 15 | } 16 | 17 | override var function: String { 18 | return "Creates the default template for a MVVM Module" 19 | } 20 | 21 | override var template: BuildInTemplates! { 22 | return .MVVM 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Sources/Blaupause/Commands/ViperCommand.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViperCommand.swift 3 | // Blaupause 4 | // 5 | // Created by Marius Landwehr on 17.04.17. 6 | // 7 | // 8 | 9 | import Foundation 10 | 11 | final class ViperCommand: AbstractTemplateCommand { 12 | 13 | override var verb: String { 14 | return "viper" 15 | } 16 | 17 | override var function: String { 18 | return "Creates the default template for a VIPER Module" 19 | } 20 | 21 | override var template: BuildInTemplates! { 22 | return .Viper 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Package.pins: -------------------------------------------------------------------------------- 1 | { 2 | "autoPin": true, 3 | "pins": [ 4 | { 5 | "package": "Commandant", 6 | "reason": null, 7 | "repositoryURL": "https://github.com/Carthage/Commandant.git", 8 | "version": "0.12.0" 9 | }, 10 | { 11 | "package": "Files", 12 | "reason": null, 13 | "repositoryURL": "https://github.com/JohnSundell/Files.git", 14 | "version": "1.6.2" 15 | }, 16 | { 17 | "package": "Result", 18 | "reason": null, 19 | "repositoryURL": "https://github.com/antitypical/Result.git", 20 | "version": "3.2.1" 21 | } 22 | ], 23 | "version": 1 24 | } -------------------------------------------------------------------------------- /Sources/Blaupause/Templates/Types/File.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FileTemplate.swift 3 | // Blaupause 4 | // 5 | // Created by Marius Landwehr on 16.04.17. 6 | // Copyright © 2017 Marius Landwehr. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Files 11 | 12 | struct File: TemplateGenerateable { 13 | 14 | let name: String 15 | var placeHolderProvider: PlaceholderNameable! 16 | 17 | init(name: String) { 18 | self.name = name 19 | } 20 | 21 | func generate(with currentPath: String = "") throws -> RelativePath? { 22 | try Files.Folder(path: currentPath).createFile(named: nameWithoutPlaceHolder) 23 | return nil // we need no path for files 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Sources/Blaupause/main.swift: -------------------------------------------------------------------------------- 1 | // 2 | // main.swift 3 | // Blaupause 4 | // 5 | // Created by Marius Landwehr on 09.04.17. 6 | // Copyright © 2017 Marius Landwehr. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Commandant 11 | import Dispatch 12 | 13 | DispatchQueue.global().async { 14 | 15 | let registry = CommandRegistry>() 16 | 17 | registry.register(ViperCommand()) 18 | registry.register(MVCCommand()) 19 | registry.register(MVVMCommand()) 20 | registry.register(TemplateCommand()) 21 | registry.register(HelpCommand(registry: registry)) 22 | 23 | registry.main(defaultVerb: TemplateCommand().verb) { error in 24 | print(error.description) 25 | } 26 | } 27 | 28 | dispatchMain() 29 | -------------------------------------------------------------------------------- /Sources/Blaupause/PlaceHolder/PlaceHolderNameInjector.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PlaceHolderNameInjector.swift 3 | // Blaupause 4 | // 5 | // Created by Marius Landwehr on 17.04.17. 6 | // 7 | // 8 | 9 | import Foundation 10 | 11 | class PlaceHolderNameInjector { 12 | 13 | let template: TemplateNameable 14 | let placeHolderProvider: PlaceholderNameable 15 | 16 | init(stringWithPlaceHolder: TemplateNameable, and nameProvider: PlaceholderNameable) { 17 | self.template = stringWithPlaceHolder 18 | self.placeHolderProvider = nameProvider 19 | } 20 | 21 | func nameWithoutPlaceHolder() -> String { 22 | 23 | return template.name.replacingOccurrences(of: "*", 24 | with: placeHolderProvider.placeHolderName) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Blaupause.xcodeproj/Files_Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CFBundleDevelopmentRegion 5 | en 6 | CFBundleExecutable 7 | $(EXECUTABLE_NAME) 8 | CFBundleIdentifier 9 | $(PRODUCT_BUNDLE_IDENTIFIER) 10 | CFBundleInfoDictionaryVersion 11 | 6.0 12 | CFBundleName 13 | $(PRODUCT_NAME) 14 | CFBundlePackageType 15 | FMWK 16 | CFBundleShortVersionString 17 | 1.0 18 | CFBundleSignature 19 | ???? 20 | CFBundleVersion 21 | $(CURRENT_PROJECT_VERSION) 22 | NSPrincipalClass 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Blaupause.xcodeproj/Result_Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CFBundleDevelopmentRegion 5 | en 6 | CFBundleExecutable 7 | $(EXECUTABLE_NAME) 8 | CFBundleIdentifier 9 | $(PRODUCT_BUNDLE_IDENTIFIER) 10 | CFBundleInfoDictionaryVersion 11 | 6.0 12 | CFBundleName 13 | $(PRODUCT_NAME) 14 | CFBundlePackageType 15 | FMWK 16 | CFBundleShortVersionString 17 | 1.0 18 | CFBundleSignature 19 | ???? 20 | CFBundleVersion 21 | $(CURRENT_PROJECT_VERSION) 22 | NSPrincipalClass 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Blaupause.xcodeproj/Commandant_Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CFBundleDevelopmentRegion 5 | en 6 | CFBundleExecutable 7 | $(EXECUTABLE_NAME) 8 | CFBundleIdentifier 9 | $(PRODUCT_BUNDLE_IDENTIFIER) 10 | CFBundleInfoDictionaryVersion 11 | 6.0 12 | CFBundleName 13 | $(PRODUCT_NAME) 14 | CFBundlePackageType 15 | FMWK 16 | CFBundleShortVersionString 17 | 1.0 18 | CFBundleSignature 19 | ???? 20 | CFBundleVersion 21 | $(CURRENT_PROJECT_VERSION) 22 | NSPrincipalClass 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Blaupause.xcodeproj/SwiftyJSON_Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CFBundleDevelopmentRegion 5 | en 6 | CFBundleExecutable 7 | $(EXECUTABLE_NAME) 8 | CFBundleIdentifier 9 | $(PRODUCT_BUNDLE_IDENTIFIER) 10 | CFBundleInfoDictionaryVersion 11 | 6.0 12 | CFBundleName 13 | $(PRODUCT_NAME) 14 | CFBundlePackageType 15 | FMWK 16 | CFBundleShortVersionString 17 | 1.0 18 | CFBundleSignature 19 | ???? 20 | CFBundleVersion 21 | $(CURRENT_PROJECT_VERSION) 22 | NSPrincipalClass 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Sources/Blaupause/Templates/Types/TemplateProtocols.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Template.swift 3 | // Blaupause 4 | // 5 | // Created by Marius Landwehr on 14.04.17. 6 | // Copyright © 2017 Marius Landwehr. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | typealias RelativePath = String 12 | 13 | protocol TemplateNameable { 14 | var name: String { get } 15 | } 16 | 17 | protocol TemplateGenerateable: TemplateNameable { 18 | var placeHolderProvider: PlaceholderNameable! { get set } 19 | func generate(with currentPath: String) throws -> RelativePath? 20 | } 21 | 22 | extension TemplateGenerateable { 23 | 24 | var nameWithoutPlaceHolder: String { 25 | let injector = PlaceHolderNameInjector(stringWithPlaceHolder: self, and: placeHolderProvider) 26 | return injector.nameWithoutPlaceHolder() 27 | } 28 | } 29 | 30 | protocol TemplateParantable { 31 | var children: [TemplateGenerateable]? { get } 32 | } 33 | -------------------------------------------------------------------------------- /Blaupause.xcodeproj/xcuserdata/marius.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Blaupause.xcscheme 8 | 9 | orderHint 10 | 1 11 | 12 | Blaupause.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 0 16 | 17 | 18 | SuppressBuildableAutocreation 19 | 20 | OBJ_52 21 | 22 | primary 23 | 24 | 25 | OBJ_59 26 | 27 | primary 28 | 29 | 30 | OBJ_67 31 | 32 | primary 33 | 34 | 35 | OBJ_85 36 | 37 | primary 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Example/.blaupause.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "type": "folder", 4 | "name": "*", 5 | "children": [ 6 | { 7 | "type": "folder", 8 | "name": "Model", 9 | "children": [ 10 | { 11 | "type": "file", 12 | "name": "*Model.swift" 13 | } 14 | ] 15 | }, 16 | { 17 | "type": "folder", 18 | "name": "View", 19 | "children": [ 20 | { 21 | "type": "file", 22 | "name": "*View.swift" 23 | } 24 | ] 25 | }, 26 | { 27 | "type": "folder", 28 | "name": "Controller", 29 | "children": [ 30 | { 31 | "type": "file", 32 | "name": "*ViewController.swift" 33 | } 34 | ] 35 | } 36 | ] 37 | } 38 | ] -------------------------------------------------------------------------------- /Sources/Blaupause/Templates/Types/Folder.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FolderTemplate.swift 3 | // Blaupause 4 | // 5 | // Created by Marius Landwehr on 16.04.17. 6 | // Copyright © 2017 Marius Landwehr. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Files 11 | 12 | struct Folder: TemplateGenerateable, TemplateParantable { 13 | 14 | var placeHolderProvider: PlaceholderNameable! 15 | 16 | let name: String 17 | let children: [TemplateGenerateable]? 18 | 19 | init(name: String, children: [TemplateGenerateable]?) { 20 | self.name = name 21 | self.children = children 22 | } 23 | 24 | func generate(with currentPath: String) throws -> RelativePath? { 25 | 26 | try Files.Folder(path: currentPath).createSubfolder(named: nameWithoutPlaceHolder) 27 | 28 | return fullPath(for:currentPath) 29 | } 30 | 31 | private func fullPath(`for` path: String) -> String { 32 | if path.characters.count == 0 { 33 | return nameWithoutPlaceHolder 34 | } else { 35 | return "\(path)/\(nameWithoutPlaceHolder)" 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Marius Landwehr 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Sources/Blaupause/Templates/TemplateGenerator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TemplateGenerator.swift 3 | // Blaupause 4 | // 5 | // Created by Marius Landwehr on 17.04.17. 6 | // Copyright © 2017 Marius Landwehr. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class TemplateGenerator { 12 | 13 | let templates: [TemplateGenerateable] 14 | let placeHolderProvider: PlaceholderNameable 15 | 16 | init(with templates: [TemplateGenerateable], and placeHolderProvider: PlaceholderNameable) { 17 | self.templates = templates 18 | self.placeHolderProvider = placeHolderProvider 19 | } 20 | 21 | func generate() throws { 22 | 23 | try generate(with: templates) 24 | } 25 | 26 | private func generate(with templates: [TemplateGenerateable], and relativePath: RelativePath = "") throws { 27 | 28 | try templates.forEach { 29 | 30 | var template = $0 31 | template.placeHolderProvider = placeHolderProvider 32 | 33 | let returnedRelativePath = try template.generate(with: relativePath) ?? "" 34 | 35 | if let children = (template as? TemplateParantable)?.children { 36 | try generate(with: children, and: returnedRelativePath) 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Sources/Blaupause/Commands/AbstractTemplateCommand.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViperCommand.swift 3 | // Blaupause 4 | // 5 | // Created by Marius Landwehr on 17.04.17. 6 | // 7 | // 8 | 9 | import Foundation 10 | import Commandant 11 | import Result 12 | 13 | class AbstractTemplateCommand: CommandProtocol { 14 | 15 | struct Options: OptionsProtocol { 16 | let moduleName: String 17 | 18 | static func create(_ moduleName: String) -> Options { 19 | return Options(moduleName: moduleName) 20 | } 21 | 22 | static func evaluate(_ m: CommandMode) -> Result>> { 23 | return create 24 | <*> m <| Argument(usage: "Name of the new Viper Module") 25 | } 26 | } 27 | 28 | var verb: String { 29 | fatalError("Must be overwritten in subclass") 30 | } 31 | var function: String { 32 | fatalError("Must be overwritten in subclass") 33 | } 34 | var template: BuildInTemplates! { 35 | fatalError("Must be overwritten in subclass") 36 | } 37 | 38 | func run(_ options: Options) -> Result<(), CommandantError<()>> { 39 | 40 | let template = self.template.template() 41 | let placeHolderProvider = PlaceHolderProvider(placeHolderName: options.moduleName) 42 | let generator = TemplateGenerator(with: template, and: placeHolderProvider) 43 | 44 | do { 45 | try generator.generate() 46 | return .success() 47 | } catch { 48 | print(error) 49 | exit(2) 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | # Xcode 3 | # 4 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 5 | 6 | ## Build generated 7 | build/ 8 | DerivedData/ 9 | 10 | ## Various settings 11 | *.pbxuser 12 | !default.pbxuser 13 | *.mode1v3 14 | !default.mode1v3 15 | *.mode2v3 16 | !default.mode2v3 17 | *.perspectivev3 18 | !default.perspectivev3 19 | xcuserdata/ 20 | 21 | ## Other 22 | *.moved-aside 23 | *.xcuserstate 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | *.ipa 28 | *.dSYM.zip 29 | *.dSYM 30 | 31 | ## Playgrounds 32 | timeline.xctimeline 33 | playground.xcworkspace 34 | 35 | # Swift Package Manager 36 | # 37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 38 | # Packages/ 39 | .build/ 40 | 41 | # CocoaPods 42 | # 43 | # We recommend against adding the Pods directory to your .gitignore. However 44 | # you should judge for yourself, the pros and cons are mentioned at: 45 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 46 | # 47 | # Pods/ 48 | 49 | # Carthage 50 | # 51 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 52 | # Carthage/Checkouts 53 | 54 | Carthage/Build 55 | 56 | # fastlane 57 | # 58 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 59 | # screenshots whenever they are needed. 60 | # For more information about the recommended setup visit: 61 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 62 | 63 | fastlane/report.xml 64 | fastlane/Preview.html 65 | fastlane/screenshots 66 | fastlane/test_output 67 | -------------------------------------------------------------------------------- /Sources/Blaupause/Commands/TemplateCommand.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TemplateCommand.swift 3 | // Blaupause 4 | // 5 | // Created by Marius Landwehr on 17.04.17. 6 | // 7 | // 8 | 9 | import Foundation 10 | import Commandant 11 | import Result 12 | import Files 13 | 14 | struct TemplateCommand: CommandProtocol { 15 | struct Options: OptionsProtocol { 16 | let moduleName: String 17 | let templateFilePath: String 18 | 19 | static func create(_ moduleName: String) -> (_ templateFilePath: String) -> Options { 20 | return { templateFilePath in 21 | Options(moduleName: moduleName, templateFilePath: templateFilePath) 22 | } 23 | } 24 | 25 | static func evaluate(_ m: CommandMode) -> Result>> { 26 | return create 27 | <*> m <| Argument(usage: "Name of the new Module from template") 28 | <*> m <| Option(key: "template", 29 | defaultValue: ".blaupause.json", 30 | usage: "blaupause file for creating new template. Defaults to .blaupause.json in the current folder") 31 | } 32 | } 33 | 34 | var verb: String = "template" 35 | var function: String = "Creates a new Folder / File Structure from a given .json file" 36 | 37 | func run(_ options: Options) -> Result<(), CommandantError<()>> { 38 | 39 | do { 40 | let file = try Files.File(path: options.templateFilePath) 41 | let data = try file.read() 42 | 43 | let templateJSONParser = TemplateParser(with: data) 44 | let parsedTemplate = try templateJSONParser.parse() 45 | 46 | // provide the placeholder 47 | let placeHolderProvider = PlaceHolderProvider(placeHolderName: options.moduleName) 48 | let generator = TemplateGenerator(with: parsedTemplate, and: placeHolderProvider) 49 | 50 | try generator.generate() 51 | return .success() 52 | 53 | } catch { 54 | print(error) 55 | exit(2) 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Blaupause 2 | Is the missing template generator for creating VIPER, MVC, MVVM, etc. templates for your Projects. 3 | 4 | ## Installation 5 | 6 | ### Using pre build package 7 | You find the latest build in `bin/Blaupause`. Please consider that you are downlaoding this from the master branch to get the newest stable binary file from Blaupause. 8 | 9 | ### Compiling from source 10 | Blaupause is build via spm (swift package manager) if you checkout the sources just run 11 | ```shell 12 | swift build -c release 13 | ``` 14 | And you can find it in `.build/release/Blaupause` to run it from there. 15 | 16 | ## Using 17 | The usage is pretty simple just start 18 | ### Usage to create a new VIPER Module 19 | ```shell 20 | Blaupause viper FooBar 21 | ``` 22 | 23 | ### Usage to create a new MVC Module 24 | ```shell 25 | Blaupause mvc FooBar 26 | ``` 27 | 28 | ### Usage to create a new MVVM Module 29 | ```shell 30 | Blaupause mvvm FooBar 31 | ``` 32 | 33 | ### Usage to create a new structure from your template 34 | ```shell 35 | Blaupause template FooBar 36 | ``` 37 | Searchs for a .blaupause.json file in the current path of Blaupause execution. 38 | 39 | ## JSON Templates 40 | Blaupause has the ability to create your own custom templates. If you want to create your own implementation Blaupause always checks the current execution path for a `.blaupause.json` file with the current implementation for a Template. Two different types are supported `Folder` and `Files`. 41 | 42 | The JSON must always start with an array. 43 | 44 | ### Folder 45 | The Folder Type creates a Folder for you. Folder can hold children of different Folder and of Files. 46 | 47 | #### JSON Notation 48 | *Creating a Folder without Children* 49 | ```json 50 | { 51 | "type": "folder", 52 | "name": "FolderName", 53 | "children": null 54 | } 55 | ``` 56 | *Creating a Folder with Children* 57 | ```json 58 | { 59 | "type": "folder", 60 | "name": "FolderName", 61 | "children": [ 62 | { 63 | "type": "folder", 64 | "name": "FolderName", 65 | "children": null 66 | } 67 | ] 68 | } 69 | ``` 70 | 71 | ### Files 72 | The Files Type creates a File for you. A File can't hold chilrens. 73 | 74 | #### JSON Notation 75 | *Creating a File* 76 | ```json 77 | { 78 | "type": "file", 79 | "name": "FileName.fileEnding" 80 | } 81 | ``` 82 | 83 | ## ToDo 84 | - [x] Creating MVC Command 85 | - [x] Creating MVVM Command 86 | - [x] Error Handling if the Folder is already there 87 | - [x] JSON Parsing for template files 88 | - [x] Add ability to parse .blaupause.json files to create custom template that can be provided 89 | - [ ] Support for Template Files in your own .blaupause folder 90 | - [ ] Unit Testing 91 | - [ ] Create a wizard when starting without options 92 | - [ ] Publish it to Homebrew 93 | -------------------------------------------------------------------------------- /Sources/Blaupause/Templates/TemplateParser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TemplateParser.swift 3 | // Blaupause 4 | // 5 | // Created by Marius Landwehr on 09.04.17. 6 | // Copyright © 2017 Marius Landwehr. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class TemplateParser { 12 | 13 | private let data: Data 14 | 15 | init(with data: Data) { 16 | self.data = data 17 | } 18 | 19 | func parse() throws -> [TemplateGenerateable] { 20 | 21 | let parsedTemplateGeneratable = try serialize().map({ (value: Any) -> TemplateGenerateable in 22 | 23 | /// Generates the recusrive structure from the JSON File 24 | /// 25 | /// - Parameter value: must be an JSON-Dictionary 26 | /// - Returns: TemplateGeneratable content 27 | /// - Throws: TypeNotSupportedError, TypeNotADictionaryError, TypeNotSetError 28 | func parseRecursive(value: [String: Any]) throws -> TemplateGenerateable { 29 | 30 | // get name and type 31 | guard 32 | let type = value["type"] as? String, 33 | let name = value["name"] as? String else { 34 | throw TypeNotSetError() 35 | } 36 | 37 | switch type.lowercased() { 38 | 39 | case "file": // generate a file 40 | return File(name: name) 41 | 42 | case "folder": // generate a folder, can be recursive 43 | 44 | var children: [TemplateGenerateable]? = nil 45 | 46 | // when we got children we try to parse them as well 47 | if let unparsedChildren = value["children"] as? [[String: Any]] { 48 | 49 | // try to map the children recursive 50 | children = try unparsedChildren.map { 51 | try parseRecursive(value: $0) 52 | } 53 | } 54 | 55 | return Folder(name: name, children: children) 56 | 57 | default: 58 | throw TypeNotSupportedError() 59 | } 60 | } 61 | 62 | guard let dict = value as? [String : Any] else { 63 | throw TypeNotADictionaryError() 64 | } 65 | 66 | return try parseRecursive(value: dict) 67 | }) 68 | 69 | return parsedTemplateGeneratable 70 | } 71 | 72 | private func serialize() throws -> [Any] { 73 | 74 | let templateJSON = try JSONSerialization.jsonObject(with: data, options: []) 75 | 76 | guard let jsonArray = templateJSON as? [Any] else { 77 | throw TemplateIsNotArrayError() 78 | } 79 | 80 | return jsonArray 81 | } 82 | } 83 | 84 | class TemplateIsNotArrayError: Error { } 85 | class TypeNotADictionaryError: Error { } 86 | class TypeNotSetError: Error { } 87 | class TypeNotSupportedError: Error { } 88 | -------------------------------------------------------------------------------- /Sources/Blaupause/Templates/BuildInTemplates.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViperTemplate.swift 3 | // Blaupause 4 | // 5 | // Created by Marius Landwehr on 16.04.17. 6 | // Copyright © 2017 Marius Landwehr. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum BuildInTemplates { 12 | case Viper 13 | case MVC 14 | case MVVM 15 | 16 | func template() -> [TemplateGenerateable] { 17 | switch self { 18 | case .MVC: 19 | return [ 20 | Folder(name: "*", children: [ 21 | Folder(name: "Model", children: [ 22 | File(name: "*Model.swift") 23 | ]), 24 | Folder(name: "View", children: [ 25 | File(name: "*View.swift") 26 | ]), 27 | Folder(name: "Controller", children: [ 28 | File(name: "*ViewController.swift") 29 | ]) 30 | ] 31 | ) 32 | ] 33 | case .MVVM: 34 | return [ 35 | Folder(name: "*", children: [ 36 | Folder(name: "Model", children: [ 37 | File(name: "*Model.swift") 38 | ]), 39 | Folder(name: "View", children: [ 40 | File(name: "*View.swift") 41 | ]), 42 | Folder(name: "ViewModel", children: [ 43 | File(name: "*ViewModel.swift") 44 | ]), 45 | Folder(name: "Controller", children: [ 46 | File(name: "*ViewController.swift") 47 | ]) 48 | ] 49 | ) 50 | ] 51 | case .Viper: 52 | return [ 53 | Folder(name: "*", children: [ 54 | Folder(name: "Application Logic", children: [ 55 | Folder(name: "Interactor", children: [ 56 | File(name: "*Interactor.swift"), 57 | File(name: "*InteractorIO.swift") 58 | ]), 59 | Folder(name: "Manager", children: [ 60 | File(name: "*DataManager.swift") 61 | ]) 62 | ]), 63 | Folder(name: "Module Interface", children: [ 64 | File(name: "*ModuleInterface.swift") 65 | ]), 66 | Folder(name: "User Interface", children: [ 67 | Folder(name: "Presenter", children: [ 68 | File(name: "*Presenter.swift") 69 | ]), 70 | Folder(name: "View", children: [ 71 | File(name: "*ViewController.swift"), 72 | File(name: "*ViewInterface.swift") 73 | ]), 74 | Folder(name: "Wireframe", children: [ 75 | File(name: "*Wireframe.swift") 76 | ]) 77 | ]) 78 | ] 79 | ) 80 | ] 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /Blaupause.xcodeproj/xcuserdata/marius.xcuserdatad/xcschemes/Blaupause.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /Blaupause.xcodeproj/project.xcworkspace/xcshareddata/Blaupause.xcscmblueprint: -------------------------------------------------------------------------------- 1 | { 2 | "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "5EDDBFA6D441DDCE33D718BFADEE5FFEEEA3D134", 3 | "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { 4 | 5 | }, 6 | "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { 7 | "380E7A403870368C5E27D2180E11354FCFF4E6FE" : 9223372036854775807, 8 | "956D2B21DD155C49504BB67697A67F7C5351A353" : 9223372036854775807, 9 | "C861FC00CEE0F6A6BE81FCFF6785FAA78C58EBB3" : 9223372036854775807, 10 | "D23C0CEAADB77074FDA4459000068A7940EB7AD0" : 9223372036854775807, 11 | "5EDDBFA6D441DDCE33D718BFADEE5FFEEEA3D134" : 9223372036854775807 12 | }, 13 | "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "701FC4DC-4FDB-451F-A424-1D50198C2C60", 14 | "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { 15 | "380E7A403870368C5E27D2180E11354FCFF4E6FE" : "Blaupause\/.build\/checkouts\/Files.git-6739420172119258925\/", 16 | "956D2B21DD155C49504BB67697A67F7C5351A353" : "Blaupause\/.build\/checkouts\/Result.git-8684547452332391156\/", 17 | "C861FC00CEE0F6A6BE81FCFF6785FAA78C58EBB3" : "Blaupause\/.build\/checkouts\/SwiftyJSON.git-3043514560129222422\/", 18 | "D23C0CEAADB77074FDA4459000068A7940EB7AD0" : "Blaupause\/.build\/checkouts\/Commandant.git-3062511658102057207\/", 19 | "5EDDBFA6D441DDCE33D718BFADEE5FFEEEA3D134" : "Blaupause\/" 20 | }, 21 | "DVTSourceControlWorkspaceBlueprintNameKey" : "Blaupause", 22 | "DVTSourceControlWorkspaceBlueprintVersion" : 204, 23 | "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "Blaupause.xcodeproj", 24 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ 25 | { 26 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "\/Users\/marius\/Developer\/macOS\/Blaupause\/.build\/repositories\/Files.git-6739420172119258925", 27 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 28 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "380E7A403870368C5E27D2180E11354FCFF4E6FE" 29 | }, 30 | { 31 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/mRs-\/Blaupause.git", 32 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 33 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "5EDDBFA6D441DDCE33D718BFADEE5FFEEEA3D134" 34 | }, 35 | { 36 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "\/Users\/marius\/Developer\/macOS\/Blaupause\/.build\/repositories\/Result.git-8684547452332391156", 37 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 38 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "956D2B21DD155C49504BB67697A67F7C5351A353" 39 | }, 40 | { 41 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "\/Users\/marius\/Developer\/macOS\/Blaupause\/.build\/repositories\/SwiftyJSON.git-3043514560129222422", 42 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 43 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "C861FC00CEE0F6A6BE81FCFF6785FAA78C58EBB3" 44 | }, 45 | { 46 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "\/Users\/marius\/Developer\/macOS\/Blaupause\/.build\/repositories\/Commandant.git-3062511658102057207", 47 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 48 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "D23C0CEAADB77074FDA4459000068A7940EB7AD0" 49 | } 50 | ] 51 | } -------------------------------------------------------------------------------- /Blaupause.xcodeproj/xcshareddata/xcschemes/Blaupause.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 43 | 49 | 50 | 51 | 57 | 63 | 64 | 65 | 66 | 67 | 72 | 73 | 74 | 75 | 76 | 77 | 87 | 88 | 94 | 95 | 96 | 97 | 98 | 99 | 105 | 106 | 108 | 109 | 112 | 113 | 114 | -------------------------------------------------------------------------------- /Blaupause.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | OBJ_100 /* TemplateParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_22 /* TemplateParser.swift */; }; 11 | OBJ_101 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_24 /* File.swift */; }; 12 | OBJ_102 /* Folder.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_25 /* Folder.swift */; }; 13 | OBJ_103 /* TemplateProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_26 /* TemplateProtocols.swift */; }; 14 | OBJ_105 /* Files.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = OBJ_48 /* Files.framework */; }; 15 | OBJ_106 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = OBJ_49 /* Result.framework */; }; 16 | OBJ_107 /* Commandant.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = OBJ_50 /* Commandant.framework */; }; 17 | OBJ_57 /* Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_46 /* Files.swift */; }; 18 | OBJ_64 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_43 /* Result.swift */; }; 19 | OBJ_65 /* ResultProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_44 /* ResultProtocol.swift */; }; 20 | OBJ_72 /* Argument.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_31 /* Argument.swift */; }; 21 | OBJ_73 /* ArgumentParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_32 /* ArgumentParser.swift */; }; 22 | OBJ_74 /* ArgumentProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_33 /* ArgumentProtocol.swift */; }; 23 | OBJ_75 /* Command.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_34 /* Command.swift */; }; 24 | OBJ_76 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_35 /* Errors.swift */; }; 25 | OBJ_77 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_36 /* Extensions.swift */; }; 26 | OBJ_78 /* HelpCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_37 /* HelpCommand.swift */; }; 27 | OBJ_79 /* LinuxSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_38 /* LinuxSupport.swift */; }; 28 | OBJ_80 /* Option.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_39 /* Option.swift */; }; 29 | OBJ_81 /* Switch.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_40 /* Switch.swift */; }; 30 | OBJ_83 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = OBJ_49 /* Result.framework */; }; 31 | OBJ_90 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_9 /* main.swift */; }; 32 | OBJ_91 /* AbstractTemplateCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_11 /* AbstractTemplateCommand.swift */; }; 33 | OBJ_92 /* MVCCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_12 /* MVCCommand.swift */; }; 34 | OBJ_93 /* MVVMCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_13 /* MVVMCommand.swift */; }; 35 | OBJ_94 /* TemplateCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_14 /* TemplateCommand.swift */; }; 36 | OBJ_95 /* ViperCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_15 /* ViperCommand.swift */; }; 37 | OBJ_96 /* PlaceHoldable.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_17 /* PlaceHoldable.swift */; }; 38 | OBJ_97 /* PlaceHolderNameInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_18 /* PlaceHolderNameInjector.swift */; }; 39 | OBJ_98 /* BuildInTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_20 /* BuildInTemplates.swift */; }; 40 | OBJ_99 /* TemplateGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_21 /* TemplateGenerator.swift */; }; 41 | /* End PBXBuildFile section */ 42 | 43 | /* Begin PBXContainerItemProxy section */ 44 | 299EE2D81EEB3258003D5CA2 /* PBXContainerItemProxy */ = { 45 | isa = PBXContainerItemProxy; 46 | containerPortal = OBJ_1 /* Project object */; 47 | proxyType = 1; 48 | remoteGlobalIDString = OBJ_59; 49 | remoteInfo = Result; 50 | }; 51 | 299EE2D91EEB3258003D5CA2 /* PBXContainerItemProxy */ = { 52 | isa = PBXContainerItemProxy; 53 | containerPortal = OBJ_1 /* Project object */; 54 | proxyType = 1; 55 | remoteGlobalIDString = OBJ_52; 56 | remoteInfo = Files; 57 | }; 58 | 299EE2DA1EEB3258003D5CA2 /* PBXContainerItemProxy */ = { 59 | isa = PBXContainerItemProxy; 60 | containerPortal = OBJ_1 /* Project object */; 61 | proxyType = 1; 62 | remoteGlobalIDString = OBJ_59; 63 | remoteInfo = Result; 64 | }; 65 | 299EE2DB1EEB3258003D5CA2 /* PBXContainerItemProxy */ = { 66 | isa = PBXContainerItemProxy; 67 | containerPortal = OBJ_1 /* Project object */; 68 | proxyType = 1; 69 | remoteGlobalIDString = OBJ_67; 70 | remoteInfo = Commandant; 71 | }; 72 | /* End PBXContainerItemProxy section */ 73 | 74 | /* Begin PBXFileReference section */ 75 | 2971F8DA1F0976C900AA1057 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 76 | 2971F8DB1F0976CC00AA1057 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; 77 | OBJ_11 /* AbstractTemplateCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AbstractTemplateCommand.swift; sourceTree = ""; }; 78 | OBJ_12 /* MVCCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MVCCommand.swift; sourceTree = ""; }; 79 | OBJ_13 /* MVVMCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MVVMCommand.swift; sourceTree = ""; }; 80 | OBJ_14 /* TemplateCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemplateCommand.swift; sourceTree = ""; }; 81 | OBJ_15 /* ViperCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViperCommand.swift; sourceTree = ""; }; 82 | OBJ_17 /* PlaceHoldable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceHoldable.swift; sourceTree = ""; }; 83 | OBJ_18 /* PlaceHolderNameInjector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceHolderNameInjector.swift; sourceTree = ""; }; 84 | OBJ_20 /* BuildInTemplates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuildInTemplates.swift; sourceTree = ""; }; 85 | OBJ_21 /* TemplateGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemplateGenerator.swift; sourceTree = ""; }; 86 | OBJ_22 /* TemplateParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemplateParser.swift; sourceTree = ""; }; 87 | OBJ_24 /* File.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = File.swift; sourceTree = ""; }; 88 | OBJ_25 /* Folder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Folder.swift; sourceTree = ""; }; 89 | OBJ_26 /* TemplateProtocols.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemplateProtocols.swift; sourceTree = ""; }; 90 | OBJ_31 /* Argument.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Argument.swift; sourceTree = ""; }; 91 | OBJ_32 /* ArgumentParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArgumentParser.swift; sourceTree = ""; }; 92 | OBJ_33 /* ArgumentProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArgumentProtocol.swift; sourceTree = ""; }; 93 | OBJ_34 /* Command.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Command.swift; sourceTree = ""; }; 94 | OBJ_35 /* Errors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = ""; }; 95 | OBJ_36 /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; 96 | OBJ_37 /* HelpCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelpCommand.swift; sourceTree = ""; }; 97 | OBJ_38 /* LinuxSupport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinuxSupport.swift; sourceTree = ""; }; 98 | OBJ_39 /* Option.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Option.swift; sourceTree = ""; }; 99 | OBJ_40 /* Switch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Switch.swift; sourceTree = ""; }; 100 | OBJ_43 /* Result.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Result.swift; sourceTree = ""; }; 101 | OBJ_44 /* ResultProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResultProtocol.swift; sourceTree = ""; }; 102 | OBJ_46 /* Files.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Files.swift; sourceTree = ""; }; 103 | OBJ_48 /* Files.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Files.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 104 | OBJ_49 /* Result.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Result.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 105 | OBJ_50 /* Commandant.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Commandant.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 106 | OBJ_51 /* Blaupause */ = {isa = PBXFileReference; lastKnownFileType = text; path = Blaupause; sourceTree = BUILT_PRODUCTS_DIR; }; 107 | OBJ_6 /* Package.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; path = Package.swift; sourceTree = ""; }; 108 | OBJ_9 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; 109 | /* End PBXFileReference section */ 110 | 111 | /* Begin PBXFrameworksBuildPhase section */ 112 | OBJ_104 /* Frameworks */ = { 113 | isa = PBXFrameworksBuildPhase; 114 | buildActionMask = 0; 115 | files = ( 116 | OBJ_105 /* Files.framework in Frameworks */, 117 | OBJ_106 /* Result.framework in Frameworks */, 118 | OBJ_107 /* Commandant.framework in Frameworks */, 119 | ); 120 | runOnlyForDeploymentPostprocessing = 0; 121 | }; 122 | OBJ_58 /* Frameworks */ = { 123 | isa = PBXFrameworksBuildPhase; 124 | buildActionMask = 0; 125 | files = ( 126 | ); 127 | runOnlyForDeploymentPostprocessing = 0; 128 | }; 129 | OBJ_66 /* Frameworks */ = { 130 | isa = PBXFrameworksBuildPhase; 131 | buildActionMask = 0; 132 | files = ( 133 | ); 134 | runOnlyForDeploymentPostprocessing = 0; 135 | }; 136 | OBJ_82 /* Frameworks */ = { 137 | isa = PBXFrameworksBuildPhase; 138 | buildActionMask = 0; 139 | files = ( 140 | OBJ_83 /* Result.framework in Frameworks */, 141 | ); 142 | runOnlyForDeploymentPostprocessing = 0; 143 | }; 144 | /* End PBXFrameworksBuildPhase section */ 145 | 146 | /* Begin PBXGroup section */ 147 | OBJ_10 /* Commands */ = { 148 | isa = PBXGroup; 149 | children = ( 150 | OBJ_11 /* AbstractTemplateCommand.swift */, 151 | OBJ_12 /* MVCCommand.swift */, 152 | OBJ_13 /* MVVMCommand.swift */, 153 | OBJ_14 /* TemplateCommand.swift */, 154 | OBJ_15 /* ViperCommand.swift */, 155 | ); 156 | path = Commands; 157 | sourceTree = ""; 158 | }; 159 | OBJ_16 /* PlaceHolder */ = { 160 | isa = PBXGroup; 161 | children = ( 162 | OBJ_17 /* PlaceHoldable.swift */, 163 | OBJ_18 /* PlaceHolderNameInjector.swift */, 164 | ); 165 | path = PlaceHolder; 166 | sourceTree = ""; 167 | }; 168 | OBJ_19 /* Templates */ = { 169 | isa = PBXGroup; 170 | children = ( 171 | OBJ_20 /* BuildInTemplates.swift */, 172 | OBJ_21 /* TemplateGenerator.swift */, 173 | OBJ_22 /* TemplateParser.swift */, 174 | OBJ_23 /* Types */, 175 | ); 176 | path = Templates; 177 | sourceTree = ""; 178 | }; 179 | OBJ_23 /* Types */ = { 180 | isa = PBXGroup; 181 | children = ( 182 | OBJ_24 /* File.swift */, 183 | OBJ_25 /* Folder.swift */, 184 | OBJ_26 /* TemplateProtocols.swift */, 185 | ); 186 | path = Types; 187 | sourceTree = ""; 188 | }; 189 | OBJ_27 /* Tests */ = { 190 | isa = PBXGroup; 191 | children = ( 192 | ); 193 | name = Tests; 194 | sourceTree = SOURCE_ROOT; 195 | }; 196 | OBJ_28 /* Dependencies */ = { 197 | isa = PBXGroup; 198 | children = ( 199 | OBJ_29 /* Commandant 0.12.0 */, 200 | OBJ_41 /* Result 3.2.1 */, 201 | OBJ_45 /* Files 1.6.2 */, 202 | ); 203 | name = Dependencies; 204 | sourceTree = ""; 205 | }; 206 | OBJ_29 /* Commandant 0.12.0 */ = { 207 | isa = PBXGroup; 208 | children = ( 209 | OBJ_30 /* Commandant */, 210 | ); 211 | name = "Commandant 0.12.0"; 212 | sourceTree = SOURCE_ROOT; 213 | }; 214 | OBJ_30 /* Commandant */ = { 215 | isa = PBXGroup; 216 | children = ( 217 | OBJ_31 /* Argument.swift */, 218 | OBJ_32 /* ArgumentParser.swift */, 219 | OBJ_33 /* ArgumentProtocol.swift */, 220 | OBJ_34 /* Command.swift */, 221 | OBJ_35 /* Errors.swift */, 222 | OBJ_36 /* Extensions.swift */, 223 | OBJ_37 /* HelpCommand.swift */, 224 | OBJ_38 /* LinuxSupport.swift */, 225 | OBJ_39 /* Option.swift */, 226 | OBJ_40 /* Switch.swift */, 227 | ); 228 | name = Commandant; 229 | path = ".build/checkouts/Commandant.git-3062511658102057207/Sources/Commandant"; 230 | sourceTree = SOURCE_ROOT; 231 | }; 232 | OBJ_41 /* Result 3.2.1 */ = { 233 | isa = PBXGroup; 234 | children = ( 235 | OBJ_42 /* Result */, 236 | ); 237 | name = "Result 3.2.1"; 238 | sourceTree = SOURCE_ROOT; 239 | }; 240 | OBJ_42 /* Result */ = { 241 | isa = PBXGroup; 242 | children = ( 243 | OBJ_43 /* Result.swift */, 244 | OBJ_44 /* ResultProtocol.swift */, 245 | ); 246 | name = Result; 247 | path = ".build/checkouts/Result.git-8684547452332391156/Result"; 248 | sourceTree = SOURCE_ROOT; 249 | }; 250 | OBJ_45 /* Files 1.6.2 */ = { 251 | isa = PBXGroup; 252 | children = ( 253 | OBJ_46 /* Files.swift */, 254 | ); 255 | name = "Files 1.6.2"; 256 | path = ".build/checkouts/Files.git-6739420172119258925/Sources"; 257 | sourceTree = SOURCE_ROOT; 258 | }; 259 | OBJ_47 /* Products */ = { 260 | isa = PBXGroup; 261 | children = ( 262 | OBJ_48 /* Files.framework */, 263 | OBJ_49 /* Result.framework */, 264 | OBJ_50 /* Commandant.framework */, 265 | OBJ_51 /* Blaupause */, 266 | ); 267 | name = Products; 268 | sourceTree = BUILT_PRODUCTS_DIR; 269 | }; 270 | OBJ_5 = { 271 | isa = PBXGroup; 272 | children = ( 273 | 2971F8DB1F0976CC00AA1057 /* LICENSE */, 274 | 2971F8DA1F0976C900AA1057 /* README.md */, 275 | OBJ_6 /* Package.swift */, 276 | OBJ_7 /* Sources */, 277 | OBJ_27 /* Tests */, 278 | OBJ_28 /* Dependencies */, 279 | OBJ_47 /* Products */, 280 | ); 281 | sourceTree = ""; 282 | }; 283 | OBJ_7 /* Sources */ = { 284 | isa = PBXGroup; 285 | children = ( 286 | OBJ_8 /* Blaupause */, 287 | ); 288 | name = Sources; 289 | sourceTree = SOURCE_ROOT; 290 | }; 291 | OBJ_8 /* Blaupause */ = { 292 | isa = PBXGroup; 293 | children = ( 294 | OBJ_9 /* main.swift */, 295 | OBJ_10 /* Commands */, 296 | OBJ_16 /* PlaceHolder */, 297 | OBJ_19 /* Templates */, 298 | ); 299 | name = Blaupause; 300 | path = Sources/Blaupause; 301 | sourceTree = SOURCE_ROOT; 302 | }; 303 | /* End PBXGroup section */ 304 | 305 | /* Begin PBXNativeTarget section */ 306 | OBJ_52 /* Files */ = { 307 | isa = PBXNativeTarget; 308 | buildConfigurationList = OBJ_53 /* Build configuration list for PBXNativeTarget "Files" */; 309 | buildPhases = ( 310 | OBJ_56 /* Sources */, 311 | OBJ_58 /* Frameworks */, 312 | ); 313 | buildRules = ( 314 | ); 315 | dependencies = ( 316 | ); 317 | name = Files; 318 | productName = Files; 319 | productReference = OBJ_48 /* Files.framework */; 320 | productType = "com.apple.product-type.framework"; 321 | }; 322 | OBJ_59 /* Result */ = { 323 | isa = PBXNativeTarget; 324 | buildConfigurationList = OBJ_60 /* Build configuration list for PBXNativeTarget "Result" */; 325 | buildPhases = ( 326 | OBJ_63 /* Sources */, 327 | OBJ_66 /* Frameworks */, 328 | ); 329 | buildRules = ( 330 | ); 331 | dependencies = ( 332 | ); 333 | name = Result; 334 | productName = Result; 335 | productReference = OBJ_49 /* Result.framework */; 336 | productType = "com.apple.product-type.framework"; 337 | }; 338 | OBJ_67 /* Commandant */ = { 339 | isa = PBXNativeTarget; 340 | buildConfigurationList = OBJ_68 /* Build configuration list for PBXNativeTarget "Commandant" */; 341 | buildPhases = ( 342 | OBJ_71 /* Sources */, 343 | OBJ_82 /* Frameworks */, 344 | ); 345 | buildRules = ( 346 | ); 347 | dependencies = ( 348 | OBJ_84 /* PBXTargetDependency */, 349 | ); 350 | name = Commandant; 351 | productName = Commandant; 352 | productReference = OBJ_50 /* Commandant.framework */; 353 | productType = "com.apple.product-type.framework"; 354 | }; 355 | OBJ_85 /* Blaupause */ = { 356 | isa = PBXNativeTarget; 357 | buildConfigurationList = OBJ_86 /* Build configuration list for PBXNativeTarget "Blaupause" */; 358 | buildPhases = ( 359 | OBJ_89 /* Sources */, 360 | OBJ_104 /* Frameworks */, 361 | ); 362 | buildRules = ( 363 | ); 364 | dependencies = ( 365 | OBJ_108 /* PBXTargetDependency */, 366 | OBJ_109 /* PBXTargetDependency */, 367 | OBJ_110 /* PBXTargetDependency */, 368 | ); 369 | name = Blaupause; 370 | productName = Blaupause; 371 | productReference = OBJ_51 /* Blaupause */; 372 | productType = "com.apple.product-type.tool"; 373 | }; 374 | /* End PBXNativeTarget section */ 375 | 376 | /* Begin PBXProject section */ 377 | OBJ_1 /* Project object */ = { 378 | isa = PBXProject; 379 | attributes = { 380 | LastUpgradeCheck = 9999; 381 | }; 382 | buildConfigurationList = OBJ_2 /* Build configuration list for PBXProject "Blaupause" */; 383 | compatibilityVersion = "Xcode 3.2"; 384 | developmentRegion = English; 385 | hasScannedForEncodings = 0; 386 | knownRegions = ( 387 | en, 388 | ); 389 | mainGroup = OBJ_5; 390 | productRefGroup = OBJ_47 /* Products */; 391 | projectDirPath = ""; 392 | projectRoot = ""; 393 | targets = ( 394 | OBJ_52 /* Files */, 395 | OBJ_59 /* Result */, 396 | OBJ_67 /* Commandant */, 397 | OBJ_85 /* Blaupause */, 398 | ); 399 | }; 400 | /* End PBXProject section */ 401 | 402 | /* Begin PBXSourcesBuildPhase section */ 403 | OBJ_56 /* Sources */ = { 404 | isa = PBXSourcesBuildPhase; 405 | buildActionMask = 0; 406 | files = ( 407 | OBJ_57 /* Files.swift in Sources */, 408 | ); 409 | runOnlyForDeploymentPostprocessing = 0; 410 | }; 411 | OBJ_63 /* Sources */ = { 412 | isa = PBXSourcesBuildPhase; 413 | buildActionMask = 0; 414 | files = ( 415 | OBJ_64 /* Result.swift in Sources */, 416 | OBJ_65 /* ResultProtocol.swift in Sources */, 417 | ); 418 | runOnlyForDeploymentPostprocessing = 0; 419 | }; 420 | OBJ_71 /* Sources */ = { 421 | isa = PBXSourcesBuildPhase; 422 | buildActionMask = 0; 423 | files = ( 424 | OBJ_72 /* Argument.swift in Sources */, 425 | OBJ_73 /* ArgumentParser.swift in Sources */, 426 | OBJ_74 /* ArgumentProtocol.swift in Sources */, 427 | OBJ_75 /* Command.swift in Sources */, 428 | OBJ_76 /* Errors.swift in Sources */, 429 | OBJ_77 /* Extensions.swift in Sources */, 430 | OBJ_78 /* HelpCommand.swift in Sources */, 431 | OBJ_79 /* LinuxSupport.swift in Sources */, 432 | OBJ_80 /* Option.swift in Sources */, 433 | OBJ_81 /* Switch.swift in Sources */, 434 | ); 435 | runOnlyForDeploymentPostprocessing = 0; 436 | }; 437 | OBJ_89 /* Sources */ = { 438 | isa = PBXSourcesBuildPhase; 439 | buildActionMask = 0; 440 | files = ( 441 | OBJ_90 /* main.swift in Sources */, 442 | OBJ_91 /* AbstractTemplateCommand.swift in Sources */, 443 | OBJ_92 /* MVCCommand.swift in Sources */, 444 | OBJ_93 /* MVVMCommand.swift in Sources */, 445 | OBJ_94 /* TemplateCommand.swift in Sources */, 446 | OBJ_95 /* ViperCommand.swift in Sources */, 447 | OBJ_96 /* PlaceHoldable.swift in Sources */, 448 | OBJ_97 /* PlaceHolderNameInjector.swift in Sources */, 449 | OBJ_98 /* BuildInTemplates.swift in Sources */, 450 | OBJ_99 /* TemplateGenerator.swift in Sources */, 451 | OBJ_100 /* TemplateParser.swift in Sources */, 452 | OBJ_101 /* File.swift in Sources */, 453 | OBJ_102 /* Folder.swift in Sources */, 454 | OBJ_103 /* TemplateProtocols.swift in Sources */, 455 | ); 456 | runOnlyForDeploymentPostprocessing = 0; 457 | }; 458 | /* End PBXSourcesBuildPhase section */ 459 | 460 | /* Begin PBXTargetDependency section */ 461 | OBJ_108 /* PBXTargetDependency */ = { 462 | isa = PBXTargetDependency; 463 | target = OBJ_52 /* Files */; 464 | targetProxy = 299EE2D91EEB3258003D5CA2 /* PBXContainerItemProxy */; 465 | }; 466 | OBJ_109 /* PBXTargetDependency */ = { 467 | isa = PBXTargetDependency; 468 | target = OBJ_59 /* Result */; 469 | targetProxy = 299EE2DA1EEB3258003D5CA2 /* PBXContainerItemProxy */; 470 | }; 471 | OBJ_110 /* PBXTargetDependency */ = { 472 | isa = PBXTargetDependency; 473 | target = OBJ_67 /* Commandant */; 474 | targetProxy = 299EE2DB1EEB3258003D5CA2 /* PBXContainerItemProxy */; 475 | }; 476 | OBJ_84 /* PBXTargetDependency */ = { 477 | isa = PBXTargetDependency; 478 | target = OBJ_59 /* Result */; 479 | targetProxy = 299EE2D81EEB3258003D5CA2 /* PBXContainerItemProxy */; 480 | }; 481 | /* End PBXTargetDependency section */ 482 | 483 | /* Begin XCBuildConfiguration section */ 484 | OBJ_3 /* Debug */ = { 485 | isa = XCBuildConfiguration; 486 | buildSettings = { 487 | CLANG_ENABLE_OBJC_ARC = YES; 488 | COMBINE_HIDPI_IMAGES = YES; 489 | COPY_PHASE_STRIP = NO; 490 | DEBUG_INFORMATION_FORMAT = dwarf; 491 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 492 | ENABLE_NS_ASSERTIONS = YES; 493 | GCC_OPTIMIZATION_LEVEL = 0; 494 | MACOSX_DEPLOYMENT_TARGET = 10.10; 495 | ONLY_ACTIVE_ARCH = YES; 496 | OTHER_SWIFT_FLAGS = "-DXcode"; 497 | PRODUCT_NAME = "$(TARGET_NAME)"; 498 | SDKROOT = macosx; 499 | SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator appletvos appletvsimulator watchos watchsimulator"; 500 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = SWIFT_PACKAGE; 501 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 502 | SWIFT_VERSION = 3.0; 503 | USE_HEADERMAP = NO; 504 | }; 505 | name = Debug; 506 | }; 507 | OBJ_4 /* Release */ = { 508 | isa = XCBuildConfiguration; 509 | buildSettings = { 510 | CLANG_ENABLE_OBJC_ARC = YES; 511 | COMBINE_HIDPI_IMAGES = YES; 512 | COPY_PHASE_STRIP = YES; 513 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 514 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 515 | GCC_OPTIMIZATION_LEVEL = s; 516 | MACOSX_DEPLOYMENT_TARGET = 10.10; 517 | OTHER_SWIFT_FLAGS = "-DXcode"; 518 | PRODUCT_NAME = "$(TARGET_NAME)"; 519 | SDKROOT = macosx; 520 | SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator appletvos appletvsimulator watchos watchsimulator"; 521 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = SWIFT_PACKAGE; 522 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 523 | SWIFT_VERSION = 3.0; 524 | USE_HEADERMAP = NO; 525 | }; 526 | name = Release; 527 | }; 528 | OBJ_54 /* Debug */ = { 529 | isa = XCBuildConfiguration; 530 | buildSettings = { 531 | ENABLE_TESTABILITY = YES; 532 | FRAMEWORK_SEARCH_PATHS = ( 533 | "$(inherited)", 534 | "$(PLATFORM_DIR)/Developer/Library/Frameworks", 535 | ); 536 | HEADER_SEARCH_PATHS = "$(inherited)"; 537 | INFOPLIST_FILE = Blaupause.xcodeproj/Files_Info.plist; 538 | LD_RUNPATH_SEARCH_PATHS = "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx"; 539 | OTHER_LDFLAGS = "$(inherited)"; 540 | OTHER_SWIFT_FLAGS = "$(inherited)"; 541 | PRODUCT_BUNDLE_IDENTIFIER = Files; 542 | PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; 543 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 544 | SKIP_INSTALL = YES; 545 | TARGET_NAME = Files; 546 | }; 547 | name = Debug; 548 | }; 549 | OBJ_55 /* Release */ = { 550 | isa = XCBuildConfiguration; 551 | buildSettings = { 552 | ENABLE_TESTABILITY = YES; 553 | FRAMEWORK_SEARCH_PATHS = ( 554 | "$(inherited)", 555 | "$(PLATFORM_DIR)/Developer/Library/Frameworks", 556 | ); 557 | HEADER_SEARCH_PATHS = "$(inherited)"; 558 | INFOPLIST_FILE = Blaupause.xcodeproj/Files_Info.plist; 559 | LD_RUNPATH_SEARCH_PATHS = "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx"; 560 | OTHER_LDFLAGS = "$(inherited)"; 561 | OTHER_SWIFT_FLAGS = "$(inherited)"; 562 | PRODUCT_BUNDLE_IDENTIFIER = Files; 563 | PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; 564 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 565 | SKIP_INSTALL = YES; 566 | TARGET_NAME = Files; 567 | }; 568 | name = Release; 569 | }; 570 | OBJ_61 /* Debug */ = { 571 | isa = XCBuildConfiguration; 572 | buildSettings = { 573 | ENABLE_TESTABILITY = YES; 574 | FRAMEWORK_SEARCH_PATHS = ( 575 | "$(inherited)", 576 | "$(PLATFORM_DIR)/Developer/Library/Frameworks", 577 | ); 578 | HEADER_SEARCH_PATHS = "$(inherited)"; 579 | INFOPLIST_FILE = Blaupause.xcodeproj/Result_Info.plist; 580 | LD_RUNPATH_SEARCH_PATHS = "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx"; 581 | OTHER_LDFLAGS = "$(inherited)"; 582 | OTHER_SWIFT_FLAGS = "$(inherited)"; 583 | PRODUCT_BUNDLE_IDENTIFIER = Result; 584 | PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; 585 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 586 | SKIP_INSTALL = YES; 587 | TARGET_NAME = Result; 588 | }; 589 | name = Debug; 590 | }; 591 | OBJ_62 /* Release */ = { 592 | isa = XCBuildConfiguration; 593 | buildSettings = { 594 | ENABLE_TESTABILITY = YES; 595 | FRAMEWORK_SEARCH_PATHS = ( 596 | "$(inherited)", 597 | "$(PLATFORM_DIR)/Developer/Library/Frameworks", 598 | ); 599 | HEADER_SEARCH_PATHS = "$(inherited)"; 600 | INFOPLIST_FILE = Blaupause.xcodeproj/Result_Info.plist; 601 | LD_RUNPATH_SEARCH_PATHS = "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx"; 602 | OTHER_LDFLAGS = "$(inherited)"; 603 | OTHER_SWIFT_FLAGS = "$(inherited)"; 604 | PRODUCT_BUNDLE_IDENTIFIER = Result; 605 | PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; 606 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 607 | SKIP_INSTALL = YES; 608 | TARGET_NAME = Result; 609 | }; 610 | name = Release; 611 | }; 612 | OBJ_69 /* Debug */ = { 613 | isa = XCBuildConfiguration; 614 | buildSettings = { 615 | ENABLE_TESTABILITY = YES; 616 | FRAMEWORK_SEARCH_PATHS = ( 617 | "$(inherited)", 618 | "$(PLATFORM_DIR)/Developer/Library/Frameworks", 619 | ); 620 | HEADER_SEARCH_PATHS = "$(inherited)"; 621 | INFOPLIST_FILE = Blaupause.xcodeproj/Commandant_Info.plist; 622 | LD_RUNPATH_SEARCH_PATHS = "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx"; 623 | OTHER_LDFLAGS = "$(inherited)"; 624 | OTHER_SWIFT_FLAGS = "$(inherited)"; 625 | PRODUCT_BUNDLE_IDENTIFIER = Commandant; 626 | PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; 627 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 628 | SKIP_INSTALL = YES; 629 | TARGET_NAME = Commandant; 630 | }; 631 | name = Debug; 632 | }; 633 | OBJ_70 /* Release */ = { 634 | isa = XCBuildConfiguration; 635 | buildSettings = { 636 | ENABLE_TESTABILITY = YES; 637 | FRAMEWORK_SEARCH_PATHS = ( 638 | "$(inherited)", 639 | "$(PLATFORM_DIR)/Developer/Library/Frameworks", 640 | ); 641 | HEADER_SEARCH_PATHS = "$(inherited)"; 642 | INFOPLIST_FILE = Blaupause.xcodeproj/Commandant_Info.plist; 643 | LD_RUNPATH_SEARCH_PATHS = "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx"; 644 | OTHER_LDFLAGS = "$(inherited)"; 645 | OTHER_SWIFT_FLAGS = "$(inherited)"; 646 | PRODUCT_BUNDLE_IDENTIFIER = Commandant; 647 | PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; 648 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 649 | SKIP_INSTALL = YES; 650 | TARGET_NAME = Commandant; 651 | }; 652 | name = Release; 653 | }; 654 | OBJ_87 /* Debug */ = { 655 | isa = XCBuildConfiguration; 656 | buildSettings = { 657 | FRAMEWORK_SEARCH_PATHS = ( 658 | "$(inherited)", 659 | "$(PLATFORM_DIR)/Developer/Library/Frameworks", 660 | ); 661 | HEADER_SEARCH_PATHS = "$(inherited)"; 662 | INFOPLIST_FILE = Blaupause.xcodeproj/Blaupause_Info.plist; 663 | LD_RUNPATH_SEARCH_PATHS = "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx @executable_path"; 664 | OTHER_LDFLAGS = "$(inherited)"; 665 | OTHER_SWIFT_FLAGS = "$(inherited)"; 666 | SWIFT_FORCE_DYNAMIC_LINK_STDLIB = YES; 667 | SWIFT_FORCE_STATIC_LINK_STDLIB = NO; 668 | TARGET_NAME = Blaupause; 669 | }; 670 | name = Debug; 671 | }; 672 | OBJ_88 /* Release */ = { 673 | isa = XCBuildConfiguration; 674 | buildSettings = { 675 | FRAMEWORK_SEARCH_PATHS = ( 676 | "$(inherited)", 677 | "$(PLATFORM_DIR)/Developer/Library/Frameworks", 678 | ); 679 | HEADER_SEARCH_PATHS = "$(inherited)"; 680 | INFOPLIST_FILE = Blaupause.xcodeproj/Blaupause_Info.plist; 681 | LD_RUNPATH_SEARCH_PATHS = "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx @executable_path"; 682 | OTHER_LDFLAGS = "$(inherited)"; 683 | OTHER_SWIFT_FLAGS = "$(inherited)"; 684 | SWIFT_FORCE_DYNAMIC_LINK_STDLIB = YES; 685 | SWIFT_FORCE_STATIC_LINK_STDLIB = NO; 686 | TARGET_NAME = Blaupause; 687 | }; 688 | name = Release; 689 | }; 690 | /* End XCBuildConfiguration section */ 691 | 692 | /* Begin XCConfigurationList section */ 693 | OBJ_2 /* Build configuration list for PBXProject "Blaupause" */ = { 694 | isa = XCConfigurationList; 695 | buildConfigurations = ( 696 | OBJ_3 /* Debug */, 697 | OBJ_4 /* Release */, 698 | ); 699 | defaultConfigurationIsVisible = 0; 700 | defaultConfigurationName = Debug; 701 | }; 702 | OBJ_53 /* Build configuration list for PBXNativeTarget "Files" */ = { 703 | isa = XCConfigurationList; 704 | buildConfigurations = ( 705 | OBJ_54 /* Debug */, 706 | OBJ_55 /* Release */, 707 | ); 708 | defaultConfigurationIsVisible = 0; 709 | defaultConfigurationName = Debug; 710 | }; 711 | OBJ_60 /* Build configuration list for PBXNativeTarget "Result" */ = { 712 | isa = XCConfigurationList; 713 | buildConfigurations = ( 714 | OBJ_61 /* Debug */, 715 | OBJ_62 /* Release */, 716 | ); 717 | defaultConfigurationIsVisible = 0; 718 | defaultConfigurationName = Debug; 719 | }; 720 | OBJ_68 /* Build configuration list for PBXNativeTarget "Commandant" */ = { 721 | isa = XCConfigurationList; 722 | buildConfigurations = ( 723 | OBJ_69 /* Debug */, 724 | OBJ_70 /* Release */, 725 | ); 726 | defaultConfigurationIsVisible = 0; 727 | defaultConfigurationName = Debug; 728 | }; 729 | OBJ_86 /* Build configuration list for PBXNativeTarget "Blaupause" */ = { 730 | isa = XCConfigurationList; 731 | buildConfigurations = ( 732 | OBJ_87 /* Debug */, 733 | OBJ_88 /* Release */, 734 | ); 735 | defaultConfigurationIsVisible = 0; 736 | defaultConfigurationName = Debug; 737 | }; 738 | /* End XCConfigurationList section */ 739 | }; 740 | rootObject = OBJ_1 /* Project object */; 741 | } 742 | --------------------------------------------------------------------------------