Merge branch 'develop' of github.com:ReactiveX/RxSwift into feature/watchOS-tests

Conflicts:
	RxBlocking.podspec
	RxCocoa.podspec
	RxSwift.podspec
	scripts/common.sh
	scripts/pre-release-tests.sh
This commit is contained in:
Junior B 2015-10-06 10:10:39 +02:00
commit c60373b21b
79 changed files with 1971 additions and 523 deletions

View File

@ -3,8 +3,32 @@ All notable changes to this project will be documented in this file.
---
## [2.0.0-alpha.4](https://github.com/ReactiveX/RxSwift/releases/tag/2.0.0-alpha.4)
#### Updated
* Adds `tvOS` support
* Adds `watchOS` support
* Adds auto loading example to example app
* Restores old `Variable` behavior. Variable doesn't send anything on dealloc.
* Adds performance tests target.
* Adds more detailed resource tracing during unit tests (important for further optimizations).
* Adds `UIStepper` extensions.
* Adds `UIBarButtonItem` enabled property wrapper.
* Adds response data to userInfo of error for `rx_response` extensions of `NSURLSession`.
* Adds `onNext`, `onError` and `onCompleted` convenience methods to `ObserverType`.
#### Fixed
* Fixes problem on some systems with unregistering `CurrentThreadScheduler` from current thread.
* Fixes retry parameter naming (`maxAttemptCount`).
* Fixes a lot of unit test warnings.
* Removes embedding of Swift library with built frameworks.
## [2.0.0-alpha.3](https://github.com/ReactiveX/RxSwift/releases/tag/2.0.0-alpha.3)
#### Updated
* Renames `ImmediateScheduler` protocol to `ImmediateSchedulerType`
* Renames `Scheduler` protocol to `SchedulerType`
* Adds `CurrentThreadScheduler`

View File

@ -454,6 +454,8 @@ Open Rx.xcworkspace, choose `RxExample` and hit run. This method will build ever
### [CocoaPods](https://guides.cocoapods.org/using/using-cocoapods.html)
**:warning: IMPORTANT! For tvOS support through CocoaPods use [this hack](https://github.com/orta/cocoapods-expert-difficulty) until `0.39` is released. :warning:**
```
# Podfile
use_frameworks!
@ -474,7 +476,7 @@ $ pod install
Add this to `Cartfile`
```
git "git@github.com:ReactiveX/RxSwift.git" "2.0.0-alpha.3"
git "git@github.com:ReactiveX/RxSwift.git" "2.0.0-alpha.4"
```
```

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0700"
LastUpgradeVersion = "0710"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0700"
LastUpgradeVersion = "0710"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0710"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "C8F0C04D1BBBFBCE001B112F"
BuildableName = "RxBlocking.framework"
BlueprintName = "RxBlocking-watchOS"
ReferencedContainer = "container:Rx.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "C8F0C04D1BBBFBCE001B112F"
BuildableName = "RxBlocking.framework"
BlueprintName = "RxBlocking-watchOS"
ReferencedContainer = "container:Rx.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "C8F0C04D1BBBFBCE001B112F"
BuildableName = "RxBlocking.framework"
BlueprintName = "RxBlocking-watchOS"
ReferencedContainer = "container:Rx.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0700"
LastUpgradeVersion = "0710"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0700"
LastUpgradeVersion = "0710"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0710"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "C8F0C0041BBBFBB9001B112F"
BuildableName = "RxCocoa.framework"
BlueprintName = "RxCocoa-watchOS"
ReferencedContainer = "container:Rx.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "C8F0C0041BBBFBB9001B112F"
BuildableName = "RxCocoa.framework"
BlueprintName = "RxCocoa-watchOS"
ReferencedContainer = "container:Rx.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "C8F0C0041BBBFBB9001B112F"
BuildableName = "RxCocoa.framework"
BlueprintName = "RxCocoa-watchOS"
ReferencedContainer = "container:Rx.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0700"
LastUpgradeVersion = "0710"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0700"
LastUpgradeVersion = "0710"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0710"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "C8F0BF901BBBFB8B001B112F"
BuildableName = "RxSwift.framework"
BlueprintName = "RxSwift-watchOS"
ReferencedContainer = "container:Rx.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "C8F0BF901BBBFB8B001B112F"
BuildableName = "RxSwift.framework"
BlueprintName = "RxSwift-watchOS"
ReferencedContainer = "container:Rx.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "C8F0BF901BBBFB8B001B112F"
BuildableName = "RxSwift.framework"
BlueprintName = "RxSwift-watchOS"
ReferencedContainer = "container:Rx.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "RxBlocking"
s.version = "2.0.0-alpha.3"
s.version = "2.0.0-alpha.4"
s.summary = "RxSwift Blocking operatos"
s.description = <<-DESC
Set of blocking operators for unit testing
@ -15,6 +15,7 @@ Pod::Spec.new do |s|
s.ios.deployment_target = '8.0'
s.osx.deployment_target = '10.9'
s.watchos.deployment_target = '2.0'
s.tvos.deployment_target = '9.0'
s.source_files = 'RxBlocking/**/*.swift'

View File

@ -28,7 +28,7 @@ extension ObservableType {
var ended = false
self.subscribe { e in
_ = self.subscribe { e in
switch e {
case .Next(let element):
elements.append(element)

View File

@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "RxCocoa"
s.version = "2.0.0-alpha.3"
s.version = "2.0.0-alpha.4"
s.summary = "RxSwift Cocoa extensions"
s.description = <<-DESC
* UI extensions
@ -17,11 +17,13 @@ Pod::Spec.new do |s|
s.ios.deployment_target = '8.0'
s.osx.deployment_target = '10.9'
s.watchos.deployment_target = '2.0'
s.tvos.deployment_target = '9.0'
s.source_files = 'RxCocoa/RxCocoa.h', 'RxCocoa/Common/**/*.{swift,h,m}'
s.ios.source_files = 'RxCocoa/iOS/**/*.swift'
s.osx.source_files = 'RxCocoa/OSX/**/*.swift'
s.watchos.source_files = 'RxCocoa/iOS/**/*.swift'
s.tvos.source_files = 'RxCocoa/iOS/**/*.swift'
s.dependency 'RxSwift', '~> 2.0.0-alpha'
end

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS) || os(OSX)
import Foundation
#if !RX_NO_MODULE
import RxSwift
@ -86,3 +88,5 @@ class ControlTarget: RxTarget {
self.callback = nil
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
import UIKit
#if !RX_NO_MODULE
@ -92,4 +94,6 @@ class RxCollectionViewReactiveArrayDataSource<Element> : _RxCollectionViewReacti
collectionView.reloadData()
}
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
import UIKit
#if !RX_NO_MODULE
@ -88,4 +90,6 @@ class RxTableViewReactiveArrayDataSource<Element> : _RxTableViewReactiveArrayDat
tableView.reloadData()
}
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
import UIKit
#if !RX_NO_MODULE
@ -29,4 +31,6 @@ public protocol RxCollectionViewDataSourceType /*: UICollectionViewDataSource*/
- parameter observedEvent: Event
*/
func collectionView(collectionView: UICollectionView, observedEvent: Event<Element>) -> Void
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
import UIKit
#if !RX_NO_MODULE
@ -29,4 +31,6 @@ public protocol RxTableViewDataSourceType /*: UITableViewDataSource*/ {
- parameter observedEvent: Event
*/
func tableView(tableView: UITableView, observedEvent: Event<Element>) -> Void
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
import UIKit
#if !RX_NO_MODULE
@ -73,4 +75,6 @@ class RxCollectionViewDataSourceProxy : DelegateProxy
self.dataSource = dataSource ?? collectionViewDataSourceNotSet
super.setForwardToDelegate(forwardToDelegate, retainDelegate: retainDelegate)
}
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
import UIKit
#if !RX_NO_MODULE
@ -16,4 +18,6 @@ import RxSwift
class RxCollectionViewDelegateProxy : RxScrollViewDelegateProxy
, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
#if !RX_NO_MODULE
import RxSwift
@ -67,3 +69,5 @@ class RxScrollViewDelegateProxy : DelegateProxy
}
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
import UIKit
#if !RX_NO_MODULE
@ -25,4 +27,6 @@ class RxSearchBarDelegateProxy : DelegateProxy
let searchBar: UISearchBar = castOrFatalError(object)
searchBar.delegate = castOptionalOrFatalError(delegate)
}
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
import UIKit
#if !RX_NO_MODULE
@ -78,4 +80,6 @@ class RxTableViewDataSourceProxy : DelegateProxy
self.dataSource = dataSource ?? tableViewDataSourceNotSet
super.setForwardToDelegate(forwardToDelegate, retainDelegate: retainDelegate)
}
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
import UIKit
#if !RX_NO_MODULE
@ -16,4 +18,6 @@ import RxSwift
class RxTableViewDelegateProxy : RxScrollViewDelegateProxy
, UITableViewDelegate {
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
import UIKit
#if !RX_NO_MODULE
@ -17,3 +19,5 @@ class RxTextViewDelegateProxy : RxScrollViewDelegateProxy
, UITextViewDelegate {
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import UIKit
#if !RX_NO_MODULE
import RxSwift
@ -81,4 +83,6 @@ class BarButtonItemTarget: NSObject, Disposable {
callback()
}
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
#if !RX_NO_MODULE
import RxSwift
@ -21,4 +23,6 @@ extension UIButton {
return rx_controlEvents(.TouchUpInside)
}
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
#if !RX_NO_MODULE
import RxSwift
@ -150,3 +152,5 @@ extension UICollectionView {
return ControlEvent(source: source)
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
#if !RX_NO_MODULE
import RxSwift
@ -85,3 +87,5 @@ extension UIControl {
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import UIKit
#if !RX_NO_MODULE
import RxSwift
@ -69,4 +71,6 @@ extension UIGestureRecognizer {
return ControlEvent(source: source)
}
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
#if !RX_NO_MODULE
import RxSwift
@ -55,3 +57,5 @@ extension UIImageView {
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
#if !RX_NO_MODULE
import RxSwift
@ -33,4 +35,6 @@ extension UILabel {
}
}
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
#if !RX_NO_MODULE
import RxSwift
@ -64,3 +66,5 @@ extension UIScrollView {
return installDelegate(proxy, delegate: delegate, retainDelegate: false, onProxyForObject: self)
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
#if !RX_NO_MODULE
import RxSwift
@ -50,4 +52,6 @@ extension UISearchBar {
}
})
}
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import UIKit
#if !RX_NO_MODULE
import RxSwift
@ -25,4 +27,6 @@ extension UISegmentedControl {
})
}
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
#if !RX_NO_MODULE
import RxSwift
@ -194,4 +196,6 @@ extension UITableView {
return ControlEvent(source: source)
}
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
#if !RX_NO_MODULE
import RxSwift
@ -25,4 +27,6 @@ extension UITextField {
})
}
}
}
#endif

View File

@ -6,6 +6,8 @@
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import Foundation
import UIKit
#if !RX_NO_MODULE
@ -49,3 +51,5 @@ extension UITextView {
}
}
#endif

View File

@ -45,7 +45,6 @@
C8297E481B6CF905000589EA /* Differentiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C88C78941B3F20DB0061C5AB /* Differentiator.swift */; };
C8297E491B6CF905000589EA /* WikipediaSearchCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C46DA51B47F7110020D71E /* WikipediaSearchCell.swift */; };
C8297E4A1B6CF905000589EA /* GitHubSignupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C890A6571AEBD26B00AFF7E6 /* GitHubSignupViewController.swift */; };
C8297E4B1B6CF905000589EA /* Random.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = C8A57F721B40AF7C00D5570A /* Random.xcdatamodeld */; };
C8297E4C1B6CF905000589EA /* APIWrappersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075F130F1B4E9D5A000D7861 /* APIWrappersViewController.swift */; };
C8297E4D1B6CF905000589EA /* RxTableViewSectionedReloadDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C88C78651B3EB0A00061C5AB /* RxTableViewSectionedReloadDataSource.swift */; };
C8297E4E1B6CF905000589EA /* RxCollectionViewSectionedAnimatedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C859B9A91B45CB0900D012D7 /* RxCollectionViewSectionedAnimatedDataSource.swift */; };
@ -277,7 +276,6 @@
C8A468F11B8A8C2600BF917B /* RxBlocking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8A468EF1B8A8BD000BF917B /* RxBlocking.framework */; };
C8A468F21B8A8C2600BF917B /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8A468ED1B8A8BCC00BF917B /* RxCocoa.framework */; };
C8A468F31B8A8C2600BF917B /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8A468EB1B8A8BC900BF917B /* RxSwift.framework */; };
C8A57F741B40AF7C00D5570A /* Random.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = C8A57F721B40AF7C00D5570A /* Random.xcdatamodeld */; };
C8A7501F1B94E77C00D8D046 /* RxDataSourceStarterKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8A7501E1B94E77C00D8D046 /* RxDataSourceStarterKit.swift */; };
C8A750201B94E78200D8D046 /* RxDataSourceStarterKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8A7501E1B94E77C00D8D046 /* RxDataSourceStarterKit.swift */; };
C8C46DA81B47F7110020D71E /* CollectionViewImageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C46DA31B47F7110020D71E /* CollectionViewImageCell.swift */; };
@ -294,9 +292,96 @@
C8DF92EA1B0B38C0009BCF9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C8DF92E91B0B38C0009BCF9A /* Images.xcassets */; };
C8DF92EB1B0B38C0009BCF9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C8DF92E91B0B38C0009BCF9A /* Images.xcassets */; };
C8DF92F61B0B43A4009BCF9A /* IntroductionExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8DF92F51B0B43A4009BCF9A /* IntroductionExampleViewController.swift */; };
EC91FB951BBA144400973245 /* GitHubSearchRepositoriesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC91FB941BBA144400973245 /* GitHubSearchRepositoriesViewController.swift */; settings = {ASSET_TAGS = (); }; };
EC91FB951BBA144400973245 /* GitHubSearchRepositoriesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC91FB941BBA144400973245 /* GitHubSearchRepositoriesViewController.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
C81B3A001BC1C28400EF5A9F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = C81B39F11BC1C28400EF5A9F /* Rx.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = C8A56AD71AD7424700B4673B;
remoteInfo = "RxSwift-iOS";
};
C81B3A021BC1C28400EF5A9F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = C81B39F11BC1C28400EF5A9F /* Rx.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = C88BB8711B07E5ED0064D411;
remoteInfo = "RxSwift-OSX";
};
C81B3A041BC1C28400EF5A9F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = C81B39F11BC1C28400EF5A9F /* Rx.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = D2EA280C1BB9B5A200880ED3;
remoteInfo = "RxSwift-tvOS";
};
C81B3A061BC1C28400EF5A9F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = C81B39F11BC1C28400EF5A9F /* Rx.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = C8F0C0021BBBFB8B001B112F;
remoteInfo = "RxSwift-watchOS";
};
C81B3A081BC1C28400EF5A9F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = C81B39F11BC1C28400EF5A9F /* Rx.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = C809396D1B8A71760088E94D;
remoteInfo = "RxCocoa-iOS";
};
C81B3A0A1BC1C28400EF5A9F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = C81B39F11BC1C28400EF5A9F /* Rx.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = C80939E71B8A71840088E94D;
remoteInfo = "RxCocoa-OSX";
};
C81B3A0C1BC1C28400EF5A9F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = C81B39F11BC1C28400EF5A9F /* Rx.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = D2138C751BB9BE9800339B5C;
remoteInfo = "RxCocoa-tvOS";
};
C81B3A0E1BC1C28400EF5A9F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = C81B39F11BC1C28400EF5A9F /* Rx.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = C8F0C04B1BBBFBB9001B112F;
remoteInfo = "RxCocoa-watchOS";
};
C81B3A101BC1C28400EF5A9F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = C81B39F11BC1C28400EF5A9F /* Rx.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = C8093BC71B8A71F00088E94D;
remoteInfo = "RxBlocking-iOS";
};
C81B3A121BC1C28400EF5A9F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = C81B39F11BC1C28400EF5A9F /* Rx.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = C8093C451B8A71FC0088E94D;
remoteInfo = "RxBlocking-OSX";
};
C81B3A141BC1C28400EF5A9F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = C81B39F11BC1C28400EF5A9F /* Rx.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = D2EBEB811BB9B99D003A27DC;
remoteInfo = "RxBlocking-tvOS";
};
C81B3A161BC1C28400EF5A9F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = C81B39F11BC1C28400EF5A9F /* Rx.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = C8F0C0581BBBFBCE001B112F;
remoteInfo = "RxBlocking-watchOS";
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
C8297E621B6CF905000589EA /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
@ -343,6 +428,7 @@
07E300061B14995F00F00100 /* TableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewController.swift; sourceTree = "<group>"; };
07E300081B149A2A00F00100 /* User.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = "<group>"; };
07E3C2321B03605B0010338D /* Dependencies.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Dependencies.swift; path = Examples/Dependencies.swift; sourceTree = "<group>"; };
C81B39F11BC1C28400EF5A9F /* Rx.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Rx.xcodeproj; path = ../Rx.xcodeproj; sourceTree = "<group>"; };
C8297E691B6CF905000589EA /* RxExample-iOS-no-module.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "RxExample-iOS-no-module.app"; sourceTree = BUILT_PRODUCTS_DIR; };
C83366DD1AD0293800C668A7 /* RxExample-iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "RxExample-iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
C833670F1AD029AE00C668A7 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = "<group>"; };
@ -547,7 +633,6 @@
C8A468EB1B8A8BC900BF917B /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
C8A468ED1B8A8BCC00BF917B /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; };
C8A468EF1B8A8BD000BF917B /* RxBlocking.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RxBlocking.framework; sourceTree = BUILT_PRODUCTS_DIR; };
C8A57F731B40AF7C00D5570A /* Random.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Random.xcdatamodel; sourceTree = "<group>"; };
C8A7501E1B94E77C00D8D046 /* RxDataSourceStarterKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxDataSourceStarterKit.swift; sourceTree = "<group>"; };
C8AF26F11B49ABD300131C03 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
C8C46DA31B47F7110020D71E /* CollectionViewImageCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionViewImageCell.swift; sourceTree = "<group>"; };
@ -655,9 +740,29 @@
path = TableView;
sourceTree = "<group>";
};
C81B39F21BC1C28400EF5A9F /* Products */ = {
isa = PBXGroup;
children = (
C81B3A011BC1C28400EF5A9F /* RxSwift.framework */,
C81B3A031BC1C28400EF5A9F /* RxSwift.framework */,
C81B3A051BC1C28400EF5A9F /* RxSwift.framework */,
C81B3A071BC1C28400EF5A9F /* RxSwift.framework */,
C81B3A091BC1C28400EF5A9F /* RxCocoa.framework */,
C81B3A0B1BC1C28400EF5A9F /* RxCocoa.framework */,
C81B3A0D1BC1C28400EF5A9F /* RxCocoa.framework */,
C81B3A0F1BC1C28400EF5A9F /* RxCocoa.framework */,
C81B3A111BC1C28400EF5A9F /* RxBlocking.framework */,
C81B3A131BC1C28400EF5A9F /* RxBlocking.framework */,
C81B3A151BC1C28400EF5A9F /* RxBlocking.framework */,
C81B3A171BC1C28400EF5A9F /* RxBlocking.framework */,
);
name = Products;
sourceTree = "<group>";
};
C83366D41AD0293800C668A7 = {
isa = PBXGroup;
children = (
C81B39F11BC1C28400EF5A9F /* Rx.xcodeproj */,
C8A468EF1B8A8BD000BF917B /* RxBlocking.framework */,
C8A468ED1B8A8BCC00BF917B /* RxCocoa.framework */,
C8A468EB1B8A8BC900BF917B /* RxSwift.framework */,
@ -1075,8 +1180,7 @@
07E300051B14994500F00100 /* 05 TableView */,
07A5C3D91B70B6B8001EFE5C /* 06 Calculator */,
C859B9A21B45C5D900D012D7 /* 07 PartialUpdates */,
C8A57F711B40AF4E00D5570A /* 08 CoreData */,
EC91FB931BBA12E800973245 /* 09 AutoLoading */,
EC91FB931BBA12E800973245 /* 08 AutoLoading */,
);
path = Examples;
sourceTree = "<group>";
@ -1162,15 +1266,6 @@
path = DataSources;
sourceTree = "<group>";
};
C8A57F711B40AF4E00D5570A /* 08 CoreData */ = {
isa = PBXGroup;
children = (
C8A57F721B40AF7C00D5570A /* Random.xcdatamodeld */,
);
name = "08 CoreData";
path = CoreData;
sourceTree = "<group>";
};
C8DF92C71B0B2F84009BCF9A /* iOS */ = {
isa = PBXGroup;
children = (
@ -1200,12 +1295,12 @@
path = Introduction;
sourceTree = "<group>";
};
EC91FB931BBA12E800973245 /* 09 AutoLoading */ = {
EC91FB931BBA12E800973245 /* 08 AutoLoading */ = {
isa = PBXGroup;
children = (
EC91FB941BBA144400973245 /* GitHubSearchRepositoriesViewController.swift */,
);
name = "09 AutoLoading";
name = "08 AutoLoading";
path = AutoLoading;
sourceTree = "<group>";
};
@ -1273,7 +1368,7 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0700;
LastUpgradeCheck = 0640;
LastUpgradeCheck = 0710;
ORGANIZATIONNAME = "Krunoslav Zaher";
TargetAttributes = {
C83366DC1AD0293800C668A7 = {
@ -1292,6 +1387,12 @@
mainGroup = C83366D41AD0293800C668A7;
productRefGroup = C83366DE1AD0293800C668A7 /* Products */;
projectDirPath = "";
projectReferences = (
{
ProductGroup = C81B39F21BC1C28400EF5A9F /* Products */;
ProjectRef = C81B39F11BC1C28400EF5A9F /* Rx.xcodeproj */;
},
);
projectRoot = "";
targets = (
C83366DC1AD0293800C668A7 /* RxExample-iOS */,
@ -1301,6 +1402,93 @@
};
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
C81B3A011BC1C28400EF5A9F /* RxSwift.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = RxSwift.framework;
remoteRef = C81B3A001BC1C28400EF5A9F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
C81B3A031BC1C28400EF5A9F /* RxSwift.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = RxSwift.framework;
remoteRef = C81B3A021BC1C28400EF5A9F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
C81B3A051BC1C28400EF5A9F /* RxSwift.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = RxSwift.framework;
remoteRef = C81B3A041BC1C28400EF5A9F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
C81B3A071BC1C28400EF5A9F /* RxSwift.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = RxSwift.framework;
remoteRef = C81B3A061BC1C28400EF5A9F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
C81B3A091BC1C28400EF5A9F /* RxCocoa.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = RxCocoa.framework;
remoteRef = C81B3A081BC1C28400EF5A9F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
C81B3A0B1BC1C28400EF5A9F /* RxCocoa.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = RxCocoa.framework;
remoteRef = C81B3A0A1BC1C28400EF5A9F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
C81B3A0D1BC1C28400EF5A9F /* RxCocoa.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = RxCocoa.framework;
remoteRef = C81B3A0C1BC1C28400EF5A9F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
C81B3A0F1BC1C28400EF5A9F /* RxCocoa.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = RxCocoa.framework;
remoteRef = C81B3A0E1BC1C28400EF5A9F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
C81B3A111BC1C28400EF5A9F /* RxBlocking.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = RxBlocking.framework;
remoteRef = C81B3A101BC1C28400EF5A9F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
C81B3A131BC1C28400EF5A9F /* RxBlocking.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = RxBlocking.framework;
remoteRef = C81B3A121BC1C28400EF5A9F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
C81B3A151BC1C28400EF5A9F /* RxBlocking.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = RxBlocking.framework;
remoteRef = C81B3A141BC1C28400EF5A9F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
C81B3A171BC1C28400EF5A9F /* RxBlocking.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = RxBlocking.framework;
remoteRef = C81B3A161BC1C28400EF5A9F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
C8297E5C1B6CF905000589EA /* Resources */ = {
isa = PBXResourcesBuildPhase;
@ -1489,7 +1677,6 @@
C864099C1BA5909000D3C4E8 /* DisposeBase.swift in Sources */,
C8297E4A1B6CF905000589EA /* GitHubSignupViewController.swift in Sources */,
C86409F51BA5909000D3C4E8 /* SchedulerType.swift in Sources */,
C8297E4B1B6CF905000589EA /* Random.xcdatamodeld in Sources */,
C86409B81BA5909000D3C4E8 /* DelaySubscription.swift in Sources */,
C84B3A641BA4345A001B7D88 /* UITextView+Rx.swift in Sources */,
C86409AF1BA5909000D3C4E8 /* Catch.swift in Sources */,
@ -1591,7 +1778,6 @@
C88C78951B3F20DB0061C5AB /* Differentiator.swift in Sources */,
C8C46DAA1B47F7110020D71E /* WikipediaSearchCell.swift in Sources */,
C890A6581AEBD26B00AFF7E6 /* GitHubSignupViewController.swift in Sources */,
C8A57F741B40AF7C00D5570A /* Random.xcdatamodeld in Sources */,
075F13101B4E9D5A000D7861 /* APIWrappersViewController.swift in Sources */,
C83367311AD029AE00C668A7 /* Wireframe.swift in Sources */,
07E300071B14995F00F00100 /* TableViewController.swift in Sources */,
@ -1637,6 +1823,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = "-objc_loadall";
OTHER_SWIFT_FLAGS = "$(inherited) -D RX_NO_MODULE";
PRODUCT_BUNDLE_IDENTIFIER = "Krunoslav-Zaher.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "RxExample-iOS-no-module";
SDKROOT = iphoneos;
SWIFT_OBJC_BRIDGING_HEADER = ../RxCocoa/RxCocoa.h;
@ -1651,6 +1838,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = "-objc_loadall";
OTHER_SWIFT_FLAGS = "$(inherited) -D RX_NO_MODULE";
PRODUCT_BUNDLE_IDENTIFIER = "Krunoslav-Zaher.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "RxExample-iOS-no-module";
SDKROOT = iphoneos;
SWIFT_OBJC_BRIDGING_HEADER = ../RxCocoa/RxCocoa.h;
@ -1665,6 +1853,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = "-objc_loadall";
OTHER_SWIFT_FLAGS = "$(inherited) -D RX_NO_MODULE";
PRODUCT_BUNDLE_IDENTIFIER = "Krunoslav-Zaher.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "RxExample-iOS-no-module";
SDKROOT = iphoneos;
SWIFT_OBJC_BRIDGING_HEADER = ../RxCocoa/RxCocoa.h;
@ -1693,6 +1882,7 @@
COPY_PHASE_STRIP = NO;
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
@ -1767,6 +1957,7 @@
IPHONEOS_DEPLOYMENT_TARGET = 8.1;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = "-objc_loadall";
PRODUCT_BUNDLE_IDENTIFIER = "Krunoslav-Zaher.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "RxExample-iOS";
SDKROOT = iphoneos;
};
@ -1779,6 +1970,7 @@
IPHONEOS_DEPLOYMENT_TARGET = 8.1;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = "-objc_loadall";
PRODUCT_BUNDLE_IDENTIFIER = "Krunoslav-Zaher.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "RxExample-iOS";
SDKROOT = iphoneos;
};
@ -1792,6 +1984,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks @executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.10;
OTHER_LDFLAGS = "-objc_loadall";
PRODUCT_BUNDLE_IDENTIFIER = "Krunoslav-Zaher.$(PRODUCT_NAME:rfc1034identifier)";
SDKROOT = macosx;
};
name = Debug;
@ -1804,6 +1997,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks @executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.10;
OTHER_LDFLAGS = "-objc_loadall";
PRODUCT_BUNDLE_IDENTIFIER = "Krunoslav-Zaher.$(PRODUCT_NAME:rfc1034identifier)";
SDKROOT = macosx;
};
name = Release;
@ -1857,6 +2051,7 @@
IPHONEOS_DEPLOYMENT_TARGET = 8.1;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = "-objc_loadall";
PRODUCT_BUNDLE_IDENTIFIER = "Krunoslav-Zaher.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "RxExample-iOS";
SDKROOT = iphoneos;
};
@ -1870,6 +2065,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks @executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.10;
OTHER_LDFLAGS = "-objc_loadall";
PRODUCT_BUNDLE_IDENTIFIER = "Krunoslav-Zaher.$(PRODUCT_NAME:rfc1034identifier)";
SDKROOT = macosx;
};
name = "Release-Tests";
@ -1918,19 +2114,6 @@
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCVersionGroup section */
C8A57F721B40AF7C00D5570A /* Random.xcdatamodeld */ = {
isa = XCVersionGroup;
children = (
C8A57F731B40AF7C00D5570A /* Random.xcdatamodel */,
);
currentVersion = C8A57F731B40AF7C00D5570A /* Random.xcdatamodel */;
path = Random.xcdatamodeld;
sourceTree = "<group>";
versionGroupType = wrapper.xcdatamodel;
};
/* End XCVersionGroup section */
};
rootObject = C83366D51AD0293800C668A7 /* Project object */;
}

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0700"
LastUpgradeVersion = "0710"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0700"
LastUpgradeVersion = "0710"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0700"
LastUpgradeVersion = "0710"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

View File

@ -35,7 +35,6 @@ extension String {
}
}
func showAlert(message: String) {
#if os(iOS)
UIAlertView(title: "RxExample", message: message, delegate: nil, cancelButtonTitle: "OK").show()

View File

@ -194,11 +194,9 @@ class APIWrappersViewController: ViewController {
// MARK: CLLocationManager
if #available(iOS 8.0, *) {
manager.requestWhenInUseAuthorization()
} else {
// Fallback on earlier versions
}
#if !RX_NO_MODULE
manager.requestWhenInUseAuthorization()
#endif
manager.rx_didUpdateLocations
.subscribeNext { [weak self] x in
@ -206,7 +204,7 @@ class APIWrappersViewController: ViewController {
}
.addDisposableTo(disposeBag)
manager.rx_didFailWithError
_ = manager.rx_didFailWithError
.subscribeNext { [weak self] x in
self?.debug("rx_didFailWithError \(x)")
}

View File

@ -158,7 +158,7 @@ class GitHubSearchRepositoriesAPI {
private static func parseRepositories(json: [String: AnyObject]) throws -> [Repository] {
guard let items = json["items"] as? [[String: AnyObject]] else {
throw exampleError("Can't find results")
throw exampleError("Can't find items")
}
return try items.map { item in
guard let name = item["name"] as? String,
@ -191,6 +191,7 @@ class GitHubSearchRepositoriesViewController: ViewController, UITableViewDelegat
let $: Dependencies = Dependencies.sharedDependencies
let tableView = self.tableView
let searchBar = self.searchBar
let allRepositories = repositories
.map { repositories in
@ -205,14 +206,15 @@ class GitHubSearchRepositoriesViewController: ViewController, UITableViewDelegat
}
dataSource.titleForHeaderInSection = { [unowned dataSource] sectionIndex in
return dataSource.sectionAtIndex(sectionIndex).model
let section = dataSource.sectionAtIndex(sectionIndex)
return section.items.count > 0 ? "Repositories (\(section.items.count))" : "No repositories found"
}
// reactive data source
allRepositories
.bindTo(tableView.rx_itemsWithDataSource(dataSource))
.addDisposableTo(disposeBag)
let loadNextPageTrigger = tableView.rx_contentOffset
.flatMap { offset in
GitHubSearchRepositoriesViewController.isNearTheBottomEdge(offset, tableView)
@ -223,11 +225,14 @@ class GitHubSearchRepositoriesViewController: ViewController, UITableViewDelegat
searchBar.rx_text
.throttle(0.3, $.mainScheduler)
.distinctUntilChanged()
.filter { $0 != "" }
.map { query in
GitHubSearchRepositoriesAPI.sharedAPI.search(query, loadNextPageTrigger: loadNextPageTrigger)
.retry(3)
.catchErrorJustReturn(.Repositories([]))
.map { query -> Observable<SearchRepositoryResponse> in
if query.isEmpty {
return just(.Repositories([]))
} else {
return GitHubSearchRepositoriesAPI.sharedAPI.search(query, loadNextPageTrigger: loadNextPageTrigger)
.retry(3)
.catchErrorJustReturn(.Repositories([]))
}
}
.switchLatest()
.subscribeNext { [unowned self] result in
@ -240,28 +245,24 @@ class GitHubSearchRepositoriesViewController: ViewController, UITableViewDelegat
}
}
.addDisposableTo(disposeBag)
// dismiss keyboard on scroll
tableView.rx_contentOffset
.subscribe { _ in
if searchBar.isFirstResponder() {
_ = searchBar.resignFirstResponder()
}
}
.addDisposableTo(disposeBag)
// so normal delegate customization can also be used
tableView.rx_setDelegate(self)
.addDisposableTo(disposeBag)
}
override func setEditing(editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
tableView.editing = editing
}
// MARK: Table view delegate
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let title = dataSource.sectionAtIndex(section)
let label = UILabel(frame: CGRect.zero)
label.text = " \(title)"
label.textColor = UIColor.whiteColor()
label.backgroundColor = UIColor.darkGrayColor()
label.alpha = 0.9
return label
}
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 40
return 30
}
}

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<model userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="7701" systemVersion="14D136" minimumToolsVersion="Xcode 4.3" macOSVersion="Automatic" iOSVersion="Automatic">
<entity name="Random" syncable="YES">
<attribute name="section" optional="YES" attributeType="String" syncable="YES"/>
<attribute name="value" optional="YES" attributeType="Integer 32" defaultValueString="0" syncable="YES"/>
</entity>
<elements>
<element name="Random" positionX="-54" positionY="-9" width="128" height="75"/>
</elements>
</model>

View File

@ -25,11 +25,9 @@ class Dependencies {
let operationQueue = NSOperationQueue()
operationQueue.maxConcurrentOperationCount = 2
if #available(iOS 8.0, *) {
operationQueue.qualityOfService = NSQualityOfService.UserInitiated
} else {
// Fallback on earlier versions
}
#if !RX_NO_MODULE
operationQueue.qualityOfService = NSQualityOfService.UserInitiated
#endif
backgroundWorkScheduler = OperationQueueScheduler(operationQueue: operationQueue)
mainScheduler = MainScheduler.sharedInstance

View File

@ -22,8 +22,6 @@ class TableViewController: ViewController, UITableViewDelegate {
let users = Variable([User]())
let favoriteUsers = Variable([User]())
var allSections: [SectionModel<String, User>] = []
let dataSource = RxTableViewSectionedReloadDataSource<SectionModel<String, User>>()
typealias Section = SectionModel<String, User>
@ -40,14 +38,6 @@ class TableViewController: ViewController, UITableViewDelegate {
]
}
// This is for demonstration purposes of UITableViewDelegate/DataSource
// only, try to not do something like this in your app
allUsers
.subscribeNext { [unowned self] n in
self.allSections = n
}
.addDisposableTo(disposeBag)
dataSource.cellFactory = { (tv, ip, user: User) in
let cell = tv.dequeueReusableCellWithIdentifier("Cell")!
cell.textLabel?.text = user.firstName + " " + user.lastName
@ -87,7 +77,7 @@ class TableViewController: ViewController, UITableViewDelegate {
.addDisposableTo(disposeBag)
// Rx content offset
tableView.rx_contentOffset
_ = tableView.rx_contentOffset
.subscribeNext { co in
print("Content offset from Rx observer \(co)")
}

View File

@ -105,11 +105,6 @@
"filename" : "Icon-76@2x.png",
"scale" : "2x"
},
{
"idiom" : "car",
"size" : "120x120",
"scale" : "1x"
},
{
"size" : "24x24",
"idiom" : "watch",

View File

@ -7,7 +7,7 @@
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>Krunoslav-Zaher.$(PRODUCT_NAME:rfc1034identifier)</string>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
@ -20,9 +20,9 @@
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>NSMainStoryboardFile</key>
<string>Main</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>

View File

@ -7,7 +7,7 @@
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>Krunoslav-Zaher.$(PRODUCT_NAME:rfc1034identifier)</string>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
@ -22,6 +22,11 @@
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>NSLocationAlwaysUsageDescription</key>
<string>We need location</string>
<key>UILaunchStoryboardName</key>
@ -38,11 +43,6 @@
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="7706" systemVersion="14D136" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" initialViewController="B8D-0N-5wS">
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="9046" systemVersion="15A284" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" initialViewController="B8D-0N-5wS">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="7706"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9046"/>
</dependencies>
<scenes>
<!--Application-->
@ -52,6 +52,7 @@
<constraint firstAttribute="height" constant="22" id="HFj-1Z-bR9"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="96" id="scr-4K-4db"/>
</constraints>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" title="1" drawsBackground="YES" id="z2u-0q-QId">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
@ -66,6 +67,7 @@
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="22" id="UfF-4i-Nhp"/>
<constraint firstAttribute="height" constant="22" id="zCg-TT-kMP"/>
</constraints>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" title="2" drawsBackground="YES" id="1Ip-nW-mf1">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
@ -74,6 +76,7 @@
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zEm-ia-8D5">
<rect key="frame" x="194" y="320" width="13" height="17"/>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="+" id="67K-Sn-nua">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@ -82,25 +85,28 @@
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Thn-ge-MNK">
<rect key="frame" x="387" y="320" width="13" height="17"/>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="=" id="Ms6-O6-Cle">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OPN-Cj-AXY">
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="OPN-Cj-AXY">
<rect key="frame" x="440" y="320" width="43" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="ep0-fb-x50"/>
</constraints>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Result" id="QmF-1C-UxZ">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GIP-PK-nj4">
<button verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="GIP-PK-nj4">
<rect key="frame" x="221" y="252" width="153" height="32"/>
<animations/>
<buttonCell key="cell" type="push" title="Unbind everything" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="OfL-Xk-Jww">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
@ -112,6 +118,7 @@
<constraint firstAttribute="height" constant="34" id="OBy-a6-uQN"/>
<constraint firstAttribute="width" constant="462" id="WmX-9v-Ofs"/>
</constraints>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" id="J8l-kR-821">
<font key="font" metaFont="system"/>
<string key="title">Change values and see what happens.
@ -122,30 +129,34 @@
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uvp-P6-I33">
<rect key="frame" x="94" y="228" width="407" height="17"/>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Everything is unbound when `Unbind everything` button is clicked" id="oNm-CU-Uq7">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<slider verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Wbs-Vv-RvG">
<rect key="frame" x="54" y="156" width="502" height="21"/>
<slider verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Wbs-Vv-RvG">
<rect key="frame" x="54" y="156" width="502" height="20"/>
<animations/>
<sliderCell key="cell" continuous="YES" state="on" alignment="left" maxValue="100" doubleValue="50" tickMarkPosition="above" sliderType="linear" id="0FL-dG-a0V"/>
</slider>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="35N-M1-mEj">
<textField verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="35N-M1-mEj">
<rect key="frame" x="208" y="122" width="96" height="22"/>
<constraints>
<constraint firstAttribute="width" constant="96" id="UjJ-QN-7sX"/>
<constraint firstAttribute="height" constant="22" id="p0d-PC-IYH"/>
</constraints>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" title="1" drawsBackground="YES" id="Gej-gH-W9B">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uJU-xc-Cnn">
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="uJU-xc-Cnn">
<rect key="frame" x="56" y="125" width="136" height="17"/>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Slider Value (0 - 100):" id="Pbz-ZR-CzF">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@ -178,6 +189,7 @@
<constraint firstItem="uvp-P6-I33" firstAttribute="centerX" secondItem="GIP-PK-nj4" secondAttribute="centerX" id="y3H-7u-VYu"/>
<constraint firstItem="zhP-9C-de5" firstAttribute="leading" secondItem="zEm-ia-8D5" secondAttribute="trailing" constant="44" id="zH7-w8-JmD"/>
</constraints>
<animations/>
</view>
<connections>
<outlet property="a" destination="6lb-zc-c5S" id="I6G-my-Rr2"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="8191" systemVersion="14F27" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="E5v-jn-n2n">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9046" systemVersion="15A284" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="E5v-jn-n2n">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8154"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9035"/>
<capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
@ -14,6 +14,7 @@
<navigationBar key="navigationBar" contentMode="scaleToFill" id="q9W-TG-AP1">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<animations/>
</navigationBar>
<connections>
<segue destination="t5K-0k-3cp" kind="relationship" relationship="rootViewController" id="RGv-9S-meA"/>
@ -30,10 +31,12 @@
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="nwe-iR-nbz">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<searchBar key="tableHeaderView" contentMode="redraw" placeholder="Search Repository" id="zFx-qa-Lve">
<rect key="frame" x="0.0" y="64" width="320" height="44"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<animations/>
<textInputTraits key="textInputTraits"/>
</searchBar>
<prototypes>
@ -47,6 +50,7 @@
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="fND-de-kcO">
<rect key="frame" x="15" y="6" width="31.5" height="19.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
@ -54,12 +58,15 @@
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Subtitle" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="QDp-55-cWc">
<rect key="frame" x="15" y="25.5" width="40.5" height="13.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="11"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<animations/>
</tableViewCellContentView>
<animations/>
</tableViewCell>
</prototypes>
</tableView>
@ -87,6 +94,7 @@
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="Ykd-ED-72a">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<prototypes>
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="Cell" id="Pbx-dk-7Jc">
@ -95,7 +103,9 @@
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Pbx-dk-7Jc" id="gCd-uh-Y2z">
<rect key="frame" x="0.0" y="0.0" width="320" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<animations/>
</tableViewCellContentView>
<animations/>
<accessibility key="accessibilityConfiguration">
<bool key="isElement" value="YES"/>
</accessibility>
@ -103,6 +113,7 @@
</prototypes>
</tableView>
</subviews>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="Ykd-ED-72a" firstAttribute="bottom" secondItem="LL7-L6-PAN" secondAttribute="top" id="1l8-Du-X1S"/>
@ -134,6 +145,7 @@
<subviews>
<navigationBar contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Y1h-fB-zRW">
<rect key="frame" x="0.0" y="20" width="320" height="44"/>
<animations/>
<items>
<navigationItem title="Title" id="faL-EG-6Yt">
<barButtonItem key="leftBarButtonItem" title="Item" id="fH7-2j-F6O"/>
@ -143,6 +155,7 @@
</navigationBar>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Uc7-n1-BEP">
<rect key="frame" x="85" y="83" width="150" height="150"/>
<animations/>
<constraints>
<constraint firstAttribute="width" constant="150" id="LNi-WE-BS9"/>
<constraint firstAttribute="height" constant="150" id="yXC-P2-i78"/>
@ -150,6 +163,7 @@
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2uf-pc-92N">
<rect key="frame" x="16" y="241" width="288" height="30"/>
<animations/>
<constraints>
<constraint firstAttribute="height" constant="30" id="WnY-ib-sQj"/>
</constraints>
@ -158,6 +172,7 @@
<nil key="highlightedColor"/>
</label>
</subviews>
<animations/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="2uf-pc-92N" firstAttribute="top" secondItem="Uc7-n1-BEP" secondAttribute="bottom" constant="8" id="YNw-Lv-1CV"/>
@ -191,33 +206,39 @@
<subviews>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Username" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="5st-ss-RHs">
<rect key="frame" x="24" y="90" width="272" height="30"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
</textField>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Password" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="kSi-Uf-OwR">
<rect key="frame" x="24" y="150" width="272" height="30"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" secureTextEntry="YES"/>
</textField>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="username validation" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Dba-AF-T8S">
<rect key="frame" x="24" y="125" width="272" height="17"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="1" green="0.0" blue="0.090283701899999999" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Password Repeat" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="C3W-qo-PSG">
<rect key="frame" x="24" y="210" width="272" height="30"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" secureTextEntry="YES"/>
</textField>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="repeated password validation" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HDF-SC-Wnw">
<rect key="frame" x="24" y="245" width="272" height="17"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="1" green="0.0" blue="0.090283701899999999" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kN3-eg-qK4">
<rect key="frame" x="24" y="296" width="272" height="44"/>
<animations/>
<color key="backgroundColor" red="0.54117647058823526" green="0.8666666666666667" blue="0.42745098039215684" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="44" id="cOT-Hh-KzW"/>
@ -229,14 +250,17 @@
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="password validation" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="w7z-xW-FLz">
<rect key="frame" x="24" y="185" width="272" height="17"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="1" green="0.0" blue="0.090283701899999999" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<activityIndicatorView hidden="YES" opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" animating="YES" style="gray" translatesAutoresizingMaskIntoConstraints="NO" id="Jyp-VX-hwt">
<rect key="frame" x="36" y="308" width="20" height="20"/>
<animations/>
</activityIndicatorView>
</subviews>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="Dba-AF-T8S" firstAttribute="leading" secondItem="LK1-fd-xyr" secondAttribute="leadingMargin" priority="799" constant="8" id="4fX-Wf-pj1"/>
@ -294,14 +318,17 @@
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="hUq-CB-rKx" userLabel="partial">
<rect key="frame" x="0.0" y="0.0" width="107" height="568"/>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</tableView>
<tableView clipsSubviews="YES" contentMode="scaleToFill" misplaced="YES" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="6z9-hh-u3N" userLabel="fullreload">
<rect key="frame" x="106" y="64" width="107" height="504"/>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="6z9-hh-u3N" userLabel="fullreload">
<rect key="frame" x="107" y="64" width="106.5" height="504"/>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</tableView>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" misplaced="YES" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="hob-nw-Jrs">
<rect key="frame" x="213" y="64" width="108" height="504"/>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="hob-nw-Jrs">
<rect key="frame" x="213.5" y="64" width="106.5" height="504"/>
<animations/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="m51-be-PcL">
<size key="itemSize" width="55" height="35"/>
@ -311,21 +338,24 @@
</collectionViewFlowLayout>
<cells>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="Cell" id="aNq-h7-r3z" customClass="NumberCell" customModule="RxExample_iOS" customModuleProvider="target">
<rect key="frame" x="26.5" y="25" width="55" height="35"/>
<rect key="frame" x="26" y="25" width="55" height="35"/>
<autoresizingMask key="autoresizingMask"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="55" height="35"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vIm-V4-xJI">
<rect key="frame" x="7" y="8" width="42" height="21"/>
<rect key="frame" x="7" y="7" width="42" height="20.5"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<animations/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
<animations/>
<constraints>
<constraint firstAttribute="centerY" secondItem="vIm-V4-xJI" secondAttribute="centerY" id="YGd-7r-pFG"/>
<constraint firstAttribute="centerX" secondItem="vIm-V4-xJI" secondAttribute="centerX" id="xYP-q1-t0x"/>
@ -336,16 +366,18 @@
</collectionViewCell>
</cells>
<collectionReusableView key="sectionHeaderView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="Section" id="myv-cg-TS9" customClass="NumberSectionView" customModule="RxExample_iOS" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="108" height="25"/>
<rect key="frame" x="0.0" y="0.0" width="106.5" height="25"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Dob-Ct-qBk">
<rect key="frame" x="33" y="3" width="42" height="21"/>
<rect key="frame" x="33" y="2" width="42" height="20.5"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.98431372549999996" green="0.98431372549999996" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<animations/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<color key="tintColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
@ -358,6 +390,7 @@
</collectionReusableView>
</collectionView>
</subviews>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="t4S-nP-d6Z" firstAttribute="top" secondItem="6z9-hh-u3N" secondAttribute="bottom" id="1ND-bT-lhz"/>
@ -398,6 +431,7 @@
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="UYP-Va-Aja">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<animations/>
<color key="backgroundColor" red="0.93725490196078431" green="0.93725490196078431" blue="0.95686274509803926" alpha="1" colorSpace="calibratedRGB"/>
<sections>
<tableViewSection headerTitle="iPhone Examples" footerTitle="Showcase examples for Rx. You can easily test for proper resource cleanup during popping of the navigation stack" id="QC3-bK-dI7">
@ -412,6 +446,7 @@
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="GitHub Signup" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="LN4-l3-ara">
<rect key="frame" x="15" y="6" width="106" height="19.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
@ -419,12 +454,15 @@
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="View Controller Example" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="BaB-5r-hmY">
<rect key="frame" x="15" y="25.5" width="128" height="13.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="11"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<animations/>
</tableViewCellContentView>
<animations/>
<connections>
<segue destination="dHR-mS-HCG" kind="push" id="rAe-JJ-Q7U"/>
</connections>
@ -439,6 +477,7 @@
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Master Detail &amp; reactive DataSource" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="x4u-zK-muO">
<rect key="frame" x="15" y="6" width="262.5" height="19.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
@ -446,12 +485,15 @@
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Table View Master Detail Example" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="nuf-1K-ITV">
<rect key="frame" x="15" y="25.5" width="177" height="13.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="11"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<animations/>
</tableViewCellContentView>
<animations/>
<connections>
<segue destination="bZo-ey-Nha" kind="push" id="S82-xv-fWe"/>
</connections>
@ -466,6 +508,7 @@
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Calculator" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ufL-YX-dKF">
<rect key="frame" x="15" y="6" width="74" height="19.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
@ -473,12 +516,15 @@
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Stateless calculator example" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="efq-eT-ETM">
<rect key="frame" x="15" y="25.5" width="150.5" height="13.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="11"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<animations/>
</tableViewCellContentView>
<animations/>
<connections>
<segue destination="ErT-E8-uY3" kind="push" id="3is-Gn-lDH"/>
</connections>
@ -493,6 +539,7 @@
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Search Wikipedia" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="pxT-4B-gDc">
<rect key="frame" x="15" y="6" width="126" height="19.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
@ -500,12 +547,15 @@
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="MVVM Example" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="xZJ-Xt-MqD">
<rect key="frame" x="15" y="25.5" width="82" height="13.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="11"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<animations/>
</tableViewCellContentView>
<animations/>
<connections>
<segue destination="Iwo-im-m6d" kind="push" identifier="ShowWikipediaSearch" id="Gfh-zm-u0w"/>
</connections>
@ -520,6 +570,7 @@
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="API wrappers" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="siT-mr-b8A">
<rect key="frame" x="15" y="6" width="96.5" height="19.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
@ -527,12 +578,15 @@
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="API wrappers Example" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="BSH-sG-bpY">
<rect key="frame" x="15" y="25.5" width="117" height="13.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="11"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<animations/>
</tableViewCellContentView>
<animations/>
<connections>
<segue destination="J6V-0T-aRq" kind="push" id="jyD-mL-MWs"/>
</connections>
@ -547,6 +601,7 @@
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="GitHub Search Repositories" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="8FC-s3-ejV">
<rect key="frame" x="15" y="6" width="200" height="19.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
@ -554,12 +609,15 @@
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Auto Loading Example" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ECT-7x-66c">
<rect key="frame" x="15" y="25.5" width="116.5" height="13.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="11"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<animations/>
</tableViewCellContentView>
<animations/>
<connections>
<segue destination="cUc-Zm-HOf" kind="push" id="ADd-I9-9RO"/>
</connections>
@ -578,6 +636,7 @@
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Reactive partial updates" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="vX5-dK-JyH">
<rect key="frame" x="15" y="6" width="175" height="19.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
@ -585,12 +644,15 @@
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Table and Collection view with partial updates" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Ilb-8Z-x8X">
<rect key="frame" x="15" y="25.5" width="241" height="13.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="11"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<animations/>
</tableViewCellContentView>
<animations/>
<connections>
<segue destination="HRf-Xk-9iT" kind="push" id="p9g-fe-b3Y"/>
</connections>
@ -623,6 +685,7 @@
<subviews>
<searchBar contentMode="redraw" placeholder="Pizza" translatesAutoresizingMaskIntoConstraints="NO" id="q4t-TG-WEX">
<rect key="frame" x="0.0" y="64" width="320" height="44"/>
<animations/>
<constraints>
<constraint firstAttribute="height" constant="44" id="sty-bZ-zjF"/>
</constraints>
@ -630,6 +693,7 @@
</searchBar>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="8" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FeZ-zt-ZeK">
<rect key="frame" x="29" y="174" width="263" height="126"/>
<animations/>
<string key="text">This app transforms Wikipedia into image search engine.It uses Wikipedia search API to find content and scrapes the HTML of those pages for image URLs.
This is only showcase app, not intended for production purposes.</string>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
@ -637,6 +701,7 @@ This is only showcase app, not intended for production purposes.</string>
<nil key="highlightedColor"/>
</label>
</subviews>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="trailingMargin" secondItem="q4t-TG-WEX" secondAttribute="trailing" constant="-16" id="9Bk-YV-Ndt"/>
@ -678,6 +743,7 @@ This is only showcase app, not intended for production purposes.</string>
<subviews>
<segmentedControl opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="UpX-Bf-ZT6">
<rect key="frame" x="16" y="110" width="123" height="29"/>
<animations/>
<segments>
<segment title="First"/>
<segment title="Second"/>
@ -685,24 +751,29 @@ This is only showcase app, not intended for production purposes.</string>
</segmentedControl>
<slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.5" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="WB2-p2-bYm">
<rect key="frame" x="14" y="149" width="292" height="31"/>
<animations/>
</slider>
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="QsG-uN-yAh">
<rect key="frame" x="147" y="110" width="51" height="31"/>
<animations/>
</switch>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0br-EX-AUP">
<rect key="frame" x="204" y="110" width="46" height="30"/>
<animations/>
<state key="normal" title="TapMe">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
</button>
<datePicker contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" datePickerMode="dateAndTime" minuteInterval="1" translatesAutoresizingMaskIntoConstraints="NO" id="JEV-nj-tQA">
<rect key="frame" x="16" y="187" width="288" height="162"/>
<animations/>
<date key="date" timeIntervalSinceReferenceDate="458137679.98291397">
<!--2015-07-09 12:27:59 +0000-->
</date>
</datePicker>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Eas-vY-Wds">
<rect key="frame" x="258" y="111" width="46" height="30"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
</textField>
@ -711,11 +782,13 @@ This is only showcase app, not intended for production purposes.</string>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Test Pan gesture in this view" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fQw-v9-hRf">
<rect key="frame" x="35" y="47" width="218" height="21"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<animations/>
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<gestureRecognizers/>
<connections>
@ -724,6 +797,7 @@ This is only showcase app, not intended for production purposes.</string>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FAz-sk-QmU">
<rect key="frame" x="16" y="481" width="288" height="21"/>
<animations/>
<accessibility key="accessibilityConfiguration" label="debugLabel"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
@ -731,17 +805,20 @@ This is only showcase app, not intended for production purposes.</string>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="VeZ-e0-mdh">
<rect key="frame" x="16" y="72" width="125" height="30"/>
<animations/>
<state key="normal" title="Open ActionSheet">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gVF-My-cWk">
<rect key="frame" x="198" y="73" width="106" height="30"/>
<animations/>
<state key="normal" title="Open AlertView">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
</button>
</subviews>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<gestureRecognizers/>
<constraints>
@ -786,6 +863,7 @@ This is only showcase app, not intended for production purposes.</string>
<subviews>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2nU-2T-o0z">
<rect key="frame" x="240" y="488" width="80" height="80"/>
<animations/>
<color key="backgroundColor" red="0.52156862749999999" green="0.74901960779999999" blue="0.1450980392" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="width" secondItem="2nU-2T-o0z" secondAttribute="height" multiplier="1:1" id="4e3-8u-XpU"/>
@ -798,6 +876,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="cEb-GT-XMg">
<rect key="frame" x="0.0" y="408" width="80" height="80"/>
<animations/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="width" secondItem="cEb-GT-XMg" secondAttribute="height" multiplier="1:1" id="09S-n0-Nb0"/>
@ -810,6 +889,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="CVO-3I-Mh2">
<rect key="frame" x="80" y="408" width="80" height="80"/>
<animations/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="width" secondItem="CVO-3I-Mh2" secondAttribute="height" multiplier="1:1" id="MOV-kW-88s"/>
@ -822,6 +902,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bkK-oc-Yvj">
<rect key="frame" x="160" y="408" width="80" height="80"/>
<animations/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="width" secondItem="bkK-oc-Yvj" secondAttribute="height" multiplier="1:1" id="lFg-hF-hjq"/>
@ -834,6 +915,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fYW-iZ-WBg">
<rect key="frame" x="160" y="488" width="80" height="80"/>
<animations/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="width" secondItem="fYW-iZ-WBg" secondAttribute="height" multiplier="1:1" id="oi8-Wx-SBM"/>
@ -846,6 +928,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="X6C-HN-QW9">
<rect key="frame" x="0.0" y="488" width="160" height="80"/>
<animations/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="width" secondItem="X6C-HN-QW9" secondAttribute="height" multiplier="2:1" id="Mh5-pN-KV4"/>
@ -858,6 +941,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="prS-ma-oED">
<rect key="frame" x="240" y="408" width="80" height="80"/>
<animations/>
<color key="backgroundColor" red="0.52156862749999999" green="0.74901960779999999" blue="0.1450980392" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="width" secondItem="prS-ma-oED" secondAttribute="height" multiplier="1:1" id="Mkr-K3-1dB"/>
@ -870,6 +954,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="rUw-vf-PNm">
<rect key="frame" x="0.0" y="328" width="80" height="80"/>
<animations/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="width" secondItem="rUw-vf-PNm" secondAttribute="height" multiplier="1:1" id="yT2-fN-joy"/>
@ -882,6 +967,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="rK2-wv-Lxq">
<rect key="frame" x="80" y="328" width="80" height="80"/>
<animations/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="width" secondItem="rK2-wv-Lxq" secondAttribute="height" multiplier="1:1" id="mct-ej-iGY"/>
@ -894,6 +980,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hyZ-GS-b4n">
<rect key="frame" x="240" y="328" width="80" height="80"/>
<animations/>
<color key="backgroundColor" red="0.52156862749999999" green="0.74901960779999999" blue="0.1450980392" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="width" secondItem="hyZ-GS-b4n" secondAttribute="height" multiplier="1:1" id="Tfu-Rf-5Xe"/>
@ -906,6 +993,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="w1G-BD-RaP">
<rect key="frame" x="0.0" y="248" width="80" height="80"/>
<animations/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="width" secondItem="w1G-BD-RaP" secondAttribute="height" multiplier="1:1" id="5a5-Su-6yU"/>
@ -918,6 +1006,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="JfU-gs-Rj1">
<rect key="frame" x="80" y="248" width="80" height="80"/>
<animations/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="width" secondItem="JfU-gs-Rj1" secondAttribute="height" multiplier="1:1" id="i3P-4o-97z"/>
@ -930,6 +1019,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ScB-JD-pYD">
<rect key="frame" x="160" y="248" width="80" height="80"/>
<animations/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="width" secondItem="ScB-JD-pYD" secondAttribute="height" multiplier="1:1" id="VEO-yW-uqL"/>
@ -942,6 +1032,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Lef-oq-6tF">
<rect key="frame" x="240" y="248" width="80" height="80"/>
<animations/>
<color key="backgroundColor" red="0.52156862749999999" green="0.74901960779999999" blue="0.1450980392" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="width" secondItem="Lef-oq-6tF" secondAttribute="height" multiplier="1:1" id="QC5-C7-JdQ"/>
@ -954,6 +1045,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ood-rP-hyC">
<rect key="frame" x="80" y="168" width="80" height="80"/>
<animations/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="width" secondItem="ood-rP-hyC" secondAttribute="height" multiplier="1:1" id="WY5-BL-7rX"/>
@ -966,6 +1058,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Bck-k4-Rnw">
<rect key="frame" x="160" y="168" width="80" height="80"/>
<animations/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="width" secondItem="Bck-k4-Rnw" secondAttribute="height" multiplier="1:1" id="spz-fS-4Ph"/>
@ -978,6 +1071,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="6Od-LO-GKb">
<rect key="frame" x="240" y="168" width="80" height="80"/>
<animations/>
<color key="backgroundColor" red="0.52156862749999999" green="0.74901960779999999" blue="0.1450980392" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="width" secondItem="6Od-LO-GKb" secondAttribute="height" multiplier="1:1" id="xZg-E7-mcs"/>
@ -990,6 +1084,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dCG-4D-hbZ">
<rect key="frame" x="160" y="328" width="80" height="80"/>
<animations/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="width" secondItem="dCG-4D-hbZ" secondAttribute="height" multiplier="1:1" id="cBD-Pp-Jbd"/>
@ -1002,6 +1097,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="rNb-Ii-Dre">
<rect key="frame" x="0.0" y="168" width="80" height="80"/>
<animations/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="width" secondItem="rNb-Ii-Dre" secondAttribute="height" multiplier="1:1" id="sej-2C-PGC"/>
@ -1014,6 +1110,7 @@ This is only showcase app, not intended for production purposes.</string>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xws-I8-RiJ">
<rect key="frame" x="16" y="92" width="288" height="68"/>
<animations/>
<color key="backgroundColor" red="0.98039215690000003" green="0.91372549020000005" blue="0.87058823529999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="42"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
@ -1021,6 +1118,7 @@ This is only showcase app, not intended for production purposes.</string>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YZh-2c-lxk">
<rect key="frame" x="16" y="72" width="288" height="21"/>
<animations/>
<color key="backgroundColor" red="0.98039215690000003" green="0.91372549020000005" blue="0.87058823529999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="21" id="Tno-m0-igg"/>
@ -1030,6 +1128,7 @@ This is only showcase app, not intended for production purposes.</string>
<nil key="highlightedColor"/>
</label>
</subviews>
<animations/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="prS-ma-oED" firstAttribute="top" secondItem="hyZ-GS-b4n" secondAttribute="bottom" id="19F-YX-RbU"/>

View File

@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "RxSwift"
s.version = "2.0.0-alpha.3"
s.version = "2.0.0-alpha.4"
s.summary = "Microsoft Reactive Extensions (Rx) for Swift and iOS/OSX platform"
s.description = <<-DESC
This is a Swift port of Reactive extensions.
@ -33,6 +33,7 @@ Pod::Spec.new do |s|
s.ios.deployment_target = '8.0'
s.osx.deployment_target = '10.9'
s.watchos.deployment_target = '2.0'
s.tvos.deployment_target = '9.0'
s.source_files = 'RxSwift/**/*.swift'
end

View File

@ -15,6 +15,7 @@ extension ObservableType {
- parameter on: Action to invoke for each event in the observable sequence.
- returns: Subscription object used to unsubscribe from the observable sequence.
*/
@warn_unused_result
public func subscribe(on: (event: Event<E>) -> Void)
-> Disposable {
let observer = AnonymousObserver { e in
@ -33,6 +34,7 @@ extension ObservableType {
gracefully completed, errored, or if the generation is cancelled by disposing subscription)
- returns: Subscription object used to unsubscribe from the observable sequence.
*/
@warn_unused_result
public func subscribe(next next: ((E) -> Void)? = nil, error: ((ErrorType) -> Void)? = nil, completed: (() -> Void)? = nil, disposed: (() -> Void)? = nil)
-> Disposable {
@ -69,6 +71,7 @@ extension ObservableType {
- parameter onNext: Action to invoke for each element in the observable sequence.
- returns: Subscription object used to unsubscribe from the observable sequence.
*/
@warn_unused_result
public func subscribeNext(onNext: (E) -> Void)
-> Disposable {
let observer = AnonymousObserver<E> { e in
@ -85,6 +88,7 @@ extension ObservableType {
- parameter onRrror: Action to invoke upon errored termination of the observable sequence.
- returns: Subscription object used to unsubscribe from the observable sequence.
*/
@warn_unused_result
public func subscribeError(onError: (ErrorType) -> Void)
-> Disposable {
let observer = AnonymousObserver<E> { e in
@ -101,6 +105,7 @@ extension ObservableType {
- parameter onCompleted: Action to invoke upon graceful termination of the observable sequence.
- returns: Subscription object used to unsubscribe from the observable sequence.
*/
@warn_unused_result
public func subscribeCompleted(onCompleted: () -> Void)
-> Disposable {
let observer = AnonymousObserver<E> { e in

View File

@ -208,7 +208,7 @@ extension KVOObservableTests {
latest = n
}
parent.rx_deallocated
_ = parent.rx_deallocated
.subscribeCompleted {
disposed = true
}
@ -235,7 +235,7 @@ extension KVOObservableTests {
latest = n
}
parent.rx_deallocated
_ = parent.rx_deallocated
.subscribeCompleted {
disposed = true
}
@ -266,12 +266,12 @@ extension KVOObservableTests {
var root: HasStrongProperty! = HasStrongProperty()
root.rx_observeWeakly("property")
_ = root.rx_observeWeakly("property")
.subscribeNext { (n: String?) in
latest = n
}
root.rx_deallocated
_ = root.rx_deallocated
.subscribeCompleted {
disposed = true
}
@ -296,12 +296,12 @@ extension KVOObservableTests {
var root: HasWeakProperty! = HasWeakProperty()
root.rx_observeWeakly("property")
_ = root.rx_observeWeakly("property")
.subscribeNext { (n: String?) in
latest = n
}
root.rx_deallocated
_ = root.rx_deallocated
.subscribeCompleted {
disposed = true
}
@ -330,12 +330,12 @@ extension KVOObservableTests {
var root: HasWeakProperty! = HasWeakProperty()
root.rx_observeWeakly("property.property")
_ = root.rx_observeWeakly("property.property")
.subscribeNext { (n: String?) in
latest = n
}
root.rx_deallocated
_ = root.rx_deallocated
.subscribeCompleted {
disposed = true
}
@ -379,12 +379,12 @@ extension KVOObservableTests {
XCTAssertTrue(latest == nil)
XCTAssertTrue(disposed == false)
root.rx_observeWeakly("property.property")
_ = root.rx_observeWeakly("property.property")
.subscribeNext { (n: String?) in
latest = n
}
root.rx_deallocated
_ = root.rx_deallocated
.subscribeCompleted {
disposed = true
}
@ -407,12 +407,12 @@ extension KVOObservableTests {
var root: HasStrongProperty! = HasStrongProperty()
root.rx_observeWeakly("property.property")
_ = root.rx_observeWeakly("property.property")
.subscribeNext { (n: String?) in
latest = n
}
root.rx_deallocated
_ = root.rx_deallocated
.subscribeCompleted {
disposed = true
}
@ -456,12 +456,12 @@ extension KVOObservableTests {
XCTAssertTrue(latest == nil)
XCTAssertTrue(disposed == false)
root.rx_observeWeakly("property.property")
_ = root.rx_observeWeakly("property.property")
.subscribeNext { (n: String?) in
latest = n
}
root.rx_deallocated
_ = root.rx_deallocated
.subscribeCompleted {
disposed = true
}
@ -496,9 +496,10 @@ extension KVOObservableTests {
XCTAssertTrue(latest.value == nil)
let observable: Observable<NSObject?> = root.rx_observeWeakly("property.property")
observable .subscribeNext { n in
latest?.value = n
}
_ = observable
.subscribeNext { n in
latest?.value = n
}
XCTAssertTrue(latest.value! === one)
@ -512,7 +513,7 @@ extension KVOObservableTests {
func testObserveWeak_Strong_Weak_Observe_NilLastPropertyBecauseOfWeak() {
var gone = false
let (child, latest, dealloc) = _testObserveWeak_Strong_Weak_Observe_NilLastPropertyBecauseOfWeak()
dealloc
_ = dealloc
.subscribeNext { n in
gone = true
}
@ -538,9 +539,10 @@ extension KVOObservableTests {
XCTAssertTrue(latest.value == nil)
let observable: Observable<NSObject?> = root.rx_observeWeakly("property.property.property")
observable .subscribeNext { n in
latest?.value = n
}
_ = observable
.subscribeNext { n in
latest?.value = n
}
XCTAssertTrue(latest.value == nil)
@ -560,7 +562,7 @@ extension KVOObservableTests {
var gone = false
deallocatedMiddle
_ = deallocatedMiddle
.subscribeCompleted {
gone = true
}
@ -579,7 +581,8 @@ extension KVOObservableTests {
XCTAssertTrue(latest.value == nil)
root.rx_observeWeakly("property")
_ = root
.rx_observeWeakly("property")
.subscribeNext { (n: String?) in
latest.value = n
}
@ -588,7 +591,8 @@ extension KVOObservableTests {
var rootDeallocated = false
root.rx_deallocated
_ = root
.rx_deallocated
.subscribeCompleted {
rootDeallocated = true
}
@ -608,10 +612,11 @@ extension KVOObservableTests {
XCTAssertTrue(latest.value == nil)
root.rx_observeWeakly("property", options: .New)
_ = root
.rx_observeWeakly("property", options: .New)
.subscribeNext { (n: String?) in
latest.value = n
}
}
XCTAssertTrue(latest.value == nil)
@ -621,10 +626,11 @@ extension KVOObservableTests {
var rootDeallocated = false
root.rx_deallocated
_ = root
.rx_deallocated
.subscribeCompleted {
rootDeallocated = true
}
}
root = nil
@ -653,7 +659,8 @@ extension KVOObservableTests {
var rootDeallocated = false
root.rx_deallocated
_ = root
.rx_deallocated
.subscribeCompleted {
rootDeallocated = true
}
@ -693,10 +700,11 @@ extension KVOObservableTests {
var rootDeallocated = false
root.rx_deallocated
_ = root
.rx_deallocated
.subscribeCompleted {
rootDeallocated = true
}
}
root = nil
@ -728,7 +736,8 @@ extension KVOObservableTests {
var rootDeallocated = false
root.rx_deallocated
_ = root
.rx_deallocated
.subscribeCompleted {
rootDeallocated = true
}
@ -763,7 +772,8 @@ extension KVOObservableTests {
var rootDeallocated = false
root.rx_deallocated
_ = root
.rx_deallocated
.subscribeCompleted {
rootDeallocated = true
}
@ -797,7 +807,8 @@ extension KVOObservableTests {
var rootDeallocated = false
root.rx_deallocated
_ = root
.rx_deallocated
.subscribeCompleted {
rootDeallocated = true
}
@ -816,7 +827,8 @@ extension KVOObservableTests {
XCTAssertTrue(latest.value == nil)
root.rx_observeWeakly("frame")
_ = root
.rx_observeWeakly("frame")
.subscribeNext { (n: CGRect?) in
latest.value = n
}
@ -828,7 +840,8 @@ extension KVOObservableTests {
var rootDeallocated = false
root.rx_deallocated
_ = root
.rx_deallocated
.subscribeCompleted {
rootDeallocated = true
}
@ -846,7 +859,8 @@ extension KVOObservableTests {
XCTAssertTrue(latest.value == nil)
root.rx_observeWeakly("size")
_ = root
.rx_observeWeakly("size")
.subscribeNext { (n: CGSize?) in
latest.value = n
}
@ -858,10 +872,11 @@ extension KVOObservableTests {
var rootDeallocated = false
root.rx_deallocated
_ = root
.rx_deallocated
.subscribeCompleted {
rootDeallocated = true
}
}
root = nil
@ -876,7 +891,8 @@ extension KVOObservableTests {
XCTAssertTrue(latest.value == nil)
root.rx_observeWeakly("point")
_ = root
.rx_observeWeakly("point")
.subscribeNext { (n: CGPoint?) in
latest.value = n
}
@ -889,7 +905,8 @@ extension KVOObservableTests {
var rootDeallocated = false
root.rx_deallocated
_ = root
.rx_deallocated
.subscribeCompleted {
rootDeallocated = true
}
@ -907,7 +924,8 @@ extension KVOObservableTests {
XCTAssertTrue(latest.value == nil)
root.rx_observeWeakly("integer")
_ = root
.rx_observeWeakly("integer")
.subscribeNext { (n: NSNumber?) in
latest.value = n?.integerValue
}
@ -919,10 +937,11 @@ extension KVOObservableTests {
var rootDeallocated = false
root.rx_deallocated
_ = root
.rx_deallocated
.subscribeCompleted {
rootDeallocated = true
}
}
root = nil
@ -935,7 +954,7 @@ extension KVOObservableTests {
var lastError: ErrorType? = nil
(root.rx_observeWeakly("notExist") as Observable<NSNumber?>)
_ = (root.rx_observeWeakly("notExist") as Observable<NSNumber?>)
.subscribeError { error in
lastError = error
}
@ -944,7 +963,8 @@ extension KVOObservableTests {
var rootDeallocated = false
root.rx_deallocated
_ = root
.rx_deallocated
.subscribeCompleted {
rootDeallocated = true
}
@ -959,7 +979,7 @@ extension KVOObservableTests {
var lastError: ErrorType? = nil
(root.rx_observeWeakly("property.notExist") as Observable<NSNumber?>)
_ = (root.rx_observeWeakly("property.notExist") as Observable<NSNumber?>)
.subscribeError { error in
lastError = error
}
@ -972,7 +992,8 @@ extension KVOObservableTests {
var rootDeallocated = false
root.rx_deallocated
_ = root
.rx_deallocated
.subscribeCompleted {
rootDeallocated = true
}

View File

@ -22,7 +22,8 @@ extension NSObjectTests {
var fired = false
a.rx_deallocated
_ = a
.rx_deallocated
.map { _ in
return 1
}
@ -42,7 +43,8 @@ extension NSObjectTests {
var fired = false
a.rx_deallocated
_ = a
.rx_deallocated
.map { _ in
return 1
}
@ -62,7 +64,8 @@ extension NSObjectTests {
var fired = false
a.rx_deallocated
_ = a
.rx_deallocated
.map { _ in
return 1
}
@ -87,7 +90,8 @@ extension NSObjectTests {
var fired = false
a.rx_deallocating
_ = a
.rx_deallocating
.map { _ in
return 1
}
@ -107,7 +111,8 @@ extension NSObjectTests {
var fired = false
a.rx_deallocating
_ = a
.rx_deallocating
.map { _ in
return 1
}
@ -127,7 +132,8 @@ extension NSObjectTests {
var fired = false
a.rx_deallocating
_ = a
.rx_deallocating
.map { _ in
return 1
}

View File

@ -48,7 +48,7 @@ extension AnonymousObservableTests {
var elements = [Int]()
a.subscribeNext { n in
_ = a.subscribeNext { n in
elements.append(n)
}
@ -71,8 +71,8 @@ extension AnonymousObservableTests {
} as Observable<Int>
var elements = [Int]()
a.subscribeNext { n in
_ = a.subscribeNext { n in
elements.append(n)
}

View File

@ -65,12 +65,12 @@ class AssumptionsTest : RxTest {
}
func testFunctionReturnValueOverload() {
returnSomething()
_ = returnSomething()
.subscribeNext { (n: AnyObject?) in
XCTAssertEqual("\(n ?? NSNull())", "a")
}
returnSomething()
_ = returnSomething()
.subscribeNext { (n: CGRect?) in
XCTAssertEqual(n!, CGRectMake(0, 0, 100, 100))
}

View File

@ -240,7 +240,9 @@ class DelegateProxyTest : RxTest {
let sentArgument = NSIndexPath(index: 0)
view.rx_proxy.observe("threeDView:didGetXXX:")
_ = view
.rx_proxy
.observe("threeDView:didGetXXX:")
.subscribeCompleted {
completed.value = true
}

View File

@ -169,7 +169,7 @@ extension ObservableBindingTest {
let xs: Observable<Int> = failWith(testError)
let res = xs.publish().refCount()
res.subscribe { event in
_ = res.subscribe { event in
switch event {
case .Next:
XCTAssertTrue(false)
@ -179,7 +179,7 @@ extension ObservableBindingTest {
XCTAssertTrue(false)
}
}
res.subscribe { event in
_ = res.subscribe { event in
switch event {
case .Next:
XCTAssertTrue(false)
@ -266,7 +266,7 @@ extension ObservableBindingTest {
var nEvents = 0
let observable = sequenceOf(0, 1, 2).replay(3).refCount()
observable.subscribeNext { n in
_ = observable.subscribeNext { n in
nEvents++
}
@ -277,7 +277,7 @@ extension ObservableBindingTest {
var nEvents = 0
let observable = [sequenceOf(0, 1, 2), failWith(testError)].concat().replay(3).refCount()
observable.subscribeError { n in
_ = observable.subscribeError { n in
nEvents++
}
@ -288,7 +288,7 @@ extension ObservableBindingTest {
var nEvents = 0
let observable: Observable<Int> = failWith(testError).replay(3).refCount()
observable.subscribeError { n in
_ = observable.subscribeError { n in
nEvents++
}
@ -299,7 +299,7 @@ extension ObservableBindingTest {
var nEvents = 0
let observable: Observable<Int> = empty().replay(3).refCount()
observable.subscribeCompleted {
_ = observable.subscribeCompleted {
nEvents++
}
@ -310,7 +310,7 @@ extension ObservableBindingTest {
var nEvents = 0
let observable = sequenceOf(0, 1, 2).replay(1).refCount()
observable.subscribeNext { n in
_ = observable.subscribeNext { n in
nEvents++
}
@ -321,7 +321,7 @@ extension ObservableBindingTest {
var nEvents = 0
let observable = [just(0, 1, 2), failWith(testError)].concat().replay(1).refCount()
observable.subscribeError { n in
_ = observable.subscribeError { n in
nEvents++
}
@ -332,7 +332,7 @@ extension ObservableBindingTest {
var nEvents = 0
let observable: Observable<Int> = failWith(testError).replay(1).refCount()
observable.subscribeError { n in
_ = observable.subscribeError { n in
nEvents++
}
@ -343,7 +343,7 @@ extension ObservableBindingTest {
var nEvents = 0
let observable: Observable<Int> = empty().replay(1).refCount()
observable.subscribeCompleted {
_ = observable.subscribeCompleted {
nEvents++
}

View File

@ -86,7 +86,7 @@ extension ObservableCreationTests {
var elements = [Int]()
generate(0, condition: { _ in true }) { x in
_ = generate(0, condition: { _ in true }) { x in
count++
return x + 1
}

View File

@ -621,7 +621,7 @@ extension ObservableMultipleTest {
extension ObservableMultipleTest {
func testConcat_DefaultScheduler() {
var sum = 0
[just(1), just(2), just(3)].concat().subscribeNext { (e) -> Void in
_ = [just(1), just(2), just(3)].concat().subscribeNext { (e) -> Void in
sum += e
}
@ -1217,7 +1217,7 @@ extension ObservableMultipleTest {
sequenceOf(0, 1, 2)
).merge()
observable.subscribeNext { n in
_ = observable.subscribeNext { n in
nEvents++
}
@ -1233,7 +1233,7 @@ extension ObservableMultipleTest {
sequenceOf(0, 1, 2)
).merge()
observable.subscribeError { n in
_ = observable.subscribeError { n in
nEvents++
}
@ -1247,7 +1247,7 @@ extension ObservableMultipleTest {
failWith(testError)
).merge()
observable.subscribeError { n in
_ = observable.subscribeError { n in
nEvents++
}
@ -1258,7 +1258,7 @@ extension ObservableMultipleTest {
var nEvents = 0
let observable: Observable<Int> = (empty() as Observable<Observable<Int>>).merge()
observable.subscribeCompleted {
_ = observable.subscribeCompleted {
nEvents++
}
@ -1269,7 +1269,7 @@ extension ObservableMultipleTest {
var nEvents = 0
let observable: Observable<Int> = just(empty()).merge()
observable.subscribeCompleted { n in
_ = observable.subscribeCompleted { n in
nEvents++
}
@ -1285,7 +1285,7 @@ extension ObservableMultipleTest {
sequenceOf(0, 1, 2)
).merge(maxConcurrent: 1)
observable.subscribeNext { n in
_ = observable.subscribeNext { n in
nEvents++
}
@ -1301,7 +1301,7 @@ extension ObservableMultipleTest {
sequenceOf(0, 1, 2)
).merge(maxConcurrent: 1)
observable.subscribeError { n in
_ = observable.subscribeError { n in
nEvents++
}
@ -1315,7 +1315,7 @@ extension ObservableMultipleTest {
failWith(testError)
).merge(maxConcurrent: 1)
observable.subscribeError { n in
_ = observable.subscribeError { n in
nEvents++
}
@ -1327,7 +1327,7 @@ extension ObservableMultipleTest {
let observable: Observable<Int> = (empty() as Observable<Observable<Int>>).merge(maxConcurrent: 1)
observable.subscribeCompleted {
_ = observable.subscribeCompleted {
nEvents++
}
@ -1339,7 +1339,7 @@ extension ObservableMultipleTest {
let observable: Observable<Int> = just(empty()).merge(maxConcurrent: 1)
observable.subscribeCompleted { n in
_ = observable.subscribeCompleted { n in
nEvents++
}
@ -2160,7 +2160,7 @@ extension ObservableMultipleTest {
var nEvents = 0
let observable = combineLatest(sequenceOf(0, 1, 2), sequenceOf(0, 1, 2)) { $0 + $1 }
observable.subscribeNext { n in
_ = observable.subscribeNext { n in
nEvents++
}
@ -2175,7 +2175,7 @@ extension ObservableMultipleTest {
sequenceOf(0, 1, 2)
) { $0 + $1 }
observable.subscribeError { n in
_ = observable.subscribeError { n in
nEvents++
}
@ -2190,7 +2190,7 @@ extension ObservableMultipleTest {
sequenceOf(0, 1, 2)
) { $0 + $1 }
observable .subscribeError { n in
_ = observable.subscribeError { n in
nEvents++
}
@ -2206,7 +2206,7 @@ extension ObservableMultipleTest {
sequenceOf(0, 1, 2)
) { $0 + $1 }
observable.subscribeCompleted {
_ = observable.subscribeCompleted {
nEvents++
}

View File

@ -942,7 +942,7 @@ extension ObservableStandardSequenceOperators {
}
func testMap_DisposeOnCompleted() {
just("A")
_ = just("A")
.map { a in
return a
}
@ -952,7 +952,7 @@ extension ObservableStandardSequenceOperators {
}
func testMap1_DisposeOnCompleted() {
just("A")
_ = just("A")
.mapWithIndex { (a, i) in
return a
}
@ -2730,7 +2730,7 @@ extension ObservableStandardSequenceOperators {
func testTake_DecrementCountsFirst() {
let k = BehaviorSubject(value: false)
k.take(1).subscribeNext { n in
_ = k.take(1).subscribeNext { n in
k.on(.Next(!n))
}
}

View File

@ -22,7 +22,7 @@ extension ObserverTests {
var elements = [Int]()
a.subscribeNext { n in
_ = a.subscribeNext { n in
elements.append(n)
}
@ -43,7 +43,7 @@ extension ObserverTests {
var elements = [Int]()
var errrorNotification: NSError!
a.subscribe(
_ = a.subscribe(
next: { n in elements.append(n) },
error: { e in
errrorNotification = e as NSError
@ -71,7 +71,7 @@ extension ObserverTests {
var elements = [Int]()
a.subscribeNext { n in
_ = a.subscribeNext { n in
elements.append(n)
}

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0700"
LastUpgradeVersion = "0710"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0700"
LastUpgradeVersion = "0710"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

View File

@ -5,7 +5,7 @@ NUM_OF_TESTS=14
CURRENT_DIR="$( dirname "${BASH_SOURCE[0]}" )"
BUILD_DIRECTORY=build
APP=RxExample
CONFIGURATIONS="Debug Release-Tests Release"
CONFIGURATIONS=(Debug Release-Tests Release)
. scripts/common.sh
@ -43,11 +43,20 @@ function runAutomation() {
xcrun instruments -w ${SIMULATOR} > /dev/null 2>&1 || echo
echo
APP_PATH="${BUILD_DIRECTORY}/Build/Products/${CONFIGURATION}-iphonesimulator/${APP}.app"
printf "${GREEN}Installing the app ${BOLDCYAN}'${APP_PATH}'${GREEN} ...${RESET}\n"
if is_real_device "${SIMULATOR}"; then
OUTPUT_DIR=${CONFIGURATION}-iphoneos
else
OUTPUT_DIR=${CONFIGURATION}-iphonesimulator
fi
APP_PATH="${BUILD_DIRECTORY}/Build/Products/${OUTPUT_DIR}/${APP}.app"
printf "${GREEN}Installing the app ${BOLDCYAN}'${APP_PATH}'${GREEN} (${CONFIGURATION}) ${RESET}...\n"
echo
xcrun simctl install ${SIMULATOR} "${APP_PATH}"
if is_real_device "${SIMULATOR}"; then
/Users/kzaher/Projects/ios-deploy/ios-deploy --bundle "${APP_PATH}"
else
xcrun simctl install ${SIMULATOR} "${APP_PATH}"
fi
pushd $TMPDIR
rm -rf instrumentscli0.trace || echo
@ -56,7 +65,7 @@ function runAutomation() {
echo
OUTPUT="${TMPDIR}/output.txt"
instruments -w ${SIMULATOR} -t Automation "${APP_PATH}" -e UIASCRIPT "${ROOT}/scripts/automation-tests/main.js" | tee "${OUTPUT}" #| grep "Pass" #|| (open instrumentscli0.trace; exit -1;)
instruments -w "${SIMULATOR}" -t Automation "${APP_PATH}" -e UIASCRIPT "${ROOT}/scripts/automation-tests/main.js" | tee "${OUTPUT}" #| grep "Pass" #|| (open instrumentscli0.trace; exit -1;)
COUNT=`grep Pass: "$TMPDIR/output.txt" | wc -l`
if [ "$COUNT" -lt "$NUM_OF_TESTS" ]; then
@ -69,23 +78,18 @@ function runAutomation() {
echo
open ./instrumentscli0.trace;
exit -1;
else
printf "${GREEN}Automation says ok on ${BOLDCYAN}${SIMULATOR} - ${CONFIGURATION}${RESET}\n"
fi
popd
}
# ios 7
#for simulator in ${IOS7_SIMULATORS}
#do
# for configuration in ${CONFIGURATIONS}
# do
# runAutomation "RxExample-iOS" ${configuration} ${simulator}
# done
#done
AUTOMATION_SIMULATORS=("Krunoslav Zahers iPhone" ${DEFAULT_IOS9_SIMULATOR} ${DEFAULT_IOS8_SIMULATOR})
# ios 8
for simulator in ${IOS8_SIMULATORS}
IFS=""
for simulator in ${AUTOMATION_SIMULATORS[@]}
do
for configuration in ${CONFIGURATIONS}
for configuration in ${CONFIGURATIONS[@]}
do
runAutomation "RxExample-iOS" ${configuration} ${simulator}
done

View File

@ -2,39 +2,31 @@
test("----- githubSignUp -----", function (check, pass) {
var target = UIATarget.localTarget();
UIATarget.onAlert = function(alert){
UIATarget.localTarget().frontMostApp().alert().buttons()["Cancel"].tap();
var okButton = UIATarget.localTarget().frontMostApp().alert().buttons()["OK"];
okButton.tap();
UIATarget.localTarget().frontMostApp().navigationBar().leftButton().tap();
pass()
return false;
}
UIATarget.localTarget().frontMostApp().mainWindow().tableViews()[0].cells()[0].tap();
target.frontMostApp().mainWindow().tableViews()[0].cells()[0].tap();
UIATarget.localTarget().frontMostApp().mainWindow().textFields()[0].tap();
writeInElement(UIATarget.localTarget().frontMostApp().mainWindow().textFields()[0], "rxrevolution")
target.frontMostApp().mainWindow().textFields()[0].tap();
writeInElement(target.frontMostApp().mainWindow().textFields()[0], "rxrevolution")
UIATarget.localTarget().frontMostApp().mainWindow().secureTextFields()[0].tap();
writeInElement(UIATarget.localTarget().frontMostApp().mainWindow().secureTextFields()[0], "mypassword")
target.frontMostApp().mainWindow().secureTextFields()[0].tap();
writeInElement(target.frontMostApp().mainWindow().secureTextFields()[0], "mypassword")
UIATarget.localTarget().frontMostApp().mainWindow().secureTextFields()[1].tap();
writeInElement(UIATarget.localTarget().frontMostApp().mainWindow().secureTextFields()[1], "mypassword")
target.frontMostApp().mainWindow().secureTextFields()[1].tap();
writeInElement(target.frontMostApp().mainWindow().secureTextFields()[1], "mypassword")
UIATarget.localTarget().tap({x:14.50, y:80.00});
UIATarget.localTarget().frontMostApp().mainWindow().buttons()["Sign up"].tap();
target.frontMostApp().mainWindow().buttons()["Sign up"].tap();
});

View File

@ -2,35 +2,34 @@
test("----- searchWikipedia -----", function (check, pass) {
var width = UIATarget.localTarget().frontMostApp().mainWindow().rect().size.width
var target = UIATarget.localTarget()
UIATarget.localTarget().frontMostApp().mainWindow().tableViews()[0].cells()[3].tap();
var width = target.frontMostApp().mainWindow().rect().size.width
UIATarget.localTarget().frontMostApp().mainWindow().searchBars()[0].searchBars()[0].tap();
writeInElement(UIATarget.localTarget().frontMostApp().mainWindow().searchBars()[0].searchBars()[0], "banana")
UIATarget.localTarget().delay(2);
target.frontMostApp().mainWindow().tableViews()[0].cells()[3].tap();
UIATarget.localTarget().tap({x:width - 40, y:43});
target.delay(2);
UIATarget.localTarget().frontMostApp().mainWindow().searchBars()[0].searchBars()[0].tap();
writeInElement(UIATarget.localTarget().frontMostApp().mainWindow().searchBars()[0].searchBars()[0], "Yosemite")
UIATarget.localTarget().delay(2);
var searchBar = target.frontMostApp().mainWindow().searchBars()[0];
searchBar.tap()
target.frontMostApp().keyboard().typeString("banana");
UIATarget.localTarget().tap({x:width - 40, y:43});
UIATarget.localTarget().frontMostApp().navigationBar().leftButton().tap();
target.delay(1);
target.tap({x:width - 40, y:43});
target.delay(1);
searchBar.tap();
target.delay(1);
target.frontMostApp().keyboard().typeString("Yosemite");
target.delay(1);
target.tap({x:width - 40, y:43});
target.frontMostApp().navigationBar().leftButton().tap();
pass()
});

View File

@ -12,9 +12,11 @@ test("----- masterDetail -----", function (check, pass) {
UIATarget.localTarget().frontMostApp().mainWindow().dragInsideWithOptions({startOffset:{x:0.93, y:yOffset(300)}, endOffset:{x:0.95, y:yOffset(200)}, duration:1.5});
UIATarget.localTarget().frontMostApp().mainWindow().dragInsideWithOptions({startOffset:{x:0.93, y:yOffset(300)}, endOffset:{x:0.95, y:yOffset(100)}, duration:1.5});
UIATarget.localTarget().frontMostApp().mainWindow().tableViews()[0].cells()[1].buttons()[0].tap();
var firstCell = UIATarget.localTarget().frontMostApp().mainWindow().tableViews()[0].cells()[1]
UIATarget.localTarget().frontMostApp().mainWindow().tableViews()[0].cells()[1].buttons()[2].tap();
firstCell.buttons()[0].tap();
firstCell.buttons()["Delete"].tap();
UIATarget.localTarget().delay( 2 );
@ -25,15 +27,3 @@ test("----- masterDetail -----", function (check, pass) {
pass()
});

View File

@ -1,7 +1,30 @@
// UIATarget.localTarget().delay( 15 );
test("----- UIAlertView tap -----", function (check, pass) {
UIATarget.localTarget().frontMostApp().mainWindow().tableViews()[0].cells()[4].tap();
UIATarget.onAlert = function(alert){
UIATarget.localTarget().onAlert = null
UIATarget.localTarget().frontMostApp().alert().buttons()["Three"].tap();
UIATarget.localTarget().delay( 1 );
check(function () {
var textValue = UIATarget.localTarget().frontMostApp().mainWindow().staticTexts()["debugLabel"].value();
return textValue === "UIAlertView didDismissWithButtonIndex 3";
});
UIATarget.onAlert = function () {
return false;
};
UIATarget.localTarget().frontMostApp().navigationBar().leftButton().tap();
return false;
}
UIATarget.localTarget().frontMostApp().mainWindow().buttons()["Open AlertView"].tap();
UIATarget.localTarget().delay( 4 );
});
test("----- UIBarButtonItem tap -----", function (check, pass) {
@ -89,9 +112,9 @@ test("----- UITextField text -----", function (check, pass) {
UIATarget.localTarget().frontMostApp().mainWindow().tableViews()[0].cells()[4].tap();
UIATarget.localTarget().frontMostApp().mainWindow().textFields()[0].textFields()[0].tap();
UIATarget.localTarget().frontMostApp().mainWindow().textFields()[0].tap();
// UIATarget.localTarget().frontMostApp().keyboard().typeString("t");// fails if software keyboard is disabled
UIATarget.localTarget().frontMostApp().mainWindow().textFields()[0].textFields()[0].setValue("t");
UIATarget.localTarget().frontMostApp().mainWindow().textFields()[0].setValue("t");
check(function () {
var textValue = UIATarget.localTarget().frontMostApp().mainWindow().staticTexts()["debugLabel"].value();
@ -157,30 +180,3 @@ test("----- UIActionSheet tap -----", function (check, pass) {
UIATarget.localTarget().frontMostApp().navigationBar().leftButton().tap();
});
test("----- UIAlertView tap -----", function (check, pass) {
UIATarget.localTarget().frontMostApp().mainWindow().tableViews()[0].cells()[4].tap();
UIATarget.localTarget().onAlert = function(alert){
UIATarget.localTarget().onAlert = null
UIATarget.localTarget().frontMostApp().alert().buttons()["Three"].tap();
UIATarget.localTarget().delay( 2 );
check(function () {
var textValue = UIATarget.localTarget().frontMostApp().mainWindow().staticTexts()["debugLabel"].value();
return textValue === "UIAlertView didDismissWithButtonIndex 3";
});
UIATarget.localTarget().onAlert = function () {
return false;
};
UIATarget.localTarget().frontMostApp().navigationBar().leftButton().tap();
return false;
}
UIATarget.localTarget().frontMostApp().mainWindow().buttons()["Open AlertView"].tap();
UIATarget.localTarget().delay( 4 );
});

View File

@ -2,7 +2,7 @@
test("----- reactivePartialUpdates -----", function (check, pass) {
UIATarget.localTarget().frontMostApp().mainWindow().tableViews()[0].cells()[5].tap();
UIATarget.localTarget().frontMostApp().mainWindow().tableViews()[0].cells()[6].tap();
UIATarget.localTarget().frontMostApp().navigationBar().rightButton().tap();
UIATarget.localTarget().frontMostApp().navigationBar().rightButton().tap();
UIATarget.localTarget().frontMostApp().navigationBar().rightButton().tap();
@ -14,15 +14,3 @@ test("----- reactivePartialUpdates -----", function (check, pass) {
pass()
});

View File

@ -23,12 +23,12 @@ function test(testName, callback) {
callback(check, pass)
}
function log(string) {
UIALogger.logMessage(string)
function log(element) {
UIALogger.logMessage(element.toString())
}
function debug(string) {
UIALogger.logDebug(string)
function debug(element) {
UIALogger.logDebug(element.toString())
}
function logElement(element) {
@ -48,10 +48,7 @@ function sleep(time) {
}
function writeInElement(element, text) {
var char
for (var i = 1; i < text.length + 1; i++) {
element.setValue(text.substring(0, i));
}
}

View File

@ -22,24 +22,87 @@ BOLDWHITE="\033[1m\033[37m"
# make sure all tests are passing
DEFAULT_IOS7_SIMULATOR=RxSwiftTest-iPhone4s-iOS_7.1
DEFAULT_IOS8_SIMULATOR=RxSwiftTest-iPhone6-iOS_8.4
DEFAULT_IOS9_SIMULATOR=RxSwiftTest-iPhone6-iOS_9.0
DEFAULT_WATCHOS2_SIMULATOR=RxSwiftTest-AppleWatch-watchOS_2.0
DEFAULT_IOS7_SIMULATOR=RxSwiftTest/iPhone-4s/iOS/7.1
DEFAULT_IOS8_SIMULATOR=RxSwiftTest/iPhone-6/iOS/8.4
DEFAULT_IOS9_SIMULATOR=RxSwiftTest/iPhone-6/iOS/9.0
DEFAULT_WATCHOS2_SIMULATOR=RxSwiftTest/AppleWatch/watchOS/2.0
DEFAULT_TVOS_SIMULATOR=RxSwiftTest/Apple-TV-1080p/tvOS/9.0
if [ "${IS_LOCAL}" -eq 1 ]; then
IOS7_SIMULATORS="RxSwiftTest-iPhone4s-iOS_7.1 RxSwiftTest-iPhone5-iOS_7.1 RxSwiftTest-iPhone5s-iOS_7.1"
IOS8_SIMULATORS="RxSwiftTest-iPhone4s-iOS_8.4 RxSwiftTest-iPhone5-iOS_8.4 RxSwiftTest-iPhone5s-iOS_8.4 RxSwiftTest-iPhone6-iOS_8.4 RxSwiftTest-iPhone6Plus-iOS_8.4"
#IOS9_SIMULATORS="RxSwiftTest-iPhone4s-iOS_9.0 RxSwiftTest-iPhone5-iOS_9.0 RxSwiftTest-iPhone5s-iOS_9.0 RxSwiftTest-iPhone6-iOS_9.0 RxSwiftTest-iPhone6Plus-iOS_9.0"
IOS9_SIMULATORS="RxSwiftTest-iPhone6-iOS_9.0"
function runtime_available() {
if [ `xcrun simctl list runtimes | grep "${1}" | wc -l` -eq 1 ]; then
return 0
else
return 1
fi
}
# used to check simulator name
function contains() {
string="$1"
substring="$2"
if [[ $string == *"$substring"* ]]
then
return 0 # $substring is in $string
else
return 1 # $substring is not in $string
fi
}
function simulator_available() {
SIMULATOR=$1
if [ `xcrun simctl list | grep "${SIMULATOR}" | wc -l` -eq 0 ]; then
return -1
elif [ `xcrun simctl list | grep "${SIMULATOR}" | wc -l` -gt 1 ]; then
echo "Multiple simulators ${SIMULATOR} found"
xcrun simctl list | \
grep "${SIMULATOR}" | \
cut -d "(" -f 2 | \
cut -d ")" -f 1 | \
xargs xcrun simctl delete;
exit -1
return -1
elif [ `xcrun simctl list | grep "${SIMULATOR}" | grep "unavailable" | wc -l` -eq 1 ]; then
# delete unavailable simulator
xcrun simctl list |
grep "${SIMULATOR}" |
grep "unavailable" |
cut -d "(" -f 2 |
cut -d ")" -f 1 |
xargs xcrun simctl delete
return -1
else
return 0
fi
}
function is_real_device() {
contains "$1" "s "
}
function ensure_simulator_available() {
SIMULATOR=$1
if simulator_available "${SIMULATOR}"; then
echo "${SIMULATOR} exists"
return
fi
DEVICE=`echo "${SIMULATOR}" | cut -d "/" -f 2`
OS=`echo "${SIMULATOR}" | cut -d "/" -f 3`
VERSION_SUFFIX=`echo "${SIMULATOR}" | cut -d "/" -f 4 | sed -e "s/\./-/"`
RUNTIME="com.apple.CoreSimulator.SimRuntime.${OS}-${VERSION_SUFFIX}"
echo "Creating new simulator"
xcrun simctl create "${SIMULATOR}" "com.apple.CoreSimulator.SimDeviceType.${DEVICE}" "com.apple.CoreSimulator.SimRuntime.${OS}-${VERSION_SUFFIX}"
}
if runtime_available "com.apple.CoreSimulator.SimRuntime.iOS-9-1"; then
DEFAULT_IOS9_SIMULATOR=RxSwiftTest/iPhone-6/iOS/9.1
else
IOS7_SIMULATORS="RxSwiftTest-iPhone4s-iOS_7.1"
IOS8_SIMULATORS="RxSwiftTest-iPhone4s-iOS_8.4"
#IOS9_SIMULATORS="RxSwiftTest-iPhone4s-iOS_9.0"
IOS9_SIMULATORS="RxSwiftTest-iPhone6-iOS_9.0"
DEFAULT_IOS9_SIMULATOR=RxSwiftTest/iPhone-6/iOS/9.0
fi
BUILD_DIRECTORY=build
function rx() {
@ -49,16 +112,21 @@ function rx() {
ACTION=$4
echo
printf "${GREEN}${ACTION} ${BOLDCYAN}$1 - $2 ($SIMULATOR)${RESET}\n"
printf "${GREEN}${ACTION} ${BOLDCYAN}$SCHEME - $CONFIGURATION ($SIMULATOR)${RESET}\n"
echo
DESTINATION=""
if [ "$SIMULATOR" != "" ]; then
OS=`echo $SIMULATOR| cut -d'_' -f 2`
if contains $SIMULATOR "watchOS"; then
DESTINATION='platform=watchOS Simulator,OS='$OS',name='$SIMULATOR''
if [ "${SIMULATOR}" != "" ]; then
#if it's a real device
if is_real_device "${SIMULATOR}"; then
DESTINATION='name='${SIMULATOR}
#else it's just a simulator
else
DESTINATION='platform=iOS Simulator,OS='$OS',name='$SIMULATOR''
ensure_simulator_available "${SIMULATOR}"
OS=`echo $SIMULATOR | cut -d '/' -f 3`
SIMULATOR_GUID=`xcrun simctl list devices | grep ${SIMULATOR} | cut -d "(" -f 2 | cut -d ")" -f 1`
DESTINATION='platform='$OS' Simulator,OS='$OS',id='$SIMULATOR_GUID''
echo "Running on ${DESTINATION}"
fi
else
DESTINATION='platform=OS X,arch=x86_64'
@ -77,60 +145,3 @@ function rx() {
exit $STATUS
fi
}
# simulators
# xcrun simctl list devicetypes
# xcrun simctl list runtimes
function createDevices() {
xcrun simctl create RxSwiftTest-iPhone4s-iOS_7.1 'iPhone 4s' 'com.apple.CoreSimulator.SimRuntime.iOS-7-1'
xcrun simctl create RxSwiftTest-iPhone5-iOS_7.1 'iPhone 5' 'com.apple.CoreSimulator.SimRuntime.iOS-7-1'
xcrun simctl create RxSwiftTest-iPhone5s-iOS_7.1 'iPhone 5s' 'com.apple.CoreSimulator.SimRuntime.iOS-7-1'
xcrun simctl create RxSwiftTest-iPhone4s-iOS_8.4 'iPhone 4s' 'com.apple.CoreSimulator.SimRuntime.iOS-8-4'
xcrun simctl create RxSwiftTest-iPhone5-iOS_8.4 'iPhone 5' 'com.apple.CoreSimulator.SimRuntime.iOS-8-4'
xcrun simctl create RxSwiftTest-iPhone5s-iOS_8.4 'iPhone 5s' 'com.apple.CoreSimulator.SimRuntime.iOS-8-4'
xcrun simctl create RxSwiftTest-iPhone6-iOS_8.4 'iPhone 6' 'com.apple.CoreSimulator.SimRuntime.iOS-8-4'
xcrun simctl create RxSwiftTest-iPhone6Plus-iOS_8.4 'iPhone 6 Plus' 'com.apple.CoreSimulator.SimRuntime.iOS-8-4'
xcrun simctl create RxSwiftTest-iPhone4s-iOS_9.0 'iPhone 4s' 'com.apple.CoreSimulator.SimRuntime.iOS-9-0'
xcrun simctl create RxSwiftTest-iPhone5-iOS_9.0 'iPhone 5' 'com.apple.CoreSimulator.SimRuntime.iOS-9-0'
xcrun simctl create RxSwiftTest-iPhone5s-iOS_9.0 'iPhone 5s' 'com.apple.CoreSimulator.SimRuntime.iOS-9-0'
xcrun simctl create RxSwiftTest-iPhone6-iOS_9.0 'iPhone 6' 'com.apple.CoreSimulator.SimRuntime.iOS-9-0'
xcrun simctl create RxSwiftTest-iPhone6Plus-iOS_9.0 'iPhone 6 Plus' 'com.apple.CoreSimulator.SimRuntime.iOS-9-0'
}
function deleteDevices() {
xcrun simctl delete RxSwiftTest-iPhone4s-iOS_7.1 || echo "failed"
xcrun simctl delete RxSwiftTest-iPhone5-iOS_7.1 || echo "failed"
xcrun simctl delete RxSwiftTest-iPhone5s-iOS_7.1 || echo "failed"
xcrun simctl delete RxSwiftTest-iPhone4s-iOS_8.4 || echo "failed"
xcrun simctl delete RxSwiftTest-iPhone5-iOS_8.4 || echo "failed"
xcrun simctl delete RxSwiftTest-iPhone5s-iOS_8.4 || echo "failed"
xcrun simctl delete RxSwiftTest-iPhone6-iOS_8.4 || echo "failed"
xcrun simctl delete RxSwiftTest-iPhone6Plus-iOS_8.4 || echo "failed"
xcrun simctl delete RxSwiftTest-iPhone4s-iOS_9.0 || echo "failed"
xcrun simctl delete RxSwiftTest-iPhone5-iOS_9.0 || echo "failed"
xcrun simctl delete RxSwiftTest-iPhone5s-iOS_9.0 || echo "failed"
xcrun simctl delete RxSwiftTest-iPhone6-iOS_9.0 || echo "failed"
xcrun simctl delete RxSwiftTest-iPhone6Plus-iOS_9.0 || echo "failed"
}
# used to check simulator name
contains() {
string="$1"
substring="$2"
if test "${string#*$substring}" != "$string"
then
return 0 # $substring is in $string
else
return 1 # $substring is not in $string
fi
}

View File

@ -1,20 +1,18 @@
. scripts/common.sh
IS_LOCAL=0
IS_QUICK=1
if [ "$1" == "l" ]; then
echo "Local test"
IS_LOCAL=1
TV_OS=0
RELEASE_TEST=0
if [ `xcodebuild -showsdks | grep tvOS | wc -l` -ge 4 ]; then
printf "${GREEN}tvOS found${RESET}\n"
TV_OS=1
fi
if [ "$1" == "f" ]; then
echo "Full"
IS_QUICK=0
else
echo "Quick"
if [ "$1" == "r" ]; then
printf "${GREEN}Pre release tests on, hang on tight ...${RESET}"
RELEASE_TEST=1
fi
ISLOCAL="${IS_LOCAL}" . scripts/common.sh
# ios 7 sim
#if [ `xcrun simctl list | grep "${DEFAULT_IOS7_SIMULATOR}" | wc -l` == 0 ]; then
# xcrun simctl create $DEFAULT_IOS7_SIMULATOR 'iPhone 4s' 'com.apple.CoreSimulator.SimRuntime.iOS-7-1'
@ -29,29 +27,35 @@ ISLOCAL="${IS_LOCAL}" . scripts/common.sh
# echo "${DEFAULT_IOS8_SIMULATOR} exists"
#fi
if [ "${IS_LOCAL}" -eq 1 ]; then
if [ "${RELEASE_TEST}" -eq 1 ]; then
. scripts/automation-tests.sh
fi
#ios 9 sim
if [ `xcrun simctl list | grep "${DEFAULT_IOS9_SIMULATOR}" | wc -l` == 0 ]; then
xcrun simctl create $DEFAULT_IOS9_SIMULATOR 'iPhone 6' 'com.apple.CoreSimulator.SimRuntime.iOS-9-0'
else
echo "${DEFAULT_IOS9_SIMULATOR} exists"
fi
CONFIGURATIONS=(Release)
#watch os 2 sim
if [ `xcrun simctl list | grep "${DEFAULT_WATCHOS2_SIMULATOR}" | wc -l` == 0 ]; then
xcrun simctl create $DEFAULT_WATCHOS2_SIMULATOR 'Apple Watch - 38mm' 'com.apple.CoreSimulator.SimRuntime.watchOS-2-0'
else
echo "${DEFAULT_WATCHOS2_SIMULATOR} exists"
fi
# make sure watchos builds
# temporary solution
WATCH_OS_BUILD_TARGETS=(RxSwift-watchOS RxCocoa-watchOS RxBlocking-watchOS)
for scheme in ${WATCH_OS_BUILD_TARGETS[@]}
do
for configuration in ${CONFIGURATIONS[@]}
do
echo
printf "${GREEN}${build} ${BOLDCYAN}${scheme} - ${configuration}${RESET}\n"
echo
xcodebuild -workspace Rx.xcworkspace \
-scheme ${scheme} \
-configuration ${configuration} \
-sdk watchos \
-derivedDataPath "${BUILD_DIRECTORY}" \
build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO | xcpretty -c; STATUS=${PIPESTATUS[0]}
if [ "${IS_QUICK}" -eq 1 ]; then
CONFIGURATIONS=(Release)
else
CONFIGURATIONS=(Debug Release-Tests Release)
fi
if [ $STATUS -ne 0 ]; then
echo $STATUS
exit $STATUS
fi
done
done
#make sure all iOS tests pass
for configuration in ${CONFIGURATIONS[@]}
@ -59,6 +63,14 @@ do
rx "RxTests-iOS" ${configuration} $DEFAULT_IOS9_SIMULATOR test
done
#make sure all tvOS tests pass
if [ $TV_OS -eq 1 ]; then
for configuration in ${CONFIGURATIONS[@]}
do
rx "RxTests-tvOS" ${configuration} $DEFAULT_TVOS_SIMULATOR test
done
fi
#make sure all watchOS tests pass
#tests for Watch OS are not available rdar://21760513
# for configuration in ${CONFIGURATIONS[@]}
@ -101,7 +113,7 @@ do
done
done
if [ "${IS_LOCAL}" -eq 1 ]; then
if [ "${RELEASE_TEST}" -eq 1 ]; then
mdast -u mdast-slug -u mdast-validate-links ./*.md
mdast -u mdast-slug -u mdast-validate-links ./**/*.md
fi

34
scripts/validate-podspec.sh Executable file
View File

@ -0,0 +1,34 @@
# This is kind of naughty, I know,
# but we need to know what will the state be once RxSwift is deployed.
set -e
VERSION=`cat RxSwift.podspec | grep -E "s.version\s+=" | cut -d '"' -f 2`
pushd ~/.cocoapods/repos/master
pushd Specs
mkdir -p RxSwift/${VERSION}
mkdir -p RxCocoa/${VERSION}
mkdir -p RxBlocking/${VERSION}
popd
popd
cat RxSwift.podspec |
sed -E "s/s.source[^\}]+\}/s.source = { :git => '\/Users\/kzaher\/Projects\/Rx', :branch => \'develop\' }/" > ~/.cocoapods/repos/master/Specs/RxSwift/${VERSION}/RxSwift.podspec
cat RxCocoa.podspec |
sed -E "s/s.source[^\}]+\}/s.source = { :git => '\/Users\/kzaher\/Projects\/Rx', :branch => \'develop\' }/" > ~/.cocoapods/repos/master/Specs/RxCocoa/${VERSION}/RxCocoa.podspec
cat RxBlocking.podspec |
sed -E "s/s.source[^\}]+\}/s.source = { :git => '\/Users\/kzaher\/Projects\/Rx', :branch => \'develop\' }/" > ~/.cocoapods/repos/master/Specs/RxBlocking/${VERSION}/RxBlocking.podspec
pod lib lint RxSwift.podspec
pod lib lint RxCocoa.podspec
pod lib lint RxBlocking.podspec
pushd ~/.cocoapods/repos/master
git clean -d -f
git reset master --hard
popd