├── 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 |
--------------------------------------------------------------------------------