├── .swiftlint.yml
├── .travis.yml
├── Package.swift
├── RxPhotos.xcodeproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
├── xcshareddata
│ └── xcschemes
│ │ └── RxPhotos.xcscheme
└── project.pbxproj
├── iOS Example
├── iOS Example.xcodeproj
│ ├── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── xcshareddata
│ │ └── xcschemes
│ │ │ └── iOS Example.xcscheme
│ └── project.pbxproj
├── iOS Example.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── Podfile
├── Podfile.lock
└── Source
│ ├── AppDelegate.swift
│ ├── ViewController.swift
│ ├── Base.lproj
│ ├── Main.storyboard
│ └── LaunchScreen.storyboard
│ ├── Assets.xcassets
│ └── AppIcon.appiconset
│ │ └── Contents.json
│ └── Info.plist
├── RxPhotos.xcworkspace
├── contents.xcworkspacedata
└── xcshareddata
│ └── IDEWorkspaceChecks.plist
├── Podfile
├── Podfile.lock
├── Source
├── Results
│ ├── ImageRequestResult.swift
│ ├── LivePhotoRequestResult.swift
│ ├── PlayerItemRequestResult.swift
│ ├── AssetExportSessionRequestResult.swift
│ ├── ContentEditRequestResult.swift
│ ├── AssetRequestResult.swift
│ └── ImageDataRequestResult.swift
├── RxPHPhotoLibraryObserver.swift
├── RxPhotos.h
├── Info.plist
├── Extensions
│ ├── PHAsset+Rx.swift
│ ├── PHLivePhoto+Rx.swift
│ ├── PHPhotoLibrary+Rx.swift
│ ├── PHLivePhotoEditingContext+Rx.swift
│ ├── PHAssetResourceManager+Rx.swift
│ └── PHImageManager+Rx.swift
└── RxPhotoError.swift
├── CHANGELOG.md
├── RxPhotos.podspec
├── Tests
├── Info.plist
├── RxPhotosTests.swift
└── CheckCocoaPodsQualityIndexes.rb
├── CONTRIBUTING.md
├── LICENSE
├── .gitignore
└── README.md
/.swiftlint.yml:
--------------------------------------------------------------------------------
1 | excluded:
2 | - Pods
3 | - iOS Example
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: ruby
2 | rvm:
3 | - 2.2
4 |
5 | script:
6 | - yes | ./configure
--------------------------------------------------------------------------------
/Package.swift:
--------------------------------------------------------------------------------
1 | import PackageDescription
2 |
3 | let package = Package(
4 | name: "RxPhotos"
5 | )
6 |
--------------------------------------------------------------------------------
/RxPhotos.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/iOS Example/iOS Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/RxPhotos.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/RxPhotos.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Podfile:
--------------------------------------------------------------------------------
1 | platform :ios, '10.0'
2 |
3 | target 'RxPhotos' do
4 | use_frameworks!
5 | inhibit_all_warnings!
6 |
7 | pod 'RxSwift'
8 | pod 'SwiftLint'
9 |
10 | target 'RxPhotosTests' do
11 | inherit! :search_paths
12 | end
13 |
14 | end
15 |
16 | target 'iOS Example' do
17 | pod 'RxSwift'
18 | end
19 |
--------------------------------------------------------------------------------
/iOS Example/iOS Example.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/iOS Example/iOS Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - RxSwift (4.1.2)
3 | - SwiftLint (0.25.0)
4 |
5 | DEPENDENCIES:
6 | - RxSwift
7 | - SwiftLint
8 |
9 | SPEC CHECKSUMS:
10 | RxSwift: e49536837d9901277638493ea537394d4b55f570
11 | SwiftLint: e14651157288e9e01d6e1a71db7014fb5744a8ea
12 |
13 | PODFILE CHECKSUM: 4ba2d643ee737a655f81c3b110da75c1473b02a8
14 |
15 | COCOAPODS: 1.4.0
16 |
--------------------------------------------------------------------------------
/iOS Example/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment the next line to define a global platform for your project
2 | # platform :ios, '9.0'
3 |
4 | target 'iOS Example' do
5 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
6 | use_frameworks!
7 | inhibit_all_warnings!
8 |
9 | # Pods for iOS Example
10 |
11 | pod 'RxSwift'
12 | pod 'RxPhotos', :path => '../'
13 |
14 | end
15 |
--------------------------------------------------------------------------------
/iOS Example/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - RxPhotos (1.0.1):
3 | - RxSwift (~> 4.0)
4 | - RxSwift (4.1.2)
5 |
6 | DEPENDENCIES:
7 | - RxPhotos (from `../`)
8 | - RxSwift
9 |
10 | EXTERNAL SOURCES:
11 | RxPhotos:
12 | :path: ../
13 |
14 | SPEC CHECKSUMS:
15 | RxPhotos: 710c60c216ee3a190c56e106e455ccffcad90728
16 | RxSwift: e49536837d9901277638493ea537394d4b55f570
17 |
18 | PODFILE CHECKSUM: 9493d17dfd137cfdb314e89b1e6a055719f2cab0
19 |
20 | COCOAPODS: 1.4.0
21 |
--------------------------------------------------------------------------------
/Source/Results/ImageRequestResult.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ImageRequestResult.swift
3 | // RxPhotos
4 | //
5 | // Created by Anton Romanov on 01/04/2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | public struct ImageRequestResult {
12 | public let image: UIImage?
13 | public let info: [AnyHashable: Any]
14 |
15 | internal init(image: UIImage?, info: [AnyHashable: Any]?) {
16 | self.image = image
17 | self.info = info ?? [:]
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Source/RxPHPhotoLibraryObserver.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxPHPhotoLibraryObserver.swift
3 | // RxPhotos
4 | //
5 | // Created by Anton Romanov on 01/04/2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Photos
11 |
12 | internal final class RxPHPhotoLibraryObserver: NSObject, PHPhotoLibraryChangeObserver {
13 | var changeCallback: ((PHChange) -> Void)?
14 |
15 | func photoLibraryDidChange(_ changeInstance: PHChange) {
16 | changeCallback?(changeInstance)
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Source/RxPhotos.h:
--------------------------------------------------------------------------------
1 | //
2 | // RxPhotos.h
3 | // RxPhotos
4 | //
5 | // Created by Anton Romanov on Apr 1, 2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for RxPhotos.
12 | FOUNDATION_EXPORT double RxPhotosVersionNumber;
13 |
14 | //! Project version string for RxPhotos.
15 | FOUNDATION_EXPORT const unsigned char RxPhotosVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
--------------------------------------------------------------------------------
/iOS Example/Source/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // iOS Example
4 | //
5 | // Created by Anton Romanov on Apr 1, 2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | var window: UIWindow?
15 |
16 | func application(_ application: UIApplication,
17 | didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
18 | return true
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Source/Results/LivePhotoRequestResult.swift:
--------------------------------------------------------------------------------
1 | //
2 | // LivePhotoRequestResult.swift
3 | // RxPhotos
4 | //
5 | // Created by Anton Romanov on 01/04/2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Photos
11 |
12 | public struct LivePhotoRequestResult {
13 | public let livePhoto: PHLivePhoto?
14 | public let info: [AnyHashable: Any]
15 |
16 | internal init(livePhoto: PHLivePhoto?, info: [AnyHashable: Any]?) {
17 | self.livePhoto = livePhoto
18 | self.info = info ?? [:]
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/iOS Example/Source/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // iOS Example
4 | //
5 | // Created by Anton Romanov on Apr 1, 2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import Photos
11 | import RxPhotos
12 |
13 | class ViewController: UIViewController {
14 | override func viewDidLoad() {
15 | super.viewDidLoad()
16 | }
17 |
18 | override func didReceiveMemoryWarning() {
19 | super.didReceiveMemoryWarning()
20 | // Dispose of any resources that can be recreated.
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Source/Results/PlayerItemRequestResult.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PlayerItemRequestResult.swift
3 | // RxPhotos
4 | //
5 | // Created by Anton Romanov on 01/04/2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import AVFoundation
11 |
12 | public struct PlayerItemRequestResult {
13 | public let playerItem: AVPlayerItem?
14 | public let info: [AnyHashable: Any]
15 |
16 | internal init(playerItem: AVPlayerItem?, info: [AnyHashable: Any]?) {
17 | self.playerItem = playerItem
18 | self.info = info ?? [:]
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Source/Results/AssetExportSessionRequestResult.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AssetExportSessionRequestResult.swift
3 | // RxPhotos
4 | //
5 | // Created by Anton Romanov on 01/04/2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | import AVFoundation
10 |
11 | public struct AssetExportSessionRequestResult {
12 | public let session: AVAssetExportSession?
13 | public let info: [AnyHashable: Any]
14 |
15 | internal init(session: AVAssetExportSession?, info: [AnyHashable: Any]?) {
16 | self.session = session
17 | self.info = info ?? [:]
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 | All notable changes to this project will be documented in this file.
3 | `RxPhotos` adheres to [Semantic Versioning](http://semver.org/).
4 |
5 | ## [1.0.1](https://github.com/Istered/RxPhotos/releases/tag/1.0.1)
6 | Released on 2018-04-02.
7 |
8 | ### Removed
9 | - PHImageManagerError.
10 | - Removed by [Anton Romanov](https://github.com/istered).
11 |
12 | ## [1.0.0](https://github.com/Istered/RxPhotos/releases/tag/1.0.0)
13 | Released on 2018-04-01.
14 |
15 | ### Added
16 | - Initial release of RxPhotos.
17 | - Added by [Anton Romanov](https://github.com/istered).
18 |
--------------------------------------------------------------------------------
/Source/Results/ContentEditRequestResult.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ContentEditRequestResult.swift
3 | // RxPhotos
4 | //
5 | // Created by Anton Romanov on 01/04/2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Photos
11 |
12 | public struct ContentEditRequestResult {
13 | public let editingInput: PHContentEditingInput?
14 | public let info: [AnyHashable: Any]
15 |
16 | internal init(editingInput: PHContentEditingInput?, info: [AnyHashable: Any]?) {
17 | self.editingInput = editingInput
18 | self.info = info ?? [:]
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Source/Results/AssetRequestResult.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AssetRequestResult.swift
3 | // RxPhotos
4 | //
5 | // Created by Anton Romanov on 01/04/2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import AVFoundation
11 |
12 | public struct AssetRequestResult {
13 | public let asset: AVAsset?
14 | public let audioMix: AVAudioMix?
15 | public let info: [AnyHashable: Any]
16 |
17 | internal init(asset: AVAsset?, audioMix: AVAudioMix?, info: [AnyHashable: Any]?) {
18 | self.asset = asset
19 | self.audioMix = audioMix
20 | self.info = info ?? [:]
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/RxPhotos.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = 'RxPhotos'
3 | s.version = '1.0.1'
4 | s.license = { :type => 'MIT', :file => 'LICENSE' }
5 | s.summary = 'Reactive extensions for Photos framework.'
6 | s.homepage = 'https://github.com/istered/RxPhotos'
7 | s.authors = { 'Anton Romanov' => 'istered@outlook.com' }
8 | s.source = { :git => 'https://github.com/istered/RxPhotos.git', :tag => s.version }
9 | s.source_files = 'Source/**/*.{h,m,swift}'
10 | s.swift_version = '4.0'
11 | s.frameworks = 'UIKit', 'Foundation', 'AVFoundation', 'Photos'
12 |
13 | s.dependency 'RxSwift', '~> 4.0'
14 |
15 | s.ios.deployment_target = '10.0'
16 | end
--------------------------------------------------------------------------------
/Source/Results/ImageDataRequestResult.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ImageDataRequestResult.swift
3 | // RxPhotos
4 | //
5 | // Created by Anton Romanov on 01/04/2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | public struct ImageDataRequestResult {
12 | public let data: Data?
13 | public let UTI: String?
14 | public let orientation: UIImageOrientation
15 | public let info: [AnyHashable: Any]
16 |
17 | internal init(data: Data?, UTI: String?, orientation: UIImageOrientation, info: [AnyHashable: Any]?) {
18 | self.data = data
19 | self.UTI = UTI
20 | self.orientation = orientation
21 | self.info = info ?? [:]
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/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 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Source/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 |
3 | All contributors are welcome. Please use issues and pull requests to contribute to the project. And update [CHANGELOG.md](CHANGELOG.md) when committing.
4 |
5 | ## Making a change
6 |
7 | When you commit a change, please add a note to [CHANGELOG.md](CHANGELOG.md).
8 |
9 | ## Release process
10 |
11 | 1. Confirm the build is [passing in travis](https://travis-ci.org/istered/RxPhotos)
12 | 1. This automatically checks the Podfile is building
13 | 2. Push a release commit
14 | 1. Create a new Master section at the top
15 | 2. Rename the old Master section like:
16 | ## [1.0.5](https://github.com/istered/RxPhotos/releases/tag/1.0.5)
17 | Released on 2016-02-14.
18 | 3. Update the Podspec version number
19 | 3. Create a GitHub release
20 | 1. Tag the release (like `1.0.5`)
21 | 2. Paste notes from [CHANGELOG.md](CHANGELOG.md)
22 | 3. Push the Podspec to CocoaPods
23 | 1. `pod trunk push`
24 | 4. Create Carthage binaries
25 | 1. `carthage build --no-skip-current`
26 | 2. `carthage archive RxPhotos`
27 | 3. Add to the GitHub release
28 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2018 Anton Romanov
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.
--------------------------------------------------------------------------------
/Tests/RxPhotosTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxPhotosTests.swift
3 | // RxPhotosTests
4 | //
5 | // Created by Anton Romanov on Apr 1, 2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | import XCTest
10 | @testable import RxPhotos
11 |
12 | class RxPhotosTests: XCTestCase {
13 |
14 | override func setUp() {
15 | super.setUp()
16 | // Put setup code here. This method is called before the invocation of each test method in the class.
17 | }
18 |
19 | override func tearDown() {
20 | // Put teardown code here. This method is called after the invocation of each test method in the class.
21 | super.tearDown()
22 | }
23 |
24 | func testExample() {
25 | // This is an example of a functional test case.
26 | // Use XCTAssert and related functions to verify your tests produce the correct results.
27 | }
28 |
29 | func testPerformanceExample() {
30 | // This is an example of a performance test case.
31 | self.measure {
32 | // Put the code you want to measure the time of here.
33 | }
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/iOS Example/Source/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Source/Extensions/PHAsset+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PHAsset+Rx.swift
3 | // RxPhotos
4 | //
5 | // Created by Anton Romanov on 01/04/2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Photos
11 | import RxSwift
12 |
13 | extension Reactive where Base: PHAsset {
14 | public func requestContentEditingInput(with options: PHContentEditingInputRequestOptions?)
15 | -> Single {
16 | return Single.create { [weak base] single in
17 |
18 | let requestId = base?.requestContentEditingInput(
19 | with: options,
20 | completionHandler: { input, info in
21 | if let error = RxPhotoError(info: info) {
22 | single(.error(error))
23 | } else {
24 | single(.success(ContentEditRequestResult(editingInput: input, info: info)))
25 | }
26 | })
27 |
28 | return Disposables.create {
29 | requestId.map { base?.cancelContentEditingInputRequest($0) }
30 | }
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/Source/RxPhotoError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RxPhotoError.swift
3 | // RxPhotos
4 | //
5 | // Created by Anton Romanov on 01/04/2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Photos
11 |
12 | public enum RxPhotoError: Error {
13 | case underlying(NSError, [AnyHashable: Any])
14 | case cancelled([AnyHashable: Any])
15 |
16 | init?(info: [AnyHashable: Any]) {
17 | if let error = info[PHImageErrorKey] as? NSError {
18 | self = .underlying(error, info)
19 | } else if let error = info[PHContentEditingInputErrorKey] as? NSError {
20 | self = .underlying(error, info)
21 | } else if let error = info[PHLivePhotoInfoErrorKey] as? NSError {
22 | self = .underlying(error, info)
23 | } else if let canceled = info[PHImageCancelledKey] as? Bool, canceled {
24 | self = .cancelled(info)
25 | } else if let canceled = info[PHContentEditingInputCancelledKey] as? Bool, canceled {
26 | self = .cancelled(info)
27 | } else if let canceled = info[PHLivePhotoInfoCancelledKey] as? Bool, canceled {
28 | self = .cancelled(info)
29 | } else {
30 | return nil
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/iOS Example/Source/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "29x29",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "40x40",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "40x40",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "60x60",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "60x60",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "ipad",
35 | "size" : "29x29",
36 | "scale" : "1x"
37 | },
38 | {
39 | "idiom" : "ipad",
40 | "size" : "29x29",
41 | "scale" : "2x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "40x40",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "40x40",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "76x76",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "76x76",
61 | "scale" : "2x"
62 | }
63 | ],
64 | "info" : {
65 | "version" : 1,
66 | "author" : "xcode"
67 | }
68 | }
--------------------------------------------------------------------------------
/Source/Extensions/PHLivePhoto+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PHLivePhoto+Rx.swift
3 | // RxPhotos
4 | //
5 | // Created by Anton Romanov on 01/04/2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Photos
11 | import RxSwift
12 |
13 | extension Reactive where Base: PHLivePhoto {
14 | public static func request(withResourceFileURLs fileURLs: [URL],
15 | placeholderImage image: UIImage?,
16 | targetSize: CGSize,
17 | contentMode: PHImageContentMode) -> Observable {
18 | return Observable.create { observable in
19 |
20 | let requestId = PHLivePhoto.request(
21 | withResourceFileURLs: fileURLs,
22 | placeholderImage: image,
23 | targetSize: targetSize,
24 | contentMode: contentMode,
25 | resultHandler: { livePhoto, info in
26 | if let error = RxPhotoError(info: info) {
27 | observable.onError(error)
28 | } else {
29 | observable.onNext(LivePhotoRequestResult(livePhoto: livePhoto, info: info))
30 |
31 | if info[PHLivePhotoInfoIsDegradedKey] == nil {
32 | observable.onCompleted()
33 | }
34 | }
35 | })
36 |
37 | return Disposables.create {
38 | PHLivePhoto.cancelRequest(withRequestID: requestId)
39 | }
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/Source/Extensions/PHPhotoLibrary+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PHPhotoLibrary+Rx.swift
3 | // RxPhotos
4 | //
5 | // Created by Anton Romanov on 01/04/2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Photos
11 | import RxSwift
12 |
13 | extension Reactive where Base: PHPhotoLibrary {
14 | public static func requestAuthorization() -> Single {
15 | return Single.create { single in
16 | PHPhotoLibrary.requestAuthorization { status in
17 | single(.success(status))
18 | }
19 |
20 | return Disposables.create()
21 | }
22 | }
23 |
24 | public func performChanges(_ changeBlock: @escaping () -> Void) -> Single {
25 | return Single.create { [weak base] single in
26 | base?.performChanges(changeBlock) { result, error in
27 | if let error = error {
28 | single(.error(error))
29 | } else {
30 | single(.success(result))
31 | }
32 | }
33 |
34 | return Disposables.create()
35 | }
36 | }
37 |
38 | public var photoLibraryChange: Observable {
39 | let changeObserver = RxPHPhotoLibraryObserver()
40 | base.register(changeObserver)
41 |
42 | return Observable.create { [weak base] observable in
43 | changeObserver.changeCallback = observable.onNext
44 |
45 | return Disposables.create {
46 | base?.unregisterChangeObserver(changeObserver)
47 | }
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/Source/Extensions/PHLivePhotoEditingContext+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PHLivePhotoEditingContext+Rx.swift
3 | // RxPhotos
4 | //
5 | // Created by Anton Romanov on 01/04/2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Photos
11 | import RxSwift
12 |
13 | extension Reactive where Base: PHLivePhotoEditingContext {
14 | public func saveLivePhoto(to output: PHContentEditingOutput,
15 | options: [String: Any]? = nil) -> Single {
16 | return Single.create { [weak base] single in
17 | base?.saveLivePhoto(to: output, options: options) { result, error in
18 | if let error = error {
19 | single(.error(error))
20 | } else {
21 | single(.success(result))
22 | }
23 | }
24 |
25 | return Disposables.create()
26 | }
27 | }
28 |
29 | public func prepareLivePhotoForPlayback(withTargetSize targetSize: CGSize,
30 | options: [String: Any]? = nil) -> Single {
31 | return Single.create { [weak base] single in
32 | base?.prepareLivePhotoForPlayback(withTargetSize: targetSize, options: options) { livePhoto, error in
33 | if let error = error {
34 | single(.error(error))
35 | } else {
36 | single(.success(LivePhotoRequestResult(livePhoto: livePhoto, info: [:])))
37 | }
38 | }
39 |
40 | return Disposables.create()
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/iOS Example/Source/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | NSPhotoLibraryUsageDescription
38 | NSPhotoLibraryUsageDescription
39 | UISupportedInterfaceOrientations~ipad
40 |
41 | UIInterfaceOrientationPortrait
42 | UIInterfaceOrientationPortraitUpsideDown
43 | UIInterfaceOrientationLandscapeLeft
44 | UIInterfaceOrientationLandscapeRight
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## Build generated
6 | build/
7 | DerivedData/
8 |
9 | ## Various settings
10 | *.pbxuser
11 | !default.pbxuser
12 | *.mode1v3
13 | !default.mode1v3
14 | *.mode2v3
15 | !default.mode2v3
16 | *.perspectivev3
17 | !default.perspectivev3
18 | xcuserdata/
19 |
20 | ## Other
21 | *.moved-aside
22 | *.xccheckout
23 | *.xcscmblueprint
24 |
25 | ## Obj-C/Swift specific
26 | *.hmap
27 | *.ipa
28 | *.dSYM.zip
29 | *.dSYM
30 |
31 | ## Playgrounds
32 | timeline.xctimeline
33 | playground.xcworkspace
34 |
35 | # Swift Package Manager
36 | #
37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
38 | # Packages/
39 | # Package.pins
40 | # Package.resolved
41 | .build/
42 |
43 | # CocoaPods
44 | #
45 | # We recommend against adding the Pods directory to your .gitignore. However
46 | # you should judge for yourself, the pros and cons are mentioned at:
47 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
48 | #
49 | Pods/
50 |
51 | # Carthage
52 | #
53 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
54 | # Carthage/Checkouts
55 |
56 | Carthage/Build
57 |
58 | # fastlane
59 | #
60 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
61 | # screenshots whenever they are needed.
62 | # For more information about the recommended setup visit:
63 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
64 |
65 | fastlane/report.xml
66 | fastlane/Preview.html
67 | fastlane/screenshots
68 | fastlane/test_output
--------------------------------------------------------------------------------
/iOS Example/Source/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/Source/Extensions/PHAssetResourceManager+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PHAssetResourceManager+Rx.swift
3 | // RxPhotos
4 | //
5 | // Created by Anton Romanov on 01/04/2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Photos
11 | import RxSwift
12 |
13 | extension Reactive where Base: PHAssetResourceManager {
14 | public func requestData(for resource: PHAssetResource, options: PHAssetResourceRequestOptions?)
15 | -> Observable {
16 | return Observable.create { [weak base] observable in
17 |
18 | let requestId = base?.requestData(
19 | for: resource,
20 | options: options,
21 | dataReceivedHandler: { data in
22 | observable.onNext(data)
23 | },
24 | completionHandler: { error in
25 | if let error = error {
26 | observable.onError(error)
27 | } else {
28 | observable.onCompleted()
29 | }
30 | })
31 |
32 | return Disposables.create {
33 | requestId.map { base?.cancelDataRequest($0) }
34 | }
35 | }
36 | }
37 |
38 | public func writeData(for resource: PHAssetResource,
39 | toFile fileURL: URL,
40 | options: PHAssetResourceRequestOptions?) -> Completable {
41 | return Completable.create { [weak base] completable in
42 | base?.writeData(for: resource, toFile: fileURL, options: options) { error in
43 | if let error = error {
44 | completable(.error(error))
45 | } else {
46 | completable(.completed)
47 | }
48 | }
49 |
50 | return Disposables.create()
51 | }
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/Tests/CheckCocoaPodsQualityIndexes.rb:
--------------------------------------------------------------------------------
1 | #!/bin/ruby
2 |
3 | #
4 | # CheckCocoaPodsQualityIndexes.rb
5 | # by William Entriken, version 1.0.1
6 | # Part of https://github.com/fulldecent/swift3-module-template
7 | #
8 | # The validates that all controllable quality metrics receive maximum score
9 | # from CocoaPods's scoring quality algorithm
10 | #
11 | # Usage: ruby CheckCocoaPodsQualityIndexes.rb PODNAME
12 | #
13 |
14 | require "json"
15 | require "uri"
16 | require "net/http"
17 |
18 | pod_name = ARGV.shift
19 |
20 | puts "Reviewing CocoaPods's quality metrics for #{pod_name}"
21 | puts "Metrics documentation: https://guides.cocoapods.org/making/quality-indexes.html"
22 | puts "Modifiers from: https://cocoadocs-api-cocoapods-org.herokuapp.com/pods/#{pod_name}/stats"
23 | puts "Raw data from: http://metrics.cocoapods.org/api/v1/pods/#{pod_name}"
24 | puts "NOTE: You must pust a new version to CocoaPods to get new metrics!"
25 | puts ""
26 |
27 | uri = URI.parse('https://cocoadocs-api-cocoapods-org.herokuapp.com/pods/FDTake/stats')
28 | http = Net::HTTP.new(uri.host, uri.port)
29 | http.use_ssl = true if uri.scheme == 'https'
30 | request = Net::HTTP::Get.new uri
31 | response = http.request(request)
32 |
33 | if !response.is_a? Net::HTTPOK
34 | puts "HTTP fetching error!"
35 | exit 1
36 | end
37 |
38 | passing = true
39 | for metric in JSON.parse(response.body)['metrics']
40 | if ['Verified Owner', 'Very Popular', 'Popular'].include? metric['title']
41 | puts "SKIPPED\tYou cannot control: " + metric['title']
42 | next
43 | end
44 | if metric['modifier'] >= 0
45 | if metric['applies_for_pod']
46 | puts "GOOD\tEarned points for: " + metric['title']
47 | else
48 | puts "BAD\tMissed points for: " + metric['title']
49 | passing = false
50 | end
51 | else
52 | if metric['applies_for_pod']
53 | puts "BAD\tLost points for: " + metric['title']
54 | passing = false
55 | else
56 | puts "GOOD\tAvoided penalty for: " + metric['title']
57 | end
58 | end
59 | end
60 |
61 | exit passing ? 0 : 1
62 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # RxPhotos
2 |
3 | [](https://travis-ci.org/istered/RxPhotos)
4 | [](https://cocoapods.org/pods/RxPhotos)
5 | [](https://cocoapods.org/pods/RxPhotos)
6 | [](https://cocoapods.org/pods/RxPhotos)
7 | [](https://github.com/Carthage/Carthage)
8 |
9 | This library is a tiny wrapper around some callback-based Photos' framework functions.
10 |
11 | ## Usage
12 |
13 | Request image:
14 | ```swift
15 | PHImageManager.default().rx.requestImage(
16 | for: asset,
17 | targetSize: CGSize(width: 120, height: 200),
18 | contentMode: PHImageContentMode.aspectFit,
19 | options: nil
20 | ).subscribe(onNext: { image in
21 | //
22 | }).disposed(by: disposeBag)
23 | ```
24 |
25 | Watch PHPhotoLibrary changes:
26 | ```swift
27 | PHPhotoLibrary.shared().rx.photoLibraryChange
28 | .subscribe(onNext: { change in
29 | //
30 | }).disposed(by: disposeBag)
31 | ```
32 |
33 | Request authorization:
34 | ```swift
35 | PHPhotoLibrary.rx.requestAuthorization()
36 | .subscribe(onSuccess: { status in
37 | //
38 | }).disposed(by: disposeBag)
39 | ```
40 |
41 | Perform changes on photo library:
42 | ```swift
43 | PHPhotoLibrary.shared().rx.performChanges({ /**/ })
44 | .subscribe(onSuccess: { result in
45 | //
46 | }).disposed(by: disposeBag)
47 | ```
48 |
49 | ## Installation
50 |
51 | ### CocoaPods
52 |
53 | [CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command:
54 |
55 | ```bash
56 | $ gem install cocoapods
57 | ```
58 |
59 | To integrate RxPhotos into your Xcode project using CocoaPods, specify it in your `Podfile`:
60 |
61 | ```ruby
62 | use_frameworks!
63 |
64 | pod 'RxPhotos'
65 | ```
66 |
67 | Then, run the following command:
68 |
69 | ```bash
70 | $ pod install
71 | ```
72 |
73 |
74 | ### Carthage
75 |
76 | [Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.
77 |
78 | You can install Carthage with [Homebrew](http://brew.sh/) using the following command:
79 |
80 | ```bash
81 | $ brew update
82 | $ brew install carthage
83 | ```
84 |
85 | To integrate RxPhotos into your Xcode project using Carthage, specify it in your `Cartfile`:
86 |
87 | ```ogdl
88 | github "istered/RxPhotos"
89 | ```
90 |
91 | Run `carthage update` to build the framework and drag the built `RxPhotos`.framework into your Xcode project.
92 |
93 |
94 | ## Dependencies
95 | * [RxSwift](https://github.com/ReactiveX/RxSwift) ~> 4.0
96 |
97 | ## Requirements
98 | * iOS 10+
99 | * Swift 4.0+
100 |
101 | ## Author
102 |
103 | Anton Romanov
104 |
105 |
106 | ## License
107 |
108 | RxPhotos is available under the MIT license. See the LICENSE file for more info.
109 |
--------------------------------------------------------------------------------
/iOS Example/iOS Example.xcodeproj/xcshareddata/xcschemes/iOS Example.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 |
43 |
44 |
54 |
56 |
62 |
63 |
64 |
65 |
66 |
67 |
73 |
75 |
81 |
82 |
83 |
84 |
86 |
87 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/RxPhotos.xcodeproj/xcshareddata/xcschemes/RxPhotos.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
33 |
39 |
40 |
41 |
42 |
43 |
49 |
50 |
51 |
52 |
53 |
54 |
64 |
65 |
71 |
72 |
73 |
74 |
75 |
76 |
82 |
83 |
89 |
90 |
91 |
92 |
94 |
95 |
98 |
99 |
100 |
--------------------------------------------------------------------------------
/Source/Extensions/PHImageManager+Rx.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PHImageManager+Rx.swift
3 | // RxPhotos
4 | //
5 | // Created by Anton Romanov on 01/04/2018.
6 | // Copyright © 2018 Istered. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Photos
11 | import RxSwift
12 |
13 | public extension Reactive where Base: PHImageManager {
14 | public func requestImage(for asset: PHAsset,
15 | targetSize: CGSize,
16 | contentMode: PHImageContentMode,
17 | options: PHImageRequestOptions?) -> Observable {
18 | return Observable.create { [weak base] observable in
19 |
20 | let requestId = base?.requestImage(
21 | for: asset,
22 | targetSize: targetSize,
23 | contentMode: contentMode,
24 | options: options,
25 | resultHandler: { image, info in
26 | if let info = info, let error = RxPhotoError(info: info) {
27 | observable.onError(error)
28 | } else {
29 | observable.onNext(ImageRequestResult(image: image, info: info))
30 |
31 | if options?.isSynchronous == true || info?[PHImageResultIsDegradedKey] == nil {
32 | observable.onCompleted()
33 | }
34 | }
35 | })
36 |
37 | return Disposables.create {
38 | requestId.map { base?.cancelImageRequest($0) }
39 | }
40 | }
41 | }
42 |
43 | public func requestAVAsset(forVideo asset: PHAsset,
44 | options: PHVideoRequestOptions?) -> Single {
45 | return Single.create { [weak base] single in
46 |
47 | let requestId = base?.requestAVAsset(
48 | forVideo: asset,
49 | options: options,
50 | resultHandler: { asset, mix, info in
51 | if let info = info, let error = RxPhotoError(info: info) {
52 | single(.error(error))
53 | } else {
54 | single(.success(AssetRequestResult(asset: asset, audioMix: mix, info: info)))
55 | }
56 | })
57 |
58 | return Disposables.create {
59 | requestId.map { base?.cancelImageRequest($0) }
60 | }
61 | }
62 | }
63 |
64 | public func requestImageData(for asset: PHAsset,
65 | options: PHImageRequestOptions?) -> Single {
66 | return Single.create { [weak base] single in
67 |
68 | let requestId = base?.requestImageData(
69 | for: asset,
70 | options: options,
71 | resultHandler: { data, UTI, orientation, info in
72 | if let info = info, let error = RxPhotoError(info: info) {
73 | single(.error(error))
74 | } else {
75 | let result = ImageDataRequestResult(data: data, UTI: UTI, orientation: orientation, info: info)
76 | single(.success(result))
77 | }
78 | })
79 |
80 | return Disposables.create {
81 | requestId.map { base?.cancelImageRequest($0) }
82 | }
83 | }
84 | }
85 |
86 | public func requestPlayerItem(forVideo asset: PHAsset,
87 | options: PHVideoRequestOptions?) -> Single {
88 | return Single.create { [weak base] single in
89 |
90 | let requestId = base?.requestPlayerItem(
91 | forVideo: asset,
92 | options: options,
93 | resultHandler: { playerItem, info in
94 | if let info = info, let error = RxPhotoError(info: info) {
95 | single(.error(error))
96 | } else {
97 | single(.success(PlayerItemRequestResult(playerItem: playerItem, info: info)))
98 | }
99 | })
100 |
101 | return Disposables.create {
102 | requestId.map { base?.cancelImageRequest($0) }
103 | }
104 | }
105 | }
106 |
107 | public func requestExportSession(forVideo asset: PHAsset,
108 | options: PHVideoRequestOptions?,
109 | exportPreset: String) -> Single {
110 | return Single.create { [weak base] single in
111 |
112 | let requestId = base?.requestExportSession(
113 | forVideo: asset,
114 | options: options,
115 | exportPreset: exportPreset,
116 | resultHandler: { session, info in
117 | if let info = info, let error = RxPhotoError(info: info) {
118 | single(.error(error))
119 | } else {
120 | single(.success(AssetExportSessionRequestResult(session: session, info: info)))
121 | }
122 | })
123 |
124 | return Disposables.create {
125 | requestId.map { base?.cancelImageRequest($0) }
126 | }
127 | }
128 | }
129 |
130 | public func requestLivePhoto(for asset: PHAsset,
131 | targetSize: CGSize,
132 | contentMode: PHImageContentMode,
133 | options: PHLivePhotoRequestOptions?) -> Observable {
134 | return Observable.create { [weak base] observable in
135 |
136 | let requestId = base?.requestLivePhoto(
137 | for: asset,
138 | targetSize: targetSize,
139 | contentMode: contentMode,
140 | options: options,
141 | resultHandler: { livePhoto, info in
142 | if let info = info, let error = RxPhotoError(info: info) {
143 | observable.onError(error)
144 | } else {
145 | observable.onNext(LivePhotoRequestResult(livePhoto: livePhoto, info: info))
146 |
147 | if info?[PHImageResultIsDegradedKey] == nil {
148 | observable.onCompleted()
149 | }
150 | }
151 | })
152 |
153 | return Disposables.create {
154 | requestId.map { base?.cancelImageRequest($0) }
155 | }
156 | }
157 | }
158 | }
159 |
--------------------------------------------------------------------------------
/iOS Example/iOS Example.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | D5804E1B2E809BF6E2B5A46A /* Pods_iOS_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FE191D22C636AA4903C39027 /* Pods_iOS_Example.framework */; };
11 | D93F1CC41EAEDD3F009A7474 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D93F1CC31EAEDD3F009A7474 /* AppDelegate.swift */; };
12 | D93F1CC61EAEDD3F009A7474 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D93F1CC51EAEDD3F009A7474 /* ViewController.swift */; };
13 | D93F1CC91EAEDD3F009A7474 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D93F1CC71EAEDD3F009A7474 /* Main.storyboard */; };
14 | D93F1CCB1EAEDD3F009A7474 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D93F1CCA1EAEDD3F009A7474 /* Assets.xcassets */; };
15 | D93F1CCE1EAEDD3F009A7474 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D93F1CCC1EAEDD3F009A7474 /* LaunchScreen.storyboard */; };
16 | D93F1CD71EAEE00D009A7474 /* RxPhotos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D93F1CD61EAEE00D009A7474 /* RxPhotos.framework */; };
17 | /* End PBXBuildFile section */
18 |
19 | /* Begin PBXFileReference section */
20 | 148A4FB781A2EEFCB71A4FD3 /* Pods-iOS Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iOS Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-iOS Example/Pods-iOS Example.debug.xcconfig"; sourceTree = ""; };
21 | 25AB3BD9BC45DF89B95328D8 /* Pods-iOS Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iOS Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-iOS Example/Pods-iOS Example.release.xcconfig"; sourceTree = ""; };
22 | D93F1CC01EAEDD3F009A7474 /* iOS Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "iOS Example.app"; sourceTree = BUILT_PRODUCTS_DIR; };
23 | D93F1CC31EAEDD3F009A7474 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
24 | D93F1CC51EAEDD3F009A7474 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
25 | D93F1CC81EAEDD3F009A7474 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
26 | D93F1CCA1EAEDD3F009A7474 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
27 | D93F1CCD1EAEDD3F009A7474 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
28 | D93F1CCF1EAEDD3F009A7474 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
29 | D93F1CD61EAEE00D009A7474 /* RxPhotos.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxPhotos.framework; path = "../../../Library/Developer/Xcode/DerivedData/RxPhotos-ghiobiksiyymbygbpisckcynbsdi/Build/Products/Debug-iphonesimulator/RxPhotos.framework"; sourceTree = ""; };
30 | DDC0E782207128A80051A0DB /* Pods_RxPhotos.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Pods_RxPhotos.framework; sourceTree = BUILT_PRODUCTS_DIR; };
31 | DDC0E784207128B20051A0DB /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
32 | FE191D22C636AA4903C39027 /* Pods_iOS_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_iOS_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
33 | /* End PBXFileReference section */
34 |
35 | /* Begin PBXFrameworksBuildPhase section */
36 | D93F1CBD1EAEDD3F009A7474 /* Frameworks */ = {
37 | isa = PBXFrameworksBuildPhase;
38 | buildActionMask = 2147483647;
39 | files = (
40 | D93F1CD71EAEE00D009A7474 /* RxPhotos.framework in Frameworks */,
41 | D5804E1B2E809BF6E2B5A46A /* Pods_iOS_Example.framework in Frameworks */,
42 | );
43 | runOnlyForDeploymentPostprocessing = 0;
44 | };
45 | /* End PBXFrameworksBuildPhase section */
46 |
47 | /* Begin PBXGroup section */
48 | CDF8342396C13850FE2A671B /* Pods */ = {
49 | isa = PBXGroup;
50 | children = (
51 | 148A4FB781A2EEFCB71A4FD3 /* Pods-iOS Example.debug.xcconfig */,
52 | 25AB3BD9BC45DF89B95328D8 /* Pods-iOS Example.release.xcconfig */,
53 | );
54 | name = Pods;
55 | sourceTree = "";
56 | };
57 | D93F1CB71EAEDD3F009A7474 = {
58 | isa = PBXGroup;
59 | children = (
60 | D93F1CC21EAEDD3F009A7474 /* Source */,
61 | D93F1CC11EAEDD3F009A7474 /* Products */,
62 | D93F1CD51EAEE00D009A7474 /* Frameworks */,
63 | CDF8342396C13850FE2A671B /* Pods */,
64 | );
65 | sourceTree = "";
66 | };
67 | D93F1CC11EAEDD3F009A7474 /* Products */ = {
68 | isa = PBXGroup;
69 | children = (
70 | D93F1CC01EAEDD3F009A7474 /* iOS Example.app */,
71 | );
72 | name = Products;
73 | sourceTree = "";
74 | };
75 | D93F1CC21EAEDD3F009A7474 /* Source */ = {
76 | isa = PBXGroup;
77 | children = (
78 | D93F1CC31EAEDD3F009A7474 /* AppDelegate.swift */,
79 | D93F1CC51EAEDD3F009A7474 /* ViewController.swift */,
80 | D93F1CC71EAEDD3F009A7474 /* Main.storyboard */,
81 | D93F1CCA1EAEDD3F009A7474 /* Assets.xcassets */,
82 | D93F1CCC1EAEDD3F009A7474 /* LaunchScreen.storyboard */,
83 | D93F1CCF1EAEDD3F009A7474 /* Info.plist */,
84 | );
85 | path = Source;
86 | sourceTree = "";
87 | };
88 | D93F1CD51EAEE00D009A7474 /* Frameworks */ = {
89 | isa = PBXGroup;
90 | children = (
91 | DDC0E784207128B20051A0DB /* RxSwift.framework */,
92 | DDC0E782207128A80051A0DB /* Pods_RxPhotos.framework */,
93 | D93F1CD61EAEE00D009A7474 /* RxPhotos.framework */,
94 | FE191D22C636AA4903C39027 /* Pods_iOS_Example.framework */,
95 | );
96 | name = Frameworks;
97 | sourceTree = "";
98 | };
99 | /* End PBXGroup section */
100 |
101 | /* Begin PBXNativeTarget section */
102 | D93F1CBF1EAEDD3F009A7474 /* iOS Example */ = {
103 | isa = PBXNativeTarget;
104 | buildConfigurationList = D93F1CD21EAEDD3F009A7474 /* Build configuration list for PBXNativeTarget "iOS Example" */;
105 | buildPhases = (
106 | 05C5CDBDF1705D2ABABCB014 /* [CP] Check Pods Manifest.lock */,
107 | D93F1CBC1EAEDD3F009A7474 /* Sources */,
108 | D93F1CBD1EAEDD3F009A7474 /* Frameworks */,
109 | D93F1CBE1EAEDD3F009A7474 /* Resources */,
110 | 2FF06A3F132418FE19A0BB86 /* [CP] Embed Pods Frameworks */,
111 | FB8FCED89FEE1B5FFE22F548 /* [CP] Copy Pods Resources */,
112 | );
113 | buildRules = (
114 | );
115 | dependencies = (
116 | );
117 | name = "iOS Example";
118 | productName = "iOS Example";
119 | productReference = D93F1CC01EAEDD3F009A7474 /* iOS Example.app */;
120 | productType = "com.apple.product-type.application";
121 | };
122 | /* End PBXNativeTarget section */
123 |
124 | /* Begin PBXProject section */
125 | D93F1CB81EAEDD3F009A7474 /* Project object */ = {
126 | isa = PBXProject;
127 | attributes = {
128 | LastSwiftUpdateCheck = 0830;
129 | LastUpgradeCheck = 0930;
130 | ORGANIZATIONNAME = Istered;
131 | TargetAttributes = {
132 | D93F1CBF1EAEDD3F009A7474 = {
133 | CreatedOnToolsVersion = 8.3.2;
134 | LastSwiftMigration = 0930;
135 | ProvisioningStyle = Automatic;
136 | };
137 | };
138 | };
139 | buildConfigurationList = D93F1CBB1EAEDD3F009A7474 /* Build configuration list for PBXProject "iOS Example" */;
140 | compatibilityVersion = "Xcode 3.2";
141 | developmentRegion = English;
142 | hasScannedForEncodings = 0;
143 | knownRegions = (
144 | en,
145 | Base,
146 | );
147 | mainGroup = D93F1CB71EAEDD3F009A7474;
148 | productRefGroup = D93F1CC11EAEDD3F009A7474 /* Products */;
149 | projectDirPath = "";
150 | projectRoot = "";
151 | targets = (
152 | D93F1CBF1EAEDD3F009A7474 /* iOS Example */,
153 | );
154 | };
155 | /* End PBXProject section */
156 |
157 | /* Begin PBXResourcesBuildPhase section */
158 | D93F1CBE1EAEDD3F009A7474 /* Resources */ = {
159 | isa = PBXResourcesBuildPhase;
160 | buildActionMask = 2147483647;
161 | files = (
162 | D93F1CCE1EAEDD3F009A7474 /* LaunchScreen.storyboard in Resources */,
163 | D93F1CCB1EAEDD3F009A7474 /* Assets.xcassets in Resources */,
164 | D93F1CC91EAEDD3F009A7474 /* Main.storyboard in Resources */,
165 | );
166 | runOnlyForDeploymentPostprocessing = 0;
167 | };
168 | /* End PBXResourcesBuildPhase section */
169 |
170 | /* Begin PBXShellScriptBuildPhase section */
171 | 05C5CDBDF1705D2ABABCB014 /* [CP] Check Pods Manifest.lock */ = {
172 | isa = PBXShellScriptBuildPhase;
173 | buildActionMask = 2147483647;
174 | files = (
175 | );
176 | inputPaths = (
177 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
178 | "${PODS_ROOT}/Manifest.lock",
179 | );
180 | name = "[CP] Check Pods Manifest.lock";
181 | outputPaths = (
182 | "$(DERIVED_FILE_DIR)/Pods-iOS Example-checkManifestLockResult.txt",
183 | );
184 | runOnlyForDeploymentPostprocessing = 0;
185 | shellPath = /bin/sh;
186 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
187 | showEnvVarsInLog = 0;
188 | };
189 | 2FF06A3F132418FE19A0BB86 /* [CP] Embed Pods Frameworks */ = {
190 | isa = PBXShellScriptBuildPhase;
191 | buildActionMask = 2147483647;
192 | files = (
193 | );
194 | inputPaths = (
195 | "${SRCROOT}/Pods/Target Support Files/Pods-iOS Example/Pods-iOS Example-frameworks.sh",
196 | "${BUILT_PRODUCTS_DIR}/RxPhotos/RxPhotos.framework",
197 | "${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework",
198 | );
199 | name = "[CP] Embed Pods Frameworks";
200 | outputPaths = (
201 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxPhotos.framework",
202 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxSwift.framework",
203 | );
204 | runOnlyForDeploymentPostprocessing = 0;
205 | shellPath = /bin/sh;
206 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-iOS Example/Pods-iOS Example-frameworks.sh\"\n";
207 | showEnvVarsInLog = 0;
208 | };
209 | FB8FCED89FEE1B5FFE22F548 /* [CP] Copy Pods Resources */ = {
210 | isa = PBXShellScriptBuildPhase;
211 | buildActionMask = 2147483647;
212 | files = (
213 | );
214 | inputPaths = (
215 | );
216 | name = "[CP] Copy Pods Resources";
217 | outputPaths = (
218 | );
219 | runOnlyForDeploymentPostprocessing = 0;
220 | shellPath = /bin/sh;
221 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-iOS Example/Pods-iOS Example-resources.sh\"\n";
222 | showEnvVarsInLog = 0;
223 | };
224 | /* End PBXShellScriptBuildPhase section */
225 |
226 | /* Begin PBXSourcesBuildPhase section */
227 | D93F1CBC1EAEDD3F009A7474 /* Sources */ = {
228 | isa = PBXSourcesBuildPhase;
229 | buildActionMask = 2147483647;
230 | files = (
231 | D93F1CC61EAEDD3F009A7474 /* ViewController.swift in Sources */,
232 | D93F1CC41EAEDD3F009A7474 /* AppDelegate.swift in Sources */,
233 | );
234 | runOnlyForDeploymentPostprocessing = 0;
235 | };
236 | /* End PBXSourcesBuildPhase section */
237 |
238 | /* Begin PBXVariantGroup section */
239 | D93F1CC71EAEDD3F009A7474 /* Main.storyboard */ = {
240 | isa = PBXVariantGroup;
241 | children = (
242 | D93F1CC81EAEDD3F009A7474 /* Base */,
243 | );
244 | name = Main.storyboard;
245 | sourceTree = "";
246 | };
247 | D93F1CCC1EAEDD3F009A7474 /* LaunchScreen.storyboard */ = {
248 | isa = PBXVariantGroup;
249 | children = (
250 | D93F1CCD1EAEDD3F009A7474 /* Base */,
251 | );
252 | name = LaunchScreen.storyboard;
253 | sourceTree = "";
254 | };
255 | /* End PBXVariantGroup section */
256 |
257 | /* Begin XCBuildConfiguration section */
258 | D93F1CD01EAEDD3F009A7474 /* Debug */ = {
259 | isa = XCBuildConfiguration;
260 | buildSettings = {
261 | ALWAYS_SEARCH_USER_PATHS = NO;
262 | CLANG_ANALYZER_NONNULL = YES;
263 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
264 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
265 | CLANG_CXX_LIBRARY = "libc++";
266 | CLANG_ENABLE_MODULES = YES;
267 | CLANG_ENABLE_OBJC_ARC = YES;
268 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
269 | CLANG_WARN_BOOL_CONVERSION = YES;
270 | CLANG_WARN_COMMA = YES;
271 | CLANG_WARN_CONSTANT_CONVERSION = YES;
272 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
273 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
274 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
275 | CLANG_WARN_EMPTY_BODY = YES;
276 | CLANG_WARN_ENUM_CONVERSION = YES;
277 | CLANG_WARN_INFINITE_RECURSION = YES;
278 | CLANG_WARN_INT_CONVERSION = YES;
279 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
280 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
281 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
282 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
283 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
284 | CLANG_WARN_STRICT_PROTOTYPES = YES;
285 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
286 | CLANG_WARN_UNREACHABLE_CODE = YES;
287 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
288 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
289 | COPY_PHASE_STRIP = NO;
290 | DEBUG_INFORMATION_FORMAT = dwarf;
291 | ENABLE_STRICT_OBJC_MSGSEND = YES;
292 | ENABLE_TESTABILITY = YES;
293 | GCC_C_LANGUAGE_STANDARD = gnu99;
294 | GCC_DYNAMIC_NO_PIC = NO;
295 | GCC_NO_COMMON_BLOCKS = YES;
296 | GCC_OPTIMIZATION_LEVEL = 0;
297 | GCC_PREPROCESSOR_DEFINITIONS = (
298 | "DEBUG=1",
299 | "$(inherited)",
300 | );
301 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
302 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
303 | GCC_WARN_UNDECLARED_SELECTOR = YES;
304 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
305 | GCC_WARN_UNUSED_FUNCTION = YES;
306 | GCC_WARN_UNUSED_VARIABLE = YES;
307 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
308 | MTL_ENABLE_DEBUG_INFO = YES;
309 | ONLY_ACTIVE_ARCH = YES;
310 | SDKROOT = iphoneos;
311 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
312 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
313 | TARGETED_DEVICE_FAMILY = "1,2";
314 | };
315 | name = Debug;
316 | };
317 | D93F1CD11EAEDD3F009A7474 /* Release */ = {
318 | isa = XCBuildConfiguration;
319 | buildSettings = {
320 | ALWAYS_SEARCH_USER_PATHS = NO;
321 | CLANG_ANALYZER_NONNULL = YES;
322 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
323 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
324 | CLANG_CXX_LIBRARY = "libc++";
325 | CLANG_ENABLE_MODULES = YES;
326 | CLANG_ENABLE_OBJC_ARC = YES;
327 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
328 | CLANG_WARN_BOOL_CONVERSION = YES;
329 | CLANG_WARN_COMMA = YES;
330 | CLANG_WARN_CONSTANT_CONVERSION = YES;
331 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
332 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
333 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
334 | CLANG_WARN_EMPTY_BODY = YES;
335 | CLANG_WARN_ENUM_CONVERSION = YES;
336 | CLANG_WARN_INFINITE_RECURSION = YES;
337 | CLANG_WARN_INT_CONVERSION = YES;
338 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
339 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
340 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
341 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
342 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
343 | CLANG_WARN_STRICT_PROTOTYPES = YES;
344 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
345 | CLANG_WARN_UNREACHABLE_CODE = YES;
346 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
347 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
348 | COPY_PHASE_STRIP = NO;
349 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
350 | ENABLE_NS_ASSERTIONS = NO;
351 | ENABLE_STRICT_OBJC_MSGSEND = YES;
352 | GCC_C_LANGUAGE_STANDARD = gnu99;
353 | GCC_NO_COMMON_BLOCKS = YES;
354 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
355 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
356 | GCC_WARN_UNDECLARED_SELECTOR = YES;
357 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
358 | GCC_WARN_UNUSED_FUNCTION = YES;
359 | GCC_WARN_UNUSED_VARIABLE = YES;
360 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
361 | MTL_ENABLE_DEBUG_INFO = NO;
362 | SDKROOT = iphoneos;
363 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
364 | TARGETED_DEVICE_FAMILY = "1,2";
365 | VALIDATE_PRODUCT = YES;
366 | };
367 | name = Release;
368 | };
369 | D93F1CD31EAEDD3F009A7474 /* Debug */ = {
370 | isa = XCBuildConfiguration;
371 | baseConfigurationReference = 148A4FB781A2EEFCB71A4FD3 /* Pods-iOS Example.debug.xcconfig */;
372 | buildSettings = {
373 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
374 | DEVELOPMENT_TEAM = "";
375 | INFOPLIST_FILE = Source/Info.plist;
376 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
377 | PRODUCT_BUNDLE_IDENTIFIER = "com.istered.iOS-Example";
378 | PRODUCT_NAME = "$(TARGET_NAME)";
379 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
380 | SWIFT_VERSION = 4.0;
381 | };
382 | name = Debug;
383 | };
384 | D93F1CD41EAEDD3F009A7474 /* Release */ = {
385 | isa = XCBuildConfiguration;
386 | baseConfigurationReference = 25AB3BD9BC45DF89B95328D8 /* Pods-iOS Example.release.xcconfig */;
387 | buildSettings = {
388 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
389 | DEVELOPMENT_TEAM = "";
390 | INFOPLIST_FILE = Source/Info.plist;
391 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
392 | PRODUCT_BUNDLE_IDENTIFIER = "com.istered.iOS-Example";
393 | PRODUCT_NAME = "$(TARGET_NAME)";
394 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
395 | SWIFT_VERSION = 4.0;
396 | };
397 | name = Release;
398 | };
399 | /* End XCBuildConfiguration section */
400 |
401 | /* Begin XCConfigurationList section */
402 | D93F1CBB1EAEDD3F009A7474 /* Build configuration list for PBXProject "iOS Example" */ = {
403 | isa = XCConfigurationList;
404 | buildConfigurations = (
405 | D93F1CD01EAEDD3F009A7474 /* Debug */,
406 | D93F1CD11EAEDD3F009A7474 /* Release */,
407 | );
408 | defaultConfigurationIsVisible = 0;
409 | defaultConfigurationName = Release;
410 | };
411 | D93F1CD21EAEDD3F009A7474 /* Build configuration list for PBXNativeTarget "iOS Example" */ = {
412 | isa = XCConfigurationList;
413 | buildConfigurations = (
414 | D93F1CD31EAEDD3F009A7474 /* Debug */,
415 | D93F1CD41EAEDD3F009A7474 /* Release */,
416 | );
417 | defaultConfigurationIsVisible = 0;
418 | defaultConfigurationName = Release;
419 | };
420 | /* End XCConfigurationList section */
421 | };
422 | rootObject = D93F1CB81EAEDD3F009A7474 /* Project object */;
423 | }
424 |
--------------------------------------------------------------------------------
/RxPhotos.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 4964B0C7DE81C3F15E5385E7 /* Pods_RxPhotos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3FED1BA971B8C43E9F48644B /* Pods_RxPhotos.framework */; };
11 | CA2DA41B1825ED6D7D7A42C5 /* Pods_RxPhotosTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B49B9FC965DEAB1AA752F01 /* Pods_RxPhotosTests.framework */; };
12 | D93F1CA21EAEDB6E009A7474 /* RxPhotos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D93F1C981EAEDB6E009A7474 /* RxPhotos.framework */; };
13 | D93F1CA71EAEDB6E009A7474 /* RxPhotosTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D93F1CA61EAEDB6E009A7474 /* RxPhotosTests.swift */; };
14 | D93F1CA91EAEDB6E009A7474 /* RxPhotos.h in Headers */ = {isa = PBXBuildFile; fileRef = D93F1C9B1EAEDB6E009A7474 /* RxPhotos.h */; settings = {ATTRIBUTES = (Public, ); }; };
15 | DD0F877B2070EEA200ADEFEF /* PHImageManager+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD0F877A2070EEA200ADEFEF /* PHImageManager+Rx.swift */; };
16 | DD8E2E5E2070F04D008A5AC2 /* ImageRequestResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD8E2E5D2070F04D008A5AC2 /* ImageRequestResult.swift */; };
17 | DD8E2E602070F09A008A5AC2 /* AssetRequestResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD8E2E5F2070F09A008A5AC2 /* AssetRequestResult.swift */; };
18 | DD8E2E622070F350008A5AC2 /* ImageDataRequestResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD8E2E612070F350008A5AC2 /* ImageDataRequestResult.swift */; };
19 | DD8E2E642070F433008A5AC2 /* PlayerItemRequestResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD8E2E632070F433008A5AC2 /* PlayerItemRequestResult.swift */; };
20 | DD8E2E662070F51F008A5AC2 /* AssetExportSessionRequestResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD8E2E652070F51F008A5AC2 /* AssetExportSessionRequestResult.swift */; };
21 | DD8E2E682070F5E2008A5AC2 /* LivePhotoRequestResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD8E2E672070F5E2008A5AC2 /* LivePhotoRequestResult.swift */; };
22 | DDC0E7812070FDC60051A0DB /* PHPhotoLibrary+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC0E7802070FDC60051A0DB /* PHPhotoLibrary+Rx.swift */; };
23 | DDC0E78720712CCF0051A0DB /* RxPHPhotoLibraryObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC0E78620712CCF0051A0DB /* RxPHPhotoLibraryObserver.swift */; };
24 | DDC0E78920712EB40051A0DB /* PHAsset+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC0E78820712EB40051A0DB /* PHAsset+Rx.swift */; };
25 | DDC0E78B20712F730051A0DB /* ContentEditRequestResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC0E78A20712F730051A0DB /* ContentEditRequestResult.swift */; };
26 | DDC0E78D2071309C0051A0DB /* RxPhotoError.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC0E78C2071309C0051A0DB /* RxPhotoError.swift */; };
27 | DDC0E790207135FA0051A0DB /* PHLivePhoto+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC0E78F207135FA0051A0DB /* PHLivePhoto+Rx.swift */; };
28 | DDC0E792207137F40051A0DB /* PHLivePhotoEditingContext+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC0E791207137F40051A0DB /* PHLivePhotoEditingContext+Rx.swift */; };
29 | DDC0E794207139AC0051A0DB /* PHAssetResourceManager+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC0E793207139AC0051A0DB /* PHAssetResourceManager+Rx.swift */; };
30 | /* End PBXBuildFile section */
31 |
32 | /* Begin PBXContainerItemProxy section */
33 | D93F1CA31EAEDB6E009A7474 /* PBXContainerItemProxy */ = {
34 | isa = PBXContainerItemProxy;
35 | containerPortal = D93F1C8F1EAEDB6E009A7474 /* Project object */;
36 | proxyType = 1;
37 | remoteGlobalIDString = D93F1C971EAEDB6E009A7474;
38 | remoteInfo = RxPhotos;
39 | };
40 | /* End PBXContainerItemProxy section */
41 |
42 | /* Begin PBXFileReference section */
43 | 22233396156713BE5A181A86 /* Pods-RxPhotosTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RxPhotosTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RxPhotosTests/Pods-RxPhotosTests.debug.xcconfig"; sourceTree = ""; };
44 | 3FED1BA971B8C43E9F48644B /* Pods_RxPhotos.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RxPhotos.framework; sourceTree = BUILT_PRODUCTS_DIR; };
45 | 8B49B9FC965DEAB1AA752F01 /* Pods_RxPhotosTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RxPhotosTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
46 | 97606ABDFCEAB6B4C1F3AE6F /* Pods-RxPhotosTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RxPhotosTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-RxPhotosTests/Pods-RxPhotosTests.release.xcconfig"; sourceTree = ""; };
47 | 9A61EE4C0F3E8CBBE9DEC72F /* Pods-RxPhotos.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RxPhotos.release.xcconfig"; path = "Pods/Target Support Files/Pods-RxPhotos/Pods-RxPhotos.release.xcconfig"; sourceTree = ""; };
48 | D93F1C981EAEDB6E009A7474 /* RxPhotos.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxPhotos.framework; sourceTree = BUILT_PRODUCTS_DIR; };
49 | D93F1C9B1EAEDB6E009A7474 /* RxPhotos.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RxPhotos.h; sourceTree = ""; };
50 | D93F1C9C1EAEDB6E009A7474 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
51 | D93F1CA11EAEDB6E009A7474 /* RxPhotosTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RxPhotosTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
52 | D93F1CA61EAEDB6E009A7474 /* RxPhotosTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RxPhotosTests.swift; sourceTree = ""; };
53 | D93F1CA81EAEDB6E009A7474 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
54 | DD0F877A2070EEA200ADEFEF /* PHImageManager+Rx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PHImageManager+Rx.swift"; sourceTree = ""; };
55 | DD8E2E5D2070F04D008A5AC2 /* ImageRequestResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageRequestResult.swift; sourceTree = ""; };
56 | DD8E2E5F2070F09A008A5AC2 /* AssetRequestResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetRequestResult.swift; sourceTree = ""; };
57 | DD8E2E612070F350008A5AC2 /* ImageDataRequestResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageDataRequestResult.swift; sourceTree = ""; };
58 | DD8E2E632070F433008A5AC2 /* PlayerItemRequestResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerItemRequestResult.swift; sourceTree = ""; };
59 | DD8E2E652070F51F008A5AC2 /* AssetExportSessionRequestResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetExportSessionRequestResult.swift; sourceTree = ""; };
60 | DD8E2E672070F5E2008A5AC2 /* LivePhotoRequestResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LivePhotoRequestResult.swift; sourceTree = ""; };
61 | DDC0E7802070FDC60051A0DB /* PHPhotoLibrary+Rx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PHPhotoLibrary+Rx.swift"; sourceTree = ""; };
62 | DDC0E78620712CCF0051A0DB /* RxPHPhotoLibraryObserver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RxPHPhotoLibraryObserver.swift; sourceTree = ""; };
63 | DDC0E78820712EB40051A0DB /* PHAsset+Rx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PHAsset+Rx.swift"; sourceTree = ""; };
64 | DDC0E78A20712F730051A0DB /* ContentEditRequestResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentEditRequestResult.swift; sourceTree = ""; };
65 | DDC0E78C2071309C0051A0DB /* RxPhotoError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RxPhotoError.swift; sourceTree = ""; };
66 | DDC0E78F207135FA0051A0DB /* PHLivePhoto+Rx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PHLivePhoto+Rx.swift"; sourceTree = ""; };
67 | DDC0E791207137F40051A0DB /* PHLivePhotoEditingContext+Rx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PHLivePhotoEditingContext+Rx.swift"; sourceTree = ""; };
68 | DDC0E793207139AC0051A0DB /* PHAssetResourceManager+Rx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PHAssetResourceManager+Rx.swift"; sourceTree = ""; };
69 | ED984F529D5365D409CD1C24 /* Pods-RxPhotos.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RxPhotos.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RxPhotos/Pods-RxPhotos.debug.xcconfig"; sourceTree = ""; };
70 | /* End PBXFileReference section */
71 |
72 | /* Begin PBXFrameworksBuildPhase section */
73 | D93F1C941EAEDB6E009A7474 /* Frameworks */ = {
74 | isa = PBXFrameworksBuildPhase;
75 | buildActionMask = 2147483647;
76 | files = (
77 | 4964B0C7DE81C3F15E5385E7 /* Pods_RxPhotos.framework in Frameworks */,
78 | );
79 | runOnlyForDeploymentPostprocessing = 0;
80 | };
81 | D93F1C9E1EAEDB6E009A7474 /* Frameworks */ = {
82 | isa = PBXFrameworksBuildPhase;
83 | buildActionMask = 2147483647;
84 | files = (
85 | D93F1CA21EAEDB6E009A7474 /* RxPhotos.framework in Frameworks */,
86 | CA2DA41B1825ED6D7D7A42C5 /* Pods_RxPhotosTests.framework in Frameworks */,
87 | );
88 | runOnlyForDeploymentPostprocessing = 0;
89 | };
90 | /* End PBXFrameworksBuildPhase section */
91 |
92 | /* Begin PBXGroup section */
93 | CD79CBCAD0AA1AE2EEEC79CA /* Frameworks */ = {
94 | isa = PBXGroup;
95 | children = (
96 | 3FED1BA971B8C43E9F48644B /* Pods_RxPhotos.framework */,
97 | 8B49B9FC965DEAB1AA752F01 /* Pods_RxPhotosTests.framework */,
98 | );
99 | name = Frameworks;
100 | sourceTree = "";
101 | };
102 | D93F1C8E1EAEDB6E009A7474 = {
103 | isa = PBXGroup;
104 | children = (
105 | D93F1C9A1EAEDB6E009A7474 /* Source */,
106 | D93F1CA51EAEDB6E009A7474 /* Tests */,
107 | D93F1C991EAEDB6E009A7474 /* Products */,
108 | E9F560222B695140902F2413 /* Pods */,
109 | CD79CBCAD0AA1AE2EEEC79CA /* Frameworks */,
110 | );
111 | sourceTree = "";
112 | };
113 | D93F1C991EAEDB6E009A7474 /* Products */ = {
114 | isa = PBXGroup;
115 | children = (
116 | D93F1C981EAEDB6E009A7474 /* RxPhotos.framework */,
117 | D93F1CA11EAEDB6E009A7474 /* RxPhotosTests.xctest */,
118 | );
119 | name = Products;
120 | sourceTree = "";
121 | };
122 | D93F1C9A1EAEDB6E009A7474 /* Source */ = {
123 | isa = PBXGroup;
124 | children = (
125 | DDC0E78E207133890051A0DB /* Extensions */,
126 | DD8E2E5A2070F020008A5AC2 /* Results */,
127 | D93F1C9B1EAEDB6E009A7474 /* RxPhotos.h */,
128 | D93F1C9C1EAEDB6E009A7474 /* Info.plist */,
129 | DDC0E78C2071309C0051A0DB /* RxPhotoError.swift */,
130 | DDC0E78620712CCF0051A0DB /* RxPHPhotoLibraryObserver.swift */,
131 | );
132 | path = Source;
133 | sourceTree = "";
134 | };
135 | D93F1CA51EAEDB6E009A7474 /* Tests */ = {
136 | isa = PBXGroup;
137 | children = (
138 | D93F1CA61EAEDB6E009A7474 /* RxPhotosTests.swift */,
139 | D93F1CA81EAEDB6E009A7474 /* Info.plist */,
140 | );
141 | path = Tests;
142 | sourceTree = "";
143 | };
144 | DD8E2E5A2070F020008A5AC2 /* Results */ = {
145 | isa = PBXGroup;
146 | children = (
147 | DD8E2E5D2070F04D008A5AC2 /* ImageRequestResult.swift */,
148 | DD8E2E5F2070F09A008A5AC2 /* AssetRequestResult.swift */,
149 | DD8E2E612070F350008A5AC2 /* ImageDataRequestResult.swift */,
150 | DD8E2E632070F433008A5AC2 /* PlayerItemRequestResult.swift */,
151 | DD8E2E652070F51F008A5AC2 /* AssetExportSessionRequestResult.swift */,
152 | DD8E2E672070F5E2008A5AC2 /* LivePhotoRequestResult.swift */,
153 | DDC0E78A20712F730051A0DB /* ContentEditRequestResult.swift */,
154 | );
155 | path = Results;
156 | sourceTree = "";
157 | };
158 | DDC0E78E207133890051A0DB /* Extensions */ = {
159 | isa = PBXGroup;
160 | children = (
161 | DDC0E78820712EB40051A0DB /* PHAsset+Rx.swift */,
162 | DD0F877A2070EEA200ADEFEF /* PHImageManager+Rx.swift */,
163 | DDC0E7802070FDC60051A0DB /* PHPhotoLibrary+Rx.swift */,
164 | DDC0E78F207135FA0051A0DB /* PHLivePhoto+Rx.swift */,
165 | DDC0E791207137F40051A0DB /* PHLivePhotoEditingContext+Rx.swift */,
166 | DDC0E793207139AC0051A0DB /* PHAssetResourceManager+Rx.swift */,
167 | );
168 | path = Extensions;
169 | sourceTree = "";
170 | };
171 | E9F560222B695140902F2413 /* Pods */ = {
172 | isa = PBXGroup;
173 | children = (
174 | ED984F529D5365D409CD1C24 /* Pods-RxPhotos.debug.xcconfig */,
175 | 9A61EE4C0F3E8CBBE9DEC72F /* Pods-RxPhotos.release.xcconfig */,
176 | 22233396156713BE5A181A86 /* Pods-RxPhotosTests.debug.xcconfig */,
177 | 97606ABDFCEAB6B4C1F3AE6F /* Pods-RxPhotosTests.release.xcconfig */,
178 | );
179 | name = Pods;
180 | sourceTree = "";
181 | };
182 | /* End PBXGroup section */
183 |
184 | /* Begin PBXHeadersBuildPhase section */
185 | D93F1C951EAEDB6E009A7474 /* Headers */ = {
186 | isa = PBXHeadersBuildPhase;
187 | buildActionMask = 2147483647;
188 | files = (
189 | D93F1CA91EAEDB6E009A7474 /* RxPhotos.h in Headers */,
190 | );
191 | runOnlyForDeploymentPostprocessing = 0;
192 | };
193 | /* End PBXHeadersBuildPhase section */
194 |
195 | /* Begin PBXNativeTarget section */
196 | D93F1C971EAEDB6E009A7474 /* RxPhotos */ = {
197 | isa = PBXNativeTarget;
198 | buildConfigurationList = D93F1CAC1EAEDB6E009A7474 /* Build configuration list for PBXNativeTarget "RxPhotos" */;
199 | buildPhases = (
200 | 11C0AB480A3DBDA737BF1482 /* [CP] Check Pods Manifest.lock */,
201 | DD8E2E6A2070FAD7008A5AC2 /* SwiftLint */,
202 | D93F1C931EAEDB6E009A7474 /* Sources */,
203 | D93F1C941EAEDB6E009A7474 /* Frameworks */,
204 | D93F1C951EAEDB6E009A7474 /* Headers */,
205 | D93F1C961EAEDB6E009A7474 /* Resources */,
206 | C4B86CD657ADA1DB4C8E511A /* [CP] Copy Pods Resources */,
207 | );
208 | buildRules = (
209 | );
210 | dependencies = (
211 | );
212 | name = RxPhotos;
213 | productName = RxPhotos;
214 | productReference = D93F1C981EAEDB6E009A7474 /* RxPhotos.framework */;
215 | productType = "com.apple.product-type.framework";
216 | };
217 | D93F1CA01EAEDB6E009A7474 /* RxPhotosTests */ = {
218 | isa = PBXNativeTarget;
219 | buildConfigurationList = D93F1CAF1EAEDB6E009A7474 /* Build configuration list for PBXNativeTarget "RxPhotosTests" */;
220 | buildPhases = (
221 | DBE594FA507EF38472DBECBB /* [CP] Check Pods Manifest.lock */,
222 | D93F1C9D1EAEDB6E009A7474 /* Sources */,
223 | D93F1C9E1EAEDB6E009A7474 /* Frameworks */,
224 | D93F1C9F1EAEDB6E009A7474 /* Resources */,
225 | 2C7A351791915626EAB70C1C /* [CP] Embed Pods Frameworks */,
226 | AF23777EEE4B58C64CED1BB4 /* [CP] Copy Pods Resources */,
227 | );
228 | buildRules = (
229 | );
230 | dependencies = (
231 | D93F1CA41EAEDB6E009A7474 /* PBXTargetDependency */,
232 | );
233 | name = RxPhotosTests;
234 | productName = RxPhotosTests;
235 | productReference = D93F1CA11EAEDB6E009A7474 /* RxPhotosTests.xctest */;
236 | productType = "com.apple.product-type.bundle.unit-test";
237 | };
238 | /* End PBXNativeTarget section */
239 |
240 | /* Begin PBXProject section */
241 | D93F1C8F1EAEDB6E009A7474 /* Project object */ = {
242 | isa = PBXProject;
243 | attributes = {
244 | LastSwiftUpdateCheck = 0830;
245 | LastUpgradeCheck = 0930;
246 | ORGANIZATIONNAME = Istered;
247 | TargetAttributes = {
248 | D93F1C971EAEDB6E009A7474 = {
249 | CreatedOnToolsVersion = 8.3.2;
250 | LastSwiftMigration = 0930;
251 | ProvisioningStyle = Automatic;
252 | };
253 | D93F1CA01EAEDB6E009A7474 = {
254 | CreatedOnToolsVersion = 8.3.2;
255 | LastSwiftMigration = 0930;
256 | ProvisioningStyle = Automatic;
257 | };
258 | };
259 | };
260 | buildConfigurationList = D93F1C921EAEDB6E009A7474 /* Build configuration list for PBXProject "RxPhotos" */;
261 | compatibilityVersion = "Xcode 3.2";
262 | developmentRegion = English;
263 | hasScannedForEncodings = 0;
264 | knownRegions = (
265 | en,
266 | );
267 | mainGroup = D93F1C8E1EAEDB6E009A7474;
268 | productRefGroup = D93F1C991EAEDB6E009A7474 /* Products */;
269 | projectDirPath = "";
270 | projectRoot = "";
271 | targets = (
272 | D93F1C971EAEDB6E009A7474 /* RxPhotos */,
273 | D93F1CA01EAEDB6E009A7474 /* RxPhotosTests */,
274 | );
275 | };
276 | /* End PBXProject section */
277 |
278 | /* Begin PBXResourcesBuildPhase section */
279 | D93F1C961EAEDB6E009A7474 /* Resources */ = {
280 | isa = PBXResourcesBuildPhase;
281 | buildActionMask = 2147483647;
282 | files = (
283 | );
284 | runOnlyForDeploymentPostprocessing = 0;
285 | };
286 | D93F1C9F1EAEDB6E009A7474 /* Resources */ = {
287 | isa = PBXResourcesBuildPhase;
288 | buildActionMask = 2147483647;
289 | files = (
290 | );
291 | runOnlyForDeploymentPostprocessing = 0;
292 | };
293 | /* End PBXResourcesBuildPhase section */
294 |
295 | /* Begin PBXShellScriptBuildPhase section */
296 | 11C0AB480A3DBDA737BF1482 /* [CP] Check Pods Manifest.lock */ = {
297 | isa = PBXShellScriptBuildPhase;
298 | buildActionMask = 2147483647;
299 | files = (
300 | );
301 | inputPaths = (
302 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
303 | "${PODS_ROOT}/Manifest.lock",
304 | );
305 | name = "[CP] Check Pods Manifest.lock";
306 | outputPaths = (
307 | "$(DERIVED_FILE_DIR)/Pods-RxPhotos-checkManifestLockResult.txt",
308 | );
309 | runOnlyForDeploymentPostprocessing = 0;
310 | shellPath = /bin/sh;
311 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
312 | showEnvVarsInLog = 0;
313 | };
314 | 2C7A351791915626EAB70C1C /* [CP] Embed Pods Frameworks */ = {
315 | isa = PBXShellScriptBuildPhase;
316 | buildActionMask = 2147483647;
317 | files = (
318 | );
319 | inputPaths = (
320 | "${SRCROOT}/Pods/Target Support Files/Pods-RxPhotosTests/Pods-RxPhotosTests-frameworks.sh",
321 | "${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework",
322 | );
323 | name = "[CP] Embed Pods Frameworks";
324 | outputPaths = (
325 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxSwift.framework",
326 | );
327 | runOnlyForDeploymentPostprocessing = 0;
328 | shellPath = /bin/sh;
329 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RxPhotosTests/Pods-RxPhotosTests-frameworks.sh\"\n";
330 | showEnvVarsInLog = 0;
331 | };
332 | AF23777EEE4B58C64CED1BB4 /* [CP] Copy Pods Resources */ = {
333 | isa = PBXShellScriptBuildPhase;
334 | buildActionMask = 2147483647;
335 | files = (
336 | );
337 | inputPaths = (
338 | );
339 | name = "[CP] Copy Pods Resources";
340 | outputPaths = (
341 | );
342 | runOnlyForDeploymentPostprocessing = 0;
343 | shellPath = /bin/sh;
344 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RxPhotosTests/Pods-RxPhotosTests-resources.sh\"\n";
345 | showEnvVarsInLog = 0;
346 | };
347 | C4B86CD657ADA1DB4C8E511A /* [CP] Copy Pods Resources */ = {
348 | isa = PBXShellScriptBuildPhase;
349 | buildActionMask = 2147483647;
350 | files = (
351 | );
352 | inputPaths = (
353 | );
354 | name = "[CP] Copy Pods Resources";
355 | outputPaths = (
356 | );
357 | runOnlyForDeploymentPostprocessing = 0;
358 | shellPath = /bin/sh;
359 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RxPhotos/Pods-RxPhotos-resources.sh\"\n";
360 | showEnvVarsInLog = 0;
361 | };
362 | DBE594FA507EF38472DBECBB /* [CP] Check Pods Manifest.lock */ = {
363 | isa = PBXShellScriptBuildPhase;
364 | buildActionMask = 2147483647;
365 | files = (
366 | );
367 | inputPaths = (
368 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
369 | "${PODS_ROOT}/Manifest.lock",
370 | );
371 | name = "[CP] Check Pods Manifest.lock";
372 | outputPaths = (
373 | "$(DERIVED_FILE_DIR)/Pods-RxPhotosTests-checkManifestLockResult.txt",
374 | );
375 | runOnlyForDeploymentPostprocessing = 0;
376 | shellPath = /bin/sh;
377 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
378 | showEnvVarsInLog = 0;
379 | };
380 | DD8E2E6A2070FAD7008A5AC2 /* SwiftLint */ = {
381 | isa = PBXShellScriptBuildPhase;
382 | buildActionMask = 2147483647;
383 | files = (
384 | );
385 | inputPaths = (
386 | );
387 | name = SwiftLint;
388 | outputPaths = (
389 | );
390 | runOnlyForDeploymentPostprocessing = 0;
391 | shellPath = /bin/sh;
392 | shellScript = "\"${PODS_ROOT}/SwiftLint/swiftlint\"";
393 | };
394 | /* End PBXShellScriptBuildPhase section */
395 |
396 | /* Begin PBXSourcesBuildPhase section */
397 | D93F1C931EAEDB6E009A7474 /* Sources */ = {
398 | isa = PBXSourcesBuildPhase;
399 | buildActionMask = 2147483647;
400 | files = (
401 | DDC0E790207135FA0051A0DB /* PHLivePhoto+Rx.swift in Sources */,
402 | DDC0E792207137F40051A0DB /* PHLivePhotoEditingContext+Rx.swift in Sources */,
403 | DDC0E78720712CCF0051A0DB /* RxPHPhotoLibraryObserver.swift in Sources */,
404 | DD8E2E602070F09A008A5AC2 /* AssetRequestResult.swift in Sources */,
405 | DD8E2E682070F5E2008A5AC2 /* LivePhotoRequestResult.swift in Sources */,
406 | DD8E2E5E2070F04D008A5AC2 /* ImageRequestResult.swift in Sources */,
407 | DDC0E78920712EB40051A0DB /* PHAsset+Rx.swift in Sources */,
408 | DDC0E78B20712F730051A0DB /* ContentEditRequestResult.swift in Sources */,
409 | DDC0E78D2071309C0051A0DB /* RxPhotoError.swift in Sources */,
410 | DDC0E794207139AC0051A0DB /* PHAssetResourceManager+Rx.swift in Sources */,
411 | DDC0E7812070FDC60051A0DB /* PHPhotoLibrary+Rx.swift in Sources */,
412 | DD8E2E642070F433008A5AC2 /* PlayerItemRequestResult.swift in Sources */,
413 | DD8E2E662070F51F008A5AC2 /* AssetExportSessionRequestResult.swift in Sources */,
414 | DD8E2E622070F350008A5AC2 /* ImageDataRequestResult.swift in Sources */,
415 | DD0F877B2070EEA200ADEFEF /* PHImageManager+Rx.swift in Sources */,
416 | );
417 | runOnlyForDeploymentPostprocessing = 0;
418 | };
419 | D93F1C9D1EAEDB6E009A7474 /* Sources */ = {
420 | isa = PBXSourcesBuildPhase;
421 | buildActionMask = 2147483647;
422 | files = (
423 | D93F1CA71EAEDB6E009A7474 /* RxPhotosTests.swift in Sources */,
424 | );
425 | runOnlyForDeploymentPostprocessing = 0;
426 | };
427 | /* End PBXSourcesBuildPhase section */
428 |
429 | /* Begin PBXTargetDependency section */
430 | D93F1CA41EAEDB6E009A7474 /* PBXTargetDependency */ = {
431 | isa = PBXTargetDependency;
432 | target = D93F1C971EAEDB6E009A7474 /* RxPhotos */;
433 | targetProxy = D93F1CA31EAEDB6E009A7474 /* PBXContainerItemProxy */;
434 | };
435 | /* End PBXTargetDependency section */
436 |
437 | /* Begin XCBuildConfiguration section */
438 | D93F1CAA1EAEDB6E009A7474 /* Debug */ = {
439 | isa = XCBuildConfiguration;
440 | buildSettings = {
441 | ALWAYS_SEARCH_USER_PATHS = NO;
442 | CLANG_ANALYZER_NONNULL = YES;
443 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
444 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
445 | CLANG_CXX_LIBRARY = "libc++";
446 | CLANG_ENABLE_MODULES = YES;
447 | CLANG_ENABLE_OBJC_ARC = YES;
448 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
449 | CLANG_WARN_BOOL_CONVERSION = YES;
450 | CLANG_WARN_COMMA = YES;
451 | CLANG_WARN_CONSTANT_CONVERSION = YES;
452 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
453 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
454 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
455 | CLANG_WARN_EMPTY_BODY = YES;
456 | CLANG_WARN_ENUM_CONVERSION = YES;
457 | CLANG_WARN_INFINITE_RECURSION = YES;
458 | CLANG_WARN_INT_CONVERSION = YES;
459 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
460 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
461 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
462 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
463 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
464 | CLANG_WARN_STRICT_PROTOTYPES = YES;
465 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
466 | CLANG_WARN_UNREACHABLE_CODE = YES;
467 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
468 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
469 | COPY_PHASE_STRIP = NO;
470 | CURRENT_PROJECT_VERSION = 1;
471 | DEBUG_INFORMATION_FORMAT = dwarf;
472 | ENABLE_STRICT_OBJC_MSGSEND = YES;
473 | ENABLE_TESTABILITY = YES;
474 | GCC_C_LANGUAGE_STANDARD = gnu99;
475 | GCC_DYNAMIC_NO_PIC = NO;
476 | GCC_NO_COMMON_BLOCKS = YES;
477 | GCC_OPTIMIZATION_LEVEL = 0;
478 | GCC_PREPROCESSOR_DEFINITIONS = (
479 | "DEBUG=1",
480 | "$(inherited)",
481 | );
482 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
483 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
484 | GCC_WARN_UNDECLARED_SELECTOR = YES;
485 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
486 | GCC_WARN_UNUSED_FUNCTION = YES;
487 | GCC_WARN_UNUSED_VARIABLE = YES;
488 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
489 | MTL_ENABLE_DEBUG_INFO = YES;
490 | ONLY_ACTIVE_ARCH = YES;
491 | SDKROOT = iphoneos;
492 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
493 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
494 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
495 | TARGETED_DEVICE_FAMILY = "1,2";
496 | VERSIONING_SYSTEM = "apple-generic";
497 | VERSION_INFO_PREFIX = "";
498 | };
499 | name = Debug;
500 | };
501 | D93F1CAB1EAEDB6E009A7474 /* Release */ = {
502 | isa = XCBuildConfiguration;
503 | buildSettings = {
504 | ALWAYS_SEARCH_USER_PATHS = NO;
505 | CLANG_ANALYZER_NONNULL = YES;
506 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
507 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
508 | CLANG_CXX_LIBRARY = "libc++";
509 | CLANG_ENABLE_MODULES = YES;
510 | CLANG_ENABLE_OBJC_ARC = YES;
511 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
512 | CLANG_WARN_BOOL_CONVERSION = YES;
513 | CLANG_WARN_COMMA = YES;
514 | CLANG_WARN_CONSTANT_CONVERSION = YES;
515 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
516 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
517 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
518 | CLANG_WARN_EMPTY_BODY = YES;
519 | CLANG_WARN_ENUM_CONVERSION = YES;
520 | CLANG_WARN_INFINITE_RECURSION = YES;
521 | CLANG_WARN_INT_CONVERSION = YES;
522 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
523 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
524 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
525 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
526 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
527 | CLANG_WARN_STRICT_PROTOTYPES = YES;
528 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
529 | CLANG_WARN_UNREACHABLE_CODE = YES;
530 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
531 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
532 | COPY_PHASE_STRIP = NO;
533 | CURRENT_PROJECT_VERSION = 1;
534 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
535 | ENABLE_NS_ASSERTIONS = NO;
536 | ENABLE_STRICT_OBJC_MSGSEND = YES;
537 | GCC_C_LANGUAGE_STANDARD = gnu99;
538 | GCC_NO_COMMON_BLOCKS = YES;
539 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
540 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
541 | GCC_WARN_UNDECLARED_SELECTOR = YES;
542 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
543 | GCC_WARN_UNUSED_FUNCTION = YES;
544 | GCC_WARN_UNUSED_VARIABLE = YES;
545 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
546 | MTL_ENABLE_DEBUG_INFO = NO;
547 | SDKROOT = iphoneos;
548 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
549 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
550 | TARGETED_DEVICE_FAMILY = "1,2";
551 | VALIDATE_PRODUCT = YES;
552 | VERSIONING_SYSTEM = "apple-generic";
553 | VERSION_INFO_PREFIX = "";
554 | };
555 | name = Release;
556 | };
557 | D93F1CAD1EAEDB6E009A7474 /* Debug */ = {
558 | isa = XCBuildConfiguration;
559 | baseConfigurationReference = ED984F529D5365D409CD1C24 /* Pods-RxPhotos.debug.xcconfig */;
560 | buildSettings = {
561 | CLANG_ENABLE_MODULES = YES;
562 | CODE_SIGN_IDENTITY = "";
563 | DEFINES_MODULE = YES;
564 | DEVELOPMENT_TEAM = "";
565 | DYLIB_COMPATIBILITY_VERSION = 1;
566 | DYLIB_CURRENT_VERSION = 1;
567 | DYLIB_INSTALL_NAME_BASE = "@rpath";
568 | INFOPLIST_FILE = Source/Info.plist;
569 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
570 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
571 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
572 | PRODUCT_BUNDLE_IDENTIFIER = com.istered.RxPhotos;
573 | PRODUCT_NAME = "$(TARGET_NAME)";
574 | SKIP_INSTALL = YES;
575 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
576 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
577 | SWIFT_VERSION = 4.0;
578 | };
579 | name = Debug;
580 | };
581 | D93F1CAE1EAEDB6E009A7474 /* Release */ = {
582 | isa = XCBuildConfiguration;
583 | baseConfigurationReference = 9A61EE4C0F3E8CBBE9DEC72F /* Pods-RxPhotos.release.xcconfig */;
584 | buildSettings = {
585 | CLANG_ENABLE_MODULES = YES;
586 | CODE_SIGN_IDENTITY = "";
587 | DEFINES_MODULE = YES;
588 | DEVELOPMENT_TEAM = "";
589 | DYLIB_COMPATIBILITY_VERSION = 1;
590 | DYLIB_CURRENT_VERSION = 1;
591 | DYLIB_INSTALL_NAME_BASE = "@rpath";
592 | INFOPLIST_FILE = Source/Info.plist;
593 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
594 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
595 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
596 | PRODUCT_BUNDLE_IDENTIFIER = com.istered.RxPhotos;
597 | PRODUCT_NAME = "$(TARGET_NAME)";
598 | SKIP_INSTALL = YES;
599 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
600 | SWIFT_VERSION = 4.0;
601 | };
602 | name = Release;
603 | };
604 | D93F1CB01EAEDB6E009A7474 /* Debug */ = {
605 | isa = XCBuildConfiguration;
606 | baseConfigurationReference = 22233396156713BE5A181A86 /* Pods-RxPhotosTests.debug.xcconfig */;
607 | buildSettings = {
608 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
609 | DEVELOPMENT_TEAM = "";
610 | INFOPLIST_FILE = Tests/Info.plist;
611 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
612 | PRODUCT_BUNDLE_IDENTIFIER = com.istered.RxPhotosTests;
613 | PRODUCT_NAME = "$(TARGET_NAME)";
614 | SWIFT_SWIFT3_OBJC_INFERENCE = On;
615 | SWIFT_VERSION = 4.0;
616 | };
617 | name = Debug;
618 | };
619 | D93F1CB11EAEDB6E009A7474 /* Release */ = {
620 | isa = XCBuildConfiguration;
621 | baseConfigurationReference = 97606ABDFCEAB6B4C1F3AE6F /* Pods-RxPhotosTests.release.xcconfig */;
622 | buildSettings = {
623 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
624 | DEVELOPMENT_TEAM = "";
625 | INFOPLIST_FILE = Tests/Info.plist;
626 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
627 | PRODUCT_BUNDLE_IDENTIFIER = com.istered.RxPhotosTests;
628 | PRODUCT_NAME = "$(TARGET_NAME)";
629 | SWIFT_SWIFT3_OBJC_INFERENCE = On;
630 | SWIFT_VERSION = 4.0;
631 | };
632 | name = Release;
633 | };
634 | /* End XCBuildConfiguration section */
635 |
636 | /* Begin XCConfigurationList section */
637 | D93F1C921EAEDB6E009A7474 /* Build configuration list for PBXProject "RxPhotos" */ = {
638 | isa = XCConfigurationList;
639 | buildConfigurations = (
640 | D93F1CAA1EAEDB6E009A7474 /* Debug */,
641 | D93F1CAB1EAEDB6E009A7474 /* Release */,
642 | );
643 | defaultConfigurationIsVisible = 0;
644 | defaultConfigurationName = Release;
645 | };
646 | D93F1CAC1EAEDB6E009A7474 /* Build configuration list for PBXNativeTarget "RxPhotos" */ = {
647 | isa = XCConfigurationList;
648 | buildConfigurations = (
649 | D93F1CAD1EAEDB6E009A7474 /* Debug */,
650 | D93F1CAE1EAEDB6E009A7474 /* Release */,
651 | );
652 | defaultConfigurationIsVisible = 0;
653 | defaultConfigurationName = Release;
654 | };
655 | D93F1CAF1EAEDB6E009A7474 /* Build configuration list for PBXNativeTarget "RxPhotosTests" */ = {
656 | isa = XCConfigurationList;
657 | buildConfigurations = (
658 | D93F1CB01EAEDB6E009A7474 /* Debug */,
659 | D93F1CB11EAEDB6E009A7474 /* Release */,
660 | );
661 | defaultConfigurationIsVisible = 0;
662 | defaultConfigurationName = Release;
663 | };
664 | /* End XCConfigurationList section */
665 | };
666 | rootObject = D93F1C8F1EAEDB6E009A7474 /* Project object */;
667 | }
668 |
--------------------------------------------------------------------------------