├── .circleci
└── config.yml
├── .gitignore
├── .swift-version
├── Cartfile
├── Cartfile.resolved
├── Carthage
└── Cartfile.resolved
├── LICENSE
├── README.md
├── RxStarscream-macOS
├── Info.plist
└── RxStarscream_macOS.h
├── RxStarscream-macOSTests
├── Info.plist
└── RxStarscream_macOSTests.swift
├── RxStarscream.podspec
├── RxStarscream.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── xcshareddata
│ └── xcschemes
│ ├── RxStarscream-macOS.xcscheme
│ └── RxStarscream.xcscheme
├── RxStarscream
├── Info.plist
└── RxStarscream.h
├── RxStarscreamTests
├── Info.plist
└── RxStarscreamTests.swift
├── SampleApp
├── AppDelegate.swift
├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── RxStarscream1024.png
│ │ ├── RxStarscreamIcon40.png
│ │ ├── RxStarscreamIcon60.png
│ │ ├── iPhone_App_iOS7-9_60pt@2x.png
│ │ ├── iPhone_App_iOS7-9_60pt@3x.png
│ │ ├── iPhone_Settings_iOS5-9_29pt@2x.png
│ │ ├── iPhone_Settings_iOS5-9_29pt@3x.png
│ │ ├── iPhone_Spotlight_iOS7-9_40pt@2x.png
│ │ └── iPhone_Spotlight_iOS7-9_40pt@3x.png
│ ├── Contents.json
│ └── RxStarscreamIcon.imageset
│ │ ├── Contents.json
│ │ └── RxStarscreamIcon.png
├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
├── Info.plist
└── ViewController.swift
├── Source
└── RxStarscream.swift
└── scripts
├── bootstrap-if-needed.sh
└── bootstrap.sh
/.circleci/config.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | jobs:
3 | "RxStarscream Tests":
4 | working_directory: ~/RxSwiftCommunity/RxStarscream
5 | parallelism: 1
6 | shell: /bin/bash --login
7 | environment:
8 | XCODE_TEST_REPORTS: /tmp/xcode-test-results
9 | LANG: en_US.UTF-8
10 | macos:
11 | xcode: '10.2.0'
12 | steps:
13 | - checkout
14 | - run: mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS $XCODE_TEST_REPORTS
15 | - restore_cache:
16 | keys:
17 | - v1-dep-{{ .Branch }}-
18 | - v1-dep-master-
19 | - v1-dep-
20 | - run:
21 | name: Bootstrap Carthage
22 | command: scripts/bootstrap.sh
23 | - save_cache:
24 | key: v1-dep-{{ .Branch }}-{{ epoch }}
25 | paths:
26 | - Carthage
27 | - run:
28 | name: iOS, Swift 5
29 | command: set -o pipefail && xcodebuild test SWIFT_VERSION=5.0 -scheme RxStarscream -project RxStarscream.xcodeproj -sdk iphonesimulator -destination "name=iPhone 8" | xcpretty -c -r html --output $XCODE_TEST_REPORTS/iOS_swift5.html
30 | - run:
31 | name: macOS, Swift 5
32 | command: set -o pipefail && xcodebuild test SWIFT_VERSION=5.0 -scheme RxStarscream-macOS -project RxStarscream.xcodeproj -sdk macosx | xcpretty -c -r html --output $XCODE_TEST_REPORTS/macOS_swift5.html
33 | - store_artifacts:
34 | path: $XCODE_TEST_REPORTS
35 | "RxStarscream Release":
36 | working_directory: ~/RxSwiftCommunity/RxStarscream
37 | parallelism: 1
38 | shell: /bin/bash --login
39 | environment:
40 | LANG: en_US.UTF-8
41 | macos:
42 | xcode: '10.2.0'
43 | steps:
44 | - checkout
45 | - run:
46 | name: Setup CocoaPods
47 | command: pod setup
48 | - run:
49 | name: Override Circle CI Config
50 | command: rm ~/.cocoapods/config.yaml # This hack is needed since CircleCI forces --verbose
51 | - run:
52 | name: Push Podspec to Trunk
53 | command: pod trunk push --skip-tests --allow-warnings --swift-version=5.0
54 | workflows:
55 | version: 2
56 | build:
57 | jobs:
58 | - "RxStarscream Tests":
59 | filters:
60 | tags:
61 | ignore: /[0-9]+(\.[0-9]+)*/
62 | release:
63 | jobs:
64 | - "RxStarscream Release":
65 | filters:
66 | branches:
67 | ignore: /.*/
68 | tags:
69 | only: /[0-9]+(\.[0-9]+)*/
70 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # OS X
2 | .DS_Store
3 |
4 | # Xcode
5 | build/
6 | *.pbxuser
7 | !default.pbxuser
8 | *.mode1v3
9 | !default.mode1v3
10 | *.mode2v3
11 | !default.mode2v3
12 | *.perspectivev3
13 | !default.perspectivev3
14 | xcuserdata
15 | *.xccheckout
16 | profile
17 | *.moved-aside
18 | DerivedData
19 | *.hmap
20 | *.xccheckout
21 | # AppCode
22 | .idea/
23 | # Framworks
24 | *.framework
25 |
26 |
27 | Carthage/Build
28 | Carthage/Checkouts
29 |
--------------------------------------------------------------------------------
/.swift-version:
--------------------------------------------------------------------------------
1 | 5.0
2 |
--------------------------------------------------------------------------------
/Cartfile:
--------------------------------------------------------------------------------
1 | github "ReactiveX/RxSwift" ~> 5
2 | github "daltoniam/Starscream" ~> 3.1
3 |
--------------------------------------------------------------------------------
/Cartfile.resolved:
--------------------------------------------------------------------------------
1 | github "ReactiveX/RxSwift" "5.0.1"
2 | github "daltoniam/Starscream" "3.1.0"
3 |
--------------------------------------------------------------------------------
/Carthage/Cartfile.resolved:
--------------------------------------------------------------------------------
1 | github "ReactiveX/RxSwift" "5.0.1"
2 | github "daltoniam/Starscream" "3.1.0"
3 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016 RxSwift Community
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | RxStarscream
6 | =========================================================================================================================
7 | [](https://circleci.com/gh/RxSwiftCommunity/RxStarscream/tree/master)
8 | 
9 | [](https://github.com/Carthage/Carthage)
10 |
11 | A lightweight extension to [Starscream](https://github.com/daltoniam/Starscream) to track websocket events using RxSwift observables.
12 |
13 | ## Installation
14 |
15 | ### CocoaPods
16 |
17 | RxStarscream is available through [CocoaPods](http://cocoapods.org/).
18 | Add the following line to your `Podfile`:
19 |
20 | pod 'RxStarscream'
21 |
22 | Then run:
23 |
24 | pod install
25 |
26 | ### RxStarscream version vs Swift version.
27 |
28 | Below is a table that shows which version of RxStarscream you should use for
29 | your Swift version.
30 |
31 | | Swift | RxStarscream | RxSwift |
32 | | ------ | ------------- |---------------|
33 | | >= 4.2 | \>= 0.10 | \>= 4.3 |
34 | | < 4.2 | \>= 0.8 | \>= 4.0 |
35 | | 3.X | 0.7 | 3.0.0 - 3.6.1 |
36 |
37 | ### Carthage
38 |
39 | Add this to your Cartfile
40 |
41 | github "RxSwiftCommunity/RxStarscream"
42 |
43 | Then run:
44 |
45 | carthage update
46 |
47 | ## Usage examples
48 |
49 | After installing via CococPods or Carthage, you should import the framework.
50 |
51 | ```swift
52 | import RxStarscream
53 | ```
54 |
55 | Once imported, you can open a connection to your WebSocket server.
56 |
57 | ```swift
58 |
59 | socket = WebSocket(url: URL(string: "ws://localhost:8080/")!)
60 | socket.connect()
61 | ```
62 | Now you can subscribe e.g to all of the websocket events:
63 |
64 | ```swift
65 | socket.rx.response.subscribe(onNext: { (response: WebSocketEvent) in
66 | switch response {
67 | case .connected:
68 | print("Connected")
69 | case .disconnected(let error):
70 | print("Disconnected with optional error : \(error)")
71 | case .message(let msg):
72 | print("Message : \(msg)")
73 | case .data(_):
74 | print("Data")
75 | case .pong:
76 | print("Pong")
77 | }
78 | }).disposed(by: disposeBag)
79 | ```
80 |
81 |
82 | Or just to a connect event:
83 |
84 | ```swift
85 | socket.rx.connected.subscribe(onNext: { (isConnected: Bool) in
86 | print("Is connected : \(isConnected)")
87 | }).disposed(by: disposeBag)
88 | ```
89 |
90 | Or just to a message event:
91 |
92 | ```swift
93 | socket.rx.text.subscribe(onNext: { (message: String) in
94 | print("Message : \(message)")
95 | }).disposed(by: disposeBag)
96 | ```
97 |
98 |
99 | ## Sample Project
100 |
101 | There's a sample project (you need to run `carthage update` for it to compile).
102 |
103 | The sample project uses echo server - https://www.websocket.org/echo.html
104 |
105 | Have fun!
106 |
107 | ## Thanks
108 |
109 | Everyone in the RxSwift Slack channel.
110 |
111 | ## Contributing
112 |
113 | Bug reports and pull requests are welcome.
114 |
115 | ## License
116 |
117 | RxStarscream is available under the MIT license. See the LICENSE file for more info.
118 |
--------------------------------------------------------------------------------
/RxStarscream-macOS/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
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 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSHumanReadableCopyright
22 | Copyright © 2018年 Guy Kahlon. All rights reserved.
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/RxStarscream-macOS/RxStarscream_macOS.h:
--------------------------------------------------------------------------------
1 | //
2 | // RxStarscream_macOS.h
3 | // RxStarscream-macOS
4 | //
5 | // Created by 森下 侑亮 on 2018/03/07.
6 | // Copyright © 2018年 Guy Kahlon. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for RxStarscream_macOS.
12 | FOUNDATION_EXPORT double RxStarscream_macOSVersionNumber;
13 |
14 | //! Project version string for RxStarscream_macOS.
15 | FOUNDATION_EXPORT const unsigned char RxStarscream_macOSVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/RxStarscream-macOSTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
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 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/RxStarscream-macOSTests/RxStarscream_macOSTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxStarscream_macOSTests.swift
3 | // RxStarscream-macOSTests
4 | //
5 | // Created by 森下 侑亮 on 2018/03/07.
6 | // Copyright © 2018年 Guy Kahlon. All rights reserved.
7 | //
8 |
9 | import XCTest
10 | import RxSwift
11 | import RxTest
12 | import Starscream
13 | import RxStarscream_macOS
14 |
15 | extension WebSocketEvent: Equatable { }
16 |
17 | public func ==(lhs: WebSocketEvent, rhs: WebSocketEvent) -> Bool {
18 | switch (lhs, rhs) {
19 | case (.connected, .connected):
20 | return true
21 | case (.disconnected(let lhsError), .disconnected(let rhsError)):
22 | return lhsError?.localizedDescription == rhsError?.localizedDescription
23 | case (.message(let lhsMsg), .message(let rhsMsg)):
24 | return lhsMsg == rhsMsg
25 | case (.data(let lhsData), .data(let rhsData)):
26 | return lhsData == rhsData
27 | case (.pong, .pong):
28 | return true
29 | default:
30 | return false
31 | }
32 | }
33 |
34 | class RxStarscreamTests: XCTestCase {
35 |
36 | private var connectedObserver: TestableObserver!
37 | private var pongObserver: TestableObserver!
38 | private var responseObserver: TestableObserver!
39 | private var socket: WebSocket!
40 |
41 | let disposeBag = DisposeBag()
42 |
43 | override func setUp() {
44 | super.setUp()
45 |
46 | socket = WebSocket(url: URL(string: "wss://echo.websocket.org")!)
47 | continueAfterFailure = false
48 | }
49 |
50 | func testConnection() {
51 | let scheduler = TestScheduler(initialClock: 0)
52 | connectedObserver = scheduler.createObserver(Bool.self)
53 |
54 | let connected = socket.rx.connected.share(replay: 1)
55 | connected.subscribe(onNext: { [unowned self] _ in
56 | self.socket.disconnect()
57 | }).disposed(by: disposeBag)
58 |
59 | socket.rx.connected
60 | .subscribe(connectedObserver)
61 | .disposed(by: disposeBag)
62 |
63 | XCTAssertTrue(socket.delegate != nil, "delegate should be set")
64 |
65 | socket.delegate!.websocketDidConnect(socket: socket)
66 | socket.delegate!.websocketDidDisconnect(socket: socket, error: nil)
67 |
68 | XCTAssertEqual(self.connectedObserver.events.count, 2)
69 | XCTAssertEqual(self.connectedObserver.events[0].value.element!, true)
70 | XCTAssertEqual(self.connectedObserver.events[1].value.element!, false)
71 | }
72 |
73 | func testPongMessage() {
74 | let scheduler = TestScheduler(initialClock: 0)
75 | pongObserver = scheduler.createObserver(WebSocketEvent.self)
76 |
77 | socket.rx.response
78 | .subscribe(pongObserver)
79 | .disposed(by: disposeBag)
80 |
81 | XCTAssertTrue(socket.pongDelegate != nil, "pongDelegate should be set")
82 |
83 | socket.pongDelegate!.websocketDidReceivePong(socket: socket, data: Data())
84 |
85 | XCTAssertEqual(self.pongObserver.events.count, 1)
86 | XCTAssertEqual(self.pongObserver.events[0].value.element!, WebSocketEvent.pong)
87 | }
88 |
89 | func testMessageResponse() {
90 | let sentMessage = "Hello"
91 |
92 | let scheduler = TestScheduler(initialClock: 0)
93 | responseObserver = scheduler.createObserver(WebSocketEvent.self)
94 |
95 | socket.rx.response
96 | .subscribe(responseObserver)
97 | .disposed(by: disposeBag)
98 |
99 | XCTAssertTrue(socket.delegate != nil, "delegate should be set")
100 |
101 | socket.delegate!.websocketDidReceiveMessage(socket: socket, text: sentMessage)
102 |
103 | XCTAssertEqual(self.responseObserver.events.count, 1)
104 | XCTAssertEqual(WebSocketEvent.message(sentMessage), self.responseObserver.events[0].value.element!)
105 | }
106 | }
107 |
108 |
--------------------------------------------------------------------------------
/RxStarscream.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |spec|
2 | spec.name = 'RxStarscream'
3 | spec.version = '0.10'
4 | spec.license = 'Apache License, Version 2.0'
5 | spec.homepage = 'https://github.com/RxSwiftCommunity/RxStarscream'
6 | spec.authors = { 'Guy Kahlon' => 'guykahlon@gmail.com' }
7 | spec.summary = 'A lightweight extension to subscribe Starscream websocket events with RxSwift.'
8 | spec.source = { :git => 'https://github.com/RxSwiftCommunity/RxStarscream.git', :tag => spec.version.to_s }
9 | spec.source_files = 'Source/*.swift'
10 | spec.requires_arc = true
11 | spec.ios.deployment_target = '8.0'
12 | spec.osx.deployment_target = '10.10'
13 | spec.dependency 'Starscream', '~> 3'
14 | spec.dependency 'RxSwift', '~> 5'
15 | spec.dependency 'RxCocoa', '~> 5'
16 | spec.license = { :type => 'Apache License, Version 2.0', :text => <<-LICENSE
17 | Licensed under the Apache License, Version 2.0 (the "License");
18 | you may not use this file except in compliance with the License.
19 | You may obtain a copy of the License at
20 |
21 | http://www.apache.org/licenses/LICENSE-2.0
22 |
23 | Unless required by applicable law or agreed to in writing, software
24 | distributed under the License is distributed on an "AS IS" BASIS,
25 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26 | See the License for the specific language governing permissions and
27 | limitations under the License.
28 | LICENSE
29 | }
30 | end
31 |
--------------------------------------------------------------------------------
/RxStarscream.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 0B4DAAC71E0497BC00ECDBF9 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0B4DAAC61E0497BC00ECDBF9 /* RxCocoa.framework */; };
11 | 0B4DAAC81E04980000ECDBF9 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0B4DAAC61E0497BC00ECDBF9 /* RxCocoa.framework */; };
12 | 0B4DAAC91E04980000ECDBF9 /* RxCocoa.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0B4DAAC61E0497BC00ECDBF9 /* RxCocoa.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
13 | 98655E3C204F892000524A64 /* RxStarscream_macOS.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 98D95A3F204F7E9A00159C45 /* RxStarscream_macOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
14 | 98D95A48204F7E9B00159C45 /* RxStarscream_macOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98D95A3F204F7E9A00159C45 /* RxStarscream_macOS.framework */; };
15 | 98D95A56204F7EB400159C45 /* RxStarscream_macOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 98D95A41204F7E9A00159C45 /* RxStarscream_macOS.h */; settings = {ATTRIBUTES = (Public, ); }; };
16 | 98D95A57204F7EC000159C45 /* RxStarscream.swift in Sources */ = {isa = PBXBuildFile; fileRef = E46D00311CFF22760054DF1F /* RxStarscream.swift */; };
17 | 98D95A59204F7EDF00159C45 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98D95A58204F7EDE00159C45 /* RxSwift.framework */; };
18 | 98D95A5D204F7EF800159C45 /* Starscream.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98D95A5C204F7EF800159C45 /* Starscream.framework */; };
19 | 98D95A5F204F7FC300159C45 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98D95A5A204F7EEE00159C45 /* RxCocoa.framework */; };
20 | 98D95A61204F82BA00159C45 /* RxStarscream_macOSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98D95A4C204F7E9B00159C45 /* RxStarscream_macOSTests.swift */; };
21 | 98D95A62204F839A00159C45 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98D95A5A204F7EEE00159C45 /* RxCocoa.framework */; };
22 | 98D95A63204F83A400159C45 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98D95A58204F7EDE00159C45 /* RxSwift.framework */; };
23 | 98D95A65204F83AE00159C45 /* RxTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98D95A64204F83AE00159C45 /* RxTest.framework */; };
24 | 98D95A67204F85D000159C45 /* Starscream.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98D95A5C204F7EF800159C45 /* Starscream.framework */; };
25 | BEF314431E86D13C00C15DD4 /* RxStarscreamTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEF314421E86D13C00C15DD4 /* RxStarscreamTests.swift */; };
26 | BEF314451E86D13C00C15DD4 /* RxStarscream.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E46D00261CFF22200054DF1F /* RxStarscream.framework */; };
27 | BEF314521E86DB5700C15DD4 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E42144A21CFF275E00885498 /* RxSwift.framework */; };
28 | BEF314541E86DB5700C15DD4 /* RxTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BEF3144C1E86DAFA00C15DD4 /* RxTest.framework */; };
29 | BEF314551E86DB5700C15DD4 /* Starscream.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E42144A31CFF275E00885498 /* Starscream.framework */; };
30 | BEF314571E875D8500C15DD4 /* RxCocoa.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0B4DAAC61E0497BC00ECDBF9 /* RxCocoa.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
31 | BEF314581E875D8500C15DD4 /* RxSwift.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E42144A21CFF275E00885498 /* RxSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
32 | BEF314591E875D8500C15DD4 /* Starscream.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E42144A31CFF275E00885498 /* Starscream.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
33 | BEF3145B1E875DAA00C15DD4 /* RxTest.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = BEF3144C1E86DAFA00C15DD4 /* RxTest.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
34 | DF3045271FF31E5E009A779B /* RxStarscream.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E46D00261CFF22200054DF1F /* RxStarscream.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
35 | E402203A1CFF3C6900C5A874 /* RxSwift.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E42144A21CFF275E00885498 /* RxSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
36 | E402203C1CFF3C6900C5A874 /* Starscream.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E42144A31CFF275E00885498 /* Starscream.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
37 | E42144A41CFF275E00885498 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E42144A21CFF275E00885498 /* RxSwift.framework */; };
38 | E42144A51CFF275E00885498 /* Starscream.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E42144A31CFF275E00885498 /* Starscream.framework */; };
39 | E42144DD1CFF385E00885498 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E42144DC1CFF385E00885498 /* AppDelegate.swift */; };
40 | E42144DF1CFF385E00885498 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E42144DE1CFF385E00885498 /* ViewController.swift */; };
41 | E42144E21CFF385E00885498 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E42144E01CFF385E00885498 /* Main.storyboard */; };
42 | E42144E41CFF385E00885498 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E42144E31CFF385E00885498 /* Assets.xcassets */; };
43 | E42144E71CFF385E00885498 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E42144E51CFF385E00885498 /* LaunchScreen.storyboard */; };
44 | E42144EC1CFF395500885498 /* RxStarscream.swift in Sources */ = {isa = PBXBuildFile; fileRef = E46D00311CFF22760054DF1F /* RxStarscream.swift */; };
45 | E42144ED1CFF3AC600885498 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E42144A21CFF275E00885498 /* RxSwift.framework */; };
46 | E42144EE1CFF3AC900885498 /* Starscream.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E42144A31CFF275E00885498 /* Starscream.framework */; };
47 | E46D002A1CFF22200054DF1F /* RxStarscream.h in Headers */ = {isa = PBXBuildFile; fileRef = E46D00291CFF22200054DF1F /* RxStarscream.h */; settings = {ATTRIBUTES = (Public, ); }; };
48 | E46D00321CFF22760054DF1F /* RxStarscream.swift in Sources */ = {isa = PBXBuildFile; fileRef = E46D00311CFF22760054DF1F /* RxStarscream.swift */; };
49 | EE32F632227B251800F27FFA /* RxRelay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE32F631227B251800F27FFA /* RxRelay.framework */; };
50 | EE32F633227B253200F27FFA /* RxRelay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE32F631227B251800F27FFA /* RxRelay.framework */; };
51 | EE32F639227B257600F27FFA /* RxRelay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE32F638227B257600F27FFA /* RxRelay.framework */; };
52 | EE32F63A227B258500F27FFA /* RxRelay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE32F638227B257600F27FFA /* RxRelay.framework */; };
53 | EE32F640227B28A500F27FFA /* RxRelay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE32F631227B251800F27FFA /* RxRelay.framework */; };
54 | EE32F641227B28E700F27FFA /* RxRelay.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = EE32F631227B251800F27FFA /* RxRelay.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
55 | EE32F642227B292400F27FFA /* RxRelay.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = EE32F631227B251800F27FFA /* RxRelay.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
56 | EE32F643227B296300F27FFA /* RxCocoa.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 98D95A5A204F7EEE00159C45 /* RxCocoa.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
57 | EE32F644227B296300F27FFA /* RxRelay.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = EE32F638227B257600F27FFA /* RxRelay.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
58 | EE32F645227B296300F27FFA /* RxSwift.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 98D95A58204F7EDE00159C45 /* RxSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
59 | EE32F646227B296300F27FFA /* RxTest.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 98D95A64204F83AE00159C45 /* RxTest.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
60 | EE32F647227B296300F27FFA /* Starscream.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 98D95A5C204F7EF800159C45 /* Starscream.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
61 | /* End PBXBuildFile section */
62 |
63 | /* Begin PBXContainerItemProxy section */
64 | 98D95A49204F7E9B00159C45 /* PBXContainerItemProxy */ = {
65 | isa = PBXContainerItemProxy;
66 | containerPortal = E46D001D1CFF22200054DF1F /* Project object */;
67 | proxyType = 1;
68 | remoteGlobalIDString = 98D95A3E204F7E9A00159C45;
69 | remoteInfo = "RxStarscream-macOS";
70 | };
71 | BEF314461E86D13C00C15DD4 /* PBXContainerItemProxy */ = {
72 | isa = PBXContainerItemProxy;
73 | containerPortal = E46D001D1CFF22200054DF1F /* Project object */;
74 | proxyType = 1;
75 | remoteGlobalIDString = E46D00251CFF22200054DF1F;
76 | remoteInfo = RxStarscream;
77 | };
78 | /* End PBXContainerItemProxy section */
79 |
80 | /* Begin PBXCopyFilesBuildPhase section */
81 | 98D95A68204F874100159C45 /* CopyFiles */ = {
82 | isa = PBXCopyFilesBuildPhase;
83 | buildActionMask = 2147483647;
84 | dstPath = "";
85 | dstSubfolderSpec = 10;
86 | files = (
87 | EE32F643227B296300F27FFA /* RxCocoa.framework in CopyFiles */,
88 | EE32F644227B296300F27FFA /* RxRelay.framework in CopyFiles */,
89 | 98655E3C204F892000524A64 /* RxStarscream_macOS.framework in CopyFiles */,
90 | EE32F645227B296300F27FFA /* RxSwift.framework in CopyFiles */,
91 | EE32F646227B296300F27FFA /* RxTest.framework in CopyFiles */,
92 | EE32F647227B296300F27FFA /* Starscream.framework in CopyFiles */,
93 | );
94 | runOnlyForDeploymentPostprocessing = 0;
95 | };
96 | BEF314561E875D5F00C15DD4 /* CopyFiles */ = {
97 | isa = PBXCopyFilesBuildPhase;
98 | buildActionMask = 2147483647;
99 | dstPath = "";
100 | dstSubfolderSpec = 10;
101 | files = (
102 | BEF314571E875D8500C15DD4 /* RxCocoa.framework in CopyFiles */,
103 | EE32F641227B28E700F27FFA /* RxRelay.framework in CopyFiles */,
104 | DF3045271FF31E5E009A779B /* RxStarscream.framework in CopyFiles */,
105 | BEF314581E875D8500C15DD4 /* RxSwift.framework in CopyFiles */,
106 | BEF3145B1E875DAA00C15DD4 /* RxTest.framework in CopyFiles */,
107 | BEF314591E875D8500C15DD4 /* Starscream.framework in CopyFiles */,
108 | );
109 | runOnlyForDeploymentPostprocessing = 0;
110 | };
111 | E402203D1CFF3C6900C5A874 /* Embed Frameworks */ = {
112 | isa = PBXCopyFilesBuildPhase;
113 | buildActionMask = 2147483647;
114 | dstPath = "";
115 | dstSubfolderSpec = 10;
116 | files = (
117 | 0B4DAAC91E04980000ECDBF9 /* RxCocoa.framework in Embed Frameworks */,
118 | EE32F642227B292400F27FFA /* RxRelay.framework in Embed Frameworks */,
119 | E402203A1CFF3C6900C5A874 /* RxSwift.framework in Embed Frameworks */,
120 | E402203C1CFF3C6900C5A874 /* Starscream.framework in Embed Frameworks */,
121 | );
122 | name = "Embed Frameworks";
123 | runOnlyForDeploymentPostprocessing = 0;
124 | };
125 | /* End PBXCopyFilesBuildPhase section */
126 |
127 | /* Begin PBXFileReference section */
128 | 0B4DAAC61E0497BC00ECDBF9 /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxCocoa.framework; path = Carthage/Build/iOS/RxCocoa.framework; sourceTree = ""; };
129 | 98D95A3F204F7E9A00159C45 /* RxStarscream_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxStarscream_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };
130 | 98D95A41204F7E9A00159C45 /* RxStarscream_macOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RxStarscream_macOS.h; sourceTree = ""; };
131 | 98D95A42204F7E9B00159C45 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
132 | 98D95A47204F7E9B00159C45 /* RxStarscream-macOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "RxStarscream-macOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
133 | 98D95A4C204F7E9B00159C45 /* RxStarscream_macOSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RxStarscream_macOSTests.swift; sourceTree = ""; };
134 | 98D95A4E204F7E9B00159C45 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
135 | 98D95A58204F7EDE00159C45 /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxSwift.framework; path = Carthage/Build/Mac/RxSwift.framework; sourceTree = ""; };
136 | 98D95A5A204F7EEE00159C45 /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxCocoa.framework; path = Carthage/Build/Mac/RxCocoa.framework; sourceTree = ""; };
137 | 98D95A5C204F7EF800159C45 /* Starscream.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Starscream.framework; path = Carthage/Build/Mac/Starscream.framework; sourceTree = ""; };
138 | 98D95A64204F83AE00159C45 /* RxTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxTest.framework; path = Carthage/Build/Mac/RxTest.framework; sourceTree = ""; };
139 | BEF314401E86D13C00C15DD4 /* RxStarscreamTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RxStarscreamTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
140 | BEF314421E86D13C00C15DD4 /* RxStarscreamTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RxStarscreamTests.swift; sourceTree = ""; };
141 | BEF314441E86D13C00C15DD4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
142 | BEF3144C1E86DAFA00C15DD4 /* RxTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxTest.framework; path = Carthage/Build/iOS/RxTest.framework; sourceTree = ""; };
143 | BEF3144E1E86DB0700C15DD4 /* iOS */ = {isa = PBXFileReference; lastKnownFileType = folder; name = iOS; path = Carthage/Build/iOS; sourceTree = ""; };
144 | E42144A21CFF275E00885498 /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxSwift.framework; path = Carthage/Build/iOS/RxSwift.framework; sourceTree = ""; };
145 | E42144A31CFF275E00885498 /* Starscream.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Starscream.framework; path = Carthage/Build/iOS/Starscream.framework; sourceTree = ""; };
146 | E42144DA1CFF385E00885498 /* SampleApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SampleApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
147 | E42144DC1CFF385E00885498 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
148 | E42144DE1CFF385E00885498 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
149 | E42144E11CFF385E00885498 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
150 | E42144E31CFF385E00885498 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
151 | E42144E61CFF385E00885498 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
152 | E42144E81CFF385E00885498 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
153 | E46D00261CFF22200054DF1F /* RxStarscream.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxStarscream.framework; sourceTree = BUILT_PRODUCTS_DIR; };
154 | E46D00291CFF22200054DF1F /* RxStarscream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RxStarscream.h; sourceTree = ""; };
155 | E46D002B1CFF22200054DF1F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
156 | E46D00311CFF22760054DF1F /* RxStarscream.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RxStarscream.swift; path = Source/RxStarscream.swift; sourceTree = SOURCE_ROOT; };
157 | EE32F631227B251800F27FFA /* RxRelay.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxRelay.framework; path = Carthage/Build/iOS/RxRelay.framework; sourceTree = ""; };
158 | EE32F638227B257600F27FFA /* RxRelay.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxRelay.framework; path = Carthage/Build/Mac/RxRelay.framework; sourceTree = ""; };
159 | /* End PBXFileReference section */
160 |
161 | /* Begin PBXFrameworksBuildPhase section */
162 | 98D95A3B204F7E9A00159C45 /* Frameworks */ = {
163 | isa = PBXFrameworksBuildPhase;
164 | buildActionMask = 2147483647;
165 | files = (
166 | 98D95A5F204F7FC300159C45 /* RxCocoa.framework in Frameworks */,
167 | EE32F639227B257600F27FFA /* RxRelay.framework in Frameworks */,
168 | 98D95A59204F7EDF00159C45 /* RxSwift.framework in Frameworks */,
169 | 98D95A5D204F7EF800159C45 /* Starscream.framework in Frameworks */,
170 | );
171 | runOnlyForDeploymentPostprocessing = 0;
172 | };
173 | 98D95A44204F7E9B00159C45 /* Frameworks */ = {
174 | isa = PBXFrameworksBuildPhase;
175 | buildActionMask = 2147483647;
176 | files = (
177 | 98D95A62204F839A00159C45 /* RxCocoa.framework in Frameworks */,
178 | EE32F63A227B258500F27FFA /* RxRelay.framework in Frameworks */,
179 | 98D95A48204F7E9B00159C45 /* RxStarscream_macOS.framework in Frameworks */,
180 | 98D95A63204F83A400159C45 /* RxSwift.framework in Frameworks */,
181 | 98D95A65204F83AE00159C45 /* RxTest.framework in Frameworks */,
182 | 98D95A67204F85D000159C45 /* Starscream.framework in Frameworks */,
183 | );
184 | runOnlyForDeploymentPostprocessing = 0;
185 | };
186 | BEF3143D1E86D13C00C15DD4 /* Frameworks */ = {
187 | isa = PBXFrameworksBuildPhase;
188 | buildActionMask = 2147483647;
189 | files = (
190 | EE32F640227B28A500F27FFA /* RxRelay.framework in Frameworks */,
191 | BEF314451E86D13C00C15DD4 /* RxStarscream.framework in Frameworks */,
192 | BEF314521E86DB5700C15DD4 /* RxSwift.framework in Frameworks */,
193 | BEF314541E86DB5700C15DD4 /* RxTest.framework in Frameworks */,
194 | BEF314551E86DB5700C15DD4 /* Starscream.framework in Frameworks */,
195 | );
196 | runOnlyForDeploymentPostprocessing = 0;
197 | };
198 | E42144D71CFF385E00885498 /* Frameworks */ = {
199 | isa = PBXFrameworksBuildPhase;
200 | buildActionMask = 2147483647;
201 | files = (
202 | 0B4DAAC81E04980000ECDBF9 /* RxCocoa.framework in Frameworks */,
203 | EE32F633227B253200F27FFA /* RxRelay.framework in Frameworks */,
204 | E42144ED1CFF3AC600885498 /* RxSwift.framework in Frameworks */,
205 | E42144EE1CFF3AC900885498 /* Starscream.framework in Frameworks */,
206 | );
207 | runOnlyForDeploymentPostprocessing = 0;
208 | };
209 | E46D00221CFF22200054DF1F /* Frameworks */ = {
210 | isa = PBXFrameworksBuildPhase;
211 | buildActionMask = 2147483647;
212 | files = (
213 | 0B4DAAC71E0497BC00ECDBF9 /* RxCocoa.framework in Frameworks */,
214 | EE32F632227B251800F27FFA /* RxRelay.framework in Frameworks */,
215 | E42144A41CFF275E00885498 /* RxSwift.framework in Frameworks */,
216 | E42144A51CFF275E00885498 /* Starscream.framework in Frameworks */,
217 | );
218 | runOnlyForDeploymentPostprocessing = 0;
219 | };
220 | /* End PBXFrameworksBuildPhase section */
221 |
222 | /* Begin PBXGroup section */
223 | 98D95A40204F7E9A00159C45 /* RxStarscream-macOS */ = {
224 | isa = PBXGroup;
225 | children = (
226 | 98D95A42204F7E9B00159C45 /* Info.plist */,
227 | 98D95A41204F7E9A00159C45 /* RxStarscream_macOS.h */,
228 | );
229 | path = "RxStarscream-macOS";
230 | sourceTree = "";
231 | };
232 | 98D95A4B204F7E9B00159C45 /* RxStarscream-macOSTests */ = {
233 | isa = PBXGroup;
234 | children = (
235 | 98D95A4E204F7E9B00159C45 /* Info.plist */,
236 | 98D95A4C204F7E9B00159C45 /* RxStarscream_macOSTests.swift */,
237 | );
238 | path = "RxStarscream-macOSTests";
239 | sourceTree = "";
240 | };
241 | BEF314411E86D13C00C15DD4 /* RxStarscreamTests */ = {
242 | isa = PBXGroup;
243 | children = (
244 | BEF314441E86D13C00C15DD4 /* Info.plist */,
245 | BEF314421E86D13C00C15DD4 /* RxStarscreamTests.swift */,
246 | );
247 | path = RxStarscreamTests;
248 | sourceTree = "";
249 | };
250 | BEF3144B1E86DAF900C15DD4 /* Frameworks */ = {
251 | isa = PBXGroup;
252 | children = (
253 | BEF3144E1E86DB0700C15DD4 /* iOS */,
254 | 98D95A5A204F7EEE00159C45 /* RxCocoa.framework */,
255 | EE32F638227B257600F27FFA /* RxRelay.framework */,
256 | 98D95A58204F7EDE00159C45 /* RxSwift.framework */,
257 | 98D95A64204F83AE00159C45 /* RxTest.framework */,
258 | 98D95A5C204F7EF800159C45 /* Starscream.framework */,
259 | );
260 | name = Frameworks;
261 | sourceTree = "";
262 | };
263 | E42144A61CFF27C800885498 /* Dependency Frameworks */ = {
264 | isa = PBXGroup;
265 | children = (
266 | 0B4DAAC61E0497BC00ECDBF9 /* RxCocoa.framework */,
267 | EE32F631227B251800F27FFA /* RxRelay.framework */,
268 | E42144A21CFF275E00885498 /* RxSwift.framework */,
269 | BEF3144C1E86DAFA00C15DD4 /* RxTest.framework */,
270 | E42144A31CFF275E00885498 /* Starscream.framework */,
271 | );
272 | name = "Dependency Frameworks";
273 | sourceTree = "";
274 | };
275 | E42144DB1CFF385E00885498 /* SampleApp */ = {
276 | isa = PBXGroup;
277 | children = (
278 | E42144DC1CFF385E00885498 /* AppDelegate.swift */,
279 | E42144E31CFF385E00885498 /* Assets.xcassets */,
280 | E42144E81CFF385E00885498 /* Info.plist */,
281 | E42144E51CFF385E00885498 /* LaunchScreen.storyboard */,
282 | E42144E01CFF385E00885498 /* Main.storyboard */,
283 | E42144DE1CFF385E00885498 /* ViewController.swift */,
284 | );
285 | path = SampleApp;
286 | sourceTree = "";
287 | };
288 | E46D001C1CFF22200054DF1F = {
289 | isa = PBXGroup;
290 | children = (
291 | E46D00281CFF22200054DF1F /* RxStarscream */,
292 | E42144DB1CFF385E00885498 /* SampleApp */,
293 | BEF314411E86D13C00C15DD4 /* RxStarscreamTests */,
294 | 98D95A40204F7E9A00159C45 /* RxStarscream-macOS */,
295 | 98D95A4B204F7E9B00159C45 /* RxStarscream-macOSTests */,
296 | E46D00271CFF22200054DF1F /* Products */,
297 | E42144A61CFF27C800885498 /* Dependency Frameworks */,
298 | BEF3144B1E86DAF900C15DD4 /* Frameworks */,
299 | );
300 | sourceTree = "";
301 | };
302 | E46D00271CFF22200054DF1F /* Products */ = {
303 | isa = PBXGroup;
304 | children = (
305 | 98D95A47204F7E9B00159C45 /* RxStarscream-macOSTests.xctest */,
306 | E46D00261CFF22200054DF1F /* RxStarscream.framework */,
307 | 98D95A3F204F7E9A00159C45 /* RxStarscream_macOS.framework */,
308 | BEF314401E86D13C00C15DD4 /* RxStarscreamTests.xctest */,
309 | E42144DA1CFF385E00885498 /* SampleApp.app */,
310 | );
311 | name = Products;
312 | sourceTree = "";
313 | };
314 | E46D00281CFF22200054DF1F /* RxStarscream */ = {
315 | isa = PBXGroup;
316 | children = (
317 | E46D002B1CFF22200054DF1F /* Info.plist */,
318 | E46D00291CFF22200054DF1F /* RxStarscream.h */,
319 | E46D00311CFF22760054DF1F /* RxStarscream.swift */,
320 | );
321 | path = RxStarscream;
322 | sourceTree = "";
323 | };
324 | /* End PBXGroup section */
325 |
326 | /* Begin PBXHeadersBuildPhase section */
327 | 98D95A3C204F7E9A00159C45 /* Headers */ = {
328 | isa = PBXHeadersBuildPhase;
329 | buildActionMask = 2147483647;
330 | files = (
331 | 98D95A56204F7EB400159C45 /* RxStarscream_macOS.h in Headers */,
332 | );
333 | runOnlyForDeploymentPostprocessing = 0;
334 | };
335 | E46D00231CFF22200054DF1F /* Headers */ = {
336 | isa = PBXHeadersBuildPhase;
337 | buildActionMask = 2147483647;
338 | files = (
339 | E46D002A1CFF22200054DF1F /* RxStarscream.h in Headers */,
340 | );
341 | runOnlyForDeploymentPostprocessing = 0;
342 | };
343 | /* End PBXHeadersBuildPhase section */
344 |
345 | /* Begin PBXNativeTarget section */
346 | 98D95A3E204F7E9A00159C45 /* RxStarscream-macOS */ = {
347 | isa = PBXNativeTarget;
348 | buildConfigurationList = 98D95A54204F7E9B00159C45 /* Build configuration list for PBXNativeTarget "RxStarscream-macOS" */;
349 | buildPhases = (
350 | 98D95A3A204F7E9A00159C45 /* Sources */,
351 | 98D95A3B204F7E9A00159C45 /* Frameworks */,
352 | 98D95A3C204F7E9A00159C45 /* Headers */,
353 | 98D95A3D204F7E9A00159C45 /* Resources */,
354 | );
355 | buildRules = (
356 | );
357 | dependencies = (
358 | );
359 | name = "RxStarscream-macOS";
360 | productName = "RxStarscream-macOS";
361 | productReference = 98D95A3F204F7E9A00159C45 /* RxStarscream_macOS.framework */;
362 | productType = "com.apple.product-type.framework";
363 | };
364 | 98D95A46204F7E9B00159C45 /* RxStarscream-macOSTests */ = {
365 | isa = PBXNativeTarget;
366 | buildConfigurationList = 98D95A55204F7E9B00159C45 /* Build configuration list for PBXNativeTarget "RxStarscream-macOSTests" */;
367 | buildPhases = (
368 | 98D95A43204F7E9B00159C45 /* Sources */,
369 | 98D95A44204F7E9B00159C45 /* Frameworks */,
370 | 98D95A45204F7E9B00159C45 /* Resources */,
371 | 98D95A68204F874100159C45 /* CopyFiles */,
372 | );
373 | buildRules = (
374 | );
375 | dependencies = (
376 | 98D95A4A204F7E9B00159C45 /* PBXTargetDependency */,
377 | );
378 | name = "RxStarscream-macOSTests";
379 | productName = "RxStarscream-macOSTests";
380 | productReference = 98D95A47204F7E9B00159C45 /* RxStarscream-macOSTests.xctest */;
381 | productType = "com.apple.product-type.bundle.unit-test";
382 | };
383 | BEF3143F1E86D13C00C15DD4 /* RxStarscreamTests */ = {
384 | isa = PBXNativeTarget;
385 | buildConfigurationList = BEF3144A1E86D13C00C15DD4 /* Build configuration list for PBXNativeTarget "RxStarscreamTests" */;
386 | buildPhases = (
387 | BEF3143C1E86D13C00C15DD4 /* Sources */,
388 | BEF3143D1E86D13C00C15DD4 /* Frameworks */,
389 | BEF3143E1E86D13C00C15DD4 /* Resources */,
390 | BEF314561E875D5F00C15DD4 /* CopyFiles */,
391 | );
392 | buildRules = (
393 | );
394 | dependencies = (
395 | BEF314471E86D13C00C15DD4 /* PBXTargetDependency */,
396 | );
397 | name = RxStarscreamTests;
398 | productName = RxStarscreamTests;
399 | productReference = BEF314401E86D13C00C15DD4 /* RxStarscreamTests.xctest */;
400 | productType = "com.apple.product-type.bundle.unit-test";
401 | };
402 | E42144D91CFF385E00885498 /* SampleApp */ = {
403 | isa = PBXNativeTarget;
404 | buildConfigurationList = E42144EB1CFF385E00885498 /* Build configuration list for PBXNativeTarget "SampleApp" */;
405 | buildPhases = (
406 | E42144D61CFF385E00885498 /* Sources */,
407 | E42144D71CFF385E00885498 /* Frameworks */,
408 | E42144D81CFF385E00885498 /* Resources */,
409 | E402203D1CFF3C6900C5A874 /* Embed Frameworks */,
410 | );
411 | buildRules = (
412 | );
413 | dependencies = (
414 | );
415 | name = SampleApp;
416 | productName = SampleApp;
417 | productReference = E42144DA1CFF385E00885498 /* SampleApp.app */;
418 | productType = "com.apple.product-type.application";
419 | };
420 | E46D00251CFF22200054DF1F /* RxStarscream */ = {
421 | isa = PBXNativeTarget;
422 | buildConfigurationList = E46D002E1CFF22200054DF1F /* Build configuration list for PBXNativeTarget "RxStarscream" */;
423 | buildPhases = (
424 | E46D00211CFF22200054DF1F /* Sources */,
425 | E46D00221CFF22200054DF1F /* Frameworks */,
426 | E46D00231CFF22200054DF1F /* Headers */,
427 | E46D00241CFF22200054DF1F /* Resources */,
428 | );
429 | buildRules = (
430 | );
431 | dependencies = (
432 | );
433 | name = RxStarscream;
434 | productName = RxStarscream;
435 | productReference = E46D00261CFF22200054DF1F /* RxStarscream.framework */;
436 | productType = "com.apple.product-type.framework";
437 | };
438 | /* End PBXNativeTarget section */
439 |
440 | /* Begin PBXProject section */
441 | E46D001D1CFF22200054DF1F /* Project object */ = {
442 | isa = PBXProject;
443 | attributes = {
444 | LastSwiftUpdateCheck = 0920;
445 | LastUpgradeCheck = 1000;
446 | ORGANIZATIONNAME = "Guy Kahlon";
447 | TargetAttributes = {
448 | 98D95A3E204F7E9A00159C45 = {
449 | CreatedOnToolsVersion = 9.2;
450 | ProvisioningStyle = Automatic;
451 | };
452 | 98D95A46204F7E9B00159C45 = {
453 | CreatedOnToolsVersion = 9.2;
454 | LastSwiftMigration = 1000;
455 | ProvisioningStyle = Automatic;
456 | };
457 | BEF3143F1E86D13C00C15DD4 = {
458 | CreatedOnToolsVersion = 8.2.1;
459 | DevelopmentTeam = 7GE4Q65N57;
460 | ProvisioningStyle = Automatic;
461 | };
462 | E42144D91CFF385E00885498 = {
463 | CreatedOnToolsVersion = 7.3;
464 | DevelopmentTeam = 7GE4Q65N57;
465 | LastSwiftMigration = 0920;
466 | ProvisioningStyle = Automatic;
467 | };
468 | E46D00251CFF22200054DF1F = {
469 | CreatedOnToolsVersion = 7.3;
470 | DevelopmentTeam = 7GE4Q65N57;
471 | LastSwiftMigration = 0820;
472 | ProvisioningStyle = Automatic;
473 | };
474 | };
475 | };
476 | buildConfigurationList = E46D00201CFF22200054DF1F /* Build configuration list for PBXProject "RxStarscream" */;
477 | compatibilityVersion = "Xcode 3.2";
478 | developmentRegion = English;
479 | hasScannedForEncodings = 0;
480 | knownRegions = (
481 | English,
482 | en,
483 | Base,
484 | );
485 | mainGroup = E46D001C1CFF22200054DF1F;
486 | productRefGroup = E46D00271CFF22200054DF1F /* Products */;
487 | projectDirPath = "";
488 | projectRoot = "";
489 | targets = (
490 | E46D00251CFF22200054DF1F /* RxStarscream */,
491 | E42144D91CFF385E00885498 /* SampleApp */,
492 | BEF3143F1E86D13C00C15DD4 /* RxStarscreamTests */,
493 | 98D95A3E204F7E9A00159C45 /* RxStarscream-macOS */,
494 | 98D95A46204F7E9B00159C45 /* RxStarscream-macOSTests */,
495 | );
496 | };
497 | /* End PBXProject section */
498 |
499 | /* Begin PBXResourcesBuildPhase section */
500 | 98D95A3D204F7E9A00159C45 /* Resources */ = {
501 | isa = PBXResourcesBuildPhase;
502 | buildActionMask = 2147483647;
503 | files = (
504 | );
505 | runOnlyForDeploymentPostprocessing = 0;
506 | };
507 | 98D95A45204F7E9B00159C45 /* Resources */ = {
508 | isa = PBXResourcesBuildPhase;
509 | buildActionMask = 2147483647;
510 | files = (
511 | );
512 | runOnlyForDeploymentPostprocessing = 0;
513 | };
514 | BEF3143E1E86D13C00C15DD4 /* Resources */ = {
515 | isa = PBXResourcesBuildPhase;
516 | buildActionMask = 2147483647;
517 | files = (
518 | );
519 | runOnlyForDeploymentPostprocessing = 0;
520 | };
521 | E42144D81CFF385E00885498 /* Resources */ = {
522 | isa = PBXResourcesBuildPhase;
523 | buildActionMask = 2147483647;
524 | files = (
525 | E42144E41CFF385E00885498 /* Assets.xcassets in Resources */,
526 | E42144E71CFF385E00885498 /* LaunchScreen.storyboard in Resources */,
527 | E42144E21CFF385E00885498 /* Main.storyboard in Resources */,
528 | );
529 | runOnlyForDeploymentPostprocessing = 0;
530 | };
531 | E46D00241CFF22200054DF1F /* Resources */ = {
532 | isa = PBXResourcesBuildPhase;
533 | buildActionMask = 2147483647;
534 | files = (
535 | );
536 | runOnlyForDeploymentPostprocessing = 0;
537 | };
538 | /* End PBXResourcesBuildPhase section */
539 |
540 | /* Begin PBXSourcesBuildPhase section */
541 | 98D95A3A204F7E9A00159C45 /* Sources */ = {
542 | isa = PBXSourcesBuildPhase;
543 | buildActionMask = 2147483647;
544 | files = (
545 | 98D95A57204F7EC000159C45 /* RxStarscream.swift in Sources */,
546 | );
547 | runOnlyForDeploymentPostprocessing = 0;
548 | };
549 | 98D95A43204F7E9B00159C45 /* Sources */ = {
550 | isa = PBXSourcesBuildPhase;
551 | buildActionMask = 2147483647;
552 | files = (
553 | 98D95A61204F82BA00159C45 /* RxStarscream_macOSTests.swift in Sources */,
554 | );
555 | runOnlyForDeploymentPostprocessing = 0;
556 | };
557 | BEF3143C1E86D13C00C15DD4 /* Sources */ = {
558 | isa = PBXSourcesBuildPhase;
559 | buildActionMask = 2147483647;
560 | files = (
561 | BEF314431E86D13C00C15DD4 /* RxStarscreamTests.swift in Sources */,
562 | );
563 | runOnlyForDeploymentPostprocessing = 0;
564 | };
565 | E42144D61CFF385E00885498 /* Sources */ = {
566 | isa = PBXSourcesBuildPhase;
567 | buildActionMask = 2147483647;
568 | files = (
569 | E42144DD1CFF385E00885498 /* AppDelegate.swift in Sources */,
570 | E42144EC1CFF395500885498 /* RxStarscream.swift in Sources */,
571 | E42144DF1CFF385E00885498 /* ViewController.swift in Sources */,
572 | );
573 | runOnlyForDeploymentPostprocessing = 0;
574 | };
575 | E46D00211CFF22200054DF1F /* Sources */ = {
576 | isa = PBXSourcesBuildPhase;
577 | buildActionMask = 2147483647;
578 | files = (
579 | E46D00321CFF22760054DF1F /* RxStarscream.swift in Sources */,
580 | );
581 | runOnlyForDeploymentPostprocessing = 0;
582 | };
583 | /* End PBXSourcesBuildPhase section */
584 |
585 | /* Begin PBXTargetDependency section */
586 | 98D95A4A204F7E9B00159C45 /* PBXTargetDependency */ = {
587 | isa = PBXTargetDependency;
588 | target = 98D95A3E204F7E9A00159C45 /* RxStarscream-macOS */;
589 | targetProxy = 98D95A49204F7E9B00159C45 /* PBXContainerItemProxy */;
590 | };
591 | BEF314471E86D13C00C15DD4 /* PBXTargetDependency */ = {
592 | isa = PBXTargetDependency;
593 | target = E46D00251CFF22200054DF1F /* RxStarscream */;
594 | targetProxy = BEF314461E86D13C00C15DD4 /* PBXContainerItemProxy */;
595 | };
596 | /* End PBXTargetDependency section */
597 |
598 | /* Begin PBXVariantGroup section */
599 | E42144E01CFF385E00885498 /* Main.storyboard */ = {
600 | isa = PBXVariantGroup;
601 | children = (
602 | E42144E11CFF385E00885498 /* Base */,
603 | );
604 | name = Main.storyboard;
605 | sourceTree = "";
606 | };
607 | E42144E51CFF385E00885498 /* LaunchScreen.storyboard */ = {
608 | isa = PBXVariantGroup;
609 | children = (
610 | E42144E61CFF385E00885498 /* Base */,
611 | );
612 | name = LaunchScreen.storyboard;
613 | sourceTree = "";
614 | };
615 | /* End PBXVariantGroup section */
616 |
617 | /* Begin XCBuildConfiguration section */
618 | 98D95A50204F7E9B00159C45 /* Debug */ = {
619 | isa = XCBuildConfiguration;
620 | buildSettings = {
621 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
622 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
623 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
624 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
625 | CODE_SIGN_IDENTITY = "-";
626 | CODE_SIGN_STYLE = Automatic;
627 | COMBINE_HIDPI_IMAGES = YES;
628 | DEFINES_MODULE = YES;
629 | DYLIB_COMPATIBILITY_VERSION = 1;
630 | DYLIB_CURRENT_VERSION = 1;
631 | DYLIB_INSTALL_NAME_BASE = "@rpath";
632 | FRAMEWORK_SEARCH_PATHS = (
633 | "$(inherited)",
634 | "$(PROJECT_DIR)/Carthage/Build/Mac",
635 | );
636 | FRAMEWORK_VERSION = A;
637 | GCC_C_LANGUAGE_STANDARD = gnu11;
638 | INFOPLIST_FILE = "RxStarscream-macOS/Info.plist";
639 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
640 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
641 | MACOSX_DEPLOYMENT_TARGET = 10.10;
642 | PRODUCT_BUNDLE_IDENTIFIER = "com.RxSwift.RxStarscream-macOS";
643 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
644 | SDKROOT = macosx;
645 | SKIP_INSTALL = YES;
646 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
647 | SWIFT_VERSION = 5.0;
648 | };
649 | name = Debug;
650 | };
651 | 98D95A51204F7E9B00159C45 /* Release */ = {
652 | isa = XCBuildConfiguration;
653 | buildSettings = {
654 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
655 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
656 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
657 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
658 | CODE_SIGN_IDENTITY = "-";
659 | CODE_SIGN_STYLE = Automatic;
660 | COMBINE_HIDPI_IMAGES = YES;
661 | DEFINES_MODULE = YES;
662 | DYLIB_COMPATIBILITY_VERSION = 1;
663 | DYLIB_CURRENT_VERSION = 1;
664 | DYLIB_INSTALL_NAME_BASE = "@rpath";
665 | FRAMEWORK_SEARCH_PATHS = (
666 | "$(inherited)",
667 | "$(PROJECT_DIR)/Carthage/Build/Mac",
668 | );
669 | FRAMEWORK_VERSION = A;
670 | GCC_C_LANGUAGE_STANDARD = gnu11;
671 | INFOPLIST_FILE = "RxStarscream-macOS/Info.plist";
672 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
673 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
674 | MACOSX_DEPLOYMENT_TARGET = 10.10;
675 | PRODUCT_BUNDLE_IDENTIFIER = "com.RxSwift.RxStarscream-macOS";
676 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
677 | SDKROOT = macosx;
678 | SKIP_INSTALL = YES;
679 | SWIFT_VERSION = 5.0;
680 | };
681 | name = Release;
682 | };
683 | 98D95A52204F7E9B00159C45 /* Debug */ = {
684 | isa = XCBuildConfiguration;
685 | buildSettings = {
686 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
687 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
688 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
689 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
690 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
691 | CODE_SIGN_IDENTITY = "-";
692 | CODE_SIGN_STYLE = Automatic;
693 | COMBINE_HIDPI_IMAGES = YES;
694 | FRAMEWORK_SEARCH_PATHS = (
695 | "$(inherited)",
696 | "$(PROJECT_DIR)/Carthage/Build/Mac",
697 | );
698 | GCC_C_LANGUAGE_STANDARD = gnu11;
699 | INFOPLIST_FILE = "RxStarscream-macOSTests/Info.plist";
700 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
701 | MACOSX_DEPLOYMENT_TARGET = 10.12;
702 | PRODUCT_BUNDLE_IDENTIFIER = "com.RxSwift.RxStarscream-macOSTests";
703 | PRODUCT_NAME = "$(TARGET_NAME)";
704 | SDKROOT = macosx;
705 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
706 | SWIFT_VERSION = 5.0;
707 | };
708 | name = Debug;
709 | };
710 | 98D95A53204F7E9B00159C45 /* Release */ = {
711 | isa = XCBuildConfiguration;
712 | buildSettings = {
713 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
714 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
715 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
716 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
717 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
718 | CODE_SIGN_IDENTITY = "-";
719 | CODE_SIGN_STYLE = Automatic;
720 | COMBINE_HIDPI_IMAGES = YES;
721 | FRAMEWORK_SEARCH_PATHS = (
722 | "$(inherited)",
723 | "$(PROJECT_DIR)/Carthage/Build/Mac",
724 | );
725 | GCC_C_LANGUAGE_STANDARD = gnu11;
726 | INFOPLIST_FILE = "RxStarscream-macOSTests/Info.plist";
727 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
728 | MACOSX_DEPLOYMENT_TARGET = 10.12;
729 | PRODUCT_BUNDLE_IDENTIFIER = "com.RxSwift.RxStarscream-macOSTests";
730 | PRODUCT_NAME = "$(TARGET_NAME)";
731 | SDKROOT = macosx;
732 | SWIFT_VERSION = 5.0;
733 | };
734 | name = Release;
735 | };
736 | BEF314481E86D13C00C15DD4 /* Debug */ = {
737 | isa = XCBuildConfiguration;
738 | buildSettings = {
739 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
740 | CLANG_WARN_INFINITE_RECURSION = YES;
741 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
742 | DEVELOPMENT_TEAM = 7GE4Q65N57;
743 | FRAMEWORK_SEARCH_PATHS = (
744 | "$(inherited)",
745 | "$(PROJECT_DIR)/Carthage/Build/iOS",
746 | );
747 | INFOPLIST_FILE = RxStarscreamTests/Info.plist;
748 | IPHONEOS_DEPLOYMENT_TARGET = 10.2;
749 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
750 | PRODUCT_BUNDLE_IDENTIFIER = com.RxSwift.RxStarscreamTests;
751 | PRODUCT_NAME = "$(TARGET_NAME)";
752 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
753 | SWIFT_VERSION = 5.0;
754 | };
755 | name = Debug;
756 | };
757 | BEF314491E86D13C00C15DD4 /* Release */ = {
758 | isa = XCBuildConfiguration;
759 | buildSettings = {
760 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
761 | CLANG_WARN_INFINITE_RECURSION = YES;
762 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
763 | DEVELOPMENT_TEAM = 7GE4Q65N57;
764 | FRAMEWORK_SEARCH_PATHS = (
765 | "$(inherited)",
766 | "$(PROJECT_DIR)/Carthage/Build/iOS",
767 | );
768 | INFOPLIST_FILE = RxStarscreamTests/Info.plist;
769 | IPHONEOS_DEPLOYMENT_TARGET = 10.2;
770 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
771 | PRODUCT_BUNDLE_IDENTIFIER = com.RxSwift.RxStarscreamTests;
772 | PRODUCT_NAME = "$(TARGET_NAME)";
773 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
774 | SWIFT_VERSION = 5.0;
775 | };
776 | name = Release;
777 | };
778 | E42144E91CFF385E00885498 /* Debug */ = {
779 | isa = XCBuildConfiguration;
780 | buildSettings = {
781 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
782 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
783 | CODE_SIGN_STYLE = Automatic;
784 | DEVELOPMENT_TEAM = 7GE4Q65N57;
785 | FRAMEWORK_SEARCH_PATHS = (
786 | "$(inherited)",
787 | "$(PROJECT_DIR)/Carthage/Build/iOS",
788 | );
789 | INFOPLIST_FILE = SampleApp/Info.plist;
790 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
791 | PRODUCT_BUNDLE_IDENTIFIER = com.RxSwift.SampleApp;
792 | PRODUCT_NAME = "$(TARGET_NAME)";
793 | PROVISIONING_PROFILE_SPECIFIER = "";
794 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
795 | SWIFT_VERSION = 5.0;
796 | TARGETED_DEVICE_FAMILY = 1;
797 | };
798 | name = Debug;
799 | };
800 | E42144EA1CFF385E00885498 /* Release */ = {
801 | isa = XCBuildConfiguration;
802 | buildSettings = {
803 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
804 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
805 | CODE_SIGN_STYLE = Automatic;
806 | DEVELOPMENT_TEAM = 7GE4Q65N57;
807 | FRAMEWORK_SEARCH_PATHS = (
808 | "$(inherited)",
809 | "$(PROJECT_DIR)/Carthage/Build/iOS",
810 | );
811 | INFOPLIST_FILE = SampleApp/Info.plist;
812 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
813 | PRODUCT_BUNDLE_IDENTIFIER = com.RxSwift.SampleApp;
814 | PRODUCT_NAME = "$(TARGET_NAME)";
815 | PROVISIONING_PROFILE_SPECIFIER = "";
816 | SWIFT_SWIFT3_OBJC_INFERENCE = Off;
817 | SWIFT_VERSION = 5.0;
818 | TARGETED_DEVICE_FAMILY = 1;
819 | };
820 | name = Release;
821 | };
822 | E46D002C1CFF22200054DF1F /* Debug */ = {
823 | isa = XCBuildConfiguration;
824 | buildSettings = {
825 | ALWAYS_SEARCH_USER_PATHS = NO;
826 | CLANG_ANALYZER_NONNULL = YES;
827 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
828 | CLANG_CXX_LIBRARY = "libc++";
829 | CLANG_ENABLE_MODULES = YES;
830 | CLANG_ENABLE_OBJC_ARC = YES;
831 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
832 | CLANG_WARN_BOOL_CONVERSION = YES;
833 | CLANG_WARN_COMMA = YES;
834 | CLANG_WARN_CONSTANT_CONVERSION = YES;
835 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
836 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
837 | CLANG_WARN_EMPTY_BODY = YES;
838 | CLANG_WARN_ENUM_CONVERSION = YES;
839 | CLANG_WARN_INFINITE_RECURSION = YES;
840 | CLANG_WARN_INT_CONVERSION = YES;
841 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
842 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
843 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
844 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
845 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
846 | CLANG_WARN_STRICT_PROTOTYPES = YES;
847 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
848 | CLANG_WARN_UNREACHABLE_CODE = YES;
849 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
850 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
851 | COPY_PHASE_STRIP = NO;
852 | CURRENT_PROJECT_VERSION = 1;
853 | DEBUG_INFORMATION_FORMAT = dwarf;
854 | ENABLE_STRICT_OBJC_MSGSEND = YES;
855 | ENABLE_TESTABILITY = YES;
856 | GCC_C_LANGUAGE_STANDARD = gnu99;
857 | GCC_DYNAMIC_NO_PIC = NO;
858 | GCC_NO_COMMON_BLOCKS = YES;
859 | GCC_OPTIMIZATION_LEVEL = 0;
860 | GCC_PREPROCESSOR_DEFINITIONS = (
861 | "DEBUG=1",
862 | "$(inherited)",
863 | );
864 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
865 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
866 | GCC_WARN_UNDECLARED_SELECTOR = YES;
867 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
868 | GCC_WARN_UNUSED_FUNCTION = YES;
869 | GCC_WARN_UNUSED_VARIABLE = YES;
870 | IPHONEOS_DEPLOYMENT_TARGET = 9.3;
871 | MACOSX_DEPLOYMENT_TARGET = 10.10;
872 | MTL_ENABLE_DEBUG_INFO = YES;
873 | ONLY_ACTIVE_ARCH = YES;
874 | SDKROOT = iphoneos;
875 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
876 | SWIFT_VERSION = 4.2;
877 | TARGETED_DEVICE_FAMILY = "1,2";
878 | VERSIONING_SYSTEM = "apple-generic";
879 | VERSION_INFO_PREFIX = "";
880 | };
881 | name = Debug;
882 | };
883 | E46D002D1CFF22200054DF1F /* Release */ = {
884 | isa = XCBuildConfiguration;
885 | buildSettings = {
886 | ALWAYS_SEARCH_USER_PATHS = NO;
887 | CLANG_ANALYZER_NONNULL = YES;
888 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
889 | CLANG_CXX_LIBRARY = "libc++";
890 | CLANG_ENABLE_MODULES = YES;
891 | CLANG_ENABLE_OBJC_ARC = YES;
892 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
893 | CLANG_WARN_BOOL_CONVERSION = YES;
894 | CLANG_WARN_COMMA = YES;
895 | CLANG_WARN_CONSTANT_CONVERSION = YES;
896 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
897 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
898 | CLANG_WARN_EMPTY_BODY = YES;
899 | CLANG_WARN_ENUM_CONVERSION = YES;
900 | CLANG_WARN_INFINITE_RECURSION = YES;
901 | CLANG_WARN_INT_CONVERSION = YES;
902 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
903 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
904 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
905 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
906 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
907 | CLANG_WARN_STRICT_PROTOTYPES = YES;
908 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
909 | CLANG_WARN_UNREACHABLE_CODE = YES;
910 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
911 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
912 | COPY_PHASE_STRIP = NO;
913 | CURRENT_PROJECT_VERSION = 1;
914 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
915 | ENABLE_NS_ASSERTIONS = NO;
916 | ENABLE_STRICT_OBJC_MSGSEND = YES;
917 | GCC_C_LANGUAGE_STANDARD = gnu99;
918 | GCC_NO_COMMON_BLOCKS = YES;
919 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
920 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
921 | GCC_WARN_UNDECLARED_SELECTOR = YES;
922 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
923 | GCC_WARN_UNUSED_FUNCTION = YES;
924 | GCC_WARN_UNUSED_VARIABLE = YES;
925 | IPHONEOS_DEPLOYMENT_TARGET = 9.3;
926 | MACOSX_DEPLOYMENT_TARGET = 10.10;
927 | MTL_ENABLE_DEBUG_INFO = NO;
928 | SDKROOT = iphoneos;
929 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
930 | SWIFT_VERSION = 4.2;
931 | TARGETED_DEVICE_FAMILY = "1,2";
932 | VALIDATE_PRODUCT = YES;
933 | VERSIONING_SYSTEM = "apple-generic";
934 | VERSION_INFO_PREFIX = "";
935 | };
936 | name = Release;
937 | };
938 | E46D002F1CFF22200054DF1F /* Debug */ = {
939 | isa = XCBuildConfiguration;
940 | buildSettings = {
941 | CLANG_ENABLE_MODULES = YES;
942 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
943 | CODE_SIGN_STYLE = Automatic;
944 | DEFINES_MODULE = YES;
945 | DEVELOPMENT_TEAM = 7GE4Q65N57;
946 | DYLIB_COMPATIBILITY_VERSION = 1;
947 | DYLIB_CURRENT_VERSION = 1;
948 | DYLIB_INSTALL_NAME_BASE = "@rpath";
949 | FRAMEWORK_SEARCH_PATHS = (
950 | "$(inherited)",
951 | "$(PROJECT_DIR)/Carthage/Build/iOS",
952 | );
953 | INFOPLIST_FILE = RxStarscream/Info.plist;
954 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
955 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
956 | PRODUCT_BUNDLE_IDENTIFIER = com.RxSwift.RxStarscream;
957 | PRODUCT_NAME = "$(TARGET_NAME)";
958 | PROVISIONING_PROFILE_SPECIFIER = "";
959 | SKIP_INSTALL = YES;
960 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
961 | SWIFT_VERSION = 5.0;
962 | };
963 | name = Debug;
964 | };
965 | E46D00301CFF22200054DF1F /* Release */ = {
966 | isa = XCBuildConfiguration;
967 | buildSettings = {
968 | CLANG_ENABLE_MODULES = YES;
969 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
970 | CODE_SIGN_STYLE = Automatic;
971 | DEFINES_MODULE = YES;
972 | DEVELOPMENT_TEAM = 7GE4Q65N57;
973 | DYLIB_COMPATIBILITY_VERSION = 1;
974 | DYLIB_CURRENT_VERSION = 1;
975 | DYLIB_INSTALL_NAME_BASE = "@rpath";
976 | FRAMEWORK_SEARCH_PATHS = (
977 | "$(inherited)",
978 | "$(PROJECT_DIR)/Carthage/Build/iOS",
979 | );
980 | INFOPLIST_FILE = RxStarscream/Info.plist;
981 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
982 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
983 | PRODUCT_BUNDLE_IDENTIFIER = com.RxSwift.RxStarscream;
984 | PRODUCT_NAME = "$(TARGET_NAME)";
985 | PROVISIONING_PROFILE_SPECIFIER = "";
986 | SKIP_INSTALL = YES;
987 | SWIFT_VERSION = 5.0;
988 | };
989 | name = Release;
990 | };
991 | /* End XCBuildConfiguration section */
992 |
993 | /* Begin XCConfigurationList section */
994 | 98D95A54204F7E9B00159C45 /* Build configuration list for PBXNativeTarget "RxStarscream-macOS" */ = {
995 | isa = XCConfigurationList;
996 | buildConfigurations = (
997 | 98D95A50204F7E9B00159C45 /* Debug */,
998 | 98D95A51204F7E9B00159C45 /* Release */,
999 | );
1000 | defaultConfigurationIsVisible = 0;
1001 | defaultConfigurationName = Release;
1002 | };
1003 | 98D95A55204F7E9B00159C45 /* Build configuration list for PBXNativeTarget "RxStarscream-macOSTests" */ = {
1004 | isa = XCConfigurationList;
1005 | buildConfigurations = (
1006 | 98D95A52204F7E9B00159C45 /* Debug */,
1007 | 98D95A53204F7E9B00159C45 /* Release */,
1008 | );
1009 | defaultConfigurationIsVisible = 0;
1010 | defaultConfigurationName = Release;
1011 | };
1012 | BEF3144A1E86D13C00C15DD4 /* Build configuration list for PBXNativeTarget "RxStarscreamTests" */ = {
1013 | isa = XCConfigurationList;
1014 | buildConfigurations = (
1015 | BEF314481E86D13C00C15DD4 /* Debug */,
1016 | BEF314491E86D13C00C15DD4 /* Release */,
1017 | );
1018 | defaultConfigurationIsVisible = 0;
1019 | defaultConfigurationName = Release;
1020 | };
1021 | E42144EB1CFF385E00885498 /* Build configuration list for PBXNativeTarget "SampleApp" */ = {
1022 | isa = XCConfigurationList;
1023 | buildConfigurations = (
1024 | E42144E91CFF385E00885498 /* Debug */,
1025 | E42144EA1CFF385E00885498 /* Release */,
1026 | );
1027 | defaultConfigurationIsVisible = 0;
1028 | defaultConfigurationName = Release;
1029 | };
1030 | E46D00201CFF22200054DF1F /* Build configuration list for PBXProject "RxStarscream" */ = {
1031 | isa = XCConfigurationList;
1032 | buildConfigurations = (
1033 | E46D002C1CFF22200054DF1F /* Debug */,
1034 | E46D002D1CFF22200054DF1F /* Release */,
1035 | );
1036 | defaultConfigurationIsVisible = 0;
1037 | defaultConfigurationName = Release;
1038 | };
1039 | E46D002E1CFF22200054DF1F /* Build configuration list for PBXNativeTarget "RxStarscream" */ = {
1040 | isa = XCConfigurationList;
1041 | buildConfigurations = (
1042 | E46D002F1CFF22200054DF1F /* Debug */,
1043 | E46D00301CFF22200054DF1F /* Release */,
1044 | );
1045 | defaultConfigurationIsVisible = 0;
1046 | defaultConfigurationName = Release;
1047 | };
1048 | /* End XCConfigurationList section */
1049 | };
1050 | rootObject = E46D001D1CFF22200054DF1F /* Project object */;
1051 | }
1052 |
--------------------------------------------------------------------------------
/RxStarscream.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/RxStarscream.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/RxStarscream.xcodeproj/xcshareddata/xcschemes/RxStarscream-macOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
33 |
39 |
40 |
41 |
42 |
43 |
49 |
50 |
51 |
52 |
53 |
54 |
64 |
65 |
71 |
72 |
73 |
74 |
75 |
76 |
82 |
83 |
89 |
90 |
91 |
92 |
94 |
95 |
98 |
99 |
100 |
--------------------------------------------------------------------------------
/RxStarscream.xcodeproj/xcshareddata/xcschemes/RxStarscream.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
33 |
39 |
40 |
41 |
42 |
43 |
49 |
50 |
51 |
52 |
53 |
54 |
64 |
65 |
71 |
72 |
73 |
74 |
75 |
76 |
82 |
83 |
89 |
90 |
91 |
92 |
94 |
95 |
98 |
99 |
100 |
--------------------------------------------------------------------------------
/RxStarscream/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 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/RxStarscream/RxStarscream.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by Guy Kahlon.
3 | //
4 |
5 | #import
6 |
7 | //! Project version number for RxStarscream.
8 | FOUNDATION_EXPORT double RxStarscreamVersionNumber;
9 |
10 | //! Project version string for RxStarscream.
11 | FOUNDATION_EXPORT const unsigned char RxStarscreamVersionString[];
12 |
13 | // In this header, you should import all the public headers of your framework using statements like #import
14 |
15 |
16 |
--------------------------------------------------------------------------------
/RxStarscreamTests/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 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/RxStarscreamTests/RxStarscreamTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxStarscreamTests.swift
3 | // RxStarscreamTests
4 | //
5 | // Created by Cezary Kopacz on 25/03/2017.
6 | // Copyright © 2017 Guy Kahlon. All rights reserved.
7 | //
8 |
9 | import XCTest
10 | import RxSwift
11 | import RxTest
12 | import Starscream
13 | import RxStarscream
14 |
15 | extension WebSocketEvent: Equatable { }
16 |
17 | public func ==(lhs: WebSocketEvent, rhs: WebSocketEvent) -> Bool {
18 | switch (lhs, rhs) {
19 | case (.connected, .connected):
20 | return true
21 | case (.disconnected(let lhsError), .disconnected(let rhsError)):
22 | return lhsError?.localizedDescription == rhsError?.localizedDescription
23 | case (.message(let lhsMsg), .message(let rhsMsg)):
24 | return lhsMsg == rhsMsg
25 | case (.data(let lhsData), .data(let rhsData)):
26 | return lhsData == rhsData
27 | case (.pong, .pong):
28 | return true
29 | default:
30 | return false
31 | }
32 | }
33 |
34 | class RxStarscreamTests: XCTestCase {
35 |
36 | private var connectedObserver: TestableObserver!
37 | private var pongObserver: TestableObserver!
38 | private var responseObserver: TestableObserver!
39 | private var socket: WebSocket!
40 |
41 | let disposeBag = DisposeBag()
42 |
43 | override func setUp() {
44 | super.setUp()
45 |
46 | socket = WebSocket(url: URL(string: "wss://echo.websocket.org")!)
47 | continueAfterFailure = false
48 | }
49 |
50 | func testConnection() {
51 | let scheduler = TestScheduler(initialClock: 0)
52 | connectedObserver = scheduler.createObserver(Bool.self)
53 |
54 | let connected = socket.rx.connected.share(replay: 1)
55 | connected.subscribe(onNext: { [unowned self] _ in
56 | self.socket.disconnect()
57 | }).disposed(by: disposeBag)
58 |
59 | socket.rx.connected
60 | .subscribe(connectedObserver)
61 | .disposed(by: disposeBag)
62 |
63 | XCTAssertTrue(socket.delegate != nil, "delegate should be set")
64 |
65 | socket.delegate!.websocketDidConnect(socket: socket)
66 | socket.delegate!.websocketDidDisconnect(socket: socket, error: nil)
67 |
68 | XCTAssertEqual(self.connectedObserver.events.count, 2)
69 | XCTAssertEqual(self.connectedObserver.events[0].value.element!, true)
70 | XCTAssertEqual(self.connectedObserver.events[1].value.element!, false)
71 | }
72 |
73 | func testPongMessage() {
74 | let scheduler = TestScheduler(initialClock: 0)
75 | pongObserver = scheduler.createObserver(WebSocketEvent.self)
76 |
77 | socket.rx.response
78 | .subscribe(pongObserver)
79 | .disposed(by: disposeBag)
80 |
81 | XCTAssertTrue(socket.pongDelegate != nil, "pongDelegate should be set")
82 |
83 | socket.pongDelegate!.websocketDidReceivePong(socket: socket, data: Data())
84 |
85 | XCTAssertEqual(self.pongObserver.events.count, 1)
86 | XCTAssertEqual(self.pongObserver.events[0].value.element!, WebSocketEvent.pong)
87 | }
88 |
89 | func testMessageResponse() {
90 | let sentMessage = "Hello"
91 |
92 | let scheduler = TestScheduler(initialClock: 0)
93 | responseObserver = scheduler.createObserver(WebSocketEvent.self)
94 |
95 | socket.rx.response
96 | .subscribe(responseObserver)
97 | .disposed(by: disposeBag)
98 |
99 | XCTAssertTrue(socket.delegate != nil, "delegate should be set")
100 |
101 | socket.delegate!.websocketDidReceiveMessage(socket: socket, text: sentMessage)
102 |
103 | XCTAssertEqual(self.responseObserver.events.count, 1)
104 | XCTAssertEqual(WebSocketEvent.message(sentMessage), self.responseObserver.events[0].value.element!)
105 | }
106 | }
107 |
--------------------------------------------------------------------------------
/SampleApp/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Created by Guy Kahlon.
3 | //
4 |
5 | import UIKit
6 |
7 | @UIApplicationMain
8 | class AppDelegate: UIResponder, UIApplicationDelegate {
9 |
10 | var window: UIWindow?
11 | }
12 |
--------------------------------------------------------------------------------
/SampleApp/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "RxStarscreamIcon40.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "RxStarscreamIcon60.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "iPhone_Settings_iOS5-9_29pt@2x.png",
19 | "scale" : "2x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "iPhone_Settings_iOS5-9_29pt@3x.png",
25 | "scale" : "3x"
26 | },
27 | {
28 | "size" : "40x40",
29 | "idiom" : "iphone",
30 | "filename" : "iPhone_Spotlight_iOS7-9_40pt@2x.png",
31 | "scale" : "2x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "iPhone_Spotlight_iOS7-9_40pt@3x.png",
37 | "scale" : "3x"
38 | },
39 | {
40 | "size" : "60x60",
41 | "idiom" : "iphone",
42 | "filename" : "iPhone_App_iOS7-9_60pt@2x.png",
43 | "scale" : "2x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "iPhone_App_iOS7-9_60pt@3x.png",
49 | "scale" : "3x"
50 | },
51 | {
52 | "size" : "1024x1024",
53 | "idiom" : "ios-marketing",
54 | "filename" : "RxStarscream1024.png",
55 | "scale" : "1x"
56 | }
57 | ],
58 | "info" : {
59 | "version" : 1,
60 | "author" : "xcode"
61 | }
62 | }
--------------------------------------------------------------------------------
/SampleApp/Assets.xcassets/AppIcon.appiconset/RxStarscream1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxStarscream/295d44f485ad9cf74c5a2821dd76870ca2a44cd3/SampleApp/Assets.xcassets/AppIcon.appiconset/RxStarscream1024.png
--------------------------------------------------------------------------------
/SampleApp/Assets.xcassets/AppIcon.appiconset/RxStarscreamIcon40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxStarscream/295d44f485ad9cf74c5a2821dd76870ca2a44cd3/SampleApp/Assets.xcassets/AppIcon.appiconset/RxStarscreamIcon40.png
--------------------------------------------------------------------------------
/SampleApp/Assets.xcassets/AppIcon.appiconset/RxStarscreamIcon60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxStarscream/295d44f485ad9cf74c5a2821dd76870ca2a44cd3/SampleApp/Assets.xcassets/AppIcon.appiconset/RxStarscreamIcon60.png
--------------------------------------------------------------------------------
/SampleApp/Assets.xcassets/AppIcon.appiconset/iPhone_App_iOS7-9_60pt@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxStarscream/295d44f485ad9cf74c5a2821dd76870ca2a44cd3/SampleApp/Assets.xcassets/AppIcon.appiconset/iPhone_App_iOS7-9_60pt@2x.png
--------------------------------------------------------------------------------
/SampleApp/Assets.xcassets/AppIcon.appiconset/iPhone_App_iOS7-9_60pt@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxStarscream/295d44f485ad9cf74c5a2821dd76870ca2a44cd3/SampleApp/Assets.xcassets/AppIcon.appiconset/iPhone_App_iOS7-9_60pt@3x.png
--------------------------------------------------------------------------------
/SampleApp/Assets.xcassets/AppIcon.appiconset/iPhone_Settings_iOS5-9_29pt@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxStarscream/295d44f485ad9cf74c5a2821dd76870ca2a44cd3/SampleApp/Assets.xcassets/AppIcon.appiconset/iPhone_Settings_iOS5-9_29pt@2x.png
--------------------------------------------------------------------------------
/SampleApp/Assets.xcassets/AppIcon.appiconset/iPhone_Settings_iOS5-9_29pt@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxStarscream/295d44f485ad9cf74c5a2821dd76870ca2a44cd3/SampleApp/Assets.xcassets/AppIcon.appiconset/iPhone_Settings_iOS5-9_29pt@3x.png
--------------------------------------------------------------------------------
/SampleApp/Assets.xcassets/AppIcon.appiconset/iPhone_Spotlight_iOS7-9_40pt@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxStarscream/295d44f485ad9cf74c5a2821dd76870ca2a44cd3/SampleApp/Assets.xcassets/AppIcon.appiconset/iPhone_Spotlight_iOS7-9_40pt@2x.png
--------------------------------------------------------------------------------
/SampleApp/Assets.xcassets/AppIcon.appiconset/iPhone_Spotlight_iOS7-9_40pt@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxStarscream/295d44f485ad9cf74c5a2821dd76870ca2a44cd3/SampleApp/Assets.xcassets/AppIcon.appiconset/iPhone_Spotlight_iOS7-9_40pt@3x.png
--------------------------------------------------------------------------------
/SampleApp/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/SampleApp/Assets.xcassets/RxStarscreamIcon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "RxStarscreamIcon.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/SampleApp/Assets.xcassets/RxStarscreamIcon.imageset/RxStarscreamIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxStarscream/295d44f485ad9cf74c5a2821dd76870ca2a44cd3/SampleApp/Assets.xcassets/RxStarscreamIcon.imageset/RxStarscreamIcon.png
--------------------------------------------------------------------------------
/SampleApp/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/SampleApp/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
--------------------------------------------------------------------------------
/SampleApp/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 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | armv7
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 | UISupportedInterfaceOrientations~ipad
40 |
41 | UIInterfaceOrientationPortrait
42 | UIInterfaceOrientationPortraitUpsideDown
43 | UIInterfaceOrientationLandscapeLeft
44 | UIInterfaceOrientationLandscapeRight
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/SampleApp/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Created by Guy Kahlon.
3 | //
4 |
5 | import UIKit
6 | import RxSwift
7 | import Starscream
8 |
9 | class ViewController: UIViewController {
10 |
11 | @IBOutlet fileprivate weak var inputTextField: UITextField!
12 | @IBOutlet fileprivate weak var sendButton: UIButton!
13 | @IBOutlet fileprivate weak var logTextView: UITextView!
14 | @IBOutlet fileprivate weak var pongButton: UIBarButtonItem!
15 |
16 | private let disposeBag = DisposeBag()
17 | private let socket = WebSocket(url: URL(string: "wss://echo.websocket.org")!)
18 | private let writeSubject = PublishSubject()
19 |
20 | override func viewDidLoad() {
21 | super.viewDidLoad()
22 |
23 | sendButton.rx.tap
24 | .subscribe(onNext: { [unowned self] in
25 | guard let text = self.inputTextField.text, !text.isEmpty else {
26 | return
27 | }
28 | self.sendMessage(message: text)
29 | }).disposed(by: disposeBag)
30 |
31 | pongButton.rx.tap.subscribe(onNext: { [unowned self] in
32 | self.socket.write(ping: Data())
33 | self.writeSubject.onNext("PING")
34 | }).disposed(by: disposeBag)
35 |
36 | let responseString = socket.rx.response
37 | .map { response -> String in
38 | switch response {
39 | case .connected:
40 | return "Connected\n"
41 | case .disconnected(let error):
42 | return "Disconnected with error: \(String(describing: error)) \n"
43 | case .message(let msg):
44 | return "RESPONSE (Message): \(msg) \n"
45 | case .data(let data):
46 | return "RESPONSE (Data): \(data) \n"
47 | case .pong:
48 | return "RESPONSE (Pong)"
49 | }
50 | }
51 |
52 | Observable.merge([responseString, writeSubject.asObservable()])
53 | .scan([]) { lastMsg, newMsg -> Array in
54 | return Array(lastMsg + [newMsg])
55 | }.map { $0.joined(separator: "\n")
56 | }.asDriver(onErrorJustReturn: "")
57 | .drive(logTextView.rx.text)
58 | .disposed(by: disposeBag)
59 |
60 | socket.connect()
61 | }
62 |
63 | fileprivate func sendMessage(message: String) {
64 | socket.write(string: message)
65 | writeSubject.onNext("SENT: \(message)")
66 | inputTextField.text = nil
67 | inputTextField.resignFirstResponder()
68 | }
69 | }
70 |
71 | extension ViewController: UITextFieldDelegate {
72 |
73 | func textFieldShouldReturn(_ textField: UITextField) -> Bool {
74 | if let text = textField.text, !text.isEmpty {
75 | sendMessage(message: text)
76 | return true
77 | }
78 | return false
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/Source/RxStarscream.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Created by Guy Kahlon.
3 | //
4 |
5 | import Foundation
6 | import RxSwift
7 | import RxCocoa
8 | import Starscream
9 |
10 | public enum WebSocketEvent {
11 | case connected
12 | case disconnected(Error?)
13 | case message(String)
14 | case data(Data)
15 | case pong
16 | }
17 |
18 | public class RxWebSocketDelegateProxy: DelegateProxy, DelegateProxyType, WebSocketDelegate, WebSocketPongDelegate {
19 |
20 | private weak var forwardDelegate: WebSocketDelegate?
21 | private weak var forwardPongDelegate: WebSocketPongDelegate?
22 |
23 | fileprivate let subject = PublishSubject()
24 |
25 | required public init(websocket: Client) {
26 | super.init(parentObject: websocket, delegateProxy: RxWebSocketDelegateProxy.self)
27 | }
28 |
29 | public static func currentDelegate(for object: Client) -> NSObjectProtocol? {
30 | return object.delegate as? NSObjectProtocol
31 | }
32 |
33 | public static func setCurrentDelegate(_ delegate: NSObjectProtocol?, to object: Client) {
34 | object.delegate = delegate as? WebSocketDelegate
35 | object.pongDelegate = delegate as? WebSocketPongDelegate
36 | }
37 |
38 | public static func registerKnownImplementations() {
39 | self.register { RxWebSocketDelegateProxy(websocket: $0) }
40 | }
41 |
42 | public func websocketDidConnect(socket: WebSocketClient) {
43 | subject.onNext(WebSocketEvent.connected)
44 | forwardDelegate?.websocketDidConnect(socket: socket)
45 | }
46 |
47 | public func websocketDidDisconnect(socket: WebSocketClient, error: Error?) {
48 | subject.onNext(WebSocketEvent.disconnected(error))
49 | forwardDelegate?.websocketDidDisconnect(socket: socket, error: error)
50 | }
51 |
52 | public func websocketDidReceiveMessage(socket: WebSocketClient, text: String) {
53 | subject.onNext(WebSocketEvent.message(text))
54 | forwardDelegate?.websocketDidReceiveMessage(socket: socket, text: text)
55 | }
56 |
57 | public func websocketDidReceiveData(socket: WebSocketClient, data: Data) {
58 | subject.onNext(WebSocketEvent.data(data))
59 | forwardDelegate?.websocketDidReceiveData(socket: socket, data: data)
60 | }
61 |
62 | public func websocketDidReceivePong(socket: WebSocketClient, data: Data?) {
63 | subject.onNext(WebSocketEvent.pong)
64 | forwardPongDelegate?.websocketDidReceivePong(socket: socket, data: data)
65 | }
66 |
67 | deinit {
68 | subject.onCompleted()
69 | }
70 | }
71 |
72 | extension Reactive where Base: WebSocketClient {
73 |
74 | public var response: Observable {
75 | return RxWebSocketDelegateProxy.proxy(for: base).subject
76 | }
77 |
78 | public var text: Observable {
79 | return self.response
80 | .filter {
81 | switch $0 {
82 | case .message:
83 | return true
84 | default:
85 | return false
86 | }
87 | }
88 | .map {
89 | switch $0 {
90 | case .message(let message):
91 | return message
92 | default:
93 | return String()
94 | }
95 | }
96 | }
97 |
98 | public var connected: Observable {
99 | return response
100 | .filter {
101 | switch $0 {
102 | case .connected, .disconnected:
103 | return true
104 | default:
105 | return false
106 | }
107 | }
108 | .map {
109 | switch $0 {
110 | case .connected:
111 | return true
112 | default:
113 | return false
114 | }
115 | }
116 | }
117 |
118 | public func write(data: Data) -> Observable {
119 | return Observable.create { sub in
120 | self.base.write(data: data) {
121 | sub.onNext(())
122 | sub.onCompleted()
123 | }
124 |
125 | return Disposables.create()
126 | }
127 | }
128 |
129 | public func write(ping: Data) -> Observable {
130 | return Observable.create { sub in
131 | self.base.write(ping: ping) {
132 | sub.onNext(())
133 | sub.onCompleted()
134 | }
135 |
136 | return Disposables.create()
137 | }
138 | }
139 |
140 | public func write(string: String) -> Observable {
141 | return Observable.create { sub in
142 | self.base.write(string: string) {
143 | sub.onNext(())
144 | sub.onCompleted()
145 | }
146 |
147 | return Disposables.create()
148 | }
149 | }
150 | }
151 |
--------------------------------------------------------------------------------
/scripts/bootstrap-if-needed.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | RED='\033[1;31m'
4 | GREEN='\033[1;32m'
5 | NC='\033[0m' # No Color
6 |
7 | if ! cmp -s Cartfile.resolved Carthage/Cartfile.resolved; then
8 | printf "${RED}Dependencies out of date with cache.${NC} Bootstrapping...\n"
9 | scripts/bootstrap.sh
10 | else
11 | printf "${GREEN}Cache up-to-date.${NC} Skipping bootstrap...\n"
12 | fi
13 |
--------------------------------------------------------------------------------
/scripts/bootstrap.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | carthage bootstrap
4 | cp Cartfile.resolved Carthage
5 |
--------------------------------------------------------------------------------