├── .gitignore
├── .travis.yml
├── AudioPlaybackManager-中文文档.md
├── AudioPlaybackManager.podspec
├── AudioPlaybackManager
├── Assets
│ └── .gitkeep
└── Classes
│ ├── .gitkeep
│ ├── Audio.swift
│ ├── AudioLogger.swift
│ ├── AudioPlaybackManager+AudioSession.swift
│ ├── AudioPlaybackManager+Cache.swift
│ ├── AudioPlaybackManager+Callback.swift
│ ├── AudioPlaybackManager+NowPlayingInfo.swift
│ ├── AudioPlaybackManager+RemoteCommand.swift
│ └── AudioPlaybackManager.swift
├── Example
├── AudioPlaybackManager.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── AudioPlaybackManager-Example.xcscheme
├── AudioPlaybackManager.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── AudioPlaybackManager
│ ├── AppDelegate.swift
│ ├── Base.lproj
│ │ ├── LaunchScreen.xib
│ │ └── Main.storyboard
│ ├── Extensions.swift
│ ├── Images.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ ├── player_backward.disable.imageset
│ │ │ ├── Contents.json
│ │ │ ├── meditation_player_backward@2x.png
│ │ │ └── meditation_player_backward@3x.png
│ │ ├── player_backward.imageset
│ │ │ ├── Contents.json
│ │ │ ├── meditation_player_backward@2x.png
│ │ │ └── meditation_player_backward@3x.png
│ │ ├── player_forward.disable.imageset
│ │ │ ├── Contents.json
│ │ │ ├── meditation_player_forward@2x.png
│ │ │ └── meditation_player_forward@3x.png
│ │ ├── player_forward.imageset
│ │ │ ├── Contents.json
│ │ │ ├── meditation_player_forward@2x.png
│ │ │ └── meditation_player_forward@3x.png
│ │ ├── player_loading.imageset
│ │ │ ├── Contents.json
│ │ │ ├── meditation_player_loading@2x.png
│ │ │ └── meditation_player_loading@3x.png
│ │ ├── player_next.disable.imageset
│ │ │ ├── Contents.json
│ │ │ ├── meditation_player_next@2x.png
│ │ │ └── meditation_player_next@3x.png
│ │ ├── player_next.imageset
│ │ │ ├── Contents.json
│ │ │ ├── meditation_player_next@2x.png
│ │ │ └── meditation_player_next@3x.png
│ │ ├── player_pause.imageset
│ │ │ ├── Contents.json
│ │ │ ├── meditation_player_pause@2x.png
│ │ │ └── meditation_player_pause@3x.png
│ │ ├── player_play.imageset
│ │ │ ├── Contents.json
│ │ │ ├── meditation_player_play@2x.png
│ │ │ └── meditation_player_play@3x.png
│ │ ├── player_previous.disable.imageset
│ │ │ ├── Contents.json
│ │ │ ├── meditation_player_previous@2x.png
│ │ │ └── meditation_player_previous@3x.png
│ │ ├── player_previous.imageset
│ │ │ ├── Contents.json
│ │ │ ├── meditation_player_previous@2x.png
│ │ │ └── meditation_player_previous@3x.png
│ │ ├── player_volume.down.imageset
│ │ │ ├── Contents.json
│ │ │ ├── meditation_player_volume@2x.png
│ │ │ └── meditation_player_volume@3x.png
│ │ └── player_volume.up.imageset
│ │ │ ├── Contents.json
│ │ │ ├── meditation_player_volume@2x.png
│ │ │ └── meditation_player_volume@3x.png
│ ├── Info.plist
│ ├── PlayAudioControlView.swift
│ ├── PlayAudioControlView.xib
│ ├── PlayAudioViewController.swift
│ ├── PlayAudioViewModel.swift
│ ├── Resources
│ │ ├── Song 1.m4a
│ │ ├── Song 2.m4a
│ │ ├── artwork.jpg
│ │ └── 暗里着迷.m4a
│ └── ViewController.swift
├── Podfile
├── Podfile.lock
├── Pods
│ ├── Local Podspecs
│ │ ├── AudioPlaybackManager.podspec.json
│ │ └── VIMediaCache.podspec.json
│ ├── Manifest.lock
│ ├── Pods.xcodeproj
│ │ └── project.pbxproj
│ ├── RxCocoa
│ │ ├── LICENSE.md
│ │ ├── Platform
│ │ │ ├── DataStructures
│ │ │ │ ├── Bag.swift
│ │ │ │ ├── InfiniteSequence.swift
│ │ │ │ ├── PriorityQueue.swift
│ │ │ │ └── Queue.swift
│ │ │ ├── DispatchQueue+Extensions.swift
│ │ │ ├── Platform.Darwin.swift
│ │ │ ├── Platform.Linux.swift
│ │ │ └── RecursiveLock.swift
│ │ ├── README.md
│ │ └── RxCocoa
│ │ │ ├── Common
│ │ │ ├── ControlTarget.swift
│ │ │ ├── DelegateProxy.swift
│ │ │ ├── DelegateProxyType.swift
│ │ │ ├── Infallible+Bind.swift
│ │ │ ├── Observable+Bind.swift
│ │ │ ├── RxCocoaObjCRuntimeError+Extensions.swift
│ │ │ ├── RxTarget.swift
│ │ │ ├── SectionedViewDataSourceType.swift
│ │ │ └── TextInput.swift
│ │ │ ├── Foundation
│ │ │ ├── KVORepresentable+CoreGraphics.swift
│ │ │ ├── KVORepresentable+Swift.swift
│ │ │ ├── KVORepresentable.swift
│ │ │ ├── NSObject+Rx+KVORepresentable.swift
│ │ │ ├── NSObject+Rx+RawRepresentable.swift
│ │ │ ├── NSObject+Rx.swift
│ │ │ ├── NotificationCenter+Rx.swift
│ │ │ └── URLSession+Rx.swift
│ │ │ ├── Runtime
│ │ │ ├── _RX.m
│ │ │ ├── _RXDelegateProxy.m
│ │ │ ├── _RXKVOObserver.m
│ │ │ ├── _RXObjCRuntime.m
│ │ │ └── include
│ │ │ │ ├── RxCocoaRuntime.h
│ │ │ │ ├── _RX.h
│ │ │ │ ├── _RXDelegateProxy.h
│ │ │ │ ├── _RXKVOObserver.h
│ │ │ │ └── _RXObjCRuntime.h
│ │ │ ├── RxCocoa.h
│ │ │ ├── RxCocoa.swift
│ │ │ ├── Traits
│ │ │ ├── ControlEvent.swift
│ │ │ ├── ControlProperty.swift
│ │ │ ├── Driver
│ │ │ │ ├── BehaviorRelay+Driver.swift
│ │ │ │ ├── ControlEvent+Driver.swift
│ │ │ │ ├── ControlProperty+Driver.swift
│ │ │ │ ├── Driver+Subscription.swift
│ │ │ │ ├── Driver.swift
│ │ │ │ ├── Infallible+Driver.swift
│ │ │ │ └── ObservableConvertibleType+Driver.swift
│ │ │ ├── SharedSequence
│ │ │ │ ├── ObservableConvertibleType+SharedSequence.swift
│ │ │ │ ├── SchedulerType+SharedSequence.swift
│ │ │ │ ├── SharedSequence+Concurrency.swift
│ │ │ │ ├── SharedSequence+Operators+arity.swift
│ │ │ │ ├── SharedSequence+Operators.swift
│ │ │ │ └── SharedSequence.swift
│ │ │ └── Signal
│ │ │ │ ├── ControlEvent+Signal.swift
│ │ │ │ ├── ObservableConvertibleType+Signal.swift
│ │ │ │ ├── PublishRelay+Signal.swift
│ │ │ │ ├── Signal+Subscription.swift
│ │ │ │ └── Signal.swift
│ │ │ ├── iOS
│ │ │ ├── DataSources
│ │ │ │ ├── RxCollectionViewReactiveArrayDataSource.swift
│ │ │ │ ├── RxPickerViewAdapter.swift
│ │ │ │ └── RxTableViewReactiveArrayDataSource.swift
│ │ │ ├── Events
│ │ │ │ └── ItemEvents.swift
│ │ │ ├── NSTextStorage+Rx.swift
│ │ │ ├── Protocols
│ │ │ │ ├── RxCollectionViewDataSourceType.swift
│ │ │ │ ├── RxPickerViewDataSourceType.swift
│ │ │ │ └── RxTableViewDataSourceType.swift
│ │ │ ├── Proxies
│ │ │ │ ├── RxCollectionViewDataSourcePrefetchingProxy.swift
│ │ │ │ ├── RxCollectionViewDataSourceProxy.swift
│ │ │ │ ├── RxCollectionViewDelegateProxy.swift
│ │ │ │ ├── RxDelegateProxyCrashFix.swift
│ │ │ │ ├── RxNavigationControllerDelegateProxy.swift
│ │ │ │ ├── RxPickerViewDataSourceProxy.swift
│ │ │ │ ├── RxPickerViewDelegateProxy.swift
│ │ │ │ ├── RxScrollViewDelegateProxy.swift
│ │ │ │ ├── RxSearchBarDelegateProxy.swift
│ │ │ │ ├── RxSearchControllerDelegateProxy.swift
│ │ │ │ ├── RxTabBarControllerDelegateProxy.swift
│ │ │ │ ├── RxTabBarDelegateProxy.swift
│ │ │ │ ├── RxTableViewDataSourcePrefetchingProxy.swift
│ │ │ │ ├── RxTableViewDataSourceProxy.swift
│ │ │ │ ├── RxTableViewDelegateProxy.swift
│ │ │ │ ├── RxTextStorageDelegateProxy.swift
│ │ │ │ ├── RxTextViewDelegateProxy.swift
│ │ │ │ └── RxWKNavigationDelegateProxy.swift
│ │ │ ├── UIActivityIndicatorView+Rx.swift
│ │ │ ├── UIApplication+Rx.swift
│ │ │ ├── UIBarButtonItem+Rx.swift
│ │ │ ├── UIButton+Rx.swift
│ │ │ ├── UICollectionView+Rx.swift
│ │ │ ├── UIControl+Rx.swift
│ │ │ ├── UIDatePicker+Rx.swift
│ │ │ ├── UIGestureRecognizer+Rx.swift
│ │ │ ├── UINavigationController+Rx.swift
│ │ │ ├── UIPickerView+Rx.swift
│ │ │ ├── UIRefreshControl+Rx.swift
│ │ │ ├── UIScrollView+Rx.swift
│ │ │ ├── UISearchBar+Rx.swift
│ │ │ ├── UISearchController+Rx.swift
│ │ │ ├── UISegmentedControl+Rx.swift
│ │ │ ├── UISlider+Rx.swift
│ │ │ ├── UIStepper+Rx.swift
│ │ │ ├── UISwitch+Rx.swift
│ │ │ ├── UITabBar+Rx.swift
│ │ │ ├── UITabBarController+Rx.swift
│ │ │ ├── UITableView+Rx.swift
│ │ │ ├── UITextField+Rx.swift
│ │ │ ├── UITextView+Rx.swift
│ │ │ └── WKWebView+Rx.swift
│ │ │ └── macOS
│ │ │ ├── NSButton+Rx.swift
│ │ │ ├── NSControl+Rx.swift
│ │ │ ├── NSSlider+Rx.swift
│ │ │ ├── NSTextField+Rx.swift
│ │ │ ├── NSTextView+Rx.swift
│ │ │ └── NSView+Rx.swift
│ ├── RxRelay
│ │ ├── LICENSE.md
│ │ ├── README.md
│ │ └── RxRelay
│ │ │ ├── BehaviorRelay.swift
│ │ │ ├── Observable+Bind.swift
│ │ │ ├── PublishRelay.swift
│ │ │ ├── ReplayRelay.swift
│ │ │ └── Utils.swift
│ ├── RxSwift
│ │ ├── LICENSE.md
│ │ ├── Platform
│ │ │ ├── AtomicInt.swift
│ │ │ ├── DataStructures
│ │ │ │ ├── Bag.swift
│ │ │ │ ├── InfiniteSequence.swift
│ │ │ │ ├── PriorityQueue.swift
│ │ │ │ └── Queue.swift
│ │ │ ├── DispatchQueue+Extensions.swift
│ │ │ ├── Platform.Darwin.swift
│ │ │ ├── Platform.Linux.swift
│ │ │ └── RecursiveLock.swift
│ │ ├── README.md
│ │ └── RxSwift
│ │ │ ├── AnyObserver.swift
│ │ │ ├── Binder.swift
│ │ │ ├── Cancelable.swift
│ │ │ ├── Concurrency
│ │ │ ├── AsyncLock.swift
│ │ │ ├── Lock.swift
│ │ │ ├── LockOwnerType.swift
│ │ │ ├── SynchronizedDisposeType.swift
│ │ │ ├── SynchronizedOnType.swift
│ │ │ └── SynchronizedUnsubscribeType.swift
│ │ │ ├── ConnectableObservableType.swift
│ │ │ ├── Date+Dispatch.swift
│ │ │ ├── Disposable.swift
│ │ │ ├── Disposables
│ │ │ ├── AnonymousDisposable.swift
│ │ │ ├── BinaryDisposable.swift
│ │ │ ├── BooleanDisposable.swift
│ │ │ ├── CompositeDisposable.swift
│ │ │ ├── Disposables.swift
│ │ │ ├── DisposeBag.swift
│ │ │ ├── DisposeBase.swift
│ │ │ ├── NopDisposable.swift
│ │ │ ├── RefCountDisposable.swift
│ │ │ ├── ScheduledDisposable.swift
│ │ │ ├── SerialDisposable.swift
│ │ │ ├── SingleAssignmentDisposable.swift
│ │ │ └── SubscriptionDisposable.swift
│ │ │ ├── Errors.swift
│ │ │ ├── Event.swift
│ │ │ ├── Extensions
│ │ │ └── Bag+Rx.swift
│ │ │ ├── GroupedObservable.swift
│ │ │ ├── ImmediateSchedulerType.swift
│ │ │ ├── Observable+Concurrency.swift
│ │ │ ├── Observable.swift
│ │ │ ├── ObservableConvertibleType.swift
│ │ │ ├── ObservableType+Extensions.swift
│ │ │ ├── ObservableType.swift
│ │ │ ├── Observables
│ │ │ ├── AddRef.swift
│ │ │ ├── Amb.swift
│ │ │ ├── AsMaybe.swift
│ │ │ ├── AsSingle.swift
│ │ │ ├── Buffer.swift
│ │ │ ├── Catch.swift
│ │ │ ├── CombineLatest+Collection.swift
│ │ │ ├── CombineLatest+arity.swift
│ │ │ ├── CombineLatest.swift
│ │ │ ├── CompactMap.swift
│ │ │ ├── Concat.swift
│ │ │ ├── Create.swift
│ │ │ ├── Debounce.swift
│ │ │ ├── Debug.swift
│ │ │ ├── Decode.swift
│ │ │ ├── DefaultIfEmpty.swift
│ │ │ ├── Deferred.swift
│ │ │ ├── Delay.swift
│ │ │ ├── DelaySubscription.swift
│ │ │ ├── Dematerialize.swift
│ │ │ ├── DistinctUntilChanged.swift
│ │ │ ├── Do.swift
│ │ │ ├── ElementAt.swift
│ │ │ ├── Empty.swift
│ │ │ ├── Enumerated.swift
│ │ │ ├── Error.swift
│ │ │ ├── Filter.swift
│ │ │ ├── First.swift
│ │ │ ├── Generate.swift
│ │ │ ├── GroupBy.swift
│ │ │ ├── Just.swift
│ │ │ ├── Map.swift
│ │ │ ├── Materialize.swift
│ │ │ ├── Merge.swift
│ │ │ ├── Multicast.swift
│ │ │ ├── Never.swift
│ │ │ ├── ObserveOn.swift
│ │ │ ├── Optional.swift
│ │ │ ├── Producer.swift
│ │ │ ├── Range.swift
│ │ │ ├── Reduce.swift
│ │ │ ├── Repeat.swift
│ │ │ ├── RetryWhen.swift
│ │ │ ├── Sample.swift
│ │ │ ├── Scan.swift
│ │ │ ├── Sequence.swift
│ │ │ ├── ShareReplayScope.swift
│ │ │ ├── SingleAsync.swift
│ │ │ ├── Sink.swift
│ │ │ ├── Skip.swift
│ │ │ ├── SkipUntil.swift
│ │ │ ├── SkipWhile.swift
│ │ │ ├── StartWith.swift
│ │ │ ├── SubscribeOn.swift
│ │ │ ├── Switch.swift
│ │ │ ├── SwitchIfEmpty.swift
│ │ │ ├── Take.swift
│ │ │ ├── TakeLast.swift
│ │ │ ├── TakeWithPredicate.swift
│ │ │ ├── Throttle.swift
│ │ │ ├── Timeout.swift
│ │ │ ├── Timer.swift
│ │ │ ├── ToArray.swift
│ │ │ ├── Using.swift
│ │ │ ├── Window.swift
│ │ │ ├── WithLatestFrom.swift
│ │ │ ├── WithUnretained.swift
│ │ │ ├── Zip+Collection.swift
│ │ │ ├── Zip+arity.swift
│ │ │ └── Zip.swift
│ │ │ ├── ObserverType.swift
│ │ │ ├── Observers
│ │ │ ├── AnonymousObserver.swift
│ │ │ ├── ObserverBase.swift
│ │ │ └── TailRecursiveSink.swift
│ │ │ ├── Reactive.swift
│ │ │ ├── Rx.swift
│ │ │ ├── RxMutableBox.swift
│ │ │ ├── SchedulerType.swift
│ │ │ ├── Schedulers
│ │ │ ├── ConcurrentDispatchQueueScheduler.swift
│ │ │ ├── ConcurrentMainScheduler.swift
│ │ │ ├── CurrentThreadScheduler.swift
│ │ │ ├── HistoricalScheduler.swift
│ │ │ ├── HistoricalSchedulerTimeConverter.swift
│ │ │ ├── Internal
│ │ │ │ ├── DispatchQueueConfiguration.swift
│ │ │ │ ├── InvocableScheduledItem.swift
│ │ │ │ ├── InvocableType.swift
│ │ │ │ ├── ScheduledItem.swift
│ │ │ │ └── ScheduledItemType.swift
│ │ │ ├── MainScheduler.swift
│ │ │ ├── OperationQueueScheduler.swift
│ │ │ ├── RecursiveScheduler.swift
│ │ │ ├── SchedulerServices+Emulation.swift
│ │ │ ├── SerialDispatchQueueScheduler.swift
│ │ │ ├── VirtualTimeConverterType.swift
│ │ │ └── VirtualTimeScheduler.swift
│ │ │ ├── Subjects
│ │ │ ├── AsyncSubject.swift
│ │ │ ├── BehaviorSubject.swift
│ │ │ ├── PublishSubject.swift
│ │ │ ├── ReplaySubject.swift
│ │ │ └── SubjectType.swift
│ │ │ ├── SwiftSupport
│ │ │ └── SwiftSupport.swift
│ │ │ └── Traits
│ │ │ ├── Infallible
│ │ │ ├── Infallible+CombineLatest+Collection.swift
│ │ │ ├── Infallible+CombineLatest+arity.swift
│ │ │ ├── Infallible+Concurrency.swift
│ │ │ ├── Infallible+Create.swift
│ │ │ ├── Infallible+Debug.swift
│ │ │ ├── Infallible+Operators.swift
│ │ │ ├── Infallible+Zip+arity.swift
│ │ │ ├── Infallible.swift
│ │ │ └── ObservableConvertibleType+Infallible.swift
│ │ │ └── PrimitiveSequence
│ │ │ ├── Completable+AndThen.swift
│ │ │ ├── Completable.swift
│ │ │ ├── Maybe.swift
│ │ │ ├── ObservableType+PrimitiveSequence.swift
│ │ │ ├── PrimitiveSequence+Concurrency.swift
│ │ │ ├── PrimitiveSequence+Zip+arity.swift
│ │ │ ├── PrimitiveSequence.swift
│ │ │ └── Single.swift
│ ├── SnapKit
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── Sources
│ │ │ ├── Constraint.swift
│ │ │ ├── ConstraintAttributes.swift
│ │ │ ├── ConstraintConfig.swift
│ │ │ ├── ConstraintConstantTarget.swift
│ │ │ ├── ConstraintDSL.swift
│ │ │ ├── ConstraintDescription.swift
│ │ │ ├── ConstraintDirectionalInsetTarget.swift
│ │ │ ├── ConstraintDirectionalInsets.swift
│ │ │ ├── ConstraintInsetTarget.swift
│ │ │ ├── ConstraintInsets.swift
│ │ │ ├── ConstraintItem.swift
│ │ │ ├── ConstraintLayoutGuide+Extensions.swift
│ │ │ ├── ConstraintLayoutGuide.swift
│ │ │ ├── ConstraintLayoutGuideDSL.swift
│ │ │ ├── ConstraintLayoutSupport.swift
│ │ │ ├── ConstraintLayoutSupportDSL.swift
│ │ │ ├── ConstraintMaker.swift
│ │ │ ├── ConstraintMakerEditable.swift
│ │ │ ├── ConstraintMakerExtendable.swift
│ │ │ ├── ConstraintMakerFinalizable.swift
│ │ │ ├── ConstraintMakerPrioritizable.swift
│ │ │ ├── ConstraintMakerRelatable+Extensions.swift
│ │ │ ├── ConstraintMakerRelatable.swift
│ │ │ ├── ConstraintMultiplierTarget.swift
│ │ │ ├── ConstraintOffsetTarget.swift
│ │ │ ├── ConstraintPriority.swift
│ │ │ ├── ConstraintPriorityTarget.swift
│ │ │ ├── ConstraintRelatableTarget.swift
│ │ │ ├── ConstraintRelation.swift
│ │ │ ├── ConstraintView+Extensions.swift
│ │ │ ├── ConstraintView.swift
│ │ │ ├── ConstraintViewDSL.swift
│ │ │ ├── Debugging.swift
│ │ │ ├── LayoutConstraint.swift
│ │ │ ├── LayoutConstraintItem.swift
│ │ │ ├── Typealiases.swift
│ │ │ └── UILayoutSupport+Extensions.swift
│ ├── Target Support Files
│ │ ├── AudioPlaybackManager
│ │ │ ├── AudioPlaybackManager-Info.plist
│ │ │ ├── AudioPlaybackManager-dummy.m
│ │ │ ├── AudioPlaybackManager-prefix.pch
│ │ │ ├── AudioPlaybackManager-umbrella.h
│ │ │ ├── AudioPlaybackManager.debug.xcconfig
│ │ │ ├── AudioPlaybackManager.modulemap
│ │ │ └── AudioPlaybackManager.release.xcconfig
│ │ ├── Pods-AudioPlaybackManager_Example
│ │ │ ├── Pods-AudioPlaybackManager_Example-Info.plist
│ │ │ ├── Pods-AudioPlaybackManager_Example-acknowledgements.markdown
│ │ │ ├── Pods-AudioPlaybackManager_Example-acknowledgements.plist
│ │ │ ├── Pods-AudioPlaybackManager_Example-dummy.m
│ │ │ ├── Pods-AudioPlaybackManager_Example-frameworks.sh
│ │ │ ├── Pods-AudioPlaybackManager_Example-umbrella.h
│ │ │ ├── Pods-AudioPlaybackManager_Example.debug.xcconfig
│ │ │ ├── Pods-AudioPlaybackManager_Example.modulemap
│ │ │ └── Pods-AudioPlaybackManager_Example.release.xcconfig
│ │ ├── Pods-AudioPlaybackManager_Tests
│ │ │ ├── Pods-AudioPlaybackManager_Tests-Info.plist
│ │ │ ├── Pods-AudioPlaybackManager_Tests-acknowledgements.markdown
│ │ │ ├── Pods-AudioPlaybackManager_Tests-acknowledgements.plist
│ │ │ ├── Pods-AudioPlaybackManager_Tests-dummy.m
│ │ │ ├── Pods-AudioPlaybackManager_Tests-umbrella.h
│ │ │ ├── Pods-AudioPlaybackManager_Tests.debug.xcconfig
│ │ │ ├── Pods-AudioPlaybackManager_Tests.modulemap
│ │ │ └── Pods-AudioPlaybackManager_Tests.release.xcconfig
│ │ ├── RxCocoa
│ │ │ ├── RxCocoa-Info.plist
│ │ │ ├── RxCocoa-dummy.m
│ │ │ ├── RxCocoa-prefix.pch
│ │ │ ├── RxCocoa-umbrella.h
│ │ │ ├── RxCocoa.debug.xcconfig
│ │ │ ├── RxCocoa.modulemap
│ │ │ └── RxCocoa.release.xcconfig
│ │ ├── RxRelay
│ │ │ ├── RxRelay-Info.plist
│ │ │ ├── RxRelay-dummy.m
│ │ │ ├── RxRelay-prefix.pch
│ │ │ ├── RxRelay-umbrella.h
│ │ │ ├── RxRelay.debug.xcconfig
│ │ │ ├── RxRelay.modulemap
│ │ │ └── RxRelay.release.xcconfig
│ │ ├── RxSwift
│ │ │ ├── RxSwift-Info.plist
│ │ │ ├── RxSwift-dummy.m
│ │ │ ├── RxSwift-prefix.pch
│ │ │ ├── RxSwift-umbrella.h
│ │ │ ├── RxSwift.debug.xcconfig
│ │ │ ├── RxSwift.modulemap
│ │ │ └── RxSwift.release.xcconfig
│ │ ├── SnapKit
│ │ │ ├── SnapKit-Info.plist
│ │ │ ├── SnapKit-dummy.m
│ │ │ ├── SnapKit-prefix.pch
│ │ │ ├── SnapKit-umbrella.h
│ │ │ ├── SnapKit.debug.xcconfig
│ │ │ ├── SnapKit.modulemap
│ │ │ └── SnapKit.release.xcconfig
│ │ └── VIMediaCache
│ │ │ ├── VIMediaCache-Info.plist
│ │ │ ├── VIMediaCache-dummy.m
│ │ │ ├── VIMediaCache-prefix.pch
│ │ │ ├── VIMediaCache-umbrella.h
│ │ │ ├── VIMediaCache.debug.xcconfig
│ │ │ ├── VIMediaCache.modulemap
│ │ │ └── VIMediaCache.release.xcconfig
│ └── VIMediaCache
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── VIMediaCache
│ │ ├── Cache
│ │ ├── NSString+VIMD5.h
│ │ ├── NSString+VIMD5.m
│ │ ├── VICacheAction.h
│ │ ├── VICacheAction.m
│ │ ├── VICacheConfiguration.h
│ │ ├── VICacheConfiguration.m
│ │ ├── VICacheManager.h
│ │ ├── VICacheManager.m
│ │ ├── VICacheSessionManager.h
│ │ ├── VICacheSessionManager.m
│ │ ├── VIMediaCacheWorker.h
│ │ └── VIMediaCacheWorker.m
│ │ ├── ResourceLoader
│ │ ├── VIContentInfo.h
│ │ ├── VIContentInfo.m
│ │ ├── VIMediaDownloader.h
│ │ ├── VIMediaDownloader.m
│ │ ├── VIResourceLoader.h
│ │ ├── VIResourceLoader.m
│ │ ├── VIResourceLoaderManager.h
│ │ ├── VIResourceLoaderManager.m
│ │ ├── VIResourceLoadingRequestWorker.h
│ │ └── VIResourceLoadingRequestWorker.m
│ │ └── VIMediaCache.h
└── Tests
│ ├── AudioPlaybackManagerTest.swift
│ ├── Info.plist
│ └── Tests.swift
├── LICENSE
├── README.md
└── _Pods.xcodeproj
/.gitignore:
--------------------------------------------------------------------------------
1 | # macOS
2 | .DS_Store
3 |
4 | # Xcode
5 | build/
6 | *.pbxuser
7 | !default.pbxuser
8 | *.mode1v3
9 | !default.mode1v3
10 | *.mode2v3
11 | !default.mode2v3
12 | *.perspectivev3
13 | !default.perspectivev3
14 | xcuserdata/
15 | *.xccheckout
16 | *.moved-aside
17 | DerivedData
18 | *.hmap
19 | *.ipa
20 |
21 | # Bundler
22 | .bundle
23 |
24 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
25 | # Carthage/Checkouts
26 |
27 | Carthage/Build
28 |
29 | # We recommend against adding the Pods directory to your .gitignore. However
30 | # you should judge for yourself, the pros and cons are mentioned at:
31 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
32 | #
33 | # Note: if you ignore the Pods directory, make sure to uncomment
34 | # `pod install` in .travis.yml
35 | #
36 | # Pods/
37 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | # references:
2 | # * https://www.objc.io/issues/6-build-tools/travis-ci/
3 | # * https://github.com/supermarin/xcpretty#usage
4 |
5 | osx_image: xcode7.3
6 | language: objective-c
7 | # cache: cocoapods
8 | # podfile: Example/Podfile
9 | # before_install:
10 | # - gem install cocoapods # Since Travis is not always on latest version
11 | # - pod install --project-directory=Example
12 | script:
13 | - set -o pipefail && xcodebuild test -enableCodeCoverage YES -workspace Example/AudioPlaybackManager.xcworkspace -scheme AudioPlaybackManager-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty
14 | - pod lib lint
15 |
--------------------------------------------------------------------------------
/AudioPlaybackManager.podspec:
--------------------------------------------------------------------------------
1 | #
2 | # Be sure to run `pod lib lint AudioPlaybackManager.podspec' to ensure this is a
3 | # valid spec before submitting.
4 | #
5 | # Any lines starting with a # are optional, but their use is encouraged
6 | # To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
7 | #
8 |
9 | Pod::Spec.new do |s|
10 | s.name = 'AudioPlaybackManager'
11 | s.version = '0.2.0'
12 | s.summary = 'A audio playback manager.'
13 | s.homepage = 'https://github.com/xiaoMing0109/AudioPlaybackManager'
14 | s.license = { :type => 'MIT', :file => 'LICENSE' }
15 | s.author = { 'LiuMing' => 'liuming_0109@163.com' }
16 | s.source = { :git => 'https://github.com/xiaoMing0109/AudioPlaybackManager.git', :tag => s.version.to_s }
17 |
18 | s.ios.deployment_target = '10.0'
19 | s.swift_version = '5.0'
20 | s.requires_arc = true
21 |
22 | s.source_files = 'AudioPlaybackManager/Classes/**/*'
23 |
24 | s.frameworks = 'UIKit', 'Foundation', 'AVFoundation', 'MediaPlayer'
25 |
26 | s.dependency 'VIMediaCache', '~> 0.4'
27 | end
28 |
--------------------------------------------------------------------------------
/AudioPlaybackManager/Assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/AudioPlaybackManager/Assets/.gitkeep
--------------------------------------------------------------------------------
/AudioPlaybackManager/Classes/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/AudioPlaybackManager/Classes/.gitkeep
--------------------------------------------------------------------------------
/AudioPlaybackManager/Classes/Audio.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Audio.swift
3 | //
4 | // Created by LM on 2023/3/27.
5 | //
6 |
7 | import Foundation
8 |
9 | @objcMembers
10 | open class Audio: NSObject {
11 |
12 | /// Audio url.
13 | open var audioURL: URL
14 |
15 | public init(audioURL: URL) {
16 | self.audioURL = audioURL
17 | }
18 |
19 | /// -------------- `MPNowPlayingInfoCenter` --------------
20 |
21 | /// Set `nowPlayingInfo` using audio metadata.
22 | ///
23 | /// Default is `false`.
24 | open var useAudioMetadata: Bool = false
25 |
26 | // Note: If `useAudioMetadata` is set to false, then you can set it through the following properties.
27 |
28 | /// Audio name.
29 | open var title: String?
30 | /// Album name.
31 | open var albumName: String?
32 | /// Artist.
33 | open var artist: String?
34 |
35 | /// Artwork.
36 | open var artworkImage: UIImage?
37 | open var artworkURL: URL?
38 | }
39 |
--------------------------------------------------------------------------------
/AudioPlaybackManager/Classes/AudioLogger.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AudioLogger.swift
3 | // AudioPlaybackManager
4 | //
5 | // Created by LM on 2024/3/6.
6 | //
7 |
8 | import Foundation
9 |
10 | @objc
11 | public enum LogLevel: Int {
12 | case info, warning, error
13 |
14 | var description: String {
15 | return String(describing: self).uppercased()
16 | }
17 | }
18 |
19 | extension LogLevel: Comparable {
20 |
21 | public static func < (lhs: LogLevel, rhs: LogLevel) -> Bool {
22 | return lhs.rawValue < rhs.rawValue
23 | }
24 | }
25 |
26 | internal class AudioLogger {
27 | var enabled: Bool = true
28 | var minLevel: LogLevel = .info
29 |
30 | private let queue = DispatchQueue(label: "com.AudioPlaybackManager.log")
31 |
32 | func info(_ items: Any..., separator: String = " ", terminator: String = "\n") {
33 | log(.info, items, separator, terminator)
34 | }
35 |
36 | func warning(_ items: Any..., separator: String = " ", terminator: String = "\n") {
37 | log(.warning, items, separator, terminator)
38 | }
39 |
40 | func error(_ items: Any..., separator: String = " ", terminator: String = "\n") {
41 | log(.error, items, separator, terminator)
42 | }
43 |
44 | private func log(_ level: LogLevel, _ items: [Any], _ separator: String, _ terminator: String) {
45 | guard level >= minLevel else { return }
46 |
47 | #if DEBUG
48 | queue.async {
49 | Swift.print(items, separator: separator, terminator: terminator)
50 | }
51 | #endif
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/AudioPlaybackManager/Classes/AudioPlaybackManager+AudioSession.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AudioPlaybackManager+AudioSession.swift
3 | //
4 | // Created by LM on 2023/3/28.
5 | //
6 |
7 | import Foundation
8 | import AVFoundation
9 |
10 | extension AudioPlaybackManager {
11 |
12 | /// Set the audio session as active/inactive.
13 | ///
14 | /// When set to active, other players will be notified that the audio session is interrupted.
15 | ///
16 | /// On the contrary, it will notify other players that the audio session is interrupted and can resume playback.
17 | ///
18 | /// - Note: It is recommended to turn it on before starting to play, and turn it off when you don't need to play at all.
19 | @objc
20 | open func setActiveSession(
21 | _ enabled: Bool,
22 | category: AVAudioSession.Category = .playback,
23 | mode: AVAudioSession.Mode = .default,
24 | categoryOptions: AVAudioSession.CategoryOptions = [],
25 | activeOptions: AVAudioSession.SetActiveOptions = []
26 | ) {
27 | do {
28 | let session = AVAudioSession.sharedInstance()
29 | try session.setCategory(category, mode: mode, options: categoryOptions)
30 | try session.setActive(enabled, options: activeOptions)
31 | } catch {
32 | logger.error(" [DEBUG] Active session error: \(error)")
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/AudioPlaybackManager/Classes/AudioPlaybackManager+Cache.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AudioPlaybackManager+Cache.swift
3 | //
4 | // Created by 刘铭 on 2023/3/25.
5 | //
6 |
7 | import Foundation
8 | import VIMediaCache
9 |
10 | extension AudioPlaybackManager {
11 |
12 | private struct AssociatedKeys {
13 | static var resouceLoaderKey: Void?
14 | static var cacheEnabledKey: Void?
15 | }
16 |
17 | // MARK: Public Properties
18 |
19 | /// Allow cache online resources and load from the cache.
20 | ///
21 | /// Default is `false`.
22 | @objc
23 | open var cacheEnabled: Bool {
24 | get {
25 | return objc_getAssociatedObject(self, &AssociatedKeys.cacheEnabledKey) as? Bool ?? false
26 | }
27 | set {
28 | objc_setAssociatedObject(self, &AssociatedKeys.cacheEnabledKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
29 | }
30 | }
31 |
32 | // MARK: Private Properties
33 |
34 | /// The instance of `VIResourceLoaderManager`.
35 | private var resouceLoader: VIResourceLoaderManager {
36 | if let resouceLoader = objc_getAssociatedObject(self, &AssociatedKeys.resouceLoaderKey) as? VIResourceLoaderManager {
37 | return resouceLoader
38 | }
39 |
40 | let resouceLoader = VIResourceLoaderManager()
41 | objc_setAssociatedObject(self, &AssociatedKeys.resouceLoaderKey, resouceLoader, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
42 | return resouceLoader
43 | }
44 | }
45 |
46 | extension AudioPlaybackManager {
47 |
48 | internal func generateCachePlayerItem(withURL url: URL) -> AVPlayerItem {
49 | return resouceLoader.playerItem(with: url)
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.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 | "idiom" : "ios-marketing",
45 | "size" : "1024x1024",
46 | "scale" : "1x"
47 | }
48 | ],
49 | "info" : {
50 | "version" : 1,
51 | "author" : "xcode"
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_backward.disable.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "meditation_player_backward@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "meditation_player_backward@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_backward.disable.imageset/meditation_player_backward@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_backward.disable.imageset/meditation_player_backward@2x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_backward.disable.imageset/meditation_player_backward@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_backward.disable.imageset/meditation_player_backward@3x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_backward.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "meditation_player_backward@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "meditation_player_backward@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_backward.imageset/meditation_player_backward@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_backward.imageset/meditation_player_backward@2x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_backward.imageset/meditation_player_backward@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_backward.imageset/meditation_player_backward@3x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_forward.disable.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "meditation_player_forward@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "meditation_player_forward@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_forward.disable.imageset/meditation_player_forward@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_forward.disable.imageset/meditation_player_forward@2x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_forward.disable.imageset/meditation_player_forward@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_forward.disable.imageset/meditation_player_forward@3x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_forward.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "meditation_player_forward@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "meditation_player_forward@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_forward.imageset/meditation_player_forward@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_forward.imageset/meditation_player_forward@2x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_forward.imageset/meditation_player_forward@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_forward.imageset/meditation_player_forward@3x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_loading.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "meditation_player_loading@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "meditation_player_loading@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_loading.imageset/meditation_player_loading@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_loading.imageset/meditation_player_loading@2x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_loading.imageset/meditation_player_loading@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_loading.imageset/meditation_player_loading@3x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_next.disable.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "meditation_player_next@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "meditation_player_next@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_next.disable.imageset/meditation_player_next@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_next.disable.imageset/meditation_player_next@2x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_next.disable.imageset/meditation_player_next@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_next.disable.imageset/meditation_player_next@3x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_next.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "meditation_player_next@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "meditation_player_next@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_next.imageset/meditation_player_next@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_next.imageset/meditation_player_next@2x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_next.imageset/meditation_player_next@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_next.imageset/meditation_player_next@3x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_pause.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "meditation_player_pause@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "meditation_player_pause@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_pause.imageset/meditation_player_pause@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_pause.imageset/meditation_player_pause@2x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_pause.imageset/meditation_player_pause@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_pause.imageset/meditation_player_pause@3x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_play.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "meditation_player_play@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "meditation_player_play@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_play.imageset/meditation_player_play@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_play.imageset/meditation_player_play@2x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_play.imageset/meditation_player_play@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_play.imageset/meditation_player_play@3x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_previous.disable.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "meditation_player_previous@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "meditation_player_previous@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_previous.disable.imageset/meditation_player_previous@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_previous.disable.imageset/meditation_player_previous@2x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_previous.disable.imageset/meditation_player_previous@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_previous.disable.imageset/meditation_player_previous@3x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_previous.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "meditation_player_previous@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "meditation_player_previous@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_previous.imageset/meditation_player_previous@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_previous.imageset/meditation_player_previous@2x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_previous.imageset/meditation_player_previous@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_previous.imageset/meditation_player_previous@3x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_volume.down.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "meditation_player_volume@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "meditation_player_volume@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_volume.down.imageset/meditation_player_volume@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_volume.down.imageset/meditation_player_volume@2x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_volume.down.imageset/meditation_player_volume@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_volume.down.imageset/meditation_player_volume@3x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_volume.up.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "meditation_player_volume@2x.png",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "filename" : "meditation_player_volume@3x.png",
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "author" : "xcode",
20 | "version" : 1
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_volume.up.imageset/meditation_player_volume@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_volume.up.imageset/meditation_player_volume@2x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Images.xcassets/player_volume.up.imageset/meditation_player_volume@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Images.xcassets/player_volume.up.imageset/meditation_player_volume@3x.png
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/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 | UIBackgroundModes
26 |
27 | audio
28 |
29 | UILaunchStoryboardName
30 | LaunchScreen
31 | UIMainStoryboardFile
32 | Main
33 | UIRequiredDeviceCapabilities
34 |
35 | armv7
36 |
37 | UISupportedInterfaceOrientations
38 |
39 | UIInterfaceOrientationPortrait
40 |
41 | UISupportedInterfaceOrientations~ipad
42 |
43 | UIInterfaceOrientationLandscapeLeft
44 | UIInterfaceOrientationPortrait
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Resources/Song 1.m4a:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Resources/Song 1.m4a
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Resources/Song 2.m4a:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Resources/Song 2.m4a
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Resources/artwork.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Resources/artwork.jpg
--------------------------------------------------------------------------------
/Example/AudioPlaybackManager/Resources/暗里着迷.m4a:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoMing0109/AudioPlaybackManager/6440099a98385f637ff444ff032210907db67de3/Example/AudioPlaybackManager/Resources/暗里着迷.m4a
--------------------------------------------------------------------------------
/Example/Podfile:
--------------------------------------------------------------------------------
1 | use_frameworks!
2 |
3 | platform :ios, '10.0'
4 |
5 | source 'https://github.com/CocoaPods/Specs.git'
6 |
7 | target 'AudioPlaybackManager_Example' do
8 | pod 'AudioPlaybackManager', :path => '../'
9 |
10 | pod 'SnapKit'
11 | pod 'RxSwift'
12 | pod 'RxCocoa'
13 | pod 'VIMediaCache', :git => 'https://github.com/vitoziv/VIMediaCache.git'
14 |
15 | target 'AudioPlaybackManager_Tests' do
16 | inherit! :search_paths
17 | end
18 | end
19 |
--------------------------------------------------------------------------------
/Example/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - AudioPlaybackManager (0.1.0):
3 | - VIMediaCache (~> 0.4)
4 | - RxCocoa (6.6.0):
5 | - RxRelay (= 6.6.0)
6 | - RxSwift (= 6.6.0)
7 | - RxRelay (6.6.0):
8 | - RxSwift (= 6.6.0)
9 | - RxSwift (6.6.0)
10 | - SnapKit (5.6.0)
11 | - VIMediaCache (0.4)
12 |
13 | DEPENDENCIES:
14 | - AudioPlaybackManager (from `../`)
15 | - RxCocoa
16 | - RxSwift
17 | - SnapKit
18 | - VIMediaCache (from `https://github.com/vitoziv/VIMediaCache.git`)
19 |
20 | SPEC REPOS:
21 | https://github.com/CocoaPods/Specs.git:
22 | - RxCocoa
23 | - RxRelay
24 | - RxSwift
25 | - SnapKit
26 |
27 | EXTERNAL SOURCES:
28 | AudioPlaybackManager:
29 | :path: "../"
30 | VIMediaCache:
31 | :git: https://github.com/vitoziv/VIMediaCache.git
32 |
33 | CHECKOUT OPTIONS:
34 | VIMediaCache:
35 | :commit: b9c4564d2eda0d1bc6d218bfd7582d2e5e76bbab
36 | :git: https://github.com/vitoziv/VIMediaCache.git
37 |
38 | SPEC CHECKSUMS:
39 | AudioPlaybackManager: 6d5a30182e01a726823b39539574293a581223be
40 | RxCocoa: 44a80de90e25b739b5aeaae3c8c371a32e3343cc
41 | RxRelay: 45eaa5db8ee4fb50e5ebd57deec0159e97fa51e6
42 | RxSwift: a4b44f7d24599f674deebd1818eab82e58410632
43 | SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25
44 | VIMediaCache: aa650f82cb114c68a343beb4e67416cf5eb2f3a2
45 |
46 | PODFILE CHECKSUM: 88961b32248cf1ac537dbc2251436ebd4ec4511d
47 |
48 | COCOAPODS: 1.15.2
49 |
--------------------------------------------------------------------------------
/Example/Pods/Local Podspecs/AudioPlaybackManager.podspec.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "AudioPlaybackManager",
3 | "version": "0.1.0",
4 | "summary": "A audio playback manager.",
5 | "homepage": "https://github.com/xiaoMing0109/AudioPlaybackManager",
6 | "license": {
7 | "type": "MIT",
8 | "file": "LICENSE"
9 | },
10 | "authors": {
11 | "LiuMing": "liuming_0109@163.com"
12 | },
13 | "source": {
14 | "git": "https://github.com/xiaoMing0109/AudioPlaybackManager.git",
15 | "tag": "0.1.0"
16 | },
17 | "platforms": {
18 | "ios": "10.0"
19 | },
20 | "swift_versions": "5.0",
21 | "requires_arc": true,
22 | "source_files": "AudioPlaybackManager/Classes/**/*",
23 | "frameworks": [
24 | "UIKit",
25 | "Foundation",
26 | "AVFoundation",
27 | "MediaPlayer"
28 | ],
29 | "dependencies": {
30 | "VIMediaCache": [
31 | "~> 0.4"
32 | ]
33 | },
34 | "swift_version": "5.0"
35 | }
36 |
--------------------------------------------------------------------------------
/Example/Pods/Local Podspecs/VIMediaCache.podspec.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "VIMediaCache",
3 | "version": "0.4",
4 | "license": "MIT",
5 | "summary": "VIMediaCache is a tool to cache media file while play media using AVPlayer",
6 | "homepage": "https://github.com/vitoziv/VIMediaCache",
7 | "authors": {
8 | "Vito": "vvitozhang@gmail.com"
9 | },
10 | "source": {
11 | "git": "https://github.com/vitoziv/VIMediaCache.git",
12 | "tag": "0.4"
13 | },
14 | "platforms": {
15 | "ios": "9.0"
16 | },
17 | "source_files": [
18 | "VIMediaCache/*.{h,m}",
19 | "VIMediaCache/**/*.{h,m}"
20 | ],
21 | "frameworks": [
22 | "MobileCoreServices",
23 | "AVFoundation"
24 | ],
25 | "requires_arc": true
26 | }
27 |
--------------------------------------------------------------------------------
/Example/Pods/Manifest.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - AudioPlaybackManager (0.1.0):
3 | - VIMediaCache (~> 0.4)
4 | - RxCocoa (6.6.0):
5 | - RxRelay (= 6.6.0)
6 | - RxSwift (= 6.6.0)
7 | - RxRelay (6.6.0):
8 | - RxSwift (= 6.6.0)
9 | - RxSwift (6.6.0)
10 | - SnapKit (5.6.0)
11 | - VIMediaCache (0.4)
12 |
13 | DEPENDENCIES:
14 | - AudioPlaybackManager (from `../`)
15 | - RxCocoa
16 | - RxSwift
17 | - SnapKit
18 | - VIMediaCache (from `https://github.com/vitoziv/VIMediaCache.git`)
19 |
20 | SPEC REPOS:
21 | https://github.com/CocoaPods/Specs.git:
22 | - RxCocoa
23 | - RxRelay
24 | - RxSwift
25 | - SnapKit
26 |
27 | EXTERNAL SOURCES:
28 | AudioPlaybackManager:
29 | :path: "../"
30 | VIMediaCache:
31 | :git: https://github.com/vitoziv/VIMediaCache.git
32 |
33 | CHECKOUT OPTIONS:
34 | VIMediaCache:
35 | :commit: b9c4564d2eda0d1bc6d218bfd7582d2e5e76bbab
36 | :git: https://github.com/vitoziv/VIMediaCache.git
37 |
38 | SPEC CHECKSUMS:
39 | AudioPlaybackManager: 6d5a30182e01a726823b39539574293a581223be
40 | RxCocoa: 44a80de90e25b739b5aeaae3c8c371a32e3343cc
41 | RxRelay: 45eaa5db8ee4fb50e5ebd57deec0159e97fa51e6
42 | RxSwift: a4b44f7d24599f674deebd1818eab82e58410632
43 | SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25
44 | VIMediaCache: aa650f82cb114c68a343beb4e67416cf5eb2f3a2
45 |
46 | PODFILE CHECKSUM: 88961b32248cf1ac537dbc2251436ebd4ec4511d
47 |
48 | COCOAPODS: 1.15.2
49 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/LICENSE.md:
--------------------------------------------------------------------------------
1 | **The MIT License**
2 | **Copyright © 2015 Krunoslav Zaher, Shai Mishali**
3 | **All rights reserved.**
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6 |
7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8 |
9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/Platform/DataStructures/InfiniteSequence.swift:
--------------------------------------------------------------------------------
1 | //
2 | // InfiniteSequence.swift
3 | // Platform
4 | //
5 | // Created by Krunoslav Zaher on 6/13/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | /// Sequence that repeats `repeatedValue` infinite number of times.
10 | struct InfiniteSequence : Sequence {
11 | typealias Iterator = AnyIterator
12 |
13 | private let repeatedValue: Element
14 |
15 | init(repeatedValue: Element) {
16 | self.repeatedValue = repeatedValue
17 | }
18 |
19 | func makeIterator() -> Iterator {
20 | let repeatedValue = self.repeatedValue
21 | return AnyIterator { repeatedValue }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/Platform/DispatchQueue+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DispatchQueue+Extensions.swift
3 | // Platform
4 | //
5 | // Created by Krunoslav Zaher on 10/22/16.
6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Dispatch
10 |
11 | extension DispatchQueue {
12 | private static var token: DispatchSpecificKey<()> = {
13 | let key = DispatchSpecificKey<()>()
14 | DispatchQueue.main.setSpecific(key: key, value: ())
15 | return key
16 | }()
17 |
18 | static var isMain: Bool {
19 | DispatchQueue.getSpecific(key: token) != nil
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/Platform/Platform.Darwin.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Platform.Darwin.swift
3 | // Platform
4 | //
5 | // Created by Krunoslav Zaher on 12/29/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS)
10 |
11 | import Darwin
12 | import Foundation
13 |
14 | extension Thread {
15 | static func setThreadLocalStorageValue(_ value: T?, forKey key: NSCopying) {
16 | let currentThread = Thread.current
17 | let threadDictionary = currentThread.threadDictionary
18 |
19 | if let newValue = value {
20 | threadDictionary[key] = newValue
21 | }
22 | else {
23 | threadDictionary[key] = nil
24 | }
25 | }
26 |
27 | static func getThreadLocalStorageValueForKey(_ key: NSCopying) -> T? {
28 | let currentThread = Thread.current
29 | let threadDictionary = currentThread.threadDictionary
30 |
31 | return threadDictionary[key] as? T
32 | }
33 | }
34 |
35 | #endif
36 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/Platform/Platform.Linux.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Platform.Linux.swift
3 | // Platform
4 | //
5 | // Created by Krunoslav Zaher on 12/29/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(Linux)
10 |
11 | import Foundation
12 |
13 | extension Thread {
14 |
15 | static func setThreadLocalStorageValue(_ value: T?, forKey key: String) {
16 | if let newValue = value {
17 | Thread.current.threadDictionary[key] = newValue
18 | }
19 | else {
20 | Thread.current.threadDictionary[key] = nil
21 | }
22 | }
23 |
24 | static func getThreadLocalStorageValueForKey(_ key: String) -> T? {
25 | let currentThread = Thread.current
26 | let threadDictionary = currentThread.threadDictionary
27 |
28 | return threadDictionary[key] as? T
29 | }
30 | }
31 |
32 | #endif
33 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/Platform/RecursiveLock.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RecursiveLock.swift
3 | // Platform
4 | //
5 | // Created by Krunoslav Zaher on 12/18/16.
6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | #if TRACE_RESOURCES
12 | class RecursiveLock: NSRecursiveLock {
13 | override init() {
14 | _ = Resources.incrementTotal()
15 | super.init()
16 | }
17 |
18 | override func lock() {
19 | super.lock()
20 | _ = Resources.incrementTotal()
21 | }
22 |
23 | override func unlock() {
24 | super.unlock()
25 | _ = Resources.decrementTotal()
26 | }
27 |
28 | deinit {
29 | _ = Resources.decrementTotal()
30 | }
31 | }
32 | #else
33 | typealias RecursiveLock = NSRecursiveLock
34 | #endif
35 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/Common/RxTarget.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxTarget.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 7/12/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | import RxSwift
12 |
13 | class RxTarget : NSObject
14 | , Disposable {
15 |
16 | private var retainSelf: RxTarget?
17 |
18 | override init() {
19 | super.init()
20 | self.retainSelf = self
21 |
22 | #if TRACE_RESOURCES
23 | _ = Resources.incrementTotal()
24 | #endif
25 |
26 | #if DEBUG
27 | MainScheduler.ensureRunningOnMainThread()
28 | #endif
29 | }
30 |
31 | func dispose() {
32 | #if DEBUG
33 | MainScheduler.ensureRunningOnMainThread()
34 | #endif
35 | self.retainSelf = nil
36 | }
37 |
38 | #if TRACE_RESOURCES
39 | deinit {
40 | _ = Resources.decrementTotal()
41 | }
42 | #endif
43 | }
44 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/Common/SectionedViewDataSourceType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SectionedViewDataSourceType.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 1/10/16.
6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | /// Data source with access to underlying sectioned model.
12 | public protocol SectionedViewDataSourceType {
13 | /// Returns model at index path.
14 | ///
15 | /// In case data source doesn't contain any sections when this method is being called, `RxCocoaError.ItemsNotYetBound(object: self)` is thrown.
16 |
17 | /// - parameter indexPath: Model index path
18 | /// - returns: Model at index path.
19 | func model(at indexPath: IndexPath) throws -> Any
20 | }
21 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/Foundation/KVORepresentable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // KVORepresentable.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 11/14/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | /// Type that is KVO representable (KVO mechanism can be used to observe it).
10 | public protocol KVORepresentable {
11 | /// Associated KVO type.
12 | associatedtype KVOType
13 |
14 | /// Constructs `Self` using KVO value.
15 | init?(KVOValue: KVOType)
16 | }
17 |
18 | extension KVORepresentable {
19 | /// Initializes `KVORepresentable` with optional value.
20 | init?(KVOValue: KVOType?) {
21 | guard let KVOValue = KVOValue else {
22 | return nil
23 | }
24 |
25 | self.init(KVOValue: KVOValue)
26 | }
27 | }
28 |
29 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/Foundation/NotificationCenter+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NotificationCenter+Rx.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 5/2/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import RxSwift
11 |
12 | extension Reactive where Base: NotificationCenter {
13 | /**
14 | Transforms notifications posted to notification center to observable sequence of notifications.
15 |
16 | - parameter name: Optional name used to filter notifications.
17 | - parameter object: Optional object used to filter notifications.
18 | - returns: Observable sequence of posted notifications.
19 | */
20 | public func notification(_ name: Notification.Name?, object: AnyObject? = nil) -> Observable {
21 | return Observable.create { [weak object] observer in
22 | let nsObserver = self.base.addObserver(forName: name, object: object, queue: nil) { notification in
23 | observer.on(.next(notification))
24 | }
25 |
26 | return Disposables.create {
27 | self.base.removeObserver(nsObserver)
28 | }
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/Runtime/_RX.m:
--------------------------------------------------------------------------------
1 | //
2 | // _RX.m
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 7/12/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #import "include/_RX.h"
10 |
11 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/Runtime/_RXKVOObserver.m:
--------------------------------------------------------------------------------
1 | //
2 | // _RXKVOObserver.m
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 7/11/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #import "include/_RXKVOObserver.h"
10 |
11 | @interface _RXKVOObserver ()
12 |
13 | @property (nonatomic, unsafe_unretained) id target;
14 | @property (nonatomic, strong ) id retainedTarget;
15 | @property (nonatomic, copy ) NSString *keyPath;
16 | @property (nonatomic, copy ) void (^callback)(id);
17 |
18 | @end
19 |
20 | @implementation _RXKVOObserver
21 |
22 | -(instancetype)initWithTarget:(id)target
23 | retainTarget:(BOOL)retainTarget
24 | keyPath:(NSString*)keyPath
25 | options:(NSKeyValueObservingOptions)options
26 | callback:(void (^)(id))callback {
27 | self = [super init];
28 | if (!self) return nil;
29 |
30 | self.target = target;
31 | if (retainTarget) {
32 | self.retainedTarget = target;
33 | }
34 | self.keyPath = keyPath;
35 | self.callback = callback;
36 |
37 | [self.target addObserver:self forKeyPath:self.keyPath options:options context:nil];
38 |
39 | return self;
40 | }
41 |
42 | -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
43 | @synchronized(self) {
44 | self.callback(change[NSKeyValueChangeNewKey]);
45 | }
46 | }
47 |
48 | -(void)dispose {
49 | [self.target removeObserver:self forKeyPath:self.keyPath context:nil];
50 | self.target = nil;
51 | self.retainedTarget = nil;
52 | }
53 |
54 | @end
55 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/Runtime/include/RxCocoaRuntime.h:
--------------------------------------------------------------------------------
1 | //
2 | // RxCocoaRuntime.h
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 2/21/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "_RX.h"
11 | #import "_RXDelegateProxy.h"
12 | #import "_RXKVOObserver.h"
13 | #import "_RXObjCRuntime.h"
14 |
15 | //! Project version number for RxCocoa.
16 | FOUNDATION_EXPORT double RxCocoaVersionNumber;
17 |
18 | //! Project version string for RxCocoa.
19 | FOUNDATION_EXPORT const unsigned char RxCocoaVersionString[];
20 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/Runtime/include/_RXDelegateProxy.h:
--------------------------------------------------------------------------------
1 | //
2 | // _RXDelegateProxy.h
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 7/4/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface _RXDelegateProxy : NSObject
14 |
15 | @property (nonatomic, weak, readonly) id _forwardToDelegate;
16 |
17 | -(void)_setForwardToDelegate:(id __nullable)forwardToDelegate retainDelegate:(BOOL)retainDelegate NS_SWIFT_NAME(_setForwardToDelegate(_:retainDelegate:)) ;
18 |
19 | -(BOOL)hasWiredImplementationForSelector:(SEL)selector;
20 | -(BOOL)voidDelegateMethodsContain:(SEL)selector;
21 |
22 | -(void)_sentMessage:(SEL)selector withArguments:(NSArray*)arguments;
23 | -(void)_methodInvoked:(SEL)selector withArguments:(NSArray*)arguments;
24 |
25 | @end
26 |
27 | NS_ASSUME_NONNULL_END
28 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/Runtime/include/_RXKVOObserver.h:
--------------------------------------------------------------------------------
1 | //
2 | // _RXKVOObserver.h
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 7/11/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | /**
12 | ################################################################################
13 | This file is part of RX private API
14 | ################################################################################
15 | */
16 |
17 | // Exists because if written in Swift, reading unowned is disabled during dealloc process
18 | @interface _RXKVOObserver : NSObject
19 |
20 | -(instancetype)initWithTarget:(id)target
21 | retainTarget:(BOOL)retainTarget
22 | keyPath:(NSString*)keyPath
23 | options:(NSKeyValueObservingOptions)options
24 | callback:(void (^)(id))callback;
25 |
26 | -(void)dispose;
27 |
28 | @end
29 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/RxCocoa.h:
--------------------------------------------------------------------------------
1 | //
2 | // RxCocoa.h
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 2/21/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 | #import
12 | #import
13 | #import
14 |
15 | //! Project version number for RxCocoa.
16 | FOUNDATION_EXPORT double RxCocoaVersionNumber;
17 |
18 | //! Project version string for RxCocoa.
19 | FOUNDATION_EXPORT const unsigned char RxCocoaVersionString[];
20 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/Traits/Driver/BehaviorRelay+Driver.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BehaviorRelay+Driver.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 10/7/17.
6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import RxSwift
10 | import RxRelay
11 |
12 | extension BehaviorRelay {
13 | /// Converts `BehaviorRelay` to `Driver`.
14 | ///
15 | /// - returns: Observable sequence.
16 | public func asDriver() -> Driver {
17 | let source = self.asObservable()
18 | .observe(on:DriverSharingStrategy.scheduler)
19 | return SharedSequence(source)
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/Traits/Driver/ControlEvent+Driver.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ControlEvent+Driver.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 9/19/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import RxSwift
10 |
11 | extension ControlEvent {
12 | /// Converts `ControlEvent` to `Driver` trait.
13 | ///
14 | /// `ControlEvent` already can't fail, so no special case needs to be handled.
15 | public func asDriver() -> Driver {
16 | return self.asDriver { _ -> Driver in
17 | #if DEBUG
18 | rxFatalError("Somehow driver received error from a source that shouldn't fail.")
19 | #else
20 | return Driver.empty()
21 | #endif
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/Traits/Driver/ControlProperty+Driver.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ControlProperty+Driver.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 9/19/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import RxSwift
10 |
11 | extension ControlProperty {
12 | /// Converts `ControlProperty` to `Driver` trait.
13 | ///
14 | /// `ControlProperty` already can't fail, so no special case needs to be handled.
15 | public func asDriver() -> Driver {
16 | return self.asDriver { _ -> Driver in
17 | #if DEBUG
18 | rxFatalError("Somehow driver received error from a source that shouldn't fail.")
19 | #else
20 | return Driver.empty()
21 | #endif
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/Traits/Driver/Infallible+Driver.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Infallible+Driver.swift
3 | // RxCocoa
4 | //
5 | // Created by Anton Siliuk on 14/02/2022.
6 | // Copyright © 2022 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import RxSwift
10 |
11 | extension InfallibleType {
12 | /// Converts `InfallibleType` to `Driver`.
13 | ///
14 | /// - returns: Observable sequence.
15 | public func asDriver() -> Driver {
16 | SharedSequence(asObservable().observe(on: DriverSharingStrategy.scheduler))
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/Traits/SharedSequence/SharedSequence+Concurrency.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SharedSequence+Concurrency.swift
3 | // RxCocoa
4 | //
5 | // Created by Shai Mishali on 22/09/2021.
6 | // Copyright © 2021 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if swift(>=5.6) && canImport(_Concurrency) && !os(Linux)
10 | import Foundation
11 |
12 | // MARK: - Shared Sequence
13 | @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)
14 | public extension SharedSequence {
15 | /// Allows iterating over the values of this Shared Sequence
16 | /// asynchronously via Swift's concurrency features (`async/await`)
17 | ///
18 | /// A sample usage would look like so:
19 | ///
20 | /// ```swift
21 | /// for await value in driver.values {
22 | /// // Handle emitted values
23 | /// }
24 | /// ```
25 | @MainActor var values: AsyncStream {
26 | AsyncStream { continuation in
27 | // It is safe to ignore the `onError` closure here since
28 | // Shared Sequences (`Driver` and `Signal`) cannot fail
29 | let disposable = self.asObservable()
30 | .subscribe(
31 | onNext: { value in continuation.yield(value) },
32 | onCompleted: { continuation.finish() }
33 | )
34 | continuation.onTermination = { @Sendable termination in
35 | if termination == .cancelled {
36 | disposable.dispose()
37 | }
38 | }
39 | }
40 | }
41 | }
42 | #endif
43 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/Traits/Signal/ControlEvent+Signal.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ControlEvent+Signal.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 11/1/17.
6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import RxSwift
10 |
11 | extension ControlEvent {
12 | /// Converts `ControlEvent` to `Signal` trait.
13 | ///
14 | /// `ControlEvent` already can't fail, so no special case needs to be handled.
15 | public func asSignal() -> Signal {
16 | return self.asSignal { _ -> Signal in
17 | #if DEBUG
18 | rxFatalError("Somehow signal received error from a source that shouldn't fail.")
19 | #else
20 | return Signal.empty()
21 | #endif
22 | }
23 | }
24 | }
25 |
26 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/Traits/Signal/PublishRelay+Signal.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PublishRelay+Signal.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 12/28/15.
6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import RxSwift
10 | import RxRelay
11 |
12 | extension PublishRelay {
13 | /// Converts `PublishRelay` to `Signal`.
14 | ///
15 | /// - returns: Observable sequence.
16 | public func asSignal() -> Signal {
17 | let source = self.asObservable()
18 | .observe(on:SignalSharingStrategy.scheduler)
19 | return SharedSequence(source)
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/Events/ItemEvents.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ItemEvents.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 6/20/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS) || os(tvOS)
10 | import UIKit
11 |
12 | public typealias ItemMovedEvent = (sourceIndex: IndexPath, destinationIndex: IndexPath)
13 | public typealias WillDisplayCellEvent = (cell: UITableViewCell, indexPath: IndexPath)
14 | public typealias DidEndDisplayingCellEvent = (cell: UITableViewCell, indexPath: IndexPath)
15 | #endif
16 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/NSTextStorage+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NSTextStorage+Rx.swift
3 | // RxCocoa
4 | //
5 | // Created by Segii Shulga on 12/30/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS) || os(tvOS)
10 | import RxSwift
11 | import UIKit
12 |
13 | extension Reactive where Base: NSTextStorage {
14 |
15 | /// Reactive wrapper for `delegate`.
16 | ///
17 | /// For more information take a look at `DelegateProxyType` protocol documentation.
18 | public var delegate: DelegateProxy {
19 | return RxTextStorageDelegateProxy.proxy(for: base)
20 | }
21 |
22 | /// Reactive wrapper for `delegate` message.
23 | public var didProcessEditingRangeChangeInLength: Observable<(editedMask: NSTextStorage.EditActions, editedRange: NSRange, delta: Int)> {
24 | return delegate
25 | .methodInvoked(#selector(NSTextStorageDelegate.textStorage(_:didProcessEditing:range:changeInLength:)))
26 | .map { a in
27 | let editedMask = NSTextStorage.EditActions(rawValue: try castOrThrow(UInt.self, a[1]) )
28 | let editedRange = try castOrThrow(NSValue.self, a[2]).rangeValue
29 | let delta = try castOrThrow(Int.self, a[3])
30 |
31 | return (editedMask, editedRange, delta)
32 | }
33 | }
34 | }
35 | #endif
36 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/Protocols/RxCollectionViewDataSourceType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxCollectionViewDataSourceType.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 6/29/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS) || os(tvOS)
10 |
11 | import UIKit
12 | import RxSwift
13 |
14 | /// Marks data source as `UICollectionView` reactive data source enabling it to be used with one of the `bindTo` methods.
15 | public protocol RxCollectionViewDataSourceType /*: UICollectionViewDataSource*/ {
16 |
17 | /// Type of elements that can be bound to collection view.
18 | associatedtype Element
19 |
20 | /// New observable sequence event observed.
21 | ///
22 | /// - parameter collectionView: Bound collection view.
23 | /// - parameter observedEvent: Event
24 | func collectionView(_ collectionView: UICollectionView, observedEvent: Event)
25 | }
26 |
27 | #endif
28 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/Protocols/RxPickerViewDataSourceType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxPickerViewDataSourceType.swift
3 | // RxCocoa
4 | //
5 | // Created by Sergey Shulga on 05/07/2017.
6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS)
10 |
11 | import UIKit
12 | import RxSwift
13 |
14 | /// Marks data source as `UIPickerView` reactive data source enabling it to be used with one of the `bindTo` methods.
15 | public protocol RxPickerViewDataSourceType {
16 | /// Type of elements that can be bound to picker view.
17 | associatedtype Element
18 |
19 | /// New observable sequence event observed.
20 | ///
21 | /// - parameter pickerView: Bound picker view.
22 | /// - parameter observedEvent: Event
23 | func pickerView(_ pickerView: UIPickerView, observedEvent: Event)
24 | }
25 |
26 | #endif
27 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/Protocols/RxTableViewDataSourceType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxTableViewDataSourceType.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 6/26/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS) || os(tvOS)
10 |
11 | import UIKit
12 | import RxSwift
13 |
14 | /// Marks data source as `UITableView` reactive data source enabling it to be used with one of the `bindTo` methods.
15 | public protocol RxTableViewDataSourceType /*: UITableViewDataSource*/ {
16 |
17 | /// Type of elements that can be bound to table view.
18 | associatedtype Element
19 |
20 | /// New observable sequence event observed.
21 | ///
22 | /// - parameter tableView: Bound table view.
23 | /// - parameter observedEvent: Event
24 | func tableView(_ tableView: UITableView, observedEvent: Event)
25 | }
26 |
27 | #endif
28 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxCollectionViewDelegateProxy.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxCollectionViewDelegateProxy.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 6/29/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS) || os(tvOS)
10 |
11 | import UIKit
12 | import RxSwift
13 |
14 | /// For more information take a look at `DelegateProxyType`.
15 | open class RxCollectionViewDelegateProxy
16 | : RxScrollViewDelegateProxy {
17 |
18 | /// Typed parent object.
19 | public weak private(set) var collectionView: UICollectionView?
20 |
21 | /// Initializes `RxCollectionViewDelegateProxy`
22 | ///
23 | /// - parameter collectionView: Parent object for delegate proxy.
24 | public init(collectionView: UICollectionView) {
25 | self.collectionView = collectionView
26 | super.init(scrollView: collectionView)
27 | }
28 | }
29 |
30 | extension RxCollectionViewDelegateProxy: UICollectionViewDelegateFlowLayout {}
31 |
32 | #endif
33 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxDelegateProxyCrashFix.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxDelegateProxyCrashFix.swift
3 | // RxCocoa
4 | //
5 | // Created by SlashDevSlashGnoll (SlashDevSlashGnoll@users.noreply.github.com) on 9/9/22.
6 | // Copyright © 2022 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS) || os(tvOS)
10 | import Foundation
11 |
12 | // This extension exists solely to get around a crash found on iOS 15.4+ where a `text`
13 | // method invocation is being sent to the RxCollectionViewDelegateProxy which doesn't implement it.
14 | // This is tracked at this bug: https://github.com/ReactiveX/RxSwift/issues/2428 This can be
15 | // removed if/when the actual source of the problem is found
16 | @objc extension RxCollectionViewDelegateProxy {
17 | var text: String {
18 | return String()
19 | }
20 | }
21 |
22 | // This extension exists solely to get around a crash found on iOS 15.4+ where a `text`
23 | // method invocation is being sent to the RxTableViewDelegateProxy which doesn't implement it.
24 | // This is tracked at this bug: https://github.com/ReactiveX/RxSwift/issues/2428 This can be
25 | //removed if/when the actual source of the problem is found
26 | @objc extension RxTableViewDelegateProxy {
27 | var text: String {
28 | return String()
29 | }
30 | }
31 | #endif
32 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxNavigationControllerDelegateProxy.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxNavigationControllerDelegateProxy.swift
3 | // RxCocoa
4 | //
5 | // Created by Diogo on 13/04/17.
6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS) || os(tvOS)
10 |
11 | import UIKit
12 | import RxSwift
13 |
14 | extension UINavigationController: HasDelegate {
15 | public typealias Delegate = UINavigationControllerDelegate
16 | }
17 |
18 | /// For more information take a look at `DelegateProxyType`.
19 | open class RxNavigationControllerDelegateProxy
20 | : DelegateProxy
21 | , DelegateProxyType {
22 |
23 | /// Typed parent object.
24 | public weak private(set) var navigationController: UINavigationController?
25 |
26 | /// - parameter navigationController: Parent object for delegate proxy.
27 | public init(navigationController: ParentObject) {
28 | self.navigationController = navigationController
29 | super.init(parentObject: navigationController, delegateProxy: RxNavigationControllerDelegateProxy.self)
30 | }
31 |
32 | // Register known implementations
33 | public static func registerKnownImplementations() {
34 | self.register { RxNavigationControllerDelegateProxy(navigationController: $0) }
35 | }
36 | }
37 |
38 | extension RxNavigationControllerDelegateProxy: UINavigationControllerDelegate {}
39 | #endif
40 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxPickerViewDelegateProxy.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxPickerViewDelegateProxy.swift
3 | // RxCocoa
4 | //
5 | // Created by Segii Shulga on 5/12/16.
6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS)
10 |
11 | import RxSwift
12 | import UIKit
13 |
14 | extension UIPickerView: HasDelegate {
15 | public typealias Delegate = UIPickerViewDelegate
16 | }
17 |
18 | open class RxPickerViewDelegateProxy
19 | : DelegateProxy
20 | , DelegateProxyType {
21 |
22 | /// Typed parent object.
23 | public weak private(set) var pickerView: UIPickerView?
24 |
25 | /// - parameter pickerView: Parent object for delegate proxy.
26 | public init(pickerView: ParentObject) {
27 | self.pickerView = pickerView
28 | super.init(parentObject: pickerView, delegateProxy: RxPickerViewDelegateProxy.self)
29 | }
30 |
31 | // Register known implementations
32 | public static func registerKnownImplementations() {
33 | self.register { RxPickerViewDelegateProxy(pickerView: $0) }
34 | }
35 | }
36 |
37 | extension RxPickerViewDelegateProxy: UIPickerViewDelegate {}
38 | #endif
39 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxSearchBarDelegateProxy.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxSearchBarDelegateProxy.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 7/4/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS) || os(tvOS)
10 |
11 | import UIKit
12 | import RxSwift
13 |
14 | extension UISearchBar: HasDelegate {
15 | public typealias Delegate = UISearchBarDelegate
16 | }
17 |
18 | /// For more information take a look at `DelegateProxyType`.
19 | open class RxSearchBarDelegateProxy
20 | : DelegateProxy
21 | , DelegateProxyType {
22 |
23 | /// Typed parent object.
24 | public weak private(set) var searchBar: UISearchBar?
25 |
26 | /// - parameter searchBar: Parent object for delegate proxy.
27 | public init(searchBar: ParentObject) {
28 | self.searchBar = searchBar
29 | super.init(parentObject: searchBar, delegateProxy: RxSearchBarDelegateProxy.self)
30 | }
31 |
32 | // Register known implementations
33 | public static func registerKnownImplementations() {
34 | self.register { RxSearchBarDelegateProxy(searchBar: $0) }
35 | }
36 | }
37 |
38 | extension RxSearchBarDelegateProxy: UISearchBarDelegate {}
39 |
40 | #endif
41 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxSearchControllerDelegateProxy.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxSearchControllerDelegateProxy.swift
3 | // RxCocoa
4 | //
5 | // Created by Segii Shulga on 3/17/16.
6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS)
10 |
11 | import RxSwift
12 | import UIKit
13 |
14 | extension UISearchController: HasDelegate {
15 | public typealias Delegate = UISearchControllerDelegate
16 | }
17 |
18 | /// For more information take a look at `DelegateProxyType`.
19 | open class RxSearchControllerDelegateProxy
20 | : DelegateProxy
21 | , DelegateProxyType {
22 |
23 | /// Typed parent object.
24 | public weak private(set) var searchController: UISearchController?
25 |
26 | /// - parameter searchController: Parent object for delegate proxy.
27 | public init(searchController: UISearchController) {
28 | self.searchController = searchController
29 | super.init(parentObject: searchController, delegateProxy: RxSearchControllerDelegateProxy.self)
30 | }
31 |
32 | // Register known implementations
33 | public static func registerKnownImplementations() {
34 | self.register { RxSearchControllerDelegateProxy(searchController: $0) }
35 | }
36 | }
37 |
38 | extension RxSearchControllerDelegateProxy: UISearchControllerDelegate {}
39 |
40 | #endif
41 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTabBarControllerDelegateProxy.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxTabBarControllerDelegateProxy.swift
3 | // RxCocoa
4 | //
5 | // Created by Yusuke Kita on 2016/12/07.
6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS) || os(tvOS)
10 |
11 | import UIKit
12 | import RxSwift
13 |
14 | extension UITabBarController: HasDelegate {
15 | public typealias Delegate = UITabBarControllerDelegate
16 | }
17 |
18 | /// For more information take a look at `DelegateProxyType`.
19 | open class RxTabBarControllerDelegateProxy
20 | : DelegateProxy
21 | , DelegateProxyType {
22 |
23 | /// Typed parent object.
24 | public weak private(set) var tabBar: UITabBarController?
25 |
26 | /// - parameter tabBar: Parent object for delegate proxy.
27 | public init(tabBar: ParentObject) {
28 | self.tabBar = tabBar
29 | super.init(parentObject: tabBar, delegateProxy: RxTabBarControllerDelegateProxy.self)
30 | }
31 |
32 | // Register known implementations
33 | public static func registerKnownImplementations() {
34 | self.register { RxTabBarControllerDelegateProxy(tabBar: $0) }
35 | }
36 | }
37 |
38 | extension RxTabBarControllerDelegateProxy: UITabBarControllerDelegate {}
39 |
40 | #endif
41 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTabBarDelegateProxy.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxTabBarDelegateProxy.swift
3 | // RxCocoa
4 | //
5 | // Created by Jesse Farless on 5/14/16.
6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS) || os(tvOS)
10 |
11 | import UIKit
12 | import RxSwift
13 |
14 | extension UITabBar: HasDelegate {
15 | public typealias Delegate = UITabBarDelegate
16 | }
17 |
18 | /// For more information take a look at `DelegateProxyType`.
19 | open class RxTabBarDelegateProxy
20 | : DelegateProxy
21 | , DelegateProxyType {
22 |
23 | /// Typed parent object.
24 | public weak private(set) var tabBar: UITabBar?
25 |
26 | /// - parameter tabBar: Parent object for delegate proxy.
27 | public init(tabBar: ParentObject) {
28 | self.tabBar = tabBar
29 | super.init(parentObject: tabBar, delegateProxy: RxTabBarDelegateProxy.self)
30 | }
31 |
32 | // Register known implementations
33 | public static func registerKnownImplementations() {
34 | self.register { RxTabBarDelegateProxy(tabBar: $0) }
35 | }
36 |
37 | /// For more information take a look at `DelegateProxyType`.
38 | open class func currentDelegate(for object: ParentObject) -> UITabBarDelegate? {
39 | object.delegate
40 | }
41 |
42 | /// For more information take a look at `DelegateProxyType`.
43 | open class func setCurrentDelegate(_ delegate: UITabBarDelegate?, to object: ParentObject) {
44 | object.delegate = delegate
45 | }
46 | }
47 |
48 | extension RxTabBarDelegateProxy: UITabBarDelegate {}
49 |
50 | #endif
51 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTableViewDelegateProxy.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxTableViewDelegateProxy.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 6/15/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS) || os(tvOS)
10 |
11 | import UIKit
12 | import RxSwift
13 |
14 | /// For more information take a look at `DelegateProxyType`.
15 | open class RxTableViewDelegateProxy
16 | : RxScrollViewDelegateProxy {
17 |
18 | /// Typed parent object.
19 | public weak private(set) var tableView: UITableView?
20 |
21 | /// - parameter tableView: Parent object for delegate proxy.
22 | public init(tableView: UITableView) {
23 | self.tableView = tableView
24 | super.init(scrollView: tableView)
25 | }
26 |
27 | }
28 |
29 | extension RxTableViewDelegateProxy: UITableViewDelegate {}
30 |
31 | #endif
32 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTextStorageDelegateProxy.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxTextStorageDelegateProxy.swift
3 | // RxCocoa
4 | //
5 | // Created by Segii Shulga on 12/30/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS) || os(tvOS)
10 |
11 | import RxSwift
12 | import UIKit
13 |
14 | extension NSTextStorage: HasDelegate {
15 | public typealias Delegate = NSTextStorageDelegate
16 | }
17 |
18 | open class RxTextStorageDelegateProxy
19 | : DelegateProxy
20 | , DelegateProxyType {
21 |
22 | /// Typed parent object.
23 | public weak private(set) var textStorage: NSTextStorage?
24 |
25 | /// - parameter textStorage: Parent object for delegate proxy.
26 | public init(textStorage: NSTextStorage) {
27 | self.textStorage = textStorage
28 | super.init(parentObject: textStorage, delegateProxy: RxTextStorageDelegateProxy.self)
29 | }
30 |
31 | // Register known implementations
32 | public static func registerKnownImplementations() {
33 | self.register { RxTextStorageDelegateProxy(textStorage: $0) }
34 | }
35 | }
36 |
37 | extension RxTextStorageDelegateProxy: NSTextStorageDelegate {}
38 | #endif
39 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxTextViewDelegateProxy.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxTextViewDelegateProxy.swift
3 | // RxCocoa
4 | //
5 | // Created by Yuta ToKoRo on 7/19/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS) || os(tvOS)
10 |
11 | import UIKit
12 | import RxSwift
13 |
14 | /// For more information take a look at `DelegateProxyType`.
15 | open class RxTextViewDelegateProxy
16 | : RxScrollViewDelegateProxy {
17 |
18 | /// Typed parent object.
19 | public weak private(set) var textView: UITextView?
20 |
21 | /// - parameter textview: Parent object for delegate proxy.
22 | public init(textView: UITextView) {
23 | self.textView = textView
24 | super.init(scrollView: textView)
25 | }
26 | }
27 |
28 | extension RxTextViewDelegateProxy: UITextViewDelegate {
29 | /// For more information take a look at `DelegateProxyType`.
30 | @objc open func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
31 | /**
32 | We've had some issues with observing text changes. This is here just in case we need the same hack in future and that
33 | we wouldn't need to change the public interface.
34 | */
35 | let forwardToDelegate = self.forwardToDelegate() as? UITextViewDelegate
36 | return forwardToDelegate?.textView?(textView,
37 | shouldChangeTextIn: range,
38 | replacementText: text) ?? true
39 | }
40 | }
41 |
42 | #endif
43 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/Proxies/RxWKNavigationDelegateProxy.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxWKNavigationDelegateProxy.swift
3 | // RxCocoa
4 | //
5 | // Created by Giuseppe Lanza on 14/02/2020.
6 | // Copyright © 2020 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS) || os(macOS)
10 |
11 | import RxSwift
12 | import WebKit
13 |
14 | @available(iOS 8.0, macOS 10.10, macOSApplicationExtension 10.10, *)
15 | open class RxWKNavigationDelegateProxy
16 | : DelegateProxy
17 | , DelegateProxyType {
18 |
19 | /// Typed parent object.
20 | public weak private(set) var webView: WKWebView?
21 |
22 | /// - parameter webView: Parent object for delegate proxy.
23 | public init(webView: ParentObject) {
24 | self.webView = webView
25 | super.init(parentObject: webView, delegateProxy: RxWKNavigationDelegateProxy.self)
26 | }
27 |
28 | // Register known implementations
29 | public static func registerKnownImplementations() {
30 | self.register { RxWKNavigationDelegateProxy(webView: $0) }
31 | }
32 |
33 | public static func currentDelegate(for object: WKWebView) -> WKNavigationDelegate? {
34 | object.navigationDelegate
35 | }
36 |
37 | public static func setCurrentDelegate(_ delegate: WKNavigationDelegate?, to object: WKWebView) {
38 | object.navigationDelegate = delegate
39 | }
40 | }
41 |
42 | @available(iOS 8.0, macOS 10.10, macOSApplicationExtension 10.10, *)
43 | extension RxWKNavigationDelegateProxy: WKNavigationDelegate {}
44 |
45 | #endif
46 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/UIActivityIndicatorView+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIActivityIndicatorView+Rx.swift
3 | // RxCocoa
4 | //
5 | // Created by Ivan Persidskiy on 02/12/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS) || os(tvOS)
10 |
11 | import UIKit
12 | import RxSwift
13 |
14 | extension Reactive where Base: UIActivityIndicatorView {
15 | /// Bindable sink for `startAnimating()`, `stopAnimating()` methods.
16 | public var isAnimating: Binder {
17 | Binder(self.base) { activityIndicator, active in
18 | if active {
19 | activityIndicator.startAnimating()
20 | } else {
21 | activityIndicator.stopAnimating()
22 | }
23 | }
24 | }
25 | }
26 |
27 | #endif
28 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/UIDatePicker+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIDatePicker+Rx.swift
3 | // RxCocoa
4 | //
5 | // Created by Daniel Tartaglia on 5/31/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS)
10 |
11 | import RxSwift
12 | import UIKit
13 |
14 | extension Reactive where Base: UIDatePicker {
15 | /// Reactive wrapper for `date` property.
16 | public var date: ControlProperty {
17 | value
18 | }
19 |
20 | /// Reactive wrapper for `date` property.
21 | public var value: ControlProperty {
22 | return base.rx.controlPropertyWithDefaultEvents(
23 | getter: { datePicker in
24 | datePicker.date
25 | }, setter: { datePicker, value in
26 | datePicker.date = value
27 | }
28 | )
29 | }
30 |
31 | /// Reactive wrapper for `countDownDuration` property.
32 | public var countDownDuration: ControlProperty {
33 | return base.rx.controlPropertyWithDefaultEvents(
34 | getter: { datePicker in
35 | datePicker.countDownDuration
36 | }, setter: { datePicker, value in
37 | datePicker.countDownDuration = value
38 | }
39 | )
40 | }
41 | }
42 |
43 | #endif
44 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/UIRefreshControl+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIRefreshControl+Rx.swift
3 | // RxCocoa
4 | //
5 | // Created by Yosuke Ishikawa on 1/31/16.
6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS)
10 |
11 | import UIKit
12 | import RxSwift
13 |
14 | extension Reactive where Base: UIRefreshControl {
15 | /// Bindable sink for `beginRefreshing()`, `endRefreshing()` methods.
16 | public var isRefreshing: Binder {
17 | return Binder(self.base) { refreshControl, refresh in
18 | if refresh {
19 | refreshControl.beginRefreshing()
20 | } else {
21 | refreshControl.endRefreshing()
22 | }
23 | }
24 | }
25 |
26 | }
27 |
28 | #endif
29 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/UISlider+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UISlider+Rx.swift
3 | // RxCocoa
4 | //
5 | // Created by Alexander van der Werff on 28/05/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS)
10 |
11 | import RxSwift
12 | import UIKit
13 |
14 | extension Reactive where Base: UISlider {
15 |
16 | /// Reactive wrapper for `value` property.
17 | public var value: ControlProperty {
18 | return base.rx.controlPropertyWithDefaultEvents(
19 | getter: { slider in
20 | slider.value
21 | }, setter: { slider, value in
22 | slider.value = value
23 | }
24 | )
25 | }
26 |
27 | }
28 |
29 | #endif
30 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/UIStepper+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIStepper+Rx.swift
3 | // RxCocoa
4 | //
5 | // Created by Yuta ToKoRo on 9/1/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS)
10 |
11 | import UIKit
12 | import RxSwift
13 |
14 | extension Reactive where Base: UIStepper {
15 |
16 | /// Reactive wrapper for `value` property.
17 | public var value: ControlProperty {
18 | return base.rx.controlPropertyWithDefaultEvents(
19 | getter: { stepper in
20 | stepper.value
21 | }, setter: { stepper, value in
22 | stepper.value = value
23 | }
24 | )
25 | }
26 | }
27 |
28 | #endif
29 |
30 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/iOS/UISwitch+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UISwitch+Rx.swift
3 | // RxCocoa
4 | //
5 | // Created by Carlos García on 8/7/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(iOS)
10 |
11 | import UIKit
12 | import RxSwift
13 |
14 | extension Reactive where Base: UISwitch {
15 |
16 | /// Reactive wrapper for `isOn` property.
17 | public var isOn: ControlProperty {
18 | value
19 | }
20 |
21 | /// Reactive wrapper for `isOn` property.
22 | ///
23 | /// ⚠️ Versions prior to iOS 10.2 were leaking `UISwitch`'s, so on those versions
24 | /// underlying observable sequence won't complete when nothing holds a strong reference
25 | /// to `UISwitch`.
26 | public var value: ControlProperty {
27 | return base.rx.controlPropertyWithDefaultEvents(
28 | getter: { uiSwitch in
29 | uiSwitch.isOn
30 | }, setter: { uiSwitch, value in
31 | uiSwitch.isOn = value
32 | }
33 | )
34 | }
35 |
36 | }
37 |
38 | #endif
39 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/macOS/NSButton+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NSButton+Rx.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 5/17/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(macOS)
10 |
11 | import RxSwift
12 | import Cocoa
13 |
14 | extension Reactive where Base: NSButton {
15 |
16 | /// Reactive wrapper for control event.
17 | public var tap: ControlEvent {
18 | self.controlEvent
19 | }
20 |
21 | /// Reactive wrapper for `state` property`.
22 | public var state: ControlProperty {
23 | return self.base.rx.controlProperty(
24 | getter: { control in
25 | return control.state
26 | }, setter: { (control: NSButton, state: NSControl.StateValue) in
27 | control.state = state
28 | }
29 | )
30 | }
31 | }
32 |
33 | #endif
34 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/macOS/NSSlider+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NSSlider+Rx.swift
3 | // RxCocoa
4 | //
5 | // Created by Junior B. on 24/05/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(macOS)
10 |
11 | import RxSwift
12 | import Cocoa
13 |
14 | extension Reactive where Base: NSSlider {
15 |
16 | /// Reactive wrapper for `value` property.
17 | public var value: ControlProperty {
18 | return self.base.rx.controlProperty(
19 | getter: { control -> Double in
20 | return control.doubleValue
21 | },
22 | setter: { control, value in
23 | control.doubleValue = value
24 | }
25 | )
26 | }
27 |
28 | }
29 |
30 | #endif
31 |
--------------------------------------------------------------------------------
/Example/Pods/RxCocoa/RxCocoa/macOS/NSView+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NSView+Rx.swift
3 | // RxCocoa
4 | //
5 | // Created by Krunoslav Zaher on 12/6/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(macOS)
10 | import Cocoa
11 | import RxSwift
12 |
13 | extension Reactive where Base: NSView {
14 | /// Bindable sink for `alphaValue` property.
15 | public var alpha: Binder {
16 | return Binder(self.base) { view, value in
17 | view.alphaValue = value
18 | }
19 | }
20 | }
21 | #endif
22 |
--------------------------------------------------------------------------------
/Example/Pods/RxRelay/LICENSE.md:
--------------------------------------------------------------------------------
1 | **The MIT License**
2 | **Copyright © 2015 Krunoslav Zaher, Shai Mishali**
3 | **All rights reserved.**
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6 |
7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8 |
9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10 |
--------------------------------------------------------------------------------
/Example/Pods/RxRelay/RxRelay/BehaviorRelay.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BehaviorRelay.swift
3 | // RxRelay
4 | //
5 | // Created by Krunoslav Zaher on 10/7/17.
6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import RxSwift
10 |
11 | /// BehaviorRelay is a wrapper for `BehaviorSubject`.
12 | ///
13 | /// Unlike `BehaviorSubject` it can't terminate with error or completed.
14 | public final class BehaviorRelay: ObservableType {
15 | private let subject: BehaviorSubject
16 |
17 | /// Accepts `event` and emits it to subscribers
18 | public func accept(_ event: Element) {
19 | self.subject.onNext(event)
20 | }
21 |
22 | /// Current value of behavior subject
23 | public var value: Element {
24 | // this try! is ok because subject can't error out or be disposed
25 | return try! self.subject.value()
26 | }
27 |
28 | /// Initializes behavior relay with initial value.
29 | public init(value: Element) {
30 | self.subject = BehaviorSubject(value: value)
31 | }
32 |
33 | /// Subscribes observer
34 | public func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element {
35 | self.subject.subscribe(observer)
36 | }
37 |
38 | /// - returns: Canonical interface for push style sequence
39 | public func asObservable() -> Observable {
40 | self.subject.asObservable()
41 | }
42 |
43 | /// Convert to an `Infallible`
44 | ///
45 | /// - returns: `Infallible`
46 | public func asInfallible() -> Infallible {
47 | asInfallible(onErrorFallbackTo: .empty())
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/Example/Pods/RxRelay/RxRelay/PublishRelay.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PublishRelay.swift
3 | // RxRelay
4 | //
5 | // Created by Krunoslav Zaher on 3/28/15.
6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import RxSwift
10 |
11 | /// PublishRelay is a wrapper for `PublishSubject`.
12 | ///
13 | /// Unlike `PublishSubject` it can't terminate with error or completed.
14 | public final class PublishRelay: ObservableType {
15 | private let subject: PublishSubject
16 |
17 | // Accepts `event` and emits it to subscribers
18 | public func accept(_ event: Element) {
19 | self.subject.onNext(event)
20 | }
21 |
22 | /// Initializes with internal empty subject.
23 | public init() {
24 | self.subject = PublishSubject()
25 | }
26 |
27 | /// Subscribes observer
28 | public func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element {
29 | self.subject.subscribe(observer)
30 | }
31 |
32 | /// - returns: Canonical interface for push style sequence
33 | public func asObservable() -> Observable {
34 | self.subject.asObservable()
35 | }
36 |
37 | /// Convert to an `Infallible`
38 | ///
39 | /// - returns: `Infallible`
40 | public func asInfallible() -> Infallible {
41 | asInfallible(onErrorFallbackTo: .empty())
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/Example/Pods/RxRelay/RxRelay/Utils.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Utils.swift
3 | // RxRelay
4 | //
5 | // Created by Shai Mishali on 09/04/2019.
6 | // Copyright © 2019 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | func rxFatalErrorInDebug(_ lastMessage: @autoclosure () -> String, file: StaticString = #file, line: UInt = #line) {
12 | #if DEBUG
13 | fatalError(lastMessage(), file: file, line: line)
14 | #else
15 | print("\(file):\(line): \(lastMessage())")
16 | #endif
17 | }
18 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/LICENSE.md:
--------------------------------------------------------------------------------
1 | **The MIT License**
2 | **Copyright © 2015 Krunoslav Zaher, Shai Mishali**
3 | **All rights reserved.**
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6 |
7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8 |
9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/Platform/AtomicInt.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AtomicInt.swift
3 | // Platform
4 | //
5 | // Created by Krunoslav Zaher on 10/28/18.
6 | // Copyright © 2018 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | final class AtomicInt: NSLock {
12 | fileprivate var value: Int32
13 | public init(_ value: Int32 = 0) {
14 | self.value = value
15 | }
16 | }
17 |
18 | @discardableResult
19 | @inline(__always)
20 | func add(_ this: AtomicInt, _ value: Int32) -> Int32 {
21 | this.lock()
22 | let oldValue = this.value
23 | this.value += value
24 | this.unlock()
25 | return oldValue
26 | }
27 |
28 | @discardableResult
29 | @inline(__always)
30 | func sub(_ this: AtomicInt, _ value: Int32) -> Int32 {
31 | this.lock()
32 | let oldValue = this.value
33 | this.value -= value
34 | this.unlock()
35 | return oldValue
36 | }
37 |
38 | @discardableResult
39 | @inline(__always)
40 | func fetchOr(_ this: AtomicInt, _ mask: Int32) -> Int32 {
41 | this.lock()
42 | let oldValue = this.value
43 | this.value |= mask
44 | this.unlock()
45 | return oldValue
46 | }
47 |
48 | @inline(__always)
49 | func load(_ this: AtomicInt) -> Int32 {
50 | this.lock()
51 | let oldValue = this.value
52 | this.unlock()
53 | return oldValue
54 | }
55 |
56 | @discardableResult
57 | @inline(__always)
58 | func increment(_ this: AtomicInt) -> Int32 {
59 | add(this, 1)
60 | }
61 |
62 | @discardableResult
63 | @inline(__always)
64 | func decrement(_ this: AtomicInt) -> Int32 {
65 | sub(this, 1)
66 | }
67 |
68 | @inline(__always)
69 | func isFlagSet(_ this: AtomicInt, _ mask: Int32) -> Bool {
70 | (load(this) & mask) != 0
71 | }
72 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/Platform/DataStructures/InfiniteSequence.swift:
--------------------------------------------------------------------------------
1 | //
2 | // InfiniteSequence.swift
3 | // Platform
4 | //
5 | // Created by Krunoslav Zaher on 6/13/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | /// Sequence that repeats `repeatedValue` infinite number of times.
10 | struct InfiniteSequence : Sequence {
11 | typealias Iterator = AnyIterator
12 |
13 | private let repeatedValue: Element
14 |
15 | init(repeatedValue: Element) {
16 | self.repeatedValue = repeatedValue
17 | }
18 |
19 | func makeIterator() -> Iterator {
20 | let repeatedValue = self.repeatedValue
21 | return AnyIterator { repeatedValue }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/Platform/DispatchQueue+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DispatchQueue+Extensions.swift
3 | // Platform
4 | //
5 | // Created by Krunoslav Zaher on 10/22/16.
6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Dispatch
10 |
11 | extension DispatchQueue {
12 | private static var token: DispatchSpecificKey<()> = {
13 | let key = DispatchSpecificKey<()>()
14 | DispatchQueue.main.setSpecific(key: key, value: ())
15 | return key
16 | }()
17 |
18 | static var isMain: Bool {
19 | DispatchQueue.getSpecific(key: token) != nil
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/Platform/Platform.Darwin.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Platform.Darwin.swift
3 | // Platform
4 | //
5 | // Created by Krunoslav Zaher on 12/29/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS)
10 |
11 | import Darwin
12 | import Foundation
13 |
14 | extension Thread {
15 | static func setThreadLocalStorageValue(_ value: T?, forKey key: NSCopying) {
16 | let currentThread = Thread.current
17 | let threadDictionary = currentThread.threadDictionary
18 |
19 | if let newValue = value {
20 | threadDictionary[key] = newValue
21 | }
22 | else {
23 | threadDictionary[key] = nil
24 | }
25 | }
26 |
27 | static func getThreadLocalStorageValueForKey(_ key: NSCopying) -> T? {
28 | let currentThread = Thread.current
29 | let threadDictionary = currentThread.threadDictionary
30 |
31 | return threadDictionary[key] as? T
32 | }
33 | }
34 |
35 | #endif
36 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/Platform/Platform.Linux.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Platform.Linux.swift
3 | // Platform
4 | //
5 | // Created by Krunoslav Zaher on 12/29/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(Linux)
10 |
11 | import Foundation
12 |
13 | extension Thread {
14 |
15 | static func setThreadLocalStorageValue(_ value: T?, forKey key: String) {
16 | if let newValue = value {
17 | Thread.current.threadDictionary[key] = newValue
18 | }
19 | else {
20 | Thread.current.threadDictionary[key] = nil
21 | }
22 | }
23 |
24 | static func getThreadLocalStorageValueForKey(_ key: String) -> T? {
25 | let currentThread = Thread.current
26 | let threadDictionary = currentThread.threadDictionary
27 |
28 | return threadDictionary[key] as? T
29 | }
30 | }
31 |
32 | #endif
33 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/Platform/RecursiveLock.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RecursiveLock.swift
3 | // Platform
4 | //
5 | // Created by Krunoslav Zaher on 12/18/16.
6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | #if TRACE_RESOURCES
12 | class RecursiveLock: NSRecursiveLock {
13 | override init() {
14 | _ = Resources.incrementTotal()
15 | super.init()
16 | }
17 |
18 | override func lock() {
19 | super.lock()
20 | _ = Resources.incrementTotal()
21 | }
22 |
23 | override func unlock() {
24 | super.unlock()
25 | _ = Resources.decrementTotal()
26 | }
27 |
28 | deinit {
29 | _ = Resources.decrementTotal()
30 | }
31 | }
32 | #else
33 | typealias RecursiveLock = NSRecursiveLock
34 | #endif
35 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Cancelable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Cancelable.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 3/12/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | /// Represents disposable resource with state tracking.
10 | public protocol Cancelable : Disposable {
11 | /// Was resource disposed.
12 | var isDisposed: Bool { get }
13 | }
14 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Concurrency/Lock.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Lock.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 3/31/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | protocol Lock {
10 | func lock()
11 | func unlock()
12 | }
13 |
14 | // https://lists.swift.org/pipermail/swift-dev/Week-of-Mon-20151214/000321.html
15 | typealias SpinLock = RecursiveLock
16 |
17 | extension RecursiveLock : Lock {
18 | @inline(__always)
19 | final func performLocked(_ action: () -> T) -> T {
20 | self.lock(); defer { self.unlock() }
21 | return action()
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Concurrency/LockOwnerType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // LockOwnerType.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 10/25/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | protocol LockOwnerType: AnyObject, Lock {
10 | var lock: RecursiveLock { get }
11 | }
12 |
13 | extension LockOwnerType {
14 | func lock() { self.lock.lock() }
15 | func unlock() { self.lock.unlock() }
16 | }
17 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Concurrency/SynchronizedDisposeType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SynchronizedDisposeType.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 10/25/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | protocol SynchronizedDisposeType: AnyObject, Disposable, Lock {
10 | func synchronized_dispose()
11 | }
12 |
13 | extension SynchronizedDisposeType {
14 | func synchronizedDispose() {
15 | self.lock(); defer { self.unlock() }
16 | self.synchronized_dispose()
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Concurrency/SynchronizedOnType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SynchronizedOnType.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 10/25/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | protocol SynchronizedOnType: AnyObject, ObserverType, Lock {
10 | func synchronized_on(_ event: Event)
11 | }
12 |
13 | extension SynchronizedOnType {
14 | func synchronizedOn(_ event: Event) {
15 | self.lock(); defer { self.unlock() }
16 | self.synchronized_on(event)
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Concurrency/SynchronizedUnsubscribeType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SynchronizedUnsubscribeType.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 10/25/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | protocol SynchronizedUnsubscribeType: AnyObject {
10 | associatedtype DisposeKey
11 |
12 | func synchronizedUnsubscribe(_ disposeKey: DisposeKey)
13 | }
14 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/ConnectableObservableType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ConnectableObservableType.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 3/1/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | /**
10 | Represents an observable sequence wrapper that can be connected and disconnected from its underlying observable sequence.
11 | */
12 | public protocol ConnectableObservableType : ObservableType {
13 | /**
14 | Connects the observable wrapper to its source. All subscribed observers will receive values from the underlying observable sequence as long as the connection is established.
15 |
16 | - returns: Disposable used to disconnect the observable wrapper from its source, causing subscribed observer to stop receiving values from the underlying observable sequence.
17 | */
18 | func connect() -> Disposable
19 | }
20 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Disposable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Disposable.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 2/8/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | /// Represents a disposable resource.
10 | public protocol Disposable {
11 | /// Dispose resource.
12 | func dispose()
13 | }
14 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Disposables/BooleanDisposable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BooleanDisposable.swift
3 | // RxSwift
4 | //
5 | // Created by Junior B. on 10/29/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | /// Represents a disposable resource that can be checked for disposal status.
10 | public final class BooleanDisposable : Cancelable {
11 |
12 | internal static let BooleanDisposableTrue = BooleanDisposable(isDisposed: true)
13 | private let disposed: AtomicInt
14 |
15 | /// Initializes a new instance of the `BooleanDisposable` class
16 | public init() {
17 | disposed = AtomicInt(0)
18 | }
19 |
20 | /// Initializes a new instance of the `BooleanDisposable` class with given value
21 | public init(isDisposed: Bool) {
22 | self.disposed = AtomicInt(isDisposed ? 1 : 0)
23 | }
24 |
25 | /// - returns: Was resource disposed.
26 | public var isDisposed: Bool {
27 | isFlagSet(self.disposed, 1)
28 | }
29 |
30 | /// Sets the status to disposed, which can be observer through the `isDisposed` property.
31 | public func dispose() {
32 | fetchOr(self.disposed, 1)
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Disposables/Disposables.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Disposables.swift
3 | // RxSwift
4 | //
5 | // Created by Mohsen Ramezanpoor on 01/08/2016.
6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | /// A collection of utility methods for common disposable operations.
10 | public struct Disposables {
11 | private init() {}
12 | }
13 |
14 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Disposables/DisposeBase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DisposeBase.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 4/4/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | /// Base class for all disposables.
10 | public class DisposeBase {
11 | init() {
12 | #if TRACE_RESOURCES
13 | _ = Resources.incrementTotal()
14 | #endif
15 | }
16 |
17 | deinit {
18 | #if TRACE_RESOURCES
19 | _ = Resources.decrementTotal()
20 | #endif
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Disposables/NopDisposable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NopDisposable.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 2/15/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | /// Represents a disposable that does nothing on disposal.
10 | ///
11 | /// Nop = No Operation
12 | private struct NopDisposable : Disposable {
13 |
14 | fileprivate static let noOp: Disposable = NopDisposable()
15 |
16 | private init() {
17 |
18 | }
19 |
20 | /// Does nothing.
21 | public func dispose() {
22 | }
23 | }
24 |
25 | extension Disposables {
26 | /**
27 | Creates a disposable that does nothing on disposal.
28 | */
29 | static public func create() -> Disposable { NopDisposable.noOp }
30 | }
31 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Disposables/SubscriptionDisposable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SubscriptionDisposable.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 10/25/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | struct SubscriptionDisposable : Disposable {
10 | private let key: T.DisposeKey
11 | private weak var owner: T?
12 |
13 | init(owner: T, key: T.DisposeKey) {
14 | self.owner = owner
15 | self.key = key
16 | }
17 |
18 | func dispose() {
19 | self.owner?.synchronizedUnsubscribe(self.key)
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Extensions/Bag+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Bag+Rx.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 10/19/16.
6 | // Copyright © 2016 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 |
10 | // MARK: forEach
11 |
12 | @inline(__always)
13 | func dispatch(_ bag: Bag<(Event) -> Void>, _ event: Event) {
14 | bag._value0?(event)
15 |
16 | if bag._onlyFastPath {
17 | return
18 | }
19 |
20 | let pairs = bag._pairs
21 | for i in 0 ..< pairs.count {
22 | pairs[i].value(event)
23 | }
24 |
25 | if let dictionary = bag._dictionary {
26 | for element in dictionary.values {
27 | element(event)
28 | }
29 | }
30 | }
31 |
32 | /// Dispatches `dispose` to all disposables contained inside bag.
33 | func disposeAll(in bag: Bag) {
34 | bag._value0?.dispose()
35 |
36 | if bag._onlyFastPath {
37 | return
38 | }
39 |
40 | let pairs = bag._pairs
41 | for i in 0 ..< pairs.count {
42 | pairs[i].value.dispose()
43 | }
44 |
45 | if let dictionary = bag._dictionary {
46 | for element in dictionary.values {
47 | element.dispose()
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/GroupedObservable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GroupedObservable.swift
3 | // RxSwift
4 | //
5 | // Created by Tomi Koskinen on 01/12/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | /// Represents an observable sequence of elements that have a common key.
10 | public struct GroupedObservable : ObservableType {
11 | /// Gets the common key.
12 | public let key: Key
13 |
14 | private let source: Observable
15 |
16 | /// Initializes grouped observable sequence with key and source observable sequence.
17 | ///
18 | /// - parameter key: Grouped observable sequence key
19 | /// - parameter source: Observable sequence that represents sequence of elements for the key
20 | /// - returns: Grouped observable sequence of elements for the specific key
21 | public init(key: Key, source: Observable) {
22 | self.key = key
23 | self.source = source
24 | }
25 |
26 | /// Subscribes `observer` to receive events for this sequence.
27 | public func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element {
28 | self.source.subscribe(observer)
29 | }
30 |
31 | /// Converts `self` to `Observable` sequence.
32 | public func asObservable() -> Observable {
33 | self.source
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/ImmediateSchedulerType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ImmediateSchedulerType.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 5/31/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | /// Represents an object that immediately schedules units of work.
10 | public protocol ImmediateSchedulerType {
11 | /**
12 | Schedules an action to be executed immediately.
13 |
14 | - parameter state: State passed to the action to be executed.
15 | - parameter action: Action to be executed.
16 | - returns: The disposable object used to cancel the scheduled action (best effort).
17 | */
18 | func schedule(_ state: StateType, action: @escaping (StateType) -> Disposable) -> Disposable
19 | }
20 |
21 | extension ImmediateSchedulerType {
22 | /**
23 | Schedules an action to be executed recursively.
24 |
25 | - parameter state: State passed to the action to be executed.
26 | - parameter action: Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state.
27 | - returns: The disposable object used to cancel the scheduled action (best effort).
28 | */
29 | public func scheduleRecursive(_ state: State, action: @escaping (_ state: State, _ recurse: (State) -> Void) -> Void) -> Disposable {
30 | let recursiveScheduler = RecursiveImmediateScheduler(action: action, scheduler: self)
31 |
32 | recursiveScheduler.schedule(state)
33 |
34 | return Disposables.create(with: recursiveScheduler.dispose)
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Observable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Observable.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 2/8/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | /// A type-erased `ObservableType`.
10 | ///
11 | /// It represents a push style sequence.
12 | public class Observable : ObservableType {
13 | init() {
14 | #if TRACE_RESOURCES
15 | _ = Resources.incrementTotal()
16 | #endif
17 | }
18 |
19 | public func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element {
20 | rxAbstractMethod()
21 | }
22 |
23 | public func asObservable() -> Observable { self }
24 |
25 | deinit {
26 | #if TRACE_RESOURCES
27 | _ = Resources.decrementTotal()
28 | #endif
29 | }
30 | }
31 |
32 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/ObservableConvertibleType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ObservableConvertibleType.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 9/17/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | /// Type that can be converted to observable sequence (`Observable`).
10 | public protocol ObservableConvertibleType {
11 | /// Type of elements in sequence.
12 | associatedtype Element
13 |
14 | /// Converts `self` to `Observable` sequence.
15 | ///
16 | /// - returns: Observable sequence that represents `self`.
17 | func asObservable() -> Observable
18 | }
19 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Observables/AddRef.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AddRef.swift
3 | // RxSwift
4 | //
5 | // Created by Junior B. on 30/10/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | final class AddRefSink : Sink, ObserverType {
10 | typealias Element = Observer.Element
11 |
12 | override init(observer: Observer, cancel: Cancelable) {
13 | super.init(observer: observer, cancel: cancel)
14 | }
15 |
16 | func on(_ event: Event) {
17 | switch event {
18 | case .next:
19 | self.forwardOn(event)
20 | case .completed, .error:
21 | self.forwardOn(event)
22 | self.dispose()
23 | }
24 | }
25 | }
26 |
27 | final class AddRef : Producer {
28 |
29 | private let source: Observable
30 | private let refCount: RefCountDisposable
31 |
32 | init(source: Observable, refCount: RefCountDisposable) {
33 | self.source = source
34 | self.refCount = refCount
35 | }
36 |
37 | override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element {
38 | let releaseDisposable = self.refCount.retain()
39 | let sink = AddRefSink(observer: observer, cancel: cancel)
40 | let subscription = Disposables.create(releaseDisposable, self.source.subscribe(sink))
41 |
42 | return (sink: sink, subscription: subscription)
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Observables/AsMaybe.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AsMaybe.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 3/12/17.
6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | private final class AsMaybeSink : Sink, ObserverType {
10 | typealias Element = Observer.Element
11 |
12 | private var element: Event?
13 |
14 | func on(_ event: Event) {
15 | switch event {
16 | case .next:
17 | if self.element != nil {
18 | self.forwardOn(.error(RxError.moreThanOneElement))
19 | self.dispose()
20 | }
21 |
22 | self.element = event
23 | case .error:
24 | self.forwardOn(event)
25 | self.dispose()
26 | case .completed:
27 | if let element = self.element {
28 | self.forwardOn(element)
29 | }
30 | self.forwardOn(.completed)
31 | self.dispose()
32 | }
33 | }
34 | }
35 |
36 | final class AsMaybe: Producer {
37 | private let source: Observable
38 |
39 | init(source: Observable) {
40 | self.source = source
41 | }
42 |
43 | override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element {
44 | let sink = AsMaybeSink(observer: observer, cancel: cancel)
45 | let subscription = self.source.subscribe(sink)
46 | return (sink: sink, subscription: subscription)
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Observables/Decode.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Decode.swift
3 | // RxSwift
4 | //
5 | // Created by Shai Mishali on 24/07/2020.
6 | // Copyright © 2020 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | public extension ObservableType where Element == Data {
12 | /// Attempt to decode the emitted `Data` using a provided decoder.
13 | ///
14 | /// - parameter type: A `Decodable`-conforming type to attempt to decode to
15 | /// - parameter decoder: A capable decoder, e.g. `JSONDecoder` or `PropertyListDecoder`
16 | ///
17 | /// - note: If using a custom decoder, it must conform to the `DataDecoder` protocol.
18 | ///
19 | /// - returns: An `Observable` of the decoded type
20 | func decode(type: Item.Type,
22 | decoder: Decoder) -> Observable- {
23 | map { try decoder.decode(type, from: $0) }
24 | }
25 | }
26 |
27 | /// Represents an entity capable of decoding raw `Data`
28 | /// into a concrete `Decodable` type
29 | public protocol DataDecoder {
30 | func decode(_ type: Item.Type, from data: Data) throws -> Item
31 | }
32 |
33 | extension JSONDecoder: DataDecoder {}
34 | extension PropertyListDecoder: DataDecoder {}
35 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Observables/Empty.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Empty.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 8/30/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | extension ObservableType {
10 | /**
11 | Returns an empty observable sequence, using the specified scheduler to send out the single `Completed` message.
12 |
13 | - seealso: [empty operator on reactivex.io](http://reactivex.io/documentation/operators/empty-never-throw.html)
14 |
15 | - returns: An observable sequence with no elements.
16 | */
17 | public static func empty() -> Observable {
18 | EmptyProducer()
19 | }
20 | }
21 |
22 | final private class EmptyProducer: Producer {
23 | override func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element {
24 | observer.on(.completed)
25 | return Disposables.create()
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Observables/Error.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Error.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 8/30/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | extension ObservableType {
10 | /**
11 | Returns an observable sequence that terminates with an `error`.
12 |
13 | - seealso: [throw operator on reactivex.io](http://reactivex.io/documentation/operators/empty-never-throw.html)
14 |
15 | - returns: The observable sequence that terminates with specified error.
16 | */
17 | public static func error(_ error: Swift.Error) -> Observable {
18 | ErrorProducer(error: error)
19 | }
20 | }
21 |
22 | final private class ErrorProducer: Producer {
23 | private let error: Swift.Error
24 |
25 | init(error: Swift.Error) {
26 | self.error = error
27 | }
28 |
29 | override func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element {
30 | observer.on(.error(self.error))
31 | return Disposables.create()
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Observables/First.swift:
--------------------------------------------------------------------------------
1 | //
2 | // First.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 7/31/17.
6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | private final class FirstSink : Sink, ObserverType where Observer.Element == Element? {
10 | typealias Parent = First
11 |
12 | func on(_ event: Event) {
13 | switch event {
14 | case .next(let value):
15 | self.forwardOn(.next(value))
16 | self.forwardOn(.completed)
17 | self.dispose()
18 | case .error(let error):
19 | self.forwardOn(.error(error))
20 | self.dispose()
21 | case .completed:
22 | self.forwardOn(.next(nil))
23 | self.forwardOn(.completed)
24 | self.dispose()
25 | }
26 | }
27 | }
28 |
29 | final class First: Producer {
30 | private let source: Observable
31 |
32 | init(source: Observable) {
33 | self.source = source
34 | }
35 |
36 | override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element? {
37 | let sink = FirstSink(observer: observer, cancel: cancel)
38 | let subscription = self.source.subscribe(sink)
39 | return (sink: sink, subscription: subscription)
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Observables/Never.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Never.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 8/30/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | extension ObservableType {
10 |
11 | /**
12 | Returns a non-terminating observable sequence, which can be used to denote an infinite duration.
13 |
14 | - seealso: [never operator on reactivex.io](http://reactivex.io/documentation/operators/empty-never-throw.html)
15 |
16 | - returns: An observable sequence whose observers will never get called.
17 | */
18 | public static func never() -> Observable {
19 | NeverProducer()
20 | }
21 | }
22 |
23 | final private class NeverProducer: Producer {
24 | override func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element {
25 | Disposables.create()
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Observables/StartWith.swift:
--------------------------------------------------------------------------------
1 | //
2 | // StartWith.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 4/6/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | extension ObservableType {
10 |
11 | /**
12 | Prepends a sequence of values to an observable sequence.
13 |
14 | - seealso: [startWith operator on reactivex.io](http://reactivex.io/documentation/operators/startwith.html)
15 |
16 | - parameter elements: Elements to prepend to the specified sequence.
17 | - returns: The source sequence prepended with the specified values.
18 | */
19 | public func startWith(_ elements: Element ...)
20 | -> Observable {
21 | return StartWith(source: self.asObservable(), elements: elements)
22 | }
23 | }
24 |
25 | final private class StartWith: Producer {
26 | let elements: [Element]
27 | let source: Observable
28 |
29 | init(source: Observable, elements: [Element]) {
30 | self.source = source
31 | self.elements = elements
32 | super.init()
33 | }
34 |
35 | override func run(_ observer: Observer, cancel: Cancelable) -> (sink: Disposable, subscription: Disposable) where Observer.Element == Element {
36 | for e in self.elements {
37 | observer.on(.next(e))
38 | }
39 |
40 | return (sink: Disposables.create(), subscription: self.source.subscribe(observer))
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/ObserverType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ObserverType.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 2/8/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | /// Supports push-style iteration over an observable sequence.
10 | public protocol ObserverType {
11 | /// The type of elements in sequence that observer can observe.
12 | associatedtype Element
13 |
14 | /// Notify observer about sequence event.
15 | ///
16 | /// - parameter event: Event that occurred.
17 | func on(_ event: Event)
18 | }
19 |
20 | /// Convenience API extensions to provide alternate next, error, completed events
21 | extension ObserverType {
22 |
23 | /// Convenience method equivalent to `on(.next(element: Element))`
24 | ///
25 | /// - parameter element: Next element to send to observer(s)
26 | public func onNext(_ element: Element) {
27 | self.on(.next(element))
28 | }
29 |
30 | /// Convenience method equivalent to `on(.completed)`
31 | public func onCompleted() {
32 | self.on(.completed)
33 | }
34 |
35 | /// Convenience method equivalent to `on(.error(Swift.Error))`
36 | /// - parameter error: Swift.Error to send to observer(s)
37 | public func onError(_ error: Swift.Error) {
38 | self.on(.error(error))
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Observers/AnonymousObserver.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AnonymousObserver.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 2/8/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | final class AnonymousObserver: ObserverBase {
10 | typealias EventHandler = (Event) -> Void
11 |
12 | private let eventHandler : EventHandler
13 |
14 | init(_ eventHandler: @escaping EventHandler) {
15 | #if TRACE_RESOURCES
16 | _ = Resources.incrementTotal()
17 | #endif
18 | self.eventHandler = eventHandler
19 | }
20 |
21 | override func onCore(_ event: Event) {
22 | self.eventHandler(event)
23 | }
24 |
25 | #if TRACE_RESOURCES
26 | deinit {
27 | _ = Resources.decrementTotal()
28 | }
29 | #endif
30 | }
31 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Observers/ObserverBase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ObserverBase.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 2/15/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | class ObserverBase : Disposable, ObserverType {
10 | private let isStopped = AtomicInt(0)
11 |
12 | func on(_ event: Event) {
13 | switch event {
14 | case .next:
15 | if load(self.isStopped) == 0 {
16 | self.onCore(event)
17 | }
18 | case .error, .completed:
19 | if fetchOr(self.isStopped, 1) == 0 {
20 | self.onCore(event)
21 | }
22 | }
23 | }
24 |
25 | func onCore(_ event: Event) {
26 | rxAbstractMethod()
27 | }
28 |
29 | func dispose() {
30 | fetchOr(self.isStopped, 1)
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/RxMutableBox.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxMutableBox.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 5/22/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if os(Linux)
10 | /// As Swift 5 was released, A patch to `Thread` for Linux
11 | /// changed `threadDictionary` to a `NSMutableDictionary` instead of
12 | /// a `Dictionary`: https://github.com/apple/swift-corelibs-foundation/pull/1762/files
13 | ///
14 | /// This means that on Linux specifically, `RxMutableBox` must be a `NSObject`
15 | /// or it won't be possible to store it in `Thread.threadDictionary`.
16 | ///
17 | /// For more information, read the discussion at:
18 | /// https://github.com/ReactiveX/RxSwift/issues/1911#issuecomment-479723298
19 | import Foundation
20 |
21 | /// Creates mutable reference wrapper for any type.
22 | final class RxMutableBox: NSObject {
23 | /// Wrapped value
24 | var value: T
25 |
26 | /// Creates reference wrapper for `value`.
27 | ///
28 | /// - parameter value: Value to wrap.
29 | init (_ value: T) {
30 | self.value = value
31 | }
32 | }
33 | #else
34 | /// Creates mutable reference wrapper for any type.
35 | final class RxMutableBox: CustomDebugStringConvertible {
36 | /// Wrapped value
37 | var value: T
38 |
39 | /// Creates reference wrapper for `value`.
40 | ///
41 | /// - parameter value: Value to wrap.
42 | init (_ value: T) {
43 | self.value = value
44 | }
45 | }
46 |
47 | extension RxMutableBox {
48 | /// - returns: Box description.
49 | var debugDescription: String {
50 | "MutatingBox(\(self.value))"
51 | }
52 | }
53 | #endif
54 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Schedulers/HistoricalScheduler.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HistoricalScheduler.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 12/27/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | /// Provides a virtual time scheduler that uses `Date` for absolute time and `TimeInterval` for relative time.
12 | public class HistoricalScheduler : VirtualTimeScheduler {
13 |
14 | /**
15 | Creates a new historical scheduler with initial clock value.
16 |
17 | - parameter initialClock: Initial value for virtual clock.
18 | */
19 | public init(initialClock: RxTime = Date(timeIntervalSince1970: 0)) {
20 | super.init(initialClock: initialClock, converter: HistoricalSchedulerTimeConverter())
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Schedulers/Internal/InvocableScheduledItem.swift:
--------------------------------------------------------------------------------
1 | //
2 | // InvocableScheduledItem.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 11/7/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | struct InvocableScheduledItem : InvocableType {
10 |
11 | let invocable: I
12 | let state: I.Value
13 |
14 | init(invocable: I, state: I.Value) {
15 | self.invocable = invocable
16 | self.state = state
17 | }
18 |
19 | func invoke() {
20 | self.invocable.invoke(self.state)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Schedulers/Internal/InvocableType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // InvocableType.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 11/7/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | protocol InvocableType {
10 | func invoke()
11 | }
12 |
13 | protocol InvocableWithValueType {
14 | associatedtype Value
15 |
16 | func invoke(_ value: Value)
17 | }
18 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Schedulers/Internal/ScheduledItem.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScheduledItem.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 9/2/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | struct ScheduledItem
10 | : ScheduledItemType
11 | , InvocableType {
12 | typealias Action = (T) -> Disposable
13 |
14 | private let action: Action
15 | private let state: T
16 |
17 | private let disposable = SingleAssignmentDisposable()
18 |
19 | var isDisposed: Bool {
20 | self.disposable.isDisposed
21 | }
22 |
23 | init(action: @escaping Action, state: T) {
24 | self.action = action
25 | self.state = state
26 | }
27 |
28 | func invoke() {
29 | self.disposable.setDisposable(self.action(self.state))
30 | }
31 |
32 | func dispose() {
33 | self.disposable.dispose()
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Schedulers/Internal/ScheduledItemType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScheduledItemType.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 11/7/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | protocol ScheduledItemType
10 | : Cancelable
11 | , InvocableType {
12 | func invoke()
13 | }
14 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Subjects/SubjectType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SubjectType.swift
3 | // RxSwift
4 | //
5 | // Created by Krunoslav Zaher on 3/1/15.
6 | // Copyright © 2015 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | /// Represents an object that is both an observable sequence as well as an observer.
10 | public protocol SubjectType : ObservableType {
11 | /// The type of the observer that represents this subject.
12 | ///
13 | /// Usually this type is type of subject itself, but it doesn't have to be.
14 | associatedtype Observer: ObserverType
15 |
16 | /// Returns observer interface for subject.
17 | ///
18 | /// - returns: Observer interface for subject.
19 | func asObserver() -> Observer
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/SwiftSupport/SwiftSupport.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwiftSupport.swift
3 | // RxSwift
4 | //
5 | // Created by Volodymyr Gorbenko on 3/6/17.
6 | // Copyright © 2017 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | typealias IntMax = Int64
12 | public typealias RxAbstractInteger = FixedWidthInteger
13 |
14 | extension SignedInteger {
15 | func toIntMax() -> IntMax {
16 | IntMax(self)
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Traits/Infallible/Infallible+Concurrency.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Infallible+Concurrency.swift
3 | // RxSwift
4 | //
5 | // Created by Shai Mishali on 22/09/2021.
6 | // Copyright © 2021 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | #if swift(>=5.6) && canImport(_Concurrency) && !os(Linux)
10 | // MARK: - Infallible
11 | @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)
12 | public extension InfallibleType {
13 | /// Allows iterating over the values of an Infallible
14 | /// asynchronously via Swift's concurrency features (`async/await`)
15 | ///
16 | /// A sample usage would look like so:
17 | ///
18 | /// ```swift
19 | /// for await value in observable.values {
20 | /// // Handle emitted values
21 | /// }
22 | /// ```
23 | var values: AsyncStream {
24 | AsyncStream { continuation in
25 | let disposable = subscribe(
26 | onNext: { value in continuation.yield(value) },
27 | onCompleted: { continuation.finish() }
28 | )
29 | continuation.onTermination = { @Sendable termination in
30 | if termination == .cancelled {
31 | disposable.dispose()
32 | }
33 | }
34 | }
35 | }
36 | }
37 | #endif
38 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Traits/Infallible/Infallible+Debug.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Infallible+Debug.swift
3 | // RxSwift
4 | //
5 | // Created by Marcelo Fabri on 11/05/2023.
6 | // Copyright © 2023 RxSwift. All rights reserved.
7 | //
8 |
9 | extension InfallibleType {
10 | /**
11 | Prints received events for all observers on standard output.
12 |
13 | - seealso: [do operator on reactivex.io](http://reactivex.io/documentation/operators/do.html)
14 |
15 | - parameter identifier: Identifier that is printed together with event description to standard output.
16 | - parameter trimOutput: Should output be trimmed to max 40 characters.
17 | - returns: An Infallible sequence whose events are printed to standard output.
18 | */
19 | public func debug(_ identifier: String? = nil, trimOutput: Bool = false, file: String = #file, line: UInt = #line, function: String = #function)
20 | -> Infallible {
21 | Infallible(
22 | asObservable()
23 | .debug(identifier, trimOutput: trimOutput, file: file, line: line, function: function)
24 | )
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Example/Pods/RxSwift/RxSwift/Traits/Infallible/ObservableConvertibleType+Infallible.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ObservableConvertibleType+Infallible.swift
3 | // RxSwift
4 | //
5 | // Created by Shai Mishali on 27/08/2020.
6 | // Copyright © 2020 Krunoslav Zaher. All rights reserved.
7 | //
8 |
9 | public extension ObservableConvertibleType {
10 | /// Convert to an `Infallible`
11 | ///
12 | /// - returns: `Infallible`
13 | func asInfallible(onErrorJustReturn element: Element) -> Infallible {
14 | Infallible(self.asObservable().catchAndReturn(element))
15 | }
16 |
17 | /// Convert to an `Infallible`
18 | ///
19 | /// - parameter infallible: Fall back to this provided infallible on error
20 | ///
21 | ///
22 | /// - returns: `Infallible`
23 | func asInfallible(onErrorFallbackTo infallible: Infallible) -> Infallible {
24 | Infallible(self.asObservable().catch { _ in infallible.asObservable() })
25 | }
26 |
27 | /// Convert to an `Infallible`
28 | ///
29 | /// - parameter onErrorRecover: Recover with the this infallible closure
30 | ///
31 | /// - returns: `Infallible`
32 | func asInfallible(onErrorRecover: @escaping (Swift.Error) -> Infallible) -> Infallible {
33 | Infallible(asObservable().catch { onErrorRecover($0).asObservable() })
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/Example/Pods/SnapKit/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/Example/Pods/SnapKit/Sources/ConstraintDirectionalInsets.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SnapKit
3 | //
4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
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 | #if os(iOS) || os(tvOS)
25 | import UIKit
26 | #else
27 | import AppKit
28 | #endif
29 |
30 |
31 | #if os(iOS) || os(tvOS)
32 | @available(iOS 11.0, tvOS 11.0, *)
33 | public typealias ConstraintDirectionalInsets = NSDirectionalEdgeInsets
34 | #endif
35 |
--------------------------------------------------------------------------------
/Example/Pods/SnapKit/Sources/ConstraintInsets.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SnapKit
3 | //
4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
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 | #if os(iOS) || os(tvOS)
25 | import UIKit
26 | #else
27 | import AppKit
28 | #endif
29 |
30 |
31 | #if os(iOS) || os(tvOS)
32 | public typealias ConstraintInsets = UIEdgeInsets
33 | #else
34 | public typealias ConstraintInsets = NSEdgeInsets
35 | #endif
36 |
--------------------------------------------------------------------------------
/Example/Pods/SnapKit/Sources/ConstraintLayoutGuide+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SnapKit
3 | //
4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
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 | #if os(iOS) || os(tvOS)
25 | import UIKit
26 | #endif
27 |
28 |
29 | @available(iOS 9.0, OSX 10.11, *)
30 | public extension ConstraintLayoutGuide {
31 |
32 | var snp: ConstraintLayoutGuideDSL {
33 | return ConstraintLayoutGuideDSL(guide: self)
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/Example/Pods/SnapKit/Sources/ConstraintLayoutGuide.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SnapKit
3 | //
4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
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 | #if os(iOS) || os(tvOS)
25 | import UIKit
26 | #else
27 | import AppKit
28 | #endif
29 |
30 |
31 | #if os(iOS) || os(tvOS)
32 | @available(iOS 9.0, *)
33 | public typealias ConstraintLayoutGuide = UILayoutGuide
34 | #else
35 | @available(OSX 10.11, *)
36 | public typealias ConstraintLayoutGuide = NSLayoutGuide
37 | #endif
38 |
--------------------------------------------------------------------------------
/Example/Pods/SnapKit/Sources/ConstraintLayoutSupport.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SnapKit
3 | //
4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
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 | #if os(iOS) || os(tvOS)
25 | import UIKit
26 | #else
27 | import AppKit
28 | #endif
29 |
30 |
31 | #if os(iOS) || os(tvOS)
32 | @available(iOS 8.0, *)
33 | public typealias ConstraintLayoutSupport = UILayoutSupport
34 | #else
35 | public class ConstraintLayoutSupport {}
36 | #endif
37 |
--------------------------------------------------------------------------------
/Example/Pods/SnapKit/Sources/ConstraintView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SnapKit
3 | //
4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
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 | #if os(iOS) || os(tvOS)
25 | import UIKit
26 | #else
27 | import AppKit
28 | #endif
29 |
30 |
31 | #if os(iOS) || os(tvOS)
32 | public typealias ConstraintView = UIView
33 | #else
34 | public typealias ConstraintView = NSView
35 | #endif
36 |
--------------------------------------------------------------------------------
/Example/Pods/SnapKit/Sources/UILayoutSupport+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SnapKit
3 | //
4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
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 | #if os(iOS) || os(tvOS)
25 | import UIKit
26 | #endif
27 |
28 |
29 | @available(iOS 8.0, *)
30 | public extension ConstraintLayoutSupport {
31 |
32 | var snp: ConstraintLayoutSupportDSL {
33 | return ConstraintLayoutSupportDSL(support: self)
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/AudioPlaybackManager/AudioPlaybackManager-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | ${PODS_DEVELOPMENT_LANGUAGE}
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 0.1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/AudioPlaybackManager/AudioPlaybackManager-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_AudioPlaybackManager : NSObject
3 | @end
4 | @implementation PodsDummy_AudioPlaybackManager
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/AudioPlaybackManager/AudioPlaybackManager-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/AudioPlaybackManager/AudioPlaybackManager-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double AudioPlaybackManagerVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char AudioPlaybackManagerVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/AudioPlaybackManager/AudioPlaybackManager.debug.xcconfig:
--------------------------------------------------------------------------------
1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AudioPlaybackManager
3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/VIMediaCache"
4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
5 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
6 | OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "Foundation" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "UIKit" -framework "VIMediaCache"
7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
8 | PODS_BUILD_DIR = ${BUILD_DIR}
9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
10 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
11 | PODS_ROOT = ${SRCROOT}
12 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../..
13 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
14 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
15 | SKIP_INSTALL = YES
16 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
17 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/AudioPlaybackManager/AudioPlaybackManager.modulemap:
--------------------------------------------------------------------------------
1 | framework module AudioPlaybackManager {
2 | umbrella header "AudioPlaybackManager-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/AudioPlaybackManager/AudioPlaybackManager.release.xcconfig:
--------------------------------------------------------------------------------
1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AudioPlaybackManager
3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/VIMediaCache"
4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
5 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
6 | OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "Foundation" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "UIKit" -framework "VIMediaCache"
7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
8 | PODS_BUILD_DIR = ${BUILD_DIR}
9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
10 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
11 | PODS_ROOT = ${SRCROOT}
12 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../..
13 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
14 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
15 | SKIP_INSTALL = YES
16 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
17 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AudioPlaybackManager_Example/Pods-AudioPlaybackManager_Example-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | ${PODS_DEVELOPMENT_LANGUAGE}
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AudioPlaybackManager_Example/Pods-AudioPlaybackManager_Example-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_AudioPlaybackManager_Example : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_AudioPlaybackManager_Example
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AudioPlaybackManager_Example/Pods-AudioPlaybackManager_Example-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double Pods_AudioPlaybackManager_ExampleVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char Pods_AudioPlaybackManager_ExampleVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AudioPlaybackManager_Example/Pods-AudioPlaybackManager_Example.modulemap:
--------------------------------------------------------------------------------
1 | framework module Pods_AudioPlaybackManager_Example {
2 | umbrella header "Pods-AudioPlaybackManager_Example-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AudioPlaybackManager_Tests/Pods-AudioPlaybackManager_Tests-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | ${PODS_DEVELOPMENT_LANGUAGE}
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AudioPlaybackManager_Tests/Pods-AudioPlaybackManager_Tests-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 | Generated by CocoaPods - https://cocoapods.org
4 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AudioPlaybackManager_Tests/Pods-AudioPlaybackManager_Tests-acknowledgements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreferenceSpecifiers
6 |
7 |
8 | FooterText
9 | This application makes use of the following third party libraries:
10 | Title
11 | Acknowledgements
12 | Type
13 | PSGroupSpecifier
14 |
15 |
16 | FooterText
17 | Generated by CocoaPods - https://cocoapods.org
18 | Title
19 |
20 | Type
21 | PSGroupSpecifier
22 |
23 |
24 | StringsTable
25 | Acknowledgements
26 | Title
27 | Acknowledgements
28 |
29 |
30 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AudioPlaybackManager_Tests/Pods-AudioPlaybackManager_Tests-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_AudioPlaybackManager_Tests : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_AudioPlaybackManager_Tests
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AudioPlaybackManager_Tests/Pods-AudioPlaybackManager_Tests-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double Pods_AudioPlaybackManager_TestsVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char Pods_AudioPlaybackManager_TestsVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AudioPlaybackManager_Tests/Pods-AudioPlaybackManager_Tests.debug.xcconfig:
--------------------------------------------------------------------------------
1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AudioPlaybackManager" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/VIMediaCache"
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AudioPlaybackManager/AudioPlaybackManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/VIMediaCache/VIMediaCache.framework/Headers"
5 | OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "AudioPlaybackManager" -framework "Foundation" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "RxCocoa" -framework "RxRelay" -framework "RxSwift" -framework "SnapKit" -framework "UIKit" -framework "VIMediaCache"
6 | PODS_BUILD_DIR = ${BUILD_DIR}
7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
9 | PODS_ROOT = ${SRCROOT}/Pods
10 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
12 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AudioPlaybackManager_Tests/Pods-AudioPlaybackManager_Tests.modulemap:
--------------------------------------------------------------------------------
1 | framework module Pods_AudioPlaybackManager_Tests {
2 | umbrella header "Pods-AudioPlaybackManager_Tests-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AudioPlaybackManager_Tests/Pods-AudioPlaybackManager_Tests.release.xcconfig:
--------------------------------------------------------------------------------
1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AudioPlaybackManager" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/VIMediaCache"
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AudioPlaybackManager/AudioPlaybackManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/VIMediaCache/VIMediaCache.framework/Headers"
5 | OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "AudioPlaybackManager" -framework "Foundation" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "RxCocoa" -framework "RxRelay" -framework "RxSwift" -framework "SnapKit" -framework "UIKit" -framework "VIMediaCache"
6 | PODS_BUILD_DIR = ${BUILD_DIR}
7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
9 | PODS_ROOT = ${SRCROOT}/Pods
10 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
12 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxCocoa/RxCocoa-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | ${PODS_DEVELOPMENT_LANGUAGE}
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 6.6.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxCocoa/RxCocoa-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_RxCocoa : NSObject
3 | @end
4 | @implementation PodsDummy_RxCocoa
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxCocoa/RxCocoa-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxCocoa/RxCocoa-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 | #import "RxCocoaRuntime.h"
14 | #import "_RX.h"
15 | #import "_RXDelegateProxy.h"
16 | #import "_RXKVOObserver.h"
17 | #import "_RXObjCRuntime.h"
18 | #import "RxCocoa.h"
19 |
20 | FOUNDATION_EXPORT double RxCocoaVersionNumber;
21 | FOUNDATION_EXPORT const unsigned char RxCocoaVersionString[];
22 |
23 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxCocoa/RxCocoa.debug.xcconfig:
--------------------------------------------------------------------------------
1 | APPLICATION_EXTENSION_API_ONLY = YES
2 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
3 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa
4 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift"
5 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
6 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
7 | OTHER_LDFLAGS = $(inherited) -framework "RxRelay" -framework "RxSwift"
8 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
9 | PODS_BUILD_DIR = ${BUILD_DIR}
10 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
11 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
12 | PODS_ROOT = ${SRCROOT}
13 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/RxCocoa
14 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
15 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
16 | SKIP_INSTALL = YES
17 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
18 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxCocoa/RxCocoa.modulemap:
--------------------------------------------------------------------------------
1 | framework module RxCocoa {
2 | umbrella header "RxCocoa-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxCocoa/RxCocoa.release.xcconfig:
--------------------------------------------------------------------------------
1 | APPLICATION_EXTENSION_API_ONLY = YES
2 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
3 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa
4 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift"
5 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
6 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
7 | OTHER_LDFLAGS = $(inherited) -framework "RxRelay" -framework "RxSwift"
8 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
9 | PODS_BUILD_DIR = ${BUILD_DIR}
10 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
11 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
12 | PODS_ROOT = ${SRCROOT}
13 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/RxCocoa
14 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
15 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
16 | SKIP_INSTALL = YES
17 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
18 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxRelay/RxRelay-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | ${PODS_DEVELOPMENT_LANGUAGE}
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 6.6.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxRelay/RxRelay-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_RxRelay : NSObject
3 | @end
4 | @implementation PodsDummy_RxRelay
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxRelay/RxRelay-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxRelay/RxRelay-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double RxRelayVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char RxRelayVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxRelay/RxRelay.debug.xcconfig:
--------------------------------------------------------------------------------
1 | APPLICATION_EXTENSION_API_ONLY = YES
2 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
3 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RxRelay
4 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift"
5 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
6 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
7 | OTHER_LDFLAGS = $(inherited) -framework "RxSwift"
8 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
9 | PODS_BUILD_DIR = ${BUILD_DIR}
10 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
11 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
12 | PODS_ROOT = ${SRCROOT}
13 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/RxRelay
14 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
15 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
16 | SKIP_INSTALL = YES
17 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
18 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxRelay/RxRelay.modulemap:
--------------------------------------------------------------------------------
1 | framework module RxRelay {
2 | umbrella header "RxRelay-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxRelay/RxRelay.release.xcconfig:
--------------------------------------------------------------------------------
1 | APPLICATION_EXTENSION_API_ONLY = YES
2 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
3 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RxRelay
4 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift"
5 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
6 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
7 | OTHER_LDFLAGS = $(inherited) -framework "RxSwift"
8 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
9 | PODS_BUILD_DIR = ${BUILD_DIR}
10 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
11 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
12 | PODS_ROOT = ${SRCROOT}
13 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/RxRelay
14 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
15 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
16 | SKIP_INSTALL = YES
17 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
18 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxSwift/RxSwift-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | ${PODS_DEVELOPMENT_LANGUAGE}
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 6.6.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxSwift/RxSwift-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_RxSwift : NSObject
3 | @end
4 | @implementation PodsDummy_RxSwift
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxSwift/RxSwift-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxSwift/RxSwift-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double RxSwiftVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char RxSwiftVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxSwift/RxSwift.debug.xcconfig:
--------------------------------------------------------------------------------
1 | APPLICATION_EXTENSION_API_ONLY = YES
2 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
3 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RxSwift
4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
5 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
6 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
7 | PODS_BUILD_DIR = ${BUILD_DIR}
8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
9 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
10 | PODS_ROOT = ${SRCROOT}
11 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/RxSwift
12 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
13 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
14 | SKIP_INSTALL = YES
15 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
16 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxSwift/RxSwift.modulemap:
--------------------------------------------------------------------------------
1 | framework module RxSwift {
2 | umbrella header "RxSwift-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/RxSwift/RxSwift.release.xcconfig:
--------------------------------------------------------------------------------
1 | APPLICATION_EXTENSION_API_ONLY = YES
2 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
3 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RxSwift
4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
5 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
6 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
7 | PODS_BUILD_DIR = ${BUILD_DIR}
8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
9 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
10 | PODS_ROOT = ${SRCROOT}
11 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/RxSwift
12 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
13 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
14 | SKIP_INSTALL = YES
15 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
16 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/SnapKit/SnapKit-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | ${PODS_DEVELOPMENT_LANGUAGE}
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 5.6.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/SnapKit/SnapKit-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_SnapKit : NSObject
3 | @end
4 | @implementation PodsDummy_SnapKit
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double SnapKitVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char SnapKitVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig:
--------------------------------------------------------------------------------
1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
5 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
6 | PODS_BUILD_DIR = ${BUILD_DIR}
7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
8 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
9 | PODS_ROOT = ${SRCROOT}
10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit
11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
12 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
13 | SKIP_INSTALL = YES
14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
15 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/SnapKit/SnapKit.modulemap:
--------------------------------------------------------------------------------
1 | framework module SnapKit {
2 | umbrella header "SnapKit-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig:
--------------------------------------------------------------------------------
1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
5 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
6 | PODS_BUILD_DIR = ${BUILD_DIR}
7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
8 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
9 | PODS_ROOT = ${SRCROOT}
10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit
11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
12 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
13 | SKIP_INSTALL = YES
14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
15 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/VIMediaCache/VIMediaCache-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | ${PODS_DEVELOPMENT_LANGUAGE}
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 0.4.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/VIMediaCache/VIMediaCache-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_VIMediaCache : NSObject
3 | @end
4 | @implementation PodsDummy_VIMediaCache
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/VIMediaCache/VIMediaCache-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/VIMediaCache/VIMediaCache-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 | #import "VIMediaCache.h"
14 | #import "NSString+VIMD5.h"
15 | #import "VICacheAction.h"
16 | #import "VICacheConfiguration.h"
17 | #import "VICacheManager.h"
18 | #import "VICacheSessionManager.h"
19 | #import "VIMediaCacheWorker.h"
20 | #import "VIContentInfo.h"
21 | #import "VIMediaDownloader.h"
22 | #import "VIResourceLoader.h"
23 | #import "VIResourceLoaderManager.h"
24 | #import "VIResourceLoadingRequestWorker.h"
25 |
26 | FOUNDATION_EXPORT double VIMediaCacheVersionNumber;
27 | FOUNDATION_EXPORT const unsigned char VIMediaCacheVersionString[];
28 |
29 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/VIMediaCache/VIMediaCache.debug.xcconfig:
--------------------------------------------------------------------------------
1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/VIMediaCache
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "MobileCoreServices"
5 | PODS_BUILD_DIR = ${BUILD_DIR}
6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
8 | PODS_ROOT = ${SRCROOT}
9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/VIMediaCache
10 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
11 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
12 | SKIP_INSTALL = YES
13 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
14 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/VIMediaCache/VIMediaCache.modulemap:
--------------------------------------------------------------------------------
1 | framework module VIMediaCache {
2 | umbrella header "VIMediaCache-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/VIMediaCache/VIMediaCache.release.xcconfig:
--------------------------------------------------------------------------------
1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/VIMediaCache
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "MobileCoreServices"
5 | PODS_BUILD_DIR = ${BUILD_DIR}
6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
8 | PODS_ROOT = ${SRCROOT}
9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/VIMediaCache
10 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
11 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
12 | SKIP_INSTALL = YES
13 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
14 |
--------------------------------------------------------------------------------
/Example/Pods/VIMediaCache/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 | Copyright © 2016 Vito Zhang
3 |
4 | Permission is hereby granted, free of charge, to any person obtaining a copy
5 | of this software and associated documentation files (the “Software”), to deal
6 | in the Software without restriction, including without limitation the rights
7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | copies of the Software, and to permit persons to whom the Software is
9 | furnished to do so, subject to the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be included in
12 | all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/Example/Pods/VIMediaCache/README.md:
--------------------------------------------------------------------------------
1 | # VIMediaCache
2 |
3 | [中文说明](https://mp.weixin.qq.com/s/v1sw_Sb8oKeZ8sWyjBUXGA)
4 |
5 | Cache media file while play media using AVPlayerr.
6 |
7 | VIMediaCache use AVAssetResourceLoader to control AVPlayer download media data.
8 |
9 | ### CocoaPods
10 |
11 | `pod 'VIMediaCache'`
12 |
13 | ### Usage
14 |
15 | **Objective C**
16 |
17 | ```Objc
18 | NSURL *url = [NSURL URLWithString:@"https://mvvideo5.meitudata.com/571090934cea5517.mp4"];
19 | VIResourceLoaderManager *resourceLoaderManager = [VIResourceLoaderManager new];
20 | self.resourceLoaderManager = resourceLoaderManager;
21 | AVPlayerItem *playerItem = [resourceLoaderManager playerItemWithURL:url];
22 | AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];
23 | ```
24 |
25 | **Swift**
26 |
27 | ```Swift
28 | let url = URL(string: "https://mvvideo5.meitudata.com/571090934cea5517.mp4")
29 | let resourceLoaderManager = VIResourceLoaderManager()
30 | let playerItem = resourceLoaderManager.playerItem(with: url)
31 | let player = AVPlayer(playerItem: playerItem)
32 | ```
33 |
34 | ### Contact
35 |
36 | vvitozhang@gmail.com
37 |
38 | ### License
39 |
40 | MIT
41 |
--------------------------------------------------------------------------------
/Example/Pods/VIMediaCache/VIMediaCache/Cache/NSString+VIMD5.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSString+VIMD5.h
3 | // VIMediaCacheDemo
4 | //
5 | // Created by Vito on 21/11/2017.
6 | // Copyright © 2017 Vito. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface NSString (VIMD5)
12 | - (NSString *)vi_md5;
13 | @end
14 |
--------------------------------------------------------------------------------
/Example/Pods/VIMediaCache/VIMediaCache/Cache/NSString+VIMD5.m:
--------------------------------------------------------------------------------
1 | //
2 | // NSString+VIMD5.m
3 | // VIMediaCacheDemo
4 | //
5 | // Created by Vito on 21/11/2017.
6 | // Copyright © 2017 Vito. All rights reserved.
7 | //
8 |
9 | #import "NSString+VIMD5.h"
10 | #import
11 |
12 | @implementation NSString (VIMD5)
13 |
14 | - (NSString *)vi_md5 {
15 | const char* str = [self UTF8String];
16 | unsigned char result[CC_MD5_DIGEST_LENGTH];
17 | CC_MD5(str, (CC_LONG)strlen(str), result);
18 |
19 | NSMutableString *ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH*2];
20 | for(int i = 0; i
10 |
11 | typedef NS_ENUM(NSUInteger, VICacheAtionType) {
12 | VICacheAtionTypeLocal = 0,
13 | VICacheAtionTypeRemote
14 | };
15 |
16 | @interface VICacheAction : NSObject
17 |
18 | - (instancetype)initWithActionType:(VICacheAtionType)actionType range:(NSRange)range;
19 |
20 | @property (nonatomic) VICacheAtionType actionType;
21 | @property (nonatomic) NSRange range;
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/Example/Pods/VIMediaCache/VIMediaCache/Cache/VICacheAction.m:
--------------------------------------------------------------------------------
1 | //
2 | // VICacheAction.m
3 | // VIMediaCacheDemo
4 | //
5 | // Created by Vito on 4/21/16.
6 | // Copyright © 2016 Vito. All rights reserved.
7 | //
8 |
9 | #import "VICacheAction.h"
10 |
11 | @implementation VICacheAction
12 |
13 | - (instancetype)initWithActionType:(VICacheAtionType)actionType range:(NSRange)range {
14 | self = [super init];
15 | if (self) {
16 | _actionType = actionType;
17 | _range = range;
18 | }
19 | return self;
20 | }
21 |
22 | - (BOOL)isEqual:(VICacheAction *)object {
23 | if (!NSEqualRanges(object.range, self.range)) {
24 | return NO;
25 | }
26 |
27 | if (object.actionType != self.actionType) {
28 | return NO;
29 | }
30 |
31 | return YES;
32 | }
33 |
34 | - (NSUInteger)hash {
35 | return [[NSString stringWithFormat:@"%@%@", NSStringFromRange(self.range), @(self.actionType)] hash];
36 | }
37 |
38 | - (NSString *)description {
39 | return [NSString stringWithFormat:@"actionType %@, range: %@", @(self.actionType), NSStringFromRange(self.range)];
40 | }
41 |
42 | @end
43 |
--------------------------------------------------------------------------------
/Example/Pods/VIMediaCache/VIMediaCache/Cache/VICacheConfiguration.h:
--------------------------------------------------------------------------------
1 | //
2 | // VICacheConfiguration.h
3 | // VIMediaCacheDemo
4 | //
5 | // Created by Vito on 4/21/16.
6 | // Copyright © 2016 Vito. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "VIContentInfo.h"
11 |
12 | @interface VICacheConfiguration : NSObject
13 |
14 | + (NSString *)configurationFilePathForFilePath:(NSString *)filePath;
15 |
16 | + (instancetype)configurationWithFilePath:(NSString *)filePath;
17 |
18 | @property (nonatomic, copy, readonly) NSString *filePath;
19 | @property (nonatomic, strong) VIContentInfo *contentInfo;
20 | @property (nonatomic, strong) NSURL *url;
21 |
22 | - (NSArray *)cacheFragments;
23 |
24 | /**
25 | * cached progress
26 | */
27 | @property (nonatomic, readonly) float progress;
28 | @property (nonatomic, readonly) long long downloadedBytes;
29 | @property (nonatomic, readonly) float downloadSpeed; // kb/s
30 |
31 | #pragma mark - update API
32 |
33 | - (void)save;
34 | - (void)addCacheFragment:(NSRange)fragment;
35 |
36 | /**
37 | * Record the download speed
38 | */
39 | - (void)addDownloadedBytes:(long long)bytes spent:(NSTimeInterval)time;
40 |
41 | @end
42 |
43 | @interface VICacheConfiguration (VIConvenient)
44 |
45 | + (BOOL)createAndSaveDownloadedConfigurationForURL:(NSURL *)url error:(NSError **)error;
46 |
47 | @end
48 |
--------------------------------------------------------------------------------
/Example/Pods/VIMediaCache/VIMediaCache/Cache/VICacheSessionManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // VICacheSessionManager.h
3 | // VIMediaCacheDemo
4 | //
5 | // Created by Vito on 4/21/16.
6 | // Copyright © 2016 Vito. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface VICacheSessionManager : NSObject
12 |
13 | @property (nonatomic, strong, readonly) NSOperationQueue *downloadQueue;
14 |
15 | + (instancetype)shared;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/Example/Pods/VIMediaCache/VIMediaCache/Cache/VICacheSessionManager.m:
--------------------------------------------------------------------------------
1 | //
2 | // VICacheSessionManager.m
3 | // VIMediaCacheDemo
4 | //
5 | // Created by Vito on 4/21/16.
6 | // Copyright © 2016 Vito. All rights reserved.
7 | //
8 |
9 | #import "VICacheSessionManager.h"
10 |
11 | @interface VICacheSessionManager ()
12 |
13 | @property (nonatomic, strong) NSOperationQueue *downloadQueue;
14 |
15 | @end
16 |
17 | @implementation VICacheSessionManager
18 |
19 | + (instancetype)shared {
20 | static id instance = nil;
21 | static dispatch_once_t onceToken;
22 | dispatch_once(&onceToken, ^{
23 | instance = [[self alloc] init];
24 | });
25 |
26 | return instance;
27 | }
28 |
29 | - (instancetype)init {
30 | self = [super init];
31 | if (self) {
32 | NSOperationQueue *queue = [[NSOperationQueue alloc] init];
33 | queue.name = @"com.vimediacache.download";
34 | _downloadQueue = queue;
35 | }
36 | return self;
37 | }
38 |
39 | @end
40 |
--------------------------------------------------------------------------------
/Example/Pods/VIMediaCache/VIMediaCache/Cache/VIMediaCacheWorker.h:
--------------------------------------------------------------------------------
1 | //
2 | // VIMediaCacheWorker.h
3 | // VIMediaCacheDemo
4 | //
5 | // Created by Vito on 4/21/16.
6 | // Copyright © 2016 Vito. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "VICacheConfiguration.h"
11 |
12 | @class VICacheAction;
13 |
14 | @interface VIMediaCacheWorker : NSObject
15 |
16 | - (instancetype)initWithURL:(NSURL *)url;
17 |
18 | @property (nonatomic, strong, readonly) VICacheConfiguration *cacheConfiguration;
19 | @property (nonatomic, strong, readonly) NSError *setupError; // Create fileHandler error, can't save/use cache
20 |
21 | - (void)cacheData:(NSData *)data forRange:(NSRange)range error:(NSError **)error;
22 | - (NSArray *)cachedDataActionsForRange:(NSRange)range;
23 | - (NSData *)cachedDataForRange:(NSRange)range error:(NSError **)error;
24 |
25 | - (void)setContentInfo:(VIContentInfo *)contentInfo error:(NSError **)error;
26 |
27 | - (void)save;
28 |
29 | - (void)startWritting;
30 | - (void)finishWritting;
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/Example/Pods/VIMediaCache/VIMediaCache/ResourceLoader/VIContentInfo.h:
--------------------------------------------------------------------------------
1 | //
2 | // VIContentInfo.h
3 | // VIMediaCacheDemo
4 | //
5 | // Created by Vito on 4/21/16.
6 | // Copyright © 2016 Vito. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface VIContentInfo : NSObject
12 |
13 | @property (nonatomic, copy) NSString *contentType;
14 | @property (nonatomic, assign) BOOL byteRangeAccessSupported;
15 | @property (nonatomic, assign) unsigned long long contentLength;
16 | @property (nonatomic) unsigned long long downloadedContentLength;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/Example/Pods/VIMediaCache/VIMediaCache/ResourceLoader/VIContentInfo.m:
--------------------------------------------------------------------------------
1 | //
2 | // VIContentInfo.m
3 | // VIMediaCacheDemo
4 | //
5 | // Created by Vito on 4/21/16.
6 | // Copyright © 2016 Vito. All rights reserved.
7 | //
8 |
9 | #import "VIContentInfo.h"
10 |
11 | static NSString *kContentLengthKey = @"kContentLengthKey";
12 | static NSString *kContentTypeKey = @"kContentTypeKey";
13 | static NSString *kByteRangeAccessSupported = @"kByteRangeAccessSupported";
14 |
15 | @implementation VIContentInfo
16 |
17 | - (NSString *)debugDescription {
18 | return [NSString stringWithFormat:@"%@\ncontentLength: %lld\ncontentType: %@\nbyteRangeAccessSupported:%@", NSStringFromClass([self class]), self.contentLength, self.contentType, @(self.byteRangeAccessSupported)];
19 | }
20 |
21 | - (void)encodeWithCoder:(NSCoder *)aCoder {
22 | [aCoder encodeObject:@(self.contentLength) forKey:kContentLengthKey];
23 | [aCoder encodeObject:self.contentType forKey:kContentTypeKey];
24 | [aCoder encodeObject:@(self.byteRangeAccessSupported) forKey:kByteRangeAccessSupported];
25 | }
26 |
27 | - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
28 | self = [super init];
29 | if (self) {
30 | _contentLength = [[aDecoder decodeObjectForKey:kContentLengthKey] longLongValue];
31 | _contentType = [aDecoder decodeObjectForKey:kContentTypeKey];
32 | _byteRangeAccessSupported = [[aDecoder decodeObjectForKey:kByteRangeAccessSupported] boolValue];
33 | }
34 | return self;
35 | }
36 |
37 | @end
38 |
--------------------------------------------------------------------------------
/Example/Pods/VIMediaCache/VIMediaCache/ResourceLoader/VIMediaDownloader.h:
--------------------------------------------------------------------------------
1 | //
2 | // VIMediaDownloader.h
3 | // VIMediaCacheDemo
4 | //
5 | // Created by Vito on 4/21/16.
6 | // Copyright © 2016 Vito. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @protocol VIMediaDownloaderDelegate;
12 | @class VIContentInfo;
13 | @class VIMediaCacheWorker;
14 |
15 | @interface VIMediaDownloaderStatus : NSObject
16 |
17 | + (instancetype)shared;
18 |
19 | - (void)addURL:(NSURL *)url;
20 | - (void)removeURL:(NSURL *)url;
21 |
22 | /**
23 | return YES if downloading the url source
24 | */
25 | - (BOOL)containsURL:(NSURL *)url;
26 | - (NSSet *)urls;
27 |
28 | @end
29 |
30 | @interface VIMediaDownloader : NSObject
31 |
32 | - (instancetype)initWithURL:(NSURL *)url cacheWorker:(VIMediaCacheWorker *)cacheWorker;
33 | @property (nonatomic, strong, readonly) NSURL *url;
34 | @property (nonatomic, weak) id delegate;
35 | @property (nonatomic, strong) VIContentInfo *info;
36 | @property (nonatomic, assign) BOOL saveToCache;
37 |
38 | - (void)downloadTaskFromOffset:(unsigned long long)fromOffset
39 | length:(NSUInteger)length
40 | toEnd:(BOOL)toEnd;
41 | - (void)downloadFromStartToEnd;
42 |
43 | - (void)cancel;
44 |
45 | @end
46 |
47 | @protocol VIMediaDownloaderDelegate
48 |
49 | @optional
50 | - (void)mediaDownloader:(VIMediaDownloader *)downloader didReceiveResponse:(NSURLResponse *)response;
51 | - (void)mediaDownloader:(VIMediaDownloader *)downloader didReceiveData:(NSData *)data;
52 | - (void)mediaDownloader:(VIMediaDownloader *)downloader didFinishedWithError:(NSError *)error;
53 |
54 | @end
55 |
--------------------------------------------------------------------------------
/Example/Pods/VIMediaCache/VIMediaCache/ResourceLoader/VIResourceLoader.h:
--------------------------------------------------------------------------------
1 | //
2 | // VIResoureLoader.h
3 | // VIMediaCacheDemo
4 | //
5 | // Created by Vito on 4/21/16.
6 | // Copyright © 2016 Vito. All rights reserved.
7 | //
8 |
9 | #import
10 | @import AVFoundation;
11 | @protocol VIResourceLoaderDelegate;
12 |
13 | @interface VIResourceLoader : NSObject
14 |
15 | @property (nonatomic, strong, readonly) NSURL *url;
16 | @property (nonatomic, weak) id delegate;
17 |
18 | - (instancetype)initWithURL:(NSURL *)url;
19 |
20 | - (void)addRequest:(AVAssetResourceLoadingRequest *)request;
21 | - (void)removeRequest:(AVAssetResourceLoadingRequest *)request;
22 |
23 | - (void)cancel;
24 |
25 | @end
26 |
27 | @protocol VIResourceLoaderDelegate
28 |
29 | - (void)resourceLoader:(VIResourceLoader *)resourceLoader didFailWithError:(NSError *)error;
30 |
31 | @end
32 |
--------------------------------------------------------------------------------
/Example/Pods/VIMediaCache/VIMediaCache/ResourceLoader/VIResourceLoaderManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // VIResourceLoaderManager.h
3 | // VIMediaCacheDemo
4 | //
5 | // Created by Vito on 4/21/16.
6 | // Copyright © 2016 Vito. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | @protocol VIResourceLoaderManagerDelegate;
13 |
14 | @interface VIResourceLoaderManager : NSObject
15 |
16 |
17 | @property (nonatomic, weak) id delegate;
18 |
19 | /**
20 | Normally you no need to call this method to clean cache. Cache cleaned after AVPlayer delloc.
21 | If you have a singleton AVPlayer then you need call this method to clean cache at suitable time.
22 | */
23 | - (void)cleanCache;
24 |
25 | /**
26 | Cancel all downloading loaders.
27 | */
28 | - (void)cancelLoaders;
29 |
30 | @end
31 |
32 | @protocol VIResourceLoaderManagerDelegate
33 |
34 | - (void)resourceLoaderManagerLoadURL:(NSURL *)url didFailWithError:(NSError *)error;
35 |
36 | @end
37 |
38 | @interface VIResourceLoaderManager (Convenient)
39 |
40 | + (NSURL *)assetURLWithURL:(NSURL *)url;
41 | - (AVPlayerItem *)playerItemWithURL:(NSURL *)url;
42 |
43 | @end
44 |
--------------------------------------------------------------------------------
/Example/Pods/VIMediaCache/VIMediaCache/ResourceLoader/VIResourceLoadingRequestWorker.h:
--------------------------------------------------------------------------------
1 | //
2 | // VIResourceLoadingRequestWorker.h
3 | // VIMediaCacheDemo
4 | //
5 | // Created by Vito on 4/21/16.
6 | // Copyright © 2016 Vito. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class VIMediaDownloader, AVAssetResourceLoadingRequest;
12 | @protocol VIResourceLoadingRequestWorkerDelegate;
13 |
14 | @interface VIResourceLoadingRequestWorker : NSObject
15 |
16 | - (instancetype)initWithMediaDownloader:(VIMediaDownloader *)mediaDownloader resourceLoadingRequest:(AVAssetResourceLoadingRequest *)request;
17 |
18 | @property (nonatomic, weak) id delegate;
19 |
20 | @property (nonatomic, strong, readonly) AVAssetResourceLoadingRequest *request;
21 |
22 | - (void)startWork;
23 | - (void)cancel;
24 | - (void)finish;
25 |
26 | @end
27 |
28 | @protocol VIResourceLoadingRequestWorkerDelegate
29 |
30 | - (void)resourceLoadingRequestWorker:(VIResourceLoadingRequestWorker *)requestWorker didCompleteWithError:(NSError *)error;
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/Example/Pods/VIMediaCache/VIMediaCache/VIMediaCache.h:
--------------------------------------------------------------------------------
1 | //
2 | // VIMediaCache.h
3 | // VIMediaCacheDemo
4 | //
5 | // Created by Vito on 4/22/16.
6 | // Copyright © 2016 Vito. All rights reserved.
7 | //
8 |
9 | #ifndef VIMediaCache_h
10 | #define VIMediaCache_h
11 |
12 | #import "VIResourceLoaderManager.h"
13 | #import "VICacheManager.h"
14 | #import "VIMediaDownloader.h"
15 | #import "VIContentInfo.h"
16 |
17 | #endif /* VIMediaCache_h */
18 |
--------------------------------------------------------------------------------
/Example/Tests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Example/Tests/Tests.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 | import AudioPlaybackManager
3 |
4 | class Tests: XCTestCase {
5 |
6 | override func setUp() {
7 | super.setUp()
8 | // Put setup code here. This method is called before the invocation of each test method in the class.
9 | }
10 |
11 | override func tearDown() {
12 | // Put teardown code here. This method is called after the invocation of each test method in the class.
13 | super.tearDown()
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2023 LiuMing
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # AudioPlaybackManager
2 |
3 | [](https://travis-ci.org/LiuMing/AudioPlaybackManager)
4 | [](https://cocoapods.org/pods/AudioPlaybackManager)
5 | [](https://cocoapods.org/pods/AudioPlaybackManager)
6 | [](https://cocoapods.org/pods/AudioPlaybackManager)
7 |
8 | ## Example
9 |
10 | To run the example project, clone the repo, and run `pod install` from the Example directory first.
11 |
12 | ## Requirements
13 |
14 | ## Installation
15 |
16 | AudioPlaybackManager is available through [CocoaPods](https://cocoapods.org). To install
17 | it, simply add the following line to your Podfile:
18 |
19 | ```ruby
20 | pod 'AudioPlaybackManager'
21 | ```
22 |
23 | ## Author
24 |
25 | LiuMing, liuming_0109@163.com
26 |
27 | ## License
28 |
29 | AudioPlaybackManager is available under the MIT license. See the LICENSE file for more info.
30 |
31 | ## 中文文档
32 |
33 | https://juejin.cn/post/7232256083875430461
34 |
35 | ## Updates
36 |
37 | | Version | Detail |
38 | | ------- | ------------------------------------------------------------ |
39 | | 0.1.0 | Basic |
40 | | 0.2.0 | 1. Add logger control.
2. Update method `setActiveSession()`, you can see the detail in the demo.
3. `allowSetNowPlayingInfo` default value change to `false`. |
41 |
--------------------------------------------------------------------------------
/_Pods.xcodeproj:
--------------------------------------------------------------------------------
1 | Example/Pods/Pods.xcodeproj
--------------------------------------------------------------------------------