diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..e12be53 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "Nimble"] + path = Nimble + url = https://github.com/Quick/Nimble.git +[submodule "Quick"] + path = Quick + url = https://github.com/Quick/Quick.git diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..b482f8a --- /dev/null +++ b/.travis.yml @@ -0,0 +1,12 @@ +sudo: false +language: objective-c +osx_image: xcode7.1 + +install: +- gem install xcpretty --no-rdoc --no-ri --no-document --quiet + +script: +- xctool -project Swiftline.xcodeproj -scheme Swiftline build test -sdk macosx GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES + +after_success: +- bash <(curl -s https://codecov.io/bash) diff --git a/Nimble b/Nimble new file mode 160000 index 0000000..13d4a2b --- /dev/null +++ b/Nimble @@ -0,0 +1 @@ +Subproject commit 13d4a2bca41d41e53b1c9681bc2039e5f5bca5fe diff --git a/Podfile b/Podfile deleted file mode 100644 index 97046ca..0000000 --- a/Podfile +++ /dev/null @@ -1,13 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '8.0' -# Uncomment this line if you're using Swift -use_frameworks! - -target 'swiftline' do - -end - -target 'tests' do - pod 'Quick', '~> 0.8.0' - pod 'Nimble', '~> 3.0.0' -end diff --git a/Podfile.lock b/Podfile.lock deleted file mode 100644 index 3f15e30..0000000 --- a/Podfile.lock +++ /dev/null @@ -1,13 +0,0 @@ -PODS: - - Nimble (3.0.0) - - Quick (0.8.0) - -DEPENDENCIES: - - Nimble (~> 3.0.0) - - Quick (~> 0.8.0) - -SPEC CHECKSUMS: - Nimble: 4c353d43735b38b545cbb4cb91504588eb5de926 - Quick: 563d0f6ec5f72e394645adb377708639b7dd38ab - -COCOAPODS: 0.39.0 diff --git a/Quick b/Quick new file mode 160000 index 0000000..a98f8e3 --- /dev/null +++ b/Quick @@ -0,0 +1 @@ +Subproject commit a98f8e37867462c8f00fea1a7b255d12f5a4b611 diff --git a/Readme.md b/Readme.md index 2b18715..3fd8bfa 100644 --- a/Readme.md +++ b/Readme.md @@ -1,10 +1,235 @@ # Swiftline -Easier to do command line with swift -## 🏃 +[![Build Status](https://travis-ci.org/oarrabi/swiftline.svg?branch=master)](https://travis-ci.org/oarrabi/swiftline) -## Ask, Choose, Agree +Swiftline is a set of tools to help you create command line applications. Swiftline is inspired by [highline](https://github.com/JEG2/highline) + +--- + +Swiftline can be divided to three main parts: + +- Colorize; Helps adding colors to strings written to the terminal +- Ask, Choose and agree; Easily create prompt for asking the user more info +- Runner; A quick way to run an external command and read its standard output and standard error. + +## Installation + + +## Usage ## Colorize +Colorize helps styling the strings before printing them to the terminal. You can change the text color, the text background and the text style. +Colorize works by extending `String` struct to add styling to it. + +To change the text color, use either `string.f` or `string.foreground`: + +```swift + print("Red String".f.Red) + print("Blue String".foreground.Blue) +``` + +To change the text background color, use either `string.b` or `string.background`: + +```swift + print("I have a white background".b.White) + print("My background color is green".background.Green) +``` + +To change the text background color, use either `string.s` or `string.style`: + +```swift + print("I am a bold string".s.Bold) + print("I have an underline".style.Underline) +``` + +You can compose foreground, background, and style: +```swift + print("I am an underlined red on white string".s.Underline.f.Red.b.White) +``` + +## Ask, Choose, Agree +Ask, Choose and Agree are used to prompt the user for more information. + +### Ask +Ask presents the user with a prompt and waits for the user input. +```swift + let userName = ask("Enter user name?") +``` +`userName` will contain the name entered by the user + +Ask can be used to ask for value of Int, Double or Float types, to ask for an integer for example: + +```swift + let age = ask("How old are you?", type: Int.self) +``` +If the user prints something thats not convertible to integer, a new prompt is displayed to him, this prompt will keep displaying until the user enters an Int: + + How old are you? + None + You must enter a valid Integer. + ? Error + You must enter a valid Integer. + ? 5 + 5 + +Validations are added by calling `addInvalidCase` on `AskSettings`. + +```swift + let name = ask("Who are you?") { settings in + settings.addInvalidCase("Snuffles is not allowed") { value in + value.containsString("Snuffles") + } + } +``` +If the user entered `Snuffles` ask will keep displaying the invalid message passed to `addInvalidCase` + + Who are you? + Snuffles + Snuffles is not allowed + ? Snuffles + Snuffles is not allowed + ? Snowball + + Your name is Snowball + +`AskSettings.confirm` will ask the user to confirm his choice after entering it + +```swift + let name = ask("Who are you?") { settings in + settings.confirm = true + } +``` + +The above will output: + + Who are you? + Snuffles + Are you sure? YES + + Your name is Snuffles +### Choose +Choose is used to prompt the user to select an item between several possible items. + +To display a choice of programming lanaugage for example: +```swift + let choice = choose("Whats your favorite programming language? ", + choices: "Swift", "Objective C", "Ruby", "Python", "Java :S") +``` + +This will print: + + 1. Swift + 2. Objective C + 3. Ruby + 4. Python + 5. Java :S + Whats your favorite programming language? + +The user can either choose the numbers (1..5) or the item itself. If the user enters a wrong input. A prompt will keep showing until the user makes a correct choice + + Whats your favorite programming language? JavaScript + You must choose one of [1, 2, 3, 4, 5, Swift, Objective C, Ruby, Python, Java :S]. + ? BBB + You must choose one of [1, 2, 3, 4, 5, Swift, Objective C, Ruby, Python, Java :S]. + ? Swift + + You selected Swift, good choice! + +You can customize the return value for each choice element. For example if you want to get an Int from the choice, you would do this + +```swift + let choice = choose("Whats your favorite programming language? ", type: Int.self) { settings in + settings.addChoice("Swift") { 42 } + settings.addChoice("Objective C") { 20 } + } +``` + +The number on the left can be changed to letters, here is how you could do that: + +```siwft + let choice = choose("Whats your favorite programming language? ", type: String.self) { settings in + //choice value will be set to GOOD + settings.addChoice("Swift") { "GOOD" } + + //choice value will be set to BAD + settings.addChoice("Java") { "BAD" } + + settings.index = .Letters + settings.indexSuffix = " ----> " + } +``` + +That will print: + + a ----> Swift + b ----> Java + Whats your favorite programming language? + +### Agree +Agree is used to ask a user for a Yes/No question. It returns a boolean representing the user input. + +```swift + let choice = agree("Are you sure you want to `rm -rf /` ?") +``` + +If the user enters any invalid input, agree will keep prompting him for a Yes/No question + + Are you sure you want to `rm -rf /` ? What! + Please enter "yes" or "no". + Are you sure you want to `rm -rf /` ? Wait + Please enter "yes" or "no". + Are you sure you want to `rm -rf /` ? No + + You entered false + +## Runner +Runner provides a quick, concise way to run an external command and read its standard output and standard error. + +To execute a simple command you would do: + +```swift + let result = run("ls -all") + print(result.stdout) +``` +`result` type is `RunResults`, it contains: + +- `exitStatus`: The command exit status +- `stdout`: The standard output for the command executed +- `stderr`: The standard error for the command executed + +While `run("command")` can split the arguments by spaces. Some times argument splitting is not trivial. If you have multiple argument to pass to the command to execute, you should use `run(command: String, args: String...)`. The above translates to: + +```swift + let result = run("ls", args: "-all") +``` + +To costumize the run function, you can pass in a customization block: + +```swift + let result = run("ls -all") { settings in + settings.dryRun = true + settings.echo = [.Stdout, .Stderr, .Command] + settings.interactive = false + } +``` + +`settings` is an instance of RunSettings, which contains the following variables: + +- `settings.dryRun`: defaults to false. If false, the command is actually run. If true, the command is logged to the stdout paramter of result +- `settings.echo`: Customize the message printed to stdout, `echo` can contain any of the following: + - `EchoSettings.Stdout`: The stdout returned from running the command will be printed to the terminal + - `EchoSettings.Stderr`: The stderr returned from running the command will be printed to the terminal + - `EchoSettings.Command`: The command executed will be printed to the terminal +- `settings.interactive`: defaults to false. If set to true the command will be executed using `system` kernel function and only the exit status will be captured. If set to false, the command will be executed using `NSTask` and both stdout and stderr will be captured. +Set `interactive` to true if you expect the launched command to ask input from the user through the stdin. + +`runWithoutCapture("command")` is a quick way to run a command in interactive mode. The return value is the exit code of that command. + +### Improvement +- Better documentation +- Add gather (from [highline](https://github.com/JEG2/highline)) to ask function +- Figure out a way to eliminate the need of `interactive` ## Tests +Tests can be found [here](). They can be normally run from the Xcode +. diff --git a/Sample app/main.swift b/Sample app/main.swift deleted file mode 100644 index a667f8d..0000000 --- a/Sample app/main.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// main.swift -// swiftline -// -// Created by Omar Abdelhafith on 10/11/2015. -// Copyright © 2015 Omar Abdelhafith. All rights reserved. -// - -import Foundation - - -let choice = choose("Choose the best programming language? ", choices: "Swift", "Objective", "Ruby", "Python", "Java :S") -print("\nYou choosed " + choice.f.Green) \ No newline at end of file diff --git a/SwiftLine/Choose/Choose.swift b/SwiftLine/Choose/Choose.swift deleted file mode 100644 index 7fe5d3d..0000000 --- a/SwiftLine/Choose/Choose.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// Chooser.swift -// Choose -// -// Created by Omar Abdelhafith on 03/11/2015. -// Copyright © 2015 Omar Abdelhafith. All rights reserved. -// - - -import Foundation - -func choose(prompt: String, choices: String...) -> String { - return choose(prompt, type: String.self) { - for choice in choices { - $0.addChoice(choice) { return choice } - } - } -} - -func choose(callback: (ChooseSettings -> Void)) -> T { - - let settings = getChooseSettings(callback) - return choose(settings, type: T.self) -} - -func choose(prompt: String, type: T.Type, callback: (ChooseSettings -> Void)) -> T { - - let settings = getChooseSettings(callback) - settings.promptQuestion = prompt - return choose(settings, type: type) -} - -func choose(type: T.Type, callback: (ChooseSettings -> Void)) -> T { - - let settings = getChooseSettings(callback) - return choose(settings, type: type) -} - -func choose(settings: ChooseSettings, type: T.Type) -> T { - - let items = settings.preparePromptItems() - - items.forEach { PromptSettings.print($0) } - PromptSettings.print("\(settings.promptQuestion)", terminator: "") - - let stringRead = readStringOrEmpty() - - return askForValidatedItem(originalValue: stringRead, validator: settings) -} - -func getChooseSettings(callback: ChooseSettings -> Void) -> ChooseSettings { - let settings = ChooseSettings() - callback(settings) - return settings -} \ No newline at end of file diff --git a/SwiftLine/Info.plist b/SwiftLine/Info.plist new file mode 100644 index 0000000..685806b --- /dev/null +++ b/SwiftLine/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSHumanReadableCopyright + Copyright © 2015 Omar Abdelhafith. All rights reserved. + NSPrincipalClass + + + diff --git a/SwiftLine/Misc/ArgConvertible.swift b/SwiftLine/Misc/ArgConvertible.swift deleted file mode 100644 index 12b4423..0000000 --- a/SwiftLine/Misc/ArgConvertible.swift +++ /dev/null @@ -1,48 +0,0 @@ -// -// ArgConvertible.swift -// ArgConvertible -// -// Created by Omar Abdelhafith on 02/11/2015. -// Copyright © 2015 Omar Abdelhafith. All rights reserved. -// - -import Foundation - - -protocol ArgConvertibleType { - static func fromString(string: String) -> Self? - static func typeName() -> String -} - - -extension Int: ArgConvertibleType { - static func fromString(string: String) -> Int? { - return Int(string) - } - - static func typeName() -> String { - return "Integer" - } -} - - -extension Double: ArgConvertibleType { - static func fromString(string: String) -> Double? { - return Double(string) - } - - static func typeName() -> String { - return "Double" - } -} - - -extension String: ArgConvertibleType { - static func fromString(string: String) -> String? { - return string - } - - static func typeName() -> String { - return "String" - } -} diff --git a/SwiftLine/Runner/RunnerSettings.swift b/SwiftLine/Runner/RunnerSettings.swift deleted file mode 100644 index 45c88a1..0000000 --- a/SwiftLine/Runner/RunnerSettings.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// RunSettings.swift -// RunSettings -// -// Created by Omar Abdelhafith on 05/11/2015. -// Copyright © 2015 Omar Abdelhafith. All rights reserved. -// - -import Foundation - - -class RunSettings { - var dryRun = false - var echo = EchoSettings.None - var interactive = false -} - -struct EchoSettings: OptionSetType { - let rawValue: Int - - static var None = EchoSettings(rawValue: 0) - static let Stdout = EchoSettings(rawValue: 1 << 0) - static let Stderr = EchoSettings(rawValue: 1 << 1) - static let Command = EchoSettings(rawValue: 1 << 2) -} \ No newline at end of file diff --git a/SwiftLine/Runner/ShortHandRunner.swift b/SwiftLine/Runner/ShortHandRunner.swift deleted file mode 100644 index 8cefd7d..0000000 --- a/SwiftLine/Runner/ShortHandRunner.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// ShortHandRunner.swift -// ShortHandRunner - -// -// Created by Omar Abdelhafith on 05/11/2015. -// Copyright © 2015 Omar Abdelhafith. All rights reserved. -// - -import Foundation - -func runWithoutCapture(command: String) -> Int { - return 🏃.runWithoutCapture(command) -} - -func run(command: String, args: String...) -> RunResults { - return 🏃.run(command, args: args as [String]) -} - -func run(command: String, args: [String]) -> RunResults { - return 🏃.run(command, args: args as [String]) -} - -func run(command: String, settings: (RunSettings -> Void)) -> RunResults { - return 🏃.run(command, settings: settings) -} - -func run(command: String, args: [String], settings: (RunSettings -> Void)) -> RunResults { - return 🏃.run(command, args: args, settings: settings) -} - -func run(command: String, echo: EchoSettings) -> RunResults { - return 🏃.run(command, echo: echo) -} \ No newline at end of file diff --git a/SwiftLine/Swiftline.h b/SwiftLine/Swiftline.h new file mode 100644 index 0000000..0413902 --- /dev/null +++ b/SwiftLine/Swiftline.h @@ -0,0 +1,19 @@ +// +// Swiftline.h +// Swiftline +// +// Created by Omar Abdelhafith on 11/11/2015. +// Copyright © 2015 Omar Abdelhafith. All rights reserved. +// + +#import + +//! Project version number for Swiftline. +FOUNDATION_EXPORT double SwiftlineVersionNumber; + +//! Project version string for Swiftline. +FOUNDATION_EXPORT const unsigned char SwiftlineVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/SwiftLine/Agree/Agree.swift b/SwiftLine/Swiftline/Agree/Agree.swift similarity index 72% rename from SwiftLine/Agree/Agree.swift rename to SwiftLine/Swiftline/Agree/Agree.swift index 39f98cc..de2a9f4 100644 --- a/SwiftLine/Agree/Agree.swift +++ b/SwiftLine/Swiftline/Agree/Agree.swift @@ -8,7 +8,13 @@ import Foundation -func agree(prompt: String) -> Bool { +/** + Displays a yes/no prompt to the user + + - parameter prompt: The prompt to display + - returns: the user decision + */ +public func agree(prompt: String) -> Bool { PromptSettings.print(prompt, terminator: " ") let value = readStringOrEmpty() diff --git a/SwiftLine/Agree/AgreeSettings.swift b/SwiftLine/Swiftline/Agree/AgreeSettings.swift similarity index 100% rename from SwiftLine/Agree/AgreeSettings.swift rename to SwiftLine/Swiftline/Agree/AgreeSettings.swift diff --git a/SwiftLine/Ask/Ask.swift b/SwiftLine/Swiftline/Ask/Ask.swift similarity index 55% rename from SwiftLine/Ask/Ask.swift rename to SwiftLine/Swiftline/Ask/Ask.swift index 7077b06..62379c5 100644 --- a/SwiftLine/Ask/Ask.swift +++ b/SwiftLine/Swiftline/Ask/Ask.swift @@ -9,16 +9,34 @@ import Foundation -func ask(prompt: String, callback: (AskSettings -> Void)? = nil) -> String { - return ask(prompt, type: String.self, callback: callback) +/** + Display a promt to the user + + - parameter prompt: The message to display + - parameter customizationBlock: The block to costumize the prompt before displaying + + - returns: The string enters from the user + */ +public func ask(prompt: String, customizationBlock: (AskSettings -> Void)? = nil) -> String { + return ask(prompt, type: String.self, customizationBlock: customizationBlock) } -func ask(prompt: String, type: T.Type, callback: (AskSettings -> Void)? = nil) -> T { + +/** + Display a promt to the user + + - parameter prompt:The message to display + - parameter type: The value type to be expected from the user + - parameter customizationBlock: The block to costumize the prompt before displaying + + - returns: The string casted to the type requested + - discussion: If the user enters a wrong type, ask will keep prompting until a correct value has been entered + */ +public func ask(prompt: String, type: T.Type, customizationBlock: (AskSettings -> Void)? = nil) -> T { PromptSettings.print(prompt) - - let settings = getSettings(callback) + let settings = getSettings(customizationBlock) if settings.confirm { return getValidatedStringWithConfirmation(settings) @@ -27,11 +45,16 @@ func ask(prompt: String, type: T.Type, callback: (AskSett } } + +// MARK:- Internal functions + + func getValidatedString(validator: W) -> T { let stringOrEmpty = readStringOrEmpty() return askForValidatedItem(originalValue: stringOrEmpty, validator: validator) } + func getValidatedStringWithConfirmation(validator: W) -> T { while true { @@ -46,12 +69,14 @@ func getValidatedStringWithConfirmation(callback: (AskSettings -> Void)?) -> AskSettings { let settings = AskSettings() callback?(settings) return settings } + func readStringOrEmpty() -> String { return PromptSettings.read() ?? "" } diff --git a/SwiftLine/Ask/AskSettings.swift b/SwiftLine/Swiftline/Ask/AskSettings.swift similarity index 65% rename from SwiftLine/Ask/AskSettings.swift rename to SwiftLine/Swiftline/Ask/AskSettings.swift index fa4c5d4..c657f28 100644 --- a/SwiftLine/Ask/AskSettings.swift +++ b/SwiftLine/Swiftline/Ask/AskSettings.swift @@ -9,13 +9,27 @@ import Foundation -class AskSettings { - var defaultValue: T? +/// Settings used to costumize the behaviour of ask() +public class AskSettings { + + /// Default value to set incase the user entered a blank + public var defaultValue: T? + + /// If set to true, another message will follow successful user entry asking the user to confirm + /// his selection + public var confirm = false var invalidClousures: [(T -> Bool, String)] = [] - var confirm = false - func addInvalidCase(description: String, invalidIfTrue: (T -> Bool)) { + + /** + Add an invalid entry case + + - parameter description: The string to be printed to the stdout if the case is invalid + - parameter invalidIfTrue: If true is returned, then the user input was invalid, if false, the + user input was valid. + */ + public func addInvalidCase(description: String, invalidIfTrue: (T -> Bool)) { invalidClousures.append(invalidIfTrue, description) } @@ -28,7 +42,11 @@ class AskSettings { } } + +// MARK:- Internal extension + extension AskSettings: AskerValidator { + func invalidItemMessage(string: String?) -> String? { guard let string = string else { return "You provided an empty message, pelase enter anything!" diff --git a/SwiftLine/Ask/AskerValidator.swift b/SwiftLine/Swiftline/Ask/AskerValidator.swift similarity index 100% rename from SwiftLine/Ask/AskerValidator.swift rename to SwiftLine/Swiftline/Ask/AskerValidator.swift diff --git a/SwiftLine/Swiftline/Choose/Choose.swift b/SwiftLine/Swiftline/Choose/Choose.swift new file mode 100644 index 0000000..5ec3e42 --- /dev/null +++ b/SwiftLine/Swiftline/Choose/Choose.swift @@ -0,0 +1,95 @@ +// +// Chooser.swift +// Choose +// +// Created by Omar Abdelhafith on 03/11/2015. +// Copyright © 2015 Omar Abdelhafith. All rights reserved. +// + + +import Foundation + + +/** + Presents a user with a menu of items to choose from + + - parameter prompt: The menu prompt message + - parameter choices: List of choices + + - returns: The user selected item + */ +public func choose(prompt: String, choices: String...) -> String { + return choose(prompt, type: String.self) { + for choice in choices { + $0.addChoice(choice) { return choice } + } + } +} + + +/** + Presents a user with a menu of items to choose from + + - parameter costumizationBlock: Closure to be called with a ChooseSettings, changes to the settings are reflected to the prompt + + - returns: The user selected item + */ +public func choose(costumizationBlock: (ChooseSettings -> Void)) -> T { + + let settings = getChooseSettings(costumizationBlock) + return choose(settings, type: T.self) +} + + +/** + Presents a user with a menu of items to choose from + + - parameter prompt: The menu prompt message + - parameter type: The value type to be expected from the user + - parameter costumizationBlock: Closure to be called with a ChooseSettings, changes to the settings are reflected to the prompt + + - returns: The user selected item + */ +public func choose(prompt: String, type: T.Type, costumizationBlock: (ChooseSettings -> Void)) -> T { + + let settings = getChooseSettings(costumizationBlock) + settings.promptQuestion = prompt + return choose(settings, type: type) +} + + +/** + Presents a user with a menu of items to choose from + + - parameter type: The value type to be expected from the user + - parameter costumizationBlock: Closure to be called with a ChooseSettings, changes to the settings are reflected to the prompt + + - returns: The user selected item + */ +public func choose(type: T.Type, costumizationBlock: (ChooseSettings -> Void)) -> T { + + let settings = getChooseSettings(costumizationBlock) + return choose(settings, type: type) +} + + +// MARK :- Internal functions + + +func choose(settings: ChooseSettings, type: T.Type) -> T { + + let items = settings.preparePromptItems() + + items.forEach { PromptSettings.print($0) } + PromptSettings.print("\(settings.promptQuestion)", terminator: "") + + let stringRead = readStringOrEmpty() + + return askForValidatedItem(originalValue: stringRead, validator: settings) +} + +func getChooseSettings(costumizationBlock: ChooseSettings -> Void) -> ChooseSettings { + let settings = ChooseSettings() + costumizationBlock(settings) + return settings +} \ No newline at end of file diff --git a/SwiftLine/Choose/ChooseSettings.swift b/SwiftLine/Swiftline/Choose/ChooseSettings.swift similarity index 74% rename from SwiftLine/Choose/ChooseSettings.swift rename to SwiftLine/Swiftline/Choose/ChooseSettings.swift index 1a5a0f3..e64b1fb 100644 --- a/SwiftLine/Choose/ChooseSettings.swift +++ b/SwiftLine/Swiftline/Choose/ChooseSettings.swift @@ -9,26 +9,48 @@ import Foundation -enum ChoiceIndexType { +/** + Choice index type + + - Letters: Use letters as choice index (a. b. c.) + - Numbers: Use numbers as choice index (1. 2. 3.) + */ +public enum ChoiceIndexType { case Letters case Numbers } -class ChooseSettings { + + +/// Settings to costumize the behavior of choose +public class ChooseSettings { typealias Item = T var choices: [(choice: String, callback: Void -> T)] = [] - var promptQuestion = "" - var index = ChoiceIndexType.Numbers - var indexSuffix = ". " + /// Prompt message to use + public var promptQuestion = "" - func addChoice(choice: String..., callback: Void -> T) { + /// Choice index used for choose items + public var index = ChoiceIndexType.Numbers + + /// Index suffix used between the index and the item + public var indexSuffix = ". " + + /** + Add a new item to the list of choices + + - parameter choice: Item name + - parameter callback: callback called when the item is selected, the value returned from this call back will be returned from choose + */ + public func addChoice(choice: String..., callback: Void -> T) { choice.forEach { choices.append(($0, callback)) } } + // MARK:- Internal + func validChoices() -> [String] { let validChoices = Array(1...choices.count).map { "\($0)" } return validChoices + stringChoices() @@ -84,6 +106,8 @@ class ChooseSettings { } +// MARK:- Internal Class + extension ChooseSettings: AskerValidator { func validatedItem(forString string: String) -> T { return choiceForInput(string)! diff --git a/SwiftLine/Colorize/Colorizer.swift b/SwiftLine/Swiftline/Colorize/Colorizer.swift similarity index 57% rename from SwiftLine/Colorize/Colorizer.swift rename to SwiftLine/Swiftline/Colorize/Colorizer.swift index fa71368..e945c27 100644 --- a/SwiftLine/Colorize/Colorizer.swift +++ b/SwiftLine/Swiftline/Colorize/Colorizer.swift @@ -9,6 +9,43 @@ import Foundation + +extension String { + + /// Access the methods to change the foreground color + public var f: StringForegroundColorizer { + get { return foreground } + } + + /// Access the methods to change the foreground color + public var foreground: StringForegroundColorizer { + get { return StringForegroundColorizer(string: self) } + } + + /// Access the methods to change the background color + public var b: StringBackgroundColorizer { + get { return background } + } + + /// Access the methods to change the background color + public var background: StringBackgroundColorizer { + get { return StringBackgroundColorizer(string: self) } + } + + /// Access the methods to change the text style + public var s: StringStyleColorizer { + get { return style } + } + + /// Access the methods to change the text style + public var style: StringStyleColorizer { + get { return StringStyleColorizer(string: self) } + } + +} + + // MARK- Internal + class Colorizer: CustomStringConvertible { let color: StringStyle @@ -26,33 +63,4 @@ class Colorizer: CustomStringConvertible { } } -} - - -extension String { - - var f: StringForegroundColorizer { - get { return foreground } - } - - var foreground: StringForegroundColorizer { - get { return StringForegroundColorizer(string: self) } - } - - var b: StringBackgroundColorizer { - get { return background } - } - - var background: StringBackgroundColorizer { - get { return StringBackgroundColorizer(string: self) } - } - - var s: StringStyleColorizer { - get { return style } - } - - var style: StringStyleColorizer { - get { return StringStyleColorizer(string: self) } - } - -} +} \ No newline at end of file diff --git a/SwiftLine/Colorize/StringBackgroundColorizer.swift b/SwiftLine/Swiftline/Colorize/StringBackgroundColorizer.swift similarity index 81% rename from SwiftLine/Colorize/StringBackgroundColorizer.swift rename to SwiftLine/Swiftline/Colorize/StringBackgroundColorizer.swift index 3a941be..902b900 100644 --- a/SwiftLine/Colorize/StringBackgroundColorizer.swift +++ b/SwiftLine/Swiftline/Colorize/StringBackgroundColorizer.swift @@ -11,53 +11,53 @@ import Foundation extension String { - struct StringBackgroundColorizer { + public struct StringBackgroundColorizer { let string: String - var Black: String { + public var Black: String { get { return Colorizer(string: string, color: BackgroundColor.Black).description } } - var Red: String { + public var Red: String { get { return Colorizer(string: string, color: BackgroundColor.Red).description } } - var Green: String { + public var Green: String { get { return Colorizer(string: string, color: BackgroundColor.Green).description } } - var Yellow: String { + public var Yellow: String { get { return Colorizer(string: string, color: BackgroundColor.Yellow).description } } - var Blue: String { + public var Blue: String { get { return Colorizer(string: string, color: BackgroundColor.Blue).description } } - var Magenta: String { + public var Magenta: String { get { return Colorizer(string: string, color: BackgroundColor.Magenta).description } } - var Cyan: String { + public var Cyan: String { get { return Colorizer(string: string, color: BackgroundColor.Cyan).description } } - var White: String { + public var White: String { get { return Colorizer(string: string, color: BackgroundColor.White).description } diff --git a/SwiftLine/Colorize/StringForegroundColorizer.swift b/SwiftLine/Swiftline/Colorize/StringForegroundColorizer.swift similarity index 81% rename from SwiftLine/Colorize/StringForegroundColorizer.swift rename to SwiftLine/Swiftline/Colorize/StringForegroundColorizer.swift index ab6c438..3619f89 100644 --- a/SwiftLine/Colorize/StringForegroundColorizer.swift +++ b/SwiftLine/Swiftline/Colorize/StringForegroundColorizer.swift @@ -11,53 +11,53 @@ import Foundation extension String { - struct StringForegroundColorizer { + public struct StringForegroundColorizer { let string: String - var Black: String { + public var Black: String { get { return Colorizer(string: string, color: ForegroundColor.Black).description } } - var Red: String { + public var Red: String { get { return Colorizer(string: string, color: ForegroundColor.Red).description } } - var Green: String { + public var Green: String { get { return Colorizer(string: string, color: ForegroundColor.Green).description } } - var Yellow: String { + public var Yellow: String { get { return Colorizer(string: string, color: ForegroundColor.Yellow).description } } - var Blue: String { + public var Blue: String { get { return Colorizer(string: string, color: ForegroundColor.Blue).description } } - var Magenta: String { + public var Magenta: String { get { return Colorizer(string: string, color: ForegroundColor.Magenta).description } } - var Cyan: String { + public var Cyan: String { get { return Colorizer(string: string, color: ForegroundColor.Cyan).description } } - var White: String { + public var White: String { get { return Colorizer(string: string, color: ForegroundColor.White).description } diff --git a/SwiftLine/Colorize/StringStyle.swift b/SwiftLine/Swiftline/Colorize/StringStyle.swift similarity index 100% rename from SwiftLine/Colorize/StringStyle.swift rename to SwiftLine/Swiftline/Colorize/StringStyle.swift diff --git a/SwiftLine/Colorize/StringStyleColorizer.swift b/SwiftLine/Swiftline/Colorize/StringStyleColorizer.swift similarity index 78% rename from SwiftLine/Colorize/StringStyleColorizer.swift rename to SwiftLine/Swiftline/Colorize/StringStyleColorizer.swift index 851601d..f7cb739 100644 --- a/SwiftLine/Colorize/StringStyleColorizer.swift +++ b/SwiftLine/Swiftline/Colorize/StringStyleColorizer.swift @@ -9,73 +9,74 @@ import Foundation -extension String { + +public extension String { - struct StringStyleColorizer { + public struct StringStyleColorizer { let string: String - var Reset: String { + public var Reset: String { get { return Colorizer(string: string, color: StringTextStyle.Reset).description } } - var Bold: String { + public var Bold: String { get { return Colorizer(string: string, color: StringTextStyle.Bold).description } } - var Italic: String { + public var Italic: String { get { return Colorizer(string: string, color: StringTextStyle.Italic).description } } - var Underline: String { + public var Underline: String { get { return Colorizer(string: string, color: StringTextStyle.Underline).description } } - var Inverse: String { + public var Inverse: String { get { return Colorizer(string: string, color: StringTextStyle.Inverse).description } } - var Strikethrough: String { + public var Strikethrough: String { get { return Colorizer(string: string, color: StringTextStyle.Strikethrough).description } } - var BoldOff: String { + public var BoldOff: String { get { return Colorizer(string: string, color: StringTextStyle.BoldOff).description } } - var ItalicOff: String { + public var ItalicOff: String { get { return Colorizer(string: string, color: StringTextStyle.ItalicOff).description } } - var UnderlineOff: String { + public var UnderlineOff: String { get { return Colorizer(string: string, color: StringTextStyle.UnderlineOff).description } } - var InverseOff: String { + public var InverseOff: String { get { return Colorizer(string: string, color: StringTextStyle.InverseOff).description } } - var StrikethroughOff: String { + public var StrikethroughOff: String { get { return Colorizer(string: string, color: StringTextStyle.StrikethroughOff).description } diff --git a/SwiftLine/Swiftline/Misc/ArgConvertible.swift b/SwiftLine/Swiftline/Misc/ArgConvertible.swift new file mode 100644 index 0000000..128b5d8 --- /dev/null +++ b/SwiftLine/Swiftline/Misc/ArgConvertible.swift @@ -0,0 +1,65 @@ +// +// ArgConvertible.swift +// ArgConvertible +// +// Created by Omar Abdelhafith on 02/11/2015. +// Copyright © 2015 Omar Abdelhafith. All rights reserved. +// + +import Foundation + + +/** + * Any type that extends ArgConvertibleType can be used in ask and choose + */ +public protocol ArgConvertibleType { + + /// Create an instance out of a string + static func fromString(string: String) -> Self? + + /// Return the display name of a type + static func typeName() -> String +} + + +extension Int: ArgConvertibleType { + public static func fromString(string: String) -> Int? { + return Int(string) + } + + public static func typeName() -> String { + return "Integer" + } +} + + +extension Double: ArgConvertibleType { + public static func fromString(string: String) -> Double? { + return Double(string) + } + + public static func typeName() -> String { + return "Double" + } +} + +extension Float: ArgConvertibleType { + public static func fromString(string: String) -> Float? { + return Float(string) + } + + public static func typeName() -> String { + return "Float" + } +} + + +extension String: ArgConvertibleType { + public static func fromString(string: String) -> String? { + return string + } + + public static func typeName() -> String { + return "String" + } +} diff --git a/SwiftLine/Misc/PromptPrinter.swift b/SwiftLine/Swiftline/Misc/PromptPrinter.swift similarity index 100% rename from SwiftLine/Misc/PromptPrinter.swift rename to SwiftLine/Swiftline/Misc/PromptPrinter.swift diff --git a/SwiftLine/Misc/PromptReader.swift b/SwiftLine/Swiftline/Misc/PromptReader.swift similarity index 100% rename from SwiftLine/Misc/PromptReader.swift rename to SwiftLine/Swiftline/Misc/PromptReader.swift diff --git a/SwiftLine/Misc/PromptSettings.swift b/SwiftLine/Swiftline/Misc/PromptSettings.swift similarity index 100% rename from SwiftLine/Misc/PromptSettings.swift rename to SwiftLine/Swiftline/Misc/PromptSettings.swift diff --git a/SwiftLine/Runner/CommandExecutor.swift b/SwiftLine/Swiftline/Runner/CommandExecutor.swift similarity index 100% rename from SwiftLine/Runner/CommandExecutor.swift rename to SwiftLine/Swiftline/Runner/CommandExecutor.swift diff --git a/SwiftLine/Runner/RunResults.swift b/SwiftLine/Swiftline/Runner/RunResults.swift similarity index 92% rename from SwiftLine/Runner/RunResults.swift rename to SwiftLine/Swiftline/Runner/RunResults.swift index 008b3c9..2b38ce6 100644 --- a/SwiftLine/Runner/RunResults.swift +++ b/SwiftLine/Swiftline/Runner/RunResults.swift @@ -9,13 +9,15 @@ import Foundation -struct RunResults { +public struct RunResults { let exitStatus: Int let stdout: String let stderr: String } +// MARK:- Internal + func splitCommandToArgs(command: String) -> [String] { if command.containsString(" ") { return command.componentsSeparatedByString(" ") diff --git a/SwiftLine/Runner/Runner.swift b/SwiftLine/Swiftline/Runner/Runner.swift similarity index 100% rename from SwiftLine/Runner/Runner.swift rename to SwiftLine/Swiftline/Runner/Runner.swift diff --git a/SwiftLine/Swiftline/Runner/RunnerSettings.swift b/SwiftLine/Swiftline/Runner/RunnerSettings.swift new file mode 100644 index 0000000..16dccd8 --- /dev/null +++ b/SwiftLine/Swiftline/Runner/RunnerSettings.swift @@ -0,0 +1,46 @@ +// +// RunSettings.swift +// RunSettings +// +// Created by Omar Abdelhafith on 05/11/2015. +// Copyright © 2015 Omar Abdelhafith. All rights reserved. +// + +import Foundation + + +/// Settings to costumize the run function +public class RunSettings { + + /// If set to true, the command wont be run on the system, the stdout will contain the command executed + public var dryRun = false + + /// Which parts of the command to be echoed during execution + public var echo = EchoSettings.None + + /// Run the command in interactive mode; output wont be captured + public var interactive = false +} + + +/// Echo settings +public struct EchoSettings: OptionSetType { + + public let rawValue: Int + + public init(rawValue: Int) { + self.rawValue = rawValue + } + + /// Dont echo anything, this is the default settings + public static var None = EchoSettings(rawValue: 0) + + /// Echo the stdout from the run command to the terminal + public static let Stdout = EchoSettings(rawValue: 1 << 0) + + /// Echo the stderr from the run command to the terminal + public static let Stderr = EchoSettings(rawValue: 1 << 1) + + /// Echo the command executed to the terminal + public static let Command = EchoSettings(rawValue: 1 << 2) +} \ No newline at end of file diff --git a/SwiftLine/Swiftline/Runner/ShortHandRunner.swift b/SwiftLine/Swiftline/Runner/ShortHandRunner.swift new file mode 100644 index 0000000..ff20127 --- /dev/null +++ b/SwiftLine/Swiftline/Runner/ShortHandRunner.swift @@ -0,0 +1,87 @@ +// +// ShortHandRunner.swift +// ShortHandRunner + +// +// Created by Omar Abdelhafith on 05/11/2015. +// Copyright © 2015 Omar Abdelhafith. All rights reserved. +// + +import Foundation + + +/** + Executes a command and captures its output + + - parameter command: the command to execute + - parameter args: the parameters to pass to the command + + - returns: RunResults describing the command results + */ +public func run(command: String, args: String...) -> RunResults { + return 🏃.run(command, args: args as [String]) +} + + +/** + Executes a command and captures its output + + - parameter command: the command to execute + - parameter args: the parameters to pass to the command + + - returns: RunResults describing the command results + */ +public func run(command: String, args: [String]) -> RunResults { + return 🏃.run(command, args: args as [String]) +} + + +/** + Executes a command and captures its output + + - parameter command: the command to execute + - parameter settingsBlock: block that receives the settings to costumize the behavior of run + + - returns: RunResults describing the command results + */ +public func run(command: String, settingsBlock: (RunSettings -> Void)) -> RunResults { + return 🏃.run(command, settings: settingsBlock) +} + + +/** + Executes a command and captures its output + + - parameter command: the command to execute + - parameter args: the parameters to pass to the command + - parameter settingsBlock: block that receives the settings to costumize the behavior of run + + - returns: RunResults describing the command results + */ +public func run(command: String, args: [String], settings: (RunSettings -> Void)) -> RunResults { + return 🏃.run(command, args: args, settings: settings) +} + + +/** + Executes a command and captures its output + + - parameter command: the command to execute + - parameter echo: echo settings that describe what parts of the command to print + +- returns: RunResults describing the command results + */ +func run(command: String, echo: EchoSettings) -> RunResults { + return 🏃.run(command, echo: echo) +} + +/** + Execute a command in interactive mode, output won't be captured + + - parameter command: the command to execute + +- returns: executed command exit code + */ +public func runWithoutCapture(command: String) -> Int { + return 🏃.runWithoutCapture(command) +} \ No newline at end of file diff --git a/SwiftLine/Runner/TaskPipe.swift b/SwiftLine/Swiftline/Runner/TaskPipe.swift similarity index 100% rename from SwiftLine/Runner/TaskPipe.swift rename to SwiftLine/Swiftline/Runner/TaskPipe.swift diff --git a/tests/AgreeSettingsTest.swift b/SwiftlineTests/AgreeSettingsTest.swift similarity index 98% rename from tests/AgreeSettingsTest.swift rename to SwiftlineTests/AgreeSettingsTest.swift index 0822435..06a2bec 100644 --- a/tests/AgreeSettingsTest.swift +++ b/SwiftlineTests/AgreeSettingsTest.swift @@ -1,5 +1,6 @@ import Quick import Nimble +@testable import Swiftline class AgreeSettingsTest: QuickSpec { override func spec() { diff --git a/tests/AgreeTests.swift b/SwiftlineTests/AgreeTests.swift similarity index 98% rename from tests/AgreeTests.swift rename to SwiftlineTests/AgreeTests.swift index 8ef2170..e040b04 100644 --- a/tests/AgreeTests.swift +++ b/SwiftlineTests/AgreeTests.swift @@ -1,5 +1,6 @@ import Quick import Nimble +@testable import Swiftline class AgreeTest: QuickSpec { override func spec() { diff --git a/tests/AskSettingsTests.swift b/SwiftlineTests/AskSettingsTests.swift similarity index 98% rename from tests/AskSettingsTests.swift rename to SwiftlineTests/AskSettingsTests.swift index 8dd45c1..9ed7135 100644 --- a/tests/AskSettingsTests.swift +++ b/SwiftlineTests/AskSettingsTests.swift @@ -1,5 +1,6 @@ import Quick import Nimble +@testable import Swiftline class AskSettingsTests: QuickSpec { override func spec() { diff --git a/tests/AskTests.swift b/SwiftlineTests/AskTests.swift similarity index 99% rename from tests/AskTests.swift rename to SwiftlineTests/AskTests.swift index 12e6d85..0a1b0df 100644 --- a/tests/AskTests.swift +++ b/SwiftlineTests/AskTests.swift @@ -1,5 +1,6 @@ import Quick import Nimble +@testable import Swiftline class AskerTest: QuickSpec { override func spec() { diff --git a/tests/ChooseSettingsTests.swift b/SwiftlineTests/ChooseSettingsTests.swift similarity index 99% rename from tests/ChooseSettingsTests.swift rename to SwiftlineTests/ChooseSettingsTests.swift index 2d99572..5fc9094 100644 --- a/tests/ChooseSettingsTests.swift +++ b/SwiftlineTests/ChooseSettingsTests.swift @@ -1,5 +1,6 @@ import Quick import Nimble +@testable import Swiftline class ChooseSettingsTests: QuickSpec { override func spec() { diff --git a/tests/ChooseTests.swift b/SwiftlineTests/ChooseTests.swift similarity index 99% rename from tests/ChooseTests.swift rename to SwiftlineTests/ChooseTests.swift index 630ff22..3113b6c 100644 --- a/tests/ChooseTests.swift +++ b/SwiftlineTests/ChooseTests.swift @@ -1,5 +1,6 @@ import Quick import Nimble +@testable import Swiftline class ChooseTests: QuickSpec { override func spec() { diff --git a/tests/ColorizerTest.swift b/SwiftlineTests/ColorizerTest.swift similarity index 99% rename from tests/ColorizerTest.swift rename to SwiftlineTests/ColorizerTest.swift index 2ea92ee..9406fb9 100644 --- a/tests/ColorizerTest.swift +++ b/SwiftlineTests/ColorizerTest.swift @@ -1,6 +1,6 @@ import Quick import Nimble - +@testable import Swiftline class ColorizerTest: QuickSpec { override func spec() { diff --git a/tests/Info.plist b/SwiftlineTests/Info.plist similarity index 100% rename from tests/Info.plist rename to SwiftlineTests/Info.plist diff --git a/tests/RunnerTests.swift b/SwiftlineTests/RunnerTests.swift similarity index 99% rename from tests/RunnerTests.swift rename to SwiftlineTests/RunnerTests.swift index b66b56e..4e3b3c0 100644 --- a/tests/RunnerTests.swift +++ b/SwiftlineTests/RunnerTests.swift @@ -1,5 +1,6 @@ import Quick import Nimble +@testable import Swiftline class RunnerTests: QuickSpec { override func spec() { diff --git a/swiftline.xcodeproj/project.pbxproj b/swiftline.xcodeproj/project.pbxproj index 3c85fee..a9c373c 100644 --- a/swiftline.xcodeproj/project.pbxproj +++ b/swiftline.xcodeproj/project.pbxproj @@ -7,350 +7,599 @@ objects = { /* Begin PBXBuildFile section */ - D727620D1BF29D5500126D99 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72761F71BF29D5500126D99 /* main.swift */; }; - D72762671BF29EC400126D99 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727625F1BF29EC400126D99 /* RunnerTests.swift */; }; - D72762681BF29EC400126D99 /* ChooseSettingsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762601BF29EC400126D99 /* ChooseSettingsTests.swift */; }; - D72762691BF29EC400126D99 /* ChooseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762611BF29EC400126D99 /* ChooseTests.swift */; }; - D727626A1BF29EC400126D99 /* AskTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762621BF29EC400126D99 /* AskTests.swift */; }; - D727626B1BF29EC400126D99 /* AskSettingsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762631BF29EC400126D99 /* AskSettingsTests.swift */; }; - D727626C1BF29EC400126D99 /* AgreeSettingsTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762641BF29EC400126D99 /* AgreeSettingsTest.swift */; }; - D727626D1BF29EC400126D99 /* AgreeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762651BF29EC400126D99 /* AgreeTests.swift */; }; - D727626E1BF29EC400126D99 /* ColorizerTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762661BF29EC400126D99 /* ColorizerTest.swift */; }; - D72762861BF29F6D00126D99 /* Agree.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762241BF29DE200126D99 /* Agree.swift */; }; - D72762871BF29F6D00126D99 /* AgreeSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762251BF29DE200126D99 /* AgreeSettings.swift */; }; - D72762881BF29F6D00126D99 /* Ask.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762271BF29DE200126D99 /* Ask.swift */; }; - D72762891BF29F6D00126D99 /* AskerValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762281BF29DE200126D99 /* AskerValidator.swift */; }; - D727628A1BF29F6D00126D99 /* AskSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762291BF29DE200126D99 /* AskSettings.swift */; }; - D727628B1BF29F6D00126D99 /* Choose.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727622B1BF29DE200126D99 /* Choose.swift */; }; - D727628C1BF29F6D00126D99 /* ChooseSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727622C1BF29DE200126D99 /* ChooseSettings.swift */; }; - D727628D1BF29F6D00126D99 /* Colorizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727622E1BF29DE200126D99 /* Colorizer.swift */; }; - D727628E1BF29F6D00126D99 /* StringBackgroundColorizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727622F1BF29DE200126D99 /* StringBackgroundColorizer.swift */; }; - D727628F1BF29F6D00126D99 /* StringForegroundColorizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762301BF29DE200126D99 /* StringForegroundColorizer.swift */; }; - D72762901BF29F6D00126D99 /* StringStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762311BF29DE200126D99 /* StringStyle.swift */; }; - D72762911BF29F6D00126D99 /* StringStyleColorizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762321BF29DE200126D99 /* StringStyleColorizer.swift */; }; - D72762921BF29F6D00126D99 /* ArgConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762341BF29DE200126D99 /* ArgConvertible.swift */; }; - D72762931BF29F6D00126D99 /* PromptPrinter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762351BF29DE200126D99 /* PromptPrinter.swift */; }; - D72762941BF29F6D00126D99 /* PromptReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762361BF29DE200126D99 /* PromptReader.swift */; }; - D72762951BF29F6D00126D99 /* PromptSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762371BF29DE200126D99 /* PromptSettings.swift */; }; - D72762961BF29F6D00126D99 /* ShortHandRunner.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727626F1BF29ECF00126D99 /* ShortHandRunner.swift */; }; - D72762971BF29F6D00126D99 /* CommandExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762391BF29DE200126D99 /* CommandExecutor.swift */; }; - D72762981BF29F6D00126D99 /* Runner.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727623A1BF29DE200126D99 /* Runner.swift */; }; - D72762991BF29F6D00126D99 /* RunnerSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727623B1BF29DE200126D99 /* RunnerSettings.swift */; }; - D727629A1BF29F6D00126D99 /* RunResults.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727623C1BF29DE200126D99 /* RunResults.swift */; }; - D727629B1BF29F6D00126D99 /* TaskPipe.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727623D1BF29DE200126D99 /* TaskPipe.swift */; }; - D727629D1BF29F7100126D99 /* Agree.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762241BF29DE200126D99 /* Agree.swift */; }; - D727629E1BF29F7100126D99 /* AgreeSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762251BF29DE200126D99 /* AgreeSettings.swift */; }; - D727629F1BF29F7100126D99 /* Ask.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762271BF29DE200126D99 /* Ask.swift */; }; - D72762A01BF29F7100126D99 /* AskerValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762281BF29DE200126D99 /* AskerValidator.swift */; }; - D72762A11BF29F7100126D99 /* AskSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762291BF29DE200126D99 /* AskSettings.swift */; }; - D72762A21BF29F7100126D99 /* Choose.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727622B1BF29DE200126D99 /* Choose.swift */; }; - D72762A31BF29F7100126D99 /* ChooseSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727622C1BF29DE200126D99 /* ChooseSettings.swift */; }; - D72762A41BF29F7100126D99 /* Colorizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727622E1BF29DE200126D99 /* Colorizer.swift */; }; - D72762A51BF29F7100126D99 /* StringBackgroundColorizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727622F1BF29DE200126D99 /* StringBackgroundColorizer.swift */; }; - D72762A61BF29F7100126D99 /* StringForegroundColorizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762301BF29DE200126D99 /* StringForegroundColorizer.swift */; }; - D72762A71BF29F7100126D99 /* StringStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762311BF29DE200126D99 /* StringStyle.swift */; }; - D72762A81BF29F7100126D99 /* StringStyleColorizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762321BF29DE200126D99 /* StringStyleColorizer.swift */; }; - D72762A91BF29F7100126D99 /* ArgConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762341BF29DE200126D99 /* ArgConvertible.swift */; }; - D72762AA1BF29F7100126D99 /* PromptPrinter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762351BF29DE200126D99 /* PromptPrinter.swift */; }; - D72762AB1BF29F7100126D99 /* PromptReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762361BF29DE200126D99 /* PromptReader.swift */; }; - D72762AC1BF29F7100126D99 /* PromptSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762371BF29DE200126D99 /* PromptSettings.swift */; }; - D72762AD1BF29F7100126D99 /* ShortHandRunner.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727626F1BF29ECF00126D99 /* ShortHandRunner.swift */; }; - D72762AE1BF29F7100126D99 /* CommandExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72762391BF29DE200126D99 /* CommandExecutor.swift */; }; - D72762AF1BF29F7100126D99 /* Runner.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727623A1BF29DE200126D99 /* Runner.swift */; }; - D72762B01BF29F7100126D99 /* RunnerSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727623B1BF29DE200126D99 /* RunnerSettings.swift */; }; - D72762B11BF29F7100126D99 /* RunResults.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727623C1BF29DE200126D99 /* RunResults.swift */; }; - D72762B21BF29F7100126D99 /* TaskPipe.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727623D1BF29DE200126D99 /* TaskPipe.swift */; }; - E3A83C0C4F0B46AC6BB723A5 /* Pods_tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 581189F7037990E32FE648EA /* Pods_tests.framework */; }; + D72762D71BF2C9E900126D99 /* Swiftline.h in Headers */ = {isa = PBXBuildFile; fileRef = D72762D61BF2C9E900126D99 /* Swiftline.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D72762DE1BF2C9E900126D99 /* Swiftline.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D72762D31BF2C9E900126D99 /* Swiftline.framework */; }; + D72763271BF2CA4C00126D99 /* ColorizerTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727631F1BF2CA4C00126D99 /* ColorizerTest.swift */; }; + D72763281BF2CA4C00126D99 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72763201BF2CA4C00126D99 /* RunnerTests.swift */; }; + D72763291BF2CA4C00126D99 /* ChooseSettingsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72763211BF2CA4C00126D99 /* ChooseSettingsTests.swift */; }; + D727632A1BF2CA4C00126D99 /* ChooseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72763221BF2CA4C00126D99 /* ChooseTests.swift */; }; + D727632B1BF2CA4C00126D99 /* AskTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72763231BF2CA4C00126D99 /* AskTests.swift */; }; + D727632C1BF2CA4C00126D99 /* AskSettingsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72763241BF2CA4C00126D99 /* AskSettingsTests.swift */; }; + D727632D1BF2CA4C00126D99 /* AgreeSettingsTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72763251BF2CA4C00126D99 /* AgreeSettingsTest.swift */; }; + D727632E1BF2CA4C00126D99 /* AgreeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72763261BF2CA4C00126D99 /* AgreeTests.swift */; }; + D727639A1BF2CB4F00126D99 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D72763741BF2CB0F00126D99 /* Nimble.framework */; }; + D727639B1BF2CB4F00126D99 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D72763851BF2CB0F00126D99 /* Quick.framework */; }; + D727643E1BF3CD3000126D99 /* Agree.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72764231BF3CD3000126D99 /* Agree.swift */; }; + D727643F1BF3CD3000126D99 /* AgreeSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72764241BF3CD3000126D99 /* AgreeSettings.swift */; }; + D72764401BF3CD3000126D99 /* Ask.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72764261BF3CD3000126D99 /* Ask.swift */; }; + D72764411BF3CD3000126D99 /* AskerValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72764271BF3CD3000126D99 /* AskerValidator.swift */; }; + D72764421BF3CD3000126D99 /* AskSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72764281BF3CD3000126D99 /* AskSettings.swift */; }; + D72764431BF3CD3000126D99 /* Choose.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727642A1BF3CD3000126D99 /* Choose.swift */; }; + D72764441BF3CD3000126D99 /* ChooseSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727642B1BF3CD3000126D99 /* ChooseSettings.swift */; }; + D72764451BF3CD3000126D99 /* Colorizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727642D1BF3CD3000126D99 /* Colorizer.swift */; }; + D72764461BF3CD3000126D99 /* StringBackgroundColorizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727642E1BF3CD3000126D99 /* StringBackgroundColorizer.swift */; }; + D72764471BF3CD3000126D99 /* StringForegroundColorizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727642F1BF3CD3000126D99 /* StringForegroundColorizer.swift */; }; + D72764481BF3CD3000126D99 /* StringStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72764301BF3CD3000126D99 /* StringStyle.swift */; }; + D72764491BF3CD3000126D99 /* StringStyleColorizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72764311BF3CD3000126D99 /* StringStyleColorizer.swift */; }; + D727644A1BF3CD3000126D99 /* ArgConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72764331BF3CD3000126D99 /* ArgConvertible.swift */; }; + D727644B1BF3CD3000126D99 /* PromptPrinter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72764341BF3CD3000126D99 /* PromptPrinter.swift */; }; + D727644C1BF3CD3000126D99 /* PromptReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72764351BF3CD3000126D99 /* PromptReader.swift */; }; + D727644D1BF3CD3000126D99 /* PromptSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72764361BF3CD3000126D99 /* PromptSettings.swift */; }; + D727644E1BF3CD3000126D99 /* CommandExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72764381BF3CD3000126D99 /* CommandExecutor.swift */; }; + D727644F1BF3CD3000126D99 /* Runner.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72764391BF3CD3000126D99 /* Runner.swift */; }; + D72764501BF3CD3000126D99 /* RunnerSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727643A1BF3CD3000126D99 /* RunnerSettings.swift */; }; + D72764511BF3CD3000126D99 /* RunResults.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727643B1BF3CD3000126D99 /* RunResults.swift */; }; + D72764521BF3CD3000126D99 /* ShortHandRunner.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727643C1BF3CD3000126D99 /* ShortHandRunner.swift */; }; + D72764531BF3CD3000126D99 /* TaskPipe.swift in Sources */ = {isa = PBXBuildFile; fileRef = D727643D1BF3CD3000126D99 /* TaskPipe.swift */; }; /* End PBXBuildFile section */ -/* Begin PBXCopyFilesBuildPhase section */ - D72761EA1BF29CF800126D99 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - ); - runOnlyForDeploymentPostprocessing = 1; +/* Begin PBXContainerItemProxy section */ + D72762DF1BF2C9E900126D99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D72762CA1BF2C9E900126D99 /* Project object */; + proxyType = 1; + remoteGlobalIDString = D72762D21BF2C9E900126D99; + remoteInfo = Swiftline; }; -/* End PBXCopyFilesBuildPhase section */ + D727636F1BF2CB0F00126D99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D72763621BF2CB0E00126D99 /* Nimble.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 1F1A74291940169200FFFC47; + remoteInfo = "Nimble-iOS"; + }; + D72763711BF2CB0F00126D99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D72763621BF2CB0E00126D99 /* Nimble.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 1F1A74341940169200FFFC47; + remoteInfo = "Nimble-iOSTests"; + }; + D72763731BF2CB0F00126D99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D72763621BF2CB0E00126D99 /* Nimble.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 1F925EAD195C0D6300ED456B; + remoteInfo = "Nimble-OSX"; + }; + D72763751BF2CB0F00126D99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D72763621BF2CB0E00126D99 /* Nimble.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 1F925EB7195C0D6300ED456B; + remoteInfo = "Nimble-OSXTests"; + }; + D72763771BF2CB0F00126D99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D72763621BF2CB0E00126D99 /* Nimble.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 1F5DF1551BDCA0CE00C3A531; + remoteInfo = "Nimble-tvOS"; + }; + D72763791BF2CB0F00126D99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D72763621BF2CB0E00126D99 /* Nimble.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 1F5DF15E1BDCA0CE00C3A531; + remoteInfo = "Nimble-tvOSTests"; + }; + D72763841BF2CB0F00126D99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D72763651BF2CB0E00126D99 /* Quick.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = DAEB6B8E1943873100289F44; + remoteInfo = "Quick-OSX"; + }; + D72763861BF2CB0F00126D99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D72763651BF2CB0E00126D99 /* Quick.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = DAEB6B991943873100289F44; + remoteInfo = "Quick-OSXTests"; + }; + D72763881BF2CB0F00126D99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D72763651BF2CB0E00126D99 /* Quick.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = DA5663E81A4C8D8500193C88; + remoteInfo = "QuickFocused-OSXTests"; + }; + D727638A1BF2CB0F00126D99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D72763651BF2CB0E00126D99 /* Quick.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 5A5D117C19473F2100F6D13D; + remoteInfo = "Quick-iOS"; + }; + D727638C1BF2CB0F00126D99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D72763651BF2CB0E00126D99 /* Quick.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 5A5D118619473F2100F6D13D; + remoteInfo = "Quick-iOSTests"; + }; + D727638E1BF2CB0F00126D99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D72763651BF2CB0E00126D99 /* Quick.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = DA9876B21A4C70EB0004AA17; + remoteInfo = "QuickFocused-iOSTests"; + }; + D72763901BF2CB0F00126D99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D72763651BF2CB0E00126D99 /* Quick.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 1F118CD51BDCA4AB005013A2; + remoteInfo = "Quick-tvOS"; + }; + D72763921BF2CB0F00126D99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D72763651BF2CB0E00126D99 /* Quick.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 1F118CDE1BDCA4AB005013A2; + remoteInfo = "Quick-tvOSTests"; + }; + D72763941BF2CB0F00126D99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D72763651BF2CB0E00126D99 /* Quick.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 1F118CF01BDCA4BB005013A2; + remoteInfo = "QuickFocused-tvOSTests"; + }; + D72763961BF2CB2000126D99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D72763621BF2CB0E00126D99 /* Nimble.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = 1F925EAC195C0D6300ED456B; + remoteInfo = "Nimble-OSX"; + }; + D72763981BF2CB2300126D99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D72763651BF2CB0E00126D99 /* Quick.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = DAEB6B8D1943873100289F44; + remoteInfo = "Quick-OSX"; + }; +/* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 581189F7037990E32FE648EA /* Pods_tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 71126CCF267C14DE6FB10B23 /* Pods-tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-tests/Pods-tests.debug.xcconfig"; sourceTree = ""; }; - B8891C9B781CE31AF2469E32 /* Pods-tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-tests/Pods-tests.release.xcconfig"; sourceTree = ""; }; - D72761EC1BF29CF800126D99 /* swiftline */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = swiftline; sourceTree = BUILT_PRODUCTS_DIR; }; - D72761F71BF29D5500126D99 /* main.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; - D72762241BF29DE200126D99 /* Agree.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Agree.swift; sourceTree = ""; }; - D72762251BF29DE200126D99 /* AgreeSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AgreeSettings.swift; sourceTree = ""; }; - D72762271BF29DE200126D99 /* Ask.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Ask.swift; sourceTree = ""; }; - D72762281BF29DE200126D99 /* AskerValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AskerValidator.swift; sourceTree = ""; }; - D72762291BF29DE200126D99 /* AskSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AskSettings.swift; sourceTree = ""; }; - D727622B1BF29DE200126D99 /* Choose.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Choose.swift; sourceTree = ""; }; - D727622C1BF29DE200126D99 /* ChooseSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChooseSettings.swift; sourceTree = ""; }; - D727622E1BF29DE200126D99 /* Colorizer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Colorizer.swift; sourceTree = ""; }; - D727622F1BF29DE200126D99 /* StringBackgroundColorizer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringBackgroundColorizer.swift; sourceTree = ""; }; - D72762301BF29DE200126D99 /* StringForegroundColorizer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringForegroundColorizer.swift; sourceTree = ""; }; - D72762311BF29DE200126D99 /* StringStyle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringStyle.swift; sourceTree = ""; }; - D72762321BF29DE200126D99 /* StringStyleColorizer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringStyleColorizer.swift; sourceTree = ""; }; - D72762341BF29DE200126D99 /* ArgConvertible.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArgConvertible.swift; sourceTree = ""; }; - D72762351BF29DE200126D99 /* PromptPrinter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PromptPrinter.swift; sourceTree = ""; }; - D72762361BF29DE200126D99 /* PromptReader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PromptReader.swift; sourceTree = ""; }; - D72762371BF29DE200126D99 /* PromptSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PromptSettings.swift; sourceTree = ""; }; - D72762391BF29DE200126D99 /* CommandExecutor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommandExecutor.swift; sourceTree = ""; }; - D727623A1BF29DE200126D99 /* Runner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Runner.swift; sourceTree = ""; }; - D727623B1BF29DE200126D99 /* RunnerSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RunnerSettings.swift; sourceTree = ""; }; - D727623C1BF29DE200126D99 /* RunResults.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RunResults.swift; sourceTree = ""; }; - D727623D1BF29DE200126D99 /* TaskPipe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TaskPipe.swift; sourceTree = ""; }; - D72762571BF29E7A00126D99 /* tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - D727625B1BF29E7A00126D99 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D727625F1BF29EC400126D99 /* RunnerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; - D72762601BF29EC400126D99 /* ChooseSettingsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChooseSettingsTests.swift; sourceTree = ""; }; - D72762611BF29EC400126D99 /* ChooseTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChooseTests.swift; sourceTree = ""; }; - D72762621BF29EC400126D99 /* AskTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AskTests.swift; sourceTree = ""; }; - D72762631BF29EC400126D99 /* AskSettingsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AskSettingsTests.swift; sourceTree = ""; }; - D72762641BF29EC400126D99 /* AgreeSettingsTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AgreeSettingsTest.swift; sourceTree = ""; }; - D72762651BF29EC400126D99 /* AgreeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AgreeTests.swift; sourceTree = ""; }; - D72762661BF29EC400126D99 /* ColorizerTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ColorizerTest.swift; sourceTree = ""; }; - D727626F1BF29ECF00126D99 /* ShortHandRunner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShortHandRunner.swift; sourceTree = ""; }; + D72762D31BF2C9E900126D99 /* Swiftline.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Swiftline.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D72762D61BF2C9E900126D99 /* Swiftline.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Swiftline.h; sourceTree = ""; }; + D72762D81BF2C9E900126D99 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D72762DD1BF2C9E900126D99 /* SwiftlineTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftlineTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + D72762E41BF2C9E900126D99 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D727631F1BF2CA4C00126D99 /* ColorizerTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ColorizerTest.swift; sourceTree = ""; }; + D72763201BF2CA4C00126D99 /* RunnerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + D72763211BF2CA4C00126D99 /* ChooseSettingsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChooseSettingsTests.swift; sourceTree = ""; }; + D72763221BF2CA4C00126D99 /* ChooseTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChooseTests.swift; sourceTree = ""; }; + D72763231BF2CA4C00126D99 /* AskTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AskTests.swift; sourceTree = ""; }; + D72763241BF2CA4C00126D99 /* AskSettingsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AskSettingsTests.swift; sourceTree = ""; }; + D72763251BF2CA4C00126D99 /* AgreeSettingsTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AgreeSettingsTest.swift; sourceTree = ""; }; + D72763261BF2CA4C00126D99 /* AgreeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AgreeTests.swift; sourceTree = ""; }; + D72763621BF2CB0E00126D99 /* Nimble.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Nimble.xcodeproj; path = Nimble/Nimble.xcodeproj; sourceTree = ""; }; + D72763651BF2CB0E00126D99 /* Quick.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Quick.xcodeproj; path = Quick/Quick.xcodeproj; sourceTree = ""; }; + D72764231BF3CD3000126D99 /* Agree.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Agree.swift; sourceTree = ""; }; + D72764241BF3CD3000126D99 /* AgreeSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AgreeSettings.swift; sourceTree = ""; }; + D72764261BF3CD3000126D99 /* Ask.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Ask.swift; sourceTree = ""; }; + D72764271BF3CD3000126D99 /* AskerValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AskerValidator.swift; sourceTree = ""; }; + D72764281BF3CD3000126D99 /* AskSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AskSettings.swift; sourceTree = ""; }; + D727642A1BF3CD3000126D99 /* Choose.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Choose.swift; sourceTree = ""; }; + D727642B1BF3CD3000126D99 /* ChooseSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChooseSettings.swift; sourceTree = ""; }; + D727642D1BF3CD3000126D99 /* Colorizer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Colorizer.swift; sourceTree = ""; }; + D727642E1BF3CD3000126D99 /* StringBackgroundColorizer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringBackgroundColorizer.swift; sourceTree = ""; }; + D727642F1BF3CD3000126D99 /* StringForegroundColorizer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringForegroundColorizer.swift; sourceTree = ""; }; + D72764301BF3CD3000126D99 /* StringStyle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringStyle.swift; sourceTree = ""; }; + D72764311BF3CD3000126D99 /* StringStyleColorizer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringStyleColorizer.swift; sourceTree = ""; }; + D72764331BF3CD3000126D99 /* ArgConvertible.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArgConvertible.swift; sourceTree = ""; }; + D72764341BF3CD3000126D99 /* PromptPrinter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PromptPrinter.swift; sourceTree = ""; }; + D72764351BF3CD3000126D99 /* PromptReader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PromptReader.swift; sourceTree = ""; }; + D72764361BF3CD3000126D99 /* PromptSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PromptSettings.swift; sourceTree = ""; }; + D72764381BF3CD3000126D99 /* CommandExecutor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommandExecutor.swift; sourceTree = ""; }; + D72764391BF3CD3000126D99 /* Runner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Runner.swift; sourceTree = ""; }; + D727643A1BF3CD3000126D99 /* RunnerSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RunnerSettings.swift; sourceTree = ""; }; + D727643B1BF3CD3000126D99 /* RunResults.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RunResults.swift; sourceTree = ""; }; + D727643C1BF3CD3000126D99 /* ShortHandRunner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShortHandRunner.swift; sourceTree = ""; }; + D727643D1BF3CD3000126D99 /* TaskPipe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TaskPipe.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - D72761E91BF29CF800126D99 /* Frameworks */ = { + D72762CF1BF2C9E900126D99 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - D72762541BF29E7A00126D99 /* Frameworks */ = { + D72762DA1BF2C9E900126D99 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E3A83C0C4F0B46AC6BB723A5 /* Pods_tests.framework in Frameworks */, + D727639A1BF2CB4F00126D99 /* Nimble.framework in Frameworks */, + D727639B1BF2CB4F00126D99 /* Quick.framework in Frameworks */, + D72762DE1BF2C9E900126D99 /* Swiftline.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - C3F675ACB28350D211CF90F6 /* Pods */ = { + D72762C91BF2C9E900126D99 = { isa = PBXGroup; children = ( - 71126CCF267C14DE6FB10B23 /* Pods-tests.debug.xcconfig */, - B8891C9B781CE31AF2469E32 /* Pods-tests.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; - D72761E31BF29CF800126D99 = { - isa = PBXGroup; - children = ( - D72761F61BF29D5500126D99 /* Sample app */, - D72762221BF29DE200126D99 /* SwiftLine */, - D72762581BF29E7A00126D99 /* tests */, - D72761ED1BF29CF800126D99 /* Products */, - C3F675ACB28350D211CF90F6 /* Pods */, - EF4179A141725395317A037A /* Frameworks */, + D72762D51BF2C9E900126D99 /* Swiftline */, + D72762E11BF2C9E900126D99 /* SwiftlineTests */, + D72762D41BF2C9E900126D99 /* Products */, + D72763621BF2CB0E00126D99 /* Nimble.xcodeproj */, + D72763651BF2CB0E00126D99 /* Quick.xcodeproj */, ); sourceTree = ""; }; - D72761ED1BF29CF800126D99 /* Products */ = { + D72762D41BF2C9E900126D99 /* Products */ = { isa = PBXGroup; children = ( - D72761EC1BF29CF800126D99 /* swiftline */, - D72762571BF29E7A00126D99 /* tests.xctest */, + D72762D31BF2C9E900126D99 /* Swiftline.framework */, + D72762DD1BF2C9E900126D99 /* SwiftlineTests.xctest */, ); name = Products; sourceTree = ""; }; - D72761F61BF29D5500126D99 /* Sample app */ = { + D72762D51BF2C9E900126D99 /* Swiftline */ = { isa = PBXGroup; children = ( - D72761F71BF29D5500126D99 /* main.swift */, + D72764211BF3CD3000126D99 /* Swiftline */, + D72762D61BF2C9E900126D99 /* Swiftline.h */, + D72762D81BF2C9E900126D99 /* Info.plist */, ); - path = "Sample app"; + path = Swiftline; sourceTree = ""; }; - D72762221BF29DE200126D99 /* SwiftLine */ = { + D72762E11BF2C9E900126D99 /* SwiftlineTests */ = { isa = PBXGroup; children = ( - D72762231BF29DE200126D99 /* Agree */, - D72762261BF29DE200126D99 /* Ask */, - D727622A1BF29DE200126D99 /* Choose */, - D727622D1BF29DE200126D99 /* Colorize */, - D72762331BF29DE200126D99 /* Misc */, - D72762381BF29DE200126D99 /* Runner */, + D727631F1BF2CA4C00126D99 /* ColorizerTest.swift */, + D72763201BF2CA4C00126D99 /* RunnerTests.swift */, + D72763211BF2CA4C00126D99 /* ChooseSettingsTests.swift */, + D72763221BF2CA4C00126D99 /* ChooseTests.swift */, + D72763231BF2CA4C00126D99 /* AskTests.swift */, + D72763241BF2CA4C00126D99 /* AskSettingsTests.swift */, + D72763251BF2CA4C00126D99 /* AgreeSettingsTest.swift */, + D72763261BF2CA4C00126D99 /* AgreeTests.swift */, + D72762E41BF2C9E900126D99 /* Info.plist */, ); - path = SwiftLine; + path = SwiftlineTests; sourceTree = ""; }; - D72762231BF29DE200126D99 /* Agree */ = { + D72763631BF2CB0E00126D99 /* Products */ = { isa = PBXGroup; children = ( - D72762241BF29DE200126D99 /* Agree.swift */, - D72762251BF29DE200126D99 /* AgreeSettings.swift */, + D72763701BF2CB0F00126D99 /* Nimble.framework */, + D72763721BF2CB0F00126D99 /* NimbleTests.xctest */, + D72763741BF2CB0F00126D99 /* Nimble.framework */, + D72763761BF2CB0F00126D99 /* NimbleTests.xctest */, + D72763781BF2CB0F00126D99 /* Nimble.framework */, + D727637A1BF2CB0F00126D99 /* NimbleTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + D72763661BF2CB0E00126D99 /* Products */ = { + isa = PBXGroup; + children = ( + D72763851BF2CB0F00126D99 /* Quick.framework */, + D72763871BF2CB0F00126D99 /* Quick-OSXTests.xctest */, + D72763891BF2CB0F00126D99 /* QuickFocused-OSXTests.xctest */, + D727638B1BF2CB0F00126D99 /* Quick.framework */, + D727638D1BF2CB0F00126D99 /* Quick-iOSTests.xctest */, + D727638F1BF2CB0F00126D99 /* QuickFocused-iOSTests.xctest */, + D72763911BF2CB0F00126D99 /* Quick.framework */, + D72763931BF2CB0F00126D99 /* Quick-tvOSTests.xctest */, + D72763951BF2CB0F00126D99 /* QuickFocused-tvOSTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + D72764211BF3CD3000126D99 /* Swiftline */ = { + isa = PBXGroup; + children = ( + D72764221BF3CD3000126D99 /* Agree */, + D72764251BF3CD3000126D99 /* Ask */, + D72764291BF3CD3000126D99 /* Choose */, + D727642C1BF3CD3000126D99 /* Colorize */, + D72764321BF3CD3000126D99 /* Misc */, + D72764371BF3CD3000126D99 /* Runner */, + ); + path = Swiftline; + sourceTree = ""; + }; + D72764221BF3CD3000126D99 /* Agree */ = { + isa = PBXGroup; + children = ( + D72764231BF3CD3000126D99 /* Agree.swift */, + D72764241BF3CD3000126D99 /* AgreeSettings.swift */, ); path = Agree; sourceTree = ""; }; - D72762261BF29DE200126D99 /* Ask */ = { + D72764251BF3CD3000126D99 /* Ask */ = { isa = PBXGroup; children = ( - D72762271BF29DE200126D99 /* Ask.swift */, - D72762281BF29DE200126D99 /* AskerValidator.swift */, - D72762291BF29DE200126D99 /* AskSettings.swift */, + D72764261BF3CD3000126D99 /* Ask.swift */, + D72764271BF3CD3000126D99 /* AskerValidator.swift */, + D72764281BF3CD3000126D99 /* AskSettings.swift */, ); path = Ask; sourceTree = ""; }; - D727622A1BF29DE200126D99 /* Choose */ = { + D72764291BF3CD3000126D99 /* Choose */ = { isa = PBXGroup; children = ( - D727622B1BF29DE200126D99 /* Choose.swift */, - D727622C1BF29DE200126D99 /* ChooseSettings.swift */, + D727642A1BF3CD3000126D99 /* Choose.swift */, + D727642B1BF3CD3000126D99 /* ChooseSettings.swift */, ); path = Choose; sourceTree = ""; }; - D727622D1BF29DE200126D99 /* Colorize */ = { + D727642C1BF3CD3000126D99 /* Colorize */ = { isa = PBXGroup; children = ( - D727622E1BF29DE200126D99 /* Colorizer.swift */, - D727622F1BF29DE200126D99 /* StringBackgroundColorizer.swift */, - D72762301BF29DE200126D99 /* StringForegroundColorizer.swift */, - D72762311BF29DE200126D99 /* StringStyle.swift */, - D72762321BF29DE200126D99 /* StringStyleColorizer.swift */, + D727642D1BF3CD3000126D99 /* Colorizer.swift */, + D727642E1BF3CD3000126D99 /* StringBackgroundColorizer.swift */, + D727642F1BF3CD3000126D99 /* StringForegroundColorizer.swift */, + D72764301BF3CD3000126D99 /* StringStyle.swift */, + D72764311BF3CD3000126D99 /* StringStyleColorizer.swift */, ); path = Colorize; sourceTree = ""; }; - D72762331BF29DE200126D99 /* Misc */ = { + D72764321BF3CD3000126D99 /* Misc */ = { isa = PBXGroup; children = ( - D72762341BF29DE200126D99 /* ArgConvertible.swift */, - D72762351BF29DE200126D99 /* PromptPrinter.swift */, - D72762361BF29DE200126D99 /* PromptReader.swift */, - D72762371BF29DE200126D99 /* PromptSettings.swift */, + D72764331BF3CD3000126D99 /* ArgConvertible.swift */, + D72764341BF3CD3000126D99 /* PromptPrinter.swift */, + D72764351BF3CD3000126D99 /* PromptReader.swift */, + D72764361BF3CD3000126D99 /* PromptSettings.swift */, ); path = Misc; sourceTree = ""; }; - D72762381BF29DE200126D99 /* Runner */ = { + D72764371BF3CD3000126D99 /* Runner */ = { isa = PBXGroup; children = ( - D727626F1BF29ECF00126D99 /* ShortHandRunner.swift */, - D72762391BF29DE200126D99 /* CommandExecutor.swift */, - D727623A1BF29DE200126D99 /* Runner.swift */, - D727623B1BF29DE200126D99 /* RunnerSettings.swift */, - D727623C1BF29DE200126D99 /* RunResults.swift */, - D727623D1BF29DE200126D99 /* TaskPipe.swift */, + D72764381BF3CD3000126D99 /* CommandExecutor.swift */, + D72764391BF3CD3000126D99 /* Runner.swift */, + D727643A1BF3CD3000126D99 /* RunnerSettings.swift */, + D727643B1BF3CD3000126D99 /* RunResults.swift */, + D727643C1BF3CD3000126D99 /* ShortHandRunner.swift */, + D727643D1BF3CD3000126D99 /* TaskPipe.swift */, ); path = Runner; sourceTree = ""; }; - D72762581BF29E7A00126D99 /* tests */ = { - isa = PBXGroup; - children = ( - D727625F1BF29EC400126D99 /* RunnerTests.swift */, - D72762601BF29EC400126D99 /* ChooseSettingsTests.swift */, - D72762611BF29EC400126D99 /* ChooseTests.swift */, - D72762621BF29EC400126D99 /* AskTests.swift */, - D72762631BF29EC400126D99 /* AskSettingsTests.swift */, - D72762641BF29EC400126D99 /* AgreeSettingsTest.swift */, - D72762651BF29EC400126D99 /* AgreeTests.swift */, - D72762661BF29EC400126D99 /* ColorizerTest.swift */, - D727625B1BF29E7A00126D99 /* Info.plist */, - ); - path = tests; - sourceTree = ""; - }; - EF4179A141725395317A037A /* Frameworks */ = { - isa = PBXGroup; - children = ( - 581189F7037990E32FE648EA /* Pods_tests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ -/* Begin PBXNativeTarget section */ - D72761EB1BF29CF800126D99 /* swiftline */ = { - isa = PBXNativeTarget; - buildConfigurationList = D72761F31BF29CF800126D99 /* Build configuration list for PBXNativeTarget "swiftline" */; - buildPhases = ( - D72761E81BF29CF800126D99 /* Sources */, - D72761E91BF29CF800126D99 /* Frameworks */, - D72761EA1BF29CF800126D99 /* CopyFiles */, +/* Begin PBXHeadersBuildPhase section */ + D72762D01BF2C9E900126D99 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D72762D71BF2C9E900126D99 /* Swiftline.h in Headers */, ); - buildRules = ( - ); - dependencies = ( - ); - name = swiftline; - productName = swiftline; - productReference = D72761EC1BF29CF800126D99 /* swiftline */; - productType = "com.apple.product-type.tool"; + runOnlyForDeploymentPostprocessing = 0; }; - D72762561BF29E7A00126D99 /* tests */ = { +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D72762D21BF2C9E900126D99 /* Swiftline */ = { isa = PBXNativeTarget; - buildConfigurationList = D727625C1BF29E7A00126D99 /* Build configuration list for PBXNativeTarget "tests" */; + buildConfigurationList = D72762E71BF2C9E900126D99 /* Build configuration list for PBXNativeTarget "Swiftline" */; buildPhases = ( - 01FEFD643C3EFB9E58738D75 /* Check Pods Manifest.lock */, - D72762531BF29E7A00126D99 /* Sources */, - D72762541BF29E7A00126D99 /* Frameworks */, - D72762551BF29E7A00126D99 /* Resources */, - 1844C74BA408320AAB292A96 /* Embed Pods Frameworks */, - 0E59EF7CA04E51A91AEE2734 /* Copy Pods Resources */, + D72762CE1BF2C9E900126D99 /* Sources */, + D72762CF1BF2C9E900126D99 /* Frameworks */, + D72762D01BF2C9E900126D99 /* Headers */, + D72762D11BF2C9E900126D99 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = tests; - productName = tests; - productReference = D72762571BF29E7A00126D99 /* tests.xctest */; + name = Swiftline; + productName = Swiftline; + productReference = D72762D31BF2C9E900126D99 /* Swiftline.framework */; + productType = "com.apple.product-type.framework"; + }; + D72762DC1BF2C9E900126D99 /* SwiftlineTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = D72762EA1BF2C9E900126D99 /* Build configuration list for PBXNativeTarget "SwiftlineTests" */; + buildPhases = ( + D72762D91BF2C9E900126D99 /* Sources */, + D72762DA1BF2C9E900126D99 /* Frameworks */, + D72762DB1BF2C9E900126D99 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + D72763991BF2CB2300126D99 /* PBXTargetDependency */, + D72763971BF2CB2000126D99 /* PBXTargetDependency */, + D72762E01BF2C9E900126D99 /* PBXTargetDependency */, + ); + name = SwiftlineTests; + productName = SwiftlineTests; + productReference = D72762DD1BF2C9E900126D99 /* SwiftlineTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - D72761E41BF29CF800126D99 /* Project object */ = { + D72762CA1BF2C9E900126D99 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0710; LastUpgradeCheck = 0710; ORGANIZATIONNAME = "Omar Abdelhafith"; TargetAttributes = { - D72761EB1BF29CF800126D99 = { + D72762D21BF2C9E900126D99 = { CreatedOnToolsVersion = 7.1.1; }; - D72762561BF29E7A00126D99 = { + D72762DC1BF2C9E900126D99 = { CreatedOnToolsVersion = 7.1.1; }; }; }; - buildConfigurationList = D72761E71BF29CF800126D99 /* Build configuration list for PBXProject "swiftline" */; + buildConfigurationList = D72762CD1BF2C9E900126D99 /* Build configuration list for PBXProject "Swiftline" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); - mainGroup = D72761E31BF29CF800126D99; - productRefGroup = D72761ED1BF29CF800126D99 /* Products */; + mainGroup = D72762C91BF2C9E900126D99; + productRefGroup = D72762D41BF2C9E900126D99 /* Products */; projectDirPath = ""; + projectReferences = ( + { + ProductGroup = D72763631BF2CB0E00126D99 /* Products */; + ProjectRef = D72763621BF2CB0E00126D99 /* Nimble.xcodeproj */; + }, + { + ProductGroup = D72763661BF2CB0E00126D99 /* Products */; + ProjectRef = D72763651BF2CB0E00126D99 /* Quick.xcodeproj */; + }, + ); projectRoot = ""; targets = ( - D72761EB1BF29CF800126D99 /* swiftline */, - D72762561BF29E7A00126D99 /* tests */, + D72762D21BF2C9E900126D99 /* Swiftline */, + D72762DC1BF2C9E900126D99 /* SwiftlineTests */, ); }; /* End PBXProject section */ +/* Begin PBXReferenceProxy section */ + D72763701BF2CB0F00126D99 /* Nimble.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = Nimble.framework; + remoteRef = D727636F1BF2CB0F00126D99 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + D72763721BF2CB0F00126D99 /* NimbleTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = NimbleTests.xctest; + remoteRef = D72763711BF2CB0F00126D99 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + D72763741BF2CB0F00126D99 /* Nimble.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = Nimble.framework; + remoteRef = D72763731BF2CB0F00126D99 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + D72763761BF2CB0F00126D99 /* NimbleTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = NimbleTests.xctest; + remoteRef = D72763751BF2CB0F00126D99 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + D72763781BF2CB0F00126D99 /* Nimble.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = Nimble.framework; + remoteRef = D72763771BF2CB0F00126D99 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + D727637A1BF2CB0F00126D99 /* NimbleTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = NimbleTests.xctest; + remoteRef = D72763791BF2CB0F00126D99 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + D72763851BF2CB0F00126D99 /* Quick.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = Quick.framework; + remoteRef = D72763841BF2CB0F00126D99 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + D72763871BF2CB0F00126D99 /* Quick-OSXTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = "Quick-OSXTests.xctest"; + remoteRef = D72763861BF2CB0F00126D99 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + D72763891BF2CB0F00126D99 /* QuickFocused-OSXTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = "QuickFocused-OSXTests.xctest"; + remoteRef = D72763881BF2CB0F00126D99 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + D727638B1BF2CB0F00126D99 /* Quick.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = Quick.framework; + remoteRef = D727638A1BF2CB0F00126D99 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + D727638D1BF2CB0F00126D99 /* Quick-iOSTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = "Quick-iOSTests.xctest"; + remoteRef = D727638C1BF2CB0F00126D99 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + D727638F1BF2CB0F00126D99 /* QuickFocused-iOSTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = "QuickFocused-iOSTests.xctest"; + remoteRef = D727638E1BF2CB0F00126D99 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + D72763911BF2CB0F00126D99 /* Quick.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = Quick.framework; + remoteRef = D72763901BF2CB0F00126D99 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + D72763931BF2CB0F00126D99 /* Quick-tvOSTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = "Quick-tvOSTests.xctest"; + remoteRef = D72763921BF2CB0F00126D99 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + D72763951BF2CB0F00126D99 /* QuickFocused-tvOSTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = "QuickFocused-tvOSTests.xctest"; + remoteRef = D72763941BF2CB0F00126D99 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + /* Begin PBXResourcesBuildPhase section */ - D72762551BF29E7A00126D99 /* Resources */ = { + D72762D11BF2C9E900126D99 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D72762DB1BF2C9E900126D99 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -359,126 +608,73 @@ }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXShellScriptBuildPhase section */ - 01FEFD643C3EFB9E58738D75 /* Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Check Pods Manifest.lock"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; - showEnvVarsInLog = 0; - }; - 0E59EF7CA04E51A91AEE2734 /* Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-tests/Pods-tests-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - 1844C74BA408320AAB292A96 /* Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-tests/Pods-tests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - /* Begin PBXSourcesBuildPhase section */ - D72761E81BF29CF800126D99 /* Sources */ = { + D72762CE1BF2C9E900126D99 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D72762A11BF29F7100126D99 /* AskSettings.swift in Sources */, - D72762A31BF29F7100126D99 /* ChooseSettings.swift in Sources */, - D72762AB1BF29F7100126D99 /* PromptReader.swift in Sources */, - D72762A61BF29F7100126D99 /* StringForegroundColorizer.swift in Sources */, - D72762A21BF29F7100126D99 /* Choose.swift in Sources */, - D727629D1BF29F7100126D99 /* Agree.swift in Sources */, - D72762AE1BF29F7100126D99 /* CommandExecutor.swift in Sources */, - D72762A81BF29F7100126D99 /* StringStyleColorizer.swift in Sources */, - D72762B21BF29F7100126D99 /* TaskPipe.swift in Sources */, - D72762AD1BF29F7100126D99 /* ShortHandRunner.swift in Sources */, - D727620D1BF29D5500126D99 /* main.swift in Sources */, - D72762AC1BF29F7100126D99 /* PromptSettings.swift in Sources */, - D72762A41BF29F7100126D99 /* Colorizer.swift in Sources */, - D72762B11BF29F7100126D99 /* RunResults.swift in Sources */, - D72762AA1BF29F7100126D99 /* PromptPrinter.swift in Sources */, - D72762A51BF29F7100126D99 /* StringBackgroundColorizer.swift in Sources */, - D72762B01BF29F7100126D99 /* RunnerSettings.swift in Sources */, - D72762A71BF29F7100126D99 /* StringStyle.swift in Sources */, - D727629E1BF29F7100126D99 /* AgreeSettings.swift in Sources */, - D72762A01BF29F7100126D99 /* AskerValidator.swift in Sources */, - D72762AF1BF29F7100126D99 /* Runner.swift in Sources */, - D72762A91BF29F7100126D99 /* ArgConvertible.swift in Sources */, - D727629F1BF29F7100126D99 /* Ask.swift in Sources */, + D727644C1BF3CD3000126D99 /* PromptReader.swift in Sources */, + D727644E1BF3CD3000126D99 /* CommandExecutor.swift in Sources */, + D72764481BF3CD3000126D99 /* StringStyle.swift in Sources */, + D727644F1BF3CD3000126D99 /* Runner.swift in Sources */, + D727644D1BF3CD3000126D99 /* PromptSettings.swift in Sources */, + D727643E1BF3CD3000126D99 /* Agree.swift in Sources */, + D72764491BF3CD3000126D99 /* StringStyleColorizer.swift in Sources */, + D72764521BF3CD3000126D99 /* ShortHandRunner.swift in Sources */, + D72764531BF3CD3000126D99 /* TaskPipe.swift in Sources */, + D72764441BF3CD3000126D99 /* ChooseSettings.swift in Sources */, + D727643F1BF3CD3000126D99 /* AgreeSettings.swift in Sources */, + D72764451BF3CD3000126D99 /* Colorizer.swift in Sources */, + D72764511BF3CD3000126D99 /* RunResults.swift in Sources */, + D727644B1BF3CD3000126D99 /* PromptPrinter.swift in Sources */, + D727644A1BF3CD3000126D99 /* ArgConvertible.swift in Sources */, + D72764401BF3CD3000126D99 /* Ask.swift in Sources */, + D72764501BF3CD3000126D99 /* RunnerSettings.swift in Sources */, + D72764421BF3CD3000126D99 /* AskSettings.swift in Sources */, + D72764431BF3CD3000126D99 /* Choose.swift in Sources */, + D72764471BF3CD3000126D99 /* StringForegroundColorizer.swift in Sources */, + D72764461BF3CD3000126D99 /* StringBackgroundColorizer.swift in Sources */, + D72764411BF3CD3000126D99 /* AskerValidator.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - D72762531BF29E7A00126D99 /* Sources */ = { + D72762D91BF2C9E900126D99 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D72762901BF29F6D00126D99 /* StringStyle.swift in Sources */, - D72762671BF29EC400126D99 /* RunnerTests.swift in Sources */, - D727626B1BF29EC400126D99 /* AskSettingsTests.swift in Sources */, - D72762981BF29F6D00126D99 /* Runner.swift in Sources */, - D72762961BF29F6D00126D99 /* ShortHandRunner.swift in Sources */, - D72762691BF29EC400126D99 /* ChooseTests.swift in Sources */, - D727628F1BF29F6D00126D99 /* StringForegroundColorizer.swift in Sources */, - D727628D1BF29F6D00126D99 /* Colorizer.swift in Sources */, - D727629B1BF29F6D00126D99 /* TaskPipe.swift in Sources */, - D727628E1BF29F6D00126D99 /* StringBackgroundColorizer.swift in Sources */, - D72762681BF29EC400126D99 /* ChooseSettingsTests.swift in Sources */, - D727626D1BF29EC400126D99 /* AgreeTests.swift in Sources */, - D72762881BF29F6D00126D99 /* Ask.swift in Sources */, - D72762931BF29F6D00126D99 /* PromptPrinter.swift in Sources */, - D72762861BF29F6D00126D99 /* Agree.swift in Sources */, - D72762991BF29F6D00126D99 /* RunnerSettings.swift in Sources */, - D727628A1BF29F6D00126D99 /* AskSettings.swift in Sources */, - D727628B1BF29F6D00126D99 /* Choose.swift in Sources */, - D727626A1BF29EC400126D99 /* AskTests.swift in Sources */, - D72762971BF29F6D00126D99 /* CommandExecutor.swift in Sources */, - D72762911BF29F6D00126D99 /* StringStyleColorizer.swift in Sources */, - D72762871BF29F6D00126D99 /* AgreeSettings.swift in Sources */, - D72762941BF29F6D00126D99 /* PromptReader.swift in Sources */, - D72762951BF29F6D00126D99 /* PromptSettings.swift in Sources */, - D727626C1BF29EC400126D99 /* AgreeSettingsTest.swift in Sources */, - D727628C1BF29F6D00126D99 /* ChooseSettings.swift in Sources */, - D727629A1BF29F6D00126D99 /* RunResults.swift in Sources */, - D727626E1BF29EC400126D99 /* ColorizerTest.swift in Sources */, - D72762921BF29F6D00126D99 /* ArgConvertible.swift in Sources */, - D72762891BF29F6D00126D99 /* AskerValidator.swift in Sources */, + D727632D1BF2CA4C00126D99 /* AgreeSettingsTest.swift in Sources */, + D727632A1BF2CA4C00126D99 /* ChooseTests.swift in Sources */, + D727632E1BF2CA4C00126D99 /* AgreeTests.swift in Sources */, + D72763291BF2CA4C00126D99 /* ChooseSettingsTests.swift in Sources */, + D72763271BF2CA4C00126D99 /* ColorizerTest.swift in Sources */, + D72763281BF2CA4C00126D99 /* RunnerTests.swift in Sources */, + D727632C1BF2CA4C00126D99 /* AskSettingsTests.swift in Sources */, + D727632B1BF2CA4C00126D99 /* AskTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + D72762E01BF2C9E900126D99 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = D72762D21BF2C9E900126D99 /* Swiftline */; + targetProxy = D72762DF1BF2C9E900126D99 /* PBXContainerItemProxy */; + }; + D72763971BF2CB2000126D99 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Nimble-OSX"; + targetProxy = D72763961BF2CB2000126D99 /* PBXContainerItemProxy */; + }; + D72763991BF2CB2300126D99 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Quick-OSX"; + targetProxy = D72763981BF2CB2300126D99 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin XCBuildConfiguration section */ - D72761F11BF29CF800126D99 /* Debug */ = { + D72762E51BF2C9E900126D99 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -497,6 +693,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "-"; COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -519,10 +716,12 @@ ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Debug; }; - D72761F21BF29CF800126D99 /* Release */ = { + D72762E61BF2C9E900126D99 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -541,6 +740,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "-"; COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -555,46 +755,68 @@ MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Release; }; - D72761F41BF29CF800126D99 /* Debug */ = { + D72762E81BF2C9E900126D99 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = Swiftline/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = nsomar.Swiftline; PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; }; name = Debug; }; - D72761F51BF29CF800126D99 /* Release */ = { + D72762E91BF2C9E900126D99 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = Swiftline/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = nsomar.Swiftline; PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; }; name = Release; }; - D727625D1BF29E7A00126D99 /* Debug */ = { + D72762EB1BF2C9E900126D99 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 71126CCF267C14DE6FB10B23 /* Pods-tests.debug.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = tests/Info.plist; + INFOPLIST_FILE = SwiftlineTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = nsomar.tests; + PRODUCT_BUNDLE_IDENTIFIER = nsomar.SwiftlineTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; - D727625E1BF29E7A00126D99 /* Release */ = { + D72762EC1BF2C9E900126D99 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B8891C9B781CE31AF2469E32 /* Pods-tests.release.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = tests/Info.plist; + INFOPLIST_FILE = SwiftlineTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = nsomar.tests; + PRODUCT_BUNDLE_IDENTIFIER = nsomar.SwiftlineTests; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -602,34 +824,34 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - D72761E71BF29CF800126D99 /* Build configuration list for PBXProject "swiftline" */ = { + D72762CD1BF2C9E900126D99 /* Build configuration list for PBXProject "Swiftline" */ = { isa = XCConfigurationList; buildConfigurations = ( - D72761F11BF29CF800126D99 /* Debug */, - D72761F21BF29CF800126D99 /* Release */, + D72762E51BF2C9E900126D99 /* Debug */, + D72762E61BF2C9E900126D99 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D72761F31BF29CF800126D99 /* Build configuration list for PBXNativeTarget "swiftline" */ = { + D72762E71BF2C9E900126D99 /* Build configuration list for PBXNativeTarget "Swiftline" */ = { isa = XCConfigurationList; buildConfigurations = ( - D72761F41BF29CF800126D99 /* Debug */, - D72761F51BF29CF800126D99 /* Release */, + D72762E81BF2C9E900126D99 /* Debug */, + D72762E91BF2C9E900126D99 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D727625C1BF29E7A00126D99 /* Build configuration list for PBXNativeTarget "tests" */ = { + D72762EA1BF2C9E900126D99 /* Build configuration list for PBXNativeTarget "SwiftlineTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - D727625D1BF29E7A00126D99 /* Debug */, - D727625E1BF29E7A00126D99 /* Release */, + D72762EB1BF2C9E900126D99 /* Debug */, + D72762EC1BF2C9E900126D99 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = D72761E41BF29CF800126D99 /* Project object */; + rootObject = D72762CA1BF2C9E900126D99 /* Project object */; } diff --git a/swiftline.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/swiftline.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 14aebf6..9568768 100644 --- a/swiftline.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/swiftline.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:Swiftline.xcodeproj"> diff --git a/swiftline.xcodeproj/xcshareddata/xcschemes/Swiftline.xcscheme b/swiftline.xcodeproj/xcshareddata/xcschemes/Swiftline.xcscheme new file mode 100644 index 0000000..2e6f59c --- /dev/null +++ b/swiftline.xcodeproj/xcshareddata/xcschemes/Swiftline.xcscheme @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/swiftline.xcworkspace/contents.xcworkspacedata b/swiftline.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1efedb9..0000000 --- a/swiftline.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - -