├── .swift-version ├── .DS_Store ├── JSONJoy.xcodeproj ├── project.xcworkspace │ └── contents.xcworkspacedata ├── xcshareddata │ └── xcschemes │ │ ├── JSONJoy.xcscheme │ │ ├── JSONJoyTests.xcscheme │ │ └── JSONJoyOSX.xcscheme └── project.pbxproj ├── Source ├── JSONJoy.h ├── Info.plist └── JSONJoy.swift ├── .gitignore ├── JSONJoy-Swift.podspec ├── Tests ├── JSONJoyTests.swift └── Info.plist ├── Package.swift ├── README.md └── LICENSE /.swift-version: -------------------------------------------------------------------------------- 1 | 3.0 -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daltoniam/JSONJoy-Swift/HEAD/.DS_Store -------------------------------------------------------------------------------- /JSONJoy.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Source/JSONJoy.h: -------------------------------------------------------------------------------- 1 | // 2 | // JSONJoy.h 3 | // JSONJoy 4 | // 5 | // Created by Austin Cherry on 9/24/14. 6 | // Copyright (c) 2014 Vluxe. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for JSONJoy. 12 | FOUNDATION_EXPORT double JSONJoyVersionNumber; 13 | 14 | //! Project version string for JSONJoy. 15 | FOUNDATION_EXPORT const unsigned char JSONJoyVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | *.xccheckout 14 | *.moved-aside 15 | DerivedData 16 | *.hmap 17 | *.ipa 18 | *.xcuserstate 19 | 20 | *.DS_Store 21 | 22 | # CocoaPods 23 | # 24 | # We recommend against adding the Pods directory to your .gitignore. However 25 | # you should judge for yourself, the pros and cons are mentioned at: 26 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 27 | # 28 | # Pods/ 29 | -------------------------------------------------------------------------------- /JSONJoy-Swift.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "JSONJoy-Swift" 3 | s.version = "3.0.3" 4 | s.summary = "Convert JSON to Swift objects." 5 | s.homepage = "https://github.com/daltoniam/JSONJoy-Swift" 6 | s.license = 'Apache License, Version 2.0' 7 | s.author = {'Dalton Cherry' => 'http://daltoniam.com'} 8 | s.source = { :git => 'https://github.com/daltoniam/JSONJoy-Swift.git', :tag => "#{s.version}"} 9 | s.social_media_url = 'http://twitter.com/daltoniam' 10 | s.module_name = "JSONJoy" 11 | s.ios.deployment_target = '8.0' 12 | s.osx.deployment_target = '10.9' 13 | s.tvos.deployment_target = '9.0' 14 | s.watchos.deployment_target = '2.0' 15 | s.source_files = 'Source/*.swift' 16 | end 17 | -------------------------------------------------------------------------------- /Tests/JSONJoyTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JSONJoyTests.swift 3 | // JSONJoyTests 4 | // 5 | // Created by Austin Cherry on 9/24/14. 6 | // Copyright (c) 2014 Vluxe. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class JSONJoyTests: XCTestCase { 12 | 13 | override func setUp() { 14 | super.setUp() 15 | // Put setup code here. This method is called before the invocation of each test method in the class. 16 | } 17 | 18 | override func tearDown() { 19 | // Put teardown code here. This method is called after the invocation of each test method in the class. 20 | super.tearDown() 21 | } 22 | 23 | func testExample() { 24 | // This is an example of a functional test case. 25 | XCTAssert(true, "Pass") 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Package.Swift 3 | // JSONJoy 4 | // 5 | // Created by Dalton Cherry on 5/16/15. 6 | // Copyright (c) 2014-2015 Dalton Cherry. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | import PackageDescription 22 | 23 | let package = Package( 24 | name: "JSONJoy" 25 | ) -------------------------------------------------------------------------------- /Source/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 3.0.3 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /JSONJoy.xcodeproj/xcshareddata/xcschemes/JSONJoy.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 33 | 34 | 35 | 36 | 47 | 48 | 54 | 55 | 56 | 57 | 58 | 59 | 65 | 66 | 72 | 73 | 74 | 75 | 77 | 78 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /JSONJoy.xcodeproj/xcshareddata/xcschemes/JSONJoyTests.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 34 | 40 | 41 | 42 | 43 | 44 | 50 | 51 | 52 | 53 | 54 | 55 | 66 | 67 | 73 | 74 | 75 | 76 | 77 | 78 | 84 | 85 | 91 | 92 | 93 | 94 | 96 | 97 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /JSONJoy.xcodeproj/xcshareddata/xcschemes/JSONJoyOSX.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 45 | 46 | 48 | 54 | 55 | 56 | 57 | 58 | 64 | 65 | 66 | 67 | 68 | 69 | 80 | 81 | 87 | 88 | 89 | 90 | 91 | 92 | 98 | 99 | 105 | 106 | 107 | 108 | 110 | 111 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /Source/JSONJoy.swift: -------------------------------------------------------------------------------- 1 | ////////////////////////////////////////////////////////////////////////////////////////////////// 2 | // 3 | // JSONJoy.swift 4 | // 5 | // Created by Dalton Cherry on 9/17/14. 6 | // Copyright (c) 2014 Vluxe. All rights reserved. 7 | // 8 | ////////////////////////////////////////////////////////////////////////////////////////////////// 9 | 10 | import Foundation 11 | 12 | public protocol JSONBasicType {} 13 | extension String: JSONBasicType {} 14 | extension Int: JSONBasicType {} 15 | extension UInt: JSONBasicType {} 16 | extension Double: JSONBasicType {} 17 | extension Float: JSONBasicType {} 18 | extension NSNumber: JSONBasicType {} 19 | extension Bool: JSONBasicType {} 20 | 21 | public enum JSONError: Error { 22 | case wrongType 23 | } 24 | 25 | open class JSONLoader { 26 | var value: Any? 27 | 28 | /** 29 | Converts any raw object like a String or Data into a JSONJoy object 30 | */ 31 | public init(_ raw: Any, isSub: Bool = false) { 32 | var rawObject: Any = raw 33 | if let str = rawObject as? String, !isSub { 34 | rawObject = str.data(using: String.Encoding.utf8)! as Any 35 | } 36 | if let data = rawObject as? Data { 37 | var response: Any? 38 | do { 39 | try response = JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions()) 40 | rawObject = response! 41 | } 42 | catch let error as NSError { 43 | value = error 44 | return 45 | } 46 | } 47 | if let array = rawObject as? NSArray { 48 | var collect = [JSONLoader]() 49 | for val: Any in array { 50 | collect.append(JSONLoader(val, isSub: true)) 51 | } 52 | value = collect as Any? 53 | } else if let dict = rawObject as? NSDictionary { 54 | var collect = Dictionary() 55 | for (key,val) in dict { 56 | collect[key as! String] = JSONLoader(val as AnyObject, isSub: true) 57 | } 58 | value = collect as Any? 59 | } else { 60 | value = rawObject 61 | } 62 | } 63 | 64 | /** 65 | get typed `Array` of `JSONJoy` and have it throw if it doesn't work 66 | */ 67 | public func get() throws -> [T] { 68 | guard let a = getOptionalArray() else { throw JSONError.wrongType } 69 | return try a.reduce([T]()) { $0 + [try T($1)] } 70 | } 71 | 72 | /** 73 | get typed `Array` and have it throw if it doesn't work 74 | */ 75 | open func get() throws -> [T] { 76 | guard let a = getOptionalArray() else { throw JSONError.wrongType } 77 | return try a.reduce([T]()) { $0 + [try $1.get()] } 78 | } 79 | 80 | /** 81 | get any type and have it throw if it doesn't work 82 | */ 83 | open func get() throws -> T { 84 | if let val = value as? Error { 85 | throw val 86 | } 87 | guard let val = value as? T else {throw JSONError.wrongType} 88 | return val 89 | } 90 | 91 | /** 92 | get any type as an optional 93 | */ 94 | open func getOptional() -> T? { 95 | do { return try get() } 96 | catch { return nil } 97 | } 98 | 99 | /** 100 | get an array 101 | */ 102 | open func getOptionalArray() -> [JSONLoader]? { 103 | return value as? [JSONLoader] 104 | } 105 | 106 | /** 107 | get typed `Array` of `JSONJoy` as an optional 108 | */ 109 | public func getOptional() -> [T]? { 110 | guard let a = getOptionalArray() else { return nil } 111 | do { return try a.reduce([T]()) { $0 + [try T($1)] } } 112 | catch { return nil } 113 | } 114 | 115 | /** 116 | get typed `Array` of `JSONJoy` as an optional 117 | */ 118 | public func getOptional() -> [T]? { 119 | guard let a = getOptionalArray() else { return nil } 120 | do { return try a.reduce([T]()) { $0 + [try $1.get()] } } 121 | catch { return nil } 122 | } 123 | 124 | /** 125 | Array access support 126 | */ 127 | open subscript(index: Int) -> JSONLoader { 128 | get { 129 | if let array = value as? NSArray { 130 | if array.count > index { 131 | return array[index] as! JSONLoader 132 | } 133 | } 134 | return JSONLoader(createError("index: \(index) is greater than array or this is not an Array type.")) 135 | } 136 | } 137 | 138 | /** 139 | Dictionary access support 140 | */ 141 | open subscript(key: String) -> JSONLoader { 142 | get { 143 | if let dict = value as? NSDictionary { 144 | if let value: Any = dict[key] { 145 | return value as! JSONLoader 146 | } 147 | } 148 | return JSONLoader(createError("key: \(key) does not exist or this is not a Dictionary type")) 149 | } 150 | } 151 | 152 | /** 153 | Simple helper method to create an error 154 | */ 155 | func createError(_ text: String) -> Error { 156 | return NSError(domain: "JSONJoy", code: 1002, userInfo: [NSLocalizedDescriptionKey: text]) as Error 157 | } 158 | 159 | } 160 | 161 | /** 162 | Implement this protocol on all objects you want to use JSONJoy with 163 | */ 164 | public protocol JSONJoy { 165 | init(_ decoder: JSONLoader) throws 166 | } 167 | 168 | extension JSONLoader: CustomStringConvertible { 169 | public var description: String { 170 | if let value = value { 171 | return String(describing: value) 172 | } else { 173 | return String(describing: value) 174 | } 175 | } 176 | } 177 | 178 | extension JSONLoader: CustomDebugStringConvertible { 179 | public var debugDescription: String { 180 | if let value = value { 181 | return String(reflecting: value) 182 | } else { 183 | return String(reflecting: value) 184 | } 185 | } 186 | } 187 | 188 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | JSONJoy 2 | ============= 3 | 4 | Convert JSON to Swift objects. The Objective-C counterpart can be found here: [JSONJoy](https://github.com/daltoniam/JSONJoy). 5 | 6 | Parsing JSON in Swift has be likened to a trip through Mordor, then JSONJoy would be using eagles for that trip. 7 | 8 | #### Deprecation 9 | 10 | The release of Swift 4 brought support for the new `Codable` protocol. This renders most of JSONJoy unneccessary and thus will be deprecated. Version 3.0.2 has been update to support Swift 4 as a means of backward compatibility, but I would encourage the adoption of the new `Codable` protocol. I wrote a post about it [here](vluxe.io/codable-json-swift.html) 11 | 12 | 13 | First thing is to import the framework. See the Installation instructions on how to add the framework to your project. 14 | 15 | ```swift 16 | import JSONJoy 17 | ``` 18 | 19 | ## Example 20 | 21 | First here is some example JSON we have to parse. 22 | 23 | ```javascript 24 | { 25 | "id" : 1, 26 | "first_name": "John", 27 | "last_name": "Smith", 28 | "age": 25, 29 | "address": { 30 | "id": 1, 31 | "street_address": "2nd Street", 32 | "city": "Bakersfield", 33 | "state": "CA", 34 | "postal_code": 93309 35 | } 36 | 37 | } 38 | ``` 39 | 40 | We want to translate that JSON to these Swift objects: 41 | 42 | ```swift 43 | struct Address { 44 | let objID: Int? 45 | let streetAddress: String? 46 | let city: String? 47 | let state: String? 48 | let postalCode: String? 49 | init() { 50 | 51 | } 52 | } 53 | 54 | struct User { 55 | let objID: Int? 56 | let firstName: String? 57 | let lastName: String? 58 | let age: Int? 59 | let address = Address() 60 | init() { 61 | 62 | } 63 | } 64 | ``` 65 | 66 | Normally this would put us in a validation nightmare: 67 | 68 | ``` 69 | var user = User() 70 | var error: NSError? 71 | var response: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(), error: &error) 72 | if let userDict = response as? NSDictionary { 73 | if let addressDict = userDict["address"] as? NSDictionary { 74 | user.address.city = addressDict["city"] as? String 75 | user.address.streetAddress = addressDict["street_address"] as? String 76 | //etc, etc 77 | } 78 | user.firstName = userDict["first_name"] as? String 79 | user.lastName = userDict["last_name"] as? String 80 | //etc, etc 81 | } 82 | ``` 83 | 84 | JSONJoy makes this much simpler. We have our Swift objects implement the JSONJoy protocol: 85 | 86 | ```swift 87 | struct Address : JSONJoy { 88 | let objID: Int 89 | let streetAddress: String 90 | let city: String 91 | let state: String 92 | let postalCode: String 93 | let streetTwo: String? 94 | 95 | init(_ decoder: JSONLoader) throws { 96 | objID = try decoder["id"].get() 97 | streetAddress = try decoder["street_address"].get() 98 | city = try decoder["city"].get() 99 | state = try decoder["state"].get() 100 | postalCode = try decoder["postal_code"].get() 101 | streetTwo = decoder["street_two"].getOptional() 102 | 103 | //just an example of "checking" for a property. 104 | if let meta: String = decoder["meta"].getOptional() { 105 | print("found some meta info: \(meta)") 106 | } 107 | } 108 | } 109 | 110 | struct User : JSONJoy { 111 | let objID: Int 112 | let firstName: String 113 | let lastName: String 114 | let age: Int 115 | let address: Address 116 | let addresses: [Address] 117 | 118 | init(_ decoder: JSONLoader) throws { 119 | objID = try decoder["id"].get() 120 | firstName = try decoder["first_name"].get() 121 | lastName = try decoder["last_name"].get() 122 | age = try decoder["age"].get() 123 | address = try Address(decoder["address"]) 124 | addresses = try decoder["addresses"].get() //infers the type and returns a valid array 125 | } 126 | } 127 | ``` 128 | 129 | Then when we get the JSON back: 130 | 131 | ```swift 132 | do { 133 | var user = try User(JSONLoader(data)) 134 | println("city is: \(user.address.city)") 135 | //That's it! The object has all the appropriate properties mapped. 136 | } catch { 137 | print("unable to parse the JSON") 138 | } 139 | ``` 140 | 141 | This also has automatic optional validation like most Swift JSON libraries. 142 | 143 | ```swift 144 | //some randomly incorrect key. This will work fine and the property will just be nil. 145 | firstName = decoder[5]["wrongKey"]["MoreWrong"].getOptional() 146 | //firstName is nil, but no crashing! 147 | ``` 148 | 149 | ## Custom Types 150 | 151 | If you to extend a standard Foundation type (you probably won't need to though) 152 | 153 | ```swift 154 | extension UInt64: JSONBasicType {} 155 | ``` 156 | 157 | ## SwiftHTTP 158 | 159 | This can be combined with SwiftHTTP to make API interaction really clean and easy. 160 | 161 | https://github.com/daltoniam/SwiftHTTP#clientserver-example 162 | 163 | ## Requirements 164 | 165 | JSONJoy requires at least iOS 7/OSX 10.10 or above. 166 | 167 | ## Installation 168 | 169 | ### Swift Package Manager 170 | 171 | Add the project as a dependency to your Package.swift: 172 | ```swift 173 | import PackageDescription 174 | 175 | let package = Package( 176 | name: "YourProject", 177 | dependencies: [ 178 | .Package(url: "https://github.com/daltoniam/JSONJoy-Swift", majorVersion: 3) 179 | ] 180 | ) 181 | ``` 182 | 183 | ### CocoaPods 184 | 185 | Check out [Get Started](http://cocoapods.org/) tab on [cocoapods.org](http://cocoapods.org/). 186 | 187 | To use JSONJoy-Swift in your project add the following 'Podfile' to your project 188 | 189 | source 'https://github.com/CocoaPods/Specs.git' 190 | platform :ios, '8.0' 191 | use_frameworks! 192 | 193 | pod 'JSONJoy-Swift', '~> 3.0.2' 194 | 195 | Then run: 196 | 197 | pod install 198 | 199 | 200 | ### Carthage 201 | 202 | Check out the [Carthage](https://github.com/Carthage/Carthage) docs on how to add a install. The `JSONJoy` framework is already setup with shared schemes. 203 | 204 | [Carthage Install](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application) 205 | 206 | You can install Carthage with [Homebrew](http://brew.sh/) using the following command: 207 | 208 | ```bash 209 | $ brew update 210 | $ brew install carthage 211 | ``` 212 | 213 | To integrate JSONJoy into your Xcode project using Carthage, specify it in your `Cartfile`: 214 | 215 | ``` 216 | github "daltoniam/JSONJoy-Swift" >= 3.0.2 217 | ``` 218 | 219 | ### Rogue 220 | 221 | First see the [installation docs](https://github.com/acmacalister/Rogue) for how to install Rogue. 222 | 223 | To install JSONJoy run the command below in the directory you created the rogue file. 224 | 225 | ``` 226 | rogue add https://github.com/daltoniam/JSONJoy-Swift 227 | ``` 228 | 229 | Next open the `libs` folder and add the `JSONJoy.xcodeproj` to your Xcode project. Once that is complete, in your "Build Phases" add the `JSONJoy.framework` to your "Link Binary with Libraries" phase. Make sure to add the `libs` folder to your `.gitignore` file. 230 | 231 | ### Other 232 | 233 | Simply grab the framework (either via git submodule or another package manager). 234 | 235 | Add the `JSONJoy.xcodeproj` to your Xcode project. Once that is complete, in your "Build Phases" add the `JSONJoy.framework` to your "Link Binary with Libraries" phase. 236 | 237 | ### Add Copy Frameworks Phase 238 | 239 | If you are running this in an OSX app or on a physical iOS device you will need to make sure you add the `JSONJoy.framework` included in your app bundle. To do this, in Xcode, navigate to the target configuration window by clicking on the blue project icon, and selecting the application target under the "Targets" heading in the sidebar. In the tab bar at the top of that window, open the "Build Phases" panel. Expand the "Link Binary with Libraries" group, and add `JSONJoy.framework`. Click on the + button at the top left of the panel and select "New Copy Files Phase". Rename this new phase to "Copy Frameworks", set the "Destination" to "Frameworks", and add `JSONJoy.framework`. 240 | 241 | ## TODOs 242 | 243 | - [ ] Add Unit Tests 244 | 245 | ## License 246 | 247 | JSONJoy is licensed under the Apache v2 License. 248 | 249 | ## Contact 250 | 251 | ### Dalton Cherry ### 252 | * https://github.com/daltoniam 253 | * http://twitter.com/daltoniam 254 | * http://daltoniam.com 255 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /JSONJoy.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 5C135EF71C4734BA00AA3A01 /* JSONJoy.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C135EED1C4734BA00AA3A01 /* JSONJoy.framework */; }; 11 | 5C135F061C47350700AA3A01 /* JSONJoyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B3E79D819D35696006071F7 /* JSONJoyTests.swift */; }; 12 | 5C135FD71C4739FB00AA3A01 /* JSONJoy.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C135FD51C4739FB00AA3A01 /* JSONJoy.h */; settings = {ATTRIBUTES = (Public, ); }; }; 13 | 5C135FD81C4739FB00AA3A01 /* JSONJoy.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C135FD51C4739FB00AA3A01 /* JSONJoy.h */; settings = {ATTRIBUTES = (Public, ); }; }; 14 | 5C135FD91C4739FB00AA3A01 /* JSONJoy.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C135FD51C4739FB00AA3A01 /* JSONJoy.h */; settings = {ATTRIBUTES = (Public, ); }; }; 15 | 5C135FDA1C4739FB00AA3A01 /* JSONJoy.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C135FD51C4739FB00AA3A01 /* JSONJoy.h */; settings = {ATTRIBUTES = (Public, ); }; }; 16 | 5C135FDB1C4739FB00AA3A01 /* JSONJoy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C135FD61C4739FB00AA3A01 /* JSONJoy.swift */; }; 17 | 5C135FDC1C4739FB00AA3A01 /* JSONJoy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C135FD61C4739FB00AA3A01 /* JSONJoy.swift */; }; 18 | 5C135FDD1C4739FB00AA3A01 /* JSONJoy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C135FD61C4739FB00AA3A01 /* JSONJoy.swift */; }; 19 | 5C135FDE1C4739FB00AA3A01 /* JSONJoy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C135FD61C4739FB00AA3A01 /* JSONJoy.swift */; }; 20 | 6B3E79DA19D35696006071F7 /* JSONJoyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B3E79D819D35696006071F7 /* JSONJoyTests.swift */; }; 21 | D958023919E6ED8E003C8218 /* JSONJoy.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D958022E19E6ED8E003C8218 /* JSONJoy.framework */; }; 22 | D958024919E6EE2D003C8218 /* JSONJoyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B3E79D819D35696006071F7 /* JSONJoyTests.swift */; }; 23 | /* End PBXBuildFile section */ 24 | 25 | /* Begin PBXContainerItemProxy section */ 26 | 5C135EF81C4734BA00AA3A01 /* PBXContainerItemProxy */ = { 27 | isa = PBXContainerItemProxy; 28 | containerPortal = 6B3E79AE19D355CF006071F7 /* Project object */; 29 | proxyType = 1; 30 | remoteGlobalIDString = 5C135EEC1C4734BA00AA3A01; 31 | remoteInfo = JSONJoytvOS; 32 | }; 33 | D958023A19E6ED8E003C8218 /* PBXContainerItemProxy */ = { 34 | isa = PBXContainerItemProxy; 35 | containerPortal = 6B3E79AE19D355CF006071F7 /* Project object */; 36 | proxyType = 1; 37 | remoteGlobalIDString = D958022D19E6ED8E003C8218; 38 | remoteInfo = JSONJoyOSX; 39 | }; 40 | /* End PBXContainerItemProxy section */ 41 | 42 | /* Begin PBXFileReference section */ 43 | 5C135EED1C4734BA00AA3A01 /* JSONJoy.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = JSONJoy.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 44 | 5C135EF61C4734BA00AA3A01 /* JSONJoytvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JSONJoytvOSTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 45 | 5C135FCB1C47392D00AA3A01 /* JSONJoy.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = JSONJoy.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | 5C135FD51C4739FB00AA3A01 /* JSONJoy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JSONJoy.h; path = Source/JSONJoy.h; sourceTree = SOURCE_ROOT; }; 47 | 5C135FD61C4739FB00AA3A01 /* JSONJoy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONJoy.swift; path = Source/JSONJoy.swift; sourceTree = SOURCE_ROOT; }; 48 | 5C135FDF1C473A0400AA3A01 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Source/Info.plist; sourceTree = SOURCE_ROOT; }; 49 | 6B3E79B719D355CF006071F7 /* JSONJoy.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = JSONJoy.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 50 | 6B3E79C219D355CF006071F7 /* JSONJoyTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JSONJoyTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 51 | 6B3E79D719D35696006071F7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 52 | 6B3E79D819D35696006071F7 /* JSONJoyTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONJoyTests.swift; sourceTree = ""; }; 53 | D958022E19E6ED8E003C8218 /* JSONJoy.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = JSONJoy.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 54 | D958023819E6ED8E003C8218 /* JSONJoyOSXTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JSONJoyOSXTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 55 | /* End PBXFileReference section */ 56 | 57 | /* Begin PBXFrameworksBuildPhase section */ 58 | 5C135EE91C4734BA00AA3A01 /* Frameworks */ = { 59 | isa = PBXFrameworksBuildPhase; 60 | buildActionMask = 2147483647; 61 | files = ( 62 | ); 63 | runOnlyForDeploymentPostprocessing = 0; 64 | }; 65 | 5C135EF31C4734BA00AA3A01 /* Frameworks */ = { 66 | isa = PBXFrameworksBuildPhase; 67 | buildActionMask = 2147483647; 68 | files = ( 69 | 5C135EF71C4734BA00AA3A01 /* JSONJoy.framework in Frameworks */, 70 | ); 71 | runOnlyForDeploymentPostprocessing = 0; 72 | }; 73 | 5C135FC71C47392D00AA3A01 /* Frameworks */ = { 74 | isa = PBXFrameworksBuildPhase; 75 | buildActionMask = 2147483647; 76 | files = ( 77 | ); 78 | runOnlyForDeploymentPostprocessing = 0; 79 | }; 80 | 6B3E79B319D355CF006071F7 /* Frameworks */ = { 81 | isa = PBXFrameworksBuildPhase; 82 | buildActionMask = 2147483647; 83 | files = ( 84 | ); 85 | runOnlyForDeploymentPostprocessing = 0; 86 | }; 87 | 6B3E79BF19D355CF006071F7 /* Frameworks */ = { 88 | isa = PBXFrameworksBuildPhase; 89 | buildActionMask = 2147483647; 90 | files = ( 91 | ); 92 | runOnlyForDeploymentPostprocessing = 0; 93 | }; 94 | D958022A19E6ED8E003C8218 /* Frameworks */ = { 95 | isa = PBXFrameworksBuildPhase; 96 | buildActionMask = 2147483647; 97 | files = ( 98 | ); 99 | runOnlyForDeploymentPostprocessing = 0; 100 | }; 101 | D958023519E6ED8E003C8218 /* Frameworks */ = { 102 | isa = PBXFrameworksBuildPhase; 103 | buildActionMask = 2147483647; 104 | files = ( 105 | D958023919E6ED8E003C8218 /* JSONJoy.framework in Frameworks */, 106 | ); 107 | runOnlyForDeploymentPostprocessing = 0; 108 | }; 109 | /* End PBXFrameworksBuildPhase section */ 110 | 111 | /* Begin PBXGroup section */ 112 | 6B3E79AD19D355CF006071F7 = { 113 | isa = PBXGroup; 114 | children = ( 115 | 6B3E79B919D355CF006071F7 /* JSONJoy */, 116 | 6B3E79D619D35696006071F7 /* Tests */, 117 | 6B3E79B819D355CF006071F7 /* Products */, 118 | ); 119 | sourceTree = ""; 120 | }; 121 | 6B3E79B819D355CF006071F7 /* Products */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | 6B3E79B719D355CF006071F7 /* JSONJoy.framework */, 125 | 6B3E79C219D355CF006071F7 /* JSONJoyTests.xctest */, 126 | D958022E19E6ED8E003C8218 /* JSONJoy.framework */, 127 | D958023819E6ED8E003C8218 /* JSONJoyOSXTests.xctest */, 128 | 5C135EED1C4734BA00AA3A01 /* JSONJoy.framework */, 129 | 5C135EF61C4734BA00AA3A01 /* JSONJoytvOSTests.xctest */, 130 | 5C135FCB1C47392D00AA3A01 /* JSONJoy.framework */, 131 | ); 132 | name = Products; 133 | sourceTree = ""; 134 | }; 135 | 6B3E79B919D355CF006071F7 /* JSONJoy */ = { 136 | isa = PBXGroup; 137 | children = ( 138 | 5C135FD51C4739FB00AA3A01 /* JSONJoy.h */, 139 | 5C135FD61C4739FB00AA3A01 /* JSONJoy.swift */, 140 | 6B3E79BA19D355CF006071F7 /* Supporting Files */, 141 | ); 142 | path = JSONJoy; 143 | sourceTree = ""; 144 | }; 145 | 6B3E79BA19D355CF006071F7 /* Supporting Files */ = { 146 | isa = PBXGroup; 147 | children = ( 148 | 5C135FDF1C473A0400AA3A01 /* Info.plist */, 149 | ); 150 | name = "Supporting Files"; 151 | sourceTree = ""; 152 | }; 153 | 6B3E79D619D35696006071F7 /* Tests */ = { 154 | isa = PBXGroup; 155 | children = ( 156 | 6B3E79D719D35696006071F7 /* Info.plist */, 157 | 6B3E79D819D35696006071F7 /* JSONJoyTests.swift */, 158 | ); 159 | path = Tests; 160 | sourceTree = ""; 161 | }; 162 | /* End PBXGroup section */ 163 | 164 | /* Begin PBXHeadersBuildPhase section */ 165 | 5C135EEA1C4734BA00AA3A01 /* Headers */ = { 166 | isa = PBXHeadersBuildPhase; 167 | buildActionMask = 2147483647; 168 | files = ( 169 | 5C135FD91C4739FB00AA3A01 /* JSONJoy.h in Headers */, 170 | ); 171 | runOnlyForDeploymentPostprocessing = 0; 172 | }; 173 | 5C135FC81C47392D00AA3A01 /* Headers */ = { 174 | isa = PBXHeadersBuildPhase; 175 | buildActionMask = 2147483647; 176 | files = ( 177 | 5C135FDA1C4739FB00AA3A01 /* JSONJoy.h in Headers */, 178 | ); 179 | runOnlyForDeploymentPostprocessing = 0; 180 | }; 181 | 6B3E79B419D355CF006071F7 /* Headers */ = { 182 | isa = PBXHeadersBuildPhase; 183 | buildActionMask = 2147483647; 184 | files = ( 185 | 5C135FD71C4739FB00AA3A01 /* JSONJoy.h in Headers */, 186 | ); 187 | runOnlyForDeploymentPostprocessing = 0; 188 | }; 189 | D958022B19E6ED8E003C8218 /* Headers */ = { 190 | isa = PBXHeadersBuildPhase; 191 | buildActionMask = 2147483647; 192 | files = ( 193 | 5C135FD81C4739FB00AA3A01 /* JSONJoy.h in Headers */, 194 | ); 195 | runOnlyForDeploymentPostprocessing = 0; 196 | }; 197 | /* End PBXHeadersBuildPhase section */ 198 | 199 | /* Begin PBXNativeTarget section */ 200 | 5C135EEC1C4734BA00AA3A01 /* JSONJoytvOS */ = { 201 | isa = PBXNativeTarget; 202 | buildConfigurationList = 5C135F021C4734BA00AA3A01 /* Build configuration list for PBXNativeTarget "JSONJoytvOS" */; 203 | buildPhases = ( 204 | 5C135EE81C4734BA00AA3A01 /* Sources */, 205 | 5C135EE91C4734BA00AA3A01 /* Frameworks */, 206 | 5C135EEA1C4734BA00AA3A01 /* Headers */, 207 | 5C135EEB1C4734BA00AA3A01 /* Resources */, 208 | ); 209 | buildRules = ( 210 | ); 211 | dependencies = ( 212 | ); 213 | name = JSONJoytvOS; 214 | productName = JSONJoytvOS; 215 | productReference = 5C135EED1C4734BA00AA3A01 /* JSONJoy.framework */; 216 | productType = "com.apple.product-type.framework"; 217 | }; 218 | 5C135EF51C4734BA00AA3A01 /* JSONJoytvOSTests */ = { 219 | isa = PBXNativeTarget; 220 | buildConfigurationList = 5C135F031C4734BA00AA3A01 /* Build configuration list for PBXNativeTarget "JSONJoytvOSTests" */; 221 | buildPhases = ( 222 | 5C135EF21C4734BA00AA3A01 /* Sources */, 223 | 5C135EF31C4734BA00AA3A01 /* Frameworks */, 224 | 5C135EF41C4734BA00AA3A01 /* Resources */, 225 | ); 226 | buildRules = ( 227 | ); 228 | dependencies = ( 229 | 5C135EF91C4734BA00AA3A01 /* PBXTargetDependency */, 230 | ); 231 | name = JSONJoytvOSTests; 232 | productName = JSONJoytvOSTests; 233 | productReference = 5C135EF61C4734BA00AA3A01 /* JSONJoytvOSTests.xctest */; 234 | productType = "com.apple.product-type.bundle.unit-test"; 235 | }; 236 | 5C135FCA1C47392D00AA3A01 /* JSONJoyWatchOS */ = { 237 | isa = PBXNativeTarget; 238 | buildConfigurationList = 5C135FD21C47392D00AA3A01 /* Build configuration list for PBXNativeTarget "JSONJoyWatchOS" */; 239 | buildPhases = ( 240 | 5C135FC61C47392D00AA3A01 /* Sources */, 241 | 5C135FC71C47392D00AA3A01 /* Frameworks */, 242 | 5C135FC81C47392D00AA3A01 /* Headers */, 243 | 5C135FC91C47392D00AA3A01 /* Resources */, 244 | ); 245 | buildRules = ( 246 | ); 247 | dependencies = ( 248 | ); 249 | name = JSONJoyWatchOS; 250 | productName = JSONJoyWatchOS; 251 | productReference = 5C135FCB1C47392D00AA3A01 /* JSONJoy.framework */; 252 | productType = "com.apple.product-type.framework"; 253 | }; 254 | 6B3E79B619D355CF006071F7 /* JSONJoy */ = { 255 | isa = PBXNativeTarget; 256 | buildConfigurationList = 6B3E79CA19D355CF006071F7 /* Build configuration list for PBXNativeTarget "JSONJoy" */; 257 | buildPhases = ( 258 | 6B3E79B219D355CF006071F7 /* Sources */, 259 | 6B3E79B319D355CF006071F7 /* Frameworks */, 260 | 6B3E79B419D355CF006071F7 /* Headers */, 261 | 6B3E79B519D355CF006071F7 /* Resources */, 262 | ); 263 | buildRules = ( 264 | ); 265 | dependencies = ( 266 | ); 267 | name = JSONJoy; 268 | productName = JSONJoy; 269 | productReference = 6B3E79B719D355CF006071F7 /* JSONJoy.framework */; 270 | productType = "com.apple.product-type.framework"; 271 | }; 272 | 6B3E79C119D355CF006071F7 /* JSONJoyTests */ = { 273 | isa = PBXNativeTarget; 274 | buildConfigurationList = 6B3E79CD19D355CF006071F7 /* Build configuration list for PBXNativeTarget "JSONJoyTests" */; 275 | buildPhases = ( 276 | 6B3E79BE19D355CF006071F7 /* Sources */, 277 | 6B3E79BF19D355CF006071F7 /* Frameworks */, 278 | 6B3E79C019D355CF006071F7 /* Resources */, 279 | ); 280 | buildRules = ( 281 | ); 282 | dependencies = ( 283 | ); 284 | name = JSONJoyTests; 285 | productName = JSONJoyTests; 286 | productReference = 6B3E79C219D355CF006071F7 /* JSONJoyTests.xctest */; 287 | productType = "com.apple.product-type.bundle.unit-test"; 288 | }; 289 | D958022D19E6ED8E003C8218 /* JSONJoyOSX */ = { 290 | isa = PBXNativeTarget; 291 | buildConfigurationList = D958024519E6ED8E003C8218 /* Build configuration list for PBXNativeTarget "JSONJoyOSX" */; 292 | buildPhases = ( 293 | D958022919E6ED8E003C8218 /* Sources */, 294 | D958022A19E6ED8E003C8218 /* Frameworks */, 295 | D958022B19E6ED8E003C8218 /* Headers */, 296 | D958022C19E6ED8E003C8218 /* Resources */, 297 | ); 298 | buildRules = ( 299 | ); 300 | dependencies = ( 301 | ); 302 | name = JSONJoyOSX; 303 | productName = JSONJoyOSX; 304 | productReference = D958022E19E6ED8E003C8218 /* JSONJoy.framework */; 305 | productType = "com.apple.product-type.framework"; 306 | }; 307 | D958023719E6ED8E003C8218 /* JSONJoyOSXTests */ = { 308 | isa = PBXNativeTarget; 309 | buildConfigurationList = D958024619E6ED8E003C8218 /* Build configuration list for PBXNativeTarget "JSONJoyOSXTests" */; 310 | buildPhases = ( 311 | D958023419E6ED8E003C8218 /* Sources */, 312 | D958023519E6ED8E003C8218 /* Frameworks */, 313 | D958023619E6ED8E003C8218 /* Resources */, 314 | ); 315 | buildRules = ( 316 | ); 317 | dependencies = ( 318 | D958023B19E6ED8E003C8218 /* PBXTargetDependency */, 319 | ); 320 | name = JSONJoyOSXTests; 321 | productName = JSONJoyOSXTests; 322 | productReference = D958023819E6ED8E003C8218 /* JSONJoyOSXTests.xctest */; 323 | productType = "com.apple.product-type.bundle.unit-test"; 324 | }; 325 | /* End PBXNativeTarget section */ 326 | 327 | /* Begin PBXProject section */ 328 | 6B3E79AE19D355CF006071F7 /* Project object */ = { 329 | isa = PBXProject; 330 | attributes = { 331 | LastSwiftUpdateCheck = 0720; 332 | LastUpgradeCheck = 0900; 333 | ORGANIZATIONNAME = Vluxe; 334 | TargetAttributes = { 335 | 5C135EEC1C4734BA00AA3A01 = { 336 | CreatedOnToolsVersion = 7.2; 337 | LastSwiftMigration = 0800; 338 | }; 339 | 5C135EF51C4734BA00AA3A01 = { 340 | CreatedOnToolsVersion = 7.2; 341 | LastSwiftMigration = 0800; 342 | }; 343 | 5C135FCA1C47392D00AA3A01 = { 344 | CreatedOnToolsVersion = 7.2; 345 | LastSwiftMigration = 0800; 346 | }; 347 | 6B3E79B619D355CF006071F7 = { 348 | CreatedOnToolsVersion = 6.0.1; 349 | LastSwiftMigration = 0800; 350 | }; 351 | 6B3E79C119D355CF006071F7 = { 352 | CreatedOnToolsVersion = 6.0.1; 353 | LastSwiftMigration = 0800; 354 | }; 355 | D958022D19E6ED8E003C8218 = { 356 | CreatedOnToolsVersion = 6.1; 357 | LastSwiftMigration = 0800; 358 | }; 359 | D958023719E6ED8E003C8218 = { 360 | CreatedOnToolsVersion = 6.1; 361 | LastSwiftMigration = 0800; 362 | }; 363 | }; 364 | }; 365 | buildConfigurationList = 6B3E79B119D355CF006071F7 /* Build configuration list for PBXProject "JSONJoy" */; 366 | compatibilityVersion = "Xcode 3.2"; 367 | developmentRegion = English; 368 | hasScannedForEncodings = 0; 369 | knownRegions = ( 370 | en, 371 | ); 372 | mainGroup = 6B3E79AD19D355CF006071F7; 373 | productRefGroup = 6B3E79B819D355CF006071F7 /* Products */; 374 | projectDirPath = ""; 375 | projectRoot = ""; 376 | targets = ( 377 | 6B3E79B619D355CF006071F7 /* JSONJoy */, 378 | 6B3E79C119D355CF006071F7 /* JSONJoyTests */, 379 | D958022D19E6ED8E003C8218 /* JSONJoyOSX */, 380 | D958023719E6ED8E003C8218 /* JSONJoyOSXTests */, 381 | 5C135EEC1C4734BA00AA3A01 /* JSONJoytvOS */, 382 | 5C135EF51C4734BA00AA3A01 /* JSONJoytvOSTests */, 383 | 5C135FCA1C47392D00AA3A01 /* JSONJoyWatchOS */, 384 | ); 385 | }; 386 | /* End PBXProject section */ 387 | 388 | /* Begin PBXResourcesBuildPhase section */ 389 | 5C135EEB1C4734BA00AA3A01 /* Resources */ = { 390 | isa = PBXResourcesBuildPhase; 391 | buildActionMask = 2147483647; 392 | files = ( 393 | ); 394 | runOnlyForDeploymentPostprocessing = 0; 395 | }; 396 | 5C135EF41C4734BA00AA3A01 /* Resources */ = { 397 | isa = PBXResourcesBuildPhase; 398 | buildActionMask = 2147483647; 399 | files = ( 400 | ); 401 | runOnlyForDeploymentPostprocessing = 0; 402 | }; 403 | 5C135FC91C47392D00AA3A01 /* Resources */ = { 404 | isa = PBXResourcesBuildPhase; 405 | buildActionMask = 2147483647; 406 | files = ( 407 | ); 408 | runOnlyForDeploymentPostprocessing = 0; 409 | }; 410 | 6B3E79B519D355CF006071F7 /* Resources */ = { 411 | isa = PBXResourcesBuildPhase; 412 | buildActionMask = 2147483647; 413 | files = ( 414 | ); 415 | runOnlyForDeploymentPostprocessing = 0; 416 | }; 417 | 6B3E79C019D355CF006071F7 /* Resources */ = { 418 | isa = PBXResourcesBuildPhase; 419 | buildActionMask = 2147483647; 420 | files = ( 421 | ); 422 | runOnlyForDeploymentPostprocessing = 0; 423 | }; 424 | D958022C19E6ED8E003C8218 /* Resources */ = { 425 | isa = PBXResourcesBuildPhase; 426 | buildActionMask = 2147483647; 427 | files = ( 428 | ); 429 | runOnlyForDeploymentPostprocessing = 0; 430 | }; 431 | D958023619E6ED8E003C8218 /* Resources */ = { 432 | isa = PBXResourcesBuildPhase; 433 | buildActionMask = 2147483647; 434 | files = ( 435 | ); 436 | runOnlyForDeploymentPostprocessing = 0; 437 | }; 438 | /* End PBXResourcesBuildPhase section */ 439 | 440 | /* Begin PBXSourcesBuildPhase section */ 441 | 5C135EE81C4734BA00AA3A01 /* Sources */ = { 442 | isa = PBXSourcesBuildPhase; 443 | buildActionMask = 2147483647; 444 | files = ( 445 | 5C135FDD1C4739FB00AA3A01 /* JSONJoy.swift in Sources */, 446 | ); 447 | runOnlyForDeploymentPostprocessing = 0; 448 | }; 449 | 5C135EF21C4734BA00AA3A01 /* Sources */ = { 450 | isa = PBXSourcesBuildPhase; 451 | buildActionMask = 2147483647; 452 | files = ( 453 | 5C135F061C47350700AA3A01 /* JSONJoyTests.swift in Sources */, 454 | ); 455 | runOnlyForDeploymentPostprocessing = 0; 456 | }; 457 | 5C135FC61C47392D00AA3A01 /* Sources */ = { 458 | isa = PBXSourcesBuildPhase; 459 | buildActionMask = 2147483647; 460 | files = ( 461 | 5C135FDE1C4739FB00AA3A01 /* JSONJoy.swift in Sources */, 462 | ); 463 | runOnlyForDeploymentPostprocessing = 0; 464 | }; 465 | 6B3E79B219D355CF006071F7 /* Sources */ = { 466 | isa = PBXSourcesBuildPhase; 467 | buildActionMask = 2147483647; 468 | files = ( 469 | 5C135FDB1C4739FB00AA3A01 /* JSONJoy.swift in Sources */, 470 | ); 471 | runOnlyForDeploymentPostprocessing = 0; 472 | }; 473 | 6B3E79BE19D355CF006071F7 /* Sources */ = { 474 | isa = PBXSourcesBuildPhase; 475 | buildActionMask = 2147483647; 476 | files = ( 477 | 6B3E79DA19D35696006071F7 /* JSONJoyTests.swift in Sources */, 478 | ); 479 | runOnlyForDeploymentPostprocessing = 0; 480 | }; 481 | D958022919E6ED8E003C8218 /* Sources */ = { 482 | isa = PBXSourcesBuildPhase; 483 | buildActionMask = 2147483647; 484 | files = ( 485 | 5C135FDC1C4739FB00AA3A01 /* JSONJoy.swift in Sources */, 486 | ); 487 | runOnlyForDeploymentPostprocessing = 0; 488 | }; 489 | D958023419E6ED8E003C8218 /* Sources */ = { 490 | isa = PBXSourcesBuildPhase; 491 | buildActionMask = 2147483647; 492 | files = ( 493 | D958024919E6EE2D003C8218 /* JSONJoyTests.swift in Sources */, 494 | ); 495 | runOnlyForDeploymentPostprocessing = 0; 496 | }; 497 | /* End PBXSourcesBuildPhase section */ 498 | 499 | /* Begin PBXTargetDependency section */ 500 | 5C135EF91C4734BA00AA3A01 /* PBXTargetDependency */ = { 501 | isa = PBXTargetDependency; 502 | target = 5C135EEC1C4734BA00AA3A01 /* JSONJoytvOS */; 503 | targetProxy = 5C135EF81C4734BA00AA3A01 /* PBXContainerItemProxy */; 504 | }; 505 | D958023B19E6ED8E003C8218 /* PBXTargetDependency */ = { 506 | isa = PBXTargetDependency; 507 | target = D958022D19E6ED8E003C8218 /* JSONJoyOSX */; 508 | targetProxy = D958023A19E6ED8E003C8218 /* PBXContainerItemProxy */; 509 | }; 510 | /* End PBXTargetDependency section */ 511 | 512 | /* Begin XCBuildConfiguration section */ 513 | 5C135EFE1C4734BA00AA3A01 /* Debug */ = { 514 | isa = XCBuildConfiguration; 515 | buildSettings = { 516 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 517 | DEBUG_INFORMATION_FORMAT = dwarf; 518 | DEFINES_MODULE = YES; 519 | DYLIB_COMPATIBILITY_VERSION = 1; 520 | DYLIB_CURRENT_VERSION = 1; 521 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 522 | GCC_NO_COMMON_BLOCKS = YES; 523 | INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; 524 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 525 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 526 | PRODUCT_BUNDLE_IDENTIFIER = com.vluxe.JSONJoytvOS; 527 | PRODUCT_NAME = JSONJoy; 528 | SDKROOT = appletvos; 529 | SKIP_INSTALL = YES; 530 | SWIFT_VERSION = 4.0; 531 | TARGETED_DEVICE_FAMILY = 3; 532 | TVOS_DEPLOYMENT_TARGET = 9.0; 533 | }; 534 | name = Debug; 535 | }; 536 | 5C135EFF1C4734BA00AA3A01 /* Release */ = { 537 | isa = XCBuildConfiguration; 538 | buildSettings = { 539 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 540 | COPY_PHASE_STRIP = NO; 541 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 542 | DEFINES_MODULE = YES; 543 | DYLIB_COMPATIBILITY_VERSION = 1; 544 | DYLIB_CURRENT_VERSION = 1; 545 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 546 | GCC_NO_COMMON_BLOCKS = YES; 547 | INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; 548 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 549 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 550 | PRODUCT_BUNDLE_IDENTIFIER = com.vluxe.JSONJoytvOS; 551 | PRODUCT_NAME = JSONJoy; 552 | SDKROOT = appletvos; 553 | SKIP_INSTALL = YES; 554 | SWIFT_VERSION = 4.0; 555 | TARGETED_DEVICE_FAMILY = 3; 556 | TVOS_DEPLOYMENT_TARGET = 9.0; 557 | }; 558 | name = Release; 559 | }; 560 | 5C135F001C4734BA00AA3A01 /* Debug */ = { 561 | isa = XCBuildConfiguration; 562 | buildSettings = { 563 | DEBUG_INFORMATION_FORMAT = dwarf; 564 | GCC_NO_COMMON_BLOCKS = YES; 565 | INFOPLIST_FILE = Tests/Info.plist; 566 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 567 | PRODUCT_BUNDLE_IDENTIFIER = com.vluxe.JSONJoytvOSTests; 568 | PRODUCT_NAME = "$(TARGET_NAME)"; 569 | SDKROOT = appletvos; 570 | SWIFT_VERSION = 4.0; 571 | TVOS_DEPLOYMENT_TARGET = 9.1; 572 | }; 573 | name = Debug; 574 | }; 575 | 5C135F011C4734BA00AA3A01 /* Release */ = { 576 | isa = XCBuildConfiguration; 577 | buildSettings = { 578 | COPY_PHASE_STRIP = NO; 579 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 580 | GCC_NO_COMMON_BLOCKS = YES; 581 | INFOPLIST_FILE = Tests/Info.plist; 582 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 583 | PRODUCT_BUNDLE_IDENTIFIER = com.vluxe.JSONJoytvOSTests; 584 | PRODUCT_NAME = "$(TARGET_NAME)"; 585 | SDKROOT = appletvos; 586 | SWIFT_VERSION = 4.0; 587 | TVOS_DEPLOYMENT_TARGET = 9.1; 588 | }; 589 | name = Release; 590 | }; 591 | 5C135FD01C47392D00AA3A01 /* Debug */ = { 592 | isa = XCBuildConfiguration; 593 | buildSettings = { 594 | APPLICATION_EXTENSION_API_ONLY = YES; 595 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 596 | DEBUG_INFORMATION_FORMAT = dwarf; 597 | DEFINES_MODULE = YES; 598 | DYLIB_COMPATIBILITY_VERSION = 1; 599 | DYLIB_CURRENT_VERSION = 1; 600 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 601 | GCC_NO_COMMON_BLOCKS = YES; 602 | INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; 603 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 604 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 605 | PRODUCT_BUNDLE_IDENTIFIER = com.vluxe.JSONJoyWatchOS; 606 | PRODUCT_NAME = JSONJoy; 607 | SDKROOT = watchos; 608 | SKIP_INSTALL = YES; 609 | SWIFT_VERSION = 4.0; 610 | TARGETED_DEVICE_FAMILY = 4; 611 | WATCHOS_DEPLOYMENT_TARGET = 2.1; 612 | }; 613 | name = Debug; 614 | }; 615 | 5C135FD11C47392D00AA3A01 /* Release */ = { 616 | isa = XCBuildConfiguration; 617 | buildSettings = { 618 | APPLICATION_EXTENSION_API_ONLY = YES; 619 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 620 | COPY_PHASE_STRIP = NO; 621 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 622 | DEFINES_MODULE = YES; 623 | DYLIB_COMPATIBILITY_VERSION = 1; 624 | DYLIB_CURRENT_VERSION = 1; 625 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 626 | GCC_NO_COMMON_BLOCKS = YES; 627 | INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; 628 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 629 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 630 | PRODUCT_BUNDLE_IDENTIFIER = com.vluxe.JSONJoyWatchOS; 631 | PRODUCT_NAME = JSONJoy; 632 | SDKROOT = watchos; 633 | SKIP_INSTALL = YES; 634 | SWIFT_VERSION = 4.0; 635 | TARGETED_DEVICE_FAMILY = 4; 636 | WATCHOS_DEPLOYMENT_TARGET = 2.1; 637 | }; 638 | name = Release; 639 | }; 640 | 6B3E79C819D355CF006071F7 /* Debug */ = { 641 | isa = XCBuildConfiguration; 642 | buildSettings = { 643 | ALWAYS_SEARCH_USER_PATHS = NO; 644 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 645 | CLANG_CXX_LIBRARY = "libc++"; 646 | CLANG_ENABLE_MODULES = YES; 647 | CLANG_ENABLE_OBJC_ARC = YES; 648 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 649 | CLANG_WARN_BOOL_CONVERSION = YES; 650 | CLANG_WARN_COMMA = YES; 651 | CLANG_WARN_CONSTANT_CONVERSION = YES; 652 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 653 | CLANG_WARN_EMPTY_BODY = YES; 654 | CLANG_WARN_ENUM_CONVERSION = YES; 655 | CLANG_WARN_INFINITE_RECURSION = YES; 656 | CLANG_WARN_INT_CONVERSION = YES; 657 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 658 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 659 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 660 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 661 | CLANG_WARN_STRICT_PROTOTYPES = YES; 662 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 663 | CLANG_WARN_UNREACHABLE_CODE = YES; 664 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 665 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 666 | COPY_PHASE_STRIP = NO; 667 | CURRENT_PROJECT_VERSION = 1; 668 | ENABLE_STRICT_OBJC_MSGSEND = YES; 669 | ENABLE_TESTABILITY = YES; 670 | GCC_C_LANGUAGE_STANDARD = gnu99; 671 | GCC_DYNAMIC_NO_PIC = NO; 672 | GCC_NO_COMMON_BLOCKS = YES; 673 | GCC_OPTIMIZATION_LEVEL = 0; 674 | GCC_PREPROCESSOR_DEFINITIONS = ( 675 | "DEBUG=1", 676 | "$(inherited)", 677 | ); 678 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 679 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 680 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 681 | GCC_WARN_UNDECLARED_SELECTOR = YES; 682 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 683 | GCC_WARN_UNUSED_FUNCTION = YES; 684 | GCC_WARN_UNUSED_VARIABLE = YES; 685 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 686 | MTL_ENABLE_DEBUG_INFO = YES; 687 | ONLY_ACTIVE_ARCH = YES; 688 | SDKROOT = iphoneos; 689 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 690 | SWIFT_VERSION = 4.0; 691 | TARGETED_DEVICE_FAMILY = "1,2"; 692 | VERSIONING_SYSTEM = "apple-generic"; 693 | VERSION_INFO_PREFIX = ""; 694 | }; 695 | name = Debug; 696 | }; 697 | 6B3E79C919D355CF006071F7 /* Release */ = { 698 | isa = XCBuildConfiguration; 699 | buildSettings = { 700 | ALWAYS_SEARCH_USER_PATHS = NO; 701 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 702 | CLANG_CXX_LIBRARY = "libc++"; 703 | CLANG_ENABLE_MODULES = YES; 704 | CLANG_ENABLE_OBJC_ARC = YES; 705 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 706 | CLANG_WARN_BOOL_CONVERSION = YES; 707 | CLANG_WARN_COMMA = YES; 708 | CLANG_WARN_CONSTANT_CONVERSION = YES; 709 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 710 | CLANG_WARN_EMPTY_BODY = YES; 711 | CLANG_WARN_ENUM_CONVERSION = YES; 712 | CLANG_WARN_INFINITE_RECURSION = YES; 713 | CLANG_WARN_INT_CONVERSION = YES; 714 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 715 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 716 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 717 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 718 | CLANG_WARN_STRICT_PROTOTYPES = YES; 719 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 720 | CLANG_WARN_UNREACHABLE_CODE = YES; 721 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 722 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 723 | COPY_PHASE_STRIP = YES; 724 | CURRENT_PROJECT_VERSION = 1; 725 | ENABLE_NS_ASSERTIONS = NO; 726 | ENABLE_STRICT_OBJC_MSGSEND = YES; 727 | GCC_C_LANGUAGE_STANDARD = gnu99; 728 | GCC_NO_COMMON_BLOCKS = YES; 729 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 730 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 731 | GCC_WARN_UNDECLARED_SELECTOR = YES; 732 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 733 | GCC_WARN_UNUSED_FUNCTION = YES; 734 | GCC_WARN_UNUSED_VARIABLE = YES; 735 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 736 | MTL_ENABLE_DEBUG_INFO = NO; 737 | SDKROOT = iphoneos; 738 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 739 | SWIFT_VERSION = 4.0; 740 | TARGETED_DEVICE_FAMILY = "1,2"; 741 | VALIDATE_PRODUCT = YES; 742 | VERSIONING_SYSTEM = "apple-generic"; 743 | VERSION_INFO_PREFIX = ""; 744 | }; 745 | name = Release; 746 | }; 747 | 6B3E79CB19D355CF006071F7 /* Debug */ = { 748 | isa = XCBuildConfiguration; 749 | buildSettings = { 750 | APPLICATION_EXTENSION_API_ONLY = YES; 751 | CLANG_ENABLE_MODULES = YES; 752 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 753 | DEFINES_MODULE = YES; 754 | DYLIB_COMPATIBILITY_VERSION = 1; 755 | DYLIB_CURRENT_VERSION = 1; 756 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 757 | INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; 758 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 759 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 760 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 761 | PRODUCT_BUNDLE_IDENTIFIER = "com.vluxe.$(PRODUCT_NAME:rfc1034identifier)"; 762 | PRODUCT_NAME = "$(TARGET_NAME)"; 763 | SKIP_INSTALL = YES; 764 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 765 | SWIFT_VERSION = 4.0; 766 | }; 767 | name = Debug; 768 | }; 769 | 6B3E79CC19D355CF006071F7 /* Release */ = { 770 | isa = XCBuildConfiguration; 771 | buildSettings = { 772 | APPLICATION_EXTENSION_API_ONLY = YES; 773 | CLANG_ENABLE_MODULES = YES; 774 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 775 | DEFINES_MODULE = YES; 776 | DYLIB_COMPATIBILITY_VERSION = 1; 777 | DYLIB_CURRENT_VERSION = 1; 778 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 779 | INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; 780 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 781 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 782 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 783 | PRODUCT_BUNDLE_IDENTIFIER = "com.vluxe.$(PRODUCT_NAME:rfc1034identifier)"; 784 | PRODUCT_NAME = "$(TARGET_NAME)"; 785 | SKIP_INSTALL = YES; 786 | SWIFT_VERSION = 4.0; 787 | }; 788 | name = Release; 789 | }; 790 | 6B3E79CE19D355CF006071F7 /* Debug */ = { 791 | isa = XCBuildConfiguration; 792 | buildSettings = { 793 | FRAMEWORK_SEARCH_PATHS = ( 794 | "$(SDKROOT)/Developer/Library/Frameworks", 795 | "$(inherited)", 796 | ); 797 | GCC_PREPROCESSOR_DEFINITIONS = ( 798 | "DEBUG=1", 799 | "$(inherited)", 800 | ); 801 | INFOPLIST_FILE = Tests/Info.plist; 802 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 803 | PRODUCT_BUNDLE_IDENTIFIER = "com.vluxe.$(PRODUCT_NAME:rfc1034identifier)"; 804 | PRODUCT_NAME = "$(TARGET_NAME)"; 805 | SWIFT_VERSION = 4.0; 806 | }; 807 | name = Debug; 808 | }; 809 | 6B3E79CF19D355CF006071F7 /* Release */ = { 810 | isa = XCBuildConfiguration; 811 | buildSettings = { 812 | FRAMEWORK_SEARCH_PATHS = ( 813 | "$(SDKROOT)/Developer/Library/Frameworks", 814 | "$(inherited)", 815 | ); 816 | INFOPLIST_FILE = Tests/Info.plist; 817 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 818 | PRODUCT_BUNDLE_IDENTIFIER = "com.vluxe.$(PRODUCT_NAME:rfc1034identifier)"; 819 | PRODUCT_NAME = "$(TARGET_NAME)"; 820 | SWIFT_VERSION = 4.0; 821 | }; 822 | name = Release; 823 | }; 824 | D958024119E6ED8E003C8218 /* Debug */ = { 825 | isa = XCBuildConfiguration; 826 | buildSettings = { 827 | APPLICATION_EXTENSION_API_ONLY = YES; 828 | COMBINE_HIDPI_IMAGES = YES; 829 | DEFINES_MODULE = YES; 830 | DYLIB_COMPATIBILITY_VERSION = 1; 831 | DYLIB_CURRENT_VERSION = 1; 832 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 833 | FRAMEWORK_VERSION = A; 834 | GCC_PREPROCESSOR_DEFINITIONS = ( 835 | "DEBUG=1", 836 | "$(inherited)", 837 | ); 838 | INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; 839 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 840 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; 841 | MACOSX_DEPLOYMENT_TARGET = 10.10; 842 | PRODUCT_BUNDLE_IDENTIFIER = "com.vluxe.$(PRODUCT_NAME:rfc1034identifier)"; 843 | PRODUCT_NAME = JSONJoy; 844 | SDKROOT = macosx; 845 | SKIP_INSTALL = YES; 846 | SWIFT_VERSION = 4.0; 847 | }; 848 | name = Debug; 849 | }; 850 | D958024219E6ED8E003C8218 /* Release */ = { 851 | isa = XCBuildConfiguration; 852 | buildSettings = { 853 | APPLICATION_EXTENSION_API_ONLY = YES; 854 | COMBINE_HIDPI_IMAGES = YES; 855 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 856 | DEFINES_MODULE = YES; 857 | DYLIB_COMPATIBILITY_VERSION = 1; 858 | DYLIB_CURRENT_VERSION = 1; 859 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 860 | FRAMEWORK_VERSION = A; 861 | INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; 862 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 863 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; 864 | MACOSX_DEPLOYMENT_TARGET = 10.10; 865 | PRODUCT_BUNDLE_IDENTIFIER = "com.vluxe.$(PRODUCT_NAME:rfc1034identifier)"; 866 | PRODUCT_NAME = JSONJoy; 867 | SDKROOT = macosx; 868 | SKIP_INSTALL = YES; 869 | SWIFT_VERSION = 4.0; 870 | }; 871 | name = Release; 872 | }; 873 | D958024319E6ED8E003C8218 /* Debug */ = { 874 | isa = XCBuildConfiguration; 875 | buildSettings = { 876 | COMBINE_HIDPI_IMAGES = YES; 877 | FRAMEWORK_SEARCH_PATHS = ( 878 | "$(DEVELOPER_FRAMEWORKS_DIR)", 879 | "$(inherited)", 880 | ); 881 | GCC_PREPROCESSOR_DEFINITIONS = ( 882 | "DEBUG=1", 883 | "$(inherited)", 884 | ); 885 | INFOPLIST_FILE = Tests/Info.plist; 886 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 887 | MACOSX_DEPLOYMENT_TARGET = 10.10; 888 | PRODUCT_BUNDLE_IDENTIFIER = "com.vluxe.$(PRODUCT_NAME:rfc1034identifier)"; 889 | PRODUCT_NAME = "$(TARGET_NAME)"; 890 | SDKROOT = macosx; 891 | SWIFT_VERSION = 4.0; 892 | }; 893 | name = Debug; 894 | }; 895 | D958024419E6ED8E003C8218 /* Release */ = { 896 | isa = XCBuildConfiguration; 897 | buildSettings = { 898 | COMBINE_HIDPI_IMAGES = YES; 899 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 900 | FRAMEWORK_SEARCH_PATHS = ( 901 | "$(DEVELOPER_FRAMEWORKS_DIR)", 902 | "$(inherited)", 903 | ); 904 | INFOPLIST_FILE = Tests/Info.plist; 905 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 906 | MACOSX_DEPLOYMENT_TARGET = 10.10; 907 | PRODUCT_BUNDLE_IDENTIFIER = "com.vluxe.$(PRODUCT_NAME:rfc1034identifier)"; 908 | PRODUCT_NAME = "$(TARGET_NAME)"; 909 | SDKROOT = macosx; 910 | SWIFT_VERSION = 4.0; 911 | }; 912 | name = Release; 913 | }; 914 | /* End XCBuildConfiguration section */ 915 | 916 | /* Begin XCConfigurationList section */ 917 | 5C135F021C4734BA00AA3A01 /* Build configuration list for PBXNativeTarget "JSONJoytvOS" */ = { 918 | isa = XCConfigurationList; 919 | buildConfigurations = ( 920 | 5C135EFE1C4734BA00AA3A01 /* Debug */, 921 | 5C135EFF1C4734BA00AA3A01 /* Release */, 922 | ); 923 | defaultConfigurationIsVisible = 0; 924 | defaultConfigurationName = Release; 925 | }; 926 | 5C135F031C4734BA00AA3A01 /* Build configuration list for PBXNativeTarget "JSONJoytvOSTests" */ = { 927 | isa = XCConfigurationList; 928 | buildConfigurations = ( 929 | 5C135F001C4734BA00AA3A01 /* Debug */, 930 | 5C135F011C4734BA00AA3A01 /* Release */, 931 | ); 932 | defaultConfigurationIsVisible = 0; 933 | defaultConfigurationName = Release; 934 | }; 935 | 5C135FD21C47392D00AA3A01 /* Build configuration list for PBXNativeTarget "JSONJoyWatchOS" */ = { 936 | isa = XCConfigurationList; 937 | buildConfigurations = ( 938 | 5C135FD01C47392D00AA3A01 /* Debug */, 939 | 5C135FD11C47392D00AA3A01 /* Release */, 940 | ); 941 | defaultConfigurationIsVisible = 0; 942 | defaultConfigurationName = Release; 943 | }; 944 | 6B3E79B119D355CF006071F7 /* Build configuration list for PBXProject "JSONJoy" */ = { 945 | isa = XCConfigurationList; 946 | buildConfigurations = ( 947 | 6B3E79C819D355CF006071F7 /* Debug */, 948 | 6B3E79C919D355CF006071F7 /* Release */, 949 | ); 950 | defaultConfigurationIsVisible = 0; 951 | defaultConfigurationName = Release; 952 | }; 953 | 6B3E79CA19D355CF006071F7 /* Build configuration list for PBXNativeTarget "JSONJoy" */ = { 954 | isa = XCConfigurationList; 955 | buildConfigurations = ( 956 | 6B3E79CB19D355CF006071F7 /* Debug */, 957 | 6B3E79CC19D355CF006071F7 /* Release */, 958 | ); 959 | defaultConfigurationIsVisible = 0; 960 | defaultConfigurationName = Release; 961 | }; 962 | 6B3E79CD19D355CF006071F7 /* Build configuration list for PBXNativeTarget "JSONJoyTests" */ = { 963 | isa = XCConfigurationList; 964 | buildConfigurations = ( 965 | 6B3E79CE19D355CF006071F7 /* Debug */, 966 | 6B3E79CF19D355CF006071F7 /* Release */, 967 | ); 968 | defaultConfigurationIsVisible = 0; 969 | defaultConfigurationName = Release; 970 | }; 971 | D958024519E6ED8E003C8218 /* Build configuration list for PBXNativeTarget "JSONJoyOSX" */ = { 972 | isa = XCConfigurationList; 973 | buildConfigurations = ( 974 | D958024119E6ED8E003C8218 /* Debug */, 975 | D958024219E6ED8E003C8218 /* Release */, 976 | ); 977 | defaultConfigurationIsVisible = 0; 978 | defaultConfigurationName = Release; 979 | }; 980 | D958024619E6ED8E003C8218 /* Build configuration list for PBXNativeTarget "JSONJoyOSXTests" */ = { 981 | isa = XCConfigurationList; 982 | buildConfigurations = ( 983 | D958024319E6ED8E003C8218 /* Debug */, 984 | D958024419E6ED8E003C8218 /* Release */, 985 | ); 986 | defaultConfigurationIsVisible = 0; 987 | defaultConfigurationName = Release; 988 | }; 989 | /* End XCConfigurationList section */ 990 | }; 991 | rootObject = 6B3E79AE19D355CF006071F7 /* Project object */; 992 | } 993 | --------------------------------------------------------------------------------