├── .gitignore ├── Cartfile ├── Cartfile.resolved ├── Carthage └── Checkouts │ ├── Bond │ ├── .gitignore │ ├── .gitmodules │ ├── .swift-version │ ├── .travis.yml │ ├── Bond-App │ │ ├── AppDelegate.swift │ │ ├── Base.lproj │ │ │ └── LaunchScreen.storyboard │ │ └── Info.plist │ ├── Bond.podspec │ ├── Bond.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ ├── Bond-iOS.xcscheme │ │ │ ├── Bond-macOS.xcscheme │ │ │ └── Bond-tvOS.xcscheme │ ├── Bond.xcworkspace │ │ └── contents.xcworkspacedata │ ├── Bond │ │ ├── NSObject+Bond.h │ │ └── NSObject+Bond.m │ ├── Cartfile │ ├── Cartfile.resolved │ ├── Carthage │ │ └── Checkouts │ │ │ ├── Diff.swift │ │ │ ├── .gitignore │ │ │ ├── .travis.yml │ │ │ ├── Configurations │ │ │ │ ├── Deployment-Targets.xcconfig │ │ │ │ ├── Universal-Framework-Target.xcconfig │ │ │ │ └── Universal-Target-Base.xcconfig │ │ │ ├── Diff.podspec │ │ │ ├── Diff.xcodeproj │ │ │ │ ├── project.pbxproj │ │ │ │ ├── project.xcworkspace │ │ │ │ │ └── contents.xcworkspacedata │ │ │ │ └── xcshareddata │ │ │ │ │ ├── xcbaselines │ │ │ │ │ └── C9838FF01D29571000691BE8.xcbaseline │ │ │ │ │ │ ├── 5ACB3D1B-D608-4861-BD7C-4E5E202E879C.plist │ │ │ │ │ │ └── Info.plist │ │ │ │ │ └── xcschemes │ │ │ │ │ └── Diff.xcscheme │ │ │ ├── DiffTests │ │ │ │ ├── BatchUpdateTests.swift │ │ │ │ ├── DiffTests.swift │ │ │ │ ├── ExtendedPatchSortTests.swift │ │ │ │ ├── Info.plist │ │ │ │ ├── NestedDiffTests.swift │ │ │ │ ├── NestedExtendedDiffTests.swift │ │ │ │ ├── PatchApplyTests.swift │ │ │ │ └── PatchSortTests.swift │ │ │ ├── Examples │ │ │ │ └── TableViewExample │ │ │ │ │ ├── TableViewExample.xcodeproj │ │ │ │ │ ├── project.pbxproj │ │ │ │ │ ├── project.xcworkspace │ │ │ │ │ │ └── contents.xcworkspacedata │ │ │ │ │ └── xcshareddata │ │ │ │ │ │ └── xcschemes │ │ │ │ │ │ └── TableViewExample.xcscheme │ │ │ │ │ └── TableViewExample │ │ │ │ │ ├── AppDelegate.swift │ │ │ │ │ ├── Assets.xcassets │ │ │ │ │ └── AppIcon.appiconset │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── Base.lproj │ │ │ │ │ ├── LaunchScreen.storyboard │ │ │ │ │ └── Main.storyboard │ │ │ │ │ ├── Info.plist │ │ │ │ │ ├── NestedTableViewController.swift │ │ │ │ │ └── TableViewController.swift │ │ │ ├── Framework │ │ │ │ ├── Diff.h │ │ │ │ └── Info.plist │ │ │ ├── Graph.playground │ │ │ │ ├── Contents.swift │ │ │ │ ├── Sources │ │ │ │ │ ├── Arrows.swift │ │ │ │ │ ├── CharacterLabels.swift │ │ │ │ │ ├── Diff.swift │ │ │ │ │ ├── GraphView.swift │ │ │ │ │ ├── Patch.swift │ │ │ │ │ └── ViewController.swift │ │ │ │ └── contents.xcplayground │ │ │ ├── LICENSE │ │ │ ├── Package.swift │ │ │ ├── PerfTests │ │ │ │ ├── Benchmark │ │ │ │ │ ├── Benchmark.xcodeproj │ │ │ │ │ │ ├── Benchmark.xcworkspace │ │ │ │ │ │ │ └── contents.xcworkspacedata │ │ │ │ │ │ ├── project.pbxproj │ │ │ │ │ │ └── project.xcworkspace │ │ │ │ │ │ │ └── contents.xcworkspacedata │ │ │ │ │ ├── Benchmark.xcworkspace │ │ │ │ │ │ └── contents.xcworkspacedata │ │ │ │ │ ├── Benchmark │ │ │ │ │ │ ├── AppDelegate.swift │ │ │ │ │ │ ├── Assets.xcassets │ │ │ │ │ │ │ └── AppIcon.appiconset │ │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ ├── Base.lproj │ │ │ │ │ │ │ ├── LaunchScreen.storyboard │ │ │ │ │ │ │ └── Main.storyboard │ │ │ │ │ │ ├── Dwifft.swift │ │ │ │ │ │ ├── Info.plist │ │ │ │ │ │ └── ViewController.swift │ │ │ │ │ ├── Cartfile │ │ │ │ │ └── Cartfile.resolved │ │ │ │ ├── PerfTests │ │ │ │ │ ├── build-script │ │ │ │ │ └── main.swift │ │ │ │ └── Utils │ │ │ │ │ ├── PerformanceTestUtils.swift │ │ │ │ │ └── Resources │ │ │ │ │ ├── Diff-new.swift │ │ │ │ │ └── Diff-old.swift │ │ │ ├── README.md │ │ │ ├── Sources │ │ │ │ ├── Diff+UIKit.swift │ │ │ │ ├── Diff.swift │ │ │ │ ├── ExtendedDiff.swift │ │ │ │ ├── ExtendedPatch+Apply.swift │ │ │ │ ├── ExtendedPatch.swift │ │ │ │ ├── GenericPatch.swift │ │ │ │ ├── LinkedList.swift │ │ │ │ ├── NestedDiff.swift │ │ │ │ ├── NestedExtendedDiff.swift │ │ │ │ ├── Patch+Apply.swift │ │ │ │ ├── Patch+Sort.swift │ │ │ │ └── Patch.swift │ │ │ └── codecov.yml │ │ │ └── ReactiveKit │ │ │ ├── .gitignore │ │ │ ├── .gitmodules │ │ │ ├── .swift-version │ │ │ ├── .travis.yml │ │ │ ├── Assets │ │ │ └── logo.png │ │ │ ├── LICENSE │ │ │ ├── Package.swift │ │ │ ├── Playground.playground │ │ │ ├── Contents.swift │ │ │ └── contents.xcplayground │ │ │ ├── README.md │ │ │ ├── ReactiveKit.podspec │ │ │ ├── ReactiveKit.xcodeproj │ │ │ ├── project.pbxproj │ │ │ ├── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── xcbaselines │ │ │ │ └── ECBCCDD91BEB6B9B00723476.xcbaseline │ │ │ │ │ ├── 15721443-CEB9-478C-919D-711F1A7CCA56.plist │ │ │ │ │ └── Info.plist │ │ │ │ └── xcschemes │ │ │ │ ├── ReactiveKit-iOS.xcscheme │ │ │ │ ├── ReactiveKit-macOS.xcscheme │ │ │ │ ├── ReactiveKit-tvOS.xcscheme │ │ │ │ └── ReactiveKit-watchOS.xcscheme │ │ │ ├── ReactiveKit.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ │ ├── ReactiveKit │ │ │ ├── Info.plist │ │ │ └── ReactiveKit.h │ │ │ ├── ReactiveKitTests │ │ │ └── Info.plist │ │ │ ├── Sources │ │ │ ├── Bindable.swift │ │ │ ├── Connectable.swift │ │ │ ├── Deallocatable.swift │ │ │ ├── Disposable.swift │ │ │ ├── Event.swift │ │ │ ├── ExecutionContext.swift │ │ │ ├── Lock.swift │ │ │ ├── NoError.swift │ │ │ ├── Observer.swift │ │ │ ├── Optional.swift │ │ │ ├── Property.swift │ │ │ ├── Reactive.swift │ │ │ ├── Result.swift │ │ │ ├── Signal.swift │ │ │ ├── SignalProtocol+Arities.swift │ │ │ ├── SignalProtocol.swift │ │ │ ├── Subjects.swift │ │ │ └── Typealiases.swift │ │ │ └── Tests │ │ │ └── ReactiveKitTests │ │ │ ├── Helpers.swift │ │ │ ├── PropertyTests.swift │ │ │ ├── ResultTests.swift │ │ │ └── SignalTests.swift │ ├── LICENSE │ ├── Package.pins │ ├── Package.swift │ ├── Playground.playground │ │ ├── Pages │ │ │ ├── Key Value Observing.xcplaygroundpage │ │ │ │ └── Contents.swift │ │ │ └── Table View Binding.xcplaygroundpage │ │ │ │ └── Contents.swift │ │ └── contents.xcplayground │ ├── README.md │ ├── Sources │ │ ├── BNDProtocolProxyBase │ │ │ ├── BNDProtocolProxyBase.m │ │ │ └── include │ │ │ │ └── BNDProtocolProxyBase.h │ │ └── Bond │ │ │ ├── AppKit │ │ │ ├── NSAppearanceCustomization.swift │ │ │ ├── NSButton.swift │ │ │ ├── NSColorWell.swift │ │ │ ├── NSControl.swift │ │ │ ├── NSImageView.swift │ │ │ ├── NSMenuItem.swift │ │ │ ├── NSPopUpButton.swift │ │ │ ├── NSProgressIndicator.swift │ │ │ ├── NSSegmentedControl.swift │ │ │ ├── NSSlider.swift │ │ │ ├── NSStatusBarButton.swift │ │ │ ├── NSTableView.swift │ │ │ ├── NSTextField.swift │ │ │ ├── NSTextView.swift │ │ │ └── NSView.swift │ │ │ ├── Bond.swift │ │ │ ├── Collections │ │ │ ├── Observable2DArray.swift │ │ │ ├── ObservableArray.swift │ │ │ ├── ObservableDictionary.swift │ │ │ └── ObservableSet.swift │ │ │ ├── DataSource.swift │ │ │ ├── DynamicSubject.swift │ │ │ ├── Observable.swift │ │ │ ├── ProtocolProxy.swift │ │ │ ├── QueryableDataSource.swift │ │ │ ├── Shared │ │ │ ├── CALayer.swift │ │ │ ├── NSLayoutConstraint.swift │ │ │ ├── NSObject+KVO.swift │ │ │ ├── NSObject.swift │ │ │ ├── NotificationCenter.swift │ │ │ └── SignalProtocol.swift │ │ │ └── UIKit │ │ │ ├── UIAccessibilityIdentification.swift │ │ │ ├── UIActivityIndicatorView.swift │ │ │ ├── UIApplication.swift │ │ │ ├── UIBarButtonItem.swift │ │ │ ├── UIBarItem.swift │ │ │ ├── UIButton.swift │ │ │ ├── UICollectionView.swift │ │ │ ├── UIControl.swift │ │ │ ├── UIDatePicker.swift │ │ │ ├── UIGestureRecognizer.swift │ │ │ ├── UIImageView.swift │ │ │ ├── UILabel.swift │ │ │ ├── UINavigationBar.swift │ │ │ ├── UINavigationItem.swift │ │ │ ├── UIProgressView.swift │ │ │ ├── UIRefreshControl.swift │ │ │ ├── UISegmentedControl.swift │ │ │ ├── UISlider.swift │ │ │ ├── UIStepper.swift │ │ │ ├── UISwitch.swift │ │ │ ├── UITableView.swift │ │ │ ├── UITextField.swift │ │ │ ├── UITextView.swift │ │ │ └── UIView.swift │ ├── Supporting Files │ │ ├── Bond-Info.plist │ │ ├── Bond.h │ │ └── BondTests-Info.plist │ └── Tests │ │ └── BondTests │ │ ├── BondTests.swift │ │ ├── DynamicSubjectTests.swift │ │ ├── Helpers.swift │ │ ├── NSObjectTests.swift │ │ ├── Observable2DArrayTests.swift │ │ ├── ObservableArrayTests.swift │ │ ├── ObservableSetTests.swift │ │ ├── ProtocolProxyTests.swift │ │ ├── UICollectionViewTests.swift │ │ ├── UIKitTests.swift │ │ └── UITableViewTests.swift │ ├── Diff.swift │ ├── .gitignore │ ├── .travis.yml │ ├── Configurations │ │ ├── Deployment-Targets.xcconfig │ │ ├── Universal-Framework-Target.xcconfig │ │ └── Universal-Target-Base.xcconfig │ ├── Diff.podspec │ ├── Diff.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── xcbaselines │ │ │ └── C9838FF01D29571000691BE8.xcbaseline │ │ │ │ ├── 5ACB3D1B-D608-4861-BD7C-4E5E202E879C.plist │ │ │ │ └── Info.plist │ │ │ └── xcschemes │ │ │ └── Diff.xcscheme │ ├── DiffTests │ │ ├── BatchUpdateTests.swift │ │ ├── DiffTests.swift │ │ ├── ExtendedPatchSortTests.swift │ │ ├── Info.plist │ │ ├── NestedDiffTests.swift │ │ ├── NestedExtendedDiffTests.swift │ │ ├── PatchApplyTests.swift │ │ └── PatchSortTests.swift │ ├── Examples │ │ └── TableViewExample │ │ │ ├── TableViewExample.xcodeproj │ │ │ ├── project.pbxproj │ │ │ ├── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ └── xcschemes │ │ │ │ └── TableViewExample.xcscheme │ │ │ └── TableViewExample │ │ │ ├── AppDelegate.swift │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ ├── NestedTableViewController.swift │ │ │ └── TableViewController.swift │ ├── Framework │ │ ├── Diff.h │ │ └── Info.plist │ ├── Graph.playground │ │ ├── Contents.swift │ │ ├── Sources │ │ │ ├── Arrows.swift │ │ │ ├── CharacterLabels.swift │ │ │ ├── Diff.swift │ │ │ ├── GraphView.swift │ │ │ ├── Patch.swift │ │ │ └── ViewController.swift │ │ └── contents.xcplayground │ ├── LICENSE │ ├── Package.swift │ ├── PerfTests │ │ ├── Benchmark │ │ │ ├── Benchmark.xcodeproj │ │ │ │ ├── Benchmark.xcworkspace │ │ │ │ │ └── contents.xcworkspacedata │ │ │ │ ├── project.pbxproj │ │ │ │ └── project.xcworkspace │ │ │ │ │ └── contents.xcworkspacedata │ │ │ ├── Benchmark.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ │ ├── Benchmark │ │ │ │ ├── AppDelegate.swift │ │ │ │ ├── Assets.xcassets │ │ │ │ │ └── AppIcon.appiconset │ │ │ │ │ │ └── Contents.json │ │ │ │ ├── Base.lproj │ │ │ │ │ ├── LaunchScreen.storyboard │ │ │ │ │ └── Main.storyboard │ │ │ │ ├── Dwifft.swift │ │ │ │ ├── Info.plist │ │ │ │ └── ViewController.swift │ │ │ ├── Cartfile │ │ │ └── Cartfile.resolved │ │ ├── PerfTests │ │ │ ├── build-script │ │ │ └── main.swift │ │ └── Utils │ │ │ ├── PerformanceTestUtils.swift │ │ │ └── Resources │ │ │ ├── Diff-new.swift │ │ │ └── Diff-old.swift │ ├── README.md │ ├── Sources │ │ ├── Diff+UIKit.swift │ │ ├── Diff.swift │ │ ├── ExtendedDiff.swift │ │ ├── ExtendedPatch+Apply.swift │ │ ├── ExtendedPatch.swift │ │ ├── GenericPatch.swift │ │ ├── LinkedList.swift │ │ ├── NestedDiff.swift │ │ ├── NestedExtendedDiff.swift │ │ ├── Patch+Apply.swift │ │ ├── Patch+Sort.swift │ │ └── Patch.swift │ └── codecov.yml │ ├── Freddy │ ├── .cocoadocs.yml │ ├── .gitignore │ ├── .ruby-version │ ├── .swift-version │ ├── .travis.yml │ ├── CONTRIBUTING.md │ ├── Configurations │ │ ├── Base.xcconfig │ │ ├── Debug.xcconfig │ │ ├── Framework.xcconfig │ │ ├── Release.xcconfig │ │ └── Tests.xcconfig │ ├── Freddy.podspec │ ├── Freddy.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ ├── Freddy.xcscheme │ │ │ ├── MobileFreddy.xcscheme │ │ │ ├── NanoFreddy.xcscheme │ │ │ └── TVFreddy.xcscheme │ ├── Gemfile │ ├── Gemfile.lock │ ├── LICENSE │ ├── Package.swift │ ├── README.md │ ├── README_Images │ │ ├── addErrorBreakpoint.png │ │ ├── addType.png │ │ ├── editBreakpoint.png │ │ └── projectNav_addBreakpoint.png │ ├── Resources │ │ └── scripts │ │ │ ├── publish_docs.sh │ │ │ └── validate_carthage.sh │ ├── Sources │ │ ├── Freddy.h │ │ ├── Info.plist │ │ ├── JSON.swift │ │ ├── JSONDecodable.swift │ │ ├── JSONEncodable.swift │ │ ├── JSONEncodingDetector.swift │ │ ├── JSONLiteralConvertible.swift │ │ ├── JSONParser.swift │ │ ├── JSONParsing.swift │ │ ├── JSONSerializing.swift │ │ └── JSONSubscripting.swift │ ├── Tests │ │ └── FreddyTests │ │ │ ├── Info.plist │ │ │ ├── JSONDecodableTests.swift │ │ │ ├── JSONEncodableTests.swift │ │ │ ├── JSONEncodingDetectorTests.swift │ │ │ ├── JSONParserTests.swift │ │ │ ├── JSONSerializingTests.swift │ │ │ ├── JSONSubscriptingTests.swift │ │ │ ├── JSONTests.swift │ │ │ ├── JSONTypeTests.swift │ │ │ ├── Person.swift │ │ │ ├── sample.JSON │ │ │ └── sampleNoWhiteSpace.JSON │ └── fastlane │ │ ├── Fastfile │ │ └── README.md │ └── ReactiveKit │ ├── .gitignore │ ├── .gitmodules │ ├── .swift-version │ ├── .travis.yml │ ├── Assets │ └── logo.png │ ├── LICENSE │ ├── Package.swift │ ├── Playground.playground │ ├── Contents.swift │ └── contents.xcplayground │ ├── README.md │ ├── ReactiveKit.podspec │ ├── ReactiveKit.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ ├── xcbaselines │ │ └── ECBCCDD91BEB6B9B00723476.xcbaseline │ │ │ ├── 15721443-CEB9-478C-919D-711F1A7CCA56.plist │ │ │ └── Info.plist │ │ └── xcschemes │ │ ├── ReactiveKit-iOS.xcscheme │ │ ├── ReactiveKit-macOS.xcscheme │ │ ├── ReactiveKit-tvOS.xcscheme │ │ └── ReactiveKit-watchOS.xcscheme │ ├── ReactiveKit.xcworkspace │ └── contents.xcworkspacedata │ ├── ReactiveKit │ ├── Info.plist │ └── ReactiveKit.h │ ├── ReactiveKitTests │ └── Info.plist │ ├── Sources │ ├── Bindable.swift │ ├── Connectable.swift │ ├── Deallocatable.swift │ ├── Disposable.swift │ ├── Event.swift │ ├── ExecutionContext.swift │ ├── Lock.swift │ ├── NoError.swift │ ├── Observer.swift │ ├── Optional.swift │ ├── Property.swift │ ├── Reactive.swift │ ├── Result.swift │ ├── Signal.swift │ ├── SignalProtocol+Arities.swift │ ├── SignalProtocol.swift │ ├── Subjects.swift │ └── Typealiases.swift │ └── Tests │ └── ReactiveKitTests │ ├── Helpers.swift │ ├── PropertyTests.swift │ ├── ResultTests.swift │ └── SignalTests.swift ├── Client ├── Client.h ├── Client.swift ├── HTTPMethod.swift ├── Info.plist ├── Request.swift ├── RequestParameters.swift ├── Result.swift └── Utilities.swift ├── Entities ├── Entities.h ├── Info.plist ├── Message.swift ├── Room.swift ├── Token.swift ├── User.swift └── Utilities.swift ├── Interactors ├── Authentication.swift ├── Info.plist ├── Interactors.h ├── RoomList.swift └── RoomMessages.swift ├── Networking ├── APIError.swift ├── Activity.swift ├── Client.swift ├── Info.plist ├── Message.swift ├── Networking.h ├── Room.swift ├── SafeClient.swift ├── Token.swift ├── User.swift └── Utilities.swift ├── README.md ├── ReactiveGitter.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── xcuserdata │ └── srdan.xcuserdatad │ └── xcschemes │ ├── ReactiveGitter.xcscheme │ └── xcschememanagement.plist ├── ReactiveGitter ├── AppDelegate.swift ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json ├── Base.lproj │ └── LaunchScreen.storyboard ├── Extensions.swift ├── Info.plist └── TokenService.swift ├── Scenes ├── Authentication.swift ├── Extensions.swift ├── Info.plist ├── RoomList.swift ├── RoomMessages.swift └── Scenes.h └── Views ├── Cells ├── MessageCell.swift └── RoomCell.swift ├── Info.plist ├── Utilities.swift ├── View Controllers ├── Authentication.swift ├── RoomList.swift └── RoomMessages.swift └── Views.h /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata 19 | 20 | ## Other 21 | *.xccheckout 22 | *.moved-aside 23 | *.xcuserstate 24 | *.xcscmblueprint 25 | .DS_Store 26 | 27 | ## Obj-C/Swift specific 28 | *.hmap 29 | *.ipa 30 | 31 | ## Playgrounds 32 | timeline.xctimeline 33 | playground.xcworkspace 34 | 35 | # Swift Package Manager 36 | # 37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 38 | # Packages/ 39 | .build/ 40 | 41 | # CocoaPods 42 | # 43 | # We recommend against adding the Pods directory to your .gitignore. However 44 | # you should judge for yourself, the pros and cons are mentioned at: 45 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 46 | # 47 | Pods/ 48 | 49 | # Carthage 50 | # 51 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 52 | # Carthage/Checkouts 53 | 54 | # Carthage/Build 55 | 56 | # fastlane 57 | # 58 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 59 | # screenshots whenever they are needed. 60 | # For more information about the recommended setup visit: 61 | # https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md 62 | 63 | fastlane/report.xml 64 | fastlane/screenshots 65 | -------------------------------------------------------------------------------- /Cartfile: -------------------------------------------------------------------------------- 1 | github "ReactiveKit/Bond" "master" 2 | github "ReactiveKit/ReactiveKit" 3 | github "bignerdranch/Freddy" ~> 3.0 4 | -------------------------------------------------------------------------------- /Cartfile.resolved: -------------------------------------------------------------------------------- 1 | github "wokalski/Diff.swift" "0.5.3" 2 | github "bignerdranch/Freddy" "3.0.2" 3 | github "ReactiveKit/ReactiveKit" "v3.5.3" 4 | github "ReactiveKit/Bond" "4821043a7dafff6567f58ebb27f8f894e7ea0836" 5 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | *.xccheckout 14 | *.moved-aside 15 | DerivedData 16 | *.hmap 17 | *.ipa 18 | *.xcuserstate 19 | .DS_Store 20 | 21 | # CocoaPods 22 | # 23 | # We recommend against adding the Pods directory to your .gitignore. However 24 | # you should judge for yourself, the pros and cons are mentioned at: 25 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 26 | # 27 | # Pods/ 28 | 29 | ## Playgrounds 30 | timeline.xctimeline 31 | playground.xcworkspace 32 | 33 | # Swift Package Manager 34 | .build/ 35 | 36 | # Carthage 37 | Carthage/Build 38 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "Carthage/Checkouts/ReactiveKit"] 2 | path = Carthage/Checkouts/ReactiveKit 3 | url = https://github.com/ReactiveKit/ReactiveKit.git 4 | [submodule "Carthage/Checkouts/Diff.swift"] 5 | path = Carthage/Checkouts/Diff.swift 6 | url = https://github.com/wokalski/Diff.swift.git 7 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/.swift-version: -------------------------------------------------------------------------------- 1 | 3.0 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | osx_image: xcode8.3 3 | 4 | # Travis is currently experiencing issues with Xcode builds: https://github.com/travis-ci/travis-ci/issues/6675#issuecomment-257964767 5 | # When this is resolved, remove the entire `before_install` block, as well as the `travis_retry` command below. 6 | before_install: 7 | - export IOS_SIMULATOR_UDID=`instruments -s devices | grep "iPhone 7 (10.1" | awk -F '[ ]' '{print $4}' | awk -F '[\[]' '{print $2}' | sed 's/.$//'` 8 | - echo $IOS_SIMULATOR_UDID 9 | - open -a "simulator" --args -CurrentDeviceUDID $IOS_SIMULATOR_UDID 10 | 11 | install: 12 | - gem install xcpretty 13 | 14 | script: 15 | - set -o pipefail && travis_retry xcodebuild -project Bond.xcodeproj -scheme Bond-iOS -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 7,OS=10.1' test | xcpretty 16 | - swift test --parallel 17 | 18 | after_success: 19 | - bash <(curl -s https://codecov.io/bash) 20 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Bond-App/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Bond-App 4 | // 5 | // Created by Srdan Rasic on 29/08/16. 6 | // Copyright © 2016 Swift Bond. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 17 | window = UIWindow(frame: UIScreen.main.bounds) 18 | window?.rootViewController = UIViewController() 19 | window?.makeKeyAndVisible() 20 | return true 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Bond-App/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Bond-App/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIRequiredDeviceCapabilities 26 | 27 | armv7 28 | 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Bond.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | 3 | s.name = "Bond" 4 | s.version = "6.2.6" 5 | s.summary = "A Swift binding framework" 6 | 7 | s.description = <<-DESC 8 | Bond is a Swift reactive binding framework that takes binding concept to a whole new level. 9 | It's simple, powerful, type-safe and multi-paradigm - just like Swift. 10 | 11 | Bond is also a framework that bridges the gap between the reactive and imperative paradigms. 12 | You can use it as a standalone framework to simplify your state changes with bindings and reactive data sources, 13 | but you can also use it with ReactiveKit to complement your reactive data flows with bindings and 14 | reactive delegates and data sources. 15 | DESC 16 | 17 | s.homepage = "https://github.com/SwiftBond/Bond" 18 | s.license = { :type => "MIT", :file => "LICENSE" } 19 | s.author = { "Srdan Rasic" => "srdan.rasic@gmail.com" } 20 | s.social_media_url = "http://twitter.com/srdanrasic" 21 | s.ios.deployment_target = "8.0" 22 | s.osx.deployment_target = "10.10" 23 | s.tvos.deployment_target = "9.0" 24 | s.source = { :git => "https://github.com/SwiftBond/Bond.git", :tag => "6.2.6" } 25 | s.source_files = "Sources/**/*.{h,m,swift}", "Supporting Files/Bond.h" 26 | s.ios.exclude_files = "Sources/Bond/AppKit" 27 | s.tvos.exclude_files = "Sources/Bond/AppKit" 28 | s.osx.exclude_files = "Sources/Bond/UIKit" 29 | s.pod_target_xcconfig = { "OTHER_SWIFT_FLAGS" => "-DBUILDING_WITH_XCODE $(inherited)" } 30 | s.requires_arc = true 31 | 32 | s.dependency "ReactiveKit", "~> 3.5.3" 33 | s.dependency "Diff", "~> 0.4" 34 | 35 | end 36 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Bond.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Bond.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Bond/NSObject+Bond.h: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #import 26 | 27 | @interface NSObject (Bond) 28 | - (void)_bnd_dealloc; 29 | @end 30 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Bond/NSObject+Bond.m: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #import "NSObject+Bond.h" 26 | 27 | @implementation NSObject (Bond) 28 | 29 | - (void)_bnd_dealloc { 30 | 31 | SEL selector = NSSelectorFromString(@"_bnd_swift_dealloc"); 32 | if ([self respondsToSelector:selector]) { 33 | ((void (*)(id, SEL))[self methodForSelector:selector])(self, selector); 34 | } 35 | [self _bnd_dealloc]; 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Cartfile: -------------------------------------------------------------------------------- 1 | github "ReactiveKit/ReactiveKit" ~> 3.5.3 2 | github "wokalski/Diff.swift" 3 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Cartfile.resolved: -------------------------------------------------------------------------------- 1 | github "wokalski/Diff.swift" "0.5.3" 2 | github "ReactiveKit/ReactiveKit" "v3.5.3" 3 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | *.xccheckout 14 | *.moved-aside 15 | DerivedData 16 | *.hmap 17 | *.ipa 18 | *.xcuserstate 19 | 20 | **/Carthage/Checkouts 21 | **/Carthage/Build 22 | 23 | #SPM 24 | .build/ 25 | .DS_Store 26 | 27 | #Vim 28 | *.swp 29 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Configurations/Deployment-Targets.xcconfig: -------------------------------------------------------------------------------- 1 | IPHONEOS_DEPLOYMENT_TARGET = 8.0 2 | MACOSX_DEPLOYMENT_TARGET = 10.10 3 | TVOS_DEPLOYMENT_TARGET = 9.0 4 | WATCHOS_DEPLOYMENT_TARGET = 3.0 5 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Configurations/Universal-Framework-Target.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Universal-Target-Base.xcconfig" 2 | 3 | // OSX-specific default settings 4 | FRAMEWORK_VERSION[sdk=macosx*] = A 5 | COMBINE_HIDPI_IMAGES[sdk=macosx*] = YES 6 | 7 | // iOS-specific default settings 8 | TARGETED_DEVICE_FAMILY[sdk=iphonesimulator*] = 1,2 9 | TARGETED_DEVICE_FAMILY[sdk=iphone*] = 1,2 10 | 11 | // TV-specific default settings 12 | TARGETED_DEVICE_FAMILY[sdk=appletvsimulator*] = 3 13 | TARGETED_DEVICE_FAMILY[sdk=appletv*] = 3 14 | 15 | // Watch-specific default settings 16 | TARGETED_DEVICE_FAMILY[sdk=watchsimulator*] = 4 17 | TARGETED_DEVICE_FAMILY[sdk=watch*] = 4 18 | 19 | ENABLE_BITCODE[sdk=macosx*] = NO 20 | ENABLE_BITCODE[sdk=watchsimulator*] = YES 21 | ENABLE_BITCODE[sdk=watch*] = YES 22 | ENABLE_BITCODE[sdk=iphonesimulator*] = NO 23 | ENABLE_BITCODE[sdk=iphone*] = YES 24 | ENABLE_BITCODE[sdk=appletvsimulator*] = YES 25 | ENABLE_BITCODE[sdk=appletv*] = YES 26 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Configurations/Universal-Target-Base.xcconfig: -------------------------------------------------------------------------------- 1 | SUPPORTED_PLATFORMS = macosx iphonesimulator iphoneos watchos watchsimulator appletvos appletvsimulator 2 | VALID_ARCHS[sdk=macosx*] = i386 x86_64 3 | VALID_ARCHS[sdk=iphoneos*] = arm64 armv7 armv7s 4 | VALID_ARCHS[sdk=iphonesimulator*] = i386 x86_64 5 | VALID_ARCHS[sdk=watchos*] = armv7k 6 | VALID_ARCHS[sdk=watchsimulator*] = i386 7 | VALID_ARCHS[sdk=appletv*] = arm64 8 | VALID_ARCHS[sdk=appletvsimulator*] = x86_64 9 | 10 | // Dynamic linking uses different default copy paths 11 | LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = $(inherited) '@executable_path/../Frameworks' '@loader_path/../Frameworks' 12 | LD_RUNPATH_SEARCH_PATHS[sdk=iphoneos*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 13 | LD_RUNPATH_SEARCH_PATHS[sdk=iphonesimulator*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 14 | LD_RUNPATH_SEARCH_PATHS[sdk=watchos*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 15 | LD_RUNPATH_SEARCH_PATHS[sdk=watchsimulator*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 16 | LD_RUNPATH_SEARCH_PATHS[sdk=appletvos*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 17 | LD_RUNPATH_SEARCH_PATHS[sdk=appletvsimulator*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 18 | 19 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Diff.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "Diff" 3 | s.version = "0.5.3" 4 | s.summary = "The fastest Diff library in Swift. Includes UICollectionView/UITableView utils." 5 | s.homepage = "https://github.com/wokalski/Diff.swift" 6 | s.description = <<-DESC 7 | This library generates differences between any two Collections (and Strings). It uses a fast algorithm (O((N+M)*D)). It also includes utilities for UICollectionView/UITableView. 8 | DESC 9 | 10 | s.license = { :type => "MIT", :file => "LICENSE" } 11 | 12 | s.author = { "Wojtek Czekalski" => "me@wczekalski.com" } 13 | s.social_media_url = "https://twitter.com/wokalski" 14 | 15 | s.platforms = { :ios => "8.0", :osx => "10.10", :tvos => "9.0", :watchos => "3.0" } 16 | s.osx.exclude_files = "Sources/Diff+UIKit.swift" 17 | s.watchos.exclude_files = "Sources/Diff+UIKit.swift" 18 | 19 | s.source = { :git => "https://github.com/wokalski/Diff.swift.git", :tag => "0.5.3" } 20 | 21 | s.source_files = "Sources" 22 | end 23 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Diff.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Diff.xcodeproj/xcshareddata/xcbaselines/C9838FF01D29571000691BE8.xcbaseline/5ACB3D1B-D608-4861-BD7C-4E5E202E879C.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | classNames 6 | 7 | BatchUpdateTests 8 | 9 | testCellsPerformance() 10 | 11 | com.apple.XCTPerformanceMetric_WallClockTime 12 | 13 | baselineAverage 14 | 0.14952 15 | baselineIntegrationDisplayName 16 | Local Baseline 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Diff.xcodeproj/xcshareddata/xcbaselines/C9838FF01D29571000691BE8.xcbaseline/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | runDestinationsByUUID 6 | 7 | 5ACB3D1B-D608-4861-BD7C-4E5E202E879C 8 | 9 | localComputer 10 | 11 | busSpeedInMHz 12 | 100 13 | cpuCount 14 | 1 15 | cpuKind 16 | Intel Core i5 17 | cpuSpeedInMHz 18 | 2900 19 | logicalCPUCoresPerPackage 20 | 4 21 | modelCode 22 | MacBookPro12,1 23 | physicalCPUCoresPerPackage 24 | 2 25 | platformIdentifier 26 | com.apple.platform.macosx 27 | 28 | targetArchitecture 29 | i386 30 | targetDevice 31 | 32 | modelCode 33 | iPhone5,1 34 | platformIdentifier 35 | com.apple.platform.iphonesimulator 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/DiffTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Examples/TableViewExample/TableViewExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Examples/TableViewExample/TableViewExample/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | } 43 | ], 44 | "info" : { 45 | "version" : 1, 46 | "author" : "xcode" 47 | } 48 | } -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Examples/TableViewExample/TableViewExample/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UIStatusBarTintParameters 32 | 33 | UINavigationBar 34 | 35 | Style 36 | UIBarStyleDefault 37 | Translucent 38 | 39 | 40 | 41 | UISupportedInterfaceOrientations 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationLandscapeLeft 45 | UIInterfaceOrientationLandscapeRight 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Framework/Diff.h: -------------------------------------------------------------------------------- 1 | // 2 | // Diff.swift.h 3 | // Diff.swift 4 | // 5 | // Created by Wojciech Czekalski on 26.04.2016. 6 | // Copyright © 2016 wczekalski. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for Diff.swift. 12 | FOUNDATION_EXPORT double Diff_swiftVersionNumber; 13 | 14 | //! Project version string for Diff.swift. 15 | FOUNDATION_EXPORT const unsigned char Diff_swiftVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Framework/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.5.3 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSHumanReadableCopyright 24 | Copyright © 2016 wczekalski. All rights reserved. 25 | NSPrincipalClass 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Graph.playground/Contents.swift: -------------------------------------------------------------------------------- 1 | //: Playground - noun: a place where people can play 2 | 3 | import UIKit 4 | import PlaygroundSupport 5 | 6 | let viewController = GraphViewController(string1: "kitten", string2: "sitting") 7 | viewController.view.frame = CGRect(x: 0, y: 0, width: 500, height: 500) 8 | PlaygroundPage.current.liveView = viewController.view 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Graph.playground/Sources/CharacterLabels.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CharacterLabels.swift 3 | // Graph 4 | // 5 | // Created by Wojciech Czekalski on 25.03.2016. 6 | // Copyright © 2016 wczekalski. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | public extension String { 12 | func length() -> Int { 13 | return lengthOfBytes(using: String.Encoding.utf8) 14 | } 15 | 16 | func characterLabels(withFrames frames: [CGRect]) -> [UILabel] { 17 | let characters = self.characters 18 | 19 | guard characters.count == frames.count else { 20 | return [] 21 | } 22 | 23 | let labels = characters.map { $0.label() } 24 | let sizes = labels.map { $0.frame.size } 25 | let frames = inset(rects: frames, to: sizes) 26 | zip(labels, frames).forEach { label, frame in label.frame = frame } 27 | return labels 28 | } 29 | } 30 | 31 | extension Character { 32 | func label() -> UILabel { 33 | let l = UILabel() 34 | l.textColor = .white 35 | l.text = String(self) 36 | l.sizeToFit() 37 | return l 38 | } 39 | } 40 | 41 | func inset(rects: [CGRect], to: [CGSize]) -> [CGRect] { 42 | return zip(to, rects).map { size, rect -> CGRect in 43 | return rect.inset(to: size) 44 | } 45 | } 46 | 47 | extension CGRect { 48 | func inset(to size: CGSize) -> CGRect { 49 | return self.insetBy(dx: (self.width - size.width) / 2, dy: (self.height - size.height) / 2).standardized 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Graph.playground/Sources/Diff.swift: -------------------------------------------------------------------------------- 1 | ../../Sources/Diff.swift -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Graph.playground/Sources/Patch.swift: -------------------------------------------------------------------------------- 1 | ../../Sources/Patch.swift -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Graph.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Wojtek Czekalski 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Package.swift: -------------------------------------------------------------------------------- 1 | import PackageDescription 2 | 3 | let package = Package( 4 | name: "Diff", 5 | dependencies: [] 6 | ) 7 | 8 | products.append(Product(name: "Diff", type: .Library(.Dynamic), modules: ["Diff"])) 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark.xcodeproj/Benchmark.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Dwifft.swift: -------------------------------------------------------------------------------- 1 | 2 | import Dwifft 3 | 4 | func performDwifft(_ a: [Character], b: [Character]) { 5 | _ = dwifft(a, b: b) 6 | } 7 | 8 | private func dwifft(_ a: [Character], b: [Character]) -> Dwifft.Diff { 9 | return a.diff(b) 10 | } 11 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Benchmark 4 | // 5 | // Created by Wojciech Czekalski on 26.04.2016. 6 | // Copyright © 2016 wczekalski. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ViewController: UIViewController { 12 | 13 | override func viewDidAppear(_ animated: Bool) { 14 | super.viewDidAppear(animated) 15 | 16 | let from = pathForFile(fileName: "Diff-old") 17 | let to = pathForFile(fileName: "Diff-new") 18 | 19 | let dwifft = performDiff(from, toFilePath: to, diffFunc: performDwifft) 20 | let diff = performDiff(from, toFilePath: to, diffFunc: diffSwift) 21 | 22 | print("Both libraries are compiled with -O -whole-module-optimization\n") 23 | print(" | Diff.swift | Dwifft ") 24 | print("---------|------------|--------") 25 | print(" same | \(diff.same) | \(dwifft.same)") 26 | print(" created | \(diff.created) | \(dwifft.created)") 27 | print(" deleted | \(diff.deleted) | \(dwifft.deleted)") 28 | print(" diff | \(diff.changed) | \(dwifft.changed)") 29 | } 30 | } 31 | 32 | func pathForFile(fileName: String) -> String { 33 | return Bundle.main.path(forResource: fileName, ofType: "swift")! 34 | } 35 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Cartfile: -------------------------------------------------------------------------------- 1 | github "jflinter/Dwifft" 2 | 3 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Cartfile.resolved: -------------------------------------------------------------------------------- 1 | github "jflinter/Dwifft" "0.5" 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/PerfTests/build-script: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | mkdir -p build/lib 4 | mkdir -p build/Resources 5 | 6 | swiftc -emit-library -emit-module -module-name Diff ../../Sources/* -Xlinker -install_name -Xlinker @rpath/libDiff.dylib -o ./build/lib/libDiff.dylib -g 7 | swiftc ./main.swift ../Utils/PerformanceTestUtils.swift -o ./build/main -module-link-name Diff -I "./build/lib/" -L "./build/lib" -Xlinker -rpath -Xlinker @loader_path/lib -Xlinker -lDiff -g 8 | 9 | cp ../Utils/Resources/* ./build/Resources/ 10 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/PerfTests/PerfTests/main.swift: -------------------------------------------------------------------------------- 1 | // 2 | // main.swift 3 | // PerfTests 4 | // 5 | // Created by Wojciech Czekalski on 27.04.2016. 6 | // Copyright © 2016 wczekalski. All rights reserved. 7 | // 8 | 9 | /** 10 | This is a test file 11 | */ 12 | 13 | let resourcesPath = proccessPath().appending("/Resources/") 14 | let from = resourcesPath.appending("Diff-old.swift") 15 | let to = resourcesPath.appending("Diff-new.swift") 16 | let diff = performDiff(fromFilePath: from, toFilePath: to, repeatCount: 5, diffFunc: diffSwift) 17 | 18 | print(" | Diff.swift |") 19 | print("-----------------------") 20 | print(" same | \(diff.same) |") 21 | print(" created | \(diff.created) |") 22 | print(" deleted | \(diff.deleted) |") 23 | print(" diff | \(diff.changed) |") 24 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/Sources/Patch+Apply.swift: -------------------------------------------------------------------------------- 1 | 2 | public extension RangeReplaceableCollection where Self.Iterator.Element: Equatable { 3 | 4 | public func apply(_ patch: [Patch]) -> Self { 5 | var mutableSelf = self 6 | 7 | for change in patch { 8 | switch change { 9 | case let .insertion(i, element): 10 | let target = mutableSelf.index(mutableSelf.startIndex, offsetBy: IndexDistance(IntMax(i))) 11 | mutableSelf.insert(element, at: target) 12 | case let .deletion(i): 13 | let target = mutableSelf.index(mutableSelf.startIndex, offsetBy: IndexDistance(IntMax(i))) 14 | mutableSelf.remove(at: target) 15 | } 16 | } 17 | 18 | return mutableSelf 19 | } 20 | } 21 | 22 | public extension String { 23 | 24 | public func apply(_ patch: [Patch]) -> String { 25 | var mutableSelf = self 26 | 27 | for change in patch { 28 | switch change { 29 | case let .insertion(i, element): 30 | let target = mutableSelf.index(mutableSelf.startIndex, offsetBy: IndexDistance(IntMax(i))) 31 | mutableSelf.insert(element, at: target) 32 | case let .deletion(i): 33 | let target = mutableSelf.index(mutableSelf.startIndex, offsetBy: IndexDistance(IntMax(i))) 34 | mutableSelf.remove(at: target) 35 | } 36 | } 37 | 38 | return mutableSelf 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/Diff.swift/codecov.yml: -------------------------------------------------------------------------------- 1 | codecov: 2 | notify: 3 | require_ci_to_pass: true 4 | comment: 5 | behavior: default 6 | layout: header, diff 7 | require_changes: false 8 | coverage: 9 | precision: 2 10 | range: 11 | - 70.0 12 | - 100.0 13 | round: down 14 | status: 15 | changes: false 16 | patch: false 17 | project: false 18 | parsers: 19 | gcov: 20 | branch_detection: 21 | conditional: true 22 | loop: true 23 | macro: false 24 | method: false 25 | javascript: 26 | enable_partials: false 27 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | *.xccheckout 14 | *.moved-aside 15 | DerivedData 16 | *.hmap 17 | *.ipa 18 | *.xcuserstate 19 | .DS_Store 20 | 21 | # CocoaPods 22 | # 23 | # We recommend against adding the Pods directory to your .gitignore. However 24 | # you should judge for yourself, the pros and cons are mentioned at: 25 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 26 | # 27 | # Pods/ 28 | 29 | # Carthage 30 | # 31 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 32 | # Carthage/Checkouts 33 | 34 | Carthage/Build 35 | 36 | # Swift Package Manager 37 | 38 | .build 39 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/.gitmodules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveKit/ReactiveGitter/3064285e567aa6489414d7fe2b7fade81ae785bf/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/.gitmodules -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/.swift-version: -------------------------------------------------------------------------------- 1 | 3.0-GM-CANDIDATE 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | osx_image: xcode8.2 3 | 4 | script: 5 | - set -o pipefail && xcodebuild -project ReactiveKit.xcodeproj -scheme ReactiveKit-iOS -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6s,OS=10.0' test | xcpretty 6 | - set -o pipefail && swift build 7 | - set -o pipefail && swift test 8 | 9 | after_success: 10 | - bash <(curl -s https://codecov.io/bash) 11 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/Assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveKit/ReactiveGitter/3064285e567aa6489414d7fe2b7fade81ae785bf/Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/Assets/logo.png -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 ReactiveKit 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/Package.swift: -------------------------------------------------------------------------------- 1 | import PackageDescription 2 | 3 | let package = Package( 4 | name: "ReactiveKit" 5 | ) 6 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/Playground.playground/Contents.swift: -------------------------------------------------------------------------------- 1 | //: Playground - noun: a place where people can play 2 | 3 | import ReactiveKit 4 | import PlaygroundSupport 5 | 6 | var p: Property! = Property(1) 7 | weak var wp: Property? = p 8 | 9 | SafeSignal.interval(1, queue: .main).map { $0 }.debug("test signal").bind(to: p) 10 | 11 | DispatchQueue.main.after(when: 3.3) { 12 | p = nil 13 | wp 14 | } 15 | 16 | PlaygroundPage.current.needsIndefiniteExecution = true 17 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/Playground.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/ReactiveKit.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "ReactiveKit" 3 | s.version = "3.5.3" 4 | s.summary = "A Swift Reactive Programming Framework" 5 | s.description = "ReactiveKit is a Swift framework for reactive and functional reactive programming." 6 | s.homepage = "https://github.com/ReactiveKit/ReactiveKit" 7 | s.license = 'MIT' 8 | s.author = { "Srdan Rasic" => "srdan.rasic@gmail.com" } 9 | s.source = { :git => "https://github.com/ReactiveKit/ReactiveKit.git", :tag => "v3.5.3" } 10 | 11 | s.ios.deployment_target = '8.0' 12 | s.osx.deployment_target = '10.9' 13 | s.watchos.deployment_target = '2.0' 14 | s.tvos.deployment_target = '9.0' 15 | 16 | s.source_files = 'Sources/*.swift', 'ReactiveKit/*.{h,m}' 17 | s.requires_arc = true 18 | end 19 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/ReactiveKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/ReactiveKit.xcodeproj/xcshareddata/xcbaselines/ECBCCDD91BEB6B9B00723476.xcbaseline/15721443-CEB9-478C-919D-711F1A7CCA56.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | classNames 6 | 7 | SignalTests 8 | 9 | testPerformance() 10 | 11 | com.apple.XCTPerformanceMetric_WallClockTime 12 | 13 | baselineAverage 14 | 0.077 15 | baselineIntegrationDisplayName 16 | Local Baseline 17 | maxPercentRelativeStandardDeviation 18 | 20 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/ReactiveKit.xcodeproj/xcshareddata/xcbaselines/ECBCCDD91BEB6B9B00723476.xcbaseline/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | runDestinationsByUUID 6 | 7 | 15721443-CEB9-478C-919D-711F1A7CCA56 8 | 9 | localComputer 10 | 11 | busSpeedInMHz 12 | 100 13 | cpuCount 14 | 1 15 | cpuKind 16 | Intel Core i5 17 | cpuSpeedInMHz 18 | 2700 19 | logicalCPUCoresPerPackage 20 | 4 21 | modelCode 22 | MacBookPro12,1 23 | physicalCPUCoresPerPackage 24 | 2 25 | platformIdentifier 26 | com.apple.platform.macosx 27 | 28 | targetArchitecture 29 | x86_64 30 | targetDevice 31 | 32 | modelCode 33 | iPhone9,2 34 | platformIdentifier 35 | com.apple.platform.iphonesimulator 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/ReactiveKit.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/ReactiveKit/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 3.5.3 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/ReactiveKit/ReactiveKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2015 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #import 26 | 27 | //! Project version number for ReactiveKit. 28 | FOUNDATION_EXPORT double ReactiveKitVersionNumber; 29 | 30 | //! Project version string for ReactiveKit. 31 | FOUNDATION_EXPORT const unsigned char ReactiveKitVersionString[]; 32 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/ReactiveKitTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/Sources/NoError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | /// An error type that cannot be instantiated. Used to make signals non-failable. 26 | public enum NoError: Error { 27 | } 28 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Carthage/Checkouts/ReactiveKit/Tests/ReactiveKitTests/ResultTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ResultTests.swift 3 | // ReactiveKit 4 | // 5 | // Created by Srdan Rasic on 22/10/2016. 6 | // Copyright © 2016 Srdan Rasic. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | import ReactiveKit 11 | 12 | class ResultTests: XCTestCase { 13 | 14 | func testSuccess() { 15 | let result = Result(5) 16 | 17 | XCTAssert(result.error == nil) 18 | XCTAssert(result.value != nil && result.value! == 5) 19 | } 20 | 21 | func testFailured() { 22 | let result = Result(.Error) 23 | 24 | XCTAssert(result.error != nil && result.error! == .Error) 25 | XCTAssert(result.value == nil) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015-2016 Bond 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Package.pins: -------------------------------------------------------------------------------- 1 | { 2 | "autoPin": true, 3 | "pins": [ 4 | { 5 | "package": "Diff", 6 | "reason": null, 7 | "repositoryURL": "https://github.com/wokalski/Diff.swift.git", 8 | "version": "0.5.3" 9 | }, 10 | { 11 | "package": "ReactiveKit", 12 | "reason": null, 13 | "repositoryURL": "https://github.com/ReactiveKit/ReactiveKit.git", 14 | "version": "3.5.1" 15 | } 16 | ], 17 | "version": 1 18 | } -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Package.swift: -------------------------------------------------------------------------------- 1 | import PackageDescription 2 | 3 | let package = Package( 4 | name: "Bond", 5 | targets: [ 6 | Target(name: "BNDProtocolProxyBase"), 7 | Target(name: "Bond", dependencies: ["BNDProtocolProxyBase"]) 8 | ], 9 | dependencies: [ 10 | .Package(url: "https://github.com/ReactiveKit/ReactiveKit.git", versions: Version(3, 5, 3)...self).observe { event in 16 | print(event) 17 | } 18 | 19 | test.test = "a" 20 | test.test = nil 21 | test.test = "g" 22 | 23 | Signal1.just("c").bind(to: test.dynamic(keyPath: "test", ofType: Optional.self)) 24 | 25 | test = nil 26 | weakTest 27 | 28 | //: [Next](@next) 29 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Playground.playground/Pages/Table View Binding.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- 1 | //: Playground - noun: a place where people can play 2 | 3 | import UIKit 4 | import Bond 5 | import ReactiveKit 6 | import PlaygroundSupport 7 | 8 | // Turn on the Assistant Editor to see the table view! 9 | 10 | let me = UIView() 11 | 12 | extension UIView { 13 | 14 | open override var bindingExecutionContext: ExecutionContext { 15 | return .immediate 16 | } 17 | } 18 | 19 | //: [Next](@next) 20 | 21 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Playground.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/AppKit/NSAppearanceCustomization.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Tony Arnold (@tonyarnold) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #if os(macOS) 26 | 27 | import AppKit 28 | import ReactiveKit 29 | 30 | public extension ReactiveExtensions where Base: NSObject, Base: NSAppearanceCustomization { 31 | 32 | public var appearance: Bond { 33 | return bond(context: .immediateOnMain) { $0.appearance = $1 } 34 | } 35 | } 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/AppKit/NSColorWell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Tony Arnold (@tonyarnold) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #if os(macOS) 26 | 27 | import AppKit 28 | import ReactiveKit 29 | 30 | public extension ReactiveExtensions where Base: NSColorWell { 31 | 32 | public var color: DynamicSubject { 33 | return dynamicSubject( 34 | signal: controlEvent.eraseType(), 35 | triggerEventOnSetting: false, 36 | get: { $0.color }, 37 | set: { $0.color = $1 } 38 | ) 39 | } 40 | 41 | public var isBordered: Bond { 42 | return bond { $0.isBordered = $1 } 43 | } 44 | } 45 | 46 | #endif 47 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/AppKit/NSMenuItem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Tony Arnold (@tonyarnold) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #if os(macOS) 26 | 27 | import AppKit 28 | import ReactiveKit 29 | 30 | extension NSMenuItem: BindingExecutionContextProvider { 31 | public var bindingExecutionContext: ExecutionContext { return .immediateOnMain } 32 | } 33 | 34 | public extension ReactiveExtensions where Base: NSMenuItem { 35 | 36 | public var state: Bond { 37 | return bond { $0.state = $1 } 38 | } 39 | 40 | public var isEnabled: Bond { 41 | return bond { $0.isEnabled = $1 } 42 | } 43 | } 44 | 45 | #endif 46 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/AppKit/NSStatusBarButton.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Tony Arnold (@tonyarnold) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #if os(macOS) 26 | 27 | import AppKit 28 | import ReactiveKit 29 | 30 | public extension ReactiveExtensions where Base: NSStatusBarButton { 31 | 32 | public var appearsDisabled: Bond { 33 | return bond { $0.appearsDisabled = $1 } 34 | } 35 | } 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/AppKit/NSTextView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Tony Arnold (@tonyarnold) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #if os(macOS) 26 | 27 | import AppKit 28 | import ReactiveKit 29 | 30 | public extension ReactiveExtensions where Base: NSTextView { 31 | 32 | public var string: DynamicSubject { 33 | let notificationName = NSNotification.Name.NSTextDidChange 34 | return dynamicSubject( 35 | signal: NotificationCenter.default.reactive.notification(name: notificationName, object: base).eraseType(), 36 | get: { $0.string }, 37 | set: { $0.string = $1 } 38 | ) 39 | } 40 | } 41 | 42 | #endif 43 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/Observable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import ReactiveKit 26 | 27 | public typealias Observable = Property 28 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/QueryableDataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2017 Tony Arnold (@tonyarnold) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | public protocol QueryableDataSourceProtocol: DataSourceProtocol { 26 | associatedtype Item 27 | associatedtype Index 28 | 29 | func item(at index: Index) -> Item 30 | } 31 | 32 | extension Array: QueryableDataSourceProtocol { 33 | 34 | public func item(at index: Int) -> Iterator.Element { 35 | return self[index] 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/Shared/CALayer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import QuartzCore 26 | import ReactiveKit 27 | 28 | extension CALayer: BindingExecutionContextProvider { 29 | public var bindingExecutionContext: ExecutionContext { return .immediateOnMain } 30 | } 31 | 32 | public extension ReactiveExtensions where Base: CALayer { 33 | 34 | public var opacity: Bond { 35 | return bond { $0.opacity = $1 } 36 | } 37 | 38 | public var backgroundColor: Bond { 39 | return bond { $0.backgroundColor = $1 } 40 | } 41 | 42 | public var contents: Bond { 43 | return bond { $0.contents = $1 } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/Shared/NSLayoutConstraint.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #if os(macOS) 26 | import AppKit 27 | #else 28 | import UIKit 29 | #endif 30 | 31 | import ReactiveKit 32 | 33 | extension NSLayoutConstraint: BindingExecutionContextProvider { 34 | public var bindingExecutionContext: ExecutionContext { return .immediateOnMain } 35 | } 36 | 37 | public extension ReactiveExtensions where Base: NSLayoutConstraint { 38 | 39 | public var isActive: Bond { 40 | return bond { $0.isActive = $1 } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/Shared/SignalProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SignalProtocol.swift 3 | // Bond 4 | // 5 | // Created by Srdan Rasic on 14/12/2016. 6 | // Copyright © 2016 Swift Bond. All rights reserved. 7 | // 8 | 9 | import ReactiveKit 10 | 11 | extension SignalProtocol { 12 | 13 | #if os(iOS) || os(tvOS) 14 | 15 | /// Fires an event on start and every `interval` seconds as long as the app is in foreground. 16 | /// Pauses when the app goes to background. Restarts when the app is back in foreground. 17 | public static func heartbeat(interval seconds: Double) -> Signal { 18 | let willEnterForeground = NotificationCenter.default.reactive.notification(name: .UIApplicationWillEnterForeground) 19 | let didEnterBackgorund = NotificationCenter.default.reactive.notification(name: .UIApplicationDidEnterBackground) 20 | return willEnterForeground.replace(with: ()).start(with: ()).flatMapLatest { () -> Signal in 21 | return Signal.interval(seconds, queue: .global()).replace(with: ()).start(with: ()).take(until: didEnterBackgorund) 22 | } 23 | } 24 | 25 | #endif 26 | } 27 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/UIKit/UIAccessibilityIdentification.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIAI.swift 3 | // Bond 4 | // 5 | // Created by Srdan Rasic on 02/04/2017. 6 | // Copyright © 2017 Swift Bond. All rights reserved. 7 | // 8 | 9 | #if os(iOS) || os(tvOS) 10 | 11 | import UIKit 12 | import ReactiveKit 13 | 14 | extension ReactiveExtensions where Base: Deallocatable, Base: UIAccessibilityIdentification { 15 | 16 | var accessibilityIdentifier: Bond { 17 | return bond(context: .immediateOnMain) { 18 | $0.accessibilityIdentifier = $1 19 | } 20 | } 21 | } 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/UIKit/UIApplication.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #if os(iOS) || os(tvOS) 26 | 27 | import UIKit 28 | import ReactiveKit 29 | 30 | public extension ReactiveExtensions where Base: UIApplication { 31 | 32 | #if os(iOS) 33 | public var isNetworkActivityIndicatorVisible: Bond { 34 | return bond { $0.isNetworkActivityIndicatorVisible = $1 } 35 | } 36 | #endif 37 | } 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/UIKit/UIDatePicker.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #if os(iOS) 26 | 27 | import UIKit 28 | import ReactiveKit 29 | 30 | public extension ReactiveExtensions where Base: UIDatePicker { 31 | 32 | public var date: DynamicSubject { 33 | return dynamicSubject( 34 | signal: controlEvents(.valueChanged).eraseType(), 35 | get: { $0.date }, 36 | set: { $0.date = $1 } 37 | ) 38 | } 39 | } 40 | 41 | extension UIDatePicker: BindableProtocol { 42 | 43 | public func bind(signal: Signal) -> Disposable { 44 | return reactive.date.bind(signal: signal) 45 | } 46 | } 47 | 48 | #endif 49 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/UIKit/UIGestureRecognizer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Sam Galizia (@sgalizia) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #if os(iOS) || os(tvOS) 26 | 27 | import UIKit 28 | import ReactiveKit 29 | 30 | extension UIGestureRecognizer: BindingExecutionContextProvider { 31 | public var bindingExecutionContext: ExecutionContext { return .immediateOnMain } 32 | } 33 | 34 | public extension ReactiveExtensions where Base: UIGestureRecognizer { 35 | 36 | public var isEnabled: Bond { 37 | return bond { $0.isEnabled = $1 } 38 | } 39 | } 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/UIKit/UIImageView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #if os(iOS) || os(tvOS) 26 | 27 | import UIKit 28 | import ReactiveKit 29 | 30 | public extension ReactiveExtensions where Base: UIImageView { 31 | 32 | public var image: Bond { 33 | return bond { $0.image = $1 } 34 | } 35 | } 36 | 37 | extension UIImageView: BindableProtocol { 38 | 39 | public func bind(signal: Signal) -> Disposable { 40 | return reactive.image.bind(signal: signal) 41 | } 42 | } 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/UIKit/UINavigationBar.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #if os(iOS) || os(tvOS) 26 | 27 | import UIKit 28 | import ReactiveKit 29 | 30 | public extension ReactiveExtensions where Base: UINavigationBar { 31 | 32 | public var barTintColor: Bond { 33 | return bond { $0.barTintColor = $1 } 34 | } 35 | } 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/UIKit/UINavigationItem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #if os(iOS) || os(tvOS) 26 | 27 | import UIKit 28 | import ReactiveKit 29 | 30 | extension UINavigationItem: BindingExecutionContextProvider { 31 | public var bindingExecutionContext: ExecutionContext { return .immediateOnMain } 32 | } 33 | 34 | public extension ReactiveExtensions where Base: UINavigationItem { 35 | 36 | public var title: Bond { 37 | return bond { $0.title = $1 } 38 | } 39 | } 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/UIKit/UIProgressView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #if os(iOS) || os(tvOS) 26 | 27 | import ReactiveKit 28 | import UIKit 29 | 30 | public extension ReactiveExtensions where Base: UIProgressView { 31 | 32 | public var progress: Bond { 33 | return bond { $0.progress = $1 } 34 | } 35 | } 36 | 37 | extension UIProgressView: BindableProtocol { 38 | 39 | public func bind(signal: Signal) -> Disposable { 40 | return reactive.progress.bind(signal: signal) 41 | } 42 | } 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/UIKit/UISlider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #if os(iOS) 26 | 27 | import UIKit 28 | import ReactiveKit 29 | 30 | public extension ReactiveExtensions where Base: UISlider { 31 | 32 | public var value: DynamicSubject { 33 | return dynamicSubject( 34 | signal: controlEvents(.valueChanged).eraseType(), 35 | get: { $0.value }, 36 | set: { $0.value = $1 } 37 | ) 38 | } 39 | } 40 | 41 | extension UISlider: BindableProtocol { 42 | 43 | public func bind(signal: Signal) -> Disposable { 44 | return reactive.value.bind(signal: signal) 45 | } 46 | } 47 | 48 | #endif 49 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/UIKit/UIStepper.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #if os(iOS) 26 | 27 | import UIKit 28 | import ReactiveKit 29 | 30 | public extension ReactiveExtensions where Base: UIStepper { 31 | 32 | public var value: DynamicSubject { 33 | return dynamicSubject( 34 | signal: controlEvents(.valueChanged).eraseType(), 35 | get: { $0.value }, 36 | set: { $0.value = $1 } 37 | ) 38 | } 39 | } 40 | 41 | extension UIStepper: BindableProtocol { 42 | 43 | public func bind(signal: Signal) -> Disposable { 44 | return reactive.value.bind(signal: signal) 45 | } 46 | } 47 | 48 | #endif 49 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Sources/Bond/UIKit/UISwitch.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #if os(iOS) 26 | 27 | import UIKit 28 | import ReactiveKit 29 | 30 | public extension ReactiveExtensions where Base: UISwitch { 31 | 32 | public var isOn: DynamicSubject { 33 | return dynamicSubject( 34 | signal: controlEvents(.valueChanged).eraseType(), 35 | get: { $0.isOn }, 36 | set: { $0.isOn = $1 } 37 | ) 38 | } 39 | } 40 | 41 | extension UISwitch: BindableProtocol { 42 | 43 | public func bind(signal: Signal) -> Disposable { 44 | return reactive.isOn.bind(signal: signal) 45 | } 46 | } 47 | 48 | #endif 49 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Supporting Files/Bond-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 6.2.5 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Supporting Files/Bond.h: -------------------------------------------------------------------------------- 1 | // 2 | // Bond.h 3 | // Bond 4 | // 5 | // Created by Srdan Rasic on 19/07/16. 6 | // Copyright © 2016 Swift Bond. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | //! Project version number for Bond. 13 | FOUNDATION_EXPORT double BondVersionNumber; 14 | 15 | //! Project version string for Bond. 16 | FOUNDATION_EXPORT const unsigned char BondVersionString[]; 17 | 18 | // In this header, you should import all the public headers of your framework using statements like #import 19 | 20 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Supporting Files/BondTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Bond/Tests/BondTests/BondTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BondTests.swift 3 | // Bond 4 | // 5 | // Created by Srdan Rasic on 19/09/16. 6 | // Copyright © 2016 Swift Bond. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | import ReactiveKit 11 | @testable import Bond 12 | 13 | private class DummyTarget: NSObject { 14 | var recordedElements: [Int] = [] 15 | } 16 | 17 | class BondTypeTests: XCTestCase { 18 | 19 | // Update closure is called on each next element 20 | func testExecutes() { 21 | let target = DummyTarget() 22 | let bond = Bond(target: target, context: .immediate) { target, element in 23 | target.recordedElements.append(element) 24 | } 25 | 26 | SafeSignal.sequence([1, 2, 3]).bind(to: bond) 27 | XCTAssert(target.recordedElements == [1, 2, 3]) 28 | } 29 | 30 | // Target is weakly referenced 31 | // Disposable is disposed when target is deallocated 32 | func testDisposesOnTargetDeallocation() { 33 | var target: DummyTarget! = DummyTarget() 34 | weak var weakTarget = target 35 | 36 | let bond = Bond(target: target, context: .immediate) { target, element in 37 | target.recordedElements.append(element) 38 | } 39 | 40 | let subject = PublishSubject1() 41 | 42 | let disposable = subject.bind(to: bond) 43 | 44 | subject.next(1) 45 | XCTAssert(weakTarget != nil) 46 | XCTAssert(disposable.isDisposed == false) 47 | XCTAssert(target.recordedElements == [1]) 48 | 49 | target = nil 50 | subject.next(2) 51 | XCTAssert(weakTarget == nil) 52 | XCTAssert(disposable.isDisposed == true) 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | *.xccheckout 14 | *.moved-aside 15 | DerivedData 16 | *.hmap 17 | *.ipa 18 | *.xcuserstate 19 | 20 | **/Carthage/Checkouts 21 | **/Carthage/Build 22 | 23 | #SPM 24 | .build/ 25 | .DS_Store 26 | 27 | #Vim 28 | *.swp 29 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Configurations/Deployment-Targets.xcconfig: -------------------------------------------------------------------------------- 1 | IPHONEOS_DEPLOYMENT_TARGET = 8.0 2 | MACOSX_DEPLOYMENT_TARGET = 10.10 3 | TVOS_DEPLOYMENT_TARGET = 9.0 4 | WATCHOS_DEPLOYMENT_TARGET = 3.0 5 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Configurations/Universal-Framework-Target.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Universal-Target-Base.xcconfig" 2 | 3 | // OSX-specific default settings 4 | FRAMEWORK_VERSION[sdk=macosx*] = A 5 | COMBINE_HIDPI_IMAGES[sdk=macosx*] = YES 6 | 7 | // iOS-specific default settings 8 | TARGETED_DEVICE_FAMILY[sdk=iphonesimulator*] = 1,2 9 | TARGETED_DEVICE_FAMILY[sdk=iphone*] = 1,2 10 | 11 | // TV-specific default settings 12 | TARGETED_DEVICE_FAMILY[sdk=appletvsimulator*] = 3 13 | TARGETED_DEVICE_FAMILY[sdk=appletv*] = 3 14 | 15 | // Watch-specific default settings 16 | TARGETED_DEVICE_FAMILY[sdk=watchsimulator*] = 4 17 | TARGETED_DEVICE_FAMILY[sdk=watch*] = 4 18 | 19 | ENABLE_BITCODE[sdk=macosx*] = NO 20 | ENABLE_BITCODE[sdk=watchsimulator*] = YES 21 | ENABLE_BITCODE[sdk=watch*] = YES 22 | ENABLE_BITCODE[sdk=iphonesimulator*] = NO 23 | ENABLE_BITCODE[sdk=iphone*] = YES 24 | ENABLE_BITCODE[sdk=appletvsimulator*] = YES 25 | ENABLE_BITCODE[sdk=appletv*] = YES 26 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Configurations/Universal-Target-Base.xcconfig: -------------------------------------------------------------------------------- 1 | SUPPORTED_PLATFORMS = macosx iphonesimulator iphoneos watchos watchsimulator appletvos appletvsimulator 2 | VALID_ARCHS[sdk=macosx*] = i386 x86_64 3 | VALID_ARCHS[sdk=iphoneos*] = arm64 armv7 armv7s 4 | VALID_ARCHS[sdk=iphonesimulator*] = i386 x86_64 5 | VALID_ARCHS[sdk=watchos*] = armv7k 6 | VALID_ARCHS[sdk=watchsimulator*] = i386 7 | VALID_ARCHS[sdk=appletv*] = arm64 8 | VALID_ARCHS[sdk=appletvsimulator*] = x86_64 9 | 10 | // Dynamic linking uses different default copy paths 11 | LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = $(inherited) '@executable_path/../Frameworks' '@loader_path/../Frameworks' 12 | LD_RUNPATH_SEARCH_PATHS[sdk=iphoneos*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 13 | LD_RUNPATH_SEARCH_PATHS[sdk=iphonesimulator*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 14 | LD_RUNPATH_SEARCH_PATHS[sdk=watchos*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 15 | LD_RUNPATH_SEARCH_PATHS[sdk=watchsimulator*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 16 | LD_RUNPATH_SEARCH_PATHS[sdk=appletvos*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 17 | LD_RUNPATH_SEARCH_PATHS[sdk=appletvsimulator*] = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 18 | 19 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Diff.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "Diff" 3 | s.version = "0.5.3" 4 | s.summary = "The fastest Diff library in Swift. Includes UICollectionView/UITableView utils." 5 | s.homepage = "https://github.com/wokalski/Diff.swift" 6 | s.description = <<-DESC 7 | This library generates differences between any two Collections (and Strings). It uses a fast algorithm (O((N+M)*D)). It also includes utilities for UICollectionView/UITableView. 8 | DESC 9 | 10 | s.license = { :type => "MIT", :file => "LICENSE" } 11 | 12 | s.author = { "Wojtek Czekalski" => "me@wczekalski.com" } 13 | s.social_media_url = "https://twitter.com/wokalski" 14 | 15 | s.platforms = { :ios => "8.0", :osx => "10.10", :tvos => "9.0", :watchos => "3.0" } 16 | s.osx.exclude_files = "Sources/Diff+UIKit.swift" 17 | s.watchos.exclude_files = "Sources/Diff+UIKit.swift" 18 | 19 | s.source = { :git => "https://github.com/wokalski/Diff.swift.git", :tag => "0.5.3" } 20 | 21 | s.source_files = "Sources" 22 | end 23 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Diff.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Diff.xcodeproj/xcshareddata/xcbaselines/C9838FF01D29571000691BE8.xcbaseline/5ACB3D1B-D608-4861-BD7C-4E5E202E879C.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | classNames 6 | 7 | BatchUpdateTests 8 | 9 | testCellsPerformance() 10 | 11 | com.apple.XCTPerformanceMetric_WallClockTime 12 | 13 | baselineAverage 14 | 0.14952 15 | baselineIntegrationDisplayName 16 | Local Baseline 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Diff.xcodeproj/xcshareddata/xcbaselines/C9838FF01D29571000691BE8.xcbaseline/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | runDestinationsByUUID 6 | 7 | 5ACB3D1B-D608-4861-BD7C-4E5E202E879C 8 | 9 | localComputer 10 | 11 | busSpeedInMHz 12 | 100 13 | cpuCount 14 | 1 15 | cpuKind 16 | Intel Core i5 17 | cpuSpeedInMHz 18 | 2900 19 | logicalCPUCoresPerPackage 20 | 4 21 | modelCode 22 | MacBookPro12,1 23 | physicalCPUCoresPerPackage 24 | 2 25 | platformIdentifier 26 | com.apple.platform.macosx 27 | 28 | targetArchitecture 29 | i386 30 | targetDevice 31 | 32 | modelCode 33 | iPhone5,1 34 | platformIdentifier 35 | com.apple.platform.iphonesimulator 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/DiffTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Examples/TableViewExample/TableViewExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Examples/TableViewExample/TableViewExample/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | } 43 | ], 44 | "info" : { 45 | "version" : 1, 46 | "author" : "xcode" 47 | } 48 | } -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Examples/TableViewExample/TableViewExample/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UIStatusBarTintParameters 32 | 33 | UINavigationBar 34 | 35 | Style 36 | UIBarStyleDefault 37 | Translucent 38 | 39 | 40 | 41 | UISupportedInterfaceOrientations 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationLandscapeLeft 45 | UIInterfaceOrientationLandscapeRight 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Framework/Diff.h: -------------------------------------------------------------------------------- 1 | // 2 | // Diff.swift.h 3 | // Diff.swift 4 | // 5 | // Created by Wojciech Czekalski on 26.04.2016. 6 | // Copyright © 2016 wczekalski. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for Diff.swift. 12 | FOUNDATION_EXPORT double Diff_swiftVersionNumber; 13 | 14 | //! Project version string for Diff.swift. 15 | FOUNDATION_EXPORT const unsigned char Diff_swiftVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Framework/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.5.3 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSHumanReadableCopyright 24 | Copyright © 2016 wczekalski. All rights reserved. 25 | NSPrincipalClass 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Graph.playground/Contents.swift: -------------------------------------------------------------------------------- 1 | //: Playground - noun: a place where people can play 2 | 3 | import UIKit 4 | import PlaygroundSupport 5 | 6 | let viewController = GraphViewController(string1: "kitten", string2: "sitting") 7 | viewController.view.frame = CGRect(x: 0, y: 0, width: 500, height: 500) 8 | PlaygroundPage.current.liveView = viewController.view 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Graph.playground/Sources/CharacterLabels.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CharacterLabels.swift 3 | // Graph 4 | // 5 | // Created by Wojciech Czekalski on 25.03.2016. 6 | // Copyright © 2016 wczekalski. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | public extension String { 12 | func length() -> Int { 13 | return lengthOfBytes(using: String.Encoding.utf8) 14 | } 15 | 16 | func characterLabels(withFrames frames: [CGRect]) -> [UILabel] { 17 | let characters = self.characters 18 | 19 | guard characters.count == frames.count else { 20 | return [] 21 | } 22 | 23 | let labels = characters.map { $0.label() } 24 | let sizes = labels.map { $0.frame.size } 25 | let frames = inset(rects: frames, to: sizes) 26 | zip(labels, frames).forEach { label, frame in label.frame = frame } 27 | return labels 28 | } 29 | } 30 | 31 | extension Character { 32 | func label() -> UILabel { 33 | let l = UILabel() 34 | l.textColor = .white 35 | l.text = String(self) 36 | l.sizeToFit() 37 | return l 38 | } 39 | } 40 | 41 | func inset(rects: [CGRect], to: [CGSize]) -> [CGRect] { 42 | return zip(to, rects).map { size, rect -> CGRect in 43 | return rect.inset(to: size) 44 | } 45 | } 46 | 47 | extension CGRect { 48 | func inset(to size: CGSize) -> CGRect { 49 | return self.insetBy(dx: (self.width - size.width) / 2, dy: (self.height - size.height) / 2).standardized 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Graph.playground/Sources/Diff.swift: -------------------------------------------------------------------------------- 1 | ../../Sources/Diff.swift -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Graph.playground/Sources/Patch.swift: -------------------------------------------------------------------------------- 1 | ../../Sources/Patch.swift -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Graph.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Wojtek Czekalski 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Package.swift: -------------------------------------------------------------------------------- 1 | import PackageDescription 2 | 3 | let package = Package( 4 | name: "Diff", 5 | dependencies: [] 6 | ) 7 | 8 | products.append(Product(name: "Diff", type: .Library(.Dynamic), modules: ["Diff"])) 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark.xcodeproj/Benchmark.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Dwifft.swift: -------------------------------------------------------------------------------- 1 | 2 | import Dwifft 3 | 4 | func performDwifft(_ a: [Character], b: [Character]) { 5 | _ = dwifft(a, b: b) 6 | } 7 | 8 | private func dwifft(_ a: [Character], b: [Character]) -> Dwifft.Diff { 9 | return a.diff(b) 10 | } 11 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Benchmark/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Benchmark 4 | // 5 | // Created by Wojciech Czekalski on 26.04.2016. 6 | // Copyright © 2016 wczekalski. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ViewController: UIViewController { 12 | 13 | override func viewDidAppear(_ animated: Bool) { 14 | super.viewDidAppear(animated) 15 | 16 | let from = pathForFile(fileName: "Diff-old") 17 | let to = pathForFile(fileName: "Diff-new") 18 | 19 | let dwifft = performDiff(from, toFilePath: to, diffFunc: performDwifft) 20 | let diff = performDiff(from, toFilePath: to, diffFunc: diffSwift) 21 | 22 | print("Both libraries are compiled with -O -whole-module-optimization\n") 23 | print(" | Diff.swift | Dwifft ") 24 | print("---------|------------|--------") 25 | print(" same | \(diff.same) | \(dwifft.same)") 26 | print(" created | \(diff.created) | \(dwifft.created)") 27 | print(" deleted | \(diff.deleted) | \(dwifft.deleted)") 28 | print(" diff | \(diff.changed) | \(dwifft.changed)") 29 | } 30 | } 31 | 32 | func pathForFile(fileName: String) -> String { 33 | return Bundle.main.path(forResource: fileName, ofType: "swift")! 34 | } 35 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Cartfile: -------------------------------------------------------------------------------- 1 | github "jflinter/Dwifft" 2 | 3 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/PerfTests/Benchmark/Cartfile.resolved: -------------------------------------------------------------------------------- 1 | github "jflinter/Dwifft" "0.5" 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/PerfTests/PerfTests/build-script: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | mkdir -p build/lib 4 | mkdir -p build/Resources 5 | 6 | swiftc -emit-library -emit-module -module-name Diff ../../Sources/* -Xlinker -install_name -Xlinker @rpath/libDiff.dylib -o ./build/lib/libDiff.dylib -g 7 | swiftc ./main.swift ../Utils/PerformanceTestUtils.swift -o ./build/main -module-link-name Diff -I "./build/lib/" -L "./build/lib" -Xlinker -rpath -Xlinker @loader_path/lib -Xlinker -lDiff -g 8 | 9 | cp ../Utils/Resources/* ./build/Resources/ 10 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/PerfTests/PerfTests/main.swift: -------------------------------------------------------------------------------- 1 | // 2 | // main.swift 3 | // PerfTests 4 | // 5 | // Created by Wojciech Czekalski on 27.04.2016. 6 | // Copyright © 2016 wczekalski. All rights reserved. 7 | // 8 | 9 | /** 10 | This is a test file 11 | */ 12 | 13 | let resourcesPath = proccessPath().appending("/Resources/") 14 | let from = resourcesPath.appending("Diff-old.swift") 15 | let to = resourcesPath.appending("Diff-new.swift") 16 | let diff = performDiff(fromFilePath: from, toFilePath: to, repeatCount: 5, diffFunc: diffSwift) 17 | 18 | print(" | Diff.swift |") 19 | print("-----------------------") 20 | print(" same | \(diff.same) |") 21 | print(" created | \(diff.created) |") 22 | print(" deleted | \(diff.deleted) |") 23 | print(" diff | \(diff.changed) |") 24 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/Sources/Patch+Apply.swift: -------------------------------------------------------------------------------- 1 | 2 | public extension RangeReplaceableCollection where Self.Iterator.Element: Equatable { 3 | 4 | public func apply(_ patch: [Patch]) -> Self { 5 | var mutableSelf = self 6 | 7 | for change in patch { 8 | switch change { 9 | case let .insertion(i, element): 10 | let target = mutableSelf.index(mutableSelf.startIndex, offsetBy: IndexDistance(IntMax(i))) 11 | mutableSelf.insert(element, at: target) 12 | case let .deletion(i): 13 | let target = mutableSelf.index(mutableSelf.startIndex, offsetBy: IndexDistance(IntMax(i))) 14 | mutableSelf.remove(at: target) 15 | } 16 | } 17 | 18 | return mutableSelf 19 | } 20 | } 21 | 22 | public extension String { 23 | 24 | public func apply(_ patch: [Patch]) -> String { 25 | var mutableSelf = self 26 | 27 | for change in patch { 28 | switch change { 29 | case let .insertion(i, element): 30 | let target = mutableSelf.index(mutableSelf.startIndex, offsetBy: IndexDistance(IntMax(i))) 31 | mutableSelf.insert(element, at: target) 32 | case let .deletion(i): 33 | let target = mutableSelf.index(mutableSelf.startIndex, offsetBy: IndexDistance(IntMax(i))) 34 | mutableSelf.remove(at: target) 35 | } 36 | } 37 | 38 | return mutableSelf 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Diff.swift/codecov.yml: -------------------------------------------------------------------------------- 1 | codecov: 2 | notify: 3 | require_ci_to_pass: true 4 | comment: 5 | behavior: default 6 | layout: header, diff 7 | require_changes: false 8 | coverage: 9 | precision: 2 10 | range: 11 | - 70.0 12 | - 100.0 13 | round: down 14 | status: 15 | changes: false 16 | patch: false 17 | project: false 18 | parsers: 19 | gcov: 20 | branch_detection: 21 | conditional: true 22 | loop: true 23 | macro: false 24 | method: false 25 | javascript: 26 | enable_partials: false 27 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/.cocoadocs.yml: -------------------------------------------------------------------------------- 1 | highlight-font: '"Cabrito", "Lucida Bright", "Georgia", serif' 2 | body: '"Cabrito Sans", "Lucida Grande", "Helvetica", sans-serif' 3 | 4 | highlight-color: "#F4B028" 5 | highlight-dark-color: "#E15829" 6 | darker-color: "#6A8136" 7 | darker-dark-color: "#444440" 8 | background-color: "#F5F4F1" 9 | alt-link-color: "#E15829" 10 | warning-color: "#E15829" 11 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | *.xccheckout 14 | *.moved-aside 15 | DerivedData 16 | *.hmap 17 | *.ipa 18 | *.xcuserstate 19 | .DS_Store 20 | 21 | # CocoaPods 22 | # 23 | # We recommend against adding the Pods directory to your .gitignore. However 24 | # you should judge for yourself, the pros and cons are mentioned at: 25 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 26 | # 27 | # Pods/ 28 | 29 | docs/ 30 | 31 | # Swift Package Manager 32 | # 33 | .build/ 34 | Packages/ 35 | 36 | # Carthage 37 | Carthage/Build 38 | report.xml 39 | fastlane/test_output 40 | fastlane/build_output 41 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/.ruby-version: -------------------------------------------------------------------------------- 1 | 2.2.1 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/.swift-version: -------------------------------------------------------------------------------- 1 | swift-2.2-SNAPSHOT-2015-12-22-a 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | osx_image: xcode8 3 | cache: bundler 4 | rvm: 2.2.1 5 | install: 6 | - bundle install 7 | - brew outdated carthage || brew upgrade carthage 8 | script: 9 | - bundle exec fastlane travis 10 | notifications: 11 | slack: 12 | secure: VHcEZcTuVR3gfHIcM9jcxrXgE3tkVIT4gWDLpnK7O4em86dCpaVkLDwr0UcQYxvqGS1J8pQqGZCwyOBsdgaItX52eRDMIez/384B56Vl6eufdLAcwWELIEtHyFkJ6XUjmASICaeeb8SpF/rj89/AXoHU6c8shY13NKtoBBZCGq8= 13 | env: 14 | global: 15 | secure: fgx97DOi3+wTHwfyo1LhsXtQolZltBmZFKCfyeq9IWqvJ0wCvFXE3QllD66369LzC5Fz/ipPRwqsd0nH393Nq1xFLAjdZkOhVAc65GjNjKfBQsaKcsIn0/AXd0RIKimzmvBAMHSh0jy3tBKrEQVCJtR6dF6nRoQNC80TxLoDrKg= 16 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Pull requests are very welcome! 2 | 3 | Any new code or feature that is added should be tested. 4 | 5 | In general, we like these [guidelines](https://swift.org/contributing/#contributing-code) for contributing to an open source project. 6 | Though, we will be honest in saying that these rules will not be tirelessly defended. 7 | 8 | If you run into bugs, design problems, or have a suggestion, please create a Github issue. 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/Configurations/Base.xcconfig: -------------------------------------------------------------------------------- 1 | COPY_PHASE_STRIP = NO 2 | ALWAYS_SEARCH_USER_PATHS = NO 3 | GCC_DYNAMIC_NO_PIC = NO 4 | GCC_NO_COMMON_BLOCKS = YES 5 | GCC_C_LANGUAGE_STANDARD = gnu11 6 | CLANG_CXX_LANGUAGE_STANDARD = gnu++0x 7 | CLANG_CXX_LIBRARY = libc++ 8 | CLANG_ENABLE_MODULES = YES 9 | CLANG_ENABLE_OBJC_ARC = YES 10 | ENABLE_STRICT_OBJC_MSGSEND = YES 11 | CLANG_WARN_EMPTY_BODY = YES 12 | CLANG_WARN_BOOL_CONVERSION = YES 13 | CLANG_WARN_CONSTANT_CONVERSION = YES 14 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES 15 | CLANG_WARN_ENUM_CONVERSION = YES 16 | CLANG_WARN_INT_CONVERSION = YES 17 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR 18 | GCC_WARN_SIGN_COMPARE = YES 19 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE 20 | CLANG_WARN_UNREACHABLE_CODE = YES 21 | GCC_WARN_UNUSED_FUNCTION = YES 22 | GCC_WARN_UNUSED_VARIABLE = YES 23 | CLANG_ENABLE_MODULES = YES 24 | CLANG_ENABLE_OBJC_ARC = YES 25 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR 26 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES 27 | GCC_WARN_UNDECLARED_SELECTOR = YES 28 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR 29 | CLANG_WARN_INFINITE_RECURSION = YES 30 | CLANG_WARN_SUSPICIOUS_MOVE = YES 31 | 32 | CURRENT_PROJECT_VERSION = 3.0.0 33 | VERSION_INFO_PREFIX = 34 | VERSIONING_SYSTEM = apple-generic 35 | 36 | MACOSX_DEPLOYMENT_TARGET = 10.9 37 | IPHONEOS_DEPLOYMENT_TARGET = 8.0 38 | WATCHOS_DEPLOYMENT_TARGET = 2.0 39 | TVOS_DEPLOYMENT_TARGET = 9.0 40 | 41 | ENABLE_BITCODE = YES 42 | ENABLE_BITCODE[sdk=macosx*] = NO 43 | 44 | CODE_SIGN_IDENTITY[sdk=macosx*] = 45 | CODE_SIGN_IDENTITY[sdk=iphoneos*] = 46 | CODE_SIGN_IDENTITY[sdk=appletvos*] = 47 | CODE_SIGN_IDENTITY[sdk=watchos*] = 48 | 49 | SWIFT_VERSION = 3.0 50 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/Configurations/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Base.xcconfig" 2 | 3 | ONLY_ACTIVE_ARCH = YES 4 | DEBUG_INFORMATION_FORMAT = dwarf 5 | ENABLE_TESTABILITY = YES 6 | VALIDATE_PRODUCT = NO 7 | GCC_OPTIMIZATION_LEVEL = 0 8 | ENABLE_NS_ASSERTIONS = YES 9 | GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1 10 | SWIFT_OPTIMIZATION_LEVEL = -Onone 11 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/Configurations/Framework.xcconfig: -------------------------------------------------------------------------------- 1 | APPLICATION_EXTENSION_API_ONLY = YES 2 | COMBINE_HIDPI_IMAGES = YES 3 | 4 | INSTALL_PATH = $(LOCAL_LIBRARY_DIR)/Frameworks 5 | SKIP_INSTALL = YES 6 | 7 | DYLIB_COMPATIBILITY_VERSION = 1 8 | DYLIB_CURRENT_VERSION = 1 9 | DYLIB_INSTALL_NAME_BASE = @rpath 10 | 11 | LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = $(inherited) @executable_path/../Frameworks @loader_path/Frameworks 12 | LD_RUNPATH_SEARCH_PATHS[sdk=iphoneos*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks 13 | LD_RUNPATH_SEARCH_PATHS[sdk=iphonesimulator*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks 14 | LD_RUNPATH_SEARCH_PATHS[sdk=appletvos*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks 15 | LD_RUNPATH_SEARCH_PATHS[sdk=appletvsimulator*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks 16 | LD_RUNPATH_SEARCH_PATHS[sdk=watchos*] = $(inherited) @executable_path/Frameworks 17 | LD_RUNPATH_SEARCH_PATHS[sdk=watchsimulator*] = $(inherited) @executable_path/Frameworks 18 | 19 | DEFINES_MODULE = YES 20 | FRAMEWORK_VERSION = A 21 | INFOPLIST_FILE = Sources/Info.plist 22 | PRODUCT_BUNDLE_IDENTIFIER = com.bignerdranch.$(TARGET_NAME) 23 | PRODUCT_NAME = Freddy 24 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/Configurations/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Base.xcconfig" 2 | 3 | ONLY_ACTIVE_ARCH = NO 4 | DEBUG_INFORMATION_FORMAT = dwarf-with-dsym 5 | ENABLE_TESTABILITY = NO 6 | VALIDATE_PRODUCT = YES 7 | GCC_OPTIMIZATION_LEVEL = s 8 | ENABLE_NS_ASSERTIONS = NO 9 | GCC_PREPROCESSOR_DEFINITIONS = 10 | SWIFT_OPTIMIZATION_LEVEL = -Owholemodule 11 | COPY_PHASE_STRIP = YES 12 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/Configurations/Tests.xcconfig: -------------------------------------------------------------------------------- 1 | COMBINE_HIDPI_IMAGES = YES 2 | 3 | LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = $(inherited) @executable_path/../Frameworks @loader_path/../Frameworks 4 | LD_RUNPATH_SEARCH_PATHS[sdk=iphoneos*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks 5 | LD_RUNPATH_SEARCH_PATHS[sdk=iphonesimulator*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks 6 | LD_RUNPATH_SEARCH_PATHS[sdk=appletvos*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks 7 | LD_RUNPATH_SEARCH_PATHS[sdk=appletvsimulator*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks 8 | 9 | INFOPLIST_FILE = Tests/Info.plist 10 | PRODUCT_BUNDLE_IDENTIFIER = com.bignerdranch.$(TARGET_NAME) 11 | PRODUCT_NAME = $(TARGET_NAME) 12 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/Freddy.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | 3 | s.name = "Freddy" 4 | s.version = "3.0.0" 5 | s.summary = "A JSON parsing library written in Swift" 6 | 7 | s.description = <<-DESC 8 | Freddy is a reusable framework for parsing JSON in Swift. 9 | Its primary goal is to faciliate the safe parsing of JSON, 10 | while also preserving the ease of use presented by parsing 11 | JSON in Objective-C. 12 | DESC 13 | 14 | s.homepage = "https://github.com/bignerdranch/Freddy" 15 | 16 | s.license = { :type => "MIT", :file => "LICENSE" } 17 | 18 | s.authors = {"Matt Mathias" => "mattm@bignerdranch.com", 19 | "John Gallagher" => "jgallagher@bignerdranch.com", 20 | "Zachary Waldowski" => "zachary@bignerdranch.com" } 21 | 22 | s.ios.deployment_target = "8.0" 23 | s.osx.deployment_target = "10.10" 24 | s.watchos.deployment_target = "2.0" 25 | s.tvos.deployment_target = "9.0" 26 | 27 | s.source = {:git => "https://github.com/bignerdranch/Freddy.git", :tag => "#{s.version}"} 28 | s.source_files = "Sources/**/*.{h,swift}" 29 | 30 | s.requires_arc = true 31 | s.pod_target_xcconfig = { 'SWIFT_VERSION' => '3.0' } 32 | end 33 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/Freddy.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | ruby '2.2.1' 3 | 4 | gem 'fastlane' 5 | gem 'cocoapods' 6 | gem 'xcpretty' 7 | gem 'jazzy' 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Big Nerd Ranch Inc 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/Package.swift: -------------------------------------------------------------------------------- 1 | import PackageDescription 2 | 3 | let package = Package( 4 | name: "Freddy" 5 | ) 6 | 7 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/README_Images/addErrorBreakpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveKit/ReactiveGitter/3064285e567aa6489414d7fe2b7fade81ae785bf/Carthage/Checkouts/Freddy/README_Images/addErrorBreakpoint.png -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/README_Images/addType.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveKit/ReactiveGitter/3064285e567aa6489414d7fe2b7fade81ae785bf/Carthage/Checkouts/Freddy/README_Images/addType.png -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/README_Images/editBreakpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveKit/ReactiveGitter/3064285e567aa6489414d7fe2b7fade81ae785bf/Carthage/Checkouts/Freddy/README_Images/editBreakpoint.png -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/README_Images/projectNav_addBreakpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveKit/ReactiveGitter/3064285e567aa6489414d7fe2b7fade81ae785bf/Carthage/Checkouts/Freddy/README_Images/projectNav_addBreakpoint.png -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/Resources/scripts/publish_docs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_BRANCH" == "master" ]; then 4 | echo -e "Generating Jazzy output \n" 5 | jazzy --swift-version 3.0 -m Freddy -g "https://github.com/bignerdranch/Freddy" -a "Big Nerd Ranch" -u "https://github.com/bignerdranch" --module-version=3.0.0 -r "http://bignerdranch.github.io/Freddy/" 6 | 7 | echo -e "Moving into docs directory \n" 8 | pushd docs 9 | 10 | echo -e "Creating gh-pages repo \n" 11 | git init 12 | git config user.email "travis@travis-ci.org" 13 | git config user.name "travis-ci" 14 | 15 | echo -e "Adding new docs \n" 16 | git add -A 17 | git commit -m "Publish docs from successful Travis build of $TRAVIS_COMMIT" 18 | git push --force --quiet "https://${GITHUB_ACCESS_TOKEN}@github.com/bignerdranch/Freddy" master:gh-pages > /dev/null 2>&1 19 | echo -e "Published latest docs.\n" 20 | 21 | echo -e "Moving out of docs clone and cleaning up" 22 | popd 23 | fi 24 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/Resources/scripts/validate_carthage.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Bootstraps Carthage to validate that everything builds as expected. 4 | # thanks to abbeycode/UnzipKit for example 5 | # 6 | 7 | EXIT_CODE=0 8 | 9 | clone_project() { 10 | local BRANCH_NAME BUILD_DIR 11 | if [[ $CIRCLECI ]]; then 12 | BRANCH_NAME=$CIRCLE_BRANCH 13 | BUILD_DIR=$(pwd) 14 | elif [[ $TRAVIS ]]; then 15 | BRANCH_NAME=$TRAVIS_BRANCH 16 | BUILD_DIR=$TRAVIS_BUILD_DIR 17 | else 18 | BUILD_DIR="$HOME/workspace/CoreDataStack" 19 | BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) 20 | echo "=================Not Running in CI=================" 21 | fi 22 | 23 | echo "=================Creating Cartfile=================" 24 | echo "git \"$BUILD_DIR\" \"$BRANCH_NAME\"" > ./Cartfile 25 | } 26 | 27 | bootstrap() { 28 | echo "=================Bootstrapping Carthage=================" 29 | carthage bootstrap --configuration Debug 30 | EXIT_CODE=$? 31 | } 32 | 33 | validate() { 34 | echo "=================Checking for build products=================" 35 | 36 | if [ ! -d "Carthage/Build/iOS/CoreDataStack.framework" ]; then 37 | echo "=================iOS Library failed to build with Carthage=================" 38 | EXIT_CODE=1 39 | fi 40 | 41 | if [ ! -d "Carthage/Build/tvOS/CoreDataStack.framework" ]; then 42 | echo "=================iOS Library failed to build with Carthage=================" 43 | EXIT_CODE=1 44 | fi 45 | } 46 | 47 | clean_up() { 48 | echo "=================Cleaning Up=================" 49 | rm ./Cartfile 50 | rm ./Cartfile.resolved 51 | rm -rf ./Carthage 52 | } 53 | 54 | clone_project 55 | bootstrap 56 | validate 57 | clean_up 58 | exit $EXIT_CODE 59 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/Sources/Freddy.h: -------------------------------------------------------------------------------- 1 | // 2 | // Freddy.h 3 | // Freddy 4 | // 5 | // Created by Matthew D. Mathias on 3/25/15. 6 | // Copyright © 2015 Big Nerd Ranch. Licensed under MIT. 7 | // 8 | 9 | //! Project version number for Freddy. 10 | extern double FreddyVersionNumber; 11 | 12 | //! Project version string for Freddy. 13 | extern const unsigned char FreddyVersionString[]; 14 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/Sources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSHumanReadableCopyright 24 | Copyright © 2015 Big Nerd Ranch. All rights reserved. 25 | 26 | 27 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/Tests/FreddyTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/Tests/FreddyTests/Person.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Person.swift 3 | // FreddyTests 4 | // 5 | // Created by Matthew D. Mathias on 3/21/15. 6 | // Copyright © 2015 Big Nerd Ranch. Licensed under MIT. 7 | // 8 | 9 | import Freddy 10 | 11 | public struct Person: CustomStringConvertible { 12 | public enum EyeColor: String { 13 | case Brown = "brown" 14 | case Blue = "blue" 15 | case Green = "green" 16 | } 17 | 18 | public let name: String 19 | public var age: Int 20 | public let eyeColor: EyeColor 21 | public let spouse: Bool 22 | 23 | public var description: String { 24 | return "Name: \(name), age: \(age), married: \(spouse)" 25 | } 26 | } 27 | 28 | extension Person.EyeColor: JSONDecodable {} 29 | extension Person.EyeColor: JSONEncodable {} 30 | 31 | extension Person: JSONDecodable { 32 | public init(json value: JSON) throws { 33 | name = try value.getString(at: "name") 34 | age = try value.getInt(at: "age") 35 | eyeColor = try value.decode(at: "eyeColor") 36 | spouse = try value.getBool(at: "spouse") 37 | } 38 | } 39 | 40 | extension Person: JSONEncodable { 41 | public func toJSON() -> JSON { 42 | return .dictionary(["name": .string(name), "age": .int(age), "eyeColor": eyeColor.toJSON(), "spouse": .bool(spouse)]) 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/Tests/FreddyTests/sample.JSON: -------------------------------------------------------------------------------- 1 | { 2 | "success" : true, 3 | "key" : null, 4 | "people" : [ 5 | { 6 | "name" : "Matt Mathias", 7 | "spouse" : true, 8 | "eyeColor" : "brown", 9 | "age" : 32 10 | }, 11 | { 12 | "spouse" : true, 13 | "name" : "Drew Mathias", 14 | "eyeColor" : "blue", 15 | "age" : 33 16 | }, 17 | { 18 | "eyeColor" : "green", 19 | "age" : 25, 20 | "name" : "Sergeant Pepper", 21 | "spouse" : false 22 | } 23 | ], 24 | "jobs" : [ 25 | "teacher", 26 | "programmer", 27 | "judge" 28 | ], 29 | "states" : { 30 | "Georgia" : [ 31 | 30301, 32 | 30302, 33 | 30303 34 | ], 35 | "Wisconsin" : [ 36 | 53000, 37 | 53001, 38 | 53002 39 | ] 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/Tests/FreddyTests/sampleNoWhiteSpace.JSON: -------------------------------------------------------------------------------- 1 | {"success":true,"key":null,"people":[{"name":"Matt Mathias","spouse":true,"eyeColor":"brown","age":32},{"spouse":true,"name":"Drew Mathias","eyeColor":"blue","age":33},{"eyeColor":"green","age":25,"name":"Sergeant Pepper","spouse":false}],"jobs":["teacher","programmer","judge"],"states":{"Georgia":[30301,30302,30303],"Wisconsin":[53000,53001,53002]}} -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/fastlane/Fastfile: -------------------------------------------------------------------------------- 1 | opt_out_usage 2 | 3 | ####################################################################### 4 | # Lifecycle Hooks 5 | ####################################################################### 6 | 7 | before_all do 8 | reset_simulators 9 | end 10 | 11 | after_all do |lane| 12 | # This block is called, only if the executed lane was successful 13 | end 14 | 15 | error do |lane, exception| 16 | end 17 | 18 | ####################################################################### 19 | # Lanes 20 | ####################################################################### 21 | 22 | desc "Perform the build steps on travis CI" 23 | lane :travis do 24 | macOS 25 | iOS 26 | tvOS 27 | validate_cocoapods 28 | validate_carthage 29 | end 30 | 31 | desc "Build Freddy for macOS" 32 | lane :macOS do 33 | scan(scheme: "Freddy") 34 | end 35 | 36 | desc "Build Freddy for iOS" 37 | lane :iOS do 38 | scan(scheme: "MobileFreddy", device: "iPhone 7 (10.0)") 39 | end 40 | 41 | desc "Build Freddy for tvOS" 42 | lane :tvOS do 43 | scan(scheme: "TVFreddy") 44 | end 45 | 46 | desc "Validate cocoapods podspec file" 47 | lane :validate_cocoapods do 48 | pod_lib_lint(quick: true) 49 | end 50 | 51 | desc "Validate carthage build" 52 | lane :validate_carthage do 53 | if is_ci? 54 | system("./Resources/scripts/validate_carthage.sh") 55 | else 56 | puts "This is a CI only lane, skipping" 57 | end 58 | end 59 | 60 | desc "Create docs" 61 | lane :create_docs do 62 | ## TODO: Implement once jazzy is working well for Xcode 8 63 | if is_ci? 64 | #system("./Resources/scripts/publish_docs.sh") 65 | puts "Would be creating docs here" 66 | else 67 | puts "This is a CI only lane, skipping" 68 | end 69 | end 70 | -------------------------------------------------------------------------------- /Carthage/Checkouts/Freddy/fastlane/README.md: -------------------------------------------------------------------------------- 1 | fastlane documentation 2 | ================ 3 | # Installation 4 | ``` 5 | sudo gem install fastlane 6 | ``` 7 | # Available Actions 8 | ### travis 9 | ``` 10 | fastlane travis 11 | ``` 12 | Perform the build steps on travis CI 13 | ### macOS 14 | ``` 15 | fastlane macOS 16 | ``` 17 | Build Freddy for macOS 18 | ### iOS 19 | ``` 20 | fastlane iOS 21 | ``` 22 | Build Freddy for iOS 23 | ### tvOS 24 | ``` 25 | fastlane tvOS 26 | ``` 27 | Build Freddy for tvOS 28 | ### validate_cocoapods 29 | ``` 30 | fastlane validate_cocoapods 31 | ``` 32 | Validate cocoapods podspec file 33 | ### validate_carthage 34 | ``` 35 | fastlane validate_carthage 36 | ``` 37 | Validate carthage build 38 | ### create_docs 39 | ``` 40 | fastlane create_docs 41 | ``` 42 | Create docs 43 | 44 | ---- 45 | 46 | This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run. 47 | More information about fastlane can be found on [https://fastlane.tools](https://fastlane.tools). 48 | The documentation of fastlane can be found on [GitHub](https://github.com/fastlane/fastlane/tree/master/fastlane). -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | *.xccheckout 14 | *.moved-aside 15 | DerivedData 16 | *.hmap 17 | *.ipa 18 | *.xcuserstate 19 | .DS_Store 20 | 21 | # CocoaPods 22 | # 23 | # We recommend against adding the Pods directory to your .gitignore. However 24 | # you should judge for yourself, the pros and cons are mentioned at: 25 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 26 | # 27 | # Pods/ 28 | 29 | # Carthage 30 | # 31 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 32 | # Carthage/Checkouts 33 | 34 | Carthage/Build 35 | 36 | # Swift Package Manager 37 | 38 | .build 39 | -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/.gitmodules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveKit/ReactiveGitter/3064285e567aa6489414d7fe2b7fade81ae785bf/Carthage/Checkouts/ReactiveKit/.gitmodules -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/.swift-version: -------------------------------------------------------------------------------- 1 | 3.0-GM-CANDIDATE 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | osx_image: xcode8.2 3 | 4 | script: 5 | - set -o pipefail && xcodebuild -project ReactiveKit.xcodeproj -scheme ReactiveKit-iOS -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6s,OS=10.0' test | xcpretty 6 | - set -o pipefail && swift build 7 | - set -o pipefail && swift test 8 | 9 | after_success: 10 | - bash <(curl -s https://codecov.io/bash) 11 | -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/Assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveKit/ReactiveGitter/3064285e567aa6489414d7fe2b7fade81ae785bf/Carthage/Checkouts/ReactiveKit/Assets/logo.png -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 ReactiveKit 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/Package.swift: -------------------------------------------------------------------------------- 1 | import PackageDescription 2 | 3 | let package = Package( 4 | name: "ReactiveKit" 5 | ) 6 | -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/Playground.playground/Contents.swift: -------------------------------------------------------------------------------- 1 | //: Playground - noun: a place where people can play 2 | 3 | import ReactiveKit 4 | import PlaygroundSupport 5 | 6 | var p: Property! = Property(1) 7 | weak var wp: Property? = p 8 | 9 | SafeSignal.interval(1, queue: .main).map { $0 }.debug("test signal").bind(to: p) 10 | 11 | DispatchQueue.main.after(when: 3.3) { 12 | p = nil 13 | wp 14 | } 15 | 16 | PlaygroundPage.current.needsIndefiniteExecution = true 17 | -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/Playground.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/ReactiveKit.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "ReactiveKit" 3 | s.version = "3.5.3" 4 | s.summary = "A Swift Reactive Programming Framework" 5 | s.description = "ReactiveKit is a Swift framework for reactive and functional reactive programming." 6 | s.homepage = "https://github.com/ReactiveKit/ReactiveKit" 7 | s.license = 'MIT' 8 | s.author = { "Srdan Rasic" => "srdan.rasic@gmail.com" } 9 | s.source = { :git => "https://github.com/ReactiveKit/ReactiveKit.git", :tag => "v3.5.3" } 10 | 11 | s.ios.deployment_target = '8.0' 12 | s.osx.deployment_target = '10.9' 13 | s.watchos.deployment_target = '2.0' 14 | s.tvos.deployment_target = '9.0' 15 | 16 | s.source_files = 'Sources/*.swift', 'ReactiveKit/*.{h,m}' 17 | s.requires_arc = true 18 | end 19 | -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/ReactiveKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/ReactiveKit.xcodeproj/xcshareddata/xcbaselines/ECBCCDD91BEB6B9B00723476.xcbaseline/15721443-CEB9-478C-919D-711F1A7CCA56.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | classNames 6 | 7 | SignalTests 8 | 9 | testPerformance() 10 | 11 | com.apple.XCTPerformanceMetric_WallClockTime 12 | 13 | baselineAverage 14 | 0.077 15 | baselineIntegrationDisplayName 16 | Local Baseline 17 | maxPercentRelativeStandardDeviation 18 | 20 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/ReactiveKit.xcodeproj/xcshareddata/xcbaselines/ECBCCDD91BEB6B9B00723476.xcbaseline/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | runDestinationsByUUID 6 | 7 | 15721443-CEB9-478C-919D-711F1A7CCA56 8 | 9 | localComputer 10 | 11 | busSpeedInMHz 12 | 100 13 | cpuCount 14 | 1 15 | cpuKind 16 | Intel Core i5 17 | cpuSpeedInMHz 18 | 2700 19 | logicalCPUCoresPerPackage 20 | 4 21 | modelCode 22 | MacBookPro12,1 23 | physicalCPUCoresPerPackage 24 | 2 25 | platformIdentifier 26 | com.apple.platform.macosx 27 | 28 | targetArchitecture 29 | x86_64 30 | targetDevice 31 | 32 | modelCode 33 | iPhone9,2 34 | platformIdentifier 35 | com.apple.platform.iphonesimulator 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/ReactiveKit.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/ReactiveKit/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 3.5.3 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/ReactiveKit/ReactiveKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2015 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #import 26 | 27 | //! Project version number for ReactiveKit. 28 | FOUNDATION_EXPORT double ReactiveKitVersionNumber; 29 | 30 | //! Project version string for ReactiveKit. 31 | FOUNDATION_EXPORT const unsigned char ReactiveKitVersionString[]; 32 | -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/ReactiveKitTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/Sources/NoError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | /// An error type that cannot be instantiated. Used to make signals non-failable. 26 | public enum NoError: Error { 27 | } 28 | -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/Sources/Optional.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2016 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | public protocol OptionalProtocol { 26 | associatedtype Wrapped 27 | var _unbox: Optional { get } 28 | init(nilLiteral: ()) 29 | init(_ some: Wrapped) 30 | } 31 | 32 | extension Optional: OptionalProtocol { 33 | public var _unbox: Optional { 34 | return self 35 | } 36 | } 37 | 38 | func ==(lhs: O, rhs: O) -> Bool 39 | where O.Wrapped: Equatable { 40 | return lhs._unbox == rhs._unbox 41 | } 42 | 43 | func !=(lhs: O, rhs: O) -> Bool 44 | where O.Wrapped: Equatable { 45 | return !(lhs == rhs) 46 | } 47 | -------------------------------------------------------------------------------- /Carthage/Checkouts/ReactiveKit/Tests/ReactiveKitTests/ResultTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ResultTests.swift 3 | // ReactiveKit 4 | // 5 | // Created by Srdan Rasic on 22/10/2016. 6 | // Copyright © 2016 Srdan Rasic. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | import ReactiveKit 11 | 12 | class ResultTests: XCTestCase { 13 | 14 | func testSuccess() { 15 | let result = Result(5) 16 | 17 | XCTAssert(result.error == nil) 18 | XCTAssert(result.value != nil && result.value! == 5) 19 | } 20 | 21 | func testFailured() { 22 | let result = Result(.Error) 23 | 24 | XCTAssert(result.error != nil && result.error! == .Error) 25 | XCTAssert(result.value == nil) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Client/Client.h: -------------------------------------------------------------------------------- 1 | // 2 | // Client.h 3 | // Client 4 | // 5 | // Created by Srdan Rasic on 07/05/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for Client. 12 | FOUNDATION_EXPORT double ClientVersionNumber; 13 | 14 | //! Project version string for Client. 15 | FOUNDATION_EXPORT const unsigned char ClientVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /Client/HTTPMethod.swift: -------------------------------------------------------------------------------- 1 | // 2 | // The MIT License (MIT) 3 | // 4 | // Copyright (c) 2017 Srdan Rasic (@srdanrasic) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | public enum HTTPMethod: String { 26 | case get = "GET" 27 | case put = "PUT" 28 | case post = "POST" 29 | case patch = "PATCH" 30 | case delete = "DELETE" 31 | case head = "HEAD" 32 | } 33 | -------------------------------------------------------------------------------- /Client/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Entities/Entities.h: -------------------------------------------------------------------------------- 1 | // 2 | // Entities.h 3 | // Entities 4 | // 5 | // Created by Srdan Rasic on 15/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for Entities. 12 | FOUNDATION_EXPORT double EntitiesVersionNumber; 13 | 14 | //! Project version string for Entities. 15 | FOUNDATION_EXPORT const unsigned char EntitiesVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /Entities/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Entities/Message.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Message.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 14/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import Freddy 10 | import Foundation 11 | 12 | public struct Message { 13 | public let id: String // ID of the message. 14 | public let text: String // Original message in plain-text/markdown. 15 | public let html: String // HTML formatted message. 16 | public let sent: Date // ISO formatted date of the message. 17 | public let editedAt: Date? // ISO formatted date of the message if edited. 18 | public let fromUser: User // (User)[user-resource] that sent the message. 19 | public let unread: Bool // Boolean that indicates if the current user has read the message. 20 | public let readBy: Int // Number of users that have read the message. 21 | public let urls: [Url] // List of URLs present in the message. 22 | 23 | public struct Url { 24 | let url: String 25 | } 26 | } 27 | 28 | extension Message: JSONDecodable { 29 | 30 | public init(json: JSON) throws { 31 | id = try json.decode(at: "id") 32 | text = try json.decode(at: "text") 33 | html = try json.decode(at: "html") 34 | sent = try json.getString(at: "sent").to8601Date() 35 | editedAt = try json.getString(at: "editedAt", alongPath: [.missingKeyBecomesNil, .nullBecomesNil])?.to8601Date() 36 | fromUser = try json.decode(at: "fromUser") 37 | unread = try json.decode(at: "unread") 38 | readBy = try json.decode(at: "readBy") 39 | urls = try json.decodedArray(at: "urls") 40 | } 41 | } 42 | 43 | extension Message.Url: JSONDecodable { 44 | 45 | public init(json: JSON) throws { 46 | url = try json.decode(at: "url") 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Entities/Token.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Token.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 14/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Freddy 11 | 12 | public struct Token { 13 | public let accessToken: String // The token that can be used to access the Gitter API. 14 | public let tokenType: String // The type of token received. At this time, this field will always have the value Bearer. 15 | public let expiresIn: String? // The remaining lifetime on the access token. 16 | 17 | public init(accessToken: String, tokenType: String, expiresIn: String? = nil) { 18 | self.accessToken = accessToken 19 | self.tokenType = tokenType 20 | self.expiresIn = expiresIn 21 | } 22 | } 23 | 24 | extension Token: JSONDecodable { 25 | 26 | public init(json: JSON) throws { 27 | accessToken = try json.decode(at: "access_token") 28 | expiresIn = try json.decode(at: "expires_in", alongPath: [.missingKeyBecomesNil, .nullBecomesNil]) 29 | tokenType = try json.decode(at: "token_type") 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Entities/User.swift: -------------------------------------------------------------------------------- 1 | // 2 | // User.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 14/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Freddy 11 | 12 | public struct User { 13 | public let id: String // Gitter User ID. 14 | public let username: String // Gitter/GitHub username. 15 | public let displayName: String // Gitter/GitHub user real name. 16 | public let url: String // Path to the user on Gitter. 17 | public let avatarUrlSmall: String // User avatar URI (small). 18 | public let avatarUrlMedium: String // User avatar URI (medium). 19 | } 20 | 21 | extension User: JSONDecodable { 22 | 23 | public init(json: JSON) throws { 24 | id = try json.decode(at: "id") 25 | username = try json.decode(at: "username") 26 | displayName = try json.decode(at: "displayName") 27 | url = try json.decode(at: "url") 28 | avatarUrlSmall = try json.decode(at: "avatarUrlSmall") 29 | avatarUrlMedium = try json.decode(at: "avatarUrlMedium") 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Entities/Utilities.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Utilities.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 14/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Freddy 11 | 12 | private let dateTimeFormatter: DateFormatter = { 13 | let formatter = DateFormatter() 14 | formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZ" 15 | formatter.timeZone = TimeZone(secondsFromGMT: 0) 16 | formatter.locale = Locale(identifier: "en_US_POSIX") 17 | return formatter 18 | }() 19 | 20 | extension String { 21 | public func to8601Date() throws -> Date { 22 | if let date = dateTimeFormatter.date(from: self) { 23 | return date 24 | } else { 25 | throw JSON.Error.valueNotConvertible(value: .string(self), to: Date.self) 26 | } 27 | } 28 | } 29 | 30 | extension Date { 31 | public func to8601String() -> String { 32 | return dateTimeFormatter.string(from: self) 33 | } 34 | } 35 | 36 | extension String { 37 | 38 | public func toURL() throws -> URL { 39 | if let url = URL(string: self) { 40 | return url 41 | } else { 42 | throw JSON.Error.valueNotConvertible(value: .string(self), to: URL.self) 43 | } 44 | } 45 | } 46 | 47 | extension JSONDecodable { 48 | 49 | public init(data: Data) throws { 50 | let json = try JSON(data: data) 51 | try self.init(json: json) 52 | } 53 | } 54 | 55 | extension Array where Element: JSONDecodable { 56 | 57 | public init(data: Data) throws { 58 | let json = try JSON(data: data) 59 | switch json { 60 | case .array(let array): 61 | try self.init(array.map(Element.init)) 62 | default: 63 | throw JSON.Error.valueNotConvertible(value: json, to: [Element].self) 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /Interactors/Authentication.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Authentication.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 15/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import Entities 10 | import Networking 11 | import ReactiveKit 12 | 13 | private let clientID = "31625d251b64ec0f01b19577c150f8bcb8c5f6a3" 14 | private let secret = "e629e37430a3a37905f642972caf3e6dce28d819" 15 | private let redirectURI = "reactive-gitter://token" 16 | 17 | public class Authentication { 18 | 19 | public enum AuthorizationResponse { 20 | case authorized(String) 21 | case unauthorized(String) 22 | } 23 | 24 | public let token: SafeSignal 25 | 26 | public init(client: SafeClient, authorizationCode: SafeSignal) { 27 | 28 | token = authorizationCode 29 | .flatMapLatest { code -> SafeSignal in 30 | if case .authorized(let code) = code { 31 | return Token 32 | .get(clientID: clientID, secret: secret, code: code, redirectURI: redirectURI) 33 | .response(using: client) 34 | .debug() 35 | } else { 36 | return .never() 37 | } 38 | } 39 | } 40 | 41 | public var authorizationURL: URL { 42 | return AuthenticationAPIClient.authorizationURL(clientID: clientID, redirectURI: redirectURI) 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Interactors/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Interactors/Interactors.h: -------------------------------------------------------------------------------- 1 | // 2 | // Interactors.h 3 | // Interactors 4 | // 5 | // Created by Srdan Rasic on 15/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for Interactors. 12 | FOUNDATION_EXPORT double InteractorsVersionNumber; 13 | 14 | //! Project version string for Interactors. 15 | FOUNDATION_EXPORT const unsigned char InteractorsVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /Interactors/RoomList.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RoomList.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 15/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import Entities 10 | import Networking 11 | import ReactiveKit 12 | 13 | public class RoomList { 14 | 15 | public let client: SafeClient 16 | public let rooms: SafeSignal<[Room]> 17 | public let leaveRoom: SafeObserver 18 | 19 | public init(client: SafeClient) { 20 | 21 | let leaveRoom = SafePublishSubject() 22 | 23 | let leftRoom = leaveRoom 24 | .flatMapLatest { room -> SafeSignal in 25 | return room.leave().response(using: client) 26 | } 27 | 28 | let user = User.me() 29 | .response(using: client) 30 | .shareReplay(limit: 1) 31 | 32 | let rooms = leftRoom.start(with: ()) 33 | .flatMapLatest { () -> SafeSignal<[Room]> in 34 | return user.flatMapLatest { user -> SafeSignal<[Room]> in 35 | user.getRooms().response(using: client) 36 | } 37 | } 38 | .shareReplay(limit: 1) 39 | 40 | self.client = client 41 | self.rooms = rooms 42 | self.leaveRoom = leaveRoom.on 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Interactors/RoomMessages.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RoomMessages.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 15/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import Entities 10 | import Networking 11 | import ReactiveKit 12 | 13 | public class RoomMessages { 14 | 15 | public let messages: SafeSignal<[Message]> 16 | public let sendMessage: SafeObserver 17 | 18 | public init(client: SafeClient, room: Room) { 19 | 20 | let sendMessage = SafePublishSubject() 21 | 22 | let messageSent = sendMessage 23 | .flatMapLatest { text -> SafeSignal in 24 | return room.sendMessage(text).response(using: client) 25 | } 26 | 27 | let messages = messageSent.eraseType().start(with: ()) 28 | .flatMapLatest { () -> SafeSignal<[Message]> in 29 | return room.getMessages(limit: 50).response(using: client) 30 | } 31 | .shareReplay(limit: 1) 32 | 33 | self.messages = messages 34 | self.sendMessage = sendMessage.on 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Networking/APIError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Error.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 14/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import Freddy 10 | 11 | public struct APIError: Error { 12 | public let message: String 13 | 14 | public init(message: String) { 15 | self.message = message 16 | } 17 | } 18 | 19 | extension APIError: JSONDecodable { 20 | 21 | public init(json: JSON) throws { 22 | message = try json.decode(at: "error") 23 | } 24 | } 25 | 26 | extension APIError { 27 | 28 | public var localizedDescription: String { 29 | return message 30 | } 31 | } 32 | 33 | extension JSON.Error { 34 | 35 | public var localizedDescription: String { 36 | return "nja" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Networking/Activity.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Activity.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 07/05/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import ReactiveKit 10 | import UIKit 11 | 12 | public class Activity { 13 | 14 | fileprivate let _isActive = Property(false) 15 | 16 | private var count = 0 { 17 | didSet { 18 | if oldValue == 1, count == 0 { 19 | _isActive.value = false 20 | } else if oldValue == 0, count == 1 { 21 | _isActive.value = true 22 | } 23 | } 24 | } 25 | 26 | public var isActive: Bool { 27 | return _isActive.value 28 | } 29 | 30 | public init(updateNetworkActivityIndicator: Bool = true) { 31 | if updateNetworkActivityIndicator { 32 | _ = _isActive.observeNext { isActive in 33 | UIApplication.shared.isNetworkActivityIndicatorVisible = isActive 34 | } 35 | } 36 | } 37 | 38 | public func increase() { 39 | count += 1 40 | } 41 | 42 | public func decrease() { 43 | count -= 1 44 | } 45 | } 46 | 47 | extension Activity: SubjectProtocol { 48 | 49 | public func on(_ event: Event) { 50 | switch event { 51 | case .next(let active): 52 | if active { 53 | increase() 54 | } else { 55 | decrease() 56 | } 57 | default: 58 | break 59 | } 60 | } 61 | 62 | public func observe(with observer: @escaping (Event) -> Void) -> Disposable { 63 | return _isActive.observeIn(.immediateOnMain).observe(with: observer) 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /Networking/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Networking/Message.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Message.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 14/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import Entities 10 | import Client 11 | 12 | extension Message { 13 | 14 | public func update(text: String, roomId: String) -> Request { 15 | return Request( 16 | path: "rooms/\(roomId)/chatMessages/\(id)", 17 | method: .put, 18 | parameters: JSONParameters(["text": text]), 19 | resource: Message.init, 20 | error: APIError.init, 21 | needsAuthorization: true 22 | ) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Networking/Networking.h: -------------------------------------------------------------------------------- 1 | // 2 | // Networking.h 3 | // Networking 4 | // 5 | // Created by Srdan Rasic on 15/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for Networking. 12 | FOUNDATION_EXPORT double NetworkingVersionNumber; 13 | 14 | //! Project version string for Networking. 15 | FOUNDATION_EXPORT const unsigned char NetworkingVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /Networking/Token.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Token.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 14/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import Entities 10 | import Client 11 | 12 | extension Token { 13 | 14 | public static func get(clientID: String, secret: String, code: String, redirectURI: String) -> Request { 15 | let params: [String: String] = [ 16 | "client_id": clientID, 17 | "client_secret": secret, 18 | "code": code, 19 | "redirect_uri": redirectURI, 20 | "grant_type": "authorization_code" 21 | ] 22 | return Request( 23 | path: "token", 24 | method: .post, 25 | parameters: JSONParameters(params), 26 | resource: Token.init, 27 | error: APIError.init, 28 | needsAuthorization: true 29 | ) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Networking/User.swift: -------------------------------------------------------------------------------- 1 | // 2 | // User.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 14/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import Entities 10 | import Client 11 | 12 | extension User { 13 | 14 | public static func me() -> Request { 15 | return Request( 16 | path: "user/me", 17 | method: .get, 18 | resource: User.init, 19 | error: APIError.init, 20 | needsAuthorization: true 21 | ) 22 | } 23 | 24 | public static func get(limit: Int? = nil, skip: Int? = nil) -> Request<[User], APIError> { 25 | return Request( 26 | path: "user", 27 | method: .get, 28 | parameters: JSONParameters(nonNil: ["limit": limit, "skip": skip]), 29 | resource: [User].init, 30 | error: APIError.init, 31 | needsAuthorization: true 32 | ) 33 | } 34 | 35 | public static func query(_ q: String, limit: Int? = nil, skip: Int? = nil) -> Request<[User], APIError> { 36 | return Request( 37 | path: "user", 38 | method: .get, 39 | parameters: JSONParameters(nonNil: ["q": q, "limit": limit, "skip": skip]), 40 | resource: [User].init, 41 | error: APIError.init, 42 | needsAuthorization: true 43 | ) 44 | } 45 | 46 | public func getRooms() -> Request<[Room], APIError> { 47 | return Request( 48 | path: "user/\(id)/rooms", 49 | method: .get, 50 | resource: [Room].init, 51 | error: APIError.init, 52 | needsAuthorization: true 53 | ) 54 | } 55 | 56 | public func getChannels() -> Request<[Room], APIError> { 57 | return Request( 58 | path: "user/\(id)/channels", 59 | method: .get, 60 | resource: [Room].init, 61 | error: APIError.init, 62 | needsAuthorization: true 63 | ) 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /Networking/Utilities.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Utilities.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 14/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Freddy 11 | import Client 12 | import ReactiveKit 13 | 14 | extension JSONParameters { 15 | 16 | public init(nonNil jsonOfOptionals: [String: Any?]) { 17 | self.init(jsonOfOptionals.nonNils) 18 | } 19 | } 20 | 21 | extension QueryParameters { 22 | 23 | public init(nonNil dictionaryOfOptionals: [String: String?]) { 24 | self.init(dictionaryOfOptionals.nonNils) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Reactive Gitter 2 | 3 | A ReactiveKit and Bond demo app. 4 | 5 | Check out the architecture guide [here](https://medium.com/hacker-daily/a-pragmatic-functional-reactive-architecture-with-swift-1e564cdbb1a4). 6 | -------------------------------------------------------------------------------- /ReactiveGitter.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ReactiveGitter/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /ReactiveGitter/Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Extensions.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 15/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Networking 11 | import ReactiveKit 12 | import Bond 13 | 14 | extension ReactiveExtensions where Base: UIViewController { 15 | 16 | public var userErrors: Bond { 17 | return bond { vc, error in 18 | let alert = UIAlertController(title: "Error occurred", message: error.message, preferredStyle: .actionSheet) 19 | if let retry = error.retry { 20 | let action = UIAlertAction(title: "Retry", style: .default) { _ in 21 | retry.next() 22 | } 23 | alert.addAction(action) 24 | } 25 | let dismissAction = UIAlertAction(title: "Dismiss", style: .cancel) 26 | alert.addAction(dismissAction) 27 | vc.present(alert, animated: true) 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Scenes/Authentication.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Authentication.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 15/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import Entities 10 | import Interactors 11 | import Views 12 | import Bond 13 | import ReactiveKit 14 | 15 | extension Authentication { 16 | 17 | public typealias Scene = ( 18 | viewController: UIViewController, 19 | tokenAcquired: SafeSignal 20 | ) 21 | 22 | public func createScene() -> Scene { 23 | let vc = ViewController.Authentication() 24 | 25 | vc.loginButton.reactive.tap 26 | .bind(to: UIApplication.shared) { application, _ in 27 | application.open(self.authorizationURL, options: [:]) 28 | } 29 | 30 | return (vc, token) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Scenes/Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Extensions.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 16/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension NSAttributedString { 12 | 13 | convenience init(html: String) throws { 14 | guard let data = NSAttributedString.styledHTMLwithHTML(html).data(using: String.Encoding.utf8) else { 15 | throw NSError(domain: "Invalid HTML", code: -500, userInfo: nil) 16 | } 17 | 18 | let options = [NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue] as [String : Any] 19 | try self.init(data: data, options: options, documentAttributes: nil) 20 | } 21 | 22 | static func styledHTMLwithHTML(_ html: String) -> String { 23 | return "" + html + ""; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Scenes/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Scenes/RoomList.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RoomList.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 15/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import Entities 10 | import Interactors 11 | import Views 12 | import Bond 13 | import ReactiveKit 14 | 15 | extension RoomList { 16 | 17 | public typealias Scene = ( 18 | viewController: UIViewController, 19 | logOut: SafeSignal 20 | ) 21 | 22 | public func createScene() -> Scene { 23 | let vc = ViewController.RoomList() 24 | 25 | rooms.bind(to: vc.tableView) { (rooms, indexPath, tableView) -> UITableViewCell in 26 | let cell = tableView.dequeueReusableCell(withIdentifier: RoomCell.classReuseIdentifier, for: indexPath) as! RoomCell 27 | cell.textLabel?.text = rooms[indexPath.row].name 28 | return cell 29 | } 30 | 31 | vc.tableView.reactive.selectedRow 32 | .with(latestFrom: rooms) { $1[$0] } 33 | .bind(to: vc) { vc, room in 34 | let scene = RoomMessages(client: self.client, room: room).createScene() 35 | vc.navigationController?.pushViewController(scene, animated: true) 36 | } 37 | 38 | return (vc, vc.logOutButton.reactive.tap) 39 | } 40 | } 41 | 42 | extension ReactiveExtensions where Base: UITableView { 43 | 44 | var selectedRow: SafeSignal { 45 | return delegate.signal( 46 | for: #selector(UITableViewDelegate.tableView(_:didSelectRowAt:)) 47 | ) { (subject: SafePublishSubject, _: UITableView, indexPath: NSIndexPath) in 48 | subject.next(indexPath.row) 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Scenes/RoomMessages.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RoomMessages.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 15/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import Entities 10 | import Interactors 11 | import Views 12 | import Bond 13 | import ReactiveKit 14 | 15 | extension RoomMessages { 16 | 17 | public func createScene() -> UIViewController { 18 | let vc = ViewController.RoomMessages() 19 | 20 | messages 21 | .flatMap { try? NSAttributedString(html: $0.html) } 22 | .bind(to: vc.tableView) { (messages, indexPath, tableView) -> UITableViewCell in 23 | let cell = tableView.dequeueReusableCell(withIdentifier: MessageCell.classReuseIdentifier, for: indexPath) as! MessageCell 24 | cell.textLabel?.attributedText = messages[indexPath.row] 25 | return cell 26 | } 27 | 28 | return vc 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Scenes/Scenes.h: -------------------------------------------------------------------------------- 1 | // 2 | // Scenes.h 3 | // Scenes 4 | // 5 | // Created by Srdan Rasic on 15/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for Scenes. 12 | FOUNDATION_EXPORT double ScenesVersionNumber; 13 | 14 | //! Project version string for Scenes. 15 | FOUNDATION_EXPORT const unsigned char ScenesVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /Views/Cells/MessageCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MessageCell.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 15/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | public class MessageCell: UITableViewCell { 12 | 13 | public override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 14 | super.init(style: style, reuseIdentifier: reuseIdentifier) 15 | textLabel?.numberOfLines = 0 16 | } 17 | 18 | public required init?(coder aDecoder: NSCoder) { 19 | fatalError("init(coder:) has not been implemented") 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Views/Cells/RoomCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RoomCell.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 15/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | public class RoomCell: UITableViewCell { 12 | } 13 | -------------------------------------------------------------------------------- /Views/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Views/View Controllers/Authentication.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AuthenticationViewController.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 15/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension ViewController { 12 | 13 | public class Authentication: UIViewController { 14 | 15 | public private(set) lazy var titleLabel = UILabel().setup { 16 | $0.text = "Reactive Gitter" 17 | $0.font = .preferredFont(forTextStyle: .title1) 18 | } 19 | 20 | public private(set) lazy var loginButton = UIButton(type: .system).setup { 21 | $0.setTitle("Log in", for: .normal) 22 | } 23 | 24 | public init() { 25 | super.init(nibName: nil, bundle: nil) 26 | view.backgroundColor = .white 27 | 28 | view.addSubview(titleLabel) 29 | titleLabel.center(in: view) 30 | 31 | view.addSubview(loginButton) 32 | loginButton.center(in: view, offset: .init(x: 0, y: 60)) 33 | } 34 | 35 | public required init?(coder aDecoder: NSCoder) { 36 | fatalError("init(coder:) has not been implemented") 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Views/View Controllers/RoomList.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RoomList.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 15/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension ViewController { 12 | 13 | public class RoomList: UIViewController { 14 | 15 | public private(set) var tableView = UITableView().setup { 16 | $0.tableFooterView = UIView() 17 | $0.rowHeight = 50 18 | } 19 | 20 | public private(set) var logOutButton = UIBarButtonItem(title: "Log out", style: .plain, target: nil, action: nil) 21 | 22 | public init() { 23 | super.init(nibName: nil, bundle: nil) 24 | 25 | tableView.register(RoomCell.self, forCellReuseIdentifier: RoomCell.classReuseIdentifier) 26 | navigationItem.title = "Rooms" 27 | navigationItem.rightBarButtonItem = logOutButton 28 | 29 | view.addSubview(tableView) 30 | tableView.anchor(in: view) 31 | } 32 | 33 | public required init?(coder aDecoder: NSCoder) { 34 | fatalError("init(coder:) has not been implemented") 35 | } 36 | 37 | public override func viewWillAppear(_ animated: Bool) { 38 | super.viewWillAppear(animated) 39 | if let indexPath = tableView.indexPathForSelectedRow { 40 | tableView.deselectRow(at: indexPath, animated: animated) 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Views/View Controllers/RoomMessages.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RoomMessages.swift 3 | // ReactiveGitter 4 | // 5 | // Created by Srdan Rasic on 15/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension ViewController { 12 | 13 | public class RoomMessages: UIViewController { 14 | 15 | public private(set) var tableView = UITableView().setup { 16 | $0.tableFooterView = UIView() 17 | $0.rowHeight = UITableViewAutomaticDimension 18 | $0.estimatedRowHeight = 200 19 | $0.allowsSelection = false 20 | } 21 | 22 | public init() { 23 | super.init(nibName: nil, bundle: nil) 24 | 25 | tableView.register(MessageCell.self, forCellReuseIdentifier: MessageCell.classReuseIdentifier) 26 | 27 | view.addSubview(tableView) 28 | tableView.anchor(in: view) 29 | } 30 | 31 | public required init?(coder aDecoder: NSCoder) { 32 | fatalError("init(coder:) has not been implemented") 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Views/Views.h: -------------------------------------------------------------------------------- 1 | // 2 | // Views.h 3 | // Views 4 | // 5 | // Created by Srdan Rasic on 15/01/2017. 6 | // Copyright © 2017 ReactiveKit. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for Views. 12 | FOUNDATION_EXPORT double ViewsVersionNumber; 13 | 14 | //! Project version string for Views. 15 | FOUNDATION_EXPORT const unsigned char ViewsVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | --------------------------------------------------------------------------------