├── Zeal ├── Zeal.h ├── Info.plist ├── HTTPClientType │ ├── TCPClientType.swift │ ├── HTTPResponseParserType.swift │ ├── TCPStreamType.swift │ ├── HTTPRequestSerializerType.swift │ └── HTTPClientType.swift └── HTTPClient │ ├── HTTPClient.swift │ ├── HTTPParser.swift │ ├── TCPClient.swift │ ├── HTTPSerializer.swift │ └── TCPStream.swift ├── Zeal.xcodeproj ├── project.xcworkspace │ └── contents.xcworkspacedata ├── xcshareddata │ └── xcschemes │ │ ├── Zeal OSX.xcscheme │ │ └── Zeal iOS.xcscheme └── project.pbxproj ├── .gitmodules ├── .gitignore ├── Zeal.podspec ├── Zeal Tests ├── Info.plist └── ZealTests.swift ├── LICENSE └── README.md /Zeal/Zeal.h: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Zeal.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "HTTPParser"] 2 | path = HTTPParser 3 | url = https://github.com/Zewo/HTTPParser.git 4 | branch = master 5 | [submodule "TCPIP"] 6 | path = TCPIP 7 | url = https://github.com/Zewo/TCPIP.git 8 | branch = master 9 | [submodule "GrandCentralDispatch"] 10 | path = GrandCentralDispatch 11 | url = https://github.com/Zewo/GrandCentralDispatch.git 12 | branch = master 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.gitignore.io/api/xcode 2 | 3 | ### Xcode ### 4 | # Xcode 5 | # 6 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 7 | 8 | ## Build generated 9 | build/ 10 | DerivedData 11 | Carthage/ 12 | 13 | ## Various settings 14 | *.pbxuser 15 | !default.pbxuser 16 | *.mode1v3 17 | !default.mode1v3 18 | *.mode2v3 19 | !default.mode2v3 20 | *.perspectivev3 21 | !default.perspectivev3 22 | xcuserdata 23 | 24 | ## Other 25 | *.xccheckout 26 | *.moved-aside 27 | *.xcuserstate 28 | *.xcscmblueprint -------------------------------------------------------------------------------- /Zeal.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'Zeal' 3 | s.version = '0.1' 4 | s.license = 'MIT' 5 | s.summary = 'GCD based HTTP client for Swift 2 (Linux ready)' 6 | s.homepage = 'https://github.com/Zewo/Zeal' 7 | s.authors = { 'Paulo Faria' => 'paulo.faria.rl@gmail.com' } 8 | s.source = { :git => 'https://github.com/Zewo/Zeal.git', :tag => s.version } 9 | 10 | s.ios.deployment_target = '8.0' 11 | s.osx.deployment_target = '10.9' 12 | 13 | s.source_files = 'Zeal/**/*.swift' 14 | 15 | s.dependency 'HTTPParser' 16 | s.dependency 'GrandCentralDispatch' 17 | s.dependency 'TCPIP' 18 | 19 | s.requires_arc = true 20 | end -------------------------------------------------------------------------------- /Zeal 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 | -------------------------------------------------------------------------------- /Zeal/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 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSHumanReadableCopyright 24 | Copyright © 2015 Zewo. All rights reserved. 25 | NSPrincipalClass 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Zewo 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /Zeal/HTTPClientType/TCPClientType.swift: -------------------------------------------------------------------------------- 1 | // TCPClientType.swift 2 | // 3 | // The MIT License (MIT) 4 | // 5 | // Copyright (c) 2015 Zewo 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | // SOFTWARE. 24 | 25 | public protocol TCPClientType { 26 | var host: String { get } 27 | var port: Int { get } 28 | func connect(completion: (Void throws -> TCPStreamType) -> Void) 29 | } -------------------------------------------------------------------------------- /Zeal/HTTPClientType/HTTPResponseParserType.swift: -------------------------------------------------------------------------------- 1 | // HTTPResponseParserType.swift 2 | // 3 | // The MIT License (MIT) 4 | // 5 | // Copyright (c) 2015 Zewo 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | // SOFTWARE. 24 | 25 | import HTTP 26 | 27 | public protocol HTTPResponseParserType { 28 | func parseResponse(client: TCPStreamType, completion: (Void throws -> HTTPResponse) -> Void) 29 | } -------------------------------------------------------------------------------- /Zeal/HTTPClientType/TCPStreamType.swift: -------------------------------------------------------------------------------- 1 | // TCPStreamType.swift 2 | // 3 | // The MIT License (MIT) 4 | // 5 | // Copyright (c) 2015 Zewo 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | // SOFTWARE. 24 | 25 | public protocol TCPStreamType { 26 | func close() 27 | func receive(completion: (Void throws -> [Int8]) -> Void) 28 | func send(data: [Int8], completion: (Void throws -> Void) -> Void) 29 | } 30 | -------------------------------------------------------------------------------- /Zeal/HTTPClientType/HTTPRequestSerializerType.swift: -------------------------------------------------------------------------------- 1 | // HTTPRequestSerializerType.swift 2 | // 3 | // The MIT License (MIT) 4 | // 5 | // Copyright (c) 2015 Zewo 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | // SOFTWARE. 24 | 25 | import HTTP 26 | 27 | public protocol HTTPRequestSerializerType { 28 | func serializeRequest(client: TCPStreamType, request: HTTPRequest, completion: (Void throws -> Void) -> Void) 29 | } -------------------------------------------------------------------------------- /Zeal/HTTPClient/HTTPClient.swift: -------------------------------------------------------------------------------- 1 | // HTTPClient.swift 2 | // 3 | // The MIT License (MIT) 4 | // 5 | // Copyright (c) 2015 Zewo 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | // SOFTWARE. 24 | 25 | import HTTP 26 | 27 | public struct HTTPClient: HTTPClientType { 28 | public let client: TCPClientType 29 | public let serializer: HTTPRequestSerializerType = HTTPSerializer() 30 | public let parser: HTTPResponseParserType = HTTPParser() 31 | 32 | public init(host: String, port: Int) { 33 | self.client = TCPClient(host: host, port: port) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Zeal Tests/ZealTests.swift: -------------------------------------------------------------------------------- 1 | // ZealTests.swift 2 | // 3 | // The MIT License (MIT) 4 | // 5 | // Copyright (c) 2015 Zewo 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | // SOFTWARE. 24 | 25 | import XCTest 26 | import Zeal 27 | import HTTP 28 | import URI 29 | import GrandCentralDispatch 30 | 31 | class ZealTests: XCTestCase { 32 | func testExample() { 33 | let client = HTTPClient(host: "http://www.google.com.br/?gfe_rd=cr&ei=CDBeVsnAL4OX8QevspGwAg", port: 80) 34 | 35 | client.get("/") { result in 36 | do { 37 | let response = try result() 38 | print(response) 39 | } catch { 40 | print(error) 41 | } 42 | } 43 | 44 | GrandCentralDispatch.main() 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Zeal/HTTPClient/HTTPParser.swift: -------------------------------------------------------------------------------- 1 | // HTTPParser.swift 2 | // 3 | // The MIT License (MIT) 4 | // 5 | // Copyright (c) 2015 Zewo 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | // SOFTWARE. 24 | 25 | import HTTP 26 | import HTTPParser 27 | 28 | struct HTTPParser: HTTPResponseParserType { 29 | func parseResponse(client: TCPStreamType, completion: (Void throws -> HTTPResponse) -> Void) { 30 | let parser = HTTPResponseParser { response in 31 | completion({ response }) 32 | } 33 | 34 | client.receive { result in 35 | do { 36 | let data = try result() 37 | try parser.parse(data) 38 | } catch { 39 | completion({ throw error }) 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Zeal/HTTPClient/TCPClient.swift: -------------------------------------------------------------------------------- 1 | // TCPClient.swift 2 | // 3 | // The MIT License (MIT) 4 | // 5 | // Copyright (c) 2015 Zewo 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | // SOFTWARE. 24 | 25 | import TCPIP 26 | import GrandCentralDispatch 27 | 28 | struct TCPClient: TCPClientType { 29 | let host: String 30 | let port: Int 31 | 32 | func connect(completion: (Void throws -> TCPStreamType) -> Void) { 33 | defaultQueue.async { 34 | do { 35 | let ip = try IP(address: self.host, port: self.port) 36 | let socket = try TCPClientSocket(ip: ip) 37 | let stream = TCPStream(socket: socket) 38 | completion({ stream }) 39 | } catch { 40 | completion({ throw error }) 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Zeal/HTTPClient/HTTPSerializer.swift: -------------------------------------------------------------------------------- 1 | // HTTPSerializer.swift 2 | // 3 | // The MIT License (MIT) 4 | // 5 | // Copyright (c) 2015 Zewo 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | // SOFTWARE. 24 | 25 | import URI 26 | import HTTP 27 | 28 | struct HTTPSerializer: HTTPRequestSerializerType { 29 | func serializeRequest(client: TCPStreamType, request: HTTPRequest, completion: (Void throws -> Void) -> Void) { 30 | var string = "\(request.method) \(request.uri) HTTP/\(request.majorVersion).\(request.minorVersion)\r\n" 31 | 32 | for (name, value) in request.headers { 33 | string += "\(name): \(value)\r\n" 34 | } 35 | 36 | string += "\r\n" 37 | 38 | var data = string.utf8.map { Int8($0) } 39 | data += request.body 40 | 41 | client.send(data, completion: completion) 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Zeal/HTTPClient/TCPStream.swift: -------------------------------------------------------------------------------- 1 | // TCPStream.swift 2 | // 3 | // The MIT License (MIT) 4 | // 5 | // Copyright (c) 2015 Zewo 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | // SOFTWARE. 24 | 25 | import TCPIP 26 | import GrandCentralDispatch 27 | 28 | final class TCPStream: TCPStreamType { 29 | let socket: TCPClientSocket 30 | let channel: IOChannel 31 | 32 | init(socket: TCPClientSocket) { 33 | self.socket = socket 34 | 35 | channel = IOChannel(type: .Stream, fileDescriptor: socket.fileDescriptor) { result in 36 | result.failure { error in 37 | print(error) 38 | } 39 | socket.close() 40 | } 41 | 42 | channel.setLowWater(1) 43 | } 44 | 45 | func receive(completion: (Void throws -> [Int8]) -> Void) { 46 | channel.read { result in 47 | result.success { done, data in 48 | completion({ data }) 49 | } 50 | result.failure { error in 51 | completion({ throw error }) 52 | } 53 | } 54 | } 55 | 56 | func send(data: [Int8], completion: (Void throws -> Void) -> Void) { 57 | channel.write(data: data) { result in 58 | result.success { done, _ in 59 | if done { 60 | completion({}) 61 | } 62 | } 63 | result.failure { error in 64 | completion({ throw error }) 65 | } 66 | } 67 | } 68 | 69 | func close() { 70 | channel.close() 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [Deprecated] Zeal 2 | ==== 3 | 4 | [![Swift 2.1](https://img.shields.io/badge/Swift-2.1-orange.svg?style=flat)](https://developer.apple.com/swift/) 5 | [![Platforms OS X | iOS](https://img.shields.io/badge/Platforms-OS%20X%20%7C%20iOS-lightgray.svg?style=flat)](https://developer.apple.com/swift/) 6 | [![Cocoapods Compatible](https://img.shields.io/badge/Cocoapods-Compatible-4BC51D.svg?style=flat)](https://cocoapods.org/pods/Luminescence) 7 | [![Carthage Compatible](https://img.shields.io/badge/Carthage-Compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) 8 | [![License MIT](https://img.shields.io/badge/License-MIT-blue.svg?style=flat)](https://tldrlegal.com/license/mit-license) 9 | [![Slack Status](https://zewo-slackin.herokuapp.com/badge.svg)](https://zewo-slackin.herokuapp.com) 10 | 11 | **Zeal** is a GCD based HTTP client for **Swift 2**. 12 | 13 | ## Features 14 | 15 | - [x] No `Foundation` dependency (**Linux ready**) 16 | 17 | ## Dependencies 18 | 19 | **Zeal** is made of: 20 | 21 | - [TCPIP](https://github.com/Zewo/TCPIP) - TCP/IP 22 | - [GrandCentralDispatch](https://github.com/Zewo/GrandCentralDispatch) - GCD wrapper 23 | - [URI](https://github.com/Zewo/URI) - URI 24 | - [HTTP](https://github.com/Zewo/HTTP) - HTTP request/response 25 | - [HTTPParser](https://github.com/Zewo/HTTPParser) - HTTP parser 26 | 27 | ## Usage 28 | 29 | ```swift 30 | import URI 31 | import HTTP 32 | import Zeal 33 | 34 | let client = HTTPClient(host: "www.apple.com", port: 80) 35 | 36 | client.get("/") { result in 37 | do { 38 | let response = try result() 39 | // do your thing! (: 40 | } catch { 41 | // something bad happened :( 42 | } 43 | } 44 | ``` 45 | 46 | ## Installation 47 | 48 | ### CocoaPods 49 | 50 | [CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command: 51 | 52 | ```bash 53 | $ gem install cocoapods 54 | ``` 55 | 56 | > CocoaPods 0.39.0+ is required to build Zeal. 57 | 58 | To integrate **Zeal** into your Xcode project using CocoaPods, specify it in your `Podfile`: 59 | 60 | ```ruby 61 | source 'https://github.com/Zewo/Specs.git' 62 | source 'https://github.com/CocoaPods/Specs.git' 63 | use_frameworks! 64 | 65 | pod 'Zeal', '0.1' 66 | ``` 67 | > Don't forget `source 'https://github.com/Zewo/Specs.git'`. This is very important. It should always come before the official CocoaPods repo. 68 | 69 | Then, run the following command: 70 | 71 | ```bash 72 | $ pod install 73 | ``` 74 | 75 | ### Carthage 76 | 77 | [Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that automates the process of adding frameworks to your Cocoa application. 78 | 79 | You can install Carthage with [Homebrew](http://brew.sh/) using the following command: 80 | 81 | ```bash 82 | $ brew update 83 | $ brew install carthage 84 | ``` 85 | 86 | To integrate **Zeal** into your Xcode project using Carthage, specify it in your `Cartfile`: 87 | 88 | ```ogdl 89 | github "Zewo/Zeal" == 0.1 90 | ``` 91 | 92 | ### Command Line Application 93 | 94 | To use **Zeal** in a command line application: 95 | 96 | - Install the [Swift Command Line Application](https://github.com/Zewo/Swift-Command-Line-Application-Template) Xcode template 97 | - Follow [Cocoa Pods](#cocoapods) or [Carthage](#carthage) instructions. 98 | 99 | ## Community 100 | 101 | [![Slack](http://s13.postimg.org/ybwy92ktf/Slack.png)](https://zewo-slackin.herokuapp.com) 102 | 103 | Join us on [Slack](https://zewo-slackin.herokuapp.com). 104 | 105 | License 106 | ------- 107 | 108 | **Zeal** is released under the MIT license. See LICENSE for details. 109 | -------------------------------------------------------------------------------- /Zeal.xcodeproj/xcshareddata/xcschemes/Zeal OSX.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 | 65 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 84 | 90 | 91 | 92 | 93 | 95 | 96 | 99 | 100 | 101 | -------------------------------------------------------------------------------- /Zeal.xcodeproj/xcshareddata/xcschemes/Zeal iOS.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 | 65 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 84 | 90 | 91 | 92 | 93 | 95 | 96 | 99 | 100 | 101 | -------------------------------------------------------------------------------- /Zeal/HTTPClientType/HTTPClientType.swift: -------------------------------------------------------------------------------- 1 | // HTTPClientType.swift 2 | // 3 | // The MIT License (MIT) 4 | // 5 | // Copyright (c) 2015 Zewo 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | // SOFTWARE. 24 | 25 | import URI 26 | import HTTP 27 | 28 | public protocol HTTPClientType { 29 | var client: TCPClientType { get } 30 | var serializer: HTTPRequestSerializerType { get } 31 | var parser: HTTPResponseParserType { get } 32 | } 33 | 34 | extension HTTPClientType { 35 | public func send(request: HTTPRequest, result: (Void throws -> HTTPResponse) -> Void) { 36 | client.connect { connectResult in 37 | do { 38 | let stream = try connectResult() 39 | var headers = request.headers 40 | headers["Host"] = "\(self.client.host):\(self.client.port)" 41 | let newRequest = HTTPRequest( 42 | method: request.method, 43 | uri: request.uri, 44 | majorVersion: request.majorVersion, 45 | minorVersion: request.minorVersion, 46 | headers: headers, 47 | body: request.body 48 | ) 49 | self.serializer.serializeRequest(stream, request: newRequest) { serializeResult in 50 | do { 51 | try serializeResult() 52 | } catch { 53 | result({ throw error }) 54 | } 55 | } 56 | self.parser.parseResponse(stream) { parseResult in 57 | do { 58 | let response = try parseResult() 59 | result({ response }) 60 | } catch { 61 | result({ throw error }) 62 | } 63 | } 64 | } catch { 65 | result({ throw error }) 66 | } 67 | } 68 | } 69 | 70 | public func delete(uri: String, headers: [String: String] = [:], body: [Int8] = [], result: (Void throws -> HTTPResponse) -> Void) { 71 | let request = HTTPRequest( 72 | method: .DELETE, 73 | uri: URI(string: uri), 74 | headers: headers, 75 | body: body 76 | ) 77 | send(request, result: result) 78 | } 79 | 80 | public func delete(uri: String, headers: [String: String] = [:], body: String, result: (Void throws -> HTTPResponse) -> Void) { 81 | delete(uri, headers: headers, body: body.data, result: result) 82 | } 83 | 84 | public func get(uri: String, headers: [String: String] = [:], body: [Int8] = [], result: (Void throws -> HTTPResponse) -> Void) { 85 | let request = HTTPRequest( 86 | method: .GET, 87 | uri: URI(string: uri), 88 | headers: headers, 89 | body: body 90 | ) 91 | send(request, result: result) 92 | } 93 | 94 | public func get(uri: String, headers: [String: String] = [:], body: String, result: (Void throws -> HTTPResponse) -> Void) { 95 | get(uri, headers: headers, body: body.data, result: result) 96 | } 97 | 98 | public func head(uri: String, headers: [String: String] = [:], body: [Int8] = [], result: (Void throws -> HTTPResponse) -> Void) { 99 | let request = HTTPRequest( 100 | method: .HEAD, 101 | uri: URI(string: uri), 102 | headers: headers, 103 | body: body 104 | ) 105 | send(request, result: result) 106 | } 107 | 108 | public func head(uri: String, headers: [String: String] = [:], body: String, result: (Void throws -> HTTPResponse) -> Void) { 109 | head(uri, headers: headers, body: body.data, result: result) 110 | } 111 | 112 | public func post(uri: String, headers: [String: String] = [:], body: [Int8] = [], result: (Void throws -> HTTPResponse) -> Void) { 113 | let request = HTTPRequest( 114 | method: .POST, 115 | uri: URI(string: uri), 116 | headers: headers, 117 | body: body 118 | ) 119 | send(request, result: result) 120 | } 121 | 122 | public func post(uri: String, headers: [String: String] = [:], body: String, result: (Void throws -> HTTPResponse) -> Void) { 123 | post(uri, headers: headers, body: body.data, result: result) 124 | } 125 | 126 | public func put(uri: String, headers: [String: String] = [:], body: [Int8] = [], result: (Void throws -> HTTPResponse) -> Void) { 127 | let request = HTTPRequest( 128 | method: .PUT, 129 | uri: URI(string: uri), 130 | headers: headers, 131 | body: body 132 | ) 133 | send(request, result: result) 134 | } 135 | 136 | public func put(uri: String, headers: [String: String] = [:], body: String, result: (Void throws -> HTTPResponse) -> Void) { 137 | put(uri, headers: headers, body: body.data, result: result) 138 | } 139 | 140 | public func connect(uri: String, headers: [String: String] = [:], body: [Int8] = [], result: (Void throws -> HTTPResponse) -> Void) { 141 | let request = HTTPRequest( 142 | method: .CONNECT, 143 | uri: URI(string: uri), 144 | headers: headers, 145 | body: body 146 | ) 147 | send(request, result: result) 148 | } 149 | 150 | public func connect(uri: String, headers: [String: String] = [:], body: String, result: (Void throws -> HTTPResponse) -> Void) { 151 | connect(uri, headers: headers, body: body.data, result: result) 152 | } 153 | 154 | public func options(uri: String, headers: [String: String] = [:], body: [Int8] = [], result: (Void throws -> HTTPResponse) -> Void) { 155 | let request = HTTPRequest( 156 | method: .OPTIONS, 157 | uri: URI(string: uri), 158 | headers: headers, 159 | body: body 160 | ) 161 | send(request, result: result) 162 | } 163 | 164 | public func options(uri: String, headers: [String: String] = [:], body: String, result: (Void throws -> HTTPResponse) -> Void) { 165 | options(uri, headers: headers, body: body.data, result: result) 166 | } 167 | 168 | public func trace(uri: String, headers: [String: String] = [:], body: [Int8] = [], result: (Void throws -> HTTPResponse) -> Void) { 169 | let request = HTTPRequest( 170 | method: .TRACE, 171 | uri: URI(string: uri), 172 | headers: headers, 173 | body: body 174 | ) 175 | send(request, result: result) 176 | } 177 | 178 | public func trace(uri: String, headers: [String: String] = [:], body: String, result: (Void throws -> HTTPResponse) -> Void) { 179 | trace(uri, headers: headers, body: body.data, result: result) 180 | } 181 | } -------------------------------------------------------------------------------- /Zeal.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 3A1C55931BECE19B006EC3F7 /* Zeal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A1C55891BECE19A006EC3F7 /* Zeal.framework */; }; 11 | B076BF691C0C0E5A005010DB /* ZealTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0EA68071C0BEA0100515762 /* ZealTests.swift */; }; 12 | B076BF6A1C0C0E5B005010DB /* ZealTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0EA68071C0BEA0100515762 /* ZealTests.swift */; }; 13 | B076BF861C0C2029005010DB /* HTTPClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF7A1C0C2029005010DB /* HTTPClient.swift */; }; 14 | B076BF871C0C2029005010DB /* HTTPClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF7A1C0C2029005010DB /* HTTPClient.swift */; }; 15 | B076BF881C0C2029005010DB /* HTTPParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF7B1C0C2029005010DB /* HTTPParser.swift */; }; 16 | B076BF891C0C2029005010DB /* HTTPParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF7B1C0C2029005010DB /* HTTPParser.swift */; }; 17 | B076BF8A1C0C2029005010DB /* HTTPSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF7C1C0C2029005010DB /* HTTPSerializer.swift */; }; 18 | B076BF8B1C0C2029005010DB /* HTTPSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF7C1C0C2029005010DB /* HTTPSerializer.swift */; }; 19 | B076BF8C1C0C2029005010DB /* TCPClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF7D1C0C2029005010DB /* TCPClient.swift */; }; 20 | B076BF8D1C0C2029005010DB /* TCPClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF7D1C0C2029005010DB /* TCPClient.swift */; }; 21 | B076BF8E1C0C2029005010DB /* TCPStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF7E1C0C2029005010DB /* TCPStream.swift */; }; 22 | B076BF8F1C0C2029005010DB /* TCPStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF7E1C0C2029005010DB /* TCPStream.swift */; }; 23 | B076BF901C0C2029005010DB /* HTTPClientType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF801C0C2029005010DB /* HTTPClientType.swift */; }; 24 | B076BF911C0C2029005010DB /* HTTPClientType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF801C0C2029005010DB /* HTTPClientType.swift */; }; 25 | B076BF921C0C2029005010DB /* HTTPRequestSerializerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF811C0C2029005010DB /* HTTPRequestSerializerType.swift */; }; 26 | B076BF931C0C2029005010DB /* HTTPRequestSerializerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF811C0C2029005010DB /* HTTPRequestSerializerType.swift */; }; 27 | B076BF941C0C2029005010DB /* HTTPResponseParserType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF821C0C2029005010DB /* HTTPResponseParserType.swift */; }; 28 | B076BF951C0C2029005010DB /* HTTPResponseParserType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF821C0C2029005010DB /* HTTPResponseParserType.swift */; }; 29 | B076BF981C0C2029005010DB /* TCPClientType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF841C0C2029005010DB /* TCPClientType.swift */; }; 30 | B076BF991C0C2029005010DB /* TCPClientType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF841C0C2029005010DB /* TCPClientType.swift */; }; 31 | B076BF9A1C0C2029005010DB /* TCPStreamType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF851C0C2029005010DB /* TCPStreamType.swift */; }; 32 | B076BF9B1C0C2029005010DB /* TCPStreamType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B076BF851C0C2029005010DB /* TCPStreamType.swift */; }; 33 | B0D5217B1BE4F753002063D5 /* Zeal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0D521701BE4F753002063D5 /* Zeal.framework */; }; 34 | B0EA68081C0BEEA000515762 /* Zeal.h in Headers */ = {isa = PBXBuildFile; fileRef = B0EA68041C0BEA0100515762 /* Zeal.h */; settings = {ATTRIBUTES = (Public, ); }; }; 35 | B0EA68091C0BEEA900515762 /* Zeal.h in Headers */ = {isa = PBXBuildFile; fileRef = B0EA68041C0BEA0100515762 /* Zeal.h */; settings = {ATTRIBUTES = (Public, ); }; }; 36 | /* End PBXBuildFile section */ 37 | 38 | /* Begin PBXContainerItemProxy section */ 39 | 3A1C55941BECE19B006EC3F7 /* PBXContainerItemProxy */ = { 40 | isa = PBXContainerItemProxy; 41 | containerPortal = B0D521671BE4F753002063D5 /* Project object */; 42 | proxyType = 1; 43 | remoteGlobalIDString = 3A1C55881BECE19A006EC3F7; 44 | remoteInfo = "Aeon iOS"; 45 | }; 46 | B0D5217C1BE4F753002063D5 /* PBXContainerItemProxy */ = { 47 | isa = PBXContainerItemProxy; 48 | containerPortal = B0D521671BE4F753002063D5 /* Project object */; 49 | proxyType = 1; 50 | remoteGlobalIDString = B0D5216F1BE4F753002063D5; 51 | remoteInfo = Aeon; 52 | }; 53 | B0EA67A71C0BE17F00515762 /* PBXContainerItemProxy */ = { 54 | isa = PBXContainerItemProxy; 55 | containerPortal = B0EA67A01C0BE17F00515762 /* TCPIP.xcodeproj */; 56 | proxyType = 2; 57 | remoteGlobalIDString = B005109B1BE97B7B001B3F26; 58 | remoteInfo = "TCPIP OSX"; 59 | }; 60 | B0EA67A91C0BE17F00515762 /* PBXContainerItemProxy */ = { 61 | isa = PBXContainerItemProxy; 62 | containerPortal = B0EA67A01C0BE17F00515762 /* TCPIP.xcodeproj */; 63 | proxyType = 2; 64 | remoteGlobalIDString = B00510EA1BE9952D001B3F26; 65 | remoteInfo = "TCPIP iOS"; 66 | }; 67 | B0EA67AB1C0BE17F00515762 /* PBXContainerItemProxy */ = { 68 | isa = PBXContainerItemProxy; 69 | containerPortal = B0EA67A01C0BE17F00515762 /* TCPIP.xcodeproj */; 70 | proxyType = 2; 71 | remoteGlobalIDString = B00510A51BE97B7B001B3F26; 72 | remoteInfo = "TCPIP OSX Tests"; 73 | }; 74 | B0EA67AD1C0BE17F00515762 /* PBXContainerItemProxy */ = { 75 | isa = PBXContainerItemProxy; 76 | containerPortal = B0EA67A01C0BE17F00515762 /* TCPIP.xcodeproj */; 77 | proxyType = 2; 78 | remoteGlobalIDString = B00510F31BE9952D001B3F26; 79 | remoteInfo = "TCPIP iOS Tests"; 80 | }; 81 | B0EA67B61C0BE18400515762 /* PBXContainerItemProxy */ = { 82 | isa = PBXContainerItemProxy; 83 | containerPortal = B0EA67AF1C0BE18400515762 /* GrandCentralDispatch.xcodeproj */; 84 | proxyType = 2; 85 | remoteGlobalIDString = B005109B1BE97B7B001B3F26; 86 | remoteInfo = "GrandCentralDispatch OSX"; 87 | }; 88 | B0EA67B81C0BE18400515762 /* PBXContainerItemProxy */ = { 89 | isa = PBXContainerItemProxy; 90 | containerPortal = B0EA67AF1C0BE18400515762 /* GrandCentralDispatch.xcodeproj */; 91 | proxyType = 2; 92 | remoteGlobalIDString = B00510EA1BE9952D001B3F26; 93 | remoteInfo = "GrandCentralDispatch iOS"; 94 | }; 95 | B0EA67BA1C0BE18400515762 /* PBXContainerItemProxy */ = { 96 | isa = PBXContainerItemProxy; 97 | containerPortal = B0EA67AF1C0BE18400515762 /* GrandCentralDispatch.xcodeproj */; 98 | proxyType = 2; 99 | remoteGlobalIDString = B00510A51BE97B7B001B3F26; 100 | remoteInfo = "GrandCentralDispatch OSX Tests"; 101 | }; 102 | B0EA67BC1C0BE18400515762 /* PBXContainerItemProxy */ = { 103 | isa = PBXContainerItemProxy; 104 | containerPortal = B0EA67AF1C0BE18400515762 /* GrandCentralDispatch.xcodeproj */; 105 | proxyType = 2; 106 | remoteGlobalIDString = B00510F31BE9952D001B3F26; 107 | remoteInfo = "GrandCentralDispatch iOS Tests"; 108 | }; 109 | B0EA67C61C0BE18F00515762 /* PBXContainerItemProxy */ = { 110 | isa = PBXContainerItemProxy; 111 | containerPortal = B0EA67BE1C0BE18E00515762 /* HTTPParser.xcodeproj */; 112 | proxyType = 2; 113 | remoteGlobalIDString = B0B94B471BD0C40100D297F3; 114 | remoteInfo = "HTTPParser OSX"; 115 | }; 116 | B0EA67C81C0BE18F00515762 /* PBXContainerItemProxy */ = { 117 | isa = PBXContainerItemProxy; 118 | containerPortal = B0EA67BE1C0BE18E00515762 /* HTTPParser.xcodeproj */; 119 | proxyType = 2; 120 | remoteGlobalIDString = B0B94B111BD099AD00D297F3; 121 | remoteInfo = "HTTPParser iOS"; 122 | }; 123 | B0EA67CA1C0BE18F00515762 /* PBXContainerItemProxy */ = { 124 | isa = PBXContainerItemProxy; 125 | containerPortal = B0EA67BE1C0BE18E00515762 /* HTTPParser.xcodeproj */; 126 | proxyType = 2; 127 | remoteGlobalIDString = B0B94B501BD0C40100D297F3; 128 | remoteInfo = "HTTPParser OSX Tests"; 129 | }; 130 | B0EA67CC1C0BE18F00515762 /* PBXContainerItemProxy */ = { 131 | isa = PBXContainerItemProxy; 132 | containerPortal = B0EA67BE1C0BE18E00515762 /* HTTPParser.xcodeproj */; 133 | proxyType = 2; 134 | remoteGlobalIDString = B0B94B1B1BD099AE00D297F3; 135 | remoteInfo = "HTTPParser iOS Tests"; 136 | }; 137 | B0EA67D41C0BE1AE00515762 /* PBXContainerItemProxy */ = { 138 | isa = PBXContainerItemProxy; 139 | containerPortal = B0EA67A01C0BE17F00515762 /* TCPIP.xcodeproj */; 140 | proxyType = 1; 141 | remoteGlobalIDString = B00510E91BE9952D001B3F26; 142 | remoteInfo = "TCPIP iOS"; 143 | }; 144 | B0EA67D61C0BE1AE00515762 /* PBXContainerItemProxy */ = { 145 | isa = PBXContainerItemProxy; 146 | containerPortal = B0EA67AF1C0BE18400515762 /* GrandCentralDispatch.xcodeproj */; 147 | proxyType = 1; 148 | remoteGlobalIDString = B00510E91BE9952D001B3F26; 149 | remoteInfo = "GrandCentralDispatch iOS"; 150 | }; 151 | B0EA67D81C0BE1AE00515762 /* PBXContainerItemProxy */ = { 152 | isa = PBXContainerItemProxy; 153 | containerPortal = B0EA67BE1C0BE18E00515762 /* HTTPParser.xcodeproj */; 154 | proxyType = 1; 155 | remoteGlobalIDString = B0B94B101BD099AD00D297F3; 156 | remoteInfo = "HTTPParser iOS"; 157 | }; 158 | B0EA67DA1C0BE1B500515762 /* PBXContainerItemProxy */ = { 159 | isa = PBXContainerItemProxy; 160 | containerPortal = B0EA67A01C0BE17F00515762 /* TCPIP.xcodeproj */; 161 | proxyType = 1; 162 | remoteGlobalIDString = B005109A1BE97B7B001B3F26; 163 | remoteInfo = "TCPIP OSX"; 164 | }; 165 | B0EA67DC1C0BE1B500515762 /* PBXContainerItemProxy */ = { 166 | isa = PBXContainerItemProxy; 167 | containerPortal = B0EA67AF1C0BE18400515762 /* GrandCentralDispatch.xcodeproj */; 168 | proxyType = 1; 169 | remoteGlobalIDString = B005109A1BE97B7B001B3F26; 170 | remoteInfo = "GrandCentralDispatch OSX"; 171 | }; 172 | B0EA67DE1C0BE1B500515762 /* PBXContainerItemProxy */ = { 173 | isa = PBXContainerItemProxy; 174 | containerPortal = B0EA67BE1C0BE18E00515762 /* HTTPParser.xcodeproj */; 175 | proxyType = 1; 176 | remoteGlobalIDString = B0B94B461BD0C40100D297F3; 177 | remoteInfo = "HTTPParser OSX"; 178 | }; 179 | /* End PBXContainerItemProxy section */ 180 | 181 | /* Begin PBXFileReference section */ 182 | 3A1C55891BECE19A006EC3F7 /* Zeal.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Zeal.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 183 | 3A1C55921BECE19A006EC3F7 /* ZealTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ZealTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 184 | B076BF7A1C0C2029005010DB /* HTTPClient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPClient.swift; sourceTree = ""; }; 185 | B076BF7B1C0C2029005010DB /* HTTPParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPParser.swift; sourceTree = ""; }; 186 | B076BF7C1C0C2029005010DB /* HTTPSerializer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPSerializer.swift; sourceTree = ""; }; 187 | B076BF7D1C0C2029005010DB /* TCPClient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TCPClient.swift; sourceTree = ""; }; 188 | B076BF7E1C0C2029005010DB /* TCPStream.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TCPStream.swift; sourceTree = ""; }; 189 | B076BF801C0C2029005010DB /* HTTPClientType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPClientType.swift; sourceTree = ""; }; 190 | B076BF811C0C2029005010DB /* HTTPRequestSerializerType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPRequestSerializerType.swift; sourceTree = ""; }; 191 | B076BF821C0C2029005010DB /* HTTPResponseParserType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPResponseParserType.swift; sourceTree = ""; }; 192 | B076BF841C0C2029005010DB /* TCPClientType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TCPClientType.swift; sourceTree = ""; }; 193 | B076BF851C0C2029005010DB /* TCPStreamType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TCPStreamType.swift; sourceTree = ""; }; 194 | B0D521701BE4F753002063D5 /* Zeal.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Zeal.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 195 | B0D5217A1BE4F753002063D5 /* ZealTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ZealTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 196 | B0EA67A01C0BE17F00515762 /* TCPIP.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = TCPIP.xcodeproj; path = TCPIP/TCPIP.xcodeproj; sourceTree = ""; }; 197 | B0EA67AF1C0BE18400515762 /* GrandCentralDispatch.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = GrandCentralDispatch.xcodeproj; path = GrandCentralDispatch/GrandCentralDispatch.xcodeproj; sourceTree = ""; }; 198 | B0EA67BE1C0BE18E00515762 /* HTTPParser.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = HTTPParser.xcodeproj; path = HTTPParser/HTTPParser.xcodeproj; sourceTree = ""; }; 199 | B0EA68031C0BEA0100515762 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 200 | B0EA68041C0BEA0100515762 /* Zeal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Zeal.h; sourceTree = ""; }; 201 | B0EA68061C0BEA0100515762 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 202 | B0EA68071C0BEA0100515762 /* ZealTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZealTests.swift; sourceTree = ""; }; 203 | /* End PBXFileReference section */ 204 | 205 | /* Begin PBXFrameworksBuildPhase section */ 206 | 3A1C55851BECE19A006EC3F7 /* Frameworks */ = { 207 | isa = PBXFrameworksBuildPhase; 208 | buildActionMask = 2147483647; 209 | files = ( 210 | ); 211 | runOnlyForDeploymentPostprocessing = 0; 212 | }; 213 | 3A1C558F1BECE19A006EC3F7 /* Frameworks */ = { 214 | isa = PBXFrameworksBuildPhase; 215 | buildActionMask = 2147483647; 216 | files = ( 217 | 3A1C55931BECE19B006EC3F7 /* Zeal.framework in Frameworks */, 218 | ); 219 | runOnlyForDeploymentPostprocessing = 0; 220 | }; 221 | B0D5216C1BE4F753002063D5 /* Frameworks */ = { 222 | isa = PBXFrameworksBuildPhase; 223 | buildActionMask = 2147483647; 224 | files = ( 225 | ); 226 | runOnlyForDeploymentPostprocessing = 0; 227 | }; 228 | B0D521771BE4F753002063D5 /* Frameworks */ = { 229 | isa = PBXFrameworksBuildPhase; 230 | buildActionMask = 2147483647; 231 | files = ( 232 | B0D5217B1BE4F753002063D5 /* Zeal.framework in Frameworks */, 233 | ); 234 | runOnlyForDeploymentPostprocessing = 0; 235 | }; 236 | /* End PBXFrameworksBuildPhase section */ 237 | 238 | /* Begin PBXGroup section */ 239 | B076BF791C0C2029005010DB /* HTTPClient */ = { 240 | isa = PBXGroup; 241 | children = ( 242 | B076BF7A1C0C2029005010DB /* HTTPClient.swift */, 243 | B076BF7B1C0C2029005010DB /* HTTPParser.swift */, 244 | B076BF7C1C0C2029005010DB /* HTTPSerializer.swift */, 245 | B076BF7D1C0C2029005010DB /* TCPClient.swift */, 246 | B076BF7E1C0C2029005010DB /* TCPStream.swift */, 247 | ); 248 | path = HTTPClient; 249 | sourceTree = ""; 250 | }; 251 | B076BF7F1C0C2029005010DB /* HTTPClientType */ = { 252 | isa = PBXGroup; 253 | children = ( 254 | B076BF801C0C2029005010DB /* HTTPClientType.swift */, 255 | B076BF811C0C2029005010DB /* HTTPRequestSerializerType.swift */, 256 | B076BF821C0C2029005010DB /* HTTPResponseParserType.swift */, 257 | B076BF841C0C2029005010DB /* TCPClientType.swift */, 258 | B076BF851C0C2029005010DB /* TCPStreamType.swift */, 259 | ); 260 | path = HTTPClientType; 261 | sourceTree = ""; 262 | }; 263 | B0D521661BE4F753002063D5 = { 264 | isa = PBXGroup; 265 | children = ( 266 | B0EA67A01C0BE17F00515762 /* TCPIP.xcodeproj */, 267 | B0EA67AF1C0BE18400515762 /* GrandCentralDispatch.xcodeproj */, 268 | B0EA67BE1C0BE18E00515762 /* HTTPParser.xcodeproj */, 269 | B0EA67F51C0BEA0100515762 /* Zeal */, 270 | B0EA68051C0BEA0100515762 /* Zeal Tests */, 271 | B0D521711BE4F753002063D5 /* Products */, 272 | ); 273 | sourceTree = ""; 274 | }; 275 | B0D521711BE4F753002063D5 /* Products */ = { 276 | isa = PBXGroup; 277 | children = ( 278 | B0D521701BE4F753002063D5 /* Zeal.framework */, 279 | B0D5217A1BE4F753002063D5 /* ZealTests.xctest */, 280 | 3A1C55891BECE19A006EC3F7 /* Zeal.framework */, 281 | 3A1C55921BECE19A006EC3F7 /* ZealTests.xctest */, 282 | ); 283 | name = Products; 284 | sourceTree = ""; 285 | }; 286 | B0EA67A11C0BE17F00515762 /* Products */ = { 287 | isa = PBXGroup; 288 | children = ( 289 | B0EA67A81C0BE17F00515762 /* TCPIP.framework */, 290 | B0EA67AA1C0BE17F00515762 /* TCPIP.framework */, 291 | B0EA67AC1C0BE17F00515762 /* TCPIP.xctest */, 292 | B0EA67AE1C0BE17F00515762 /* TCPIP.xctest */, 293 | ); 294 | name = Products; 295 | sourceTree = ""; 296 | }; 297 | B0EA67B01C0BE18400515762 /* Products */ = { 298 | isa = PBXGroup; 299 | children = ( 300 | B0EA67B71C0BE18400515762 /* GrandCentralDispatch.framework */, 301 | B0EA67B91C0BE18400515762 /* GrandCentralDispatch.framework */, 302 | B0EA67BB1C0BE18400515762 /* GrandCentralDispatchTests.xctest */, 303 | B0EA67BD1C0BE18400515762 /* GrandCentralDispatchTests.xctest */, 304 | ); 305 | name = Products; 306 | sourceTree = ""; 307 | }; 308 | B0EA67BF1C0BE18E00515762 /* Products */ = { 309 | isa = PBXGroup; 310 | children = ( 311 | B0EA67C71C0BE18F00515762 /* HTTPParser.framework */, 312 | B0EA67C91C0BE18F00515762 /* HTTPParser.framework */, 313 | B0EA67CB1C0BE18F00515762 /* LuminescenceTests.xctest */, 314 | B0EA67CD1C0BE18F00515762 /* LuminescenceTests.xctest */, 315 | ); 316 | name = Products; 317 | sourceTree = ""; 318 | }; 319 | B0EA67F51C0BEA0100515762 /* Zeal */ = { 320 | isa = PBXGroup; 321 | children = ( 322 | B076BF791C0C2029005010DB /* HTTPClient */, 323 | B076BF7F1C0C2029005010DB /* HTTPClientType */, 324 | B0EA68031C0BEA0100515762 /* Info.plist */, 325 | B0EA68041C0BEA0100515762 /* Zeal.h */, 326 | ); 327 | path = Zeal; 328 | sourceTree = ""; 329 | }; 330 | B0EA68051C0BEA0100515762 /* Zeal Tests */ = { 331 | isa = PBXGroup; 332 | children = ( 333 | B0EA68061C0BEA0100515762 /* Info.plist */, 334 | B0EA68071C0BEA0100515762 /* ZealTests.swift */, 335 | ); 336 | path = "Zeal Tests"; 337 | sourceTree = ""; 338 | }; 339 | /* End PBXGroup section */ 340 | 341 | /* Begin PBXHeadersBuildPhase section */ 342 | 3A1C55861BECE19A006EC3F7 /* Headers */ = { 343 | isa = PBXHeadersBuildPhase; 344 | buildActionMask = 2147483647; 345 | files = ( 346 | B0EA68081C0BEEA000515762 /* Zeal.h in Headers */, 347 | ); 348 | runOnlyForDeploymentPostprocessing = 0; 349 | }; 350 | B0D5216D1BE4F753002063D5 /* Headers */ = { 351 | isa = PBXHeadersBuildPhase; 352 | buildActionMask = 2147483647; 353 | files = ( 354 | B0EA68091C0BEEA900515762 /* Zeal.h in Headers */, 355 | ); 356 | runOnlyForDeploymentPostprocessing = 0; 357 | }; 358 | /* End PBXHeadersBuildPhase section */ 359 | 360 | /* Begin PBXNativeTarget section */ 361 | 3A1C55881BECE19A006EC3F7 /* Zeal iOS */ = { 362 | isa = PBXNativeTarget; 363 | buildConfigurationList = 3A1C559A1BECE19B006EC3F7 /* Build configuration list for PBXNativeTarget "Zeal iOS" */; 364 | buildPhases = ( 365 | 3A1C55841BECE19A006EC3F7 /* Sources */, 366 | 3A1C55851BECE19A006EC3F7 /* Frameworks */, 367 | 3A1C55861BECE19A006EC3F7 /* Headers */, 368 | 3A1C55871BECE19A006EC3F7 /* Resources */, 369 | ); 370 | buildRules = ( 371 | ); 372 | dependencies = ( 373 | B0EA67D51C0BE1AE00515762 /* PBXTargetDependency */, 374 | B0EA67D71C0BE1AE00515762 /* PBXTargetDependency */, 375 | B0EA67D91C0BE1AE00515762 /* PBXTargetDependency */, 376 | ); 377 | name = "Zeal iOS"; 378 | productName = "Aeon iOS"; 379 | productReference = 3A1C55891BECE19A006EC3F7 /* Zeal.framework */; 380 | productType = "com.apple.product-type.framework"; 381 | }; 382 | 3A1C55911BECE19A006EC3F7 /* Zeal iOS Tests */ = { 383 | isa = PBXNativeTarget; 384 | buildConfigurationList = 3A1C559D1BECE19B006EC3F7 /* Build configuration list for PBXNativeTarget "Zeal iOS Tests" */; 385 | buildPhases = ( 386 | 3A1C558E1BECE19A006EC3F7 /* Sources */, 387 | 3A1C558F1BECE19A006EC3F7 /* Frameworks */, 388 | 3A1C55901BECE19A006EC3F7 /* Resources */, 389 | ); 390 | buildRules = ( 391 | ); 392 | dependencies = ( 393 | 3A1C55951BECE19B006EC3F7 /* PBXTargetDependency */, 394 | ); 395 | name = "Zeal iOS Tests"; 396 | productName = "Aeon iOSTests"; 397 | productReference = 3A1C55921BECE19A006EC3F7 /* ZealTests.xctest */; 398 | productType = "com.apple.product-type.bundle.unit-test"; 399 | }; 400 | B0D5216F1BE4F753002063D5 /* Zeal OSX */ = { 401 | isa = PBXNativeTarget; 402 | buildConfigurationList = B0D521841BE4F753002063D5 /* Build configuration list for PBXNativeTarget "Zeal OSX" */; 403 | buildPhases = ( 404 | B0D5216B1BE4F753002063D5 /* Sources */, 405 | B0D5216C1BE4F753002063D5 /* Frameworks */, 406 | B0D5216D1BE4F753002063D5 /* Headers */, 407 | B0D5216E1BE4F753002063D5 /* Resources */, 408 | ); 409 | buildRules = ( 410 | ); 411 | dependencies = ( 412 | B0EA67DB1C0BE1B500515762 /* PBXTargetDependency */, 413 | B0EA67DD1C0BE1B500515762 /* PBXTargetDependency */, 414 | B0EA67DF1C0BE1B500515762 /* PBXTargetDependency */, 415 | ); 416 | name = "Zeal OSX"; 417 | productName = Aeon; 418 | productReference = B0D521701BE4F753002063D5 /* Zeal.framework */; 419 | productType = "com.apple.product-type.framework"; 420 | }; 421 | B0D521791BE4F753002063D5 /* Zeal OSX Tests */ = { 422 | isa = PBXNativeTarget; 423 | buildConfigurationList = B0D521871BE4F753002063D5 /* Build configuration list for PBXNativeTarget "Zeal OSX Tests" */; 424 | buildPhases = ( 425 | B0D521761BE4F753002063D5 /* Sources */, 426 | B0D521771BE4F753002063D5 /* Frameworks */, 427 | B0D521781BE4F753002063D5 /* Resources */, 428 | ); 429 | buildRules = ( 430 | ); 431 | dependencies = ( 432 | B0D5217D1BE4F753002063D5 /* PBXTargetDependency */, 433 | ); 434 | name = "Zeal OSX Tests"; 435 | productName = AeonTests; 436 | productReference = B0D5217A1BE4F753002063D5 /* ZealTests.xctest */; 437 | productType = "com.apple.product-type.bundle.unit-test"; 438 | }; 439 | /* End PBXNativeTarget section */ 440 | 441 | /* Begin PBXProject section */ 442 | B0D521671BE4F753002063D5 /* Project object */ = { 443 | isa = PBXProject; 444 | attributes = { 445 | LastSwiftUpdateCheck = 0710; 446 | LastUpgradeCheck = 0710; 447 | ORGANIZATIONNAME = Zewo; 448 | TargetAttributes = { 449 | 3A1C55881BECE19A006EC3F7 = { 450 | CreatedOnToolsVersion = 7.1; 451 | }; 452 | 3A1C55911BECE19A006EC3F7 = { 453 | CreatedOnToolsVersion = 7.1; 454 | }; 455 | B0D5216F1BE4F753002063D5 = { 456 | CreatedOnToolsVersion = 7.1; 457 | }; 458 | B0D521791BE4F753002063D5 = { 459 | CreatedOnToolsVersion = 7.1; 460 | }; 461 | }; 462 | }; 463 | buildConfigurationList = B0D5216A1BE4F753002063D5 /* Build configuration list for PBXProject "Zeal" */; 464 | compatibilityVersion = "Xcode 3.2"; 465 | developmentRegion = English; 466 | hasScannedForEncodings = 0; 467 | knownRegions = ( 468 | en, 469 | ); 470 | mainGroup = B0D521661BE4F753002063D5; 471 | productRefGroup = B0D521711BE4F753002063D5 /* Products */; 472 | projectDirPath = ""; 473 | projectReferences = ( 474 | { 475 | ProductGroup = B0EA67B01C0BE18400515762 /* Products */; 476 | ProjectRef = B0EA67AF1C0BE18400515762 /* GrandCentralDispatch.xcodeproj */; 477 | }, 478 | { 479 | ProductGroup = B0EA67BF1C0BE18E00515762 /* Products */; 480 | ProjectRef = B0EA67BE1C0BE18E00515762 /* HTTPParser.xcodeproj */; 481 | }, 482 | { 483 | ProductGroup = B0EA67A11C0BE17F00515762 /* Products */; 484 | ProjectRef = B0EA67A01C0BE17F00515762 /* TCPIP.xcodeproj */; 485 | }, 486 | ); 487 | projectRoot = ""; 488 | targets = ( 489 | B0D5216F1BE4F753002063D5 /* Zeal OSX */, 490 | 3A1C55881BECE19A006EC3F7 /* Zeal iOS */, 491 | B0D521791BE4F753002063D5 /* Zeal OSX Tests */, 492 | 3A1C55911BECE19A006EC3F7 /* Zeal iOS Tests */, 493 | ); 494 | }; 495 | /* End PBXProject section */ 496 | 497 | /* Begin PBXReferenceProxy section */ 498 | B0EA67A81C0BE17F00515762 /* TCPIP.framework */ = { 499 | isa = PBXReferenceProxy; 500 | fileType = wrapper.framework; 501 | path = TCPIP.framework; 502 | remoteRef = B0EA67A71C0BE17F00515762 /* PBXContainerItemProxy */; 503 | sourceTree = BUILT_PRODUCTS_DIR; 504 | }; 505 | B0EA67AA1C0BE17F00515762 /* TCPIP.framework */ = { 506 | isa = PBXReferenceProxy; 507 | fileType = wrapper.framework; 508 | path = TCPIP.framework; 509 | remoteRef = B0EA67A91C0BE17F00515762 /* PBXContainerItemProxy */; 510 | sourceTree = BUILT_PRODUCTS_DIR; 511 | }; 512 | B0EA67AC1C0BE17F00515762 /* TCPIP.xctest */ = { 513 | isa = PBXReferenceProxy; 514 | fileType = wrapper.cfbundle; 515 | name = TCPIP.xctest; 516 | path = TCPIPTests.xctest; 517 | remoteRef = B0EA67AB1C0BE17F00515762 /* PBXContainerItemProxy */; 518 | sourceTree = BUILT_PRODUCTS_DIR; 519 | }; 520 | B0EA67AE1C0BE17F00515762 /* TCPIP.xctest */ = { 521 | isa = PBXReferenceProxy; 522 | fileType = wrapper.cfbundle; 523 | name = TCPIP.xctest; 524 | path = TCPIPTests.xctest; 525 | remoteRef = B0EA67AD1C0BE17F00515762 /* PBXContainerItemProxy */; 526 | sourceTree = BUILT_PRODUCTS_DIR; 527 | }; 528 | B0EA67B71C0BE18400515762 /* GrandCentralDispatch.framework */ = { 529 | isa = PBXReferenceProxy; 530 | fileType = wrapper.framework; 531 | path = GrandCentralDispatch.framework; 532 | remoteRef = B0EA67B61C0BE18400515762 /* PBXContainerItemProxy */; 533 | sourceTree = BUILT_PRODUCTS_DIR; 534 | }; 535 | B0EA67B91C0BE18400515762 /* GrandCentralDispatch.framework */ = { 536 | isa = PBXReferenceProxy; 537 | fileType = wrapper.framework; 538 | path = GrandCentralDispatch.framework; 539 | remoteRef = B0EA67B81C0BE18400515762 /* PBXContainerItemProxy */; 540 | sourceTree = BUILT_PRODUCTS_DIR; 541 | }; 542 | B0EA67BB1C0BE18400515762 /* GrandCentralDispatchTests.xctest */ = { 543 | isa = PBXReferenceProxy; 544 | fileType = wrapper.cfbundle; 545 | path = GrandCentralDispatchTests.xctest; 546 | remoteRef = B0EA67BA1C0BE18400515762 /* PBXContainerItemProxy */; 547 | sourceTree = BUILT_PRODUCTS_DIR; 548 | }; 549 | B0EA67BD1C0BE18400515762 /* GrandCentralDispatchTests.xctest */ = { 550 | isa = PBXReferenceProxy; 551 | fileType = wrapper.cfbundle; 552 | path = GrandCentralDispatchTests.xctest; 553 | remoteRef = B0EA67BC1C0BE18400515762 /* PBXContainerItemProxy */; 554 | sourceTree = BUILT_PRODUCTS_DIR; 555 | }; 556 | B0EA67C71C0BE18F00515762 /* HTTPParser.framework */ = { 557 | isa = PBXReferenceProxy; 558 | fileType = wrapper.framework; 559 | path = HTTPParser.framework; 560 | remoteRef = B0EA67C61C0BE18F00515762 /* PBXContainerItemProxy */; 561 | sourceTree = BUILT_PRODUCTS_DIR; 562 | }; 563 | B0EA67C91C0BE18F00515762 /* HTTPParser.framework */ = { 564 | isa = PBXReferenceProxy; 565 | fileType = wrapper.framework; 566 | path = HTTPParser.framework; 567 | remoteRef = B0EA67C81C0BE18F00515762 /* PBXContainerItemProxy */; 568 | sourceTree = BUILT_PRODUCTS_DIR; 569 | }; 570 | B0EA67CB1C0BE18F00515762 /* LuminescenceTests.xctest */ = { 571 | isa = PBXReferenceProxy; 572 | fileType = wrapper.cfbundle; 573 | name = LuminescenceTests.xctest; 574 | path = HTTPParserTests.xctest; 575 | remoteRef = B0EA67CA1C0BE18F00515762 /* PBXContainerItemProxy */; 576 | sourceTree = BUILT_PRODUCTS_DIR; 577 | }; 578 | B0EA67CD1C0BE18F00515762 /* LuminescenceTests.xctest */ = { 579 | isa = PBXReferenceProxy; 580 | fileType = wrapper.cfbundle; 581 | name = LuminescenceTests.xctest; 582 | path = HTTPParserTests.xctest; 583 | remoteRef = B0EA67CC1C0BE18F00515762 /* PBXContainerItemProxy */; 584 | sourceTree = BUILT_PRODUCTS_DIR; 585 | }; 586 | /* End PBXReferenceProxy section */ 587 | 588 | /* Begin PBXResourcesBuildPhase section */ 589 | 3A1C55871BECE19A006EC3F7 /* Resources */ = { 590 | isa = PBXResourcesBuildPhase; 591 | buildActionMask = 2147483647; 592 | files = ( 593 | ); 594 | runOnlyForDeploymentPostprocessing = 0; 595 | }; 596 | 3A1C55901BECE19A006EC3F7 /* Resources */ = { 597 | isa = PBXResourcesBuildPhase; 598 | buildActionMask = 2147483647; 599 | files = ( 600 | ); 601 | runOnlyForDeploymentPostprocessing = 0; 602 | }; 603 | B0D5216E1BE4F753002063D5 /* Resources */ = { 604 | isa = PBXResourcesBuildPhase; 605 | buildActionMask = 2147483647; 606 | files = ( 607 | ); 608 | runOnlyForDeploymentPostprocessing = 0; 609 | }; 610 | B0D521781BE4F753002063D5 /* Resources */ = { 611 | isa = PBXResourcesBuildPhase; 612 | buildActionMask = 2147483647; 613 | files = ( 614 | ); 615 | runOnlyForDeploymentPostprocessing = 0; 616 | }; 617 | /* End PBXResourcesBuildPhase section */ 618 | 619 | /* Begin PBXSourcesBuildPhase section */ 620 | 3A1C55841BECE19A006EC3F7 /* Sources */ = { 621 | isa = PBXSourcesBuildPhase; 622 | buildActionMask = 2147483647; 623 | files = ( 624 | B076BF8D1C0C2029005010DB /* TCPClient.swift in Sources */, 625 | B076BF931C0C2029005010DB /* HTTPRequestSerializerType.swift in Sources */, 626 | B076BF8B1C0C2029005010DB /* HTTPSerializer.swift in Sources */, 627 | B076BF911C0C2029005010DB /* HTTPClientType.swift in Sources */, 628 | B076BF891C0C2029005010DB /* HTTPParser.swift in Sources */, 629 | B076BF991C0C2029005010DB /* TCPClientType.swift in Sources */, 630 | B076BF9B1C0C2029005010DB /* TCPStreamType.swift in Sources */, 631 | B076BF951C0C2029005010DB /* HTTPResponseParserType.swift in Sources */, 632 | B076BF871C0C2029005010DB /* HTTPClient.swift in Sources */, 633 | B076BF8F1C0C2029005010DB /* TCPStream.swift in Sources */, 634 | ); 635 | runOnlyForDeploymentPostprocessing = 0; 636 | }; 637 | 3A1C558E1BECE19A006EC3F7 /* Sources */ = { 638 | isa = PBXSourcesBuildPhase; 639 | buildActionMask = 2147483647; 640 | files = ( 641 | B076BF6A1C0C0E5B005010DB /* ZealTests.swift in Sources */, 642 | ); 643 | runOnlyForDeploymentPostprocessing = 0; 644 | }; 645 | B0D5216B1BE4F753002063D5 /* Sources */ = { 646 | isa = PBXSourcesBuildPhase; 647 | buildActionMask = 2147483647; 648 | files = ( 649 | B076BF8C1C0C2029005010DB /* TCPClient.swift in Sources */, 650 | B076BF921C0C2029005010DB /* HTTPRequestSerializerType.swift in Sources */, 651 | B076BF8A1C0C2029005010DB /* HTTPSerializer.swift in Sources */, 652 | B076BF901C0C2029005010DB /* HTTPClientType.swift in Sources */, 653 | B076BF881C0C2029005010DB /* HTTPParser.swift in Sources */, 654 | B076BF981C0C2029005010DB /* TCPClientType.swift in Sources */, 655 | B076BF9A1C0C2029005010DB /* TCPStreamType.swift in Sources */, 656 | B076BF941C0C2029005010DB /* HTTPResponseParserType.swift in Sources */, 657 | B076BF861C0C2029005010DB /* HTTPClient.swift in Sources */, 658 | B076BF8E1C0C2029005010DB /* TCPStream.swift in Sources */, 659 | ); 660 | runOnlyForDeploymentPostprocessing = 0; 661 | }; 662 | B0D521761BE4F753002063D5 /* Sources */ = { 663 | isa = PBXSourcesBuildPhase; 664 | buildActionMask = 2147483647; 665 | files = ( 666 | B076BF691C0C0E5A005010DB /* ZealTests.swift in Sources */, 667 | ); 668 | runOnlyForDeploymentPostprocessing = 0; 669 | }; 670 | /* End PBXSourcesBuildPhase section */ 671 | 672 | /* Begin PBXTargetDependency section */ 673 | 3A1C55951BECE19B006EC3F7 /* PBXTargetDependency */ = { 674 | isa = PBXTargetDependency; 675 | target = 3A1C55881BECE19A006EC3F7 /* Zeal iOS */; 676 | targetProxy = 3A1C55941BECE19B006EC3F7 /* PBXContainerItemProxy */; 677 | }; 678 | B0D5217D1BE4F753002063D5 /* PBXTargetDependency */ = { 679 | isa = PBXTargetDependency; 680 | target = B0D5216F1BE4F753002063D5 /* Zeal OSX */; 681 | targetProxy = B0D5217C1BE4F753002063D5 /* PBXContainerItemProxy */; 682 | }; 683 | B0EA67D51C0BE1AE00515762 /* PBXTargetDependency */ = { 684 | isa = PBXTargetDependency; 685 | name = "TCPIP iOS"; 686 | targetProxy = B0EA67D41C0BE1AE00515762 /* PBXContainerItemProxy */; 687 | }; 688 | B0EA67D71C0BE1AE00515762 /* PBXTargetDependency */ = { 689 | isa = PBXTargetDependency; 690 | name = "GrandCentralDispatch iOS"; 691 | targetProxy = B0EA67D61C0BE1AE00515762 /* PBXContainerItemProxy */; 692 | }; 693 | B0EA67D91C0BE1AE00515762 /* PBXTargetDependency */ = { 694 | isa = PBXTargetDependency; 695 | name = "HTTPParser iOS"; 696 | targetProxy = B0EA67D81C0BE1AE00515762 /* PBXContainerItemProxy */; 697 | }; 698 | B0EA67DB1C0BE1B500515762 /* PBXTargetDependency */ = { 699 | isa = PBXTargetDependency; 700 | name = "TCPIP OSX"; 701 | targetProxy = B0EA67DA1C0BE1B500515762 /* PBXContainerItemProxy */; 702 | }; 703 | B0EA67DD1C0BE1B500515762 /* PBXTargetDependency */ = { 704 | isa = PBXTargetDependency; 705 | name = "GrandCentralDispatch OSX"; 706 | targetProxy = B0EA67DC1C0BE1B500515762 /* PBXContainerItemProxy */; 707 | }; 708 | B0EA67DF1C0BE1B500515762 /* PBXTargetDependency */ = { 709 | isa = PBXTargetDependency; 710 | name = "HTTPParser OSX"; 711 | targetProxy = B0EA67DE1C0BE1B500515762 /* PBXContainerItemProxy */; 712 | }; 713 | /* End PBXTargetDependency section */ 714 | 715 | /* Begin XCBuildConfiguration section */ 716 | 3A1C559B1BECE19B006EC3F7 /* Debug */ = { 717 | isa = XCBuildConfiguration; 718 | buildSettings = { 719 | CODE_SIGN_IDENTITY = "iPhone Developer"; 720 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 721 | DEFINES_MODULE = YES; 722 | DYLIB_COMPATIBILITY_VERSION = 1; 723 | DYLIB_CURRENT_VERSION = 1; 724 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 725 | INFOPLIST_FILE = Zeal/Info.plist; 726 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 727 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 728 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 729 | PRODUCT_BUNDLE_IDENTIFIER = com.zewo.Zeal; 730 | PRODUCT_NAME = Zeal; 731 | SDKROOT = iphoneos; 732 | SKIP_INSTALL = YES; 733 | TARGETED_DEVICE_FAMILY = "1,2"; 734 | }; 735 | name = Debug; 736 | }; 737 | 3A1C559C1BECE19B006EC3F7 /* Release */ = { 738 | isa = XCBuildConfiguration; 739 | buildSettings = { 740 | CODE_SIGN_IDENTITY = "iPhone Developer"; 741 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 742 | DEFINES_MODULE = YES; 743 | DYLIB_COMPATIBILITY_VERSION = 1; 744 | DYLIB_CURRENT_VERSION = 1; 745 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 746 | INFOPLIST_FILE = Zeal/Info.plist; 747 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 748 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 749 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 750 | PRODUCT_BUNDLE_IDENTIFIER = com.zewo.Zeal; 751 | PRODUCT_NAME = Zeal; 752 | SDKROOT = iphoneos; 753 | SKIP_INSTALL = YES; 754 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 755 | TARGETED_DEVICE_FAMILY = "1,2"; 756 | VALIDATE_PRODUCT = YES; 757 | }; 758 | name = Release; 759 | }; 760 | 3A1C559E1BECE19B006EC3F7 /* Debug */ = { 761 | isa = XCBuildConfiguration; 762 | buildSettings = { 763 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 764 | INFOPLIST_FILE = "Zeal Tests/Info.plist"; 765 | IPHONEOS_DEPLOYMENT_TARGET = 9.1; 766 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 767 | PRODUCT_BUNDLE_IDENTIFIER = com.zewo.ZealTests; 768 | PRODUCT_NAME = ZealTests; 769 | SDKROOT = iphoneos; 770 | }; 771 | name = Debug; 772 | }; 773 | 3A1C559F1BECE19B006EC3F7 /* Release */ = { 774 | isa = XCBuildConfiguration; 775 | buildSettings = { 776 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 777 | INFOPLIST_FILE = "Zeal Tests/Info.plist"; 778 | IPHONEOS_DEPLOYMENT_TARGET = 9.1; 779 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 780 | PRODUCT_BUNDLE_IDENTIFIER = com.zewo.ZealTests; 781 | PRODUCT_NAME = ZealTests; 782 | SDKROOT = iphoneos; 783 | VALIDATE_PRODUCT = YES; 784 | }; 785 | name = Release; 786 | }; 787 | B0D521821BE4F753002063D5 /* Debug */ = { 788 | isa = XCBuildConfiguration; 789 | buildSettings = { 790 | ALWAYS_SEARCH_USER_PATHS = NO; 791 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 792 | CLANG_CXX_LIBRARY = "libc++"; 793 | CLANG_ENABLE_MODULES = YES; 794 | CLANG_ENABLE_OBJC_ARC = YES; 795 | CLANG_WARN_BOOL_CONVERSION = YES; 796 | CLANG_WARN_CONSTANT_CONVERSION = YES; 797 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 798 | CLANG_WARN_EMPTY_BODY = YES; 799 | CLANG_WARN_ENUM_CONVERSION = YES; 800 | CLANG_WARN_INT_CONVERSION = YES; 801 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 802 | CLANG_WARN_UNREACHABLE_CODE = YES; 803 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 804 | CODE_SIGN_IDENTITY = "-"; 805 | COPY_PHASE_STRIP = NO; 806 | CURRENT_PROJECT_VERSION = 1; 807 | DEBUG_INFORMATION_FORMAT = dwarf; 808 | ENABLE_STRICT_OBJC_MSGSEND = YES; 809 | ENABLE_TESTABILITY = YES; 810 | GCC_C_LANGUAGE_STANDARD = gnu99; 811 | GCC_DYNAMIC_NO_PIC = NO; 812 | GCC_NO_COMMON_BLOCKS = YES; 813 | GCC_OPTIMIZATION_LEVEL = 0; 814 | GCC_PREPROCESSOR_DEFINITIONS = ( 815 | "DEBUG=1", 816 | "$(inherited)", 817 | ); 818 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 819 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 820 | GCC_WARN_UNDECLARED_SELECTOR = YES; 821 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 822 | GCC_WARN_UNUSED_FUNCTION = YES; 823 | GCC_WARN_UNUSED_VARIABLE = YES; 824 | MACOSX_DEPLOYMENT_TARGET = 10.10; 825 | MTL_ENABLE_DEBUG_INFO = YES; 826 | ONLY_ACTIVE_ARCH = YES; 827 | SDKROOT = macosx; 828 | SWIFT_INCLUDE_PATHS = "$(SRCROOT)/Dependencies"; 829 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 830 | VERSIONING_SYSTEM = "apple-generic"; 831 | VERSION_INFO_PREFIX = ""; 832 | }; 833 | name = Debug; 834 | }; 835 | B0D521831BE4F753002063D5 /* Release */ = { 836 | isa = XCBuildConfiguration; 837 | buildSettings = { 838 | ALWAYS_SEARCH_USER_PATHS = NO; 839 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 840 | CLANG_CXX_LIBRARY = "libc++"; 841 | CLANG_ENABLE_MODULES = YES; 842 | CLANG_ENABLE_OBJC_ARC = YES; 843 | CLANG_WARN_BOOL_CONVERSION = YES; 844 | CLANG_WARN_CONSTANT_CONVERSION = YES; 845 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 846 | CLANG_WARN_EMPTY_BODY = YES; 847 | CLANG_WARN_ENUM_CONVERSION = YES; 848 | CLANG_WARN_INT_CONVERSION = YES; 849 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 850 | CLANG_WARN_UNREACHABLE_CODE = YES; 851 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 852 | CODE_SIGN_IDENTITY = "-"; 853 | COPY_PHASE_STRIP = NO; 854 | CURRENT_PROJECT_VERSION = 1; 855 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 856 | ENABLE_NS_ASSERTIONS = NO; 857 | ENABLE_STRICT_OBJC_MSGSEND = YES; 858 | GCC_C_LANGUAGE_STANDARD = gnu99; 859 | GCC_NO_COMMON_BLOCKS = YES; 860 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 861 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 862 | GCC_WARN_UNDECLARED_SELECTOR = YES; 863 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 864 | GCC_WARN_UNUSED_FUNCTION = YES; 865 | GCC_WARN_UNUSED_VARIABLE = YES; 866 | MACOSX_DEPLOYMENT_TARGET = 10.10; 867 | MTL_ENABLE_DEBUG_INFO = NO; 868 | SDKROOT = macosx; 869 | SWIFT_INCLUDE_PATHS = "$(SRCROOT)/Dependencies"; 870 | VERSIONING_SYSTEM = "apple-generic"; 871 | VERSION_INFO_PREFIX = ""; 872 | }; 873 | name = Release; 874 | }; 875 | B0D521851BE4F753002063D5 /* Debug */ = { 876 | isa = XCBuildConfiguration; 877 | buildSettings = { 878 | CLANG_ENABLE_MODULES = YES; 879 | CODE_SIGN_IDENTITY = ""; 880 | COMBINE_HIDPI_IMAGES = YES; 881 | DEFINES_MODULE = YES; 882 | DYLIB_COMPATIBILITY_VERSION = 1; 883 | DYLIB_CURRENT_VERSION = 1; 884 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 885 | FRAMEWORK_VERSION = A; 886 | INFOPLIST_FILE = Zeal/Info.plist; 887 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 888 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; 889 | MACOSX_DEPLOYMENT_TARGET = 10.9; 890 | PRODUCT_BUNDLE_IDENTIFIER = com.zewo.Zeal; 891 | PRODUCT_NAME = Zeal; 892 | SKIP_INSTALL = YES; 893 | SWIFT_INCLUDE_PATHS = "$(SRCROOT)/Dependencies"; 894 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 895 | }; 896 | name = Debug; 897 | }; 898 | B0D521861BE4F753002063D5 /* Release */ = { 899 | isa = XCBuildConfiguration; 900 | buildSettings = { 901 | CLANG_ENABLE_MODULES = YES; 902 | CODE_SIGN_IDENTITY = ""; 903 | COMBINE_HIDPI_IMAGES = YES; 904 | DEFINES_MODULE = YES; 905 | DYLIB_COMPATIBILITY_VERSION = 1; 906 | DYLIB_CURRENT_VERSION = 1; 907 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 908 | FRAMEWORK_VERSION = A; 909 | INFOPLIST_FILE = Zeal/Info.plist; 910 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 911 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; 912 | MACOSX_DEPLOYMENT_TARGET = 10.9; 913 | PRODUCT_BUNDLE_IDENTIFIER = com.zewo.Zeal; 914 | PRODUCT_NAME = Zeal; 915 | SKIP_INSTALL = YES; 916 | SWIFT_INCLUDE_PATHS = "$(SRCROOT)/Dependencies"; 917 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 918 | }; 919 | name = Release; 920 | }; 921 | B0D521881BE4F753002063D5 /* Debug */ = { 922 | isa = XCBuildConfiguration; 923 | buildSettings = { 924 | CLANG_ENABLE_MODULES = YES; 925 | COMBINE_HIDPI_IMAGES = YES; 926 | INFOPLIST_FILE = "Zeal Tests/Info.plist"; 927 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 928 | PRODUCT_BUNDLE_IDENTIFIER = com.zewo.ZealTests; 929 | PRODUCT_NAME = ZealTests; 930 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 931 | }; 932 | name = Debug; 933 | }; 934 | B0D521891BE4F753002063D5 /* Release */ = { 935 | isa = XCBuildConfiguration; 936 | buildSettings = { 937 | CLANG_ENABLE_MODULES = YES; 938 | COMBINE_HIDPI_IMAGES = YES; 939 | INFOPLIST_FILE = "Zeal Tests/Info.plist"; 940 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 941 | PRODUCT_BUNDLE_IDENTIFIER = com.zewo.ZealTests; 942 | PRODUCT_NAME = ZealTests; 943 | }; 944 | name = Release; 945 | }; 946 | /* End XCBuildConfiguration section */ 947 | 948 | /* Begin XCConfigurationList section */ 949 | 3A1C559A1BECE19B006EC3F7 /* Build configuration list for PBXNativeTarget "Zeal iOS" */ = { 950 | isa = XCConfigurationList; 951 | buildConfigurations = ( 952 | 3A1C559B1BECE19B006EC3F7 /* Debug */, 953 | 3A1C559C1BECE19B006EC3F7 /* Release */, 954 | ); 955 | defaultConfigurationIsVisible = 0; 956 | defaultConfigurationName = Release; 957 | }; 958 | 3A1C559D1BECE19B006EC3F7 /* Build configuration list for PBXNativeTarget "Zeal iOS Tests" */ = { 959 | isa = XCConfigurationList; 960 | buildConfigurations = ( 961 | 3A1C559E1BECE19B006EC3F7 /* Debug */, 962 | 3A1C559F1BECE19B006EC3F7 /* Release */, 963 | ); 964 | defaultConfigurationIsVisible = 0; 965 | defaultConfigurationName = Release; 966 | }; 967 | B0D5216A1BE4F753002063D5 /* Build configuration list for PBXProject "Zeal" */ = { 968 | isa = XCConfigurationList; 969 | buildConfigurations = ( 970 | B0D521821BE4F753002063D5 /* Debug */, 971 | B0D521831BE4F753002063D5 /* Release */, 972 | ); 973 | defaultConfigurationIsVisible = 0; 974 | defaultConfigurationName = Release; 975 | }; 976 | B0D521841BE4F753002063D5 /* Build configuration list for PBXNativeTarget "Zeal OSX" */ = { 977 | isa = XCConfigurationList; 978 | buildConfigurations = ( 979 | B0D521851BE4F753002063D5 /* Debug */, 980 | B0D521861BE4F753002063D5 /* Release */, 981 | ); 982 | defaultConfigurationIsVisible = 0; 983 | defaultConfigurationName = Release; 984 | }; 985 | B0D521871BE4F753002063D5 /* Build configuration list for PBXNativeTarget "Zeal OSX Tests" */ = { 986 | isa = XCConfigurationList; 987 | buildConfigurations = ( 988 | B0D521881BE4F753002063D5 /* Debug */, 989 | B0D521891BE4F753002063D5 /* Release */, 990 | ); 991 | defaultConfigurationIsVisible = 0; 992 | defaultConfigurationName = Release; 993 | }; 994 | /* End XCConfigurationList section */ 995 | }; 996 | rootObject = B0D521671BE4F753002063D5 /* Project object */; 997 | } 998 | --------------------------------------------------------------------------------