瀏覽代碼

Changed the structure of the project. All XCode related files moved to "XCode" directory.

Damian Kołakowski 10 年之前
父節點
當前提交
83ab8d59b2
共有 25 個文件被更改,包括 105 次插入1621 次删除
  1. 0 41
      Swifter.xcodeproj/project.xcworkspace/xcshareddata/Swifter.xccheckout
  2. 0 10
      Swifter.xcodeproj/project.xcworkspace/xcuserdata/damiankolakowski.xcuserdatad/WorkspaceSettings.xcsettings
  3. 0 92
      Swifter.xcodeproj/xcuserdata/damiankolakowski.xcuserdatad/xcschemes/xcschememanagement.plist
  4. 0 1352
      SwifterSampleOSX/SwiftyJSON.swift
  5. 0 0
      XCode/Resources/logo.png
  6. 105 116
      XCode/Swifter.xcodeproj/project.pbxproj
  7. 0 0
      XCode/Swifter.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  8. 0 0
      XCode/Swifter.xcodeproj/xcshareddata/xcschemes/SwifterMac.xcscheme
  9. 0 0
      XCode/Swifter.xcodeproj/xcshareddata/xcschemes/SwifteriOS.xcscheme
  10. 0 0
      XCode/SwifterMac/Info.plist
  11. 0 0
      XCode/SwifterMac/SwifterMac.h
  12. 0 0
      XCode/SwifterOSXTests/Info.plist
  13. 0 10
      XCode/SwifterSampleOSX/main.swift
  14. 0 0
      XCode/SwifterSampleiOS/AppDelegate.swift
  15. 0 0
      XCode/SwifterSampleiOS/Base.lproj/Main.storyboard
  16. 0 0
      XCode/SwifterSampleiOS/Images.xcassets/AppIcon.appiconset/Contents.json
  17. 0 0
      XCode/SwifterSampleiOS/Images.xcassets/LaunchImage.launchimage/Contents.json
  18. 0 0
      XCode/SwifterSampleiOS/Info.plist
  19. 0 0
      XCode/SwifterSampleiOS/Launch Screen.storyboard
  20. 0 0
      XCode/SwifterSampleiOS/ViewController.swift
  21. 0 0
      XCode/SwifterTestsCommon/SwifterTestsHttpParser.swift
  22. 0 0
      XCode/SwifterTestsCommon/SwifterTestsStringExtensions.swift
  23. 0 0
      XCode/SwifterTestsCommon/SwifterTestsWebSocketSession.swift
  24. 0 0
      XCode/SwifteriOS/SwifteriOS.h
  25. 0 0
      XCode/SwifteriOSTests/Info.plist

+ 0 - 41
Swifter.xcodeproj/project.xcworkspace/xcshareddata/Swifter.xccheckout

@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IDESourceControlProjectFavoriteDictionaryKey</key>
-	<false/>
-	<key>IDESourceControlProjectIdentifier</key>
-	<string>6F6EE92F-5058-4110-A55D-DFBC76A28E89</string>
-	<key>IDESourceControlProjectName</key>
-	<string>Swifter</string>
-	<key>IDESourceControlProjectOriginsDictionary</key>
-	<dict>
-		<key>75224C288D14A799245F99223249EF48FF5DC280</key>
-		<string>github.com:glock45/swifter.git</string>
-	</dict>
-	<key>IDESourceControlProjectPath</key>
-	<string>Swifter.xcodeproj</string>
-	<key>IDESourceControlProjectRelativeInstallPathDictionary</key>
-	<dict>
-		<key>75224C288D14A799245F99223249EF48FF5DC280</key>
-		<string>../..</string>
-	</dict>
-	<key>IDESourceControlProjectURL</key>
-	<string>github.com:glock45/swifter.git</string>
-	<key>IDESourceControlProjectVersion</key>
-	<integer>111</integer>
-	<key>IDESourceControlProjectWCCIdentifier</key>
-	<string>75224C288D14A799245F99223249EF48FF5DC280</string>
-	<key>IDESourceControlProjectWCConfigurations</key>
-	<array>
-		<dict>
-			<key>IDESourceControlRepositoryExtensionIdentifierKey</key>
-			<string>public.vcs.git</string>
-			<key>IDESourceControlWCCIdentifierKey</key>
-			<string>75224C288D14A799245F99223249EF48FF5DC280</string>
-			<key>IDESourceControlWCCName</key>
-			<string>swifter</string>
-		</dict>
-	</array>
-</dict>
-</plist>

+ 0 - 10
Swifter.xcodeproj/project.xcworkspace/xcuserdata/damiankolakowski.xcuserdatad/WorkspaceSettings.xcsettings

@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges</key>
-	<true/>
-	<key>SnapshotAutomaticallyBeforeSignificantChanges</key>
-	<false/>
-</dict>
-</plist>

+ 0 - 92
Swifter.xcodeproj/xcuserdata/damiankolakowski.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>SchemeUserState</key>
-	<dict>
-		<key>SwifterMac.xcscheme_^#shared#^_</key>
-		<dict>
-			<key>orderHint</key>
-			<integer>1</integer>
-		</dict>
-		<key>SwifterOSXTests.xcscheme</key>
-		<dict>
-			<key>orderHint</key>
-			<integer>4</integer>
-		</dict>
-		<key>SwifterSampleOSX.xcscheme</key>
-		<dict>
-			<key>orderHint</key>
-			<integer>2</integer>
-		</dict>
-		<key>SwifterSampleiOS.xcscheme</key>
-		<dict>
-			<key>orderHint</key>
-			<integer>3</integer>
-		</dict>
-		<key>SwifteriOS.xcscheme_^#shared#^_</key>
-		<dict>
-			<key>orderHint</key>
-			<integer>0</integer>
-		</dict>
-		<key>SwifteriOSTests.xcscheme</key>
-		<dict>
-			<key>orderHint</key>
-			<integer>5</integer>
-		</dict>
-	</dict>
-	<key>SuppressBuildableAutocreation</key>
-	<dict>
-		<key>7AE893E61C05127900A29F63</key>
-		<dict>
-			<key>primary</key>
-			<true/>
-		</dict>
-		<key>7AE893FA1C0512C400A29F63</key>
-		<dict>
-			<key>primary</key>
-			<true/>
-		</dict>
-		<key>7C6EC07F1C614051005A49B3</key>
-		<dict>
-			<key>primary</key>
-			<true/>
-		</dict>
-		<key>7C839B6D19422CFF003A6950</key>
-		<dict>
-			<key>primary</key>
-			<true/>
-		</dict>
-		<key>7C839B7F19422CFF003A6950</key>
-		<dict>
-			<key>primary</key>
-			<true/>
-		</dict>
-		<key>7CA4813A19A2EA8D0030B30D</key>
-		<dict>
-			<key>primary</key>
-			<true/>
-		</dict>
-		<key>7CCD875B1C66099B0068099B</key>
-		<dict>
-			<key>primary</key>
-			<true/>
-		</dict>
-		<key>7CCD87781C660EA30068099B</key>
-		<dict>
-			<key>primary</key>
-			<true/>
-		</dict>
-		<key>7CE581B41A36D9E300FB840F</key>
-		<dict>
-			<key>primary</key>
-			<true/>
-		</dict>
-		<key>7CEA69AD1BD271920009F783</key>
-		<dict>
-			<key>primary</key>
-			<true/>
-		</dict>
-	</dict>
-</dict>
-</plist>

+ 0 - 1352
SwifterSampleOSX/SwiftyJSON.swift

@@ -1,1352 +0,0 @@
-//  SwiftyJSON.swift
-//
-//  Copyright (c) 2014 Ruoyu Fu, Pinglin Tang
-//
-//  Permission is hereby granted, free of charge, to any person obtaining a copy
-//  of this software and associated documentation files (the "Software"), to deal
-//  in the Software without restriction, including without limitation the rights
-//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-//  copies of the Software, and to permit persons to whom the Software is
-//  furnished to do so, subject to the following conditions:
-//
-//  The above copyright notice and this permission notice shall be included in
-//  all copies or substantial portions of the Software.
-//
-//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-//  THE SOFTWARE.
-
-import Foundation
-
-// MARK: - Error
-
-///Error domain
-public let ErrorDomain: String! = "SwiftyJSONErrorDomain"
-
-///Error code
-public let ErrorUnsupportedType: Int! = 999
-public let ErrorIndexOutOfBounds: Int! = 900
-public let ErrorWrongType: Int! = 901
-public let ErrorNotExist: Int! = 500
-public let ErrorInvalidJSON: Int! = 490
-
-// MARK: - JSON Type
-
-/**
-JSON's type definitions.
-
-See http://tools.ietf.org/html/rfc7231#section-4.3
-*/
-public enum Type :Int{
-    
-    case Number
-    case String
-    case Bool
-    case Array
-    case Dictionary
-    case Null
-    case Unknown
-}
-
-// MARK: - JSON Base
-
-public struct JSON {
-    
-    /**
-    Creates a JSON using the data.
-    
-    - parameter data:  The NSData used to convert to json.Top level object in data is an NSArray or NSDictionary
-    - parameter opt:   The JSON serialization reading options. `.AllowFragments` by default.
-    - parameter error: error The NSErrorPointer used to return the error. `nil` by default.
-    
-    - returns: The created JSON
-    */
-    public init(data:NSData, options opt: NSJSONReadingOptions = .AllowFragments, error: NSErrorPointer = nil) {
-        do {
-            let object: AnyObject = try NSJSONSerialization.JSONObjectWithData(data, options: opt)
-            self.init(object)
-        } catch let aError as NSError {
-            if error != nil {
-                error.memory = aError
-            }
-            self.init(NSNull())
-        }
-    }
-    
-    /**
-    Creates a JSON using the object.
-    
-    - parameter object:  The object must have the following properties: All objects are NSString/String, NSNumber/Int/Float/Double/Bool, NSArray/Array, NSDictionary/Dictionary, or NSNull; All dictionary keys are NSStrings/String; NSNumbers are not NaN or infinity.
-    
-    - returns: The created JSON
-    */
-    public init(_ object: AnyObject) {
-        self.object = object
-    }
-    
-    /**
-    Creates a JSON from a [JSON]
-    
-    - parameter jsonArray: A Swift array of JSON objects
-    
-    - returns: The created JSON
-    */
-    public init(_ jsonArray:[JSON]) {
-        self.init(jsonArray.map { $0.object })
-    }
-    
-    /**
-    Creates a JSON from a [String: JSON]
-    
-    - parameter jsonDictionary: A Swift dictionary of JSON objects
-    
-    - returns: The created JSON
-    */
-    public init(_ jsonDictionary:[String: JSON]) {
-        var dictionary = [String: AnyObject]()
-        for (key, json) in jsonDictionary {
-            dictionary[key] = json.object
-        }
-        self.init(dictionary)
-    }
-    
-    /// Private object
-    private var rawArray: [AnyObject] = []
-    private var rawDictionary: [String : AnyObject] = [:]
-    private var rawString: String = ""
-    private var rawNumber: NSNumber = 0
-    private var rawNull: NSNull = NSNull()
-    /// Private type
-    private var _type: Type = .Null
-    /// prviate error
-    private var _error: NSError? = nil
-    
-    /// Object in JSON
-    public var object: AnyObject {
-        get {
-            switch self.type {
-            case .Array:
-                return self.rawArray
-            case .Dictionary:
-                return self.rawDictionary
-            case .String:
-                return self.rawString
-            case .Number:
-                return self.rawNumber
-            case .Bool:
-                return self.rawNumber
-            default:
-                return self.rawNull
-            }
-        }
-        set {
-            _error = nil
-            switch newValue {
-            case let number as NSNumber:
-                if number.isBool {
-                    _type = .Bool
-                } else {
-                    _type = .Number
-                }
-                self.rawNumber = number
-            case  let string as String:
-                _type = .String
-                self.rawString = string
-            case  _ as NSNull:
-                _type = .Null
-            case let array as [AnyObject]:
-                _type = .Array
-                self.rawArray = array
-            case let dictionary as [String : AnyObject]:
-                _type = .Dictionary
-                self.rawDictionary = dictionary
-            default:
-                _type = .Unknown
-                _error = NSError(domain: ErrorDomain, code: ErrorUnsupportedType, userInfo: [NSLocalizedDescriptionKey: "It is a unsupported type"])
-            }
-        }
-    }
-    
-    /// json type
-    public var type: Type { get { return _type } }
-    
-    /// Error in JSON
-    public var error: NSError? { get { return self._error } }
-    
-    /// The static null json
-    @available(*, unavailable, renamed="null")
-    public static var nullJSON: JSON { get { return null } }
-    public static var null: JSON { get { return JSON(NSNull()) } }
-}
-
-// MARK: - CollectionType, SequenceType, Indexable
-extension JSON : Swift.CollectionType, Swift.SequenceType, Swift.Indexable {
-    
-    public typealias Generator = JSONGenerator
-    
-    public typealias Index = JSONIndex
-    
-    public var startIndex: JSON.Index {
-        switch self.type {
-        case .Array:
-            return JSONIndex(arrayIndex: self.rawArray.startIndex)
-        case .Dictionary:
-            return JSONIndex(dictionaryIndex: self.rawDictionary.startIndex)
-        default:
-            return JSONIndex()
-        }
-    }
-    
-    public var endIndex: JSON.Index {
-        switch self.type {
-        case .Array:
-            return JSONIndex(arrayIndex: self.rawArray.endIndex)
-        case .Dictionary:
-            return JSONIndex(dictionaryIndex: self.rawDictionary.endIndex)
-        default:
-            return JSONIndex()
-        }
-    }
-    
-    public subscript (position: JSON.Index) -> JSON.Generator.Element {
-        switch self.type {
-        case .Array:
-            return (String(position.arrayIndex), JSON(self.rawArray[position.arrayIndex!]))
-        case .Dictionary:
-            let (key, value) = self.rawDictionary[position.dictionaryIndex!]
-            return (key, JSON(value))
-        default:
-            return ("", JSON.null)
-        }
-    }
-    
-    /// If `type` is `.Array` or `.Dictionary`, return `array.empty` or `dictonary.empty` otherwise return `false`.
-    public var isEmpty: Bool {
-        get {
-            switch self.type {
-            case .Array:
-                return self.rawArray.isEmpty
-            case .Dictionary:
-                return self.rawDictionary.isEmpty
-            default:
-                return true
-            }
-        }
-    }
-    
-    /// If `type` is `.Array` or `.Dictionary`, return `array.count` or `dictonary.count` otherwise return `0`.
-    public var count: Int {
-        switch self.type {
-        case .Array:
-            return self.rawArray.count
-        case .Dictionary:
-            return self.rawDictionary.count
-        default:
-            return 0
-        }
-    }
-    
-    public func underestimateCount() -> Int {
-        switch self.type {
-        case .Array:
-            return self.rawArray.underestimateCount()
-        case .Dictionary:
-            return self.rawDictionary.underestimateCount()
-        default:
-            return 0
-        }
-    }
-    
-    /**
-    If `type` is `.Array` or `.Dictionary`, return a generator over the elements like `Array` or `Dictionary`, otherwise return a generator over empty.
-    
-    - returns: Return a *generator* over the elements of JSON.
-    */
-    public func generate() -> JSON.Generator {
-        return JSON.Generator(self)
-    }
-}
-
-public struct JSONIndex: ForwardIndexType, _Incrementable, Equatable, Comparable {
-    
-    let arrayIndex: Int?
-    let dictionaryIndex: DictionaryIndex<String, AnyObject>?
-    
-    let type: Type
-    
-    init(){
-        self.arrayIndex = nil
-        self.dictionaryIndex = nil
-        self.type = .Unknown
-    }
-    
-    init(arrayIndex: Int) {
-        self.arrayIndex = arrayIndex
-        self.dictionaryIndex = nil
-        self.type = .Array
-    }
-    
-    init(dictionaryIndex: DictionaryIndex<String, AnyObject>) {
-        self.arrayIndex = nil
-        self.dictionaryIndex = dictionaryIndex
-        self.type = .Dictionary
-    }
-    
-    public func successor() -> JSONIndex {
-        switch self.type {
-        case .Array:
-            return JSONIndex(arrayIndex: self.arrayIndex!.successor())
-        case .Dictionary:
-            return JSONIndex(dictionaryIndex: self.dictionaryIndex!.successor())
-        default:
-            return JSONIndex()
-        }
-    }
-}
-
-public func ==(lhs: JSONIndex, rhs: JSONIndex) -> Bool {
-    switch (lhs.type, rhs.type) {
-    case (.Array, .Array):
-        return lhs.arrayIndex == rhs.arrayIndex
-    case (.Dictionary, .Dictionary):
-        return lhs.dictionaryIndex == rhs.dictionaryIndex
-    default:
-        return false
-    }
-}
-
-public func <(lhs: JSONIndex, rhs: JSONIndex) -> Bool {
-    switch (lhs.type, rhs.type) {
-    case (.Array, .Array):
-        return lhs.arrayIndex < rhs.arrayIndex
-    case (.Dictionary, .Dictionary):
-        return lhs.dictionaryIndex < rhs.dictionaryIndex
-    default:
-        return false
-    }
-}
-
-public func <=(lhs: JSONIndex, rhs: JSONIndex) -> Bool {
-    switch (lhs.type, rhs.type) {
-    case (.Array, .Array):
-        return lhs.arrayIndex <= rhs.arrayIndex
-    case (.Dictionary, .Dictionary):
-        return lhs.dictionaryIndex <= rhs.dictionaryIndex
-    default:
-        return false
-    }
-}
-
-public func >=(lhs: JSONIndex, rhs: JSONIndex) -> Bool {
-    switch (lhs.type, rhs.type) {
-    case (.Array, .Array):
-        return lhs.arrayIndex >= rhs.arrayIndex
-    case (.Dictionary, .Dictionary):
-        return lhs.dictionaryIndex >= rhs.dictionaryIndex
-    default:
-        return false
-    }
-}
-
-public func >(lhs: JSONIndex, rhs: JSONIndex) -> Bool {
-    switch (lhs.type, rhs.type) {
-    case (.Array, .Array):
-        return lhs.arrayIndex > rhs.arrayIndex
-    case (.Dictionary, .Dictionary):
-        return lhs.dictionaryIndex > rhs.dictionaryIndex
-    default:
-        return false
-    }
-}
-
-public struct JSONGenerator : GeneratorType {
-    
-    public typealias Element = (String, JSON)
-    
-    private let type: Type
-    private var dictionayGenerate: DictionaryGenerator<String, AnyObject>?
-    private var arrayGenerate: IndexingGenerator<[AnyObject]>?
-    private var arrayIndex: Int = 0
-    
-    init(_ json: JSON) {
-        self.type = json.type
-        if type == .Array {
-            self.arrayGenerate = json.rawArray.generate()
-        }else {
-            self.dictionayGenerate = json.rawDictionary.generate()
-        }
-    }
-    
-    public mutating func next() -> JSONGenerator.Element? {
-        switch self.type {
-        case .Array:
-            if let o = self.arrayGenerate!.next() {
-                return (String(self.arrayIndex++), JSON(o))
-            } else {
-                return nil
-            }
-        case .Dictionary:
-            if let (k, v): (String, AnyObject) = self.dictionayGenerate!.next() {
-                return (k, JSON(v))
-            } else {
-                return nil
-            }
-        default:
-            return nil
-        }
-    }
-}
-
-// MARK: - Subscript
-
-/**
-*  To mark both String and Int can be used in subscript.
-*/
-public protocol JSONSubscriptType {}
-
-extension Int: JSONSubscriptType {}
-
-extension String: JSONSubscriptType {}
-
-extension JSON {
-    
-    /// If `type` is `.Array`, return json which's object is `array[index]`, otherwise return null json with error.
-    private subscript(index index: Int) -> JSON {
-        get {
-            if self.type != .Array {
-                var r = JSON.null
-                r._error = self._error ?? NSError(domain: ErrorDomain, code: ErrorWrongType, userInfo: [NSLocalizedDescriptionKey: "Array[\(index)] failure, It is not an array"])
-                return r
-            } else if index >= 0 && index < self.rawArray.count {
-                return JSON(self.rawArray[index])
-            } else {
-                var r = JSON.null
-                r._error = NSError(domain: ErrorDomain, code:ErrorIndexOutOfBounds , userInfo: [NSLocalizedDescriptionKey: "Array[\(index)] is out of bounds"])
-                return r
-            }
-        }
-        set {
-            if self.type == .Array {
-                if self.rawArray.count > index && newValue.error == nil {
-                    self.rawArray[index] = newValue.object
-                }
-            }
-        }
-    }
-    
-    /// If `type` is `.Dictionary`, return json which's object is `dictionary[key]` , otherwise return null json with error.
-    private subscript(key key: String) -> JSON {
-        get {
-            var r = JSON.null
-            if self.type == .Dictionary {
-                if let o = self.rawDictionary[key] {
-                    r = JSON(o)
-                } else {
-                    r._error = NSError(domain: ErrorDomain, code: ErrorNotExist, userInfo: [NSLocalizedDescriptionKey: "Dictionary[\"\(key)\"] does not exist"])
-                }
-            } else {
-                r._error = self._error ?? NSError(domain: ErrorDomain, code: ErrorWrongType, userInfo: [NSLocalizedDescriptionKey: "Dictionary[\"\(key)\"] failure, It is not an dictionary"])
-            }
-            return r
-        }
-        set {
-            if self.type == .Dictionary && newValue.error == nil {
-                self.rawDictionary[key] = newValue.object
-            }
-        }
-    }
-    
-    /// If `sub` is `Int`, return `subscript(index:)`; If `sub` is `String`,  return `subscript(key:)`.
-    private subscript(sub sub: JSONSubscriptType) -> JSON {
-        get {
-            if sub is String {
-                return self[key:sub as! String]
-            } else {
-                return self[index:sub as! Int]
-            }
-        }
-        set {
-            if sub is String {
-                self[key:sub as! String] = newValue
-            } else {
-                self[index:sub as! Int] = newValue
-            }
-        }
-    }
-    
-    /**
-    Find a json in the complex data structuresby using the Int/String's array.
-    
-    - parameter path: The target json's path. Example:
-    
-    let json = JSON[data]
-    let path = [9,"list","person","name"]
-    let name = json[path]
-    
-    The same as: let name = json[9]["list"]["person"]["name"]
-    
-    - returns: Return a json found by the path or a null json with error
-    */
-    public subscript(path: [JSONSubscriptType]) -> JSON {
-        get {
-            return path.reduce(self) { $0[sub: $1] }
-        }
-        set {
-            switch path.count {
-            case 0:
-                return
-            case 1:
-                self[sub:path[0]].object = newValue.object
-            default:
-                var aPath = path; aPath.removeAtIndex(0)
-                var nextJSON = self[sub: path[0]]
-                nextJSON[aPath] = newValue
-                self[sub: path[0]] = nextJSON
-            }
-        }
-    }
-    
-    /**
-    Find a json in the complex data structuresby using the Int/String's array.
-    
-    - parameter path: The target json's path. Example:
-    
-    let name = json[9,"list","person","name"]
-    
-    The same as: let name = json[9]["list"]["person"]["name"]
-    
-    - returns: Return a json found by the path or a null json with error
-    */
-    public subscript(path: JSONSubscriptType...) -> JSON {
-        get {
-            return self[path]
-        }
-        set {
-            self[path] = newValue
-        }
-    }
-}
-
-// MARK: - LiteralConvertible
-
-extension JSON: Swift.StringLiteralConvertible {
-    
-    public init(stringLiteral value: StringLiteralType) {
-        self.init(value)
-    }
-    
-    public init(extendedGraphemeClusterLiteral value: StringLiteralType) {
-        self.init(value)
-    }
-    
-    public init(unicodeScalarLiteral value: StringLiteralType) {
-        self.init(value)
-    }
-}
-
-extension JSON: Swift.IntegerLiteralConvertible {
-    
-    public init(integerLiteral value: IntegerLiteralType) {
-        self.init(value)
-    }
-}
-
-extension JSON: Swift.BooleanLiteralConvertible {
-    
-    public init(booleanLiteral value: BooleanLiteralType) {
-        self.init(value)
-    }
-}
-
-extension JSON: Swift.FloatLiteralConvertible {
-    
-    public init(floatLiteral value: FloatLiteralType) {
-        self.init(value)
-    }
-}
-
-extension JSON: Swift.DictionaryLiteralConvertible {
-    
-    public init(dictionaryLiteral elements: (String, AnyObject)...) {
-        self.init(elements.reduce([String : AnyObject]()){(dictionary: [String : AnyObject], element:(String, AnyObject)) -> [String : AnyObject] in
-            var d = dictionary
-            d[element.0] = element.1
-            return d
-            })
-    }
-}
-
-extension JSON: Swift.ArrayLiteralConvertible {
-    
-    public init(arrayLiteral elements: AnyObject...) {
-        self.init(elements)
-    }
-}
-
-extension JSON: Swift.NilLiteralConvertible {
-    
-    public init(nilLiteral: ()) {
-        self.init(NSNull())
-    }
-}
-
-// MARK: - Raw
-
-extension JSON: Swift.RawRepresentable {
-    
-    public init?(rawValue: AnyObject) {
-        if JSON(rawValue).type == .Unknown {
-            return nil
-        } else {
-            self.init(rawValue)
-        }
-    }
-    
-    public var rawValue: AnyObject {
-        return self.object
-    }
-    
-    public func rawData(options opt: NSJSONWritingOptions = NSJSONWritingOptions(rawValue: 0)) throws -> NSData {
-        guard NSJSONSerialization.isValidJSONObject(self.object) else {
-            throw NSError(domain: ErrorDomain, code: ErrorInvalidJSON, userInfo: [NSLocalizedDescriptionKey: "JSON is invalid"])
-        }
-        
-        return try NSJSONSerialization.dataWithJSONObject(self.object, options: opt)
-    }
-    
-    public func rawString(encoding: UInt = NSUTF8StringEncoding, options opt: NSJSONWritingOptions = .PrettyPrinted) -> String? {
-        switch self.type {
-        case .Array, .Dictionary:
-            do {
-                let data = try self.rawData(options: opt)
-                return NSString(data: data, encoding: encoding) as? String
-            } catch _ {
-                return nil
-            }
-        case .String:
-            return self.rawString
-        case .Number:
-            return self.rawNumber.stringValue
-        case .Bool:
-            return self.rawNumber.boolValue.description
-        case .Null:
-            return "null"
-        default:
-            return nil
-        }
-    }
-}
-
-// MARK: - Printable, DebugPrintable
-
-extension JSON: Swift.Printable, Swift.DebugPrintable {
-    
-    public var description: String {
-        if let string = self.rawString(options:.PrettyPrinted) {
-            return string
-        } else {
-            return "unknown"
-        }
-    }
-    
-    public var debugDescription: String {
-        return description
-    }
-}
-
-// MARK: - Array
-
-extension JSON {
-    
-    //Optional [JSON]
-    public var array: [JSON]? {
-        get {
-            if self.type == .Array {
-                return self.rawArray.map{ JSON($0) }
-            } else {
-                return nil
-            }
-        }
-    }
-    
-    //Non-optional [JSON]
-    public var arrayValue: [JSON] {
-        get {
-            return self.array ?? []
-        }
-    }
-    
-    //Optional [AnyObject]
-    public var arrayObject: [AnyObject]? {
-        get {
-            switch self.type {
-            case .Array:
-                return self.rawArray
-            default:
-                return nil
-            }
-        }
-        set {
-            if let array = newValue {
-                self.object = array
-            } else {
-                self.object = NSNull()
-            }
-        }
-    }
-}
-
-// MARK: - Dictionary
-
-extension JSON {
-    
-    //Optional [String : JSON]
-    public var dictionary: [String : JSON]? {
-        if self.type == .Dictionary {
-            return self.rawDictionary.reduce([String : JSON]()) { (dictionary: [String : JSON], element: (String, AnyObject)) -> [String : JSON] in
-                var d = dictionary
-                d[element.0] = JSON(element.1)
-                return d
-            }
-        } else {
-            return nil
-        }
-    }
-    
-    //Non-optional [String : JSON]
-    public var dictionaryValue: [String : JSON] {
-        return self.dictionary ?? [:]
-    }
-    
-    //Optional [String : AnyObject]
-    public var dictionaryObject: [String : AnyObject]? {
-        get {
-            switch self.type {
-            case .Dictionary:
-                return self.rawDictionary
-            default:
-                return nil
-            }
-        }
-        set {
-            if let v = newValue {
-                self.object = v
-            } else {
-                self.object = NSNull()
-            }
-        }
-    }
-}
-
-// MARK: - Bool
-
-extension JSON: Swift.BooleanType {
-    
-    //Optional bool
-    public var bool: Bool? {
-        get {
-            switch self.type {
-            case .Bool:
-                return self.rawNumber.boolValue
-            default:
-                return nil
-            }
-        }
-        set {
-            if newValue != nil {
-                self.object = NSNumber(bool: newValue!)
-            } else {
-                self.object = NSNull()
-            }
-        }
-    }
-    
-    //Non-optional bool
-    public var boolValue: Bool {
-        get {
-            switch self.type {
-            case .Bool, .Number, .String:
-                return self.object.boolValue
-            default:
-                return false
-            }
-        }
-        set {
-            self.object = NSNumber(bool: newValue)
-        }
-    }
-}
-
-// MARK: - String
-
-extension JSON {
-    
-    //Optional string
-    public var string: String? {
-        get {
-            switch self.type {
-            case .String:
-                return self.object as? String
-            default:
-                return nil
-            }
-        }
-        set {
-            if newValue != nil {
-                self.object = NSString(string:newValue!)
-            } else {
-                self.object = NSNull()
-            }
-        }
-    }
-    
-    //Non-optional string
-    public var stringValue: String {
-        get {
-            switch self.type {
-            case .String:
-                return self.object as! String
-            case .Number:
-                return self.object.stringValue
-            case .Bool:
-                return (self.object as! Bool).description
-            default:
-                return ""
-            }
-        }
-        set {
-            self.object = NSString(string:newValue)
-        }
-    }
-}
-
-// MARK: - Number
-extension JSON {
-    
-    //Optional number
-    public var number: NSNumber? {
-        get {
-            switch self.type {
-            case .Number, .Bool:
-                return self.rawNumber
-            default:
-                return nil
-            }
-        }
-        set {
-            self.object = newValue ?? NSNull()
-        }
-    }
-    
-    //Non-optional number
-    public var numberValue: NSNumber {
-        get {
-            switch self.type {
-            case .String:
-                let decimal = NSDecimalNumber(string: self.object as? String)
-                if decimal == NSDecimalNumber.notANumber() {  // indicates parse error
-                    return NSDecimalNumber.zero()
-                }
-                return decimal
-            case .Number, .Bool:
-                return self.object as! NSNumber
-            default:
-                return NSNumber(double: 0.0)
-            }
-        }
-        set {
-            self.object = newValue
-        }
-    }
-}
-
-//MARK: - Null
-extension JSON {
-    
-    public var null: NSNull? {
-        get {
-            switch self.type {
-            case .Null:
-                return self.rawNull
-            default:
-                return nil
-            }
-        }
-        set {
-            self.object = NSNull()
-        }
-    }
-    public func isExists() -> Bool{
-        if let errorValue = error where errorValue.code == ErrorNotExist{
-            return false
-        }
-        return true
-    }
-}
-
-//MARK: - URL
-extension JSON {
-    
-    //Optional URL
-    public var URL: NSURL? {
-        get {
-            switch self.type {
-            case .String:
-                if let encodedString_ = self.rawString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) {
-                    return NSURL(string: encodedString_)
-                } else {
-                    return nil
-                }
-            default:
-                return nil
-            }
-        }
-        set {
-            self.object = newValue?.absoluteString ?? NSNull()
-        }
-    }
-}
-
-// MARK: - Int, Double, Float, Int8, Int16, Int32, Int64
-
-extension JSON {
-    
-    public var double: Double? {
-        get {
-            return self.number?.doubleValue
-        }
-        set {
-            if newValue != nil {
-                self.object = NSNumber(double: newValue!)
-            } else {
-                self.object = NSNull()
-            }
-        }
-    }
-    
-    public var doubleValue: Double {
-        get {
-            return self.numberValue.doubleValue
-        }
-        set {
-            self.object = NSNumber(double: newValue)
-        }
-    }
-    
-    public var float: Float? {
-        get {
-            return self.number?.floatValue
-        }
-        set {
-            if newValue != nil {
-                self.object = NSNumber(float: newValue!)
-            } else {
-                self.object = NSNull()
-            }
-        }
-    }
-    
-    public var floatValue: Float {
-        get {
-            return self.numberValue.floatValue
-        }
-        set {
-            self.object = NSNumber(float: newValue)
-        }
-    }
-    
-    public var int: Int? {
-        get {
-            return self.number?.longValue
-        }
-        set {
-            if newValue != nil {
-                self.object = NSNumber(integer: newValue!)
-            } else {
-                self.object = NSNull()
-            }
-        }
-    }
-    
-    public var intValue: Int {
-        get {
-            return self.numberValue.integerValue
-        }
-        set {
-            self.object = NSNumber(integer: newValue)
-        }
-    }
-    
-    public var uInt: UInt? {
-        get {
-            return self.number?.unsignedLongValue
-        }
-        set {
-            if newValue != nil {
-                self.object = NSNumber(unsignedLong: newValue!)
-            } else {
-                self.object = NSNull()
-            }
-        }
-    }
-    
-    public var uIntValue: UInt {
-        get {
-            return self.numberValue.unsignedLongValue
-        }
-        set {
-            self.object = NSNumber(unsignedLong: newValue)
-        }
-    }
-    
-    public var int8: Int8? {
-        get {
-            return self.number?.charValue
-        }
-        set {
-            if newValue != nil {
-                self.object = NSNumber(char: newValue!)
-            } else {
-                self.object =  NSNull()
-            }
-        }
-    }
-    
-    public var int8Value: Int8 {
-        get {
-            return self.numberValue.charValue
-        }
-        set {
-            self.object = NSNumber(char: newValue)
-        }
-    }
-    
-    public var uInt8: UInt8? {
-        get {
-            return self.number?.unsignedCharValue
-        }
-        set {
-            if newValue != nil {
-                self.object = NSNumber(unsignedChar: newValue!)
-            } else {
-                self.object =  NSNull()
-            }
-        }
-    }
-    
-    public var uInt8Value: UInt8 {
-        get {
-            return self.numberValue.unsignedCharValue
-        }
-        set {
-            self.object = NSNumber(unsignedChar: newValue)
-        }
-    }
-    
-    public var int16: Int16? {
-        get {
-            return self.number?.shortValue
-        }
-        set {
-            if newValue != nil {
-                self.object = NSNumber(short: newValue!)
-            } else {
-                self.object =  NSNull()
-            }
-        }
-    }
-    
-    public var int16Value: Int16 {
-        get {
-            return self.numberValue.shortValue
-        }
-        set {
-            self.object = NSNumber(short: newValue)
-        }
-    }
-    
-    public var uInt16: UInt16? {
-        get {
-            return self.number?.unsignedShortValue
-        }
-        set {
-            if newValue != nil {
-                self.object = NSNumber(unsignedShort: newValue!)
-            } else {
-                self.object =  NSNull()
-            }
-        }
-    }
-    
-    public var uInt16Value: UInt16 {
-        get {
-            return self.numberValue.unsignedShortValue
-        }
-        set {
-            self.object = NSNumber(unsignedShort: newValue)
-        }
-    }
-    
-    public var int32: Int32? {
-        get {
-            return self.number?.intValue
-        }
-        set {
-            if newValue != nil {
-                self.object = NSNumber(int: newValue!)
-            } else {
-                self.object =  NSNull()
-            }
-        }
-    }
-    
-    public var int32Value: Int32 {
-        get {
-            return self.numberValue.intValue
-        }
-        set {
-            self.object = NSNumber(int: newValue)
-        }
-    }
-    
-    public var uInt32: UInt32? {
-        get {
-            return self.number?.unsignedIntValue
-        }
-        set {
-            if newValue != nil {
-                self.object = NSNumber(unsignedInt: newValue!)
-            } else {
-                self.object =  NSNull()
-            }
-        }
-    }
-    
-    public var uInt32Value: UInt32 {
-        get {
-            return self.numberValue.unsignedIntValue
-        }
-        set {
-            self.object = NSNumber(unsignedInt: newValue)
-        }
-    }
-    
-    public var int64: Int64? {
-        get {
-            return self.number?.longLongValue
-        }
-        set {
-            if newValue != nil {
-                self.object = NSNumber(longLong: newValue!)
-            } else {
-                self.object =  NSNull()
-            }
-        }
-    }
-    
-    public var int64Value: Int64 {
-        get {
-            return self.numberValue.longLongValue
-        }
-        set {
-            self.object = NSNumber(longLong: newValue)
-        }
-    }
-    
-    public var uInt64: UInt64? {
-        get {
-            return self.number?.unsignedLongLongValue
-        }
-        set {
-            if newValue != nil {
-                self.object = NSNumber(unsignedLongLong: newValue!)
-            } else {
-                self.object =  NSNull()
-            }
-        }
-    }
-    
-    public var uInt64Value: UInt64 {
-        get {
-            return self.numberValue.unsignedLongLongValue
-        }
-        set {
-            self.object = NSNumber(unsignedLongLong: newValue)
-        }
-    }
-}
-
-//MARK: - Comparable
-extension JSON : Swift.Comparable {}
-
-public func ==(lhs: JSON, rhs: JSON) -> Bool {
-    
-    switch (lhs.type, rhs.type) {
-    case (.Number, .Number):
-        return lhs.rawNumber == rhs.rawNumber
-    case (.String, .String):
-        return lhs.rawString == rhs.rawString
-    case (.Bool, .Bool):
-        return lhs.rawNumber.boolValue == rhs.rawNumber.boolValue
-    case (.Array, .Array):
-        return lhs.rawArray as NSArray == rhs.rawArray as NSArray
-    case (.Dictionary, .Dictionary):
-        return lhs.rawDictionary as NSDictionary == rhs.rawDictionary as NSDictionary
-    case (.Null, .Null):
-        return true
-    default:
-        return false
-    }
-}
-
-public func <=(lhs: JSON, rhs: JSON) -> Bool {
-    
-    switch (lhs.type, rhs.type) {
-    case (.Number, .Number):
-        return lhs.rawNumber <= rhs.rawNumber
-    case (.String, .String):
-        return lhs.rawString <= rhs.rawString
-    case (.Bool, .Bool):
-        return lhs.rawNumber.boolValue == rhs.rawNumber.boolValue
-    case (.Array, .Array):
-        return lhs.rawArray as NSArray == rhs.rawArray as NSArray
-    case (.Dictionary, .Dictionary):
-        return lhs.rawDictionary as NSDictionary == rhs.rawDictionary as NSDictionary
-    case (.Null, .Null):
-        return true
-    default:
-        return false
-    }
-}
-
-public func >=(lhs: JSON, rhs: JSON) -> Bool {
-    
-    switch (lhs.type, rhs.type) {
-    case (.Number, .Number):
-        return lhs.rawNumber >= rhs.rawNumber
-    case (.String, .String):
-        return lhs.rawString >= rhs.rawString
-    case (.Bool, .Bool):
-        return lhs.rawNumber.boolValue == rhs.rawNumber.boolValue
-    case (.Array, .Array):
-        return lhs.rawArray as NSArray == rhs.rawArray as NSArray
-    case (.Dictionary, .Dictionary):
-        return lhs.rawDictionary as NSDictionary == rhs.rawDictionary as NSDictionary
-    case (.Null, .Null):
-        return true
-    default:
-        return false
-    }
-}
-
-public func >(lhs: JSON, rhs: JSON) -> Bool {
-    
-    switch (lhs.type, rhs.type) {
-    case (.Number, .Number):
-        return lhs.rawNumber > rhs.rawNumber
-    case (.String, .String):
-        return lhs.rawString > rhs.rawString
-    default:
-        return false
-    }
-}
-
-public func <(lhs: JSON, rhs: JSON) -> Bool {
-    
-    switch (lhs.type, rhs.type) {
-    case (.Number, .Number):
-        return lhs.rawNumber < rhs.rawNumber
-    case (.String, .String):
-        return lhs.rawString < rhs.rawString
-    default:
-        return false
-    }
-}
-
-private let trueNumber = NSNumber(bool: true)
-private let falseNumber = NSNumber(bool: false)
-private let trueObjCType = String.fromCString(trueNumber.objCType)
-private let falseObjCType = String.fromCString(falseNumber.objCType)
-
-// MARK: - NSNumber: Comparable
-
-extension NSNumber {
-    var isBool:Bool {
-        get {
-            let objCType = String.fromCString(self.objCType)
-            if (self.compare(trueNumber) == NSComparisonResult.OrderedSame && objCType == trueObjCType)
-                || (self.compare(falseNumber) == NSComparisonResult.OrderedSame && objCType == falseObjCType){
-                    return true
-            } else {
-                return false
-            }
-        }
-    }
-}
-
-public func ==(lhs: NSNumber, rhs: NSNumber) -> Bool {
-    switch (lhs.isBool, rhs.isBool) {
-    case (false, true):
-        return false
-    case (true, false):
-        return false
-    default:
-        return lhs.compare(rhs) == NSComparisonResult.OrderedSame
-    }
-}
-
-public func !=(lhs: NSNumber, rhs: NSNumber) -> Bool {
-    return !(lhs == rhs)
-}
-
-public func <(lhs: NSNumber, rhs: NSNumber) -> Bool {
-    
-    switch (lhs.isBool, rhs.isBool) {
-    case (false, true):
-        return false
-    case (true, false):
-        return false
-    default:
-        return lhs.compare(rhs) == NSComparisonResult.OrderedAscending
-    }
-}
-
-public func >(lhs: NSNumber, rhs: NSNumber) -> Bool {
-    
-    switch (lhs.isBool, rhs.isBool) {
-    case (false, true):
-        return false
-    case (true, false):
-        return false
-    default:
-        return lhs.compare(rhs) == NSComparisonResult.OrderedDescending
-    }
-}
-
-public func <=(lhs: NSNumber, rhs: NSNumber) -> Bool {
-    
-    switch (lhs.isBool, rhs.isBool) {
-    case (false, true):
-        return false
-    case (true, false):
-        return false
-    default:
-        return lhs.compare(rhs) != NSComparisonResult.OrderedDescending
-    }
-}
-
-public func >=(lhs: NSNumber, rhs: NSNumber) -> Bool {
-    
-    switch (lhs.isBool, rhs.isBool) {
-    case (false, true):
-        return false
-    case (true, false):
-        return false
-    default:
-        return lhs.compare(rhs) != NSComparisonResult.OrderedAscending
-    }
-}

+ 0 - 0
Resources/logo.png → XCode/Resources/logo.png


+ 105 - 116
Swifter.xcodeproj/project.pbxproj → XCode/Swifter.xcodeproj/project.pbxproj

@@ -10,54 +10,50 @@
 		7AE893EA1C05127900A29F63 /* SwifteriOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AE893E91C05127900A29F63 /* SwifteriOS.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		7AE893FE1C0512C400A29F63 /* SwifterMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AE893FD1C0512C400A29F63 /* SwifterMac.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		7AE8940D1C05151100A29F63 /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7AE8940C1C05151100A29F63 /* Launch Screen.storyboard */; };
-		7C1A2BFB1C5605F50026D3BF /* String+BASE64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C1A2BFA1C5605F50026D3BF /* String+BASE64.swift */; };
-		7C1A2BFC1C5605F50026D3BF /* String+BASE64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C1A2BFA1C5605F50026D3BF /* String+BASE64.swift */; };
-		7C2BEC781C518B7C00B8EE90 /* String+SHA1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C2BEC771C518B7C00B8EE90 /* String+SHA1.swift */; };
-		7C2BEC791C5195EE00B8EE90 /* String+SHA1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C2BEC771C518B7C00B8EE90 /* String+SHA1.swift */; };
-		7C2BEC7A1C5195F200B8EE90 /* String+SHA1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C2BEC771C518B7C00B8EE90 /* String+SHA1.swift */; };
 		7C4785E91C71D15600A9FE73 /* SwifterTestsWebSocketSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C4785E81C71D15600A9FE73 /* SwifterTestsWebSocketSession.swift */; };
 		7C4785EA1C71D15600A9FE73 /* SwifterTestsWebSocketSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C4785E81C71D15600A9FE73 /* SwifterTestsWebSocketSession.swift */; };
 		7C71C5B11A1EC49B00682BF0 /* logo.png in CopyFiles */ = {isa = PBXBuildFile; fileRef = 7CB102DF1A17381D00CBA3B4 /* logo.png */; };
-		7C73C6911C2615FE00AEF6CA /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18E610A51BD6397D00B7D17A /* SwiftyJSON.swift */; };
 		7C73C6921C26179C00AEF6CA /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CDAB80C1BE2A1D400C8A977 /* AppDelegate.swift */; };
-		7C73C6AA1C261A2100AEF6CA /* DemoServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C6941C2619E100AEF6CA /* DemoServer.swift */; };
-		7C73C6AC1C261A2100AEF6CA /* HttpParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C6961C2619E100AEF6CA /* HttpParser.swift */; };
-		7C73C6AD1C261A2100AEF6CA /* HttpRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C6971C2619E100AEF6CA /* HttpRequest.swift */; };
-		7C73C6AE1C261A2100AEF6CA /* HttpResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C6981C2619E100AEF6CA /* HttpResponse.swift */; };
-		7C73C6AF1C261A2100AEF6CA /* HttpRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C6991C2619E100AEF6CA /* HttpRouter.swift */; };
-		7C73C6B01C261A2100AEF6CA /* HttpServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C69A1C2619E100AEF6CA /* HttpServer.swift */; };
-		7C73C6B11C261A2100AEF6CA /* HttpServerIO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C69B1C2619E100AEF6CA /* HttpServerIO.swift */; };
-		7C73C6B21C261A2100AEF6CA /* Socket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C69C1C2619E100AEF6CA /* Socket.swift */; };
-		7C73C6B31C261A2100AEF6CA /* String+Misc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C69D1C2619E100AEF6CA /* String+Misc.swift */; };
-		7C73C6B51C261A2600AEF6CA /* DemoServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C6941C2619E100AEF6CA /* DemoServer.swift */; };
-		7C73C6B71C261A2600AEF6CA /* HttpParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C6961C2619E100AEF6CA /* HttpParser.swift */; };
-		7C73C6B81C261A2600AEF6CA /* HttpRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C6971C2619E100AEF6CA /* HttpRequest.swift */; };
-		7C73C6B91C261A2600AEF6CA /* HttpResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C6981C2619E100AEF6CA /* HttpResponse.swift */; };
-		7C73C6BA1C261A2600AEF6CA /* HttpRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C6991C2619E100AEF6CA /* HttpRouter.swift */; };
-		7C73C6BB1C261A2600AEF6CA /* HttpServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C69A1C2619E100AEF6CA /* HttpServer.swift */; };
-		7C73C6BC1C261A2600AEF6CA /* HttpServerIO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C69B1C2619E100AEF6CA /* HttpServerIO.swift */; };
-		7C73C6BD1C261A2600AEF6CA /* Socket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C69C1C2619E100AEF6CA /* Socket.swift */; };
-		7C73C6BE1C261A2600AEF6CA /* String+Misc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C73C69D1C2619E100AEF6CA /* String+Misc.swift */; };
-		7C76B6DE1D2BB1050030FC98 /* Scopes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6DD1D2BB1050030FC98 /* Scopes.swift */; };
-		7C76B6DF1D2BB1050030FC98 /* Scopes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6DD1D2BB1050030FC98 /* Scopes.swift */; };
-		7C76B6E31D2BB1320030FC98 /* Process.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6E21D2BB1320030FC98 /* Process.swift */; };
-		7C76B6E41D2BB1320030FC98 /* Process.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6E21D2BB1320030FC98 /* Process.swift */; };
-		7C76B6E51D2BB1320030FC98 /* Process.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6E21D2BB1320030FC98 /* Process.swift */; };
-		7C76B6E61D2BB1320030FC98 /* Process.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6E21D2BB1320030FC98 /* Process.swift */; };
+		7C76B70D1D2C456A0030FC98 /* DemoServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6EA1D2C44F30030FC98 /* DemoServer.swift */; };
+		7C76B70E1D2C456B0030FC98 /* DemoServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6EA1D2C44F30030FC98 /* DemoServer.swift */; };
+		7C76B70F1D2C456D0030FC98 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6EB1D2C44F30030FC98 /* File.swift */; };
+		7C76B7101D2C456D0030FC98 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6EB1D2C44F30030FC98 /* File.swift */; };
+		7C76B7111D2C45710030FC98 /* Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6EC1D2C44F30030FC98 /* Files.swift */; };
+		7C76B7121D2C45710030FC98 /* Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6EC1D2C44F30030FC98 /* Files.swift */; };
+		7C76B7131D2C45730030FC98 /* HttpParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6ED1D2C44F30030FC98 /* HttpParser.swift */; };
+		7C76B7141D2C45730030FC98 /* HttpParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6ED1D2C44F30030FC98 /* HttpParser.swift */; };
+		7C76B7151D2C45760030FC98 /* HttpRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6EE1D2C44F30030FC98 /* HttpRequest.swift */; };
+		7C76B7161D2C45760030FC98 /* HttpRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6EE1D2C44F30030FC98 /* HttpRequest.swift */; };
+		7C76B7171D2C45780030FC98 /* HttpResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6EF1D2C44F30030FC98 /* HttpResponse.swift */; };
+		7C76B7181D2C45790030FC98 /* HttpResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6EF1D2C44F30030FC98 /* HttpResponse.swift */; };
+		7C76B7191D2C457C0030FC98 /* HttpRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F01D2C44F30030FC98 /* HttpRouter.swift */; };
+		7C76B71A1D2C457C0030FC98 /* HttpRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F01D2C44F30030FC98 /* HttpRouter.swift */; };
+		7C76B71B1D2C457E0030FC98 /* HttpServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F11D2C44F30030FC98 /* HttpServer.swift */; };
+		7C76B71C1D2C457E0030FC98 /* HttpServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F11D2C44F30030FC98 /* HttpServer.swift */; };
+		7C76B71D1D2C45820030FC98 /* HttpServerIO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F21D2C44F30030FC98 /* HttpServerIO.swift */; };
+		7C76B71E1D2C45820030FC98 /* HttpServerIO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F21D2C44F30030FC98 /* HttpServerIO.swift */; };
+		7C76B71F1D2C45840030FC98 /* Process.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F31D2C44F30030FC98 /* Process.swift */; };
+		7C76B7201D2C45840030FC98 /* Process.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F31D2C44F30030FC98 /* Process.swift */; };
+		7C76B7211D2C45870030FC98 /* Scopes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F41D2C44F30030FC98 /* Scopes.swift */; };
+		7C76B7221D2C45870030FC98 /* Scopes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F41D2C44F30030FC98 /* Scopes.swift */; };
+		7C76B7231D2C45890030FC98 /* Socket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F51D2C44F30030FC98 /* Socket.swift */; };
+		7C76B7241D2C458A0030FC98 /* Socket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F51D2C44F30030FC98 /* Socket.swift */; };
+		7C76B7251D2C458C0030FC98 /* String+BASE64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F61D2C44F30030FC98 /* String+BASE64.swift */; };
+		7C76B7261D2C458D0030FC98 /* String+BASE64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F61D2C44F30030FC98 /* String+BASE64.swift */; };
+		7C76B7271D2C458F0030FC98 /* String+Misc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F71D2C44F30030FC98 /* String+Misc.swift */; };
+		7C76B7281D2C458F0030FC98 /* String+Misc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F71D2C44F30030FC98 /* String+Misc.swift */; };
+		7C76B7291D2C45920030FC98 /* String+SHA1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F81D2C44F30030FC98 /* String+SHA1.swift */; };
+		7C76B72A1D2C45920030FC98 /* String+SHA1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F81D2C44F30030FC98 /* String+SHA1.swift */; };
+		7C76B72B1D2C45940030FC98 /* WebSockets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F91D2C44F30030FC98 /* WebSockets.swift */; };
+		7C76B72C1D2C45950030FC98 /* WebSockets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C76B6F91D2C44F30030FC98 /* WebSockets.swift */; };
 		7CA4813E19A2EA8D0030B30D /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CA4813D19A2EA8D0030B30D /* main.swift */; };
 		7CB102E01A17381D00CBA3B4 /* logo.png in Resources */ = {isa = PBXBuildFile; fileRef = 7CB102DF1A17381D00CBA3B4 /* logo.png */; };
-		7CC0F8C91C50136B00B65A94 /* Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0F8C81C50136B00B65A94 /* Files.swift */; };
-		7CC0F8CA1C50136B00B65A94 /* Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0F8C81C50136B00B65A94 /* Files.swift */; };
-		7CC0F8CC1C5014A200B65A94 /* WebSockets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0F8CB1C5014A200B65A94 /* WebSockets.swift */; };
-		7CC0F8CD1C5014A200B65A94 /* WebSockets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0F8CB1C5014A200B65A94 /* WebSockets.swift */; };
 		7CCD87611C66099B0068099B /* Swifter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AE893E71C05127900A29F63 /* Swifter.framework */; };
 		7CCD87701C660B250068099B /* SwifterTestsHttpParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CCD876D1C660B250068099B /* SwifterTestsHttpParser.swift */; };
 		7CCD87721C660B250068099B /* SwifterTestsStringExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CCD876E1C660B250068099B /* SwifterTestsStringExtensions.swift */; };
 		7CCD877E1C660EA30068099B /* Swifter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AE893FB1C0512C400A29F63 /* Swifter.framework */; };
 		7CCD87841C660ED60068099B /* SwifterTestsHttpParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CCD876D1C660B250068099B /* SwifterTestsHttpParser.swift */; };
 		7CCD87851C660ED60068099B /* SwifterTestsStringExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CCD876E1C660B250068099B /* SwifterTestsStringExtensions.swift */; };
-		7CCD87871C676EE50068099B /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CCD87861C676EE50068099B /* File.swift */; };
-		7CCD87881C676EE50068099B /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CCD87861C676EE50068099B /* File.swift */; };
 		7CDAB8131BE2A1D400C8A977 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7CDAB80D1BE2A1D400C8A977 /* Main.storyboard */; };
 		7CDAB8141BE2A1D400C8A977 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7CDAB80F1BE2A1D400C8A977 /* Images.xcassets */; };
 		7CDAB8161BE2A1D400C8A977 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CDAB8111BE2A1D400C8A977 /* ViewController.swift */; };
@@ -108,7 +104,6 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
-		18E610A51BD6397D00B7D17A /* SwiftyJSON.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftyJSON.swift; sourceTree = "<group>"; };
 		7AE893E71C05127900A29F63 /* Swifter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Swifter.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		7AE893E91C05127900A29F63 /* SwifteriOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwifteriOS.h; sourceTree = "<group>"; };
 		7AE893EB1C05127900A29F63 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@@ -116,39 +111,38 @@
 		7AE893FD1C0512C400A29F63 /* SwifterMac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwifterMac.h; sourceTree = "<group>"; };
 		7AE893FF1C0512C400A29F63 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		7AE8940C1C05151100A29F63 /* Launch Screen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = "<group>"; };
-		7C1A2BFA1C5605F50026D3BF /* String+BASE64.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+BASE64.swift"; sourceTree = "<group>"; };
-		7C2BEC771C518B7C00B8EE90 /* String+SHA1.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+SHA1.swift"; sourceTree = "<group>"; };
 		7C4785E81C71D15600A9FE73 /* SwifterTestsWebSocketSession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwifterTestsWebSocketSession.swift; sourceTree = "<group>"; };
-		7C73C6941C2619E100AEF6CA /* DemoServer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DemoServer.swift; sourceTree = "<group>"; };
-		7C73C6961C2619E100AEF6CA /* HttpParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HttpParser.swift; sourceTree = "<group>"; };
-		7C73C6971C2619E100AEF6CA /* HttpRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HttpRequest.swift; sourceTree = "<group>"; };
-		7C73C6981C2619E100AEF6CA /* HttpResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HttpResponse.swift; sourceTree = "<group>"; };
-		7C73C6991C2619E100AEF6CA /* HttpRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HttpRouter.swift; sourceTree = "<group>"; };
-		7C73C69A1C2619E100AEF6CA /* HttpServer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HttpServer.swift; sourceTree = "<group>"; };
-		7C73C69B1C2619E100AEF6CA /* HttpServerIO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HttpServerIO.swift; sourceTree = "<group>"; };
-		7C73C69C1C2619E100AEF6CA /* Socket.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Socket.swift; sourceTree = "<group>"; };
-		7C73C69D1C2619E100AEF6CA /* String+Misc.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+Misc.swift"; sourceTree = "<group>"; };
-		7C76B6DD1D2BB1050030FC98 /* Scopes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Scopes.swift; sourceTree = "<group>"; };
-		7C76B6E21D2BB1320030FC98 /* Process.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Process.swift; sourceTree = "<group>"; };
+		7C76B6EA1D2C44F30030FC98 /* DemoServer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DemoServer.swift; sourceTree = "<group>"; };
+		7C76B6EB1D2C44F30030FC98 /* File.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = File.swift; sourceTree = "<group>"; };
+		7C76B6EC1D2C44F30030FC98 /* Files.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Files.swift; sourceTree = "<group>"; };
+		7C76B6ED1D2C44F30030FC98 /* HttpParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HttpParser.swift; sourceTree = "<group>"; };
+		7C76B6EE1D2C44F30030FC98 /* HttpRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HttpRequest.swift; sourceTree = "<group>"; };
+		7C76B6EF1D2C44F30030FC98 /* HttpResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HttpResponse.swift; sourceTree = "<group>"; };
+		7C76B6F01D2C44F30030FC98 /* HttpRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HttpRouter.swift; sourceTree = "<group>"; };
+		7C76B6F11D2C44F30030FC98 /* HttpServer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HttpServer.swift; sourceTree = "<group>"; };
+		7C76B6F21D2C44F30030FC98 /* HttpServerIO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HttpServerIO.swift; sourceTree = "<group>"; };
+		7C76B6F31D2C44F30030FC98 /* Process.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Process.swift; sourceTree = "<group>"; };
+		7C76B6F41D2C44F30030FC98 /* Scopes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Scopes.swift; sourceTree = "<group>"; };
+		7C76B6F51D2C44F30030FC98 /* Socket.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Socket.swift; sourceTree = "<group>"; };
+		7C76B6F61D2C44F30030FC98 /* String+BASE64.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+BASE64.swift"; sourceTree = "<group>"; };
+		7C76B6F71D2C44F30030FC98 /* String+Misc.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+Misc.swift"; sourceTree = "<group>"; };
+		7C76B6F81D2C44F30030FC98 /* String+SHA1.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+SHA1.swift"; sourceTree = "<group>"; };
+		7C76B6F91D2C44F30030FC98 /* WebSockets.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebSockets.swift; sourceTree = "<group>"; };
 		7C839B6E19422CFF003A6950 /* SwifterSampleiOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwifterSampleiOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		7CA4813B19A2EA8D0030B30D /* SwifterSampleOSX */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = SwifterSampleOSX; sourceTree = BUILT_PRODUCTS_DIR; };
 		7CA4813D19A2EA8D0030B30D /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
 		7CB102DF1A17381D00CBA3B4 /* logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo.png; sourceTree = "<group>"; };
-		7CC0F8C81C50136B00B65A94 /* Files.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Files.swift; sourceTree = "<group>"; };
-		7CC0F8CB1C5014A200B65A94 /* WebSockets.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebSockets.swift; sourceTree = "<group>"; };
 		7CCD875C1C66099B0068099B /* SwifteriOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwifteriOSTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		7CCD87601C66099B0068099B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		7CCD876D1C660B250068099B /* SwifterTestsHttpParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwifterTestsHttpParser.swift; sourceTree = "<group>"; };
 		7CCD876E1C660B250068099B /* SwifterTestsStringExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwifterTestsStringExtensions.swift; sourceTree = "<group>"; };
 		7CCD87791C660EA30068099B /* SwifterOSXTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwifterOSXTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		7CCD877D1C660EA30068099B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		7CCD87861C676EE50068099B /* File.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = File.swift; sourceTree = "<group>"; };
 		7CDAB80C1BE2A1D400C8A977 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
 		7CDAB80E1BE2A1D400C8A977 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
 		7CDAB80F1BE2A1D400C8A977 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
 		7CDAB8101BE2A1D400C8A977 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		7CDAB8111BE2A1D400C8A977 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
-		7CEAF86F1C14B2B5003252DE /* Package.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Package.swift; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -217,12 +211,35 @@
 			path = SwifterMac;
 			sourceTree = "<group>";
 		};
+		7C76B6E91D2C44F30030FC98 /* Sources */ = {
+			isa = PBXGroup;
+			children = (
+				7C76B6EA1D2C44F30030FC98 /* DemoServer.swift */,
+				7C76B6EB1D2C44F30030FC98 /* File.swift */,
+				7C76B6EC1D2C44F30030FC98 /* Files.swift */,
+				7C76B6ED1D2C44F30030FC98 /* HttpParser.swift */,
+				7C76B6EE1D2C44F30030FC98 /* HttpRequest.swift */,
+				7C76B6EF1D2C44F30030FC98 /* HttpResponse.swift */,
+				7C76B6F01D2C44F30030FC98 /* HttpRouter.swift */,
+				7C76B6F11D2C44F30030FC98 /* HttpServer.swift */,
+				7C76B6F21D2C44F30030FC98 /* HttpServerIO.swift */,
+				7C76B6F31D2C44F30030FC98 /* Process.swift */,
+				7C76B6F41D2C44F30030FC98 /* Scopes.swift */,
+				7C76B6F51D2C44F30030FC98 /* Socket.swift */,
+				7C76B6F61D2C44F30030FC98 /* String+BASE64.swift */,
+				7C76B6F71D2C44F30030FC98 /* String+Misc.swift */,
+				7C76B6F81D2C44F30030FC98 /* String+SHA1.swift */,
+				7C76B6F91D2C44F30030FC98 /* WebSockets.swift */,
+			);
+			name = Sources;
+			path = ../Sources;
+			sourceTree = "<group>";
+		};
 		7C839B6519422CFF003A6950 = {
 			isa = PBXGroup;
 			children = (
-				7CEAF86F1C14B2B5003252DE /* Package.swift */,
+				7C76B6E91D2C44F30030FC98 /* Sources */,
 				7CA4815619A2EF2B0030B30D /* Resources */,
-				7CEAF84A1C14B29B003252DE /* Sources */,
 				7CCD876C1C660B250068099B /* SwifterTestsCommon */,
 				7CCD875D1C66099B0068099B /* SwifteriOSTests */,
 				7CCD877A1C660EA30068099B /* SwifterOSXTests */,
@@ -250,7 +267,6 @@
 		7CA4813C19A2EA8D0030B30D /* SwifterSampleOSX */ = {
 			isa = PBXGroup;
 			children = (
-				18E610A51BD6397D00B7D17A /* SwiftyJSON.swift */,
 				7CA4813D19A2EA8D0030B30D /* main.swift */,
 			);
 			path = SwifterSampleOSX;
@@ -303,29 +319,6 @@
 			path = SwifterSampleiOS;
 			sourceTree = "<group>";
 		};
-		7CEAF84A1C14B29B003252DE /* Sources */ = {
-			isa = PBXGroup;
-			children = (
-				7C73C6941C2619E100AEF6CA /* DemoServer.swift */,
-				7CC0F8C81C50136B00B65A94 /* Files.swift */,
-				7C76B6DD1D2BB1050030FC98 /* Scopes.swift */,
-				7CC0F8CB1C5014A200B65A94 /* WebSockets.swift */,
-				7C73C6961C2619E100AEF6CA /* HttpParser.swift */,
-				7C73C6971C2619E100AEF6CA /* HttpRequest.swift */,
-				7C73C6981C2619E100AEF6CA /* HttpResponse.swift */,
-				7C73C6991C2619E100AEF6CA /* HttpRouter.swift */,
-				7C73C69A1C2619E100AEF6CA /* HttpServer.swift */,
-				7C73C69B1C2619E100AEF6CA /* HttpServerIO.swift */,
-				7C73C69C1C2619E100AEF6CA /* Socket.swift */,
-				7CCD87861C676EE50068099B /* File.swift */,
-				7C73C69D1C2619E100AEF6CA /* String+Misc.swift */,
-				7C2BEC771C518B7C00B8EE90 /* String+SHA1.swift */,
-				7C1A2BFA1C5605F50026D3BF /* String+BASE64.swift */,
-				7C76B6E21D2BB1320030FC98 /* Process.swift */,
-			);
-			path = Sources;
-			sourceTree = "<group>";
-		};
 /* End PBXGroup section */
 
 /* Begin PBXHeadersBuildPhase section */
@@ -556,22 +549,22 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				7C2BEC791C5195EE00B8EE90 /* String+SHA1.swift in Sources */,
-				7C73C6AA1C261A2100AEF6CA /* DemoServer.swift in Sources */,
-				7C1A2BFB1C5605F50026D3BF /* String+BASE64.swift in Sources */,
-				7C73C6AC1C261A2100AEF6CA /* HttpParser.swift in Sources */,
-				7C73C6AD1C261A2100AEF6CA /* HttpRequest.swift in Sources */,
-				7C73C6AE1C261A2100AEF6CA /* HttpResponse.swift in Sources */,
-				7C76B6E31D2BB1320030FC98 /* Process.swift in Sources */,
-				7C73C6AF1C261A2100AEF6CA /* HttpRouter.swift in Sources */,
-				7CC0F8CC1C5014A200B65A94 /* WebSockets.swift in Sources */,
-				7C73C6B01C261A2100AEF6CA /* HttpServer.swift in Sources */,
-				7CCD87871C676EE50068099B /* File.swift in Sources */,
-				7C73C6B11C261A2100AEF6CA /* HttpServerIO.swift in Sources */,
-				7C73C6B21C261A2100AEF6CA /* Socket.swift in Sources */,
-				7C76B6DE1D2BB1050030FC98 /* Scopes.swift in Sources */,
-				7CC0F8C91C50136B00B65A94 /* Files.swift in Sources */,
-				7C73C6B31C261A2100AEF6CA /* String+Misc.swift in Sources */,
+				7C76B7171D2C45780030FC98 /* HttpResponse.swift in Sources */,
+				7C76B7211D2C45870030FC98 /* Scopes.swift in Sources */,
+				7C76B71F1D2C45840030FC98 /* Process.swift in Sources */,
+				7C76B7131D2C45730030FC98 /* HttpParser.swift in Sources */,
+				7C76B7271D2C458F0030FC98 /* String+Misc.swift in Sources */,
+				7C76B72B1D2C45940030FC98 /* WebSockets.swift in Sources */,
+				7C76B71B1D2C457E0030FC98 /* HttpServer.swift in Sources */,
+				7C76B7151D2C45760030FC98 /* HttpRequest.swift in Sources */,
+				7C76B70D1D2C456A0030FC98 /* DemoServer.swift in Sources */,
+				7C76B70F1D2C456D0030FC98 /* File.swift in Sources */,
+				7C76B7231D2C45890030FC98 /* Socket.swift in Sources */,
+				7C76B71D1D2C45820030FC98 /* HttpServerIO.swift in Sources */,
+				7C76B7111D2C45710030FC98 /* Files.swift in Sources */,
+				7C76B7191D2C457C0030FC98 /* HttpRouter.swift in Sources */,
+				7C76B7291D2C45920030FC98 /* String+SHA1.swift in Sources */,
+				7C76B7251D2C458C0030FC98 /* String+BASE64.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -579,22 +572,22 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				7C2BEC7A1C5195F200B8EE90 /* String+SHA1.swift in Sources */,
-				7C73C6B51C261A2600AEF6CA /* DemoServer.swift in Sources */,
-				7C1A2BFC1C5605F50026D3BF /* String+BASE64.swift in Sources */,
-				7C73C6B71C261A2600AEF6CA /* HttpParser.swift in Sources */,
-				7C73C6B81C261A2600AEF6CA /* HttpRequest.swift in Sources */,
-				7C73C6B91C261A2600AEF6CA /* HttpResponse.swift in Sources */,
-				7C76B6E41D2BB1320030FC98 /* Process.swift in Sources */,
-				7C73C6BA1C261A2600AEF6CA /* HttpRouter.swift in Sources */,
-				7CC0F8CD1C5014A200B65A94 /* WebSockets.swift in Sources */,
-				7C73C6BB1C261A2600AEF6CA /* HttpServer.swift in Sources */,
-				7CCD87881C676EE50068099B /* File.swift in Sources */,
-				7C73C6BC1C261A2600AEF6CA /* HttpServerIO.swift in Sources */,
-				7C73C6BD1C261A2600AEF6CA /* Socket.swift in Sources */,
-				7C76B6DF1D2BB1050030FC98 /* Scopes.swift in Sources */,
-				7CC0F8CA1C50136B00B65A94 /* Files.swift in Sources */,
-				7C73C6BE1C261A2600AEF6CA /* String+Misc.swift in Sources */,
+				7C76B7181D2C45790030FC98 /* HttpResponse.swift in Sources */,
+				7C76B7221D2C45870030FC98 /* Scopes.swift in Sources */,
+				7C76B7201D2C45840030FC98 /* Process.swift in Sources */,
+				7C76B7141D2C45730030FC98 /* HttpParser.swift in Sources */,
+				7C76B7281D2C458F0030FC98 /* String+Misc.swift in Sources */,
+				7C76B72C1D2C45950030FC98 /* WebSockets.swift in Sources */,
+				7C76B71C1D2C457E0030FC98 /* HttpServer.swift in Sources */,
+				7C76B7161D2C45760030FC98 /* HttpRequest.swift in Sources */,
+				7C76B70E1D2C456B0030FC98 /* DemoServer.swift in Sources */,
+				7C76B7101D2C456D0030FC98 /* File.swift in Sources */,
+				7C76B7241D2C458A0030FC98 /* Socket.swift in Sources */,
+				7C76B71E1D2C45820030FC98 /* HttpServerIO.swift in Sources */,
+				7C76B7121D2C45710030FC98 /* Files.swift in Sources */,
+				7C76B71A1D2C457C0030FC98 /* HttpRouter.swift in Sources */,
+				7C76B72A1D2C45920030FC98 /* String+SHA1.swift in Sources */,
+				7C76B7261D2C458D0030FC98 /* String+BASE64.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -604,7 +597,6 @@
 			files = (
 				7C73C6921C26179C00AEF6CA /* AppDelegate.swift in Sources */,
 				7CDAB8161BE2A1D400C8A977 /* ViewController.swift in Sources */,
-				7C2BEC781C518B7C00B8EE90 /* String+SHA1.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -612,7 +604,6 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				7C73C6911C2615FE00AEF6CA /* SwiftyJSON.swift in Sources */,
 				7CA4813E19A2EA8D0030B30D /* main.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -622,7 +613,6 @@
 			buildActionMask = 2147483647;
 			files = (
 				7CCD87701C660B250068099B /* SwifterTestsHttpParser.swift in Sources */,
-				7C76B6E51D2BB1320030FC98 /* Process.swift in Sources */,
 				7C4785E91C71D15600A9FE73 /* SwifterTestsWebSocketSession.swift in Sources */,
 				7CCD87721C660B250068099B /* SwifterTestsStringExtensions.swift in Sources */,
 			);
@@ -633,7 +623,6 @@
 			buildActionMask = 2147483647;
 			files = (
 				7CCD87841C660ED60068099B /* SwifterTestsHttpParser.swift in Sources */,
-				7C76B6E61D2BB1320030FC98 /* Process.swift in Sources */,
 				7C4785EA1C71D15600A9FE73 /* SwifterTestsWebSocketSession.swift in Sources */,
 				7CCD87851C660ED60068099B /* SwifterTestsStringExtensions.swift in Sources */,
 			);

+ 0 - 0
Swifter.xcodeproj/project.xcworkspace/contents.xcworkspacedata → XCode/Swifter.xcodeproj/project.xcworkspace/contents.xcworkspacedata


+ 0 - 0
Swifter.xcodeproj/xcshareddata/xcschemes/SwifterMac.xcscheme → XCode/Swifter.xcodeproj/xcshareddata/xcschemes/SwifterMac.xcscheme


+ 0 - 0
Swifter.xcodeproj/xcshareddata/xcschemes/SwifteriOS.xcscheme → XCode/Swifter.xcodeproj/xcshareddata/xcschemes/SwifteriOS.xcscheme


+ 0 - 0
SwifterMac/Info.plist → XCode/SwifterMac/Info.plist


+ 0 - 0
SwifterMac/SwifterMac.h → XCode/SwifterMac/SwifterMac.h


+ 0 - 0
SwifterOSXTests/Info.plist → XCode/SwifterOSXTests/Info.plist


+ 0 - 10
SwifterSampleOSX/main.swift → XCode/SwifterSampleOSX/main.swift

@@ -7,18 +7,8 @@
 import Foundation
 import Swifter
 
-
 do {
     let server = demoServer(try File.currentWorkingDirectory())
-    server["/SwiftyJSON"] = { request in
-        let js: JSON = ["return": "OK", "isItAJSON": true, "code" : 200]
-        return .OK(.Custom(js, { object in
-            guard let obj = object as? JSON, let rawString = obj.rawString() else {
-                throw SerializationError.InvalidObject
-            }
-            return rawString
-        }))
-    }
     server["/testAfterBaseRoute"] = { request in
         return .OK(.Html("ok !"))
     }

+ 0 - 0
SwifterSampleiOS/AppDelegate.swift → XCode/SwifterSampleiOS/AppDelegate.swift


+ 0 - 0
SwifterSampleiOS/Base.lproj/Main.storyboard → XCode/SwifterSampleiOS/Base.lproj/Main.storyboard


+ 0 - 0
SwifterSampleiOS/Images.xcassets/AppIcon.appiconset/Contents.json → XCode/SwifterSampleiOS/Images.xcassets/AppIcon.appiconset/Contents.json


+ 0 - 0
SwifterSampleiOS/Images.xcassets/LaunchImage.launchimage/Contents.json → XCode/SwifterSampleiOS/Images.xcassets/LaunchImage.launchimage/Contents.json


+ 0 - 0
SwifterSampleiOS/Info.plist → XCode/SwifterSampleiOS/Info.plist


+ 0 - 0
SwifterSampleiOS/Launch Screen.storyboard → XCode/SwifterSampleiOS/Launch Screen.storyboard


+ 0 - 0
SwifterSampleiOS/ViewController.swift → XCode/SwifterSampleiOS/ViewController.swift


+ 0 - 0
SwifterTestsCommon/SwifterTestsHttpParser.swift → XCode/SwifterTestsCommon/SwifterTestsHttpParser.swift


+ 0 - 0
SwifterTestsCommon/SwifterTestsStringExtensions.swift → XCode/SwifterTestsCommon/SwifterTestsStringExtensions.swift


+ 0 - 0
SwifterTestsCommon/SwifterTestsWebSocketSession.swift → XCode/SwifterTestsCommon/SwifterTestsWebSocketSession.swift


+ 0 - 0
SwifteriOS/SwifteriOS.h → XCode/SwifteriOS/SwifteriOS.h


+ 0 - 0
SwifteriOSTests/Info.plist → XCode/SwifteriOSTests/Info.plist