diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 00000000..db6fc036 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,57 @@ +version: 2 + +jobs: + build-and-test: + environment: + BUNDLE_PATH: vendor/bundle + FL_OUTPUT_DIR: output + macos: + xcode: "9.4.1" + working_directory: ~/VimeoUpload + shell: /bin/bash --login -o pipefail + + steps: + - checkout + + - restore_cache: + key: v1-gems-{{ checksum "Gemfile.lock" }} + + - run: + name: Set Ruby version + command: echo "ruby-2.4" > ~/.ruby-version + + - run: + name: Install bundler dependencies + command: bundle install --path vendor/bundle + + - run: + name: Build and run VimeoUpload-iOS tests + command: bundle exec fastlane scan + environment: + SCAN_DEVICE: iPhone 8 + SCAN_SCHEME: VimeoUpload-iOS + + - run: + name: Build and run VimeoUpload-iOS-OldUpload tests + command: bundle exec fastlane scan + environment: + SCAN_DEVICE: iPhone 8 + SCAN_SCHEME: VimeoUpload-iOS-OldUpload + + - save_cache: + paths: + - vendor/bundle + key: v1-gems-{{ checksum "Gemfile.lock" }} + + - store_artifacts: + path: output + + - store_test_results: + path: output/scan + +workflows: + version: 2 + build: + jobs: + - build-and-test + \ No newline at end of file diff --git a/Examples/VimeoUpload+Demos/Cells/DemoCameraRollCell.swift b/Examples/VimeoUpload+Demos/Cells/DemoCameraRollCell.swift index e083c233..f65fa287 100644 --- a/Examples/VimeoUpload+Demos/Cells/DemoCameraRollCell.swift +++ b/Examples/VimeoUpload+Demos/Cells/DemoCameraRollCell.swift @@ -89,7 +89,7 @@ class DemoCameraRollCell: UICollectionViewCell, CameraRollAssetCell if seconds > 0 { - string = String.stringFromDuration(inSeconds: seconds) as String + string = NSString.stringFromDuration(inSeconds: seconds) as String } self.durationlabel?.text = string diff --git a/Examples/VimeoUpload+Demos/ViewControllers/BaseCameraRollViewController.swift b/Examples/VimeoUpload+Demos/ViewControllers/BaseCameraRollViewController.swift index c6d9045d..4d99d539 100644 --- a/Examples/VimeoUpload+Demos/ViewControllers/BaseCameraRollViewController.swift +++ b/Examples/VimeoUpload+Demos/ViewControllers/BaseCameraRollViewController.swift @@ -31,123 +31,42 @@ import VimeoNetworking import AFNetworking import VimeoUpload -typealias UploadUserAndCameraRollAsset = (user: VIMUser, cameraRollAsset: VIMPHAsset) - -/* - This viewController displays the device camera roll video contents. - - It starts an operation on load that requests a fresh version of the authenticated user, checks that user's daily quota, and if the user selects a non-iCloud asset it checks the weekly quota and available diskspace. - - Essentially, it performs all checks possible at this UX juncture to determine if we can proceed with the upload. - - [AH] 12/03/2015 -*/ - class BaseCameraRollViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout { static let NibName = "BaseCameraRollViewController" private static let CollectionViewSpacing: CGFloat = 2 - var sessionManager: VimeoSessionManager! + var sessionManager: VimeoSessionManager? // MARK: @IBOutlet weak var collectionView: UICollectionView! - @IBOutlet weak var activityIndicatorView: UIActivityIndicatorView! - + // MARK: private var assets: [VIMPHAsset] = [] private var cameraRollAssetHelper: PHAssetHelper? - private var operation: MeQuotaOperation? - private var me: VIMUser? // We store this in a property instead of on the operation itself, so that we can refresh it independent of the operation [AH] - private var meOperation: MeOperation? - private var selectedIndexPath: IndexPath? // MARK: Lifecycle - deinit - { - self.removeObservers() - self.meOperation?.cancel() - self.operation?.cancel() - } - override func viewDidLoad() { super.viewDidLoad() self.cameraRollAssetHelper = PHAssetHelper() self.assets = self.loadAssets() - - self.addObservers() + self.setupNavigationBar() self.setupCollectionView() - self.setupAndStartOperation() } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) - if let indexPath = self.selectedIndexPath // Deselect the previously selected item upon return from video settings - { - self.collectionView.deselectItem(at: indexPath, animated: true) - } - } - - // MARK: Observers - - private func addObservers() - { - NotificationCenter.default.addObserver(self, selector: #selector(UIApplicationDelegate.applicationWillEnterForeground(_:)), name: Notification.Name.UIApplicationWillEnterForeground, object: nil) - } - - private func removeObservers() - { - NotificationCenter.default.removeObserver(self, name: Notification.Name.UIApplicationWillEnterForeground, object: nil) + self.collectionView.indexPathsForSelectedItems?.forEach({ self.collectionView.deselectItem(at: $0, animated: true) }) } - // Ensure that we refresh the me object on return from background - // In the event that a user modified their upload quota while the app was backgrounded [AH] 12/06/2015 - - func applicationWillEnterForeground(_ notification: Notification) - { - if self.meOperation != nil - { - return - } - - let operation = MeOperation(sessionManager: self.sessionManager) - operation.completionBlock = { [weak self] () -> Void in - - DispatchQueue.main.async(execute: { [weak self] () -> Void in - - guard let strongSelf = self else - { - return - } - - strongSelf.meOperation = nil - - if operation.isCancelled == true - { - return - } - - if operation.error != nil - { - return - } - - strongSelf.me = operation.result! - }) - } - - self.meOperation = operation - operation.start() - } - // MARK: Setup private func loadAssets() -> [VIMPHAsset] @@ -181,48 +100,6 @@ class BaseCameraRollViewController: UIViewController, UICollectionViewDataSource layout?.minimumLineSpacing = BaseCameraRollViewController.CollectionViewSpacing } - private func setupAndStartOperation() - { - let operation = MeQuotaOperation(sessionManager: self.sessionManager, me: self.me) - operation.completionBlock = { [weak self] () -> Void in - - DispatchQueue.main.async(execute: { [weak self] () -> Void in - - guard let strongSelf = self else - { - return - } - - if operation.isCancelled == true - { - return - } - - strongSelf.activityIndicatorView.stopAnimating() - - if let error = operation.error - { - if let indexPath = strongSelf.selectedIndexPath - { - strongSelf.presentErrorAlert(at: indexPath, error: error) - } - // else: do nothing, the error will be communicated at the time of cell selection - } - else - { - let indexPath = strongSelf.selectedIndexPath! - let cameraRollAsset = strongSelf.assets[indexPath.item] - strongSelf.me = operation.me! - - strongSelf.finish(cameraRollAsset: cameraRollAsset) - } - }) - } - - self.operation = operation - self.operation?.start() - } - // MARK: UICollectionViewDataSource func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int @@ -262,48 +139,26 @@ class BaseCameraRollViewController: UIViewController, UICollectionViewDataSource func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - self.didSelect(indexPath: indexPath) - } - - // MARK: Private API - - private func didSelect(indexPath: IndexPath) - { - let cameraRollAsset = self.assets[indexPath.item] + let asset = self.assets[indexPath.item] // Check if an error occurred when attempting to retrieve the asset - if let error = cameraRollAsset.error + + if let error = asset.error { self.presentAssetErrorAlert(at: indexPath, error: error) return } - self.selectedIndexPath = indexPath - - if let error = self.operation?.error + if AFNetworkReachabilityManager.shared().isReachable == false { + let error = NSError(domain: NSURLErrorDomain, code: NSURLErrorNotConnectedToInternet, userInfo: [NSLocalizedDescriptionKey: "The internet connection appears to be offline."]) self.presentErrorAlert(at: indexPath, error: error) - } - else - { - if AFNetworkReachabilityManager.shared().isReachable == false - { - let error = NSError(domain: NSURLErrorDomain, code: NSURLErrorNotConnectedToInternet, userInfo: [NSLocalizedDescriptionKey: "The internet connection appears to be offline."]) - self.presentErrorAlert(at: indexPath, error: error) - - return - } - - // Only show the activity indicator UI if the network request is in progress - if self.operation?.me == nil - { - self.activityIndicatorView.startAnimating() - } - // The avAsset may or may not be nil, which is fine. Becuase at the very least this operation needs to fetch "me" - self.operation?.fulfillSelection(avAsset: cameraRollAsset.avAsset) + return } + + self.didSelect(asset) } // MARK: UI Presentation @@ -328,9 +183,7 @@ class BaseCameraRollViewController: UIViewController, UICollectionViewDataSource return } - strongSelf.selectedIndexPath = nil - strongSelf.collectionView.deselectItem(at: indexPath, animated: true) - strongSelf.setupAndStartOperation() + strongSelf.collectionView.indexPathsForSelectedItems?.forEach({ strongSelf.collectionView.deselectItem(at: $0, animated: true) }) })) alert.addAction(UIAlertAction(title: "Try Again", style: UIAlertActionStyle.default, handler: { [weak self] (action) -> Void in @@ -339,24 +192,12 @@ class BaseCameraRollViewController: UIViewController, UICollectionViewDataSource { return } - - strongSelf.setupAndStartOperation() - strongSelf.didSelect(indexPath: indexPath) + + strongSelf.collectionView(strongSelf.collectionView, didSelectItemAt: indexPath) })) self.present(alert, animated: true, completion: nil) } - - private func finish(cameraRollAsset: VIMPHAsset) - { - let me = self.me! - - // Reset the operation so we're prepared to retry upon cancellation from video settings [AH] 12/06/2015 - self.setupAndStartOperation() - - let result = UploadUserAndCameraRollAsset(user: me, cameraRollAsset: cameraRollAsset) - self.didFinish(with: result) - } // MARK: Overrides @@ -365,7 +206,7 @@ class BaseCameraRollViewController: UIViewController, UICollectionViewDataSource self.title = "Camera Roll" } - func didFinish(with result: UploadUserAndCameraRollAsset) + func didSelect(_ asset: VIMPHAsset) { assertionFailure("Subclasses must override") } diff --git a/Examples/VimeoUpload+Demos/ViewControllers/BaseCameraRollViewController.xib b/Examples/VimeoUpload+Demos/ViewControllers/BaseCameraRollViewController.xib index b2925e98..77890cec 100644 --- a/Examples/VimeoUpload+Demos/ViewControllers/BaseCameraRollViewController.xib +++ b/Examples/VimeoUpload+Demos/ViewControllers/BaseCameraRollViewController.xib @@ -1,25 +1,28 @@ - - + + + + + - + + - - + - - + + @@ -31,20 +34,12 @@ - - + - - - - diff --git a/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload.xcodeproj/project.pbxproj b/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload.xcodeproj/project.pbxproj index 28d0b408..59156019 100644 --- a/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload.xcodeproj/project.pbxproj +++ b/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload.xcodeproj/project.pbxproj @@ -232,7 +232,6 @@ AFFA40081C9CE8E000C7B6F3 /* Frameworks */, AFFA40091C9CE8E000C7B6F3 /* Resources */, BE8817D04A5626F94A584168 /* [CP] Embed Pods Frameworks */, - 4AA625097181A3EE21E48884 /* [CP] Copy Pods Resources */, 5009CCEF1E0060D800887FC1 /* Embed Frameworks */, ); buildRules = ( @@ -252,8 +251,6 @@ AFFA401B1C9CE8E000C7B6F3 /* Sources */, AFFA401C1C9CE8E000C7B6F3 /* Frameworks */, AFFA401D1C9CE8E000C7B6F3 /* Resources */, - 576AC1945F6ECF1790D2BE79 /* [CP] Embed Pods Frameworks */, - 89C1E0AD2EBD4C702D63C690 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -337,58 +334,16 @@ files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-VimeoUpload-iOS-OldUpload-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../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"; - showEnvVarsInLog = 0; - }; - 4AA625097181A3EE21E48884 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/../../Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - 576AC1945F6ECF1790D2BE79 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/../../Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 89C1E0AD2EBD4C702D63C690 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/../../Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests-resources.sh\"\n"; + 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"; showEnvVarsInLog = 0; }; BE8817D04A5626F94A584168 /* [CP] Embed Pods Frameworks */ = { @@ -397,9 +352,14 @@ files = ( ); inputPaths = ( + "${SRCROOT}/../../Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework", + "${BUILT_PRODUCTS_DIR}/VimeoNetworking/VimeoNetworking.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/VimeoNetworking.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -412,13 +372,16 @@ files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-VimeoUpload-iOS-OldUploadTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../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"; + 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"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ diff --git a/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/AppDelegate.swift b/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/AppDelegate.swift index 87cad91d..904f2950 100644 --- a/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/AppDelegate.swift +++ b/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/AppDelegate.swift @@ -36,7 +36,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { AFNetworkReachabilityManager.shared().startMonitoring() - OldVimeoUploader.sharedInstance.applicationDidFinishLaunching() // Ensure init is called on launch + OldVimeoUploader.sharedInstance?.applicationDidFinishLaunching() // Ensure init is called on launch let settings = UIUserNotificationSettings(types: .alert, categories: nil) application.registerUserNotificationSettings(settings) @@ -66,9 +66,14 @@ class AppDelegate: UIResponder, UIApplicationDelegate func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void) { - if OldVimeoUploader.sharedInstance.descriptorManager.handleEventsForBackgroundURLSession(identifier: identifier, completionHandler: completionHandler) == false + guard let descriptorManager = OldVimeoUploader.sharedInstance?.descriptorManager else { - assertionFailure("Unhandled background events") + return + } + + if descriptorManager.canHandleEventsForBackgroundURLSession(withIdentifier: identifier) + { + descriptorManager.handleEventsForBackgroundURLSession(completionHandler: completionHandler) } } diff --git a/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/Cells/UploadCell.swift b/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/Cells/UploadCell.swift index 2ed88626..1a844f28 100644 --- a/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/Cells/UploadCell.swift +++ b/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/Cells/UploadCell.swift @@ -78,7 +78,7 @@ class UploadCell: UITableViewCell { if let assetIdentifier = self.assetIdentifier { - self.descriptor = OldVimeoUploader.sharedInstance.descriptor(for: assetIdentifier) + self.descriptor = OldVimeoUploader.sharedInstance?.descriptor(for: assetIdentifier) } } } @@ -114,7 +114,7 @@ class UploadCell: UITableViewCell { if let descriptor = self.descriptor { - OldVimeoUploader.sharedInstance.cancelUpload(descriptor: descriptor) + OldVimeoUploader.sharedInstance?.cancelUpload(descriptor: descriptor) } } diff --git a/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/OldVimeoUploader.swift b/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/OldVimeoUploader.swift index cbba96a7..73d54e1b 100644 --- a/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/OldVimeoUploader.swift +++ b/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/OldVimeoUploader.swift @@ -29,14 +29,20 @@ import VimeoUpload class OldVimeoUploader: VimeoUploader { + /// Latest supported API version for the `VimeoUpload-iOS-OldUpload` target. + private static var APIVersionString: String + { + return "3.3.1" + } + static let sharedInstance = OldVimeoUploader(backgroundSessionIdentifier: "com.vimeo.upload") { () -> String? in return "YOUR_OAUTH_TOKEN" // See README for details on how to obtain and OAuth token } // MARK: - Initialization - init(backgroundSessionIdentifier: String, accessTokenProvider: @escaping VimeoRequestSerializer.AccessTokenProvider) + init?(backgroundSessionIdentifier: String, accessTokenProvider: @escaping VimeoRequestSerializer.AccessTokenProvider) { - super.init(backgroundSessionIdentifier: backgroundSessionIdentifier, accessTokenProvider: accessTokenProvider) + super.init(backgroundSessionIdentifier: backgroundSessionIdentifier, accessTokenProvider: accessTokenProvider, apiVersion: OldVimeoUploader.APIVersionString) } } diff --git a/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/ViewControllers/CameraRollViewController.swift b/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/ViewControllers/CameraRollViewController.swift index 5479ad0b..d63cdb64 100644 --- a/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/ViewControllers/CameraRollViewController.swift +++ b/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/ViewControllers/CameraRollViewController.swift @@ -26,6 +26,7 @@ import Foundation import UIKit +import VimeoUpload class CameraRollViewController: BaseCameraRollViewController { @@ -33,17 +34,16 @@ class CameraRollViewController: BaseCameraRollViewController override func viewDidLoad() { - self.sessionManager = OldVimeoUploader.sharedInstance.foregroundSessionManager + self.sessionManager = OldVimeoUploader.sharedInstance?.foregroundSessionManager super.viewDidLoad() self.title = "Camera Roll" } - override func didFinish(with result: UploadUserAndCameraRollAsset) + override func didSelect(_ asset: VIMPHAsset) { - let viewController = VideoSettingsViewController(nibName: VideoSettingsViewController.NibName, bundle:Bundle.main) - viewController.input = result + let viewController = VideoSettingsViewController(asset: asset) let navigationController = UINavigationController(rootViewController: viewController) navigationController.view.backgroundColor = UIColor.white diff --git a/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/ViewControllers/VideoSettingsViewController.swift b/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/ViewControllers/VideoSettingsViewController.swift index 9803e6a7..ae9b9186 100644 --- a/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/ViewControllers/VideoSettingsViewController.swift +++ b/Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload/ViewControllers/VideoSettingsViewController.swift @@ -40,11 +40,11 @@ class VideoSettingsViewController: UIViewController, UITextFieldDelegate // MARK: - var input: UploadUserAndCameraRollAsset? + private var asset: VIMPHAsset // MARK: - private var operation: ConcurrentOperation? + private var operation: ExportSessionExportOperation? private var descriptor: Descriptor? // MARK: @@ -62,15 +62,24 @@ class VideoSettingsViewController: UIViewController, UITextFieldDelegate } } - // MARK: // MARK: Lifecycle + init(asset: VIMPHAsset) + { + self.asset = asset + + super.init(nibName: nil, bundle: nil) + } + + required init?(coder aDecoder: NSCoder) + { + fatalError("init(coder:) has not been implemented") + } + override func viewDidLoad() { super.viewDidLoad() - assert(self.input != nil, "self.input cannot be nil") - self.edgesForExtendedLayout = [] self.setupNavigationBar() @@ -90,9 +99,8 @@ class VideoSettingsViewController: UIViewController, UITextFieldDelegate private func setupAndStartOperation() { - let me = self.input!.user - let phAsset = (self.input!.cameraRollAsset ).phAsset - let operation = PHAssetCloudExportQuotaOperation(me: me, phAsset: phAsset) + let phAsset = self.asset.phAsset + let operation = ExportSessionExportOperation(phAsset: phAsset) operation.downloadProgressBlock = { (progress: Double) -> Void in print(String(format: "Download progress: %.2f", progress)) // TODO: Dispatch to main thread @@ -145,13 +153,13 @@ class VideoSettingsViewController: UIViewController, UITextFieldDelegate private func startUpload() { let url = self.url! - let phAsset = (self.input!.cameraRollAsset ).phAsset + let phAsset = self.asset.phAsset let assetIdentifier = phAsset.localIdentifier let descriptor = OldUploadDescriptor(url: url, videoSettings: self.videoSettings) descriptor.identifier = assetIdentifier - OldVimeoUploader.sharedInstance.uploadVideo(descriptor: descriptor) + OldVimeoUploader.sharedInstance?.uploadVideo(descriptor: descriptor) } // MARK: Actions @@ -165,17 +173,15 @@ class VideoSettingsViewController: UIViewController, UITextFieldDelegate func didTapUpload(_ sender: UIBarButtonItem) { - let operation = self.operation as? PHAssetCloudExportQuotaOperation - let title = self.titleTextField.text let description = self.descriptionTextView.text self.videoSettings = VideoSettings(title: title, description: description, privacy: "nobody", users: nil, password: nil) - if operation?.state == .executing + if self.operation?.state == .executing { self.activityIndicatorView.startAnimating() // Listen for operation completion, dismiss } - else if let error = operation?.error + else if let error = self.operation?.error { self.presentOperationErrorAlert(with: error) } diff --git a/Examples/VimeoUpload-iOS/VimeoUpload-iOS.xcodeproj/project.pbxproj b/Examples/VimeoUpload-iOS/VimeoUpload-iOS.xcodeproj/project.pbxproj index 14cf2d1d..3a278be6 100644 --- a/Examples/VimeoUpload-iOS/VimeoUpload-iOS.xcodeproj/project.pbxproj +++ b/Examples/VimeoUpload-iOS/VimeoUpload-iOS.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 3EA4C85A2094FE57009F3D9B /* NSKeyedUnarchiver+Migrations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EA4C8592094FE57009F3D9B /* NSKeyedUnarchiver+Migrations.swift */; }; 5009CCE91E00604200887FC1 /* VimeoUpload.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5009CCE81E00604200887FC1 /* VimeoUpload.framework */; }; 5009CCEA1E00604200887FC1 /* VimeoUpload.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 5009CCE81E00604200887FC1 /* VimeoUpload.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 5073D6EB1CAD66C600D08C5F /* DemoCameraRollCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5073D6E61CAD66C600D08C5F /* DemoCameraRollCell.swift */; }; @@ -54,6 +55,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 3EA4C8592094FE57009F3D9B /* NSKeyedUnarchiver+Migrations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSKeyedUnarchiver+Migrations.swift"; sourceTree = ""; }; 47ED4955B1448D82B035D2BF /* Pods_VimeoUpload_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VimeoUpload_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 49DF265822E7E25ECC46C743 /* Pods_VimeoUpload_iOSTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VimeoUpload_iOSTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5009CCE81E00604200887FC1 /* VimeoUpload.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = VimeoUpload.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -115,6 +117,14 @@ name = Frameworks; sourceTree = ""; }; + 3EA4C85B2094FE60009F3D9B /* Extensions */ = { + isa = PBXGroup; + children = ( + 3EA4C8592094FE57009F3D9B /* NSKeyedUnarchiver+Migrations.swift */, + ); + path = Extensions; + sourceTree = ""; + }; 5073D6E41CAD66C600D08C5F /* VimeoUpload+Demos */ = { isa = PBXGroup; children = ( @@ -175,6 +185,7 @@ AFFA3F201C9CE22500C7B6F3 /* LaunchScreen.storyboard */, AFFA3F231C9CE22500C7B6F3 /* Info.plist */, AFFA3F451C9CE34700C7B6F3 /* Bridge.h */, + 3EA4C85B2094FE60009F3D9B /* Extensions */, ); path = "VimeoUpload-iOS"; sourceTree = ""; @@ -232,7 +243,6 @@ AFFA3F111C9CE22500C7B6F3 /* Frameworks */, AFFA3F121C9CE22500C7B6F3 /* Resources */, F99B806A68B81482408B6D2F /* [CP] Embed Pods Frameworks */, - EB2809E825F1D91F8B3E8D00 /* [CP] Copy Pods Resources */, 5009CCEB1E00604200887FC1 /* Embed Frameworks */, ); buildRules = ( @@ -252,8 +262,6 @@ AFFA3F241C9CE22500C7B6F3 /* Sources */, AFFA3F251C9CE22500C7B6F3 /* Frameworks */, AFFA3F261C9CE22500C7B6F3 /* Resources */, - 9AE9924AC1194539D3970F62 /* [CP] Embed Pods Frameworks */, - F6CB30BFCBEB63E375D9C6F9 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -336,13 +344,16 @@ files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-VimeoUpload-iOSTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../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"; + 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"; showEnvVarsInLog = 0; }; 7B5C5CEC1A3E28ED8906F076 /* [CP] Check Pods Manifest.lock */ = { @@ -351,58 +362,16 @@ files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-VimeoUpload-iOS-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../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"; - showEnvVarsInLog = 0; - }; - 9AE9924AC1194539D3970F62 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/../../Pods/Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - EB2809E825F1D91F8B3E8D00 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/../../Pods/Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - F6CB30BFCBEB63E375D9C6F9 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/../../Pods/Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests-resources.sh\"\n"; + 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"; showEnvVarsInLog = 0; }; F99B806A68B81482408B6D2F /* [CP] Embed Pods Frameworks */ = { @@ -411,9 +380,14 @@ files = ( ); inputPaths = ( + "${SRCROOT}/../../Pods/Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework", + "${BUILT_PRODUCTS_DIR}/VimeoNetworking/VimeoNetworking.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/VimeoNetworking.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -427,6 +401,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 3EA4C85A2094FE57009F3D9B /* NSKeyedUnarchiver+Migrations.swift in Sources */, AFFA3F521C9CE34700C7B6F3 /* NewVimeoUploader.swift in Sources */, AFFA3F561C9CE34700C7B6F3 /* VideoSettingsViewController.swift in Sources */, 5073D6ED1CAD66C600D08C5F /* BaseCameraRollViewController.swift in Sources */, diff --git a/Examples/VimeoUpload-iOS/VimeoUpload-iOS/AppDelegate.swift b/Examples/VimeoUpload-iOS/VimeoUpload-iOS/AppDelegate.swift index 103eab00..b559a5a5 100644 --- a/Examples/VimeoUpload-iOS/VimeoUpload-iOS/AppDelegate.swift +++ b/Examples/VimeoUpload-iOS/VimeoUpload-iOS/AppDelegate.swift @@ -34,8 +34,10 @@ class AppDelegate: UIResponder, UIApplicationDelegate func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + NSKeyedUnarchiver.setLegacyClassNameMigrations() + AFNetworkReachabilityManager.shared().startMonitoring() - NewVimeoUploader.sharedInstance.applicationDidFinishLaunching() // Ensure init is called on launch + NewVimeoUploader.sharedInstance?.applicationDidFinishLaunching() // Ensure init is called on launch let settings = UIUserNotificationSettings(types: .alert, categories: nil) application.registerUserNotificationSettings(settings) @@ -53,9 +55,14 @@ class AppDelegate: UIResponder, UIApplicationDelegate func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void) { - if NewVimeoUploader.sharedInstance.descriptorManager.handleEventsForBackgroundURLSession(identifier: identifier, completionHandler: completionHandler) == false + guard let descriptorManager = NewVimeoUploader.sharedInstance?.descriptorManager else + { + return + } + + if descriptorManager.canHandleEventsForBackgroundURLSession(withIdentifier: identifier) { - assertionFailure("Unhandled background events") + descriptorManager.handleEventsForBackgroundURLSession(completionHandler: completionHandler) } } } diff --git a/Examples/VimeoUpload-iOS/VimeoUpload-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/Examples/VimeoUpload-iOS/VimeoUpload-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json index b8236c65..19882d56 100644 --- a/Examples/VimeoUpload-iOS/VimeoUpload-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Examples/VimeoUpload-iOS/VimeoUpload-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -39,6 +39,11 @@ "idiom" : "iphone", "size" : "60x60", "scale" : "3x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" } ], "info" : { diff --git a/Examples/VimeoUpload-iOS/VimeoUpload-iOS/Cells/VideoCell.swift b/Examples/VimeoUpload-iOS/VimeoUpload-iOS/Cells/VideoCell.swift index 33176c7c..e0460eb0 100644 --- a/Examples/VimeoUpload-iOS/VimeoUpload-iOS/Cells/VideoCell.swift +++ b/Examples/VimeoUpload-iOS/VimeoUpload-iOS/Cells/VideoCell.swift @@ -91,7 +91,7 @@ class VideoCell: UITableViewCell { self.setupImageView(video: video) self.setupStatusLabel(video: video) - self.descriptor = NewVimeoUploader.sharedInstance.descriptorForVideo(videoUri: uri) + self.descriptor = NewVimeoUploader.sharedInstance?.descriptorForVideo(videoUri: uri) } } } diff --git a/Examples/VimeoUpload-iOS/VimeoUpload-iOS/Extensions/NSKeyedUnarchiver+Migrations.swift b/Examples/VimeoUpload-iOS/VimeoUpload-iOS/Extensions/NSKeyedUnarchiver+Migrations.swift new file mode 100644 index 00000000..8eaa604f --- /dev/null +++ b/Examples/VimeoUpload-iOS/VimeoUpload-iOS/Extensions/NSKeyedUnarchiver+Migrations.swift @@ -0,0 +1,39 @@ +// +// NSKeyedUnarchiver+Migrations.swift +// VimeoUpload +// +// Created by Lehrer, Nicole on 4/27/18. +// Copyright © 2018 Vimeo. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import VimeoNetworking + +internal extension NSKeyedUnarchiver +{ + @objc static func setLegacyClassNameMigrations() + { + // In older version of this project, it's possible that `VIMUploadQuota` was archived as an Objective-C object. It will now be unarchived in Swift. + // Swift classes include their module name for archiving and unarchiving, whereas Objective-C classes do not. Thus we need to explictly specify the class name here + // for legacy archived objects. NAL [04/27/2018] + + self.setClass(VIMUploadQuota.self, forClassName: "VIMUploadQuota") + } +} diff --git a/Examples/VimeoUpload-iOS/VimeoUpload-iOS/NewVimeoUploader.swift b/Examples/VimeoUpload-iOS/VimeoUpload-iOS/NewVimeoUploader.swift index f66c5e34..8254f1b2 100644 --- a/Examples/VimeoUpload-iOS/VimeoUpload-iOS/NewVimeoUploader.swift +++ b/Examples/VimeoUpload-iOS/VimeoUpload-iOS/NewVimeoUploader.swift @@ -29,14 +29,19 @@ import VimeoUpload class NewVimeoUploader: VimeoUploader { + private static var APIVersionString: String + { + return "3.4" + } + static let sharedInstance = NewVimeoUploader(backgroundSessionIdentifier: "com.vimeo.upload") { () -> String? in return "YOUR_OAUTH_TOKEN" // See README for details on how to obtain and OAuth token } // MARK: - Initialization - init(backgroundSessionIdentifier: String, accessTokenProvider: @escaping VimeoRequestSerializer.AccessTokenProvider) + init?(backgroundSessionIdentifier: String, accessTokenProvider: @escaping VimeoRequestSerializer.AccessTokenProvider) { - super.init(backgroundSessionIdentifier: backgroundSessionIdentifier, accessTokenProvider: accessTokenProvider) + super.init(backgroundSessionIdentifier: backgroundSessionIdentifier, accessTokenProvider: accessTokenProvider, apiVersion: NewVimeoUploader.APIVersionString) } } diff --git a/Examples/VimeoUpload-iOS/VimeoUpload-iOS/ViewControllers/CameraRollViewController.swift b/Examples/VimeoUpload-iOS/VimeoUpload-iOS/ViewControllers/CameraRollViewController.swift index 08f2809d..f488efb4 100644 --- a/Examples/VimeoUpload-iOS/VimeoUpload-iOS/ViewControllers/CameraRollViewController.swift +++ b/Examples/VimeoUpload-iOS/VimeoUpload-iOS/ViewControllers/CameraRollViewController.swift @@ -26,12 +26,13 @@ import Foundation import UIKit +import VimeoUpload class CameraRollViewController: BaseCameraRollViewController { override func viewDidLoad() { - self.sessionManager = NewVimeoUploader.sharedInstance.foregroundSessionManager + self.sessionManager = NewVimeoUploader.sharedInstance?.foregroundSessionManager super.viewDidLoad() } @@ -45,10 +46,9 @@ class CameraRollViewController: BaseCameraRollViewController self.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(CameraRollViewController.didTapCancel(_:))) } - override func didFinish(with result: UploadUserAndCameraRollAsset) + override func didSelect(_ asset: VIMPHAsset) { - let viewController = VideoSettingsViewController(nibName: VideoSettingsViewController.NibName, bundle:Bundle.main) - viewController.input = result + let viewController = VideoSettingsViewController(asset: asset) self.navigationController?.pushViewController(viewController, animated: true) } diff --git a/Examples/VimeoUpload-iOS/VimeoUpload-iOS/ViewControllers/MyVideosViewController.swift b/Examples/VimeoUpload-iOS/VimeoUpload-iOS/ViewControllers/MyVideosViewController.swift index 84202ac3..7d899e10 100644 --- a/Examples/VimeoUpload-iOS/VimeoUpload-iOS/ViewControllers/MyVideosViewController.swift +++ b/Examples/VimeoUpload-iOS/VimeoUpload-iOS/ViewControllers/MyVideosViewController.swift @@ -81,7 +81,12 @@ class MyVideosViewController: UIViewController, UITableViewDataSource, UITableVi private func setupVideoRefreshManager() { - self.videoRefreshManager = VideoRefreshManager(sessionManager: NewVimeoUploader.sharedInstance.foregroundSessionManager, delegate: self) + guard let sessionManager = NewVimeoUploader.sharedInstance?.foregroundSessionManager else + { + return + } + + self.videoRefreshManager = VideoRefreshManager(sessionManager: sessionManager, delegate: self) } // MARK: Notifications @@ -145,7 +150,7 @@ class MyVideosViewController: UIViewController, UITableViewDataSource, UITableVi func cellDidDeleteVideoWithUri(cell: VideoCell, videoUri: String) { - NewVimeoUploader.sharedInstance.cancelUpload(videoUri: videoUri) + NewVimeoUploader.sharedInstance?.cancelUpload(videoUri: videoUri) if let indexPath = self.indexPath(for: videoUri) { @@ -156,26 +161,7 @@ class MyVideosViewController: UIViewController, UITableViewDataSource, UITableVi func cellDidRetryUploadDescriptor(cell: VideoCell, descriptor: UploadDescriptor) { - let videoUri = descriptor.uploadTicket.video!.uri! - - self.retry(uploadDescriptor: descriptor, completion: { [weak self] (error) in - - guard let strongSelf = self else - { - return - } - - if error != nil - { - return - } - - // Reload the cell so that it reflects the state of the newly retried upload - if let indexPath = strongSelf.indexPath(for: videoUri) - { - strongSelf.tableView.reloadRows(at: [indexPath], with: .none) - } - }) + // TODO: Implement retry } private func indexPath(for videoUri: String) -> IndexPath? @@ -209,7 +195,10 @@ class MyVideosViewController: UIViewController, UITableViewDataSource, UITableVi { self.refreshControl?.beginRefreshing() - let sessionManager = NewVimeoUploader.sharedInstance.foregroundSessionManager + guard let sessionManager = NewVimeoUploader.sharedInstance?.foregroundSessionManager else + { + return + } do { @@ -303,57 +292,4 @@ class MyVideosViewController: UIViewController, UITableViewDataSource, UITableVi self.present(alert, animated: true, completion: nil) } - - // MARK: Private API - - private func retry(uploadDescriptor descriptor: UploadDescriptor, completion: ErrorBlock) - { - // TODO: This should be cancellable - -// guard let phAsset = descriptor.phAssetForRetry() else -// { -// return -// } -// -// let operation = PHAssetRetryUploadOperation(sessionManager: UploadManager.sharedInstance.foregroundSessionManager, phAsset: phAsset) -// -// operation.downloadProgressBlock = { (progress: Double) -> Void in -// print("Download progress (settings): \(progress)") // TODO: Dispatch to main thread -// } -// -// operation.exportProgressBlock = { (progress: Double) -> Void in -// print("Export progress (settings): \(progress)") -// } -// operation.completionBlock = { [weak self] () -> Void in -// -// dispatch_async(dispatch_get_main_queue(), { [weak self] () -> Void in -// -// guard let strongSelf = self else -// { -// return -// } -// -// if operation.cancelled == true -// { -// return -// } -// -// if let error = operation.error -// { -// strongSelf.presentUploadRetryErrorAlert(error) -// } -// else -// { -// // Initiate the retry -// -// let url = operation.url! -// UploadManager.sharedInstance.retryUpload(descriptor: descriptor, url: url) -// } -// -// completion(error: operation.error) -// }) -// } -// -// operation.start() - } } diff --git a/Examples/VimeoUpload-iOS/VimeoUpload-iOS/ViewControllers/VideoSettingsViewController.swift b/Examples/VimeoUpload-iOS/VimeoUpload-iOS/ViewControllers/VideoSettingsViewController.swift index e68e530d..19ffb372 100644 --- a/Examples/VimeoUpload-iOS/VimeoUpload-iOS/ViewControllers/VideoSettingsViewController.swift +++ b/Examples/VimeoUpload-iOS/VimeoUpload-iOS/ViewControllers/VideoSettingsViewController.swift @@ -55,7 +55,7 @@ class VideoSettingsViewController: UIViewController, UITextFieldDelegate static let UploadInitiatedNotification = "VideoSettingsViewControllerUploadInitiatedNotification" static let NibName = "VideoSettingsViewController" private static let PreUploadViewPrivacy = "pre_upload" - + // MARK: @IBOutlet weak var titleTextField: UITextField! @@ -64,17 +64,17 @@ class VideoSettingsViewController: UIViewController, UITextFieldDelegate // MARK: - var input: UploadUserAndCameraRollAsset? + private var asset: VIMPHAsset // MARK: - private var operation: ConcurrentOperation? + private var operation: ExportSessionExportCreateVideoOperation? private var task: URLSessionDataTask? // MARK: private var url: URL? - private var uploadTicket: VIMUploadTicket? + private var video: VIMVideo? private var videoSettings: VideoSettings? // MARK: @@ -89,6 +89,18 @@ class VideoSettingsViewController: UIViewController, UITextFieldDelegate // MARK: Lifecycle + init(asset: VIMPHAsset) + { + self.asset = asset + + super.init(nibName: nil, bundle: nil) + } + + required init?(coder aDecoder: NSCoder) + { + fatalError("init(coder:) has not been implemented") + } + deinit { // Do not cancel operation, it will delete the source file @@ -98,9 +110,7 @@ class VideoSettingsViewController: UIViewController, UITextFieldDelegate override func viewDidLoad() { super.viewDidLoad() - - assert(self.input != nil, "self.input cannot be nil") - + self.edgesForExtendedLayout = [] self.setupNavigationBar() @@ -120,13 +130,15 @@ class VideoSettingsViewController: UIViewController, UITextFieldDelegate private func setupAndStartOperation() { - let me = self.input!.user - let cameraRollAsset = self.input!.cameraRollAsset - let sessionManager = NewVimeoUploader.sharedInstance.foregroundSessionManager + guard let sessionManager = NewVimeoUploader.sharedInstance?.foregroundSessionManager else + { + return + } + let videoSettings = self.videoSettings - let phAsset = cameraRollAsset.phAsset - let operation = PHAssetCloudExportQuotaCreateOperation(me: me, phAsset: phAsset, sessionManager: sessionManager, videoSettings: videoSettings) + let phAsset = self.asset.phAsset + let operation = ExportSessionExportCreateVideoOperation(phAsset: phAsset, sessionManager: sessionManager, videoSettings: videoSettings) operation.downloadProgressBlock = { (progress: Double) -> Void in print(String(format: "Download progress: %.2f", progress)) // TODO: Dispatch to main thread @@ -153,7 +165,7 @@ class VideoSettingsViewController: UIViewController, UITextFieldDelegate if operation.error == nil { strongSelf.url = operation.url! - strongSelf.uploadTicket = operation.uploadTicket! + strongSelf.video = operation.video! strongSelf.startUpload() } @@ -166,9 +178,9 @@ class VideoSettingsViewController: UIViewController, UITextFieldDelegate } else { - if let video = strongSelf.uploadTicket?.video, let viewPrivacy = video.privacy?.view, viewPrivacy != type(of: strongSelf).PreUploadViewPrivacy + if let video = strongSelf.video, let viewPrivacy = video.privacy?.view, viewPrivacy != type(of: strongSelf).PreUploadViewPrivacy { - NotificationCenter.default.post(name: Notification.Name(rawValue: VideoSettingsViewController.UploadInitiatedNotification), object: video) + NotificationCenter.default.post(name: Notification.Name(rawValue: VideoSettingsViewController.UploadInitiatedNotification), object: strongSelf.video) strongSelf.activityIndicatorView.stopAnimating() strongSelf.dismiss(animated: true, completion: nil) @@ -189,13 +201,13 @@ class VideoSettingsViewController: UIViewController, UITextFieldDelegate private func startUpload() { let url = self.url! - let uploadTicket = self.uploadTicket! - let assetIdentifier = self.input!.cameraRollAsset.identifier + let video = self.video! + let assetIdentifier = self.asset.identifier - let descriptor = UploadDescriptor(url: url, uploadTicket: uploadTicket) + let descriptor = UploadDescriptor(url: url, video: video) descriptor.identifier = assetIdentifier - NewVimeoUploader.sharedInstance.uploadVideo(descriptor: descriptor) + NewVimeoUploader.sharedInstance?.uploadVideo(descriptor: descriptor) } // MARK: Actions @@ -206,9 +218,9 @@ class VideoSettingsViewController: UIViewController, UITextFieldDelegate self.activityIndicatorView.stopAnimating() _ = self.navigationController?.popViewController(animated: true) - if let videoUri = self.uploadTicket?.video?.uri + if let videoUri = self.video?.uri { - NewVimeoUploader.sharedInstance.cancelUpload(videoUri: videoUri) + NewVimeoUploader.sharedInstance?.cancelUpload(videoUri: videoUri) } } @@ -217,22 +229,20 @@ class VideoSettingsViewController: UIViewController, UITextFieldDelegate let title = self.titleTextField.text let description = self.descriptionTextView.text self.videoSettings = VideoSettings(title: title, description: description, privacy: "nobody", users: nil, password: nil) - - let operation = self.operation as! ExportQuotaCreateOperation - if operation.state == .executing + if self.operation?.state == .executing { - operation.videoSettings = self.videoSettings + self.operation?.videoSettings = self.videoSettings self.activityIndicatorView.startAnimating() // Listen for operation completion, dismiss } - else if let error = operation.error + else if let error = self.operation?.error { self.presentOperationErrorAlert(with: error) } else { - if let video = self.uploadTicket?.video, let viewPrivacy = video.privacy?.view, viewPrivacy != VideoSettingsViewController.PreUploadViewPrivacy + if let video = self.video, let viewPrivacy = video.privacy?.view, viewPrivacy != VideoSettingsViewController.PreUploadViewPrivacy { NotificationCenter.default.post(name: Notification.Name(rawValue: type(of: self).UploadInitiatedNotification), object: video) @@ -295,7 +305,7 @@ class VideoSettingsViewController: UIViewController, UITextFieldDelegate private func applyVideoSettings() { - guard let videoURI = self.uploadTicket?.video?.uri, let videoSettings = self.videoSettings else + guard let videoURI = self.video?.uri, let videoSettings = self.videoSettings else { let alertController = UIAlertController( title: Constants.TwoStepUploadPermissionAlert.Title, @@ -312,7 +322,7 @@ class VideoSettingsViewController: UIViewController, UITextFieldDelegate do { - self.task = try NewVimeoUploader.sharedInstance.foregroundSessionManager.videoSettingsDataTask(videoUri: videoURI, videoSettings: videoSettings, completionHandler: { [weak self] (video, error) -> Void in + self.task = try NewVimeoUploader.sharedInstance?.foregroundSessionManager.videoSettingsDataTask(videoUri: videoURI, videoSettings: videoSettings, completionHandler: { [weak self] (video, error) -> Void in self?.task = nil diff --git a/Framework/VimeoUpload/VimeoUpload.xcodeproj/project.pbxproj b/Framework/VimeoUpload/VimeoUpload.xcodeproj/project.pbxproj index 6c938c46..15672f6e 100644 --- a/Framework/VimeoUpload/VimeoUpload.xcodeproj/project.pbxproj +++ b/Framework/VimeoUpload/VimeoUpload.xcodeproj/project.pbxproj @@ -12,13 +12,12 @@ 3C53EC261D219C8500B7AA6D /* VimeoRequestSerializer+Thumbnail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C53EC211D219C8500B7AA6D /* VimeoRequestSerializer+Thumbnail.swift */; }; 3C53EC271D219C8500B7AA6D /* VimeoResponseSerializer+Thumbnail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C53EC221D219C8500B7AA6D /* VimeoResponseSerializer+Thumbnail.swift */; }; 3C53EC281D219C8500B7AA6D /* VimeoSessionManager+ThumbnailUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C53EC231D219C8500B7AA6D /* VimeoSessionManager+ThumbnailUpload.swift */; }; - 3EA2DAD11DFF3DF0006E2C65 /* PHAssetCloudExportQuotaCreateOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EA2DACF1DFF3DF0006E2C65 /* PHAssetCloudExportQuotaCreateOperation.swift */; }; - 3EA2DAD21DFF3DF0006E2C65 /* PHAssetRetryUploadOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EA2DAD01DFF3DF0006E2C65 /* PHAssetRetryUploadOperation.swift */; }; - 3EA2DAD61DFF3E0F006E2C65 /* PHAssetCloudExportQuotaOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EA2DAD31DFF3E0F006E2C65 /* PHAssetCloudExportQuotaOperation.swift */; }; - 3EA2DAD71DFF3E0F006E2C65 /* PHAssetDownloadOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EA2DAD41DFF3E0F006E2C65 /* PHAssetDownloadOperation.swift */; }; - 3EA2DAD81DFF3E0F006E2C65 /* PHAssetExportSessionOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EA2DAD51DFF3E0F006E2C65 /* PHAssetExportSessionOperation.swift */; }; + 3EA2DAD81DFF3E0F006E2C65 /* ExportSessionOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EA2DAD51DFF3E0F006E2C65 /* ExportSessionOperation.swift */; }; + 3EA4C84D209017FB009F3D9B /* VimeoRequestSerializer+SharedUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EA4C84C209017FB009F3D9B /* VimeoRequestSerializer+SharedUpload.swift */; }; 5C9E3CA51EA66187000D1F6B /* DescriptorKVObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9E3CA41EA66187000D1F6B /* DescriptorKVObserver.swift */; }; 8D9A15BCC5ABADC2D001B20C /* Pods_VimeoUpload.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D4E8D665288660F1F668B91 /* Pods_VimeoUpload.framework */; }; + 8E8F1F7D20CF05C40048E8BB /* ArchiveMigrating.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E8F1F7C20CF05C40048E8BB /* ArchiveMigrating.swift */; }; + 8E8F1FC720EE9E2A0048E8BB /* ArchiveMigrator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E8F1FC620EE9E2A0048E8BB /* ArchiveMigrator.swift */; }; AF40D4E51CCE9CB600753ABA /* VimeoUpload.h in Headers */ = {isa = PBXBuildFile; fileRef = AF40D4E41CCE9CB600753ABA /* VimeoUpload.h */; settings = {ATTRIBUTES = (Public, ); }; }; AF40D4EC1CCE9CB600753ABA /* VimeoUpload.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF40D4E11CCE9CB600753ABA /* VimeoUpload.framework */; }; AF40D4F11CCE9CB600753ABA /* VimeoUploadTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D4F01CCE9CB600753ABA /* VimeoUploadTests.swift */; }; @@ -55,22 +54,17 @@ AF40D5731CCE9DEB00753ABA /* VideoSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D52A1CCE9DEB00753ABA /* VideoSettings.swift */; }; AF40D5741CCE9DEB00753ABA /* VimeoRequestSerializer+Upload.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D52D1CCE9DEB00753ABA /* VimeoRequestSerializer+Upload.swift */; }; AF40D5751CCE9DEB00753ABA /* VimeoSessionManager+Upload.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D52E1CCE9DEB00753ABA /* VimeoSessionManager+Upload.swift */; }; - AF40D5761CCE9DEB00753ABA /* VimeoRequestSerializer+OldUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D5301CCE9DEB00753ABA /* VimeoRequestSerializer+OldUpload.swift */; }; AF40D5771CCE9DEB00753ABA /* VimeoResponseSerializer+OldUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D5311CCE9DEB00753ABA /* VimeoResponseSerializer+OldUpload.swift */; }; AF40D5781CCE9DEB00753ABA /* VimeoSessionManager+OldUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D5321CCE9DEB00753ABA /* VimeoSessionManager+OldUpload.swift */; }; AF40D5791CCE9DEB00753ABA /* ConcurrentOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D5351CCE9DEB00753ABA /* ConcurrentOperation.swift */; }; AF40D57A1CCE9DEB00753ABA /* DeleteVideoOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D5361CCE9DEB00753ABA /* DeleteVideoOperation.swift */; }; AF40D57B1CCE9DEB00753ABA /* ExportOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D5371CCE9DEB00753ABA /* ExportOperation.swift */; }; - AF40D57C1CCE9DEB00753ABA /* ExportQuotaOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D5381CCE9DEB00753ABA /* ExportQuotaOperation.swift */; }; - AF40D5811CCE9DEB00753ABA /* MeOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D53F1CCE9DEB00753ABA /* MeOperation.swift */; }; - AF40D5821CCE9DEB00753ABA /* MeQuotaOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D5401CCE9DEB00753ABA /* MeQuotaOperation.swift */; }; + AF40D57C1CCE9DEB00753ABA /* ExportSessionExportOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D5381CCE9DEB00753ABA /* ExportSessionExportOperation.swift */; }; AF40D5831CCE9DEB00753ABA /* VideoOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D5411CCE9DEB00753ABA /* VideoOperation.swift */; }; AF40D5841CCE9DEB00753ABA /* CreateVideoOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D5431CCE9DEB00753ABA /* CreateVideoOperation.swift */; }; - AF40D5851CCE9DEB00753ABA /* ExportQuotaCreateOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D5441CCE9DEB00753ABA /* ExportQuotaCreateOperation.swift */; }; + AF40D5851CCE9DEB00753ABA /* ExportSessionExportCreateVideoOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D5441CCE9DEB00753ABA /* ExportSessionExportCreateVideoOperation.swift */; }; AF40D58A1CCE9DEB00753ABA /* RetryUploadOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D54B1CCE9DEB00753ABA /* RetryUploadOperation.swift */; }; - AF40D58B1CCE9DEB00753ABA /* DailyQuotaOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D54D1CCE9DEB00753ABA /* DailyQuotaOperation.swift */; }; AF40D58C1CCE9DEB00753ABA /* DiskSpaceOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D54E1CCE9DEB00753ABA /* DiskSpaceOperation.swift */; }; - AF40D58D1CCE9DEB00753ABA /* WeeklyQuotaOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D54F1CCE9DEB00753ABA /* WeeklyQuotaOperation.swift */; }; AF40D58E1CCE9DEB00753ABA /* VimeoUploader.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF40D5501CCE9DEB00753ABA /* VimeoUploader.swift */; }; /* End PBXBuildFile section */ @@ -91,13 +85,12 @@ 3C53EC211D219C8500B7AA6D /* VimeoRequestSerializer+Thumbnail.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "VimeoRequestSerializer+Thumbnail.swift"; path = "Cameo/VimeoRequestSerializer+Thumbnail.swift"; sourceTree = ""; }; 3C53EC221D219C8500B7AA6D /* VimeoResponseSerializer+Thumbnail.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "VimeoResponseSerializer+Thumbnail.swift"; path = "Cameo/VimeoResponseSerializer+Thumbnail.swift"; sourceTree = ""; }; 3C53EC231D219C8500B7AA6D /* VimeoSessionManager+ThumbnailUpload.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "VimeoSessionManager+ThumbnailUpload.swift"; path = "Cameo/VimeoSessionManager+ThumbnailUpload.swift"; sourceTree = ""; }; - 3EA2DACF1DFF3DF0006E2C65 /* PHAssetCloudExportQuotaCreateOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PHAssetCloudExportQuotaCreateOperation.swift; sourceTree = ""; }; - 3EA2DAD01DFF3DF0006E2C65 /* PHAssetRetryUploadOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PHAssetRetryUploadOperation.swift; sourceTree = ""; }; - 3EA2DAD31DFF3E0F006E2C65 /* PHAssetCloudExportQuotaOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PHAssetCloudExportQuotaOperation.swift; sourceTree = ""; }; - 3EA2DAD41DFF3E0F006E2C65 /* PHAssetDownloadOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PHAssetDownloadOperation.swift; sourceTree = ""; }; - 3EA2DAD51DFF3E0F006E2C65 /* PHAssetExportSessionOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PHAssetExportSessionOperation.swift; sourceTree = ""; }; + 3EA2DAD51DFF3E0F006E2C65 /* ExportSessionOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExportSessionOperation.swift; sourceTree = ""; }; + 3EA4C84C209017FB009F3D9B /* VimeoRequestSerializer+SharedUpload.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "VimeoRequestSerializer+SharedUpload.swift"; sourceTree = ""; }; 4D4E8D665288660F1F668B91 /* Pods_VimeoUpload.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VimeoUpload.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5C9E3CA41EA66187000D1F6B /* DescriptorKVObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DescriptorKVObserver.swift; sourceTree = ""; }; + 8E8F1F7C20CF05C40048E8BB /* ArchiveMigrating.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArchiveMigrating.swift; sourceTree = ""; }; + 8E8F1FC620EE9E2A0048E8BB /* ArchiveMigrator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArchiveMigrator.swift; sourceTree = ""; }; AF40D4E11CCE9CB600753ABA /* VimeoUpload.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = VimeoUpload.framework; sourceTree = BUILT_PRODUCTS_DIR; }; AF40D4E41CCE9CB600753ABA /* VimeoUpload.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VimeoUpload.h; sourceTree = ""; }; AF40D4E61CCE9CB600753ABA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -137,22 +130,17 @@ AF40D52A1CCE9DEB00753ABA /* VideoSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoSettings.swift; sourceTree = ""; }; AF40D52D1CCE9DEB00753ABA /* VimeoRequestSerializer+Upload.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "VimeoRequestSerializer+Upload.swift"; sourceTree = ""; }; AF40D52E1CCE9DEB00753ABA /* VimeoSessionManager+Upload.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "VimeoSessionManager+Upload.swift"; sourceTree = ""; }; - AF40D5301CCE9DEB00753ABA /* VimeoRequestSerializer+OldUpload.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "VimeoRequestSerializer+OldUpload.swift"; sourceTree = ""; }; AF40D5311CCE9DEB00753ABA /* VimeoResponseSerializer+OldUpload.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "VimeoResponseSerializer+OldUpload.swift"; sourceTree = ""; }; AF40D5321CCE9DEB00753ABA /* VimeoSessionManager+OldUpload.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "VimeoSessionManager+OldUpload.swift"; sourceTree = ""; }; AF40D5351CCE9DEB00753ABA /* ConcurrentOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConcurrentOperation.swift; sourceTree = ""; }; AF40D5361CCE9DEB00753ABA /* DeleteVideoOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeleteVideoOperation.swift; sourceTree = ""; }; AF40D5371CCE9DEB00753ABA /* ExportOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExportOperation.swift; sourceTree = ""; }; - AF40D5381CCE9DEB00753ABA /* ExportQuotaOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExportQuotaOperation.swift; sourceTree = ""; }; - AF40D53F1CCE9DEB00753ABA /* MeOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeOperation.swift; sourceTree = ""; }; - AF40D5401CCE9DEB00753ABA /* MeQuotaOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeQuotaOperation.swift; sourceTree = ""; }; + AF40D5381CCE9DEB00753ABA /* ExportSessionExportOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExportSessionExportOperation.swift; sourceTree = ""; }; AF40D5411CCE9DEB00753ABA /* VideoOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoOperation.swift; sourceTree = ""; }; AF40D5431CCE9DEB00753ABA /* CreateVideoOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateVideoOperation.swift; sourceTree = ""; }; - AF40D5441CCE9DEB00753ABA /* ExportQuotaCreateOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExportQuotaCreateOperation.swift; sourceTree = ""; }; + AF40D5441CCE9DEB00753ABA /* ExportSessionExportCreateVideoOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExportSessionExportCreateVideoOperation.swift; sourceTree = ""; }; AF40D54B1CCE9DEB00753ABA /* RetryUploadOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RetryUploadOperation.swift; sourceTree = ""; }; - AF40D54D1CCE9DEB00753ABA /* DailyQuotaOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DailyQuotaOperation.swift; sourceTree = ""; }; AF40D54E1CCE9DEB00753ABA /* DiskSpaceOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DiskSpaceOperation.swift; sourceTree = ""; }; - AF40D54F1CCE9DEB00753ABA /* WeeklyQuotaOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WeeklyQuotaOperation.swift; sourceTree = ""; }; AF40D5501CCE9DEB00753ABA /* VimeoUploader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = VimeoUploader.swift; path = ../../../VimeoUpload/VimeoUploader.swift; sourceTree = ""; }; C96050FE2A2D327759AE653C /* Pods-VimeoUpload.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VimeoUpload.release.xcconfig"; path = "../../Pods/Target Support Files/Pods-VimeoUpload/Pods-VimeoUpload.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -189,6 +177,14 @@ name = "Cameo (Private)"; sourceTree = ""; }; + 3EA4C84B209017FB009F3D9B /* Shared */ = { + isa = PBXGroup; + children = ( + 3EA4C84C209017FB009F3D9B /* VimeoRequestSerializer+SharedUpload.swift */, + ); + path = Shared; + sourceTree = ""; + }; 5DE6B4A5D1C90E1783FCACAB /* Pods */ = { isa = PBXGroup; children = ( @@ -232,7 +228,6 @@ AF40D4E41CCE9CB600753ABA /* VimeoUpload.h */, AF40D4FB1CCE9DEB00753ABA /* Descriptor System */, AF40D5051CCE9DEB00753ABA /* Extensions */, - AF40D5091CCE9DEB00753ABA /* Networking */, AF40D50A1CCE9DEB00753ABA /* UIKit */, AF40D5151CCE9DEB00753ABA /* Upload */, AF40D5501CCE9DEB00753ABA /* VimeoUploader.swift */, @@ -270,6 +265,8 @@ AF40D5051CCE9DEB00753ABA /* Extensions */ = { isa = PBXGroup; children = ( + 8E8F1FC620EE9E2A0048E8BB /* ArchiveMigrator.swift */, + 8E8F1F7C20CF05C40048E8BB /* ArchiveMigrating.swift */, AF40D5061CCE9DEB00753ABA /* AFURLSessionManager+Extensions.swift */, AF40D5071CCE9DEB00753ABA /* NSError+Extensions.swift */, AF40D5081CCE9DEB00753ABA /* NSFileManager+Extensions.swift */, @@ -278,14 +275,6 @@ path = ../../../VimeoUpload/Extensions; sourceTree = ""; }; - AF40D5091CCE9DEB00753ABA /* Networking */ = { - isa = PBXGroup; - children = ( - ); - name = Networking; - path = ../../../VimeoUpload/Networking; - sourceTree = ""; - }; AF40D50A1CCE9DEB00753ABA /* UIKit */ = { isa = PBXGroup; children = ( @@ -392,6 +381,7 @@ AF40D52B1CCE9DEB00753ABA /* Networking */ = { isa = PBXGroup; children = ( + 3EA4C84B209017FB009F3D9B /* Shared */, AF40D52C1CCE9DEB00753ABA /* New Upload (Private) */, AF40D52F1CCE9DEB00753ABA /* Old Upload */, ); @@ -410,7 +400,6 @@ AF40D52F1CCE9DEB00753ABA /* Old Upload */ = { isa = PBXGroup; children = ( - AF40D5301CCE9DEB00753ABA /* VimeoRequestSerializer+OldUpload.swift */, AF40D5311CCE9DEB00753ABA /* VimeoResponseSerializer+OldUpload.swift */, AF40D5321CCE9DEB00753ABA /* VimeoSessionManager+OldUpload.swift */, ); @@ -420,8 +409,8 @@ AF40D5331CCE9DEB00753ABA /* Operations */ = { isa = PBXGroup; children = ( + AF40D5351CCE9DEB00753ABA /* ConcurrentOperation.swift */, AF40D5341CCE9DEB00753ABA /* Async */, - AF40D5421CCE9DEB00753ABA /* Private */, AF40D54C1CCE9DEB00753ABA /* Sync */, ); path = Operations; @@ -430,38 +419,22 @@ AF40D5341CCE9DEB00753ABA /* Async */ = { isa = PBXGroup; children = ( - 3EA2DAD31DFF3E0F006E2C65 /* PHAssetCloudExportQuotaOperation.swift */, - 3EA2DAD41DFF3E0F006E2C65 /* PHAssetDownloadOperation.swift */, - 3EA2DAD51DFF3E0F006E2C65 /* PHAssetExportSessionOperation.swift */, - AF40D5351CCE9DEB00753ABA /* ConcurrentOperation.swift */, - AF40D5361CCE9DEB00753ABA /* DeleteVideoOperation.swift */, + AF40D5381CCE9DEB00753ABA /* ExportSessionExportOperation.swift */, + 3EA2DAD51DFF3E0F006E2C65 /* ExportSessionOperation.swift */, AF40D5371CCE9DEB00753ABA /* ExportOperation.swift */, - AF40D5381CCE9DEB00753ABA /* ExportQuotaOperation.swift */, - AF40D53F1CCE9DEB00753ABA /* MeOperation.swift */, - AF40D5401CCE9DEB00753ABA /* MeQuotaOperation.swift */, - AF40D5411CCE9DEB00753ABA /* VideoOperation.swift */, - ); - path = Async; - sourceTree = ""; - }; - AF40D5421CCE9DEB00753ABA /* Private */ = { - isa = PBXGroup; - children = ( + AF40D5441CCE9DEB00753ABA /* ExportSessionExportCreateVideoOperation.swift */, AF40D5431CCE9DEB00753ABA /* CreateVideoOperation.swift */, - 3EA2DACF1DFF3DF0006E2C65 /* PHAssetCloudExportQuotaCreateOperation.swift */, - 3EA2DAD01DFF3DF0006E2C65 /* PHAssetRetryUploadOperation.swift */, - AF40D5441CCE9DEB00753ABA /* ExportQuotaCreateOperation.swift */, + AF40D5411CCE9DEB00753ABA /* VideoOperation.swift */, + AF40D5361CCE9DEB00753ABA /* DeleteVideoOperation.swift */, AF40D54B1CCE9DEB00753ABA /* RetryUploadOperation.swift */, ); - path = Private; + path = Async; sourceTree = ""; }; AF40D54C1CCE9DEB00753ABA /* Sync */ = { isa = PBXGroup; children = ( - AF40D54D1CCE9DEB00753ABA /* DailyQuotaOperation.swift */, AF40D54E1CCE9DEB00753ABA /* DiskSpaceOperation.swift */, - AF40D54F1CCE9DEB00753ABA /* WeeklyQuotaOperation.swift */, ); path = Sync; sourceTree = ""; @@ -489,7 +462,6 @@ AF40D4DD1CCE9CB600753ABA /* Frameworks */, AF40D4DE1CCE9CB600753ABA /* Headers */, AF40D4DF1CCE9CB600753ABA /* Resources */, - AF226B77AD8E786AE78DC298 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -581,28 +553,16 @@ files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-VimeoUpload-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../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"; - showEnvVarsInLog = 0; - }; - AF226B77AD8E786AE78DC298 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/../../Pods/Target Support Files/Pods-VimeoUpload/Pods-VimeoUpload-resources.sh\"\n"; + 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"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -612,30 +572,28 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - AF40D5821CCE9DEB00753ABA /* MeQuotaOperation.swift in Sources */, AF40D5631CCE9DEB00753ABA /* VIMPHAsset.swift in Sources */, AF40D5691CCE9DEB00753ABA /* OldUploadDescriptor.swift in Sources */, 3C53EC271D219C8500B7AA6D /* VimeoResponseSerializer+Thumbnail.swift in Sources */, 5C9E3CA51EA66187000D1F6B /* DescriptorKVObserver.swift in Sources */, AF40D5641CCE9DEB00753ABA /* PHAssetHelper.swift in Sources */, AF40D5741CCE9DEB00753ABA /* VimeoRequestSerializer+Upload.swift in Sources */, - AF40D5811CCE9DEB00753ABA /* MeOperation.swift in Sources */, AF40D5841CCE9DEB00753ABA /* CreateVideoOperation.swift in Sources */, AF40D5831CCE9DEB00753ABA /* VideoOperation.swift in Sources */, AF40D56B1CCE9DEB00753ABA /* VideoDescriptor.swift in Sources */, - AF40D5761CCE9DEB00753ABA /* VimeoRequestSerializer+OldUpload.swift in Sources */, AF40D58A1CCE9DEB00753ABA /* RetryUploadOperation.swift in Sources */, AF40D5671CCE9DEB00753ABA /* DescriptorManagerTracker.swift in Sources */, AF40D5681CCE9DEB00753ABA /* UploadDescriptor.swift in Sources */, AF40D5601CCE9DEB00753ABA /* NSString+Conversions.swift in Sources */, AF40D5701CCE9DEB00753ABA /* NSError+Upload.swift in Sources */, AF40D5731CCE9DEB00753ABA /* VideoSettings.swift in Sources */, - AF40D57C1CCE9DEB00753ABA /* ExportQuotaOperation.swift in Sources */, + AF40D57C1CCE9DEB00753ABA /* ExportSessionExportOperation.swift in Sources */, AF40D55C1CCE9DEB00753ABA /* NSFileManager+Extensions.swift in Sources */, AF40D5651CCE9DEB00753ABA /* VideoDeletionManager.swift in Sources */, AF40D57A1CCE9DEB00753ABA /* DeleteVideoOperation.swift in Sources */, - AF40D5851CCE9DEB00753ABA /* ExportQuotaCreateOperation.swift in Sources */, + AF40D5851CCE9DEB00753ABA /* ExportSessionExportCreateVideoOperation.swift in Sources */, 3C53EC251D219C8500B7AA6D /* CAMUploadReqest.swift in Sources */, + 3EA4C84D209017FB009F3D9B /* VimeoRequestSerializer+SharedUpload.swift in Sources */, AF40D5571CCE9DEB00753ABA /* KeyedArchiver.swift in Sources */, AF40D5661CCE9DEB00753ABA /* VideoRefreshManager.swift in Sources */, AF40D5541CCE9DEB00753ABA /* DescriptorManager.swift in Sources */, @@ -647,32 +605,28 @@ 3C53EC261D219C8500B7AA6D /* VimeoRequestSerializer+Thumbnail.swift in Sources */, AF40D56D1CCE9DEB00753ABA /* AFURLSessionManager+Upload.swift in Sources */, AF40D5551CCE9DEB00753ABA /* DescriptorManagerArchiver.swift in Sources */, + 8E8F1F7D20CF05C40048E8BB /* ArchiveMigrating.swift in Sources */, AF40D58E1CCE9DEB00753ABA /* VimeoUploader.swift in Sources */, AF40D56C1CCE9DEB00753ABA /* VideoDescriptorFailureTracker.swift in Sources */, AF40D56F1CCE9DEB00753ABA /* AVURLAsset+Extensions.swift in Sources */, AF40D5591CCE9DEB00753ABA /* ReachableDescriptorManager.swift in Sources */, AF40D58C1CCE9DEB00753ABA /* DiskSpaceOperation.swift in Sources */, - 3EA2DAD21DFF3DF0006E2C65 /* PHAssetRetryUploadOperation.swift in Sources */, - AF40D58B1CCE9DEB00753ABA /* DailyQuotaOperation.swift in Sources */, AF40D5711CCE9DEB00753ABA /* NSURL+Upload.swift in Sources */, AF40D5531CCE9DEB00753ABA /* Descriptor.swift in Sources */, AF40D5771CCE9DEB00753ABA /* VimeoResponseSerializer+OldUpload.swift in Sources */, AF40D55E1CCE9DEB00753ABA /* CameraRollAssetCell.swift in Sources */, - 3EA2DAD61DFF3E0F006E2C65 /* PHAssetCloudExportQuotaOperation.swift in Sources */, 3C53EC241D219C8500B7AA6D /* CAMUploadDescriptor.swift in Sources */, AF40D5581CCE9DEB00753ABA /* ProgressDescriptor.swift in Sources */, + 8E8F1FC720EE9E2A0048E8BB /* ArchiveMigrator.swift in Sources */, AF40D55A1CCE9DEB00753ABA /* AFURLSessionManager+Extensions.swift in Sources */, - 3EA2DAD81DFF3E0F006E2C65 /* PHAssetExportSessionOperation.swift in Sources */, - AF40D58D1CCE9DEB00753ABA /* WeeklyQuotaOperation.swift in Sources */, + 3EA2DAD81DFF3E0F006E2C65 /* ExportSessionOperation.swift in Sources */, AF40D5791CCE9DEB00753ABA /* ConcurrentOperation.swift in Sources */, AF40D5781CCE9DEB00753ABA /* VimeoSessionManager+OldUpload.swift in Sources */, AF40D5721CCE9DEB00753ABA /* BlockTypes.swift in Sources */, 3C53EC281D219C8500B7AA6D /* VimeoSessionManager+ThumbnailUpload.swift in Sources */, AF40D56A1CCE9DEB00753ABA /* OldUploadRequest.swift in Sources */, AF40D57B1CCE9DEB00753ABA /* ExportOperation.swift in Sources */, - 3EA2DAD71DFF3E0F006E2C65 /* PHAssetDownloadOperation.swift in Sources */, AF40D55B1CCE9DEB00753ABA /* NSError+Extensions.swift in Sources */, - 3EA2DAD11DFF3DF0006E2C65 /* PHAssetCloudExportQuotaCreateOperation.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Gemfile b/Gemfile index a9ce7092..7c65ccd6 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' gem 'fastlane', '2.42.0' -gem 'cocoapods', '1.2.0' +gem 'cocoapods', '1.5.2' gem 'xcode-install', '2.1.0' gem 'xcpretty-json-formatter', '0.1.0' gem 'danger-xcode_summary', '0.1.0' diff --git a/Gemfile.lock b/Gemfile.lock index 429cbcd8..7f6bd876 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,92 +1,95 @@ GEM remote: https://rubygems.org/ specs: - CFPropertyList (2.3.5) - activesupport (4.2.9) + CFPropertyList (2.3.6) + activesupport (4.2.10) i18n (~> 0.7) minitest (~> 5.1) thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) - addressable (2.5.1) - public_suffix (~> 2.0, >= 2.0.2) + addressable (2.5.2) + public_suffix (>= 2.0.2, < 4.0) + atomos (0.1.2) babosa (1.0.2) claide (1.0.2) claide-plugins (0.9.2) cork nap open4 (~> 1.3) - cocoapods (1.2.0) + cocoapods (1.5.2) activesupport (>= 4.0.2, < 5) - claide (>= 1.0.1, < 2.0) - cocoapods-core (= 1.2.0) - cocoapods-deintegrate (>= 1.0.1, < 2.0) - cocoapods-downloader (>= 1.1.3, < 2.0) + claide (>= 1.0.2, < 2.0) + cocoapods-core (= 1.5.2) + cocoapods-deintegrate (>= 1.0.2, < 2.0) + cocoapods-downloader (>= 1.2.0, < 2.0) cocoapods-plugins (>= 1.0.0, < 2.0) cocoapods-search (>= 1.0.0, < 2.0) cocoapods-stats (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.1.2, < 2.0) + cocoapods-trunk (>= 1.3.0, < 2.0) cocoapods-try (>= 1.1.0, < 2.0) - colored (~> 1.2) + colored2 (~> 3.1) escape (~> 0.0.4) fourflusher (~> 2.0.1) gh_inspector (~> 1.0) - molinillo (~> 0.5.5) + molinillo (~> 0.6.5) nap (~> 1.0) - ruby-macho (~> 0.2.5) - xcodeproj (>= 1.4.1, < 2.0) - cocoapods-core (1.2.0) - activesupport (>= 4.0.2, < 5) + ruby-macho (~> 1.1) + xcodeproj (>= 1.5.7, < 2.0) + cocoapods-core (1.5.2) + activesupport (>= 4.0.2, < 6) fuzzy_match (~> 2.0.4) nap (~> 1.0) - cocoapods-deintegrate (1.0.1) - cocoapods-downloader (1.1.3) + cocoapods-deintegrate (1.0.2) + cocoapods-downloader (1.2.0) cocoapods-plugins (1.0.0) nap cocoapods-search (1.0.0) cocoapods-stats (1.0.0) - cocoapods-trunk (1.2.0) + cocoapods-trunk (1.3.0) nap (>= 0.8, < 2.0) - netrc (= 0.7.8) + netrc (~> 0.11) cocoapods-try (1.1.0) colored (1.2) colored2 (3.1.2) colorize (0.8.1) - commander-fastlane (4.4.5) + commander-fastlane (4.4.6) highline (~> 1.7.2) - cork (0.2.0) - colored (~> 1.2) - danger (4.0.4) + concurrent-ruby (1.0.5) + cork (0.3.0) + colored2 (~> 3.1) + danger (5.6.1) claide (~> 1.0) claide-plugins (>= 0.9.2) - colored (~> 1.2) + colored2 (~> 3.1) cork (~> 0.1) faraday (~> 0.9) faraday-http-cache (~> 1.0) git (~> 1) kramdown (~> 1.5) - octokit (~> 4.2) + no_proxy_fix + octokit (~> 4.7) terminal-table (~> 1) danger-plugin-api (1.0.0) danger (> 2.0) danger-xcode_summary (0.1.0) danger-plugin-api (~> 1.0) - declarative (0.0.9) + declarative (0.0.10) declarative-option (0.1.0) - domain_name (0.5.20170404) + domain_name (0.5.20180417) unf (>= 0.0.5, < 1.0.0) - dotenv (2.2.1) + dotenv (2.4.0) escape (0.0.4) - excon (0.57.1) - faraday (0.12.1) + excon (0.62.0) + faraday (0.15.2) multipart-post (>= 1.2, < 3) faraday-cookie_jar (0.0.6) faraday (>= 0.7.4) http-cookie (~> 1.0.0) faraday-http-cache (1.3.1) faraday (~> 0.8) - faraday_middleware (0.11.0.1) + faraday_middleware (0.12.2) faraday (>= 0.7.4, < 1.0) - fastimage (2.1.0) + fastimage (2.1.3) fastlane (2.42.0) CFPropertyList (>= 2.3, < 3.0.0) addressable (>= 2.3, < 3.0.0) @@ -125,8 +128,8 @@ GEM terminal-table fourflusher (2.0.1) fuzzy_match (2.0.4) - gh_inspector (1.0.3) - git (1.3.0) + gh_inspector (1.1.3) + git (1.4.0) google-api-client (0.12.0) addressable (~> 2.5, >= 2.5.1) googleauth (~> 0.5) @@ -134,22 +137,23 @@ GEM mime-types (~> 3.0) representable (~> 3.0) retriable (>= 2.0, < 4.0) - googleauth (0.5.1) - faraday (~> 0.9) - jwt (~> 1.4) + googleauth (0.6.2) + faraday (~> 0.12) + jwt (>= 1.4, < 3.0) logging (~> 2.0) memoist (~> 0.12) multi_json (~> 1.11) os (~> 0.9) signet (~> 0.7) - highline (1.7.8) + highline (1.7.10) http-cookie (1.0.3) domain_name (~> 0.5) httpclient (2.8.3) - i18n (0.8.6) + i18n (0.9.5) + concurrent-ruby (~> 1.0) json (2.1.0) - jwt (1.5.6) - kramdown (1.13.2) + jwt (2.1.0) + kramdown (1.16.2) little-plugger (1.1.4) logging (2.2.2) little-plugger (~> 1.1) @@ -159,74 +163,76 @@ GEM mime-types-data (~> 3.2015) mime-types-data (3.2016.0521) mini_magick (4.5.1) - mini_portile2 (2.1.0) - minitest (5.10.2) - molinillo (0.5.7) - multi_json (1.12.1) + mini_portile2 (2.3.0) + minitest (5.11.3) + molinillo (0.6.5) + multi_json (1.13.1) multi_xml (0.6.0) multipart-post (2.0.0) - nanaimo (0.2.3) + nanaimo (0.2.5) nap (1.1.0) - netrc (0.7.8) - nokogiri (1.7.0.1) - mini_portile2 (~> 2.1.0) - octokit (4.6.2) + netrc (0.11.0) + no_proxy_fix (0.1.2) + nokogiri (1.8.2) + mini_portile2 (~> 2.3.0) + octokit (4.9.0) sawyer (~> 0.8.0, >= 0.5.3) open4 (1.3.4) os (0.9.6) - plist (3.3.0) - public_suffix (2.0.5) + plist (3.4.0) + public_suffix (3.0.2) representable (3.0.4) declarative (< 0.1.0) declarative-option (< 0.2.0) uber (< 0.2.0) - retriable (3.0.2) + retriable (3.1.1) rouge (2.0.7) - ruby-macho (0.2.6) + ruby-macho (1.1.0) rubyzip (1.2.1) sawyer (0.8.1) addressable (>= 2.3.5, < 2.6) faraday (~> 0.8, < 1.0) security (0.1.3) - signet (0.7.3) + signet (0.8.1) addressable (~> 2.3) faraday (~> 0.9) - jwt (~> 1.5) + jwt (>= 1.5, < 3.0) multi_json (~> 1.10) slack-notifier (1.5.1) terminal-notifier (1.8.0) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) thread_safe (0.3.6) - tty-screen (0.5.0) - tzinfo (1.2.3) + tty-screen (0.5.1) + tzinfo (1.2.5) thread_safe (~> 0.1) uber (0.1.0) unf (0.1.4) unf_ext - unf_ext (0.0.7.4) - unicode-display_width (1.3.0) + unf_ext (0.0.7.5) + unicode-display_width (1.3.2) word_wrap (1.0.0) xcode-install (2.1.0) claide (>= 0.9.1, < 1.1.0) fastlane (>= 2.1.1, < 3.0.0) - xcodeproj (1.5.0) - CFPropertyList (~> 2.3.3) + xcodeproj (1.5.9) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.2) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) - nanaimo (~> 0.2.3) + nanaimo (~> 0.2.5) xcpretty (0.2.8) rouge (~> 2.0.7) xcpretty-json-formatter (0.1.0) xcpretty (~> 0.2, >= 0.0.7) - xcpretty-travis-formatter (0.0.4) + xcpretty-travis-formatter (1.0.0) xcpretty (~> 0.2, >= 0.0.7) PLATFORMS ruby DEPENDENCIES - cocoapods (= 1.2.0) + cocoapods (= 1.5.2) danger-xcode_summary (= 0.1.0) fastlane (= 2.42.0) fastlane-plugin-pretty_junit @@ -234,4 +240,4 @@ DEPENDENCIES xcpretty-json-formatter (= 0.1.0) BUNDLED WITH - 1.15.1 + 1.16.1 diff --git a/Podfile b/Podfile index edefcd46..c64ff330 100644 --- a/Podfile +++ b/Podfile @@ -6,14 +6,14 @@ project 'Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload.xcodeproj' target 'VimeoUpload' do platform :ios, '8.0' use_frameworks! - pod 'VimeoNetworking', :git => 'git@github.com:vimeo/VimeoNetworking.git', :branch => 'develop' + pod 'VimeoNetworking', '3.3.0' project 'Framework/VimeoUpload/VimeoUpload.xcodeproj' end target :'VimeoUpload-iOS' do platform :ios, '8.0' use_frameworks! - pod 'VimeoNetworking', :git => 'git@github.com:vimeo/VimeoNetworking.git', :branch => 'develop' + pod 'VimeoNetworking', '3.3.0' project 'Examples/VimeoUpload-iOS/VimeoUpload-iOS.xcodeproj' target "VimeoUpload-iOSTests" do @@ -24,7 +24,7 @@ end target :'VimeoUpload-iOS-OldUpload' do platform :ios, '8.0' use_frameworks! - pod 'VimeoNetworking', :git => 'git@github.com:vimeo/VimeoNetworking.git', :branch => 'develop' + pod 'VimeoNetworking', '3.3.0' project 'Examples/VimeoUpload-iOS-OldUpload/VimeoUpload-iOS-OldUpload.xcodeproj' target "VimeoUpload-iOS-OldUploadTests" do diff --git a/Podfile.lock b/Podfile.lock index 1555179d..59d6d41c 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -14,26 +14,21 @@ PODS: - AFNetworking/Serialization (3.1.0) - AFNetworking/UIKit (3.1.0): - AFNetworking/NSURLSession - - VimeoNetworking (0.0.1): + - VimeoNetworking (3.3.0): - AFNetworking (= 3.1.0) DEPENDENCIES: - - VimeoNetworking (from `git@github.com:vimeo/VimeoNetworking.git`, branch `develop`) + - VimeoNetworking (= 3.3.0) -EXTERNAL SOURCES: - VimeoNetworking: - :branch: develop - :git: git@github.com:vimeo/VimeoNetworking.git - -CHECKOUT OPTIONS: - VimeoNetworking: - :commit: f50522749886d01fb0c0acceb3e159ac8dc0c4de - :git: git@github.com:vimeo/VimeoNetworking.git +SPEC REPOS: + https://github.com/cocoapods/specs.git: + - AFNetworking + - VimeoNetworking SPEC CHECKSUMS: AFNetworking: 5e0e199f73d8626b11e79750991f5d173d1f8b67 - VimeoNetworking: 17f8d451e4a168044f619315d0cd821669676e67 + VimeoNetworking: 38e1eb8a06666c3e6321ee9422c573a8e0c861f9 -PODFILE CHECKSUM: dd1c01077873d3593d24f554a22b00f665c04b49 +PODFILE CHECKSUM: 3ae75518bbe4d19f3b4a562ffca9b52e64448a4a -COCOAPODS: 1.2.0 +COCOAPODS: 1.5.2 diff --git a/Pods/Local Podspecs/VimeoNetworking.podspec.json b/Pods/Local Podspecs/VimeoNetworking.podspec.json index dcd8eb61..070b7942 100644 --- a/Pods/Local Podspecs/VimeoNetworking.podspec.json +++ b/Pods/Local Podspecs/VimeoNetworking.podspec.json @@ -1,6 +1,6 @@ { "name": "VimeoNetworking", - "version": "0.0.1", + "version": "3.2.0", "summary": "A library for interacting with the Vimeo API.", "description": "An iOS/tvOS library for interacting with the Vimeo API.", "homepage": "https://github.com/vimeo/VimeoNetworking", @@ -9,13 +9,13 @@ "file": "LICENSE" }, "authors": { - "Alfie Hanssen": "alfiehanssen@gmail.com", - "Rob Huebner": "robh@vimeo.com", "Gavin King": "gavin@vimeo.com", "Nicole Lehrer": "nicole@vimeo.com", "Mike Westendorf": "mikew@vimeo.com", "Jason Hawkins": "jasonh@vimeo.com", - "Jennifer Lim": "jennifer@vimeo.com" + "Jennifer Lim": "jennifer@vimeo.com", + "Van Nguyen": "van@vimeo.com", + "Freddy Kellison-Linn": "freddyk@vimeo.com>" }, "social_media_url": "http://twitter.com/vimeo", "platforms": { @@ -25,7 +25,7 @@ "requires_arc": true, "source": { "git": "https://github.com/vimeo/VimeoNetworking.git", - "tag": "0.0.1" + "tag": "3.2.0" }, "source_files": "VimeoNetworking/Sources/**/*.{h,m,swift}", "resources": "VimeoNetworking/Resources/**/*.*", diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 1555179d..59d6d41c 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -14,26 +14,21 @@ PODS: - AFNetworking/Serialization (3.1.0) - AFNetworking/UIKit (3.1.0): - AFNetworking/NSURLSession - - VimeoNetworking (0.0.1): + - VimeoNetworking (3.3.0): - AFNetworking (= 3.1.0) DEPENDENCIES: - - VimeoNetworking (from `git@github.com:vimeo/VimeoNetworking.git`, branch `develop`) + - VimeoNetworking (= 3.3.0) -EXTERNAL SOURCES: - VimeoNetworking: - :branch: develop - :git: git@github.com:vimeo/VimeoNetworking.git - -CHECKOUT OPTIONS: - VimeoNetworking: - :commit: f50522749886d01fb0c0acceb3e159ac8dc0c4de - :git: git@github.com:vimeo/VimeoNetworking.git +SPEC REPOS: + https://github.com/cocoapods/specs.git: + - AFNetworking + - VimeoNetworking SPEC CHECKSUMS: AFNetworking: 5e0e199f73d8626b11e79750991f5d173d1f8b67 - VimeoNetworking: 17f8d451e4a168044f619315d0cd821669676e67 + VimeoNetworking: 38e1eb8a06666c3e6321ee9422c573a8e0c861f9 -PODFILE CHECKSUM: dd1c01077873d3593d24f554a22b00f665c04b49 +PODFILE CHECKSUM: 3ae75518bbe4d19f3b4a562ffca9b52e64448a4a -COCOAPODS: 1.2.0 +COCOAPODS: 1.5.2 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 6b50c4f6..f722b48e 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -7,207 +7,216 @@ objects = { /* Begin PBXBuildFile section */ - 00C05031BBA5BA48A00FE41348F41BDA /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 49CF485D82938742667C3CB53CCE9FED /* UIRefreshControl+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 02605A6A0E2F37A37F765B54D8435EFE /* VIMCredit.m in Sources */ = {isa = PBXBuildFile; fileRef = 029DD25355A20155F5263F91BB7FEB40 /* VIMCredit.m */; }; - 032716918FA2B8150F25BEA44FC1E35F /* Pods-VimeoUpload-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C0AF9E26B1AE44BE6700D2A8CF89819 /* Pods-VimeoUpload-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 048DF2FE55300A19AE363640BE8C2CA2 /* VIMUserBadge.h in Headers */ = {isa = PBXBuildFile; fileRef = 281BE9E67D00EF177F449FA07B3FB9C6 /* VIMUserBadge.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 080339FE8D3D0888FDF6C05AFF7FC108 /* Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2425F9FA4CEFF602F6F4A053F70B656 /* Mappable.swift */; }; - 0D1FFD30267C0776FD3E88EFF51E312F /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 994751133E5FF4982C5BCE1CAAB6A78B /* UIImageView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0FF332A4A3B2E0FC72A18026068678FA /* VIMVideoFairPlayFile.m in Sources */ = {isa = PBXBuildFile; fileRef = E062278A9F4389EDD1742AD9257524FC /* VIMVideoFairPlayFile.m */; }; - 140F458AB7312414FC423FEED70A3733 /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A255F1E920EA10EF5D5D5D29ABF77DA /* UIActivityIndicatorView+AFNetworking.m */; }; - 1439E0621A820C1E240A135EDB917A78 /* VimeoReachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D394EBCF2013AC95F4F316F6683EA0C /* VimeoReachability.swift */; }; - 173FC74D6CDD662BB7A7820D48E92CAF /* VIMCredit.h in Headers */ = {isa = PBXBuildFile; fileRef = 223024B664957866BB751A1110F1B9F0 /* VIMCredit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 178CD9C9934A47118DBF6ABCEF74DE0C /* VIMComment.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D485D3D976CC90259E83A2E9452E4A9 /* VIMComment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 187D2040010AAE21EB338F950BA62F30 /* Request+Trigger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0279AA9EFAF1A2B4A5CBF25821A5F353 /* Request+Trigger.swift */; }; - 19A239662363D8BFC6BA9BF3D5067368 /* Request+Authentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6671E602410D6092439152EADE23607 /* Request+Authentication.swift */; }; - 1B098FF61D835DC05E4818A260B6954F /* digicert-sha2.cer in Resources */ = {isa = PBXBuildFile; fileRef = D1F5A4A4953624BBBEF0F5FCB89E5137 /* digicert-sha2.cer */; }; - 1B55EABBDFF3E11D188FC728597AD739 /* VIMInteraction.h in Headers */ = {isa = PBXBuildFile; fileRef = CC338E19D1B0972E20EE7505BA2A23D2 /* VIMInteraction.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1C415F8572AB31B576839CD7D07F5ACA /* VIMThumbnailUploadTicket.m in Sources */ = {isa = PBXBuildFile; fileRef = F4690B8E90016909BB0EA81C311C0953 /* VIMThumbnailUploadTicket.m */; }; - 1CBE32C0E7A5B487D85887CECE9070E0 /* VIMVideoProgressiveFile.m in Sources */ = {isa = PBXBuildFile; fileRef = D112466303A0600AF69CB9E02EAA27E5 /* VIMVideoProgressiveFile.m */; }; - 1E2A6D057E20BE8F5ED3E594F7B8C286 /* AFNetworking-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 13485EB89727E5D2EC453EE2ACF262B1 /* AFNetworking-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 20B1A3A44C5B99E3C0E0111980E2D166 /* VIMUploadQuota.m in Sources */ = {isa = PBXBuildFile; fileRef = D91BABF53F46F9B94488819367CB559E /* VIMUploadQuota.m */; }; - 2158EA68FF692EC0E79E21A1868DDADC /* VIMVideo+VOD.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EDADBD03E681FF52A2DE74B6E5A00A4 /* VIMVideo+VOD.m */; }; - 247BEC62A7A059F149C2F1DEE37EC117 /* VimeoSessionManager+Constructors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E61F34F2E6B1E414299E9F4D8B5FFF8 /* VimeoSessionManager+Constructors.swift */; }; - 25C7F1E0679C775BC68F3F91A41898AB /* VIMGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = FA2516A7CB0A50CB9CD1053367E53327 /* VIMGroup.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 290A5C980B9B4A45125C22A3C6F4D52E /* VIMConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 635406386C5C563BE8F30C456CF4EBDE /* VIMConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 294377C03BC03F5CF2CCD7992872ECEF /* VIMVideoPlayFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 0627D0F046BC1A05A689F1B332F10429 /* VIMVideoPlayFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 006C915A85EACBE60F75135986A6BDB4 /* VIMVideoFairPlayFile.h in Headers */ = {isa = PBXBuildFile; fileRef = C5E4251390579CA8A4647B705BD6DD41 /* VIMVideoFairPlayFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 00C05031BBA5BA48A00FE41348F41BDA /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 714AC1F0B428E041A21A3D9426A0F56D /* UIRefreshControl+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0122CB804FBC8DBEDE9E3F1C5DE370E7 /* NSURLSessionConfiguration+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8614CB362CB4E3C9E03FCDFF2B3727C /* NSURLSessionConfiguration+Extensions.swift */; }; + 01BFDB7E7E77498861406FE7F563EC2F /* Request+Video.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D02A2893866B878CFEE338D26DC5313 /* Request+Video.swift */; }; + 01C097A72389242F9B53E8A8B21AD7E8 /* VIMPictureCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = AB1A7C0E9CF186DC326357962BEC7AF5 /* VIMPictureCollection.m */; }; + 032716918FA2B8150F25BEA44FC1E35F /* Pods-VimeoUpload-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E5825EEC0DE908A1A3B761CD116EEB4 /* Pods-VimeoUpload-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 080981D0829053FB0D91C3AC721C22E6 /* VIMUploadQuota.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DA9B270A4EBCC6043F579AA44249C2A /* VIMUploadQuota.swift */; }; + 0D1FFD30267C0776FD3E88EFF51E312F /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 34C6DA693B07265C4DCBAE97EE2D5594 /* UIImageView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1066E708C7BDD5A2F0CB700190824FBE /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7729272B0191CF0AEEC273F9FF8FFC1 /* MobileCoreServices.framework */; }; + 110895699164F5489FEA1B5862189EF1 /* AppConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2306B631FE1354BD0E5B81E1EB94D032 /* AppConfiguration.swift */; }; + 12F8248721BA64F46CB0036E970CA4D2 /* VIMPictureCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = E5B2FE6582270D74BE0CBFC7A389FC8A /* VIMPictureCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 13B2648F4C8600A30243D27AC672A0A5 /* VIMLiveHeartbeat.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4D18A3DC38EBDE55B7E5C609CC71FC /* VIMLiveHeartbeat.swift */; }; + 13DEA0CE6FC83504D998DEBF3B263336 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E72265D742A839587BC23CD8BD6AF14D /* Foundation.framework */; }; + 140F458AB7312414FC423FEED70A3733 /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F7ABBC91F9865BF0C8F0A5C033AC9F63 /* UIActivityIndicatorView+AFNetworking.m */; }; + 1454895436E2AEDC9FBE797C83971E31 /* VIMSeason.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F2E19F2D2D74E49166614264DA1D27 /* VIMSeason.m */; }; + 15606351AAE10A740FA83F707A743AC4 /* Pods-VimeoUpload-iOS-OldUploadTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E5E04F50AFCEEA3BAFE89741A3D7D956 /* Pods-VimeoUpload-iOS-OldUploadTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 167ACEC255DCBED6BFDC64FAD93DC1BA /* VIMCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 24231BD46B3810C7B980D8C357456050 /* VIMCategory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 173092A45F57338768EE067ECFDF126F /* ResponseCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC0E35EE90FE7076880E7A717BD0E534 /* ResponseCache.swift */; }; + 17AF6E91051C40A1909641FBD81CFCE6 /* VIMPolicyDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = E348B259AE23A208ABA2A71AED19ECE5 /* VIMPolicyDocument.m */; }; + 1A19B0C55294E4016F6F29DF11B37286 /* VIMRecommendation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0338339E81D84468FC3FEC3B4E0B751B /* VIMRecommendation.m */; }; + 1B098FF61D835DC05E4818A260B6954F /* digicert-sha2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 7AC12ADD13D05812352645C5BAEFD99D /* digicert-sha2.cer */; }; + 1B4B83A97D510F7DD45259F09EFFAE5A /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D90C6CE6DFFF0E79482EB6BEB9917B9D /* Security.framework */; }; + 1C762B3B85A259872E5A315B3C9FEC2F /* VIMVideo+VOD.m in Sources */ = {isa = PBXBuildFile; fileRef = 594B408BD401FB948979F4BDA15CC9EA /* VIMVideo+VOD.m */; }; + 1E2A6D057E20BE8F5ED3E594F7B8C286 /* AFNetworking-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DB8FD8229ED4AD2B0CBBBDDC20F09BAA /* AFNetworking-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E555F7B50932D19657F6BACF6482891 /* VIMVideoPlayFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 85AE31BCA21D12620C2D9B0F9386A7EA /* VIMVideoPlayFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E8B612557640DDAACEB2240D859E51B /* Request+Cache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2712EE1D549F6E58A7BB81334B608446 /* Request+Cache.swift */; }; + 1F0BE13B306FC15641F3B48939AD0389 /* VIMTrigger.m in Sources */ = {isa = PBXBuildFile; fileRef = 770CD4C87AE1AA8397D0F6E251DCC540 /* VIMTrigger.m */; }; + 21F296CA85D7E8EDCE29C153376A8E20 /* VIMUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7478AE1D1B107593F1494EC8E78E8B8 /* VIMUpload.swift */; }; + 25178C93155A9DC0484E1F299E2F7CB7 /* VimeoNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A6EFA92C2421798DB0FF8C3149FE8ACA /* VimeoNetworking-dummy.m */; }; + 25A450E1078CE9EB3462CF2D94651C0D /* VIMVideoDRMFiles.m in Sources */ = {isa = PBXBuildFile; fileRef = 6009E10F0E97820B85D42C5B1B5EADFB /* VIMVideoDRMFiles.m */; }; + 2697B3FCADF5B44B1B19381D7B54F194 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40F99392B8A59926F90CF0019AC7D57D /* Result.swift */; }; + 26F8805B8DFCDA44EC786A09D93900DA /* VIMPeriodic.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFF010DC16DF0D1F72CC6D06650AFAB1 /* VIMPeriodic.swift */; }; 2945C5B22511F26C276B9C23F35A10DC /* AFNetworking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5461D992F0D803F0F05DF72B2849301D /* AFNetworking.framework */; }; - 29476636EA86BEFC4CB833D3BB7A52D7 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 37C980B8A834DB882EE016253A514531 /* AFURLRequestSerialization.m */; }; - 29F875173B766FA11C5852EA61C674DC /* VIMVideoUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = A59DE65C23DA87346FB7BB1F08A38182 /* VIMVideoUtils.m */; }; - 2B0705CC26A4CBEE32A5A60284AED35B /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = BC9E61ED1EDFE2CD20FA90CF00D4608B /* UIButton+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2D99923831FFCE9F73C0C7D1E9F850E2 /* AppConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = E658A3C4548684F7BC6D6A4843EBEE23 /* AppConfiguration.swift */; }; - 2E50A1D999933C0305B3BD6C8E3DB6A8 /* VIMUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 49FDC86C4F0DDC07BF2B3A89084F05AF /* VIMUser.m */; }; - 301E7201FA2B9D755BCB08E3159E9F50 /* Request+Soundtrack.swift in Sources */ = {isa = PBXBuildFile; fileRef = A287772AED26189394F852F1383AC103 /* Request+Soundtrack.swift */; }; - 30F0BAE1DBB79BBB6CBD957EA8B89E4B /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72BF022BF820248A7DC00916D1CC4205 /* MobileCoreServices.framework */; }; - 32076D3DD644045CF79DFFEBB6BFF3F2 /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 9181B76CF70F368A91B6164CF5EA35AF /* UIButton+AFNetworking.m */; }; - 325DB73E71BF50607177ED27D34C4DEA /* VIMInteraction.m in Sources */ = {isa = PBXBuildFile; fileRef = D8008689D0B9CEE5A8B4F22EDD838235 /* VIMInteraction.m */; }; - 32F90DCD5121984682C68D40A51EC126 /* VIMThumbnailUploadTicket.h in Headers */ = {isa = PBXBuildFile; fileRef = 58E8E3B2AB8BBBBA38D3F57103C1E48D /* VIMThumbnailUploadTicket.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 331895E3C644AC16BE2DFF952ACA9A1B /* VIMPolicyDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = F5C6F4E723ED9B6BE8833278899E2B7A /* VIMPolicyDocument.m */; }; - 341C039B056DC8521ACB07FDC4857104 /* VIMCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 23AB835CE25AE0CA04362D10838A3CF0 /* VIMCategory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 34C88657FE7ABE9F833623F94952D253 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = DA2A360A317E5BEEB0074445003EDB17 /* UIProgressView+AFNetworking.m */; }; - 350E7D287CD9C8932489485A5BFD6F87 /* Pods-VimeoUpload-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD691F49DC930AF5CB1474C1A0C703B /* Pods-VimeoUpload-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35169A4520324E50813E653E223FA16F /* VIMAccount.h in Headers */ = {isa = PBXBuildFile; fileRef = D53F12E8EBC660E39EA3C8787CA543C4 /* VIMAccount.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35CBB7B255FD8D412AFCECBC4311A847 /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 927C6F167862BCAC06F4E08000EB8C58 /* AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 39A7BA428B81014747047554360D5933 /* VIMComment.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B670858BCB563B5FDA0DFAF36BAC42E /* VIMComment.m */; }; - 39B6EA71EDF5F8DDFEE1E4F5BEA0159B /* VIMVideoDASHFile.m in Sources */ = {isa = PBXBuildFile; fileRef = EF00725EFACBAD93B7F4DF1A20DC1F42 /* VIMVideoDASHFile.m */; }; - 39C4E7D235F2488DC19D3F16FFF5EF30 /* VIMGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = FF858E05AAA86C6C60607DC47DA2B2C9 /* VIMGroup.m */; }; - 3AF116B17421EFBBFF9847259CFFC2B3 /* Pods-VimeoUpload-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FEEA81B3DDF609A73C329D49E4B55284 /* Pods-VimeoUpload-dummy.m */; }; - 3BA7D30869081B9F81B6AD4DB1F37EA2 /* Request+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8251D7E0AE21801085F5938A385FEECA /* Request+Notifications.swift */; }; - 3D0097FB9A164EF53868F633A5D83647 /* Request+User.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D775ED9A8AEEA1BBA968B5740A34BFD /* Request+User.swift */; }; - 3DB6964EE0B28369CE1F7A6892E75CCA /* VIMVideoProgressiveFile.h in Headers */ = {isa = PBXBuildFile; fileRef = D3BA141A5553BAF7C116D19D1C669DC6 /* VIMVideoProgressiveFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3DD477AEFC34A1B8BE6C21CB3737112D /* VIMSoundtrack.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AF82FDAADDBD52AD4A5E5FD40451B8F /* VIMSoundtrack.m */; }; - 3E5288CBF6B2BE080B33EB12E809F2B4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB7FF3305C3F3E726189CE6DC03B4A6 /* Foundation.framework */; }; - 40630E6FBAF3FA1BA0316B7DEAB82F44 /* VIMVideo+VOD.h in Headers */ = {isa = PBXBuildFile; fileRef = 149A190283760F475F91178FCB276A53 /* VIMVideo+VOD.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 409A333CEF46B3875FD07DFD2D9C351B /* AuthenticationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A17090BB86BF96FF7E88156C3CB28957 /* AuthenticationController.swift */; }; - 41056CE5FE3FF5AEB88B9F37047F717A /* Pods-VimeoUpload-iOS-OldUploadTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 712E55059FAF64DCE6FDA02F37A5AA2E /* Pods-VimeoUpload-iOS-OldUploadTests-dummy.m */; }; - 42AF1BB1ED090CC9E588A463441D09E3 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B665811DA7B0645668081A93D378BB87 /* SystemConfiguration.framework */; }; - 430264544D67783EE06E5CBD9F8A7538 /* VIMCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = F4B92013945EAA4735C74F5F20F119CB /* VIMCategory.m */; }; - 43E008C211B853777039F3785D922B98 /* VIMBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = C550175B7EC7075E2835E8C7DCC2723F /* VIMBadge.swift */; }; - 4442D8453D210EFC13CFE2CAF862ED1D /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F6FB24A5536DD004B48F00834B72CAAA /* AFHTTPSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 45F802D04B3BE0CAEC586C2F3016027B /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F5BC750D923B3B868099617A48936CF /* UIActivityIndicatorView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 47A83B3FCA8F2D023C47AD1E90388C3C /* Pods-VimeoUpload-iOS-OldUpload-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CCB098F1FA5708F997DE9A18F1CA402A /* Pods-VimeoUpload-iOS-OldUpload-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 47EEFB29B92A111BE2E154B699814BBF /* VIMVODItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C5391EE3E5EBC61C92F45484F77F90B /* VIMVODItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 47F04CBDF6C54B220F6AEECEF15264D5 /* AFAutoPurgingImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = C5624A087C10DE994D4F380D76D11CD8 /* AFAutoPurgingImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4A5A50BC35B046280FF471A025C8F103 /* Pods-VimeoUpload-iOS-OldUploadTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 93737ECEFDDCCE11126CF5D863927683 /* Pods-VimeoUpload-iOS-OldUploadTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4F4DAAC9FD07C2F53A8FCAB14DDC976D /* VIMSeason.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BD0889F5B218566401FFF6EFC7448B1 /* VIMSeason.m */; }; - 51047C1945103943F70BEADE83725630 /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = D24A7C1D41EE2BA30BB03DAF0C03B000 /* UIWebView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 57782C2C26EC21E455E8B710E011BBAE /* VIMPicture.m in Sources */ = {isa = PBXBuildFile; fileRef = A33177A8F3A1862EEA26D30A1D63CC07 /* VIMPicture.m */; }; - 57A40C3321A9157AB2711E100C58DD2E /* VIMPictureCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = C99A95A93AB75AFFF2B725A21CFF7377 /* VIMPictureCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 59660663BC5E565B0F4F994E3688083D /* VIMModelObject.h in Headers */ = {isa = PBXBuildFile; fileRef = ECF46B5E5956D18C9AAD34EE80C8F77E /* VIMModelObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5A1D34D104D42B1EE399E23BCD7935A0 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 213E236A9902F5C48054532E31B83A86 /* AFURLResponseSerialization.m */; }; - 5AFC1E2FD02BA2FADA6BA4E264CD032A /* String+Parameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE1A0D9A33DD15FBE6EBBA8E2BC96A15 /* String+Parameters.swift */; }; - 5B6A5C2A7EC9E33337DE6287258CE806 /* Request+ProgrammedContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E9A61DA32392AD194FABDB69398E9DA /* Request+ProgrammedContent.swift */; }; - 5BA9E478846DD5BD2F10533663C65DB0 /* VimeoNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A0A4AB2432D657C9297E64DCDDB03A9 /* VimeoNetworking-dummy.m */; }; - 5D3BDA09F740ECC2062E1876B3E9397C /* VimeoRequestSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12603000BA159A15FCFE312613690391 /* VimeoRequestSerializer.swift */; }; - 5D862A3CE5B17C76E3F21ED62FBDB757 /* VIMActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 14988764C33C43F624F78A9FD05EA2D7 /* VIMActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FF671C4F478DAC06FFC03103078E43C /* Request+Configs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9717512502B2CBB64AF956ABFD3ECF10 /* Request+Configs.swift */; }; - 6002D7357AE628BBDB572FC9EFB211B0 /* VIMVideoHLSFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D06933F7D0190E13136B6084CCF19FD /* VIMVideoHLSFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 643CE7142699088977B0ACB353A4FE6B /* Objc_ExceptionCatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F622C8797560A4BC9EDB9A36960BB2C /* Objc_ExceptionCatcher.m */; }; - 649E78B5EA450FABDF5201E31F265FAB /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 19CEB26626C9812FA30C7379ACA089D6 /* AFNetworkActivityIndicatorManager.m */; }; - 6573AF9ABA59AC8D1F52B07088197F71 /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E1665CCFC918114440A9C679C0EBC34 /* AFSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 678D568B6F7293E48418DA96A3C9A81D /* VIMAppeal.h in Headers */ = {isa = PBXBuildFile; fileRef = D1C4237239681814FFDD6E43465463EE /* VIMAppeal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 687E4C8F5F2ECDB2B595746B57C61B94 /* Pods-VimeoUpload-iOS-OldUpload-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F037B43615D083286E88811012A9A172 /* Pods-VimeoUpload-iOS-OldUpload-dummy.m */; }; - 69B1AF537561D8F581165B58FCDD81FB /* VIMVideoDASHFile.h in Headers */ = {isa = PBXBuildFile; fileRef = DB074C96C719EAE42367359FBE57E21F /* VIMVideoDASHFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6A4FBD31811C902A97F3B75EE81B0ADD /* VIMActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 08D1BA8A90EDC00E8EB28A886F2B4CD7 /* VIMActivity.m */; }; - 6B0432E81EC7132ADF0516729B74C724 /* VIMSizeQuota.h in Headers */ = {isa = PBXBuildFile; fileRef = CF8F7E3CBB1B67B094851E251BC41BC2 /* VIMSizeQuota.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6CB3E0E344A7E19BA2ADE572A9E91C7F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB7FF3305C3F3E726189CE6DC03B4A6 /* Foundation.framework */; }; - 6DF3CEDD6910937636F93F666E1FEF2C /* NSError+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7907829F15403992DC9A4B548CD41E1 /* NSError+Extensions.swift */; }; - 6E4D1B3AADC1FD45199854A24E146F0C /* Request+Video.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44AB41921F9D9B0620A5C3553FE4B72 /* Request+Video.swift */; }; - 7093D03FB36F62140CD7CB962C129184 /* Request+Channel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B32A79195E4789E0D38A7C199CAB76A /* Request+Channel.swift */; }; - 719B05BF832EB807BD9313C39D9C1923 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D38065BB0B23FBE674985A0F8B72EC9 /* Result.swift */; }; - 7417910A809FB46D7CBE239E1E41F40E /* VimeoSessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FBA6678CB2E7680B2E44F4375609022 /* VimeoSessionManager.swift */; }; - 7715E1A66A2F21A0C5F8B913E79FC9F8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB7FF3305C3F3E726189CE6DC03B4A6 /* Foundation.framework */; }; - 778D21F2C8E74994835AF74CF639561E /* VIMVideoPlayRepresentation.m in Sources */ = {isa = PBXBuildFile; fileRef = 494E66C69C53C64522E95F995B56BAB5 /* VIMVideoPlayRepresentation.m */; }; - 789D749690B308852115FF20CD982A69 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BEAA2896C0F3DE743E13BA30642E91F1 /* CoreGraphics.framework */; }; - 78A21D825370B0C218AEF351105AC567 /* VIMVideoUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = C9EA8CD923B36DA3EAD55FD3879A502F /* VIMVideoUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7A112C0F21A62CB6F1AA8D917A6EEA6C /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FB6A99CF789B5BEA9456117EA2855947 /* AFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7CE16B1BF75DF396768A0A3CFD968DB1 /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F9A28D7473445BAC2DF8ED3294808DCF /* UIWebView+AFNetworking.m */; }; - 7DEBA2ACA54253C65CA292BCF51B476B /* VIMVODItem.m in Sources */ = {isa = PBXBuildFile; fileRef = E7FF72F2B598E25BCF0422AC7894A20D /* VIMVODItem.m */; }; - 7F7668339CCE57BC809523B5613E0BCF /* Pods-VimeoUpload-iOSTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BBC4BAA3C77B593AEF959B3D4C03A3EE /* Pods-VimeoUpload-iOSTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 80E8BEBDC57B013AB61A2D4AFED25076 /* VIMVideoFairPlayFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 90087B0D4E77D07B4E9F1D217680CB6B /* VIMVideoFairPlayFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 82752C5EBCDE2118D9B50C7623D5BF3B /* VIMAppeal.m in Sources */ = {isa = PBXBuildFile; fileRef = DF54671CD48BA10A8DA67E5817580E1A /* VIMAppeal.m */; }; - 82D554EC9FB9A62D935B6555325F5898 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C29192B1F683D403AFFD632D65221D49 /* Security.framework */; }; - 84F4F2115F97F8FE14D0BEBE38A772E0 /* VIMVideo.h in Headers */ = {isa = PBXBuildFile; fileRef = F321BEF3CBD2446312D1D121E254290F /* VIMVideo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 85849DB10CF2386821DEB59E77404730 /* VIMUploadTicket.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E79D6C3283CB5EF1812B0021DA11FC5 /* VIMUploadTicket.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8588C695824D58E2A9EAAE4D4A0E1BB9 /* VIMPictureCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DD953AC1282A72EB724028504DB991B /* VIMPictureCollection.m */; }; - 862CA2F597532E9D63DB4C787AD17AA7 /* VIMPicture.h in Headers */ = {isa = PBXBuildFile; fileRef = 95DCAF0CD8E8A04FB849D0EB3ED32D01 /* VIMPicture.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8670EB68C4D288954C15F2F9C2C935EE /* ExceptionCatcher+Swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54035CD32BBAAD35D60CCBDDEC9CEE44 /* ExceptionCatcher+Swift.swift */; }; - 86BE885A7FB6FC6F0B4E1C905DA7B64C /* VIMPreference.m in Sources */ = {isa = PBXBuildFile; fileRef = 63AC97C994F4A5DEDCFAB03FE2835587 /* VIMPreference.m */; }; - 8A689A9EF197DC68E6947A869A6EE657 /* VIMChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A5768E8C2A4AD09EE82653EC6A4E43A /* VIMChannel.m */; }; - 8BFB2E98B986C0843E8FB1D4C63DC4B1 /* VIMVideoHLSFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 761B02BADB3E7B60DB3FF23CD76B6AF2 /* VIMVideoHLSFile.m */; }; - 8C006C64C5E77BEBECE54877B7BA22F0 /* ErrorCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EB63AB5D89A08887565D82CBAC4A0A3 /* ErrorCode.swift */; }; - 8CE568F7A75458FEE8E5920F28460A1A /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CB779FF1FA13F0CA99A13B6A0857464 /* Response.swift */; }; - 8DC561474BEA410319DF3774BD2FE0D8 /* VIMMappable.h in Headers */ = {isa = PBXBuildFile; fileRef = C99148A0B79F2354BFE4ACBDE082A809 /* VIMMappable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8E1AF09B6DC4CAE39BD8296809C3EB0E /* VIMUploadTicket.m in Sources */ = {isa = PBXBuildFile; fileRef = 78D4C6E7DFAF7621B138929C43CEAD58 /* VIMUploadTicket.m */; }; - 8EA375C3F30127C965344B1369E6CC16 /* PinCodeInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF6081927D4DC329FD7ED0F883D3B576 /* PinCodeInfo.swift */; }; - 91258FC91233FB6DA9C05902C106514B /* VIMUploadQuota.h in Headers */ = {isa = PBXBuildFile; fileRef = B784B3FDEB773915E04502100EB6F701 /* VIMUploadQuota.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 91DFEC02233D3AB83A35E5756A18A36C /* VIMUserBadge.m in Sources */ = {isa = PBXBuildFile; fileRef = 1541E9FB35206F5192232467FC5B429D /* VIMUserBadge.m */; }; - 9264BD69AFA8EE74F0D7F0EBD74F762F /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = BFECB493111928B6FBC7E30A53CD6C0C /* UIImage+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 93096AB36C54BB032194725968A44EA3 /* VIMTag.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1DAA99F189991E9808E85A60902767 /* VIMTag.m */; }; - 9336820057A592619B89406F1DF4AEC9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB7FF3305C3F3E726189CE6DC03B4A6 /* Foundation.framework */; }; - 93DFC0CC12E763AE770017349EE009D1 /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 40C278A2D7295B9C745A8F7C78D039A3 /* AFNetworkReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 948458DC0A9308A2D8C018C37FB7BBDD /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = F482E1B7506500767CF4C18ED47EC41B /* AFURLResponseSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 95FFAABEF0F35C113EC0189D39FF80A0 /* ResponseCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C2608F23A5BD6202F176337A9F85D70 /* ResponseCache.swift */; }; - 99B51DB5B80BBD7A2597A8E79C34290D /* NSURLSessionConfiguration+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E057FC5D3359A0584EF6495E7E3F6939 /* NSURLSessionConfiguration+Extensions.swift */; }; - 9AA200004AD2C86C440D0365294E8C25 /* VimeoClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BC19A9538D0325AF47F77D4BDAB05E5 /* VimeoClient.swift */; }; - 9E155F6AE09BB4243CAE115081560893 /* VIMTrigger.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A6089F06B69AA4011F16D1BE20C6240 /* VIMTrigger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9FE718C13D939CB402496CD9D1644692 /* SubscriptionCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = A784B675172C4B624597642F4BFE56E7 /* SubscriptionCollection.swift */; }; - A08EFFFF7DFACA49EB5F271ACD172E91 /* NetworkingNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0B7E1AC52305E19ED018CF401606970 /* NetworkingNotification.swift */; }; - A280ED07778424BB4FB5E2596B927323 /* VIMQuantityQuota.h in Headers */ = {isa = PBXBuildFile; fileRef = D39B2D537CC8914B5AB105B380641859 /* VIMQuantityQuota.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A346ABB83FE181956A7DC49EDF3EF2DB /* VIMVideoPlayRepresentation.h in Headers */ = {isa = PBXBuildFile; fileRef = A5CFEC28DA0D60B074FCFDEBB948B940 /* VIMVideoPlayRepresentation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3591DEDA776B48C026E7F9144981E58 /* AFAutoPurgingImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 600D472EDC99CA818353A5D89F987011 /* AFAutoPurgingImageCache.m */; }; - A398D63C8DED664D99A864D79881A13C /* AFImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BFCEC6FBC3145714CC6CF4DFC949341 /* AFImageDownloader.m */; }; - A4CD0619CCDE6268C1769EF1379D3C5F /* Request+Comment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3955D9A7EC2CD5C86E892193E62E9E0F /* Request+Comment.swift */; }; - A73687DB3AA0983108BAEBF72C2340ED /* VIMPrivacy.m in Sources */ = {isa = PBXBuildFile; fileRef = A95F8642BCADE8FFFF3519DABF17AB95 /* VIMPrivacy.m */; }; - A8C297643282E0CF5E7DF9CB6E23A0D4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB7FF3305C3F3E726189CE6DC03B4A6 /* Foundation.framework */; }; - A8E116A9A098FE44D9CEAA85FCF9D408 /* VIMTag.h in Headers */ = {isa = PBXBuildFile; fileRef = CA212CD04BA30762B1CD913421957487 /* VIMTag.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A8F1B4C9D1D600563C86DF374BB1FF59 /* VIMVideoPlayFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 68D1AD311A8197BF776022C79C5F1ACE /* VIMVideoPlayFile.m */; }; - A90F6D31147BD8FCEC444B7D99EB4798 /* AccountStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1251E50741E644D6312C93A72D228CC2 /* AccountStore.swift */; }; - AC2F13906A8DF6AB50AB826835026D89 /* VIMTrigger.m in Sources */ = {isa = PBXBuildFile; fileRef = F268DB0DE841D483B2E3C48B95F2013B /* VIMTrigger.m */; }; - AE976B0E8E3DD81E4F49DBEF19D3C0AD /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 01FD7E491D786675786392B66C27218C /* AFURLSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B16A078FC7FBC172A266A336AEF7F673 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = A0648207A189AF57F74C57B6416EFA4B /* UIRefreshControl+AFNetworking.m */; }; - B1A9884315D8230C190E19E5B8E87C5A /* VimeoNetworking-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F86DFC5D05E754156CA58540DAA1BAC /* VimeoNetworking-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B259265059C9F541C99A43E37B2CEFA6 /* Request+Picture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A1207562C5BD2A71A7DC1A59A824D64 /* Request+Picture.swift */; }; - B3389B8752DF8E9154754220D09D26C9 /* Dictionary+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B88A43F94D3F984AA9F607E6D336933C /* Dictionary+Extension.swift */; }; - B793155915EDF853F2B515F87230AEC4 /* VIMObjectMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 813FFFC7FD25CCBEFAADC204524CBF26 /* VIMObjectMapper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7A153052BBBE07EE5C653777F052C3F /* VIMSoundtrack.h in Headers */ = {isa = PBXBuildFile; fileRef = 439CBA3DC46A23846FBD30F048BE086A /* VIMSoundtrack.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B9331886EB47FEE9CC9739C45CEE35CB /* VIMVideoPreference.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FA3810B9E6829C7403D5D0F19EDACFD /* VIMVideoPreference.m */; }; - B9B6393A6D55E217BE87C42FAD925D07 /* Objc_ExceptionCatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F578FD9D3A32CB94B4560392C77383F /* Objc_ExceptionCatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BD3361E6028D2FD289D7E9BEF5392A6A /* VIMRecommendation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E34B0E33381605BC20762BA521A846C /* VIMRecommendation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF2E64C3355CB069145EAF61D1223910 /* VIMVideoFile.m in Sources */ = {isa = PBXBuildFile; fileRef = EB013DBE7F6A441F3FC60D8F0F84FE89 /* VIMVideoFile.m */; }; - C1539E868EAA683B1B80A0F530ACCDF1 /* VIMVideoDRMFiles.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B409357FA7F1EE47504EB11F838F1FD /* VIMVideoDRMFiles.m */; }; - C50D0C30AF8712AFFA42B7F9C4AC2C7B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB7FF3305C3F3E726189CE6DC03B4A6 /* Foundation.framework */; }; - C7A8FB48AC76C370F585B5E609AFC6F9 /* VIMVODConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 40FF5ABC89E5B4D81BB332308EBD6ABA /* VIMVODConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C99047215776E7CB95C77ADC520B7001 /* Spatial.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5427FA6B4360346236E6133084DFC10E /* Spatial.swift */; }; - CB84112F8B8F712719EA050973CCC8D1 /* PlayProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77C69108CD986B77A9C0122212FD6613 /* PlayProgress.swift */; }; - CCFCAB315F227FF02C9DCACB24FA0AAD /* VIMPrivacy.h in Headers */ = {isa = PBXBuildFile; fileRef = B5BD0E4A9E13D4E5939E74CE749ACF61 /* VIMPrivacy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CD632493290A2E4430F2F12E548B03B2 /* VIMNotificationsConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AF9D80E0A02BB32BC9B773852EB179C /* VIMNotificationsConnection.m */; }; - CE513A764AEF1DF8E3788D05B03CD15E /* VIMPolicyDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = A69D06730C5B3566A7B8FF5A91C529C1 /* VIMPolicyDocument.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CE5AC9A4F95093069A44087A1689ACCB /* VIMNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = CB8AD1BB40CAF74E14801DCD2423742E /* VIMNotification.m */; }; - CEB2F0E229EF841D92C780C3FFDF1BEA /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C61AA5DF51D49E9C9ADF4B82C45FE7B /* AFSecurityPolicy.m */; }; - CF1A8B5A81D3363C5152C2070605E3FA /* Pods-VimeoUpload-iOSTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A8B0BB58820A0B1DA182E061E886411B /* Pods-VimeoUpload-iOSTests-dummy.m */; }; - CF276AE6C6EFAF02D2DD4373E92D0648 /* Subscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1625E43ADF6E7014140E962E4D8D2E15 /* Subscription.swift */; }; - CF287829627F26B2EB4382B897D06A0E /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 01B662642B6C94DAE9E304C3539BB0F0 /* AFNetworking-dummy.m */; }; - D1D2D9F03C9CBF28F01F5F293325881F /* VIMVideoDRMFiles.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B62CA840DF965405A11E44123254BAC /* VIMVideoDRMFiles.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D27E342A895F8F0BF51D6B926ECA83FF /* VIMObjectMapper+Generic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FE2618631D9AF7217C1FC477FE2046E /* VIMObjectMapper+Generic.swift */; }; - D2D5FEA35F9DC0817488AC6B206C9C5B /* VIMConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = D6E40E32356AA402232F099288457708 /* VIMConnection.m */; }; - D30636F1DCCA97413888F0D0DFB63ADF /* VIMPreference.h in Headers */ = {isa = PBXBuildFile; fileRef = 54DC90B45F8449D72BD99F888633B19A /* VIMPreference.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D4812514244A32F4EF17A3403CEB49E0 /* Scope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DFE210185943D679FFCBBA4B56CF1A6 /* Scope.swift */; }; - D4E80BD7EAAB83200183110578A80591 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CA3350835CEC5107C6C293FE2D04E77F /* AFURLSessionManager.m */; }; - D59D192A899629E78E80F8EA3AD0122B /* VIMModelObject.m in Sources */ = {isa = PBXBuildFile; fileRef = DEA77B71C751EBAB48B5E4F1CB110265 /* VIMModelObject.m */; }; - D71682AD848B134EB74BB0B27F9EE2F6 /* VIMNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = F780713BAF9F48FFB39AC81244609869 /* VIMNotification.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D73A12F20CB1A1B5669AF75288D52029 /* VIMUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A8AD460DA5A2F6BCCC1E450EFCD4B60 /* VIMUser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D7B8668CAC424FB726E911830640210E /* Request+Category.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AED40431616221804026E870D2C4C82 /* Request+Category.swift */; }; - D8384F0B4B1075A71813D409FD144A3F /* Request+PolicyDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58B62EE71CA018F665D8A742ADA3787A /* Request+PolicyDocument.swift */; }; - D90CAB5734D50648EE042D7F6EF739C7 /* VIMSizeQuota.m in Sources */ = {isa = PBXBuildFile; fileRef = 20B9A2C2DE00876AF465AD16D2C4C5BA /* VIMSizeQuota.m */; }; - DA1A46D62BEA2431AC6FD66D58E28C27 /* VIMAccount.m in Sources */ = {isa = PBXBuildFile; fileRef = 338DFD9D7A1D0BF695F33079268D7506 /* VIMAccount.m */; }; - DC395092187FBC815E499B755553E751 /* Pods-VimeoUpload-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 20429F7864AF6AA08CDB4E78DE31A84C /* Pods-VimeoUpload-iOS-dummy.m */; }; - DCD624F830FDEDF0AE7E3DB66BBFFEC2 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79ADD6A0AFBC97CBC10D3AC1EA024DC /* Request.swift */; }; - DD887A93A200A87A51B3D00BD1B80D20 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B4C942B4810471391926C69DDF06F459 /* AFNetworkReachabilityManager.m */; }; - DDC2160DEE810F9EB54D5F4A4085FD06 /* Request+Cache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FECF370ACCB82ABBBADEB2C23066C4F /* Request+Cache.swift */; }; - DE38B59B4D7D872FEF317D301D7D0113 /* VIMVideoPreference.h in Headers */ = {isa = PBXBuildFile; fileRef = 528FFF37101F041C21101734F752C2AE /* VIMVideoPreference.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E23B9A6F533461CB33C0FA6FB59E3AB2 /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = AF5691A664BC371E586B7A9B0EA405C8 /* UIKit+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E9083640FA1E37FD7F1CD8C3D3113F71 /* VIMVideo.m in Sources */ = {isa = PBXBuildFile; fileRef = 70A33F9F7F54570EFF69A144E3A3F760 /* VIMVideo.m */; }; - EAEBAD0876E9C66617B5366DC192ABDB /* VIMSeason.h in Headers */ = {isa = PBXBuildFile; fileRef = 14EA79709F08DA21BEFAD6B727216E8A /* VIMSeason.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EAF16633DB3C992CF975BE4A2932D41C /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D84ED393688D7F4321FF3478294DAAA /* AFHTTPSessionManager.m */; }; - F1201DC66104CE2A45B7D54394115AFC /* VIMVideoFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7FE012B283AB95DB394786375AF14C /* VIMVideoFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F1CAA2EBDDFF558DEF98684F2479A7AF /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A85F49E86198194EBD238BC4D17B241 /* AFURLRequestSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F28BC46F4F246E19C0A9B040C5834B32 /* KeychainStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9F540643D34B036DF1F955F1B4921C /* KeychainStore.swift */; }; - F2D899C7AA0D7FC20160091BB9D31CF3 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A0EACC1726F08952CBA6D09D34A5E69 /* UIImageView+AFNetworking.m */; }; - F42023CADF80388A7EE24CDC3378D896 /* VimeoNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 78E698DE1E56024C0E969710944608D8 /* VimeoNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F42AFA87354F2430D2381ABF91869006 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3731BACEDB31E0440FF7D8D8C0C5E492 /* Constants.swift */; }; - F51ECD19F851C26CEB4925B83D85ABDA /* VIMVODConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 6402A355C8648B1DF96ACEBE585B656F /* VIMVODConnection.m */; }; - F5B609F28B2E1EBF8AA9348E28333378 /* VIMRecommendation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A4BE21C00C1529F947AEADC6AFEC0AB /* VIMRecommendation.m */; }; - F6258BE02142A4CCAEBB00A2C4CEE82B /* VIMObjectMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = AE0DF6D9E98751FE374466891CF22E93 /* VIMObjectMapper.m */; }; - F69AEBDF86112551CBE86B9A63D569AF /* VIMChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = B7F8E371904C34C30A4498FCCBE5F2AB /* VIMChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F76D02044108AE9B76A2EBC583A3F403 /* VIMProgrammedContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70B44A30D123EB8B4E494C3750DC262F /* VIMProgrammedContent.swift */; }; - F80A5BF96718E74CF0164FF1CF6CACE6 /* VimeoResponseSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5E07926E2F0D6EBCCF626360CF3A857 /* VimeoResponseSerializer.swift */; }; - F82C4C45E9CC756A62AA0F72D001B83D /* VIMQuantityQuota.m in Sources */ = {isa = PBXBuildFile; fileRef = 33B7F78148EB2BCFE6839B0A753DA5A7 /* VIMQuantityQuota.m */; }; - F84DD74BB7F612DE372F8C051420DF72 /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = D65690666F392CD6883791300864C4BF /* UIProgressView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F92477EC3C798D43C7DA759DF0AFDE34 /* VIMNotificationsConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 500FE9C937B576F7F751188E9C8B58C2 /* VIMNotificationsConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F94CAA71DF535013FE840C72ED995ACA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB7FF3305C3F3E726189CE6DC03B4A6 /* Foundation.framework */; }; - F9988F40EBF406C9B8DFBBED61ECFC9C /* Request+Toggle.swift in Sources */ = {isa = PBXBuildFile; fileRef = B39620FF19ACEB51C1DEA18A7A12B2D0 /* Request+Toggle.swift */; }; - FEF6EACE962EAE70E2EAC5F3C83EF7C8 /* AFImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = A6B196AB2ADA189C96F4A92DF020A2AB /* AFImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 29476636EA86BEFC4CB833D3BB7A52D7 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BB9383C2F5F90FE89247B5400744EEE /* AFURLRequestSerialization.m */; }; + 2B0705CC26A4CBEE32A5A60284AED35B /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = CFAE1CB42591FDBB0E3C6CDA2D9D8EBE /* UIButton+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2BE918B073FD534F3D63785B26F34726 /* VIMBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = A250189A49355B43BD9E62364DDB456F /* VIMBadge.swift */; }; + 2D8D15E021ED742C95A7893F7A3877DC /* VIMVideoUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 50CF7C4EB12469B6AD2059AF45FA8ECB /* VIMVideoUtils.m */; }; + 2F3A5EFEDFA43593DC5AA806D91BFA5A /* VIMInteraction.m in Sources */ = {isa = PBXBuildFile; fileRef = D87B538A6D1877FD818D0B519C413DF2 /* VIMInteraction.m */; }; + 2F4D4E3413C1336621AD3EF5461281C6 /* Request+Picture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 300CFD20A787C853925F7BAE4CBFAA57 /* Request+Picture.swift */; }; + 30D3D5470DED1FF2B24DFE656D46F088 /* Pods-VimeoUpload-iOSTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD861AB176F175CB3D1E0F6AF2A8444 /* Pods-VimeoUpload-iOSTests-dummy.m */; }; + 32076D3DD644045CF79DFFEBB6BFF3F2 /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 67584EC80399FD96630D745DA4D1A98F /* UIButton+AFNetworking.m */; }; + 327BE3456189E37F229074A8E0E59D67 /* Request+ProgrammedContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE40B3ABF25113AD8DB2293E39C0B740 /* Request+ProgrammedContent.swift */; }; + 34ACDFAC012CB5AE7996D0B1157ED336 /* VIMCredit.h in Headers */ = {isa = PBXBuildFile; fileRef = B55EE59B77D464EB14B10235EDA73472 /* VIMCredit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 34C88657FE7ABE9F833623F94952D253 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = A764F24CBBAA6CD584EE0CBFB5F80D40 /* UIProgressView+AFNetworking.m */; }; + 350E7D287CD9C8932489485A5BFD6F87 /* Pods-VimeoUpload-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 23203AB46E0B1066374BDDE11472401B /* Pods-VimeoUpload-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 35CBB7B255FD8D412AFCECBC4311A847 /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 4148FF8C4708BAD38593A015777E7E41 /* AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3AF116B17421EFBBFF9847259CFFC2B3 /* Pods-VimeoUpload-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BA6089003716E8736B3C3E374008AB4D /* Pods-VimeoUpload-dummy.m */; }; + 3B01A1344CDDAD474BAB3A4972534FF4 /* VIMVODItem.m in Sources */ = {isa = PBXBuildFile; fileRef = B500B2A8EF05B34704F9D34CF2CF8E95 /* VIMVODItem.m */; }; + 3C178E120BAF6B59E24F466C8FF23D6B /* VIMNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = C2D06C677AB5FAC517FFE8B4D60E8A1F /* VIMNotification.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3E9017BD1F6A95F49D9534FED7AEE8E0 /* VimeoSessionManager+Constructors.swift in Sources */ = {isa = PBXBuildFile; fileRef = D94F8265F69638DCA7C1CC50CA29CD5B /* VimeoSessionManager+Constructors.swift */; }; + 42002EAFB3E488172644B9CCEEBBDD5E /* VIMVideoFile.h in Headers */ = {isa = PBXBuildFile; fileRef = C8E3687C68FDA0D536295AA785351E89 /* VIMVideoFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4442D8453D210EFC13CFE2CAF862ED1D /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A23F6E3249A977997C8255519997C806 /* AFHTTPSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 44C4F1F6F4236CB76C0C34FFFBEC9E93 /* VimeoClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98158361BFB9C60E8591A14756CDA100 /* VimeoClient.swift */; }; + 455719CCD0654F72FBFCF510DE328339 /* VIMVideoDASHFile.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D5EE1E0744442AC49E909AD0D768A9 /* VIMVideoDASHFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 45F802D04B3BE0CAEC586C2F3016027B /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = AC1504799A29B9D2BC4470E3E39BCA33 /* UIActivityIndicatorView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 466C821E26B82F57C0936DE3A6F16554 /* VIMVideoPreference.m in Sources */ = {isa = PBXBuildFile; fileRef = E4B18CFCBFD591833D9E6A8BE1F1172C /* VIMVideoPreference.m */; }; + 46DE5BBE30FCA924541AC026D793A3D7 /* VIMVideoDASHFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FD22B103D648342069FE779359C9A56 /* VIMVideoDASHFile.m */; }; + 47A83B3FCA8F2D023C47AD1E90388C3C /* Pods-VimeoUpload-iOS-OldUpload-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3791D86A6474626014DF7E87E64D0CC1 /* Pods-VimeoUpload-iOS-OldUpload-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 47F04CBDF6C54B220F6AEECEF15264D5 /* AFAutoPurgingImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DE0E38A99298F3EF954325E154AA215 /* AFAutoPurgingImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 49256D3D8A3D5ECF3865BD63A889E783 /* VIMLiveStreams.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A751CF37C60078D4E14FD77EABB59EA /* VIMLiveStreams.swift */; }; + 4D3532EDF43F7631961FBCE2118906D1 /* VIMPolicyDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = AE97ADD7133B74F569CDBAA703BCFD65 /* VIMPolicyDocument.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4D78E4A293A03E543CB947C6E2B5BFC7 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EC2A207160C6ABAABFFB2C7CEF0193 /* Constants.swift */; }; + 4FA2FC796ACCCC463EEE77542BE8D142 /* VIMUser.h in Headers */ = {isa = PBXBuildFile; fileRef = EB3CB90C71820EE74C9F0D2DA4A7B44F /* VIMUser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 50240EC86EC6E3D0FE279D39C1157394 /* Request+Category.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0910EEA1873F3C909758C2298877AA7E /* Request+Category.swift */; }; + 51047C1945103943F70BEADE83725630 /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 714C5B0978A3C1F5DFD5196353A4674C /* UIWebView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 52527D3845CA7EBE0E2C3CAED510C19A /* VIMSeason.h in Headers */ = {isa = PBXBuildFile; fileRef = 245BD1E8B3E5BE71C829B996E257207C /* VIMSeason.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 530B47788A94A38FE1F07B0D9A0026E4 /* Scope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 574D37AFD6B63C7C543B8DDCC8BBCDCD /* Scope.swift */; }; + 53E43BCD6CA9C9AB125E4E8D605FC903 /* VIMVideo+VOD.h in Headers */ = {isa = PBXBuildFile; fileRef = 64F81D9AB162FD3AFF5E21392C105385 /* VIMVideo+VOD.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 54C37CD332C73F67F7754DAE3F3D4B3D /* VimeoRequestSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4E0A7B176B3107F86D5A881E57AA5BC /* VimeoRequestSerializer.swift */; }; + 56E84D090BF8AD39FA38E51807779BD2 /* VIMVideoHLSFile.h in Headers */ = {isa = PBXBuildFile; fileRef = F27DFCF446A2BAED340E50B6F721E96C /* VIMVideoHLSFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5A1D34D104D42B1EE399E23BCD7935A0 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E4FA6AA687FAD3C73FA4D5F778B6994 /* AFURLResponseSerialization.m */; }; + 5C0337211CDC4579019DC0704EA66370 /* VIMComment.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BF8714B341C956CC960D5F6F5FD061B /* VIMComment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5C0565FFE84B204D8F6C99772868BDEB /* VIMVODConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = FC34BB5F2459B8BE2191283BCD59DFFC /* VIMVODConnection.m */; }; + 5D4A19EA76D7EA2F9AFD1D2114FE0282 /* AuthenticationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4649337C65FD272A0B75F156507DBF18 /* AuthenticationController.swift */; }; + 5E954272295CF70B4C2C2815117255AB /* VIMVideoFairPlayFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E0B01CEC75D6CABBC311CA2D4DCE1D9 /* VIMVideoFairPlayFile.m */; }; + 608FBB1E459C630CAC2D93C823A9B12C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E72265D742A839587BC23CD8BD6AF14D /* Foundation.framework */; }; + 6203DE451A85E5A0AA5C13D751699B1B /* VIMAppeal.m in Sources */ = {isa = PBXBuildFile; fileRef = 58588D4FE9CAD101CBA9E66CF55B111F /* VIMAppeal.m */; }; + 6286BBCC9E8308998C92DE6A732153C0 /* Spatial.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEA5F1020ACBC1E16F7C377115328C63 /* Spatial.swift */; }; + 649E78B5EA450FABDF5201E31F265FAB /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9468DEA78D57D9B0E4C7AC7F5E504C7B /* AFNetworkActivityIndicatorManager.m */; }; + 6573AF9ABA59AC8D1F52B07088197F71 /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = A7C8E8C116C75D16F52EA1D3242FF59D /* AFSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 660EE8ED9CED19C9E8FD510F864F2953 /* Request+PolicyDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0B8B622C89D248F892F70436F3C4927 /* Request+PolicyDocument.swift */; }; + 67DC334CA1B22722C3A2E2C20EBF74A4 /* VimeoNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = E8EE2BF5E54CD69A9A8E68E9AA8D06F4 /* VimeoNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 687E4C8F5F2ECDB2B595746B57C61B94 /* Pods-VimeoUpload-iOS-OldUpload-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 977CC708C885349F45A1FFAA4DB28215 /* Pods-VimeoUpload-iOS-OldUpload-dummy.m */; }; + 68E37408801BDFE64FE284EB926C84D3 /* VIMConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 144AE47771CA26D2CE6BBA49A5088D4C /* VIMConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69D4E81727D4C0E26D58BB5A47263C6A /* ErrorCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C8A79531959161891C56EDD3B8236F9 /* ErrorCode.swift */; }; + 6A0B3B27B44D1B549931CA04D05FDA5F /* Dictionary+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 198A0FC4821182C1441C3278B81533C1 /* Dictionary+Extension.swift */; }; + 6AFAD442B4AAEECF1318FA8525604051 /* VIMAccount.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC4A625F838AE6E28EAA14F8EABBEEE /* VIMAccount.m */; }; + 6D7348E2B052AF437E6DD693FA1BB372 /* PinCodeInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6B3D95F344C2376613D1869601E9D9E /* PinCodeInfo.swift */; }; + 6FC69948AF7AED0F67402F8044ABE1BC /* VIMTag.m in Sources */ = {isa = PBXBuildFile; fileRef = 633F03E86937C4E4A5EB10440B86406E /* VIMTag.m */; }; + 7184A2EBE622AC5493861089EB852BC9 /* VIMVideoPreference.h in Headers */ = {isa = PBXBuildFile; fileRef = 66DF12E58DBB07F4E0A32A90407E7F10 /* VIMVideoPreference.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 730A439176273D3D0BBEF1C123CB4B87 /* VIMUserBadge.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B7817AC6B424B77B067539E39EDA9AB /* VIMUserBadge.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 76FB450A67E351FEF558473DF85A052A /* Request+User.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C2D82462A8952625139EFE730A1D996 /* Request+User.swift */; }; + 78471141D3A567C068C60243ED3554B8 /* VIMInteraction.h in Headers */ = {isa = PBXBuildFile; fileRef = 44F122B80BACFA0494C2CFB8D9923E4C /* VIMInteraction.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79FD18E3550C4D60892402C954D89D58 /* VIMPreference.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D22624966A39C8E5C113CBF14F4C8CE /* VIMPreference.m */; }; + 7A112C0F21A62CB6F1AA8D917A6EEA6C /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B507D130FFEBCD98C817BB196466C70 /* AFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7AD4CE7ABA24F180CCFBD6C0310DC1AA /* VIMModelObject.h in Headers */ = {isa = PBXBuildFile; fileRef = C716B4800FAD0DDAAAFFAB57FFC40242 /* VIMModelObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7CCA55971A69EA53482B0040647808A8 /* VIMUserBadge.m in Sources */ = {isa = PBXBuildFile; fileRef = 038F1D2C4FFAF96EF3F4CC8CCA5E1C7D /* VIMUserBadge.m */; }; + 7CE16B1BF75DF396768A0A3CFD968DB1 /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 02AA0046E026ED16E0F011492A681913 /* UIWebView+AFNetworking.m */; }; + 7E9D810438EAF1EC8C73357A66E2F745 /* VIMConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = EC67B7AD7961570B52C42FF75E469EF7 /* VIMConnection.m */; }; + 7EB9BEBED79E8411B9797F9B7E41B2C3 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A642117F7C53CF7A21E344EBF7E7936 /* Request.swift */; }; + 7F701AD6C1E16AC30D5A089603B3F29A /* VIMGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 6497695CF3E669E163206BB20DBAFE53 /* VIMGroup.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 81D0F571B178C2F82F146F1F5E50C097 /* VIMObjectMapper+Generic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55D5445B186DDBBEC7D7A9B467FC2E6A /* VIMObjectMapper+Generic.swift */; }; + 828EB50094BB958BEE3B094F96465E3E /* VIMGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = C867648C482317091BC988216AE7BCEF /* VIMGroup.m */; }; + 84D5E7F02850F93CBFE2114DE63556DE /* VIMLiveQuota.swift in Sources */ = {isa = PBXBuildFile; fileRef = B72FCA3488DE7361A5D81A8BD5423909 /* VIMLiveQuota.swift */; }; + 84FCB295072BFCC1B8C766B77B2A4355 /* VIMNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE34181F7DEEA3A80140282BBC6AB0B /* VIMNotification.m */; }; + 85DA40B231DA346D3F81F5C05721E8A5 /* Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A27737DBFB0A1312C26B1C96EFC0D9CC /* Mappable.swift */; }; + 878417CA55E672D2123F3E7AA4339EA1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E72265D742A839587BC23CD8BD6AF14D /* Foundation.framework */; }; + 8BAC1702671F9373055297301A078026 /* VIMQuantityQuota.h in Headers */ = {isa = PBXBuildFile; fileRef = 242A72850AA33ABD4DCB90C46D7EBBF7 /* VIMQuantityQuota.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8D1538471F2C35364D46EE098BC9F426 /* Pods-VimeoUpload-iOSTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E61505445B5CBA6615F5DAC3F00B4AC7 /* Pods-VimeoUpload-iOSTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8EB0FBBB983197A428EB2C6B4F6E604F /* VIMPicture.m in Sources */ = {isa = PBXBuildFile; fileRef = 157C7EA514B07C841D376B315F5F1636 /* VIMPicture.m */; }; + 907C0418B3BEBF279E024CD35630D91D /* AccountStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A25EFA17D3547663AC40E439C04067B /* AccountStore.swift */; }; + 9264BD69AFA8EE74F0D7F0EBD74F762F /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = B504FF86E8CC20D89C5EE300F2F127DC /* UIImage+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 926CEBDC701DEEE831E9E1BD7211DCEC /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DAE9E29D14DFD809059EC3455D955F8 /* SystemConfiguration.framework */; }; + 926D0D88C69D6E64C4F079963246D773 /* VIMLiveChatUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = D14F412DA2B5A72B420B77A5DF82B391 /* VIMLiveChatUser.swift */; }; + 932CA521D19C5DB870B9EA5163CDF9D0 /* VIMUploadTicket.h in Headers */ = {isa = PBXBuildFile; fileRef = 686E7A5A8052386182347D07482C3C67 /* VIMUploadTicket.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 93DFC0CC12E763AE770017349EE009D1 /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9988828014FB5018F75CBEC9127C5EE /* AFNetworkReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 948458DC0A9308A2D8C018C37FB7BBDD /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = EC667DA5D9EC1B35E659F3B9E0341C85 /* AFURLResponseSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 94CABFC144E1224E093EC7B5057F08BD /* VIMThumbnailUploadTicket.h in Headers */ = {isa = PBXBuildFile; fileRef = CC35A7CF63A081875F9CF7A13AED2B6F /* VIMThumbnailUploadTicket.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 986442954EB5E0C1224B22AA9DA15A3A /* VIMVODItem.h in Headers */ = {isa = PBXBuildFile; fileRef = CAC4F7845137416DDE1B0102830EDF83 /* VIMVODItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9A15FF8933713870E90F69BBC18908B0 /* VIMUser.m in Sources */ = {isa = PBXBuildFile; fileRef = E592A244E83255AC4115A868FE02919D /* VIMUser.m */; }; + 9B5D2A28338705252BAEC9F1CDF6DB16 /* Request+Configs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D9225F1748860C325BC0B5470023589 /* Request+Configs.swift */; }; + 9CF285BF9B73A83B35CEF6FCFBF18675 /* VIMSoundtrack.m in Sources */ = {isa = PBXBuildFile; fileRef = F8420F0DF85E78490D2EC6895FB33030 /* VIMSoundtrack.m */; }; + 9D71889BF97F2D2F4C191F9F679F841A /* VIMObjectMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A455D143B6438B58518F3865A903EE1 /* VIMObjectMapper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A07809AF47318F63FABD8430E9D2D5BA /* VIMLive.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3962DB52E64A2446FC1C17FE675A0E6 /* VIMLive.swift */; }; + A0BD9EC2D4DFF7F092F03C98B9A04EAC /* SubscriptionCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AB2176333C0C42F40BD13E4DDE0640A /* SubscriptionCollection.swift */; }; + A1187C43A1E035111DE63C082E28A393 /* VIMVideoFile.m in Sources */ = {isa = PBXBuildFile; fileRef = E3F3220930C10F8298CDEE754D07F73F /* VIMVideoFile.m */; }; + A21C97C53C6187C07993E331BB9D1BDB /* Request+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A3A4AC7EEAC2A5D6B93D6AA8DA6DEE8 /* Request+Notifications.swift */; }; + A3591DEDA776B48C026E7F9144981E58 /* AFAutoPurgingImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DC534095BB14D1CFB95B341D8F3BA47 /* AFAutoPurgingImageCache.m */; }; + A398D63C8DED664D99A864D79881A13C /* AFImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = A7C668C5587BF895640E72EA227806D7 /* AFImageDownloader.m */; }; + A6C453AA6D3CA78851EB47381AFD4462 /* Request+Toggle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A986CC4EDA505946FE3258B89387779 /* Request+Toggle.swift */; }; + A7B7691B6B973F3E7F1F21F416BD3613 /* VIMLiveChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FE473E948247E7F9972B5508A413C38 /* VIMLiveChat.swift */; }; + A81D296D35F0C54AD7EFAF9C6162EEEB /* Request+Soundtrack.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEF622C81A2F20DE82B18B4C1FB4977C /* Request+Soundtrack.swift */; }; + A90067E931B67F86573B5310EF33BEE4 /* Request+Authentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = 592399628685EEA2CBCEAA22472FB309 /* Request+Authentication.swift */; }; + A92AFBF2EA1D8470C045152905FE94EC /* ExceptionCatcher+Swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EE9E0E05929DC3AFDF6276C52E5988C /* ExceptionCatcher+Swift.swift */; }; + AA20F58AB9ADF9E981355D9DDD6F43CA /* VIMActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BD6B4F1BB9B251C7BEC59722C42AB0B /* VIMActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AE16FC5B4326038C8624FACCD693CB01 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDBDFFA351A30960D21939E28DC60212 /* CoreGraphics.framework */; }; + AE976B0E8E3DD81E4F49DBEF19D3C0AD /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 03C2FA5B57F57E6E4C867E75DC638115 /* AFURLSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AF31E2ADAC20108EB84BDE3DAC89B5AD /* VIMModelObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 9899127E9167B9D6EBA7784D892653A2 /* VIMModelObject.m */; }; + B096979D89174D895ACAA9130A84C751 /* Objc_ExceptionCatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = CF73647B15392A1776EAC7769039E3C1 /* Objc_ExceptionCatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B0A505817B511F3A35762CD3DC47A80A /* VIMVideoHLSFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B791FB955CB509E19E5ECC15E7EA5C5 /* VIMVideoHLSFile.m */; }; + B16A078FC7FBC172A266A336AEF7F673 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = C83490C101E129974A2EEFB8C04E04EC /* UIRefreshControl+AFNetworking.m */; }; + B19D1BB51563B94A63A6D1AAD3318B07 /* VIMNotificationsConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ED7E045948374FAE37E1258BA3366F1 /* VIMNotificationsConnection.m */; }; + B326931A696FDB9E8D38DACFC9B16575 /* VimeoResponseSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4759F58D590C7673A8DD8D567CBAB74 /* VimeoResponseSerializer.swift */; }; + B3734EA9CE5ABDD53677CBBF95218D93 /* VIMPrivacy.h in Headers */ = {isa = PBXBuildFile; fileRef = FC7C28E2007A0256AC662EA7D40A6631 /* VIMPrivacy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B530B7CEF7393543955FC9EEC6C9D797 /* VIMTag.h in Headers */ = {isa = PBXBuildFile; fileRef = E522AAA14794E33C4E9EFF0779388907 /* VIMTag.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B8A0FD0C3B86C1B68BC177F0E4F46FF0 /* String+Parameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0A90EF0370E7F413E923D813F419C81 /* String+Parameters.swift */; }; + B8C936EBBA62FA2DB48E61C49C63631B /* VIMSizeQuota.swift in Sources */ = {isa = PBXBuildFile; fileRef = D86710A21BF574C3148A0B1D88247593 /* VIMSizeQuota.swift */; }; + B8E04F3BBEBBD14C2D12C53535CEED63 /* VIMVideoPlayFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FCEA14CC7DF08D617ED59064F004953 /* VIMVideoPlayFile.m */; }; + B921B743C1F273406F64ABEDB7AF9400 /* Pods-VimeoUpload-iOS-OldUploadTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 03F136B8B3237A494D56992ABD45DA16 /* Pods-VimeoUpload-iOS-OldUploadTests-dummy.m */; }; + B9E6048FDEF1EDF00DBD5E7603882B0F /* VIMVODConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = F6C8A0A919CEE05D1634AFD91D8693BC /* VIMVODConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BB2BB064BA029A5772F1B80A2504B6D4 /* VIMChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA8C97144A1B46C16C2425AD02F2647 /* VIMChannel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BB2D516BB64D23CB562B41D9C0DCFF91 /* VIMVideoProgressiveFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 4791D611DF81AF66DC55313D98C6202C /* VIMVideoProgressiveFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BCBA69CD7C8C0C72ED283C9E23F1E9E8 /* VIMCredit.m in Sources */ = {isa = PBXBuildFile; fileRef = 91179DF7663D831C96D269BFB58AD522 /* VIMCredit.m */; }; + BD430763476A5C43180E216E8DF6814C /* VIMPrivacy.m in Sources */ = {isa = PBXBuildFile; fileRef = 48ADFB75E39D89D3FC25BA8311A8A3F8 /* VIMPrivacy.m */; }; + BD68AF52C096310FF247AF573E6D3E7A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E72265D742A839587BC23CD8BD6AF14D /* Foundation.framework */; }; + C08010E9B33FEB8A829FBFB76BA1A56A /* VIMAccount.h in Headers */ = {isa = PBXBuildFile; fileRef = C913DD9402D7FCE7BBA97568950974A6 /* VIMAccount.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C740EA611A1A0708069379C21CC91D22 /* KeychainStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = E356F5BC3EF410C1A8E290BF70EE42EC /* KeychainStore.swift */; }; + C7D618E6E16BAB6EE81D7A943430A155 /* VIMUploadTicket.m in Sources */ = {isa = PBXBuildFile; fileRef = 404EBED1541B755FB84CEB0B6BF5B214 /* VIMUploadTicket.m */; }; + C9FBFA4214F4CE291C59D52DFA886C02 /* VimeoNetworking-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D53BEEBF70CF78A7381D5E381FE19629 /* VimeoNetworking-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CBB0A1DE5A92E8A8AA8EDF47F90D4704 /* VIMActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D47993D1669EDACAE23DDA31EE1D750 /* VIMActivity.m */; }; + CBD0A5C342505975B14B0722C0A40644 /* VIMVideoProgressiveFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 18C1BE847651368C4C25045E57EB0E3F /* VIMVideoProgressiveFile.m */; }; + CC9E35985FC0082D929D45BA28334A1C /* VIMVideo.h in Headers */ = {isa = PBXBuildFile; fileRef = 67E8730E582CED91AFE4FA07B317CF43 /* VIMVideo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CEB2F0E229EF841D92C780C3FFDF1BEA /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = EE4DA92A43826C17668392D0C859A80A /* AFSecurityPolicy.m */; }; + CF287829627F26B2EB4382B897D06A0E /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 620D09827DEDF296949C919BB5E207C4 /* AFNetworking-dummy.m */; }; + D109CF550CC4B4207ABD5A8BDA5D7FB2 /* VIMSpace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 199439094EAB2A988BAED89C1771A848 /* VIMSpace.swift */; }; + D1CC6C140311BDF560402C7B261EC749 /* VIMVideoPlayRepresentation.m in Sources */ = {isa = PBXBuildFile; fileRef = 58047C8CC5F49283333E246CA9F56BFA /* VIMVideoPlayRepresentation.m */; }; + D452173C5942C7EF4BADA8F49E73EEBB /* VIMObjectMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CEE095D5D41BE01E7A438719525079D /* VIMObjectMapper.m */; }; + D4E80BD7EAAB83200183110578A80591 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DB684C35D18CE0200411F5A0B79CFCD /* AFURLSessionManager.m */; }; + D545E07F830B9DEE5029CCAE066F5E48 /* NetworkingNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB03BF3312FAD8B30A9EE17D0AA7BD36 /* NetworkingNotification.swift */; }; + D7B60EFC0FBAA6322F0E8BB9A9A81DED /* VimeoReachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DAFB57C55DAA0F49681B1626DBE7837 /* VimeoReachability.swift */; }; + D814EAEF15E35911C154C9706ACAFAB2 /* VIMAppeal.h in Headers */ = {isa = PBXBuildFile; fileRef = 71DED1DC4C3953219DB409A92F0E546F /* VIMAppeal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D86979E7D5F083AE83F26A54375E0BE6 /* VIMTrigger.h in Headers */ = {isa = PBXBuildFile; fileRef = 434D92DDD616ED26F2A45C6EAB3DF3C2 /* VIMTrigger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D8876D8D889C6B0E96CF2AFD3CDB8B97 /* VimeoSessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B89681226395449BB402C81A1ED264E /* VimeoSessionManager.swift */; }; + DC395092187FBC815E499B755553E751 /* Pods-VimeoUpload-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 406EF671DD740C6C0D28A82B1460D7EA /* Pods-VimeoUpload-iOS-dummy.m */; }; + DC9AE7B95B286B56C6445079B403C3D3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E72265D742A839587BC23CD8BD6AF14D /* Foundation.framework */; }; + DCE8E24B5551BD3ED1FD7ABD56C10386 /* VIMVideo.m in Sources */ = {isa = PBXBuildFile; fileRef = CCF8D5A5B94427B5A26BF7A110935D1D /* VIMVideo.m */; }; + DD887A93A200A87A51B3D00BD1B80D20 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EC36289436BC8F92161297A7A6BB279 /* AFNetworkReachabilityManager.m */; }; + DE18C4BDBECD0E69D0696F8BD2DCD577 /* VIMChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = C22130DB8AB8C29FBC7F7AF78E3A4E9E /* VIMChannel.m */; }; + DEA22BE9551003B62BF8C64C7B9E4352 /* VIMPicture.h in Headers */ = {isa = PBXBuildFile; fileRef = BCB75948A89DA6FAFB6053EFB7B39628 /* VIMPicture.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E1EEC50202199605B8FAA025E2300EE3 /* VIMPreference.h in Headers */ = {isa = PBXBuildFile; fileRef = 10C6713230A87A25B5761E5A3CFC15DD /* VIMPreference.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E23B9A6F533461CB33C0FA6FB59E3AB2 /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FC7D02188E2C34BE891C0A1C34CE10A /* UIKit+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E2BC5FB5EBF6496D18C35FA18DC85B2E /* VIMVideoUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = AA188B201DCC201C7D1451547279808D /* VIMVideoUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E322318676064FC0B87D0E9F79EA1A55 /* VIMProgrammedContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 221D6F45BA640AE1C73F34B0D416ADA7 /* VIMProgrammedContent.swift */; }; + E32C95DB739D05A45EE140D658AD40C8 /* Request+Channel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD3546051FCB66387E4E83C5B7BBACE9 /* Request+Channel.swift */; }; + E44FBE84C5072D6406FCC4456333194E /* VIMVideoDRMFiles.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D59C2A0B1AC7D635763EE682582F1C1 /* VIMVideoDRMFiles.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E59B30AE3C849AECA3C525452E2AE055 /* VIMLiveTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1A9E4CA052B6791BE98CABC26BDAE96 /* VIMLiveTime.swift */; }; + E67F7F8543FC715AD3B30BC6CB366B6E /* VIMThumbnailUploadTicket.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EA774D3660D1E35584A49BC04468978 /* VIMThumbnailUploadTicket.m */; }; + E6BC2F1EBCB35E455ECB7D63F1591E93 /* VIMQuantityQuota.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DB8B03BA0C91F983BEBB7D468AA4F10 /* VIMQuantityQuota.m */; }; + E6DC085EF47756D760080D0E855E965A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E72265D742A839587BC23CD8BD6AF14D /* Foundation.framework */; }; + E791D2683395A22962082E7163104379 /* NSError+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED3D79C25378B9CD7F9F1F4D28F37C78 /* NSError+Extensions.swift */; }; + E9C53427664F14DBB8FCFAB186BCFB59 /* VIMVideoPlayRepresentation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CA19508165DFEEB376273E8D4214F59 /* VIMVideoPlayRepresentation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E9CCC4E47921BE30AAE21DE57E20BEFA /* Subscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = C974CC35310983ABAED5BA8CF32332A6 /* Subscription.swift */; }; + E9FDD6AECB1F1502240718DD68585725 /* PlayProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19E82E7A6452665F31AB0160C36C0040 /* PlayProgress.swift */; }; + EAF16633DB3C992CF975BE4A2932D41C /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 31D638862512159911B72BCEA7447DC2 /* AFHTTPSessionManager.m */; }; + ECE3AC09F6BE7F51C36F9AC7D5FFCF56 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E72265D742A839587BC23CD8BD6AF14D /* Foundation.framework */; }; + F1B355E841C99D9DBA940D0E172DAE7F /* Objc_ExceptionCatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D93E9F58B85FC67462DACC87CE53C84D /* Objc_ExceptionCatcher.m */; }; + F1CAA2EBDDFF558DEF98684F2479A7AF /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 7983F38BB3C81F07425BFAF1E6289C43 /* AFURLRequestSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F2625E2811F90F09002CACB5816B66D5 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = C60CB7517BFF164178542CD7CB08BFC6 /* Response.swift */; }; + F2D899C7AA0D7FC20160091BB9D31CF3 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = C8D7668C9068459DA53626C11CC3A364 /* UIImageView+AFNetworking.m */; }; + F36EA44AC96E1D0AFBC3061569B66BF1 /* VIMRecommendation.h in Headers */ = {isa = PBXBuildFile; fileRef = 295021DB4F5EBF6BD2E1C60703E3E2D9 /* VIMRecommendation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F5E6F5F26F2A0FBAD39DFCC082B71083 /* VIMSoundtrack.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C5686958BB43876F21E70E9627CFA06 /* VIMSoundtrack.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F84DD74BB7F612DE372F8C051420DF72 /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = B0B2B4EA4DB47084F317FFA4C51ADC9C /* UIProgressView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F918C94B773F6FAE6B379A7A216C14DF /* VIMComment.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C4B2D0192E9B889AE401D325E73A05B /* VIMComment.m */; }; + F938EE05B1FA2FCD55CAE920B0275003 /* VIMNotificationsConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 45A744737CCC3FB2DDD29A8A01B7569A /* VIMNotificationsConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F99681CD0018DD5318E1C75064153302 /* VIMMappable.h in Headers */ = {isa = PBXBuildFile; fileRef = D7779B75E9717049456FFA53A8183156 /* VIMMappable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FB1D774E4A4E73BEC95B50B24530ADEC /* VIMCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = A962DA72E1B4C69B2EBB0CF5A88E990E /* VIMCategory.m */; }; + FC4467E7982DA5205C40F4CE3876FD62 /* VIMReviewPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57B784EA87250DC92F76F6BF0638D4D2 /* VIMReviewPage.swift */; }; + FD825BEAA765A7ECD5D1A5B90CFD793F /* Request+Trigger.swift in Sources */ = {isa = PBXBuildFile; fileRef = F367284389C8299C9D163BC304C1B1AB /* Request+Trigger.swift */; }; + FDB166270374B08707CC182467E2272E /* Request+Comment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7426D8145A3155978F0515BEEFCB8447 /* Request+Comment.swift */; }; + FEF6EACE962EAE70E2EAC5F3C83EF7C8 /* AFImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E6BFE7016A60D816B0E3C15C0E2F3BF /* AFImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -246,6 +255,13 @@ remoteGlobalIDString = 119F92C3FCFD322E8CA53B254AE9B6EA; remoteInfo = VimeoNetworking; }; + C1B07E8A6BB52E5A23F0C9ABD7F591F1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 007473F5B3F53CD3EEA4CABB3BD4C070; + remoteInfo = "Pods-VimeoUpload-iOS-OldUpload"; + }; DBE8C14A8BD5EC1ADA1AD87726953825 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; @@ -260,259 +276,275 @@ remoteGlobalIDString = CF671F7E57B92905F1CC91D036D6B4A7; remoteInfo = AFNetworking; }; + F4716F7EEF30FEC980B19631440BDCEC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9ABE00A810B6AFE214900E3484571A39; + remoteInfo = "Pods-VimeoUpload-iOS"; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 01B662642B6C94DAE9E304C3539BB0F0 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; - 01FD7E491D786675786392B66C27218C /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; - 0279AA9EFAF1A2B4A5CBF25821A5F353 /* Request+Trigger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Trigger.swift"; path = "VimeoNetworking/Sources/Request+Trigger.swift"; sourceTree = ""; }; - 029DD25355A20155F5263F91BB7FEB40 /* VIMCredit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMCredit.m; path = VimeoNetworking/Sources/Models/VIMCredit.m; sourceTree = ""; }; - 0627D0F046BC1A05A689F1B332F10429 /* VIMVideoPlayFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoPlayFile.h; path = VimeoNetworking/Sources/Models/VIMVideoPlayFile.h; sourceTree = ""; }; - 08D1BA8A90EDC00E8EB28A886F2B4CD7 /* VIMActivity.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMActivity.m; path = VimeoNetworking/Sources/Models/VIMActivity.m; sourceTree = ""; }; - 0A255F1E920EA10EF5D5D5D29ABF77DA /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; - 0C2608F23A5BD6202F176337A9F85D70 /* ResponseCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseCache.swift; path = VimeoNetworking/Sources/ResponseCache.swift; sourceTree = ""; }; - 0E61F34F2E6B1E414299E9F4D8B5FFF8 /* VimeoSessionManager+Constructors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "VimeoSessionManager+Constructors.swift"; path = "VimeoNetworking/Sources/VimeoSessionManager+Constructors.swift"; sourceTree = ""; }; - 0F622C8797560A4BC9EDB9A36960BB2C /* Objc_ExceptionCatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Objc_ExceptionCatcher.m; path = VimeoNetworking/Sources/Objc_ExceptionCatcher.m; sourceTree = ""; }; - 0F7FE012B283AB95DB394786375AF14C /* VIMVideoFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoFile.h; path = VimeoNetworking/Sources/Models/VIMVideoFile.h; sourceTree = ""; }; - 0FD691F49DC930AF5CB1474C1A0C703B /* Pods-VimeoUpload-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-VimeoUpload-umbrella.h"; sourceTree = ""; }; - 1251E50741E644D6312C93A72D228CC2 /* AccountStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AccountStore.swift; path = VimeoNetworking/Sources/AccountStore.swift; sourceTree = ""; }; - 12603000BA159A15FCFE312613690391 /* VimeoRequestSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VimeoRequestSerializer.swift; path = VimeoNetworking/Sources/VimeoRequestSerializer.swift; sourceTree = ""; }; - 13485EB89727E5D2EC453EE2ACF262B1 /* AFNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-umbrella.h"; sourceTree = ""; }; - 14988764C33C43F624F78A9FD05EA2D7 /* VIMActivity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMActivity.h; path = VimeoNetworking/Sources/Models/VIMActivity.h; sourceTree = ""; }; - 149A190283760F475F91178FCB276A53 /* VIMVideo+VOD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "VIMVideo+VOD.h"; path = "VimeoNetworking/Sources/Models/VIMVideo+VOD.h"; sourceTree = ""; }; - 14EA79709F08DA21BEFAD6B727216E8A /* VIMSeason.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMSeason.h; path = VimeoNetworking/Sources/Models/VIMSeason.h; sourceTree = ""; }; - 1541E9FB35206F5192232467FC5B429D /* VIMUserBadge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMUserBadge.m; path = VimeoNetworking/Sources/Models/VIMUserBadge.m; sourceTree = ""; }; - 1625E43ADF6E7014140E962E4D8D2E15 /* Subscription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Subscription.swift; path = VimeoNetworking/Sources/Models/Subscription.swift; sourceTree = ""; }; - 19CEB26626C9812FA30C7379ACA089D6 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; - 1C0AF9E26B1AE44BE6700D2A8CF89819 /* Pods-VimeoUpload-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-VimeoUpload-iOS-umbrella.h"; sourceTree = ""; }; + 02AA0046E026ED16E0F011492A681913 /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; + 0338339E81D84468FC3FEC3B4E0B751B /* VIMRecommendation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMRecommendation.m; path = VimeoNetworking/Sources/Models/VIMRecommendation.m; sourceTree = ""; }; + 038F1D2C4FFAF96EF3F4CC8CCA5E1C7D /* VIMUserBadge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMUserBadge.m; path = VimeoNetworking/Sources/Models/VIMUserBadge.m; sourceTree = ""; }; + 03BD44E17BF4F0A8D5B2F4DAD5ABB72C /* Pods-VimeoUpload-iOS-OldUploadTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VimeoUpload-iOS-OldUploadTests-frameworks.sh"; sourceTree = ""; }; + 03C2FA5B57F57E6E4C867E75DC638115 /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; + 03F136B8B3237A494D56992ABD45DA16 /* Pods-VimeoUpload-iOS-OldUploadTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-VimeoUpload-iOS-OldUploadTests-dummy.m"; sourceTree = ""; }; + 0910EEA1873F3C909758C2298877AA7E /* Request+Category.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Category.swift"; path = "VimeoNetworking/Sources/Request+Category.swift"; sourceTree = ""; }; + 0A751CF37C60078D4E14FD77EABB59EA /* VIMLiveStreams.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VIMLiveStreams.swift; path = VimeoNetworking/Sources/Models/VIMLiveStreams.swift; sourceTree = ""; }; + 0B7817AC6B424B77B067539E39EDA9AB /* VIMUserBadge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMUserBadge.h; path = VimeoNetworking/Sources/Models/VIMUserBadge.h; sourceTree = ""; }; + 0C55E963668441AF0A84D56BE0763691 /* Pods-VimeoUpload-iOS-OldUpload.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload-iOS-OldUpload.release.xcconfig"; sourceTree = ""; }; + 0C8A79531959161891C56EDD3B8236F9 /* ErrorCode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ErrorCode.swift; path = VimeoNetworking/Sources/ErrorCode.swift; sourceTree = ""; }; + 0CA19508165DFEEB376273E8D4214F59 /* VIMVideoPlayRepresentation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoPlayRepresentation.h; path = VimeoNetworking/Sources/Models/VIMVideoPlayRepresentation.h; sourceTree = ""; }; + 10C6713230A87A25B5761E5A3CFC15DD /* VIMPreference.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMPreference.h; path = VimeoNetworking/Sources/Models/VIMPreference.h; sourceTree = ""; }; + 1263405891BAC778C715376CF6CAF9B2 /* Pods-VimeoUpload.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-VimeoUpload.modulemap"; sourceTree = ""; }; + 133CD2F3E29DDF713318E84B2153F4C3 /* Pods-VimeoUpload-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload-iOS.debug.xcconfig"; sourceTree = ""; }; + 144AE47771CA26D2CE6BBA49A5088D4C /* VIMConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMConnection.h; path = VimeoNetworking/Sources/Models/VIMConnection.h; sourceTree = ""; }; + 14F2E19F2D2D74E49166614264DA1D27 /* VIMSeason.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMSeason.m; path = VimeoNetworking/Sources/Models/VIMSeason.m; sourceTree = ""; }; + 157C7EA514B07C841D376B315F5F1636 /* VIMPicture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMPicture.m; path = VimeoNetworking/Sources/Models/VIMPicture.m; sourceTree = ""; }; + 164D73327C635745B3323BF6ED3ECD65 /* Pods-VimeoUpload-iOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-VimeoUpload-iOS-acknowledgements.markdown"; sourceTree = ""; }; + 18C1BE847651368C4C25045E57EB0E3F /* VIMVideoProgressiveFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoProgressiveFile.m; path = VimeoNetworking/Sources/Models/VIMVideoProgressiveFile.m; sourceTree = ""; }; + 198A0FC4821182C1441C3278B81533C1 /* Dictionary+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Dictionary+Extension.swift"; path = "VimeoNetworking/Sources/Dictionary+Extension.swift"; sourceTree = ""; }; + 199439094EAB2A988BAED89C1771A848 /* VIMSpace.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VIMSpace.swift; path = VimeoNetworking/Sources/Models/VIMSpace.swift; sourceTree = ""; }; + 19E82E7A6452665F31AB0160C36C0040 /* PlayProgress.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlayProgress.swift; path = VimeoNetworking/Sources/Models/PlayProgress.swift; sourceTree = ""; }; + 1A455D143B6438B58518F3865A903EE1 /* VIMObjectMapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMObjectMapper.h; path = VimeoNetworking/Sources/Models/VIMObjectMapper.h; sourceTree = ""; }; + 1A639A5202E49FF07C8F7669E03A1399 /* VimeoNetworking.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = VimeoNetworking.modulemap; sourceTree = ""; }; + 1A986CC4EDA505946FE3258B89387779 /* Request+Toggle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Toggle.swift"; path = "VimeoNetworking/Sources/Request+Toggle.swift"; sourceTree = ""; }; + 1AB2176333C0C42F40BD13E4DDE0640A /* SubscriptionCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubscriptionCollection.swift; path = VimeoNetworking/Sources/Models/SubscriptionCollection.swift; sourceTree = ""; }; + 1B89681226395449BB402C81A1ED264E /* VimeoSessionManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VimeoSessionManager.swift; path = VimeoNetworking/Sources/VimeoSessionManager.swift; sourceTree = ""; }; + 1BF8714B341C956CC960D5F6F5FD061B /* VIMComment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMComment.h; path = VimeoNetworking/Sources/Models/VIMComment.h; sourceTree = ""; }; + 1C5628750E74ECB23E63B36AEF2A8E62 /* Pods-VimeoUpload-iOS-OldUpload-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VimeoUpload-iOS-OldUpload-frameworks.sh"; sourceTree = ""; }; 1C6422F81EA10F0A3062FC248BE9659A /* Pods_VimeoUpload_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_VimeoUpload_iOS.framework; path = "Pods-VimeoUpload-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 1D06933F7D0190E13136B6084CCF19FD /* VIMVideoHLSFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoHLSFile.h; path = VimeoNetworking/Sources/Models/VIMVideoHLSFile.h; sourceTree = ""; }; - 1DD953AC1282A72EB724028504DB991B /* VIMPictureCollection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMPictureCollection.m; path = VimeoNetworking/Sources/Models/VIMPictureCollection.m; sourceTree = ""; }; - 1E2C31E1C5219A492BA51ECF975649C4 /* Pods-VimeoUpload-iOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-VimeoUpload-iOS-acknowledgements.plist"; sourceTree = ""; }; - 1F5BC750D923B3B868099617A48936CF /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; - 20429F7864AF6AA08CDB4E78DE31A84C /* Pods-VimeoUpload-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-VimeoUpload-iOS-dummy.m"; sourceTree = ""; }; - 20B9A2C2DE00876AF465AD16D2C4C5BA /* VIMSizeQuota.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMSizeQuota.m; path = VimeoNetworking/Sources/Models/VIMSizeQuota.m; sourceTree = ""; }; - 213E236A9902F5C48054532E31B83A86 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; - 223024B664957866BB751A1110F1B9F0 /* VIMCredit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMCredit.h; path = VimeoNetworking/Sources/Models/VIMCredit.h; sourceTree = ""; }; - 2258E00A17D080420C729F636C7DA1FF /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; - 23AB835CE25AE0CA04362D10838A3CF0 /* VIMCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMCategory.h; path = VimeoNetworking/Sources/Models/VIMCategory.h; sourceTree = ""; }; - 281BE9E67D00EF177F449FA07B3FB9C6 /* VIMUserBadge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMUserBadge.h; path = VimeoNetworking/Sources/Models/VIMUserBadge.h; sourceTree = ""; }; - 2823D0E27387DEDA4CD0C3CFBCC0B44F /* Pods-VimeoUpload-iOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VimeoUpload-iOS-frameworks.sh"; sourceTree = ""; }; - 2A3F72A38ECAA6689938E0DD34F3126A /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2A556F76898649B5A28BDB5446ED8308 /* Pods-VimeoUpload-iOS-OldUploadTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload-iOS-OldUploadTests.debug.xcconfig"; sourceTree = ""; }; - 2B409357FA7F1EE47504EB11F838F1FD /* VIMVideoDRMFiles.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoDRMFiles.m; path = VimeoNetworking/Sources/Models/VIMVideoDRMFiles.m; sourceTree = ""; }; - 2B670858BCB563B5FDA0DFAF36BAC42E /* VIMComment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMComment.m; path = VimeoNetworking/Sources/Models/VIMComment.m; sourceTree = ""; }; - 2BC19A9538D0325AF47F77D4BDAB05E5 /* VimeoClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VimeoClient.swift; path = VimeoNetworking/Sources/VimeoClient.swift; sourceTree = ""; }; - 2BF35D801896FA2A238107E3F9288174 /* Pods-VimeoUpload-iOS-OldUpload-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VimeoUpload-iOS-OldUpload-frameworks.sh"; sourceTree = ""; }; - 2C1DAA99F189991E9808E85A60902767 /* VIMTag.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMTag.m; path = VimeoNetworking/Sources/Models/VIMTag.m; sourceTree = ""; }; + 1DB8B03BA0C91F983BEBB7D468AA4F10 /* VIMQuantityQuota.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMQuantityQuota.m; path = VimeoNetworking/Sources/Models/VIMQuantityQuota.m; sourceTree = ""; }; + 1EE9E0E05929DC3AFDF6276C52E5988C /* ExceptionCatcher+Swift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ExceptionCatcher+Swift.swift"; path = "VimeoNetworking/Sources/ExceptionCatcher+Swift.swift"; sourceTree = ""; }; + 1FD861AB176F175CB3D1E0F6AF2A8444 /* Pods-VimeoUpload-iOSTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-VimeoUpload-iOSTests-dummy.m"; sourceTree = ""; }; + 2140E97C9A902AF978123E899B2EC965 /* Pods-VimeoUpload-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VimeoUpload-resources.sh"; sourceTree = ""; }; + 221D6F45BA640AE1C73F34B0D416ADA7 /* VIMProgrammedContent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VIMProgrammedContent.swift; path = VimeoNetworking/Sources/Models/VIMProgrammedContent.swift; sourceTree = ""; }; + 2306B631FE1354BD0E5B81E1EB94D032 /* AppConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AppConfiguration.swift; path = VimeoNetworking/Sources/AppConfiguration.swift; sourceTree = ""; }; + 23203AB46E0B1066374BDDE11472401B /* Pods-VimeoUpload-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-VimeoUpload-umbrella.h"; sourceTree = ""; }; + 24231BD46B3810C7B980D8C357456050 /* VIMCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMCategory.h; path = VimeoNetworking/Sources/Models/VIMCategory.h; sourceTree = ""; }; + 242A72850AA33ABD4DCB90C46D7EBBF7 /* VIMQuantityQuota.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMQuantityQuota.h; path = VimeoNetworking/Sources/Models/VIMQuantityQuota.h; sourceTree = ""; }; + 245BD1E8B3E5BE71C829B996E257207C /* VIMSeason.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMSeason.h; path = VimeoNetworking/Sources/Models/VIMSeason.h; sourceTree = ""; }; + 2712EE1D549F6E58A7BB81334B608446 /* Request+Cache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Cache.swift"; path = "VimeoNetworking/Sources/Request+Cache.swift"; sourceTree = ""; }; + 295021DB4F5EBF6BD2E1C60703E3E2D9 /* VIMRecommendation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMRecommendation.h; path = VimeoNetworking/Sources/Models/VIMRecommendation.h; sourceTree = ""; }; + 29EC2A207160C6ABAABFFB2C7CEF0193 /* Constants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constants.swift; path = VimeoNetworking/Sources/Constants.swift; sourceTree = ""; }; + 2A642117F7C53CF7A21E344EBF7E7936 /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = VimeoNetworking/Sources/Request.swift; sourceTree = ""; }; + 2B791FB955CB509E19E5ECC15E7EA5C5 /* VIMVideoHLSFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoHLSFile.m; path = VimeoNetworking/Sources/Models/VIMVideoHLSFile.m; sourceTree = ""; }; + 2C5686958BB43876F21E70E9627CFA06 /* VIMSoundtrack.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMSoundtrack.h; path = VimeoNetworking/Sources/Models/VIMSoundtrack.h; sourceTree = ""; }; 2CF57E9BE891732B80AD558CB436D205 /* Pods_VimeoUpload_iOSTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_VimeoUpload_iOSTests.framework; path = "Pods-VimeoUpload-iOSTests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 2D394EBCF2013AC95F4F316F6683EA0C /* VimeoReachability.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VimeoReachability.swift; path = VimeoNetworking/Sources/VimeoReachability.swift; sourceTree = ""; }; - 2D775ED9A8AEEA1BBA968B5740A34BFD /* Request+User.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+User.swift"; path = "VimeoNetworking/Sources/Request+User.swift"; sourceTree = ""; }; - 2E6285983C1A0FF3F9827AE9B15D6EAB /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2EC7C61DABF8951A8EA0284CE90D8C35 /* Pods-VimeoUpload-iOS-OldUpload.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload-iOS-OldUpload.debug.xcconfig"; sourceTree = ""; }; - 30232B7C92B3EA202FD3EBDCE7FCA62E /* Pods-VimeoUpload-iOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-VimeoUpload-iOS-acknowledgements.markdown"; sourceTree = ""; }; - 3210E8330EE38198AC23E6AE501C828F /* Pods-VimeoUpload-iOS-OldUploadTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VimeoUpload-iOS-OldUploadTests-resources.sh"; sourceTree = ""; }; - 338DFD9D7A1D0BF695F33079268D7506 /* VIMAccount.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMAccount.m; path = VimeoNetworking/Sources/Models/VIMAccount.m; sourceTree = ""; }; - 33B7F78148EB2BCFE6839B0A753DA5A7 /* VIMQuantityQuota.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMQuantityQuota.m; path = VimeoNetworking/Sources/Models/VIMQuantityQuota.m; sourceTree = ""; }; - 3731BACEDB31E0440FF7D8D8C0C5E492 /* Constants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constants.swift; path = VimeoNetworking/Sources/Constants.swift; sourceTree = ""; }; - 37C980B8A834DB882EE016253A514531 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; - 3955D9A7EC2CD5C86E892193E62E9E0F /* Request+Comment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Comment.swift"; path = "VimeoNetworking/Sources/Request+Comment.swift"; sourceTree = ""; }; - 3BD0889F5B218566401FFF6EFC7448B1 /* VIMSeason.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMSeason.m; path = VimeoNetworking/Sources/Models/VIMSeason.m; sourceTree = ""; }; - 3BFCEC6FBC3145714CC6CF4DFC949341 /* AFImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFImageDownloader.m; path = "UIKit+AFNetworking/AFImageDownloader.m"; sourceTree = ""; }; - 3DF748E9534F1105869E8635FABD2DB5 /* Pods-VimeoUpload-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-VimeoUpload-acknowledgements.markdown"; sourceTree = ""; }; - 40C278A2D7295B9C745A8F7C78D039A3 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; - 40FF5ABC89E5B4D81BB332308EBD6ABA /* VIMVODConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVODConnection.h; path = VimeoNetworking/Sources/Models/VIMVODConnection.h; sourceTree = ""; }; - 439CBA3DC46A23846FBD30F048BE086A /* VIMSoundtrack.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMSoundtrack.h; path = VimeoNetworking/Sources/Models/VIMSoundtrack.h; sourceTree = ""; }; - 494E66C69C53C64522E95F995B56BAB5 /* VIMVideoPlayRepresentation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoPlayRepresentation.m; path = VimeoNetworking/Sources/Models/VIMVideoPlayRepresentation.m; sourceTree = ""; }; - 49926875B9F5E4B438C6D0FDAEE093A2 /* Pods-VimeoUpload-iOS-OldUpload-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VimeoUpload-iOS-OldUpload-resources.sh"; sourceTree = ""; }; - 49CF485D82938742667C3CB53CCE9FED /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; - 49FDC86C4F0DDC07BF2B3A89084F05AF /* VIMUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMUser.m; path = VimeoNetworking/Sources/Models/VIMUser.m; sourceTree = ""; }; - 4A5768E8C2A4AD09EE82653EC6A4E43A /* VIMChannel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMChannel.m; path = VimeoNetworking/Sources/Models/VIMChannel.m; sourceTree = ""; }; - 4A6089F06B69AA4011F16D1BE20C6240 /* VIMTrigger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMTrigger.h; path = VimeoNetworking/Sources/Models/VIMTrigger.h; sourceTree = ""; }; - 4D38065BB0B23FBE674985A0F8B72EC9 /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = VimeoNetworking/Sources/Result.swift; sourceTree = ""; }; - 4D485D3D976CC90259E83A2E9452E4A9 /* VIMComment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMComment.h; path = VimeoNetworking/Sources/Models/VIMComment.h; sourceTree = ""; }; - 4E79D6C3283CB5EF1812B0021DA11FC5 /* VIMUploadTicket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMUploadTicket.h; path = VimeoNetworking/Sources/Models/VIMUploadTicket.h; sourceTree = ""; }; - 4F578FD9D3A32CB94B4560392C77383F /* Objc_ExceptionCatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Objc_ExceptionCatcher.h; path = VimeoNetworking/Sources/Objc_ExceptionCatcher.h; sourceTree = ""; }; - 4FBA6678CB2E7680B2E44F4375609022 /* VimeoSessionManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VimeoSessionManager.swift; path = VimeoNetworking/Sources/VimeoSessionManager.swift; sourceTree = ""; }; - 4FD417247D6F2F5D88E1083E3FB8227F /* Pods-VimeoUpload-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-VimeoUpload-acknowledgements.plist"; sourceTree = ""; }; - 500FE9C937B576F7F751188E9C8B58C2 /* VIMNotificationsConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMNotificationsConnection.h; path = VimeoNetworking/Sources/Models/VIMNotificationsConnection.h; sourceTree = ""; }; - 528FFF37101F041C21101734F752C2AE /* VIMVideoPreference.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoPreference.h; path = VimeoNetworking/Sources/Models/VIMVideoPreference.h; sourceTree = ""; }; - 533C56098EE9CDC9C94F3635F25A9F98 /* Pods-VimeoUpload-iOS-OldUpload.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload-iOS-OldUpload.release.xcconfig"; sourceTree = ""; }; - 54035CD32BBAAD35D60CCBDDEC9CEE44 /* ExceptionCatcher+Swift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ExceptionCatcher+Swift.swift"; path = "VimeoNetworking/Sources/ExceptionCatcher+Swift.swift"; sourceTree = ""; }; - 5427FA6B4360346236E6133084DFC10E /* Spatial.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Spatial.swift; path = VimeoNetworking/Sources/Models/Spatial.swift; sourceTree = ""; }; + 2E0B01CEC75D6CABBC311CA2D4DCE1D9 /* VIMVideoFairPlayFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoFairPlayFile.m; path = VimeoNetworking/Sources/Models/VIMVideoFairPlayFile.m; sourceTree = ""; }; + 300CFD20A787C853925F7BAE4CBFAA57 /* Request+Picture.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Picture.swift"; path = "VimeoNetworking/Sources/Request+Picture.swift"; sourceTree = ""; }; + 31D638862512159911B72BCEA7447DC2 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; + 34C6DA693B07265C4DCBAE97EE2D5594 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; + 3791D86A6474626014DF7E87E64D0CC1 /* Pods-VimeoUpload-iOS-OldUpload-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-VimeoUpload-iOS-OldUpload-umbrella.h"; sourceTree = ""; }; + 39E99DADEC276F0039A9BB6590160B92 /* Pods-VimeoUpload-iOSTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VimeoUpload-iOSTests-frameworks.sh"; sourceTree = ""; }; + 3A30721CD46AC03D34457EE5B65B89B5 /* Pods-VimeoUpload-iOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload-iOSTests.release.xcconfig"; sourceTree = ""; }; + 3B507D130FFEBCD98C817BB196466C70 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; + 3BB9383C2F5F90FE89247B5400744EEE /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; + 3BF90FFD87F716998B15371C1C15106E /* Pods-VimeoUpload-iOS-OldUploadTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-VimeoUpload-iOS-OldUploadTests-acknowledgements.plist"; sourceTree = ""; }; + 3C2D82462A8952625139EFE730A1D996 /* Request+User.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+User.swift"; path = "VimeoNetworking/Sources/Request+User.swift"; sourceTree = ""; }; + 3CEE095D5D41BE01E7A438719525079D /* VIMObjectMapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMObjectMapper.m; path = VimeoNetworking/Sources/Models/VIMObjectMapper.m; sourceTree = ""; }; + 3DC534095BB14D1CFB95B341D8F3BA47 /* AFAutoPurgingImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFAutoPurgingImageCache.m; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.m"; sourceTree = ""; }; + 3FBFC292EA4C54BD77E35F6BA2F575DA /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3FCEA14CC7DF08D617ED59064F004953 /* VIMVideoPlayFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoPlayFile.m; path = VimeoNetworking/Sources/Models/VIMVideoPlayFile.m; sourceTree = ""; }; + 404EBED1541B755FB84CEB0B6BF5B214 /* VIMUploadTicket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMUploadTicket.m; path = VimeoNetworking/Sources/Models/VIMUploadTicket.m; sourceTree = ""; }; + 406EF671DD740C6C0D28A82B1460D7EA /* Pods-VimeoUpload-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-VimeoUpload-iOS-dummy.m"; sourceTree = ""; }; + 40F99392B8A59926F90CF0019AC7D57D /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = VimeoNetworking/Sources/Result.swift; sourceTree = ""; }; + 4148FF8C4708BAD38593A015777E7E41 /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; + 434D92DDD616ED26F2A45C6EAB3DF3C2 /* VIMTrigger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMTrigger.h; path = VimeoNetworking/Sources/Models/VIMTrigger.h; sourceTree = ""; }; + 44F122B80BACFA0494C2CFB8D9923E4C /* VIMInteraction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMInteraction.h; path = VimeoNetworking/Sources/Models/VIMInteraction.h; sourceTree = ""; }; + 45A744737CCC3FB2DDD29A8A01B7569A /* VIMNotificationsConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMNotificationsConnection.h; path = VimeoNetworking/Sources/Models/VIMNotificationsConnection.h; sourceTree = ""; }; + 4649337C65FD272A0B75F156507DBF18 /* AuthenticationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthenticationController.swift; path = VimeoNetworking/Sources/AuthenticationController.swift; sourceTree = ""; }; + 4791D611DF81AF66DC55313D98C6202C /* VIMVideoProgressiveFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoProgressiveFile.h; path = VimeoNetworking/Sources/Models/VIMVideoProgressiveFile.h; sourceTree = ""; }; + 48142BEFC1B53A12595D6F05AE02468E /* Pods-VimeoUpload-iOS-OldUpload-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VimeoUpload-iOS-OldUpload-resources.sh"; sourceTree = ""; }; + 48ADFB75E39D89D3FC25BA8311A8A3F8 /* VIMPrivacy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMPrivacy.m; path = VimeoNetworking/Sources/Models/VIMPrivacy.m; sourceTree = ""; }; + 4D332695D30979CBB112477B9E1D04E4 /* Pods-VimeoUpload-iOS-OldUploadTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VimeoUpload-iOS-OldUploadTests-resources.sh"; sourceTree = ""; }; + 4DB684C35D18CE0200411F5A0B79CFCD /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; + 50CF7C4EB12469B6AD2059AF45FA8ECB /* VIMVideoUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoUtils.m; path = VimeoNetworking/Sources/Models/VIMVideoUtils.m; sourceTree = ""; }; + 529DFA1EB388CF7DC8121A4EBCFF59B4 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 529DFAF91FFD13244AB22C540723EF06 /* Pods-VimeoUpload-iOS-OldUploadTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload-iOS-OldUploadTests.release.xcconfig"; sourceTree = ""; }; 5461D992F0D803F0F05DF72B2849301D /* AFNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 54DC90B45F8449D72BD99F888633B19A /* VIMPreference.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMPreference.h; path = VimeoNetworking/Sources/Models/VIMPreference.h; sourceTree = ""; }; - 58B62EE71CA018F665D8A742ADA3787A /* Request+PolicyDocument.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+PolicyDocument.swift"; path = "VimeoNetworking/Sources/Request+PolicyDocument.swift"; sourceTree = ""; }; - 58E8E3B2AB8BBBBA38D3F57103C1E48D /* VIMThumbnailUploadTicket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMThumbnailUploadTicket.h; path = VimeoNetworking/Sources/Models/VIMThumbnailUploadTicket.h; sourceTree = ""; }; - 590A00F4B0511AE74E5A1DE651C5634A /* Pods-VimeoUpload.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload.release.xcconfig"; sourceTree = ""; }; - 59ACC3119383FFF4846D1E7814D14DFB /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5A1207562C5BD2A71A7DC1A59A824D64 /* Request+Picture.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Picture.swift"; path = "VimeoNetworking/Sources/Request+Picture.swift"; sourceTree = ""; }; - 5AF82FDAADDBD52AD4A5E5FD40451B8F /* VIMSoundtrack.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMSoundtrack.m; path = VimeoNetworking/Sources/Models/VIMSoundtrack.m; sourceTree = ""; }; - 5C725AE77AFC85C663E9277B7E56E7F1 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5C9F540643D34B036DF1F955F1B4921C /* KeychainStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeychainStore.swift; path = VimeoNetworking/Sources/KeychainStore.swift; sourceTree = ""; }; - 5CCA2741496873A942541EFBB5531983 /* Pods-VimeoUpload-iOSTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VimeoUpload-iOSTests-resources.sh"; sourceTree = ""; }; - 5DFE210185943D679FFCBBA4B56CF1A6 /* Scope.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Scope.swift; path = VimeoNetworking/Sources/Scope.swift; sourceTree = ""; }; - 5FECF370ACCB82ABBBADEB2C23066C4F /* Request+Cache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Cache.swift"; path = "VimeoNetworking/Sources/Request+Cache.swift"; sourceTree = ""; }; - 600D472EDC99CA818353A5D89F987011 /* AFAutoPurgingImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFAutoPurgingImageCache.m; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.m"; sourceTree = ""; }; - 635406386C5C563BE8F30C456CF4EBDE /* VIMConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMConnection.h; path = VimeoNetworking/Sources/Models/VIMConnection.h; sourceTree = ""; }; - 63AC97C994F4A5DEDCFAB03FE2835587 /* VIMPreference.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMPreference.m; path = VimeoNetworking/Sources/Models/VIMPreference.m; sourceTree = ""; }; - 6402A355C8648B1DF96ACEBE585B656F /* VIMVODConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVODConnection.m; path = VimeoNetworking/Sources/Models/VIMVODConnection.m; sourceTree = ""; }; - 68D1AD311A8197BF776022C79C5F1ACE /* VIMVideoPlayFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoPlayFile.m; path = VimeoNetworking/Sources/Models/VIMVideoPlayFile.m; sourceTree = ""; }; - 6A0A4AB2432D657C9297E64DCDDB03A9 /* VimeoNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "VimeoNetworking-dummy.m"; sourceTree = ""; }; - 6A7DD13AE760F49BD336D2C01BAA7890 /* Pods-VimeoUpload-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload-iOS.debug.xcconfig"; sourceTree = ""; }; - 6A8AD460DA5A2F6BCCC1E450EFCD4B60 /* VIMUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMUser.h; path = VimeoNetworking/Sources/Models/VIMUser.h; sourceTree = ""; }; - 6AC1A1CA96496068B2690A54CEA6343D /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 55D5445B186DDBBEC7D7A9B467FC2E6A /* VIMObjectMapper+Generic.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "VIMObjectMapper+Generic.swift"; path = "VimeoNetworking/Sources/VIMObjectMapper+Generic.swift"; sourceTree = ""; }; + 574D37AFD6B63C7C543B8DDCC8BBCDCD /* Scope.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Scope.swift; path = VimeoNetworking/Sources/Scope.swift; sourceTree = ""; }; + 57B784EA87250DC92F76F6BF0638D4D2 /* VIMReviewPage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VIMReviewPage.swift; path = VimeoNetworking/Sources/Models/VIMReviewPage.swift; sourceTree = ""; }; + 58047C8CC5F49283333E246CA9F56BFA /* VIMVideoPlayRepresentation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoPlayRepresentation.m; path = VimeoNetworking/Sources/Models/VIMVideoPlayRepresentation.m; sourceTree = ""; }; + 58588D4FE9CAD101CBA9E66CF55B111F /* VIMAppeal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMAppeal.m; path = VimeoNetworking/Sources/Models/VIMAppeal.m; sourceTree = ""; }; + 592399628685EEA2CBCEAA22472FB309 /* Request+Authentication.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Authentication.swift"; path = "VimeoNetworking/Sources/Request+Authentication.swift"; sourceTree = ""; }; + 594B408BD401FB948979F4BDA15CC9EA /* VIMVideo+VOD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "VIMVideo+VOD.m"; path = "VimeoNetworking/Sources/Models/VIMVideo+VOD.m"; sourceTree = ""; }; + 5A3A4AC7EEAC2A5D6B93D6AA8DA6DEE8 /* Request+Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Notifications.swift"; path = "VimeoNetworking/Sources/Request+Notifications.swift"; sourceTree = ""; }; + 5C4B2D0192E9B889AE401D325E73A05B /* VIMComment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMComment.m; path = VimeoNetworking/Sources/Models/VIMComment.m; sourceTree = ""; }; + 5D59C2A0B1AC7D635763EE682582F1C1 /* VIMVideoDRMFiles.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoDRMFiles.h; path = VimeoNetworking/Sources/Models/VIMVideoDRMFiles.h; sourceTree = ""; }; + 5E4FA6AA687FAD3C73FA4D5F778B6994 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; + 5FC7D02188E2C34BE891C0A1C34CE10A /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; + 6009E10F0E97820B85D42C5B1B5EADFB /* VIMVideoDRMFiles.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoDRMFiles.m; path = VimeoNetworking/Sources/Models/VIMVideoDRMFiles.m; sourceTree = ""; }; + 61BBAE14F6D05F87DD0A7A0F550824DD /* Pods-VimeoUpload-iOSTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VimeoUpload-iOSTests-resources.sh"; sourceTree = ""; }; + 620D09827DEDF296949C919BB5E207C4 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; + 633F03E86937C4E4A5EB10440B86406E /* VIMTag.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMTag.m; path = VimeoNetworking/Sources/Models/VIMTag.m; sourceTree = ""; }; + 6497695CF3E669E163206BB20DBAFE53 /* VIMGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMGroup.h; path = VimeoNetworking/Sources/Models/VIMGroup.h; sourceTree = ""; }; + 64F81D9AB162FD3AFF5E21392C105385 /* VIMVideo+VOD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "VIMVideo+VOD.h"; path = "VimeoNetworking/Sources/Models/VIMVideo+VOD.h"; sourceTree = ""; }; + 65544531C57D7687204CF1A58500C6BB /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 66DF12E58DBB07F4E0A32A90407E7F10 /* VIMVideoPreference.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoPreference.h; path = VimeoNetworking/Sources/Models/VIMVideoPreference.h; sourceTree = ""; }; + 67584EC80399FD96630D745DA4D1A98F /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; + 67E8730E582CED91AFE4FA07B317CF43 /* VIMVideo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideo.h; path = VimeoNetworking/Sources/Models/VIMVideo.h; sourceTree = ""; }; + 686E7A5A8052386182347D07482C3C67 /* VIMUploadTicket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMUploadTicket.h; path = VimeoNetworking/Sources/Models/VIMUploadTicket.h; sourceTree = ""; }; 6C6F9D9FE6FFC0791183DADBD393CBFE /* Pods_VimeoUpload_iOS_OldUpload.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_VimeoUpload_iOS_OldUpload.framework; path = "Pods-VimeoUpload-iOS-OldUpload.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 6C9FDB087D69B2FF78F76AAF8C24EA80 /* Pods-VimeoUpload-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-VimeoUpload-iOS.modulemap"; sourceTree = ""; }; - 6E34B0E33381605BC20762BA521A846C /* VIMRecommendation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMRecommendation.h; path = VimeoNetworking/Sources/Models/VIMRecommendation.h; sourceTree = ""; }; - 6ED127F95CDCB38838CC180BF12E4D55 /* Pods-VimeoUpload-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VimeoUpload-resources.sh"; sourceTree = ""; }; - 70A33F9F7F54570EFF69A144E3A3F760 /* VIMVideo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideo.m; path = VimeoNetworking/Sources/Models/VIMVideo.m; sourceTree = ""; }; - 70B44A30D123EB8B4E494C3750DC262F /* VIMProgrammedContent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VIMProgrammedContent.swift; path = VimeoNetworking/Sources/Models/VIMProgrammedContent.swift; sourceTree = ""; }; - 712E55059FAF64DCE6FDA02F37A5AA2E /* Pods-VimeoUpload-iOS-OldUploadTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-VimeoUpload-iOS-OldUploadTests-dummy.m"; sourceTree = ""; }; - 72BF022BF820248A7DC00916D1CC4205 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; - 761B02BADB3E7B60DB3FF23CD76B6AF2 /* VIMVideoHLSFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoHLSFile.m; path = VimeoNetworking/Sources/Models/VIMVideoHLSFile.m; sourceTree = ""; }; - 77C69108CD986B77A9C0122212FD6613 /* PlayProgress.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlayProgress.swift; path = VimeoNetworking/Sources/Models/PlayProgress.swift; sourceTree = ""; }; - 78D4C6E7DFAF7621B138929C43CEAD58 /* VIMUploadTicket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMUploadTicket.m; path = VimeoNetworking/Sources/Models/VIMUploadTicket.m; sourceTree = ""; }; - 78E698DE1E56024C0E969710944608D8 /* VimeoNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VimeoNetworking.h; path = VimeoNetworking/Sources/VimeoNetworking.h; sourceTree = ""; }; - 7AED40431616221804026E870D2C4C82 /* Request+Category.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Category.swift"; path = "VimeoNetworking/Sources/Request+Category.swift"; sourceTree = ""; }; - 7C61AA5DF51D49E9C9ADF4B82C45FE7B /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; - 7E1665CCFC918114440A9C679C0EBC34 /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; - 7EB63AB5D89A08887565D82CBAC4A0A3 /* ErrorCode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ErrorCode.swift; path = VimeoNetworking/Sources/ErrorCode.swift; sourceTree = ""; }; - 7EDADBD03E681FF52A2DE74B6E5A00A4 /* VIMVideo+VOD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "VIMVideo+VOD.m"; path = "VimeoNetworking/Sources/Models/VIMVideo+VOD.m"; sourceTree = ""; }; - 7F86DFC5D05E754156CA58540DAA1BAC /* VimeoNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "VimeoNetworking-umbrella.h"; sourceTree = ""; }; - 7FA3810B9E6829C7403D5D0F19EDACFD /* VIMVideoPreference.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoPreference.m; path = VimeoNetworking/Sources/Models/VIMVideoPreference.m; sourceTree = ""; }; - 80E26D00B3A1139F9D88C0E57B6F0DA3 /* Pods-VimeoUpload-iOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload-iOSTests.debug.xcconfig"; sourceTree = ""; }; - 813FFFC7FD25CCBEFAADC204524CBF26 /* VIMObjectMapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMObjectMapper.h; path = VimeoNetworking/Sources/Models/VIMObjectMapper.h; sourceTree = ""; }; - 81B9D7C302854F8DDD4076AE8D68B1B7 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8251D7E0AE21801085F5938A385FEECA /* Request+Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Notifications.swift"; path = "VimeoNetworking/Sources/Request+Notifications.swift"; sourceTree = ""; }; + 6D47993D1669EDACAE23DDA31EE1D750 /* VIMActivity.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMActivity.m; path = VimeoNetworking/Sources/Models/VIMActivity.m; sourceTree = ""; }; + 6D9E2B78FA477FD2DC06D244EFF1172F /* AFNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.xcconfig; sourceTree = ""; }; + 6DAFB57C55DAA0F49681B1626DBE7837 /* VimeoReachability.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VimeoReachability.swift; path = VimeoNetworking/Sources/VimeoReachability.swift; sourceTree = ""; }; + 714AC1F0B428E041A21A3D9426A0F56D /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; + 714C5B0978A3C1F5DFD5196353A4674C /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; + 71DED1DC4C3953219DB409A92F0E546F /* VIMAppeal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMAppeal.h; path = VimeoNetworking/Sources/Models/VIMAppeal.h; sourceTree = ""; }; + 7426D8145A3155978F0515BEEFCB8447 /* Request+Comment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Comment.swift"; path = "VimeoNetworking/Sources/Request+Comment.swift"; sourceTree = ""; }; + 768B121F5BBF2F6F17A30D3AF51F39BC /* Pods-VimeoUpload-iOSTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-VimeoUpload-iOSTests.modulemap"; sourceTree = ""; }; + 770CD4C87AE1AA8397D0F6E251DCC540 /* VIMTrigger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMTrigger.m; path = VimeoNetworking/Sources/Models/VIMTrigger.m; sourceTree = ""; }; + 7983F38BB3C81F07425BFAF1E6289C43 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; + 7AC12ADD13D05812352645C5BAEFD99D /* digicert-sha2.cer */ = {isa = PBXFileReference; includeInIndex = 1; name = "digicert-sha2.cer"; path = "VimeoNetworking/Resources/digicert-sha2.cer"; sourceTree = ""; }; + 7BD6B4F1BB9B251C7BEC59722C42AB0B /* VIMActivity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMActivity.h; path = VimeoNetworking/Sources/Models/VIMActivity.h; sourceTree = ""; }; + 7D22624966A39C8E5C113CBF14F4C8CE /* VIMPreference.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMPreference.m; path = VimeoNetworking/Sources/Models/VIMPreference.m; sourceTree = ""; }; + 7DE0E38A99298F3EF954325E154AA215 /* AFAutoPurgingImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFAutoPurgingImageCache.h; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.h"; sourceTree = ""; }; + 7E5825EEC0DE908A1A3B761CD116EEB4 /* Pods-VimeoUpload-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-VimeoUpload-iOS-umbrella.h"; sourceTree = ""; }; + 7FE473E948247E7F9972B5508A413C38 /* VIMLiveChat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VIMLiveChat.swift; path = VimeoNetworking/Sources/Models/VIMLiveChat.swift; sourceTree = ""; }; + 83E3827F28F7C2A0D65AFDF43BABB9C6 /* VimeoNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "VimeoNetworking-prefix.pch"; sourceTree = ""; }; 84027987FF22C70AB94CB6DB9FB0CBD5 /* Pods_VimeoUpload_iOS_OldUploadTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_VimeoUpload_iOS_OldUploadTests.framework; path = "Pods-VimeoUpload-iOS-OldUploadTests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 8854A148A98E4C656CC085331FEE2A76 /* Pods-VimeoUpload-iOS-OldUploadTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VimeoUpload-iOS-OldUploadTests-frameworks.sh"; sourceTree = ""; }; - 89AB0F31192190BE89B818137CC8A970 /* AFNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.xcconfig; sourceTree = ""; }; - 8A0EACC1726F08952CBA6D09D34A5E69 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; - 8A85F49E86198194EBD238BC4D17B241 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; - 8B32A79195E4789E0D38A7C199CAB76A /* Request+Channel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Channel.swift"; path = "VimeoNetworking/Sources/Request+Channel.swift"; sourceTree = ""; }; - 8B62CA840DF965405A11E44123254BAC /* VIMVideoDRMFiles.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoDRMFiles.h; path = VimeoNetworking/Sources/Models/VIMVideoDRMFiles.h; sourceTree = ""; }; - 8C5391EE3E5EBC61C92F45484F77F90B /* VIMVODItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVODItem.h; path = VimeoNetworking/Sources/Models/VIMVODItem.h; sourceTree = ""; }; - 8D434E487EE19FF84352C937F1008B3B /* Pods-VimeoUpload-iOS-OldUpload.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-VimeoUpload-iOS-OldUpload.modulemap"; sourceTree = ""; }; - 8E9A61DA32392AD194FABDB69398E9DA /* Request+ProgrammedContent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+ProgrammedContent.swift"; path = "VimeoNetworking/Sources/Request+ProgrammedContent.swift"; sourceTree = ""; }; - 90087B0D4E77D07B4E9F1D217680CB6B /* VIMVideoFairPlayFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoFairPlayFile.h; path = VimeoNetworking/Sources/Models/VIMVideoFairPlayFile.h; sourceTree = ""; }; - 90CE0CDA94D5A8DDA81A0AA529497EEB /* Pods-VimeoUpload-iOSTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-VimeoUpload-iOSTests-acknowledgements.markdown"; sourceTree = ""; }; - 9181B76CF70F368A91B6164CF5EA35AF /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; - 927C6F167862BCAC06F4E08000EB8C58 /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; - 93737ECEFDDCCE11126CF5D863927683 /* Pods-VimeoUpload-iOS-OldUploadTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-VimeoUpload-iOS-OldUploadTests-umbrella.h"; sourceTree = ""; }; + 85AE31BCA21D12620C2D9B0F9386A7EA /* VIMVideoPlayFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoPlayFile.h; path = VimeoNetworking/Sources/Models/VIMVideoPlayFile.h; sourceTree = ""; }; + 88E89F9C17ADFE5CAD4DE8D8CC0A0D28 /* Pods-VimeoUpload-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-VimeoUpload-iOS.modulemap"; sourceTree = ""; }; + 89919609A4C82EA22E98E3889206920D /* Pods-VimeoUpload-iOS-OldUpload-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-VimeoUpload-iOS-OldUpload-acknowledgements.plist"; sourceTree = ""; }; + 8BA8C97144A1B46C16C2425AD02F2647 /* VIMChannel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMChannel.h; path = VimeoNetworking/Sources/Models/VIMChannel.h; sourceTree = ""; }; + 8BC4A625F838AE6E28EAA14F8EABBEEE /* VIMAccount.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMAccount.m; path = VimeoNetworking/Sources/Models/VIMAccount.m; sourceTree = ""; }; + 8C9165823267758FD6A92FD5BE0B6610 /* Pods-VimeoUpload-iOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VimeoUpload-iOS-resources.sh"; sourceTree = ""; }; + 8D9225F1748860C325BC0B5470023589 /* Request+Configs.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Configs.swift"; path = "VimeoNetworking/Sources/Request+Configs.swift"; sourceTree = ""; }; + 8DA9B270A4EBCC6043F579AA44249C2A /* VIMUploadQuota.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VIMUploadQuota.swift; path = VimeoNetworking/Sources/Models/VIMUploadQuota.swift; sourceTree = ""; }; + 8DAE9E29D14DFD809059EC3455D955F8 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + 8E6BFE7016A60D816B0E3C15C0E2F3BF /* AFImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFImageDownloader.h; path = "UIKit+AFNetworking/AFImageDownloader.h"; sourceTree = ""; }; + 8E6D96934932FA9638F6BD2E31B8D86E /* Pods-VimeoUpload-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-VimeoUpload-acknowledgements.plist"; sourceTree = ""; }; + 8EA774D3660D1E35584A49BC04468978 /* VIMThumbnailUploadTicket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMThumbnailUploadTicket.m; path = VimeoNetworking/Sources/Models/VIMThumbnailUploadTicket.m; sourceTree = ""; }; + 8ED7E045948374FAE37E1258BA3366F1 /* VIMNotificationsConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMNotificationsConnection.m; path = VimeoNetworking/Sources/Models/VIMNotificationsConnection.m; sourceTree = ""; }; + 91179DF7663D831C96D269BFB58AD522 /* VIMCredit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMCredit.m; path = VimeoNetworking/Sources/Models/VIMCredit.m; sourceTree = ""; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9468DEA78D57D9B0E4C7AC7F5E504C7B /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; + 952F507F085A0B032F0A5999B8BB257B /* Pods-VimeoUpload-iOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-VimeoUpload-iOS-acknowledgements.plist"; sourceTree = ""; }; + 9531324FE69A206C8D425D93D70BCB29 /* Pods-VimeoUpload-iOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VimeoUpload-iOS-frameworks.sh"; sourceTree = ""; }; 95D6664DF623C80FB5A5C526B85C924B /* Pods_VimeoUpload.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_VimeoUpload.framework; path = "Pods-VimeoUpload.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 95DCAF0CD8E8A04FB849D0EB3ED32D01 /* VIMPicture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMPicture.h; path = VimeoNetworking/Sources/Models/VIMPicture.h; sourceTree = ""; }; - 9717512502B2CBB64AF956ABFD3ECF10 /* Request+Configs.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Configs.swift"; path = "VimeoNetworking/Sources/Request+Configs.swift"; sourceTree = ""; }; - 994751133E5FF4982C5BCE1CAAB6A78B /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; - 9A4BE21C00C1529F947AEADC6AFEC0AB /* VIMRecommendation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMRecommendation.m; path = VimeoNetworking/Sources/Models/VIMRecommendation.m; sourceTree = ""; }; - 9ACF5761B029845B3F2897FDE0D45BB0 /* Pods-VimeoUpload-iOS-OldUploadTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-VimeoUpload-iOS-OldUploadTests-acknowledgements.plist"; sourceTree = ""; }; - 9AF9D80E0A02BB32BC9B773852EB179C /* VIMNotificationsConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMNotificationsConnection.m; path = VimeoNetworking/Sources/Models/VIMNotificationsConnection.m; sourceTree = ""; }; - 9BB0F28B65CFA82A1097FD4C71DA0487 /* Pods-VimeoUpload-iOS-OldUpload-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-VimeoUpload-iOS-OldUpload-acknowledgements.plist"; sourceTree = ""; }; - 9CB779FF1FA13F0CA99A13B6A0857464 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = VimeoNetworking/Sources/Response.swift; sourceTree = ""; }; - 9D84ED393688D7F4321FF3478294DAAA /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; - 9E78D488EE2F56C490F374FBD83C1062 /* Pods-VimeoUpload-iOS-OldUploadTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-VimeoUpload-iOS-OldUploadTests-acknowledgements.markdown"; sourceTree = ""; }; - 9FE2618631D9AF7217C1FC477FE2046E /* VIMObjectMapper+Generic.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "VIMObjectMapper+Generic.swift"; path = "VimeoNetworking/Sources/VIMObjectMapper+Generic.swift"; sourceTree = ""; }; - A0648207A189AF57F74C57B6416EFA4B /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; - A17090BB86BF96FF7E88156C3CB28957 /* AuthenticationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthenticationController.swift; path = VimeoNetworking/Sources/AuthenticationController.swift; sourceTree = ""; }; - A287772AED26189394F852F1383AC103 /* Request+Soundtrack.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Soundtrack.swift"; path = "VimeoNetworking/Sources/Request+Soundtrack.swift"; sourceTree = ""; }; - A33177A8F3A1862EEA26D30A1D63CC07 /* VIMPicture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMPicture.m; path = VimeoNetworking/Sources/Models/VIMPicture.m; sourceTree = ""; }; - A59DE65C23DA87346FB7BB1F08A38182 /* VIMVideoUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoUtils.m; path = VimeoNetworking/Sources/Models/VIMVideoUtils.m; sourceTree = ""; }; - A5CFEC28DA0D60B074FCFDEBB948B940 /* VIMVideoPlayRepresentation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoPlayRepresentation.h; path = VimeoNetworking/Sources/Models/VIMVideoPlayRepresentation.h; sourceTree = ""; }; - A5F7EE334D37C9A1E58488BE86B5C0EC /* AFNetworking.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = AFNetworking.modulemap; sourceTree = ""; }; - A69D06730C5B3566A7B8FF5A91C529C1 /* VIMPolicyDocument.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMPolicyDocument.h; path = VimeoNetworking/Sources/Models/VIMPolicyDocument.h; sourceTree = ""; }; - A6B196AB2ADA189C96F4A92DF020A2AB /* AFImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFImageDownloader.h; path = "UIKit+AFNetworking/AFImageDownloader.h"; sourceTree = ""; }; - A784B675172C4B624597642F4BFE56E7 /* SubscriptionCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubscriptionCollection.swift; path = VimeoNetworking/Sources/Models/SubscriptionCollection.swift; sourceTree = ""; }; - A81FB057C4219FBF8BD3D002E9E7272B /* VimeoNetworking.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = VimeoNetworking.modulemap; sourceTree = ""; }; - A8B0BB58820A0B1DA182E061E886411B /* Pods-VimeoUpload-iOSTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-VimeoUpload-iOSTests-dummy.m"; sourceTree = ""; }; - A95F8642BCADE8FFFF3519DABF17AB95 /* VIMPrivacy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMPrivacy.m; path = VimeoNetworking/Sources/Models/VIMPrivacy.m; sourceTree = ""; }; - AAB7FF3305C3F3E726189CE6DC03B4A6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - AE0DF6D9E98751FE374466891CF22E93 /* VIMObjectMapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMObjectMapper.m; path = VimeoNetworking/Sources/Models/VIMObjectMapper.m; sourceTree = ""; }; - AF5691A664BC371E586B7A9B0EA405C8 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; - B39620FF19ACEB51C1DEA18A7A12B2D0 /* Request+Toggle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Toggle.swift"; path = "VimeoNetworking/Sources/Request+Toggle.swift"; sourceTree = ""; }; - B44AB41921F9D9B0620A5C3553FE4B72 /* Request+Video.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Video.swift"; path = "VimeoNetworking/Sources/Request+Video.swift"; sourceTree = ""; }; - B4580F679371388C6FC87FF024534456 /* Pods-VimeoUpload-iOSTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-VimeoUpload-iOSTests-acknowledgements.plist"; sourceTree = ""; }; - B4C942B4810471391926C69DDF06F459 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; - B5BD0E4A9E13D4E5939E74CE749ACF61 /* VIMPrivacy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMPrivacy.h; path = VimeoNetworking/Sources/Models/VIMPrivacy.h; sourceTree = ""; }; - B665811DA7B0645668081A93D378BB87 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - B6671E602410D6092439152EADE23607 /* Request+Authentication.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Authentication.swift"; path = "VimeoNetworking/Sources/Request+Authentication.swift"; sourceTree = ""; }; - B784B3FDEB773915E04502100EB6F701 /* VIMUploadQuota.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMUploadQuota.h; path = VimeoNetworking/Sources/Models/VIMUploadQuota.h; sourceTree = ""; }; - B7F8E371904C34C30A4498FCCBE5F2AB /* VIMChannel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMChannel.h; path = VimeoNetworking/Sources/Models/VIMChannel.h; sourceTree = ""; }; - B88A43F94D3F984AA9F607E6D336933C /* Dictionary+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Dictionary+Extension.swift"; path = "VimeoNetworking/Sources/Dictionary+Extension.swift"; sourceTree = ""; }; - BBC4BAA3C77B593AEF959B3D4C03A3EE /* Pods-VimeoUpload-iOSTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-VimeoUpload-iOSTests-umbrella.h"; sourceTree = ""; }; - BC9E61ED1EDFE2CD20FA90CF00D4608B /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; - BDEBFF33778D5264ED6AEA58E613AE82 /* Pods-VimeoUpload-iOS-OldUpload-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-VimeoUpload-iOS-OldUpload-acknowledgements.markdown"; sourceTree = ""; }; - BEAA2896C0F3DE743E13BA30642E91F1 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - BFECB493111928B6FBC7E30A53CD6C0C /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; - C29192B1F683D403AFFD632D65221D49 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - C4CF223F05BF42A197EEB5B5F427FB15 /* Pods-VimeoUpload.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload.debug.xcconfig"; sourceTree = ""; }; - C550175B7EC7075E2835E8C7DCC2723F /* VIMBadge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VIMBadge.swift; path = VimeoNetworking/Sources/Models/VIMBadge.swift; sourceTree = ""; }; - C5624A087C10DE994D4F380D76D11CD8 /* AFAutoPurgingImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFAutoPurgingImageCache.h; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.h"; sourceTree = ""; }; - C99148A0B79F2354BFE4ACBDE082A809 /* VIMMappable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMMappable.h; path = VimeoNetworking/Sources/Models/VIMMappable.h; sourceTree = ""; }; - C99A95A93AB75AFFF2B725A21CFF7377 /* VIMPictureCollection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMPictureCollection.h; path = VimeoNetworking/Sources/Models/VIMPictureCollection.h; sourceTree = ""; }; - C9EA8CD923B36DA3EAD55FD3879A502F /* VIMVideoUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoUtils.h; path = VimeoNetworking/Sources/Models/VIMVideoUtils.h; sourceTree = ""; }; - CA212CD04BA30762B1CD913421957487 /* VIMTag.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMTag.h; path = VimeoNetworking/Sources/Models/VIMTag.h; sourceTree = ""; }; - CA3350835CEC5107C6C293FE2D04E77F /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; - CA537B840B304BCD493A48F81F820D06 /* Pods-VimeoUpload-iOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VimeoUpload-iOS-resources.sh"; sourceTree = ""; }; - CB8AD1BB40CAF74E14801DCD2423742E /* VIMNotification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMNotification.m; path = VimeoNetworking/Sources/Models/VIMNotification.m; sourceTree = ""; }; - CBED8FAC62EC97352938CA51099A55E9 /* Pods-VimeoUpload-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload-iOS.release.xcconfig"; sourceTree = ""; }; - CC338E19D1B0972E20EE7505BA2A23D2 /* VIMInteraction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMInteraction.h; path = VimeoNetworking/Sources/Models/VIMInteraction.h; sourceTree = ""; }; - CCB098F1FA5708F997DE9A18F1CA402A /* Pods-VimeoUpload-iOS-OldUpload-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-VimeoUpload-iOS-OldUpload-umbrella.h"; sourceTree = ""; }; - CF8F7E3CBB1B67B094851E251BC41BC2 /* VIMSizeQuota.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMSizeQuota.h; path = VimeoNetworking/Sources/Models/VIMSizeQuota.h; sourceTree = ""; }; - D112466303A0600AF69CB9E02EAA27E5 /* VIMVideoProgressiveFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoProgressiveFile.m; path = VimeoNetworking/Sources/Models/VIMVideoProgressiveFile.m; sourceTree = ""; }; - D1C4237239681814FFDD6E43465463EE /* VIMAppeal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMAppeal.h; path = VimeoNetworking/Sources/Models/VIMAppeal.h; sourceTree = ""; }; - D1F5A4A4953624BBBEF0F5FCB89E5137 /* digicert-sha2.cer */ = {isa = PBXFileReference; includeInIndex = 1; name = "digicert-sha2.cer"; path = "VimeoNetworking/Resources/digicert-sha2.cer"; sourceTree = ""; }; - D2425F9FA4CEFF602F6F4A053F70B656 /* Mappable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Mappable.swift; path = VimeoNetworking/Sources/Mappable.swift; sourceTree = ""; }; - D24A7C1D41EE2BA30BB03DAF0C03B000 /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; - D39B2D537CC8914B5AB105B380641859 /* VIMQuantityQuota.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMQuantityQuota.h; path = VimeoNetworking/Sources/Models/VIMQuantityQuota.h; sourceTree = ""; }; - D3BA141A5553BAF7C116D19D1C669DC6 /* VIMVideoProgressiveFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoProgressiveFile.h; path = VimeoNetworking/Sources/Models/VIMVideoProgressiveFile.h; sourceTree = ""; }; - D41615CC354B8B0A35926E7CC9AD71F6 /* Pods-VimeoUpload-iOSTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-VimeoUpload-iOSTests.modulemap"; sourceTree = ""; }; - D53F12E8EBC660E39EA3C8787CA543C4 /* VIMAccount.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMAccount.h; path = VimeoNetworking/Sources/Models/VIMAccount.h; sourceTree = ""; }; - D65690666F392CD6883791300864C4BF /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; - D6E40E32356AA402232F099288457708 /* VIMConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMConnection.m; path = VimeoNetworking/Sources/Models/VIMConnection.m; sourceTree = ""; }; - D8008689D0B9CEE5A8B4F22EDD838235 /* VIMInteraction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMInteraction.m; path = VimeoNetworking/Sources/Models/VIMInteraction.m; sourceTree = ""; }; - D91BABF53F46F9B94488819367CB559E /* VIMUploadQuota.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMUploadQuota.m; path = VimeoNetworking/Sources/Models/VIMUploadQuota.m; sourceTree = ""; }; - DA2A360A317E5BEEB0074445003EDB17 /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; - DB074C96C719EAE42367359FBE57E21F /* VIMVideoDASHFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoDASHFile.h; path = VimeoNetworking/Sources/Models/VIMVideoDASHFile.h; sourceTree = ""; }; - DE1A0D9A33DD15FBE6EBBA8E2BC96A15 /* String+Parameters.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+Parameters.swift"; path = "VimeoNetworking/Sources/String+Parameters.swift"; sourceTree = ""; }; - DEA77B71C751EBAB48B5E4F1CB110265 /* VIMModelObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMModelObject.m; path = VimeoNetworking/Sources/Models/VIMModelObject.m; sourceTree = ""; }; - DF54671CD48BA10A8DA67E5817580E1A /* VIMAppeal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMAppeal.m; path = VimeoNetworking/Sources/Models/VIMAppeal.m; sourceTree = ""; }; - DF6081927D4DC329FD7ED0F883D3B576 /* PinCodeInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PinCodeInfo.swift; path = VimeoNetworking/Sources/Models/PinCodeInfo.swift; sourceTree = ""; }; - E02C81A3C7316395924E658D5BC8F10E /* Pods-VimeoUpload-iOSTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-VimeoUpload-iOSTests-frameworks.sh"; sourceTree = ""; }; - E057FC5D3359A0584EF6495E7E3F6939 /* NSURLSessionConfiguration+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSURLSessionConfiguration+Extensions.swift"; path = "VimeoNetworking/Sources/NSURLSessionConfiguration+Extensions.swift"; sourceTree = ""; }; - E062278A9F4389EDD1742AD9257524FC /* VIMVideoFairPlayFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoFairPlayFile.m; path = VimeoNetworking/Sources/Models/VIMVideoFairPlayFile.m; sourceTree = ""; }; - E0B7E1AC52305E19ED018CF401606970 /* NetworkingNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkingNotification.swift; path = VimeoNetworking/Sources/NetworkingNotification.swift; sourceTree = ""; }; - E1D8B2BDDECC16F881030CB0199BCF01 /* Pods-VimeoUpload-iOS-OldUploadTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-VimeoUpload-iOS-OldUploadTests.modulemap"; sourceTree = ""; }; - E5E07926E2F0D6EBCCF626360CF3A857 /* VimeoResponseSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VimeoResponseSerializer.swift; path = VimeoNetworking/Sources/VimeoResponseSerializer.swift; sourceTree = ""; }; - E658A3C4548684F7BC6D6A4843EBEE23 /* AppConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AppConfiguration.swift; path = VimeoNetworking/Sources/AppConfiguration.swift; sourceTree = ""; }; - E66CADEDAC09183F04136EEF61E99514 /* Pods-VimeoUpload.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-VimeoUpload.modulemap"; sourceTree = ""; }; - E66FD2DF824A81DF2975B49945EAEA30 /* VimeoNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = VimeoNetworking.xcconfig; sourceTree = ""; }; - E7907829F15403992DC9A4B548CD41E1 /* NSError+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSError+Extensions.swift"; path = "VimeoNetworking/Sources/NSError+Extensions.swift"; sourceTree = ""; }; - E79ADD6A0AFBC97CBC10D3AC1EA024DC /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = VimeoNetworking/Sources/Request.swift; sourceTree = ""; }; - E7FF72F2B598E25BCF0422AC7894A20D /* VIMVODItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVODItem.m; path = VimeoNetworking/Sources/Models/VIMVODItem.m; sourceTree = ""; }; - EB013DBE7F6A441F3FC60D8F0F84FE89 /* VIMVideoFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoFile.m; path = VimeoNetworking/Sources/Models/VIMVideoFile.m; sourceTree = ""; }; - ECF46B5E5956D18C9AAD34EE80C8F77E /* VIMModelObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMModelObject.h; path = VimeoNetworking/Sources/Models/VIMModelObject.h; sourceTree = ""; }; + 977CC708C885349F45A1FFAA4DB28215 /* Pods-VimeoUpload-iOS-OldUpload-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-VimeoUpload-iOS-OldUpload-dummy.m"; sourceTree = ""; }; + 98158361BFB9C60E8591A14756CDA100 /* VimeoClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VimeoClient.swift; path = VimeoNetworking/Sources/VimeoClient.swift; sourceTree = ""; }; + 985AD4A3003DCEE2DA31FF69A61A84DB /* AFNetworking.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AFNetworking.modulemap; sourceTree = ""; }; + 9899127E9167B9D6EBA7784D892653A2 /* VIMModelObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMModelObject.m; path = VimeoNetworking/Sources/Models/VIMModelObject.m; sourceTree = ""; }; + 9A25EFA17D3547663AC40E439C04067B /* AccountStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AccountStore.swift; path = VimeoNetworking/Sources/AccountStore.swift; sourceTree = ""; }; + 9A3C26DB3876114928F36AA5CF7EA0F5 /* Pods-VimeoUpload-iOS-OldUploadTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-VimeoUpload-iOS-OldUploadTests.modulemap"; sourceTree = ""; }; + 9D016933AD5FAF12115C7809993E0D09 /* Pods-VimeoUpload-iOSTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-VimeoUpload-iOSTests-acknowledgements.plist"; sourceTree = ""; }; + 9D02A2893866B878CFEE338D26DC5313 /* Request+Video.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Video.swift"; path = "VimeoNetworking/Sources/Request+Video.swift"; sourceTree = ""; }; + 9D3768CC6CDDD824D653B921C0D96F6F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9EC36289436BC8F92161297A7A6BB279 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; + 9FD22B103D648342069FE779359C9A56 /* VIMVideoDASHFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoDASHFile.m; path = VimeoNetworking/Sources/Models/VIMVideoDASHFile.m; sourceTree = ""; }; + A136B115C9B8C37D0A5C9201FAB171BF /* VimeoNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = VimeoNetworking.xcconfig; sourceTree = ""; }; + A23F6E3249A977997C8255519997C806 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; + A250189A49355B43BD9E62364DDB456F /* VIMBadge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VIMBadge.swift; path = VimeoNetworking/Sources/Models/VIMBadge.swift; sourceTree = ""; }; + A27737DBFB0A1312C26B1C96EFC0D9CC /* Mappable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Mappable.swift; path = VimeoNetworking/Sources/Mappable.swift; sourceTree = ""; }; + A6EFA92C2421798DB0FF8C3149FE8ACA /* VimeoNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "VimeoNetworking-dummy.m"; sourceTree = ""; }; + A764F24CBBAA6CD584EE0CBFB5F80D40 /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; + A7C668C5587BF895640E72EA227806D7 /* AFImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFImageDownloader.m; path = "UIKit+AFNetworking/AFImageDownloader.m"; sourceTree = ""; }; + A7C8E8C116C75D16F52EA1D3242FF59D /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; + A962DA72E1B4C69B2EBB0CF5A88E990E /* VIMCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMCategory.m; path = VimeoNetworking/Sources/Models/VIMCategory.m; sourceTree = ""; }; + A9988828014FB5018F75CBEC9127C5EE /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; + AA0EE93C62DBFD353E86F429715D0E8A /* Pods-VimeoUpload.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload.debug.xcconfig"; sourceTree = ""; }; + AA188B201DCC201C7D1451547279808D /* VIMVideoUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoUtils.h; path = VimeoNetworking/Sources/Models/VIMVideoUtils.h; sourceTree = ""; }; + AB1A7C0E9CF186DC326357962BEC7AF5 /* VIMPictureCollection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMPictureCollection.m; path = VimeoNetworking/Sources/Models/VIMPictureCollection.m; sourceTree = ""; }; + AC0E35EE90FE7076880E7A717BD0E534 /* ResponseCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseCache.swift; path = VimeoNetworking/Sources/ResponseCache.swift; sourceTree = ""; }; + AC1504799A29B9D2BC4470E3E39BCA33 /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; + AD3546051FCB66387E4E83C5B7BBACE9 /* Request+Channel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Channel.swift"; path = "VimeoNetworking/Sources/Request+Channel.swift"; sourceTree = ""; }; + AE40B3ABF25113AD8DB2293E39C0B740 /* Request+ProgrammedContent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+ProgrammedContent.swift"; path = "VimeoNetworking/Sources/Request+ProgrammedContent.swift"; sourceTree = ""; }; + AE97ADD7133B74F569CDBAA703BCFD65 /* VIMPolicyDocument.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMPolicyDocument.h; path = VimeoNetworking/Sources/Models/VIMPolicyDocument.h; sourceTree = ""; }; + AEA5F1020ACBC1E16F7C377115328C63 /* Spatial.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Spatial.swift; path = VimeoNetworking/Sources/Models/Spatial.swift; sourceTree = ""; }; + AFA9CE28C85633044910F197AE62024B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B0A90EF0370E7F413E923D813F419C81 /* String+Parameters.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+Parameters.swift"; path = "VimeoNetworking/Sources/String+Parameters.swift"; sourceTree = ""; }; + B0B2B4EA4DB47084F317FFA4C51ADC9C /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; + B0B8B622C89D248F892F70436F3C4927 /* Request+PolicyDocument.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+PolicyDocument.swift"; path = "VimeoNetworking/Sources/Request+PolicyDocument.swift"; sourceTree = ""; }; + B1A9E4CA052B6791BE98CABC26BDAE96 /* VIMLiveTime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VIMLiveTime.swift; path = VimeoNetworking/Sources/Models/VIMLiveTime.swift; sourceTree = ""; }; + B3962DB52E64A2446FC1C17FE675A0E6 /* VIMLive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VIMLive.swift; path = VimeoNetworking/Sources/Models/VIMLive.swift; sourceTree = ""; }; + B500B2A8EF05B34704F9D34CF2CF8E95 /* VIMVODItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVODItem.m; path = VimeoNetworking/Sources/Models/VIMVODItem.m; sourceTree = ""; }; + B504FF86E8CC20D89C5EE300F2F127DC /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; + B55EE59B77D464EB14B10235EDA73472 /* VIMCredit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMCredit.h; path = VimeoNetworking/Sources/Models/VIMCredit.h; sourceTree = ""; }; + B72FCA3488DE7361A5D81A8BD5423909 /* VIMLiveQuota.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VIMLiveQuota.swift; path = VimeoNetworking/Sources/Models/VIMLiveQuota.swift; sourceTree = ""; }; + B9E707DCE76297154377405C59ABC4F0 /* Pods-VimeoUpload.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload.release.xcconfig"; sourceTree = ""; }; + BA6089003716E8736B3C3E374008AB4D /* Pods-VimeoUpload-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-VimeoUpload-dummy.m"; sourceTree = ""; }; + BB9CD7C1F4049E75077274C6DCC81113 /* Pods-VimeoUpload-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload-iOS.release.xcconfig"; sourceTree = ""; }; + BCB75948A89DA6FAFB6053EFB7B39628 /* VIMPicture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMPicture.h; path = VimeoNetworking/Sources/Models/VIMPicture.h; sourceTree = ""; }; + BCCE3CCA275CFD5838CD6B0FFCC72CD3 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; + BEF622C81A2F20DE82B18B4C1FB4977C /* Request+Soundtrack.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Soundtrack.swift"; path = "VimeoNetworking/Sources/Request+Soundtrack.swift"; sourceTree = ""; }; + C22130DB8AB8C29FBC7F7AF78E3A4E9E /* VIMChannel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMChannel.m; path = VimeoNetworking/Sources/Models/VIMChannel.m; sourceTree = ""; }; + C2D06C677AB5FAC517FFE8B4D60E8A1F /* VIMNotification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMNotification.h; path = VimeoNetworking/Sources/Models/VIMNotification.h; sourceTree = ""; }; + C5E4251390579CA8A4647B705BD6DD41 /* VIMVideoFairPlayFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoFairPlayFile.h; path = VimeoNetworking/Sources/Models/VIMVideoFairPlayFile.h; sourceTree = ""; }; + C60CB7517BFF164178542CD7CB08BFC6 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = VimeoNetworking/Sources/Response.swift; sourceTree = ""; }; + C716B4800FAD0DDAAAFFAB57FFC40242 /* VIMModelObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMModelObject.h; path = VimeoNetworking/Sources/Models/VIMModelObject.h; sourceTree = ""; }; + C83490C101E129974A2EEFB8C04E04EC /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; + C867648C482317091BC988216AE7BCEF /* VIMGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMGroup.m; path = VimeoNetworking/Sources/Models/VIMGroup.m; sourceTree = ""; }; + C8D7668C9068459DA53626C11CC3A364 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; + C8E3687C68FDA0D536295AA785351E89 /* VIMVideoFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoFile.h; path = VimeoNetworking/Sources/Models/VIMVideoFile.h; sourceTree = ""; }; + C913DD9402D7FCE7BBA97568950974A6 /* VIMAccount.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMAccount.h; path = VimeoNetworking/Sources/Models/VIMAccount.h; sourceTree = ""; }; + C974CC35310983ABAED5BA8CF32332A6 /* Subscription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Subscription.swift; path = VimeoNetworking/Sources/Models/Subscription.swift; sourceTree = ""; }; + CAC4F7845137416DDE1B0102830EDF83 /* VIMVODItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVODItem.h; path = VimeoNetworking/Sources/Models/VIMVODItem.h; sourceTree = ""; }; + CBE34181F7DEEA3A80140282BBC6AB0B /* VIMNotification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMNotification.m; path = VimeoNetworking/Sources/Models/VIMNotification.m; sourceTree = ""; }; + CC35A7CF63A081875F9CF7A13AED2B6F /* VIMThumbnailUploadTicket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMThumbnailUploadTicket.h; path = VimeoNetworking/Sources/Models/VIMThumbnailUploadTicket.h; sourceTree = ""; }; + CCF8D5A5B94427B5A26BF7A110935D1D /* VIMVideo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideo.m; path = VimeoNetworking/Sources/Models/VIMVideo.m; sourceTree = ""; }; + CF73647B15392A1776EAC7769039E3C1 /* Objc_ExceptionCatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Objc_ExceptionCatcher.h; path = VimeoNetworking/Sources/Objc_ExceptionCatcher.h; sourceTree = ""; }; + CFAE1CB42591FDBB0E3C6CDA2D9D8EBE /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; + CFF010DC16DF0D1F72CC6D06650AFAB1 /* VIMPeriodic.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VIMPeriodic.swift; path = VimeoNetworking/Sources/Models/VIMPeriodic.swift; sourceTree = ""; }; + D14F412DA2B5A72B420B77A5DF82B391 /* VIMLiveChatUser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VIMLiveChatUser.swift; path = VimeoNetworking/Sources/Models/VIMLiveChatUser.swift; sourceTree = ""; }; + D404A1F87C817006C3E8A666C694032F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D4759F58D590C7673A8DD8D567CBAB74 /* VimeoResponseSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VimeoResponseSerializer.swift; path = VimeoNetworking/Sources/VimeoResponseSerializer.swift; sourceTree = ""; }; + D4E0A7B176B3107F86D5A881E57AA5BC /* VimeoRequestSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VimeoRequestSerializer.swift; path = VimeoNetworking/Sources/VimeoRequestSerializer.swift; sourceTree = ""; }; + D53BEEBF70CF78A7381D5E381FE19629 /* VimeoNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "VimeoNetworking-umbrella.h"; sourceTree = ""; }; + D6B3D95F344C2376613D1869601E9D9E /* PinCodeInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PinCodeInfo.swift; path = VimeoNetworking/Sources/Models/PinCodeInfo.swift; sourceTree = ""; }; + D7478AE1D1B107593F1494EC8E78E8B8 /* VIMUpload.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VIMUpload.swift; path = VimeoNetworking/Sources/Models/VIMUpload.swift; sourceTree = ""; }; + D7729272B0191CF0AEEC273F9FF8FFC1 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; + D7779B75E9717049456FFA53A8183156 /* VIMMappable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMMappable.h; path = VimeoNetworking/Sources/Models/VIMMappable.h; sourceTree = ""; }; + D7A828D7986D21FD6CD1AAFC2C2AD868 /* Pods-VimeoUpload-iOS-OldUpload.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-VimeoUpload-iOS-OldUpload.modulemap"; sourceTree = ""; }; + D86710A21BF574C3148A0B1D88247593 /* VIMSizeQuota.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VIMSizeQuota.swift; path = VimeoNetworking/Sources/Models/VIMSizeQuota.swift; sourceTree = ""; }; + D87B538A6D1877FD818D0B519C413DF2 /* VIMInteraction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMInteraction.m; path = VimeoNetworking/Sources/Models/VIMInteraction.m; sourceTree = ""; }; + D90C6CE6DFFF0E79482EB6BEB9917B9D /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + D93E9F58B85FC67462DACC87CE53C84D /* Objc_ExceptionCatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Objc_ExceptionCatcher.m; path = VimeoNetworking/Sources/Objc_ExceptionCatcher.m; sourceTree = ""; }; + D94F8265F69638DCA7C1CC50CA29CD5B /* VimeoSessionManager+Constructors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "VimeoSessionManager+Constructors.swift"; path = "VimeoNetworking/Sources/VimeoSessionManager+Constructors.swift"; sourceTree = ""; }; + DB8FD8229ED4AD2B0CBBBDDC20F09BAA /* AFNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-umbrella.h"; sourceTree = ""; }; + DDBDFFA351A30960D21939E28DC60212 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + DDC16D853DAC48485B03A7FEB7485BAC /* Pods-VimeoUpload-iOS-OldUploadTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload-iOS-OldUploadTests.debug.xcconfig"; sourceTree = ""; }; + DFBA9CB028E92A4BD313247C31E60A61 /* Pods-VimeoUpload-iOS-OldUpload-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-VimeoUpload-iOS-OldUpload-acknowledgements.markdown"; sourceTree = ""; }; + E348B259AE23A208ABA2A71AED19ECE5 /* VIMPolicyDocument.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMPolicyDocument.m; path = VimeoNetworking/Sources/Models/VIMPolicyDocument.m; sourceTree = ""; }; + E356F5BC3EF410C1A8E290BF70EE42EC /* KeychainStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeychainStore.swift; path = VimeoNetworking/Sources/KeychainStore.swift; sourceTree = ""; }; + E3F3220930C10F8298CDEE754D07F73F /* VIMVideoFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoFile.m; path = VimeoNetworking/Sources/Models/VIMVideoFile.m; sourceTree = ""; }; + E45D7B55387DB56C27D0059AB7E055B7 /* Pods-VimeoUpload-iOS-OldUploadTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-VimeoUpload-iOS-OldUploadTests-acknowledgements.markdown"; sourceTree = ""; }; + E4889658443569A8A1D8566903CC7C63 /* Pods-VimeoUpload-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-VimeoUpload-acknowledgements.markdown"; sourceTree = ""; }; + E4B18CFCBFD591833D9E6A8BE1F1172C /* VIMVideoPreference.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoPreference.m; path = VimeoNetworking/Sources/Models/VIMVideoPreference.m; sourceTree = ""; }; + E522AAA14794E33C4E9EFF0779388907 /* VIMTag.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMTag.h; path = VimeoNetworking/Sources/Models/VIMTag.h; sourceTree = ""; }; + E592A244E83255AC4115A868FE02919D /* VIMUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMUser.m; path = VimeoNetworking/Sources/Models/VIMUser.m; sourceTree = ""; }; + E5B2FE6582270D74BE0CBFC7A389FC8A /* VIMPictureCollection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMPictureCollection.h; path = VimeoNetworking/Sources/Models/VIMPictureCollection.h; sourceTree = ""; }; + E5E04F50AFCEEA3BAFE89741A3D7D956 /* Pods-VimeoUpload-iOS-OldUploadTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-VimeoUpload-iOS-OldUploadTests-umbrella.h"; sourceTree = ""; }; + E5F940FACE162064BA249F79D785233E /* Pods-VimeoUpload-iOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload-iOSTests.debug.xcconfig"; sourceTree = ""; }; + E61505445B5CBA6615F5DAC3F00B4AC7 /* Pods-VimeoUpload-iOSTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-VimeoUpload-iOSTests-umbrella.h"; sourceTree = ""; }; + E72265D742A839587BC23CD8BD6AF14D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + E8614CB362CB4E3C9E03FCDFF2B3727C /* NSURLSessionConfiguration+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSURLSessionConfiguration+Extensions.swift"; path = "VimeoNetworking/Sources/NSURLSessionConfiguration+Extensions.swift"; sourceTree = ""; }; + E8EE2BF5E54CD69A9A8E68E9AA8D06F4 /* VimeoNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VimeoNetworking.h; path = VimeoNetworking/Sources/VimeoNetworking.h; sourceTree = ""; }; + EB03BF3312FAD8B30A9EE17D0AA7BD36 /* NetworkingNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkingNotification.swift; path = VimeoNetworking/Sources/NetworkingNotification.swift; sourceTree = ""; }; + EB3CB90C71820EE74C9F0D2DA4A7B44F /* VIMUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMUser.h; path = VimeoNetworking/Sources/Models/VIMUser.h; sourceTree = ""; }; + EC667DA5D9EC1B35E659F3B9E0341C85 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; + EC67B7AD7961570B52C42FF75E469EF7 /* VIMConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMConnection.m; path = VimeoNetworking/Sources/Models/VIMConnection.m; sourceTree = ""; }; + ED3D79C25378B9CD7F9F1F4D28F37C78 /* NSError+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSError+Extensions.swift"; path = "VimeoNetworking/Sources/NSError+Extensions.swift"; sourceTree = ""; }; EDF2918E5CB02CFC1ADE04F783E882E5 /* AFNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AFNetworking.framework; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EF00725EFACBAD93B7F4DF1A20DC1F42 /* VIMVideoDASHFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVideoDASHFile.m; path = VimeoNetworking/Sources/Models/VIMVideoDASHFile.m; sourceTree = ""; }; - EF2AA60D6B2F3B5482588A54A11AEE2C /* Pods-VimeoUpload-iOS-OldUploadTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload-iOS-OldUploadTests.release.xcconfig"; sourceTree = ""; }; - F037B43615D083286E88811012A9A172 /* Pods-VimeoUpload-iOS-OldUpload-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-VimeoUpload-iOS-OldUpload-dummy.m"; sourceTree = ""; }; + EE4DA92A43826C17668392D0C859A80A /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; + EEFA41EE996C8611C4A19F86061608E7 /* Pods-VimeoUpload-iOS-OldUpload.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload-iOS-OldUpload.debug.xcconfig"; sourceTree = ""; }; F0E3C679036E864BB4FCA1E4E08863D9 /* VimeoNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = VimeoNetworking.framework; path = VimeoNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F268DB0DE841D483B2E3C48B95F2013B /* VIMTrigger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMTrigger.m; path = VimeoNetworking/Sources/Models/VIMTrigger.m; sourceTree = ""; }; - F321BEF3CBD2446312D1D121E254290F /* VIMVideo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideo.h; path = VimeoNetworking/Sources/Models/VIMVideo.h; sourceTree = ""; }; - F4690B8E90016909BB0EA81C311C0953 /* VIMThumbnailUploadTicket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMThumbnailUploadTicket.m; path = VimeoNetworking/Sources/Models/VIMThumbnailUploadTicket.m; sourceTree = ""; }; - F482E1B7506500767CF4C18ED47EC41B /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; - F4B92013945EAA4735C74F5F20F119CB /* VIMCategory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMCategory.m; path = VimeoNetworking/Sources/Models/VIMCategory.m; sourceTree = ""; }; - F4ED96BBE5EA3EC1EC3534905722909E /* Pods-VimeoUpload-iOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-VimeoUpload-iOSTests.release.xcconfig"; sourceTree = ""; }; - F5312CFD09774B20432B1B6F083A1BFB /* VimeoNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "VimeoNetworking-prefix.pch"; sourceTree = ""; }; - F5C6F4E723ED9B6BE8833278899E2B7A /* VIMPolicyDocument.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMPolicyDocument.m; path = VimeoNetworking/Sources/Models/VIMPolicyDocument.m; sourceTree = ""; }; - F6FB24A5536DD004B48F00834B72CAAA /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; - F74BC0BC96EBD6E2C05C64B9D1AEBACD /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F780713BAF9F48FFB39AC81244609869 /* VIMNotification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMNotification.h; path = VimeoNetworking/Sources/Models/VIMNotification.h; sourceTree = ""; }; - F9A28D7473445BAC2DF8ED3294808DCF /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; - FA2516A7CB0A50CB9CD1053367E53327 /* VIMGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMGroup.h; path = VimeoNetworking/Sources/Models/VIMGroup.h; sourceTree = ""; }; - FB6A99CF789B5BEA9456117EA2855947 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; - FEEA81B3DDF609A73C329D49E4B55284 /* Pods-VimeoUpload-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-VimeoUpload-dummy.m"; sourceTree = ""; }; - FF858E05AAA86C6C60607DC47DA2B2C9 /* VIMGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMGroup.m; path = VimeoNetworking/Sources/Models/VIMGroup.m; sourceTree = ""; }; + F27DFCF446A2BAED340E50B6F721E96C /* VIMVideoHLSFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoHLSFile.h; path = VimeoNetworking/Sources/Models/VIMVideoHLSFile.h; sourceTree = ""; }; + F367284389C8299C9D163BC304C1B1AB /* Request+Trigger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Request+Trigger.swift"; path = "VimeoNetworking/Sources/Request+Trigger.swift"; sourceTree = ""; }; + F5D5EE1E0744442AC49E909AD0D768A9 /* VIMVideoDASHFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVideoDASHFile.h; path = VimeoNetworking/Sources/Models/VIMVideoDASHFile.h; sourceTree = ""; }; + F6C8A0A919CEE05D1634AFD91D8693BC /* VIMVODConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMVODConnection.h; path = VimeoNetworking/Sources/Models/VIMVODConnection.h; sourceTree = ""; }; + F6CF395977AAF063ED0CC9668B8AAA86 /* Pods-VimeoUpload-iOSTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-VimeoUpload-iOSTests-acknowledgements.markdown"; sourceTree = ""; }; + F7ABBC91F9865BF0C8F0A5C033AC9F63 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; + F8420F0DF85E78490D2EC6895FB33030 /* VIMSoundtrack.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMSoundtrack.m; path = VimeoNetworking/Sources/Models/VIMSoundtrack.m; sourceTree = ""; }; + FA4D18A3DC38EBDE55B7E5C609CC71FC /* VIMLiveHeartbeat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VIMLiveHeartbeat.swift; path = VimeoNetworking/Sources/Models/VIMLiveHeartbeat.swift; sourceTree = ""; }; + FC34BB5F2459B8BE2191283BCD59DFFC /* VIMVODConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = VIMVODConnection.m; path = VimeoNetworking/Sources/Models/VIMVODConnection.m; sourceTree = ""; }; + FC7C28E2007A0256AC662EA7D40A6631 /* VIMPrivacy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VIMPrivacy.h; path = VimeoNetworking/Sources/Models/VIMPrivacy.h; sourceTree = ""; }; + FF6CFF1711EAE79A36AD1EAE62DC8AB7 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -520,83 +552,66 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7715E1A66A2F21A0C5F8B913E79FC9F8 /* Foundation.framework in Frameworks */, + BD68AF52C096310FF247AF573E6D3E7A /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4E1872D4CC7325E3EF164880191FB61B /* Frameworks */ = { + 57F44911563C03EE01D7E49B4C1F0D0A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F94CAA71DF535013FE840C72ED995ACA /* Foundation.framework in Frameworks */, + AE16FC5B4326038C8624FACCD693CB01 /* CoreGraphics.framework in Frameworks */, + 878417CA55E672D2123F3E7AA4339EA1 /* Foundation.framework in Frameworks */, + 1066E708C7BDD5A2F0CB700190824FBE /* MobileCoreServices.framework in Frameworks */, + 1B4B83A97D510F7DD45259F09EFFAE5A /* Security.framework in Frameworks */, + 926CEBDC701DEEE831E9E1BD7211DCEC /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 57F44911563C03EE01D7E49B4C1F0D0A /* Frameworks */ = { + 720737C2C16B74DBFACA7718D80C1D1B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 789D749690B308852115FF20CD982A69 /* CoreGraphics.framework in Frameworks */, - A8C297643282E0CF5E7DF9CB6E23A0D4 /* Foundation.framework in Frameworks */, - 30F0BAE1DBB79BBB6CBD957EA8B89E4B /* MobileCoreServices.framework in Frameworks */, - 82D554EC9FB9A62D935B6555325F5898 /* Security.framework in Frameworks */, - 42AF1BB1ED090CC9E588A463441D09E3 /* SystemConfiguration.framework in Frameworks */, + 608FBB1E459C630CAC2D93C823A9B12C /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 720737C2C16B74DBFACA7718D80C1D1B /* Frameworks */ = { + 7F3C819BDA5C83510A5807BEBB3DFC61 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9336820057A592619B89406F1DF4AEC9 /* Foundation.framework in Frameworks */, + ECE3AC09F6BE7F51C36F9AC7D5FFCF56 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7F3C819BDA5C83510A5807BEBB3DFC61 /* Frameworks */ = { + CAF8D4EE064B6B1E4B79174DA6AA5F6C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3E5288CBF6B2BE080B33EB12E809F2B4 /* Foundation.framework in Frameworks */, + 2945C5B22511F26C276B9C23F35A10DC /* AFNetworking.framework in Frameworks */, + DC9AE7B95B286B56C6445079B403C3D3 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - CAF8D4EE064B6B1E4B79174DA6AA5F6C /* Frameworks */ = { + F42F29F6FC6D8CE0F21767BB561E6749 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2945C5B22511F26C276B9C23F35A10DC /* AFNetworking.framework in Frameworks */, - C50D0C30AF8712AFFA42B7F9C4AC2C7B /* Foundation.framework in Frameworks */, + 13DEA0CE6FC83504D998DEBF3B263336 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - D1C2FB3CCE8647049179BAAD96B9928B /* Frameworks */ = { + FD7C1E955F433AD681D32DBB2F5826A3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6CB3E0E344A7E19BA2ADE572A9E91C7F /* Foundation.framework in Frameworks */, + E6DC085EF47756D760080D0E855E965A /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0688A28EFD0D0A1A7144514DA000857E /* Security */ = { - isa = PBXGroup; - children = ( - 7E1665CCFC918114440A9C679C0EBC34 /* AFSecurityPolicy.h */, - 7C61AA5DF51D49E9C9ADF4B82C45FE7B /* AFSecurityPolicy.m */, - ); - name = Security; - sourceTree = ""; - }; - 089180826529F9F68F4B5F6A9DDBB25C /* Resources */ = { - isa = PBXGroup; - children = ( - D1F5A4A4953624BBBEF0F5FCB89E5137 /* digicert-sha2.cer */, - ); - name = Resources; - sourceTree = ""; - }; 0FF05FD7261457A83FD94741651A2C03 /* Products */ = { isa = PBXGroup; children = ( @@ -611,15 +626,24 @@ name = Products; sourceTree = ""; }; - 12D003CEC8F6E7BBB84C7F33EA037BFD /* Support Files */ = { + 12FE66E65A2C61174B23DF2E4F7EB109 /* Security */ = { + isa = PBXGroup; + children = ( + A7C8E8C116C75D16F52EA1D3242FF59D /* AFSecurityPolicy.h */, + EE4DA92A43826C17668392D0C859A80A /* AFSecurityPolicy.m */, + ); + name = Security; + sourceTree = ""; + }; + 1EAA0B00FA919A6A07D1DB010C5B85FA /* Support Files */ = { isa = PBXGroup; children = ( - A5F7EE334D37C9A1E58488BE86B5C0EC /* AFNetworking.modulemap */, - 89AB0F31192190BE89B818137CC8A970 /* AFNetworking.xcconfig */, - 01B662642B6C94DAE9E304C3539BB0F0 /* AFNetworking-dummy.m */, - 2258E00A17D080420C729F636C7DA1FF /* AFNetworking-prefix.pch */, - 13485EB89727E5D2EC453EE2ACF262B1 /* AFNetworking-umbrella.h */, - 5C725AE77AFC85C663E9277B7E56E7F1 /* Info.plist */, + 985AD4A3003DCEE2DA31FF69A61A84DB /* AFNetworking.modulemap */, + 6D9E2B78FA477FD2DC06D244EFF1172F /* AFNetworking.xcconfig */, + 620D09827DEDF296949C919BB5E207C4 /* AFNetworking-dummy.m */, + BCCE3CCA275CFD5838CD6B0FFCC72CD3 /* AFNetworking-prefix.pch */, + DB8FD8229ED4AD2B0CBBBDDC20F09BAA /* AFNetworking-umbrella.h */, + 529DFA1EB388CF7DC8121A4EBCFF59B4 /* Info.plist */, ); name = "Support Files"; path = "../Target Support Files/AFNetworking"; @@ -628,110 +652,283 @@ 2313536380DFE00F24F89A43A4D4F130 /* Targets Support Files */ = { isa = PBXGroup; children = ( - 250366D0E919D4D61DE1830829F12355 /* Pods-VimeoUpload */, - 7C47F48E4D14E65448AE0EDF0794BE9B /* Pods-VimeoUpload-iOS */, - 815833918B7C638BDE7B559A442FBAF2 /* Pods-VimeoUpload-iOS-OldUpload */, - 9981A11047C5F8F251522C5E56C9B686 /* Pods-VimeoUpload-iOS-OldUploadTests */, - 460F4E21B8A744E66CC3D6E8DAC45F9C /* Pods-VimeoUpload-iOSTests */, + 701E74F27C44C18C2B9541A00A1B8C64 /* Pods-VimeoUpload */, + 9760086FBBBB58C8A8E6E7736B892D36 /* Pods-VimeoUpload-iOS */, + FB293DC0192603A810CF47C026B5C90A /* Pods-VimeoUpload-iOS-OldUpload */, + 7D9A6731A8623773AC09896C3E4E44E0 /* Pods-VimeoUpload-iOS-OldUploadTests */, + 5F47914DBA4B4E735FB0B966280E79F6 /* Pods-VimeoUpload-iOSTests */, ); name = "Targets Support Files"; sourceTree = ""; }; - 250366D0E919D4D61DE1830829F12355 /* Pods-VimeoUpload */ = { + 2AB1EC7FF63F4B976FCFA5FDC11927C4 /* Serialization */ = { isa = PBXGroup; children = ( - 81B9D7C302854F8DDD4076AE8D68B1B7 /* Info.plist */, - E66CADEDAC09183F04136EEF61E99514 /* Pods-VimeoUpload.modulemap */, - 3DF748E9534F1105869E8635FABD2DB5 /* Pods-VimeoUpload-acknowledgements.markdown */, - 4FD417247D6F2F5D88E1083E3FB8227F /* Pods-VimeoUpload-acknowledgements.plist */, - FEEA81B3DDF609A73C329D49E4B55284 /* Pods-VimeoUpload-dummy.m */, - 6ED127F95CDCB38838CC180BF12E4D55 /* Pods-VimeoUpload-resources.sh */, - 0FD691F49DC930AF5CB1474C1A0C703B /* Pods-VimeoUpload-umbrella.h */, - C4CF223F05BF42A197EEB5B5F427FB15 /* Pods-VimeoUpload.debug.xcconfig */, - 590A00F4B0511AE74E5A1DE651C5634A /* Pods-VimeoUpload.release.xcconfig */, + 7983F38BB3C81F07425BFAF1E6289C43 /* AFURLRequestSerialization.h */, + 3BB9383C2F5F90FE89247B5400744EEE /* AFURLRequestSerialization.m */, + EC667DA5D9EC1B35E659F3B9E0341C85 /* AFURLResponseSerialization.h */, + 5E4FA6AA687FAD3C73FA4D5F778B6994 /* AFURLResponseSerialization.m */, ); - name = "Pods-VimeoUpload"; - path = "Target Support Files/Pods-VimeoUpload"; + name = Serialization; sourceTree = ""; }; - 35816D781B3D996C536649783ADD5C40 /* Pods */ = { + 2BF58D12549F816DF34EE3C9D98D1939 /* VimeoNetworking */ = { isa = PBXGroup; children = ( - 8E56B78AA496F7FABA78B2B4FD059BCF /* AFNetworking */, - DF19E6D93D5476A1FC6AE5732454D11C /* VimeoNetworking */, + 9A25EFA17D3547663AC40E439C04067B /* AccountStore.swift */, + 2306B631FE1354BD0E5B81E1EB94D032 /* AppConfiguration.swift */, + 4649337C65FD272A0B75F156507DBF18 /* AuthenticationController.swift */, + 29EC2A207160C6ABAABFFB2C7CEF0193 /* Constants.swift */, + 198A0FC4821182C1441C3278B81533C1 /* Dictionary+Extension.swift */, + 0C8A79531959161891C56EDD3B8236F9 /* ErrorCode.swift */, + 1EE9E0E05929DC3AFDF6276C52E5988C /* ExceptionCatcher+Swift.swift */, + E356F5BC3EF410C1A8E290BF70EE42EC /* KeychainStore.swift */, + A27737DBFB0A1312C26B1C96EFC0D9CC /* Mappable.swift */, + EB03BF3312FAD8B30A9EE17D0AA7BD36 /* NetworkingNotification.swift */, + ED3D79C25378B9CD7F9F1F4D28F37C78 /* NSError+Extensions.swift */, + E8614CB362CB4E3C9E03FCDFF2B3727C /* NSURLSessionConfiguration+Extensions.swift */, + CF73647B15392A1776EAC7769039E3C1 /* Objc_ExceptionCatcher.h */, + D93E9F58B85FC67462DACC87CE53C84D /* Objc_ExceptionCatcher.m */, + D6B3D95F344C2376613D1869601E9D9E /* PinCodeInfo.swift */, + 19E82E7A6452665F31AB0160C36C0040 /* PlayProgress.swift */, + 2A642117F7C53CF7A21E344EBF7E7936 /* Request.swift */, + 592399628685EEA2CBCEAA22472FB309 /* Request+Authentication.swift */, + 2712EE1D549F6E58A7BB81334B608446 /* Request+Cache.swift */, + 0910EEA1873F3C909758C2298877AA7E /* Request+Category.swift */, + AD3546051FCB66387E4E83C5B7BBACE9 /* Request+Channel.swift */, + 7426D8145A3155978F0515BEEFCB8447 /* Request+Comment.swift */, + 8D9225F1748860C325BC0B5470023589 /* Request+Configs.swift */, + 5A3A4AC7EEAC2A5D6B93D6AA8DA6DEE8 /* Request+Notifications.swift */, + 300CFD20A787C853925F7BAE4CBFAA57 /* Request+Picture.swift */, + B0B8B622C89D248F892F70436F3C4927 /* Request+PolicyDocument.swift */, + AE40B3ABF25113AD8DB2293E39C0B740 /* Request+ProgrammedContent.swift */, + BEF622C81A2F20DE82B18B4C1FB4977C /* Request+Soundtrack.swift */, + 1A986CC4EDA505946FE3258B89387779 /* Request+Toggle.swift */, + F367284389C8299C9D163BC304C1B1AB /* Request+Trigger.swift */, + 3C2D82462A8952625139EFE730A1D996 /* Request+User.swift */, + 9D02A2893866B878CFEE338D26DC5313 /* Request+Video.swift */, + C60CB7517BFF164178542CD7CB08BFC6 /* Response.swift */, + AC0E35EE90FE7076880E7A717BD0E534 /* ResponseCache.swift */, + 40F99392B8A59926F90CF0019AC7D57D /* Result.swift */, + 574D37AFD6B63C7C543B8DDCC8BBCDCD /* Scope.swift */, + AEA5F1020ACBC1E16F7C377115328C63 /* Spatial.swift */, + B0A90EF0370E7F413E923D813F419C81 /* String+Parameters.swift */, + C974CC35310983ABAED5BA8CF32332A6 /* Subscription.swift */, + 1AB2176333C0C42F40BD13E4DDE0640A /* SubscriptionCollection.swift */, + C913DD9402D7FCE7BBA97568950974A6 /* VIMAccount.h */, + 8BC4A625F838AE6E28EAA14F8EABBEEE /* VIMAccount.m */, + 7BD6B4F1BB9B251C7BEC59722C42AB0B /* VIMActivity.h */, + 6D47993D1669EDACAE23DDA31EE1D750 /* VIMActivity.m */, + 71DED1DC4C3953219DB409A92F0E546F /* VIMAppeal.h */, + 58588D4FE9CAD101CBA9E66CF55B111F /* VIMAppeal.m */, + A250189A49355B43BD9E62364DDB456F /* VIMBadge.swift */, + 24231BD46B3810C7B980D8C357456050 /* VIMCategory.h */, + A962DA72E1B4C69B2EBB0CF5A88E990E /* VIMCategory.m */, + 8BA8C97144A1B46C16C2425AD02F2647 /* VIMChannel.h */, + C22130DB8AB8C29FBC7F7AF78E3A4E9E /* VIMChannel.m */, + 1BF8714B341C956CC960D5F6F5FD061B /* VIMComment.h */, + 5C4B2D0192E9B889AE401D325E73A05B /* VIMComment.m */, + 144AE47771CA26D2CE6BBA49A5088D4C /* VIMConnection.h */, + EC67B7AD7961570B52C42FF75E469EF7 /* VIMConnection.m */, + B55EE59B77D464EB14B10235EDA73472 /* VIMCredit.h */, + 91179DF7663D831C96D269BFB58AD522 /* VIMCredit.m */, + 98158361BFB9C60E8591A14756CDA100 /* VimeoClient.swift */, + E8EE2BF5E54CD69A9A8E68E9AA8D06F4 /* VimeoNetworking.h */, + 6DAFB57C55DAA0F49681B1626DBE7837 /* VimeoReachability.swift */, + D4E0A7B176B3107F86D5A881E57AA5BC /* VimeoRequestSerializer.swift */, + D4759F58D590C7673A8DD8D567CBAB74 /* VimeoResponseSerializer.swift */, + 1B89681226395449BB402C81A1ED264E /* VimeoSessionManager.swift */, + D94F8265F69638DCA7C1CC50CA29CD5B /* VimeoSessionManager+Constructors.swift */, + 6497695CF3E669E163206BB20DBAFE53 /* VIMGroup.h */, + C867648C482317091BC988216AE7BCEF /* VIMGroup.m */, + 44F122B80BACFA0494C2CFB8D9923E4C /* VIMInteraction.h */, + D87B538A6D1877FD818D0B519C413DF2 /* VIMInteraction.m */, + B3962DB52E64A2446FC1C17FE675A0E6 /* VIMLive.swift */, + 7FE473E948247E7F9972B5508A413C38 /* VIMLiveChat.swift */, + D14F412DA2B5A72B420B77A5DF82B391 /* VIMLiveChatUser.swift */, + FA4D18A3DC38EBDE55B7E5C609CC71FC /* VIMLiveHeartbeat.swift */, + B72FCA3488DE7361A5D81A8BD5423909 /* VIMLiveQuota.swift */, + 0A751CF37C60078D4E14FD77EABB59EA /* VIMLiveStreams.swift */, + B1A9E4CA052B6791BE98CABC26BDAE96 /* VIMLiveTime.swift */, + D7779B75E9717049456FFA53A8183156 /* VIMMappable.h */, + C716B4800FAD0DDAAAFFAB57FFC40242 /* VIMModelObject.h */, + 9899127E9167B9D6EBA7784D892653A2 /* VIMModelObject.m */, + C2D06C677AB5FAC517FFE8B4D60E8A1F /* VIMNotification.h */, + CBE34181F7DEEA3A80140282BBC6AB0B /* VIMNotification.m */, + 45A744737CCC3FB2DDD29A8A01B7569A /* VIMNotificationsConnection.h */, + 8ED7E045948374FAE37E1258BA3366F1 /* VIMNotificationsConnection.m */, + 1A455D143B6438B58518F3865A903EE1 /* VIMObjectMapper.h */, + 3CEE095D5D41BE01E7A438719525079D /* VIMObjectMapper.m */, + 55D5445B186DDBBEC7D7A9B467FC2E6A /* VIMObjectMapper+Generic.swift */, + CFF010DC16DF0D1F72CC6D06650AFAB1 /* VIMPeriodic.swift */, + BCB75948A89DA6FAFB6053EFB7B39628 /* VIMPicture.h */, + 157C7EA514B07C841D376B315F5F1636 /* VIMPicture.m */, + E5B2FE6582270D74BE0CBFC7A389FC8A /* VIMPictureCollection.h */, + AB1A7C0E9CF186DC326357962BEC7AF5 /* VIMPictureCollection.m */, + AE97ADD7133B74F569CDBAA703BCFD65 /* VIMPolicyDocument.h */, + E348B259AE23A208ABA2A71AED19ECE5 /* VIMPolicyDocument.m */, + 10C6713230A87A25B5761E5A3CFC15DD /* VIMPreference.h */, + 7D22624966A39C8E5C113CBF14F4C8CE /* VIMPreference.m */, + FC7C28E2007A0256AC662EA7D40A6631 /* VIMPrivacy.h */, + 48ADFB75E39D89D3FC25BA8311A8A3F8 /* VIMPrivacy.m */, + 221D6F45BA640AE1C73F34B0D416ADA7 /* VIMProgrammedContent.swift */, + 242A72850AA33ABD4DCB90C46D7EBBF7 /* VIMQuantityQuota.h */, + 1DB8B03BA0C91F983BEBB7D468AA4F10 /* VIMQuantityQuota.m */, + 295021DB4F5EBF6BD2E1C60703E3E2D9 /* VIMRecommendation.h */, + 0338339E81D84468FC3FEC3B4E0B751B /* VIMRecommendation.m */, + 57B784EA87250DC92F76F6BF0638D4D2 /* VIMReviewPage.swift */, + 245BD1E8B3E5BE71C829B996E257207C /* VIMSeason.h */, + 14F2E19F2D2D74E49166614264DA1D27 /* VIMSeason.m */, + D86710A21BF574C3148A0B1D88247593 /* VIMSizeQuota.swift */, + 2C5686958BB43876F21E70E9627CFA06 /* VIMSoundtrack.h */, + F8420F0DF85E78490D2EC6895FB33030 /* VIMSoundtrack.m */, + 199439094EAB2A988BAED89C1771A848 /* VIMSpace.swift */, + E522AAA14794E33C4E9EFF0779388907 /* VIMTag.h */, + 633F03E86937C4E4A5EB10440B86406E /* VIMTag.m */, + CC35A7CF63A081875F9CF7A13AED2B6F /* VIMThumbnailUploadTicket.h */, + 8EA774D3660D1E35584A49BC04468978 /* VIMThumbnailUploadTicket.m */, + 434D92DDD616ED26F2A45C6EAB3DF3C2 /* VIMTrigger.h */, + 770CD4C87AE1AA8397D0F6E251DCC540 /* VIMTrigger.m */, + D7478AE1D1B107593F1494EC8E78E8B8 /* VIMUpload.swift */, + 8DA9B270A4EBCC6043F579AA44249C2A /* VIMUploadQuota.swift */, + 686E7A5A8052386182347D07482C3C67 /* VIMUploadTicket.h */, + 404EBED1541B755FB84CEB0B6BF5B214 /* VIMUploadTicket.m */, + EB3CB90C71820EE74C9F0D2DA4A7B44F /* VIMUser.h */, + E592A244E83255AC4115A868FE02919D /* VIMUser.m */, + 0B7817AC6B424B77B067539E39EDA9AB /* VIMUserBadge.h */, + 038F1D2C4FFAF96EF3F4CC8CCA5E1C7D /* VIMUserBadge.m */, + 67E8730E582CED91AFE4FA07B317CF43 /* VIMVideo.h */, + CCF8D5A5B94427B5A26BF7A110935D1D /* VIMVideo.m */, + 64F81D9AB162FD3AFF5E21392C105385 /* VIMVideo+VOD.h */, + 594B408BD401FB948979F4BDA15CC9EA /* VIMVideo+VOD.m */, + F5D5EE1E0744442AC49E909AD0D768A9 /* VIMVideoDASHFile.h */, + 9FD22B103D648342069FE779359C9A56 /* VIMVideoDASHFile.m */, + 5D59C2A0B1AC7D635763EE682582F1C1 /* VIMVideoDRMFiles.h */, + 6009E10F0E97820B85D42C5B1B5EADFB /* VIMVideoDRMFiles.m */, + C5E4251390579CA8A4647B705BD6DD41 /* VIMVideoFairPlayFile.h */, + 2E0B01CEC75D6CABBC311CA2D4DCE1D9 /* VIMVideoFairPlayFile.m */, + C8E3687C68FDA0D536295AA785351E89 /* VIMVideoFile.h */, + E3F3220930C10F8298CDEE754D07F73F /* VIMVideoFile.m */, + F27DFCF446A2BAED340E50B6F721E96C /* VIMVideoHLSFile.h */, + 2B791FB955CB509E19E5ECC15E7EA5C5 /* VIMVideoHLSFile.m */, + 85AE31BCA21D12620C2D9B0F9386A7EA /* VIMVideoPlayFile.h */, + 3FCEA14CC7DF08D617ED59064F004953 /* VIMVideoPlayFile.m */, + 0CA19508165DFEEB376273E8D4214F59 /* VIMVideoPlayRepresentation.h */, + 58047C8CC5F49283333E246CA9F56BFA /* VIMVideoPlayRepresentation.m */, + 66DF12E58DBB07F4E0A32A90407E7F10 /* VIMVideoPreference.h */, + E4B18CFCBFD591833D9E6A8BE1F1172C /* VIMVideoPreference.m */, + 4791D611DF81AF66DC55313D98C6202C /* VIMVideoProgressiveFile.h */, + 18C1BE847651368C4C25045E57EB0E3F /* VIMVideoProgressiveFile.m */, + AA188B201DCC201C7D1451547279808D /* VIMVideoUtils.h */, + 50CF7C4EB12469B6AD2059AF45FA8ECB /* VIMVideoUtils.m */, + F6C8A0A919CEE05D1634AFD91D8693BC /* VIMVODConnection.h */, + FC34BB5F2459B8BE2191283BCD59DFFC /* VIMVODConnection.m */, + CAC4F7845137416DDE1B0102830EDF83 /* VIMVODItem.h */, + B500B2A8EF05B34704F9D34CF2CF8E95 /* VIMVODItem.m */, + 6A391CD898592360813FABFDC28A3266 /* Resources */, + 9B00E73A8CFCF80A98CA1E7BC6BC1FE0 /* Support Files */, ); - name = Pods; + name = VimeoNetworking; + path = VimeoNetworking; sourceTree = ""; }; - 460F4E21B8A744E66CC3D6E8DAC45F9C /* Pods-VimeoUpload-iOSTests */ = { + 3BDA58E9E81F2E50764F2C6A156CED6D /* UIKit */ = { isa = PBXGroup; children = ( - 2A3F72A38ECAA6689938E0DD34F3126A /* Info.plist */, - D41615CC354B8B0A35926E7CC9AD71F6 /* Pods-VimeoUpload-iOSTests.modulemap */, - 90CE0CDA94D5A8DDA81A0AA529497EEB /* Pods-VimeoUpload-iOSTests-acknowledgements.markdown */, - B4580F679371388C6FC87FF024534456 /* Pods-VimeoUpload-iOSTests-acknowledgements.plist */, - A8B0BB58820A0B1DA182E061E886411B /* Pods-VimeoUpload-iOSTests-dummy.m */, - E02C81A3C7316395924E658D5BC8F10E /* Pods-VimeoUpload-iOSTests-frameworks.sh */, - 5CCA2741496873A942541EFBB5531983 /* Pods-VimeoUpload-iOSTests-resources.sh */, - BBC4BAA3C77B593AEF959B3D4C03A3EE /* Pods-VimeoUpload-iOSTests-umbrella.h */, - 80E26D00B3A1139F9D88C0E57B6F0DA3 /* Pods-VimeoUpload-iOSTests.debug.xcconfig */, - F4ED96BBE5EA3EC1EC3534905722909E /* Pods-VimeoUpload-iOSTests.release.xcconfig */, + 7DE0E38A99298F3EF954325E154AA215 /* AFAutoPurgingImageCache.h */, + 3DC534095BB14D1CFB95B341D8F3BA47 /* AFAutoPurgingImageCache.m */, + 8E6BFE7016A60D816B0E3C15C0E2F3BF /* AFImageDownloader.h */, + A7C668C5587BF895640E72EA227806D7 /* AFImageDownloader.m */, + 3B507D130FFEBCD98C817BB196466C70 /* AFNetworkActivityIndicatorManager.h */, + 9468DEA78D57D9B0E4C7AC7F5E504C7B /* AFNetworkActivityIndicatorManager.m */, + AC1504799A29B9D2BC4470E3E39BCA33 /* UIActivityIndicatorView+AFNetworking.h */, + F7ABBC91F9865BF0C8F0A5C033AC9F63 /* UIActivityIndicatorView+AFNetworking.m */, + CFAE1CB42591FDBB0E3C6CDA2D9D8EBE /* UIButton+AFNetworking.h */, + 67584EC80399FD96630D745DA4D1A98F /* UIButton+AFNetworking.m */, + B504FF86E8CC20D89C5EE300F2F127DC /* UIImage+AFNetworking.h */, + 34C6DA693B07265C4DCBAE97EE2D5594 /* UIImageView+AFNetworking.h */, + C8D7668C9068459DA53626C11CC3A364 /* UIImageView+AFNetworking.m */, + 5FC7D02188E2C34BE891C0A1C34CE10A /* UIKit+AFNetworking.h */, + B0B2B4EA4DB47084F317FFA4C51ADC9C /* UIProgressView+AFNetworking.h */, + A764F24CBBAA6CD584EE0CBFB5F80D40 /* UIProgressView+AFNetworking.m */, + 714AC1F0B428E041A21A3D9426A0F56D /* UIRefreshControl+AFNetworking.h */, + C83490C101E129974A2EEFB8C04E04EC /* UIRefreshControl+AFNetworking.m */, + 714C5B0978A3C1F5DFD5196353A4674C /* UIWebView+AFNetworking.h */, + 02AA0046E026ED16E0F011492A681913 /* UIWebView+AFNetworking.m */, ); - name = "Pods-VimeoUpload-iOSTests"; - path = "Target Support Files/Pods-VimeoUpload-iOSTests"; + name = UIKit; sourceTree = ""; }; - 58ADEC1A744624280C424466F85276D6 /* iOS */ = { + 3D0D373019BD513FCAC555BC063A9889 /* NSURLSession */ = { isa = PBXGroup; children = ( - BEAA2896C0F3DE743E13BA30642E91F1 /* CoreGraphics.framework */, - AAB7FF3305C3F3E726189CE6DC03B4A6 /* Foundation.framework */, - 72BF022BF820248A7DC00916D1CC4205 /* MobileCoreServices.framework */, - C29192B1F683D403AFFD632D65221D49 /* Security.framework */, - B665811DA7B0645668081A93D378BB87 /* SystemConfiguration.framework */, + A23F6E3249A977997C8255519997C806 /* AFHTTPSessionManager.h */, + 31D638862512159911B72BCEA7447DC2 /* AFHTTPSessionManager.m */, + 03C2FA5B57F57E6E4C867E75DC638115 /* AFURLSessionManager.h */, + 4DB684C35D18CE0200411F5A0B79CFCD /* AFURLSessionManager.m */, ); - name = iOS; + name = NSURLSession; sourceTree = ""; }; - 601565E25F27ABFAD5D460A428D41214 /* Support Files */ = { + 5F47914DBA4B4E735FB0B966280E79F6 /* Pods-VimeoUpload-iOSTests */ = { isa = PBXGroup; children = ( - 2E6285983C1A0FF3F9827AE9B15D6EAB /* Info.plist */, - A81FB057C4219FBF8BD3D002E9E7272B /* VimeoNetworking.modulemap */, - E66FD2DF824A81DF2975B49945EAEA30 /* VimeoNetworking.xcconfig */, - 6A0A4AB2432D657C9297E64DCDDB03A9 /* VimeoNetworking-dummy.m */, - F5312CFD09774B20432B1B6F083A1BFB /* VimeoNetworking-prefix.pch */, - 7F86DFC5D05E754156CA58540DAA1BAC /* VimeoNetworking-umbrella.h */, + D404A1F87C817006C3E8A666C694032F /* Info.plist */, + 768B121F5BBF2F6F17A30D3AF51F39BC /* Pods-VimeoUpload-iOSTests.modulemap */, + F6CF395977AAF063ED0CC9668B8AAA86 /* Pods-VimeoUpload-iOSTests-acknowledgements.markdown */, + 9D016933AD5FAF12115C7809993E0D09 /* Pods-VimeoUpload-iOSTests-acknowledgements.plist */, + 1FD861AB176F175CB3D1E0F6AF2A8444 /* Pods-VimeoUpload-iOSTests-dummy.m */, + 39E99DADEC276F0039A9BB6590160B92 /* Pods-VimeoUpload-iOSTests-frameworks.sh */, + 61BBAE14F6D05F87DD0A7A0F550824DD /* Pods-VimeoUpload-iOSTests-resources.sh */, + E61505445B5CBA6615F5DAC3F00B4AC7 /* Pods-VimeoUpload-iOSTests-umbrella.h */, + E5F940FACE162064BA249F79D785233E /* Pods-VimeoUpload-iOSTests.debug.xcconfig */, + 3A30721CD46AC03D34457EE5B65B89B5 /* Pods-VimeoUpload-iOSTests.release.xcconfig */, ); - name = "Support Files"; - path = "../Target Support Files/VimeoNetworking"; + name = "Pods-VimeoUpload-iOSTests"; + path = "Target Support Files/Pods-VimeoUpload-iOSTests"; sourceTree = ""; }; - 71A4F6DC5F9A209CAB8F044E013717B9 /* Reachability */ = { + 6A391CD898592360813FABFDC28A3266 /* Resources */ = { isa = PBXGroup; children = ( - 40C278A2D7295B9C745A8F7C78D039A3 /* AFNetworkReachabilityManager.h */, - B4C942B4810471391926C69DDF06F459 /* AFNetworkReachabilityManager.m */, + 7AC12ADD13D05812352645C5BAEFD99D /* digicert-sha2.cer */, ); - name = Reachability; + name = Resources; sourceTree = ""; }; - 7C47F48E4D14E65448AE0EDF0794BE9B /* Pods-VimeoUpload-iOS */ = { + 701E74F27C44C18C2B9541A00A1B8C64 /* Pods-VimeoUpload */ = { isa = PBXGroup; children = ( - 59ACC3119383FFF4846D1E7814D14DFB /* Info.plist */, - 6C9FDB087D69B2FF78F76AAF8C24EA80 /* Pods-VimeoUpload-iOS.modulemap */, - 30232B7C92B3EA202FD3EBDCE7FCA62E /* Pods-VimeoUpload-iOS-acknowledgements.markdown */, - 1E2C31E1C5219A492BA51ECF975649C4 /* Pods-VimeoUpload-iOS-acknowledgements.plist */, - 20429F7864AF6AA08CDB4E78DE31A84C /* Pods-VimeoUpload-iOS-dummy.m */, - 2823D0E27387DEDA4CD0C3CFBCC0B44F /* Pods-VimeoUpload-iOS-frameworks.sh */, - CA537B840B304BCD493A48F81F820D06 /* Pods-VimeoUpload-iOS-resources.sh */, - 1C0AF9E26B1AE44BE6700D2A8CF89819 /* Pods-VimeoUpload-iOS-umbrella.h */, - 6A7DD13AE760F49BD336D2C01BAA7890 /* Pods-VimeoUpload-iOS.debug.xcconfig */, - CBED8FAC62EC97352938CA51099A55E9 /* Pods-VimeoUpload-iOS.release.xcconfig */, + 9D3768CC6CDDD824D653B921C0D96F6F /* Info.plist */, + 1263405891BAC778C715376CF6CAF9B2 /* Pods-VimeoUpload.modulemap */, + E4889658443569A8A1D8566903CC7C63 /* Pods-VimeoUpload-acknowledgements.markdown */, + 8E6D96934932FA9638F6BD2E31B8D86E /* Pods-VimeoUpload-acknowledgements.plist */, + BA6089003716E8736B3C3E374008AB4D /* Pods-VimeoUpload-dummy.m */, + 2140E97C9A902AF978123E899B2EC965 /* Pods-VimeoUpload-resources.sh */, + 23203AB46E0B1066374BDDE11472401B /* Pods-VimeoUpload-umbrella.h */, + AA0EE93C62DBFD353E86F429715D0E8A /* Pods-VimeoUpload.debug.xcconfig */, + B9E707DCE76297154377405C59ABC4F0 /* Pods-VimeoUpload.release.xcconfig */, ); - name = "Pods-VimeoUpload-iOS"; - path = "Target Support Files/Pods-VimeoUpload-iOS"; + name = "Pods-VimeoUpload"; + path = "Target Support Files/Pods-VimeoUpload"; + sourceTree = ""; + }; + 7D9A6731A8623773AC09896C3E4E44E0 /* Pods-VimeoUpload-iOS-OldUploadTests */ = { + isa = PBXGroup; + children = ( + 65544531C57D7687204CF1A58500C6BB /* Info.plist */, + 9A3C26DB3876114928F36AA5CF7EA0F5 /* Pods-VimeoUpload-iOS-OldUploadTests.modulemap */, + E45D7B55387DB56C27D0059AB7E055B7 /* Pods-VimeoUpload-iOS-OldUploadTests-acknowledgements.markdown */, + 3BF90FFD87F716998B15371C1C15106E /* Pods-VimeoUpload-iOS-OldUploadTests-acknowledgements.plist */, + 03F136B8B3237A494D56992ABD45DA16 /* Pods-VimeoUpload-iOS-OldUploadTests-dummy.m */, + 03BD44E17BF4F0A8D5B2F4DAD5ABB72C /* Pods-VimeoUpload-iOS-OldUploadTests-frameworks.sh */, + 4D332695D30979CBB112477B9E1D04E4 /* Pods-VimeoUpload-iOS-OldUploadTests-resources.sh */, + E5E04F50AFCEEA3BAFE89741A3D7D956 /* Pods-VimeoUpload-iOS-OldUploadTests-umbrella.h */, + DDC16D853DAC48485B03A7FEB7485BAC /* Pods-VimeoUpload-iOS-OldUploadTests.debug.xcconfig */, + 529DFAF91FFD13244AB22C540723EF06 /* Pods-VimeoUpload-iOS-OldUploadTests.release.xcconfig */, + ); + name = "Pods-VimeoUpload-iOS-OldUploadTests"; + path = "Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests"; sourceTree = ""; }; 7DB346D0F39D3F0E887471402A8071AB = { @@ -739,352 +936,194 @@ children = ( 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, EFC8D1216166DE80CF4A6175E6193664 /* Frameworks */, - 35816D781B3D996C536649783ADD5C40 /* Pods */, + 8472E4DC9CA6E5916A778824897CEB10 /* Pods */, 0FF05FD7261457A83FD94741651A2C03 /* Products */, 2313536380DFE00F24F89A43A4D4F130 /* Targets Support Files */, ); sourceTree = ""; }; - 815833918B7C638BDE7B559A442FBAF2 /* Pods-VimeoUpload-iOS-OldUpload */ = { + 8472E4DC9CA6E5916A778824897CEB10 /* Pods */ = { isa = PBXGroup; children = ( - F74BC0BC96EBD6E2C05C64B9D1AEBACD /* Info.plist */, - 8D434E487EE19FF84352C937F1008B3B /* Pods-VimeoUpload-iOS-OldUpload.modulemap */, - BDEBFF33778D5264ED6AEA58E613AE82 /* Pods-VimeoUpload-iOS-OldUpload-acknowledgements.markdown */, - 9BB0F28B65CFA82A1097FD4C71DA0487 /* Pods-VimeoUpload-iOS-OldUpload-acknowledgements.plist */, - F037B43615D083286E88811012A9A172 /* Pods-VimeoUpload-iOS-OldUpload-dummy.m */, - 2BF35D801896FA2A238107E3F9288174 /* Pods-VimeoUpload-iOS-OldUpload-frameworks.sh */, - 49926875B9F5E4B438C6D0FDAEE093A2 /* Pods-VimeoUpload-iOS-OldUpload-resources.sh */, - CCB098F1FA5708F997DE9A18F1CA402A /* Pods-VimeoUpload-iOS-OldUpload-umbrella.h */, - 2EC7C61DABF8951A8EA0284CE90D8C35 /* Pods-VimeoUpload-iOS-OldUpload.debug.xcconfig */, - 533C56098EE9CDC9C94F3635F25A9F98 /* Pods-VimeoUpload-iOS-OldUpload.release.xcconfig */, + D0CB0ECBF0AE862930CC3AD43D10DEF3 /* AFNetworking */, + 2BF58D12549F816DF34EE3C9D98D1939 /* VimeoNetworking */, ); - name = "Pods-VimeoUpload-iOS-OldUpload"; - path = "Target Support Files/Pods-VimeoUpload-iOS-OldUpload"; + name = Pods; sourceTree = ""; }; - 8B8CDD38562AECC9D2192D3735570568 /* NSURLSession */ = { + 9760086FBBBB58C8A8E6E7736B892D36 /* Pods-VimeoUpload-iOS */ = { isa = PBXGroup; children = ( - F6FB24A5536DD004B48F00834B72CAAA /* AFHTTPSessionManager.h */, - 9D84ED393688D7F4321FF3478294DAAA /* AFHTTPSessionManager.m */, - 01FD7E491D786675786392B66C27218C /* AFURLSessionManager.h */, - CA3350835CEC5107C6C293FE2D04E77F /* AFURLSessionManager.m */, + AFA9CE28C85633044910F197AE62024B /* Info.plist */, + 88E89F9C17ADFE5CAD4DE8D8CC0A0D28 /* Pods-VimeoUpload-iOS.modulemap */, + 164D73327C635745B3323BF6ED3ECD65 /* Pods-VimeoUpload-iOS-acknowledgements.markdown */, + 952F507F085A0B032F0A5999B8BB257B /* Pods-VimeoUpload-iOS-acknowledgements.plist */, + 406EF671DD740C6C0D28A82B1460D7EA /* Pods-VimeoUpload-iOS-dummy.m */, + 9531324FE69A206C8D425D93D70BCB29 /* Pods-VimeoUpload-iOS-frameworks.sh */, + 8C9165823267758FD6A92FD5BE0B6610 /* Pods-VimeoUpload-iOS-resources.sh */, + 7E5825EEC0DE908A1A3B761CD116EEB4 /* Pods-VimeoUpload-iOS-umbrella.h */, + 133CD2F3E29DDF713318E84B2153F4C3 /* Pods-VimeoUpload-iOS.debug.xcconfig */, + BB9CD7C1F4049E75077274C6DCC81113 /* Pods-VimeoUpload-iOS.release.xcconfig */, ); - name = NSURLSession; + name = "Pods-VimeoUpload-iOS"; + path = "Target Support Files/Pods-VimeoUpload-iOS"; sourceTree = ""; }; - 8E56B78AA496F7FABA78B2B4FD059BCF /* AFNetworking */ = { + 9B00E73A8CFCF80A98CA1E7BC6BC1FE0 /* Support Files */ = { isa = PBXGroup; children = ( - 927C6F167862BCAC06F4E08000EB8C58 /* AFNetworking.h */, - 8B8CDD38562AECC9D2192D3735570568 /* NSURLSession */, - 71A4F6DC5F9A209CAB8F044E013717B9 /* Reachability */, - 0688A28EFD0D0A1A7144514DA000857E /* Security */, - B5E6DA0E3E0AC270FEEA7AB27E3E5D95 /* Serialization */, - 12D003CEC8F6E7BBB84C7F33EA037BFD /* Support Files */, - B23733533370FD3EC60B6BCB3950F37D /* UIKit */, + FF6CFF1711EAE79A36AD1EAE62DC8AB7 /* Info.plist */, + 1A639A5202E49FF07C8F7669E03A1399 /* VimeoNetworking.modulemap */, + A136B115C9B8C37D0A5C9201FAB171BF /* VimeoNetworking.xcconfig */, + A6EFA92C2421798DB0FF8C3149FE8ACA /* VimeoNetworking-dummy.m */, + 83E3827F28F7C2A0D65AFDF43BABB9C6 /* VimeoNetworking-prefix.pch */, + D53BEEBF70CF78A7381D5E381FE19629 /* VimeoNetworking-umbrella.h */, ); - name = AFNetworking; - path = AFNetworking; + name = "Support Files"; + path = "../Target Support Files/VimeoNetworking"; sourceTree = ""; }; - 9981A11047C5F8F251522C5E56C9B686 /* Pods-VimeoUpload-iOS-OldUploadTests */ = { + C2D2092A0B5B67D0F34937D00026E6EC /* iOS */ = { isa = PBXGroup; children = ( - 6AC1A1CA96496068B2690A54CEA6343D /* Info.plist */, - E1D8B2BDDECC16F881030CB0199BCF01 /* Pods-VimeoUpload-iOS-OldUploadTests.modulemap */, - 9E78D488EE2F56C490F374FBD83C1062 /* Pods-VimeoUpload-iOS-OldUploadTests-acknowledgements.markdown */, - 9ACF5761B029845B3F2897FDE0D45BB0 /* Pods-VimeoUpload-iOS-OldUploadTests-acknowledgements.plist */, - 712E55059FAF64DCE6FDA02F37A5AA2E /* Pods-VimeoUpload-iOS-OldUploadTests-dummy.m */, - 8854A148A98E4C656CC085331FEE2A76 /* Pods-VimeoUpload-iOS-OldUploadTests-frameworks.sh */, - 3210E8330EE38198AC23E6AE501C828F /* Pods-VimeoUpload-iOS-OldUploadTests-resources.sh */, - 93737ECEFDDCCE11126CF5D863927683 /* Pods-VimeoUpload-iOS-OldUploadTests-umbrella.h */, - 2A556F76898649B5A28BDB5446ED8308 /* Pods-VimeoUpload-iOS-OldUploadTests.debug.xcconfig */, - EF2AA60D6B2F3B5482588A54A11AEE2C /* Pods-VimeoUpload-iOS-OldUploadTests.release.xcconfig */, + DDBDFFA351A30960D21939E28DC60212 /* CoreGraphics.framework */, + E72265D742A839587BC23CD8BD6AF14D /* Foundation.framework */, + D7729272B0191CF0AEEC273F9FF8FFC1 /* MobileCoreServices.framework */, + D90C6CE6DFFF0E79482EB6BEB9917B9D /* Security.framework */, + 8DAE9E29D14DFD809059EC3455D955F8 /* SystemConfiguration.framework */, ); - name = "Pods-VimeoUpload-iOS-OldUploadTests"; - path = "Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests"; + name = iOS; sourceTree = ""; }; - B23733533370FD3EC60B6BCB3950F37D /* UIKit */ = { + CEAE45069CFCC48961DD462C4CF3717A /* Reachability */ = { isa = PBXGroup; children = ( - C5624A087C10DE994D4F380D76D11CD8 /* AFAutoPurgingImageCache.h */, - 600D472EDC99CA818353A5D89F987011 /* AFAutoPurgingImageCache.m */, - A6B196AB2ADA189C96F4A92DF020A2AB /* AFImageDownloader.h */, - 3BFCEC6FBC3145714CC6CF4DFC949341 /* AFImageDownloader.m */, - FB6A99CF789B5BEA9456117EA2855947 /* AFNetworkActivityIndicatorManager.h */, - 19CEB26626C9812FA30C7379ACA089D6 /* AFNetworkActivityIndicatorManager.m */, - 1F5BC750D923B3B868099617A48936CF /* UIActivityIndicatorView+AFNetworking.h */, - 0A255F1E920EA10EF5D5D5D29ABF77DA /* UIActivityIndicatorView+AFNetworking.m */, - BC9E61ED1EDFE2CD20FA90CF00D4608B /* UIButton+AFNetworking.h */, - 9181B76CF70F368A91B6164CF5EA35AF /* UIButton+AFNetworking.m */, - BFECB493111928B6FBC7E30A53CD6C0C /* UIImage+AFNetworking.h */, - 994751133E5FF4982C5BCE1CAAB6A78B /* UIImageView+AFNetworking.h */, - 8A0EACC1726F08952CBA6D09D34A5E69 /* UIImageView+AFNetworking.m */, - AF5691A664BC371E586B7A9B0EA405C8 /* UIKit+AFNetworking.h */, - D65690666F392CD6883791300864C4BF /* UIProgressView+AFNetworking.h */, - DA2A360A317E5BEEB0074445003EDB17 /* UIProgressView+AFNetworking.m */, - 49CF485D82938742667C3CB53CCE9FED /* UIRefreshControl+AFNetworking.h */, - A0648207A189AF57F74C57B6416EFA4B /* UIRefreshControl+AFNetworking.m */, - D24A7C1D41EE2BA30BB03DAF0C03B000 /* UIWebView+AFNetworking.h */, - F9A28D7473445BAC2DF8ED3294808DCF /* UIWebView+AFNetworking.m */, + A9988828014FB5018F75CBEC9127C5EE /* AFNetworkReachabilityManager.h */, + 9EC36289436BC8F92161297A7A6BB279 /* AFNetworkReachabilityManager.m */, ); - name = UIKit; + name = Reachability; sourceTree = ""; }; - B5E6DA0E3E0AC270FEEA7AB27E3E5D95 /* Serialization */ = { + D0CB0ECBF0AE862930CC3AD43D10DEF3 /* AFNetworking */ = { isa = PBXGroup; children = ( - 8A85F49E86198194EBD238BC4D17B241 /* AFURLRequestSerialization.h */, - 37C980B8A834DB882EE016253A514531 /* AFURLRequestSerialization.m */, - F482E1B7506500767CF4C18ED47EC41B /* AFURLResponseSerialization.h */, - 213E236A9902F5C48054532E31B83A86 /* AFURLResponseSerialization.m */, + 4148FF8C4708BAD38593A015777E7E41 /* AFNetworking.h */, + 3D0D373019BD513FCAC555BC063A9889 /* NSURLSession */, + CEAE45069CFCC48961DD462C4CF3717A /* Reachability */, + 12FE66E65A2C61174B23DF2E4F7EB109 /* Security */, + 2AB1EC7FF63F4B976FCFA5FDC11927C4 /* Serialization */, + 1EAA0B00FA919A6A07D1DB010C5B85FA /* Support Files */, + 3BDA58E9E81F2E50764F2C6A156CED6D /* UIKit */, ); - name = Serialization; + name = AFNetworking; + path = AFNetworking; sourceTree = ""; }; - DF19E6D93D5476A1FC6AE5732454D11C /* VimeoNetworking */ = { + EFC8D1216166DE80CF4A6175E6193664 /* Frameworks */ = { isa = PBXGroup; children = ( - 1251E50741E644D6312C93A72D228CC2 /* AccountStore.swift */, - E658A3C4548684F7BC6D6A4843EBEE23 /* AppConfiguration.swift */, - A17090BB86BF96FF7E88156C3CB28957 /* AuthenticationController.swift */, - 3731BACEDB31E0440FF7D8D8C0C5E492 /* Constants.swift */, - B88A43F94D3F984AA9F607E6D336933C /* Dictionary+Extension.swift */, - 7EB63AB5D89A08887565D82CBAC4A0A3 /* ErrorCode.swift */, - 54035CD32BBAAD35D60CCBDDEC9CEE44 /* ExceptionCatcher+Swift.swift */, - 5C9F540643D34B036DF1F955F1B4921C /* KeychainStore.swift */, - D2425F9FA4CEFF602F6F4A053F70B656 /* Mappable.swift */, - E0B7E1AC52305E19ED018CF401606970 /* NetworkingNotification.swift */, - E7907829F15403992DC9A4B548CD41E1 /* NSError+Extensions.swift */, - E057FC5D3359A0584EF6495E7E3F6939 /* NSURLSessionConfiguration+Extensions.swift */, - 4F578FD9D3A32CB94B4560392C77383F /* Objc_ExceptionCatcher.h */, - 0F622C8797560A4BC9EDB9A36960BB2C /* Objc_ExceptionCatcher.m */, - DF6081927D4DC329FD7ED0F883D3B576 /* PinCodeInfo.swift */, - 77C69108CD986B77A9C0122212FD6613 /* PlayProgress.swift */, - E79ADD6A0AFBC97CBC10D3AC1EA024DC /* Request.swift */, - B6671E602410D6092439152EADE23607 /* Request+Authentication.swift */, - 5FECF370ACCB82ABBBADEB2C23066C4F /* Request+Cache.swift */, - 7AED40431616221804026E870D2C4C82 /* Request+Category.swift */, - 8B32A79195E4789E0D38A7C199CAB76A /* Request+Channel.swift */, - 3955D9A7EC2CD5C86E892193E62E9E0F /* Request+Comment.swift */, - 9717512502B2CBB64AF956ABFD3ECF10 /* Request+Configs.swift */, - 8251D7E0AE21801085F5938A385FEECA /* Request+Notifications.swift */, - 5A1207562C5BD2A71A7DC1A59A824D64 /* Request+Picture.swift */, - 58B62EE71CA018F665D8A742ADA3787A /* Request+PolicyDocument.swift */, - 8E9A61DA32392AD194FABDB69398E9DA /* Request+ProgrammedContent.swift */, - A287772AED26189394F852F1383AC103 /* Request+Soundtrack.swift */, - B39620FF19ACEB51C1DEA18A7A12B2D0 /* Request+Toggle.swift */, - 0279AA9EFAF1A2B4A5CBF25821A5F353 /* Request+Trigger.swift */, - 2D775ED9A8AEEA1BBA968B5740A34BFD /* Request+User.swift */, - B44AB41921F9D9B0620A5C3553FE4B72 /* Request+Video.swift */, - 9CB779FF1FA13F0CA99A13B6A0857464 /* Response.swift */, - 0C2608F23A5BD6202F176337A9F85D70 /* ResponseCache.swift */, - 4D38065BB0B23FBE674985A0F8B72EC9 /* Result.swift */, - 5DFE210185943D679FFCBBA4B56CF1A6 /* Scope.swift */, - 5427FA6B4360346236E6133084DFC10E /* Spatial.swift */, - DE1A0D9A33DD15FBE6EBBA8E2BC96A15 /* String+Parameters.swift */, - 1625E43ADF6E7014140E962E4D8D2E15 /* Subscription.swift */, - A784B675172C4B624597642F4BFE56E7 /* SubscriptionCollection.swift */, - D53F12E8EBC660E39EA3C8787CA543C4 /* VIMAccount.h */, - 338DFD9D7A1D0BF695F33079268D7506 /* VIMAccount.m */, - 14988764C33C43F624F78A9FD05EA2D7 /* VIMActivity.h */, - 08D1BA8A90EDC00E8EB28A886F2B4CD7 /* VIMActivity.m */, - D1C4237239681814FFDD6E43465463EE /* VIMAppeal.h */, - DF54671CD48BA10A8DA67E5817580E1A /* VIMAppeal.m */, - C550175B7EC7075E2835E8C7DCC2723F /* VIMBadge.swift */, - 23AB835CE25AE0CA04362D10838A3CF0 /* VIMCategory.h */, - F4B92013945EAA4735C74F5F20F119CB /* VIMCategory.m */, - B7F8E371904C34C30A4498FCCBE5F2AB /* VIMChannel.h */, - 4A5768E8C2A4AD09EE82653EC6A4E43A /* VIMChannel.m */, - 4D485D3D976CC90259E83A2E9452E4A9 /* VIMComment.h */, - 2B670858BCB563B5FDA0DFAF36BAC42E /* VIMComment.m */, - 635406386C5C563BE8F30C456CF4EBDE /* VIMConnection.h */, - D6E40E32356AA402232F099288457708 /* VIMConnection.m */, - 223024B664957866BB751A1110F1B9F0 /* VIMCredit.h */, - 029DD25355A20155F5263F91BB7FEB40 /* VIMCredit.m */, - 2BC19A9538D0325AF47F77D4BDAB05E5 /* VimeoClient.swift */, - 78E698DE1E56024C0E969710944608D8 /* VimeoNetworking.h */, - 2D394EBCF2013AC95F4F316F6683EA0C /* VimeoReachability.swift */, - 12603000BA159A15FCFE312613690391 /* VimeoRequestSerializer.swift */, - E5E07926E2F0D6EBCCF626360CF3A857 /* VimeoResponseSerializer.swift */, - 4FBA6678CB2E7680B2E44F4375609022 /* VimeoSessionManager.swift */, - 0E61F34F2E6B1E414299E9F4D8B5FFF8 /* VimeoSessionManager+Constructors.swift */, - FA2516A7CB0A50CB9CD1053367E53327 /* VIMGroup.h */, - FF858E05AAA86C6C60607DC47DA2B2C9 /* VIMGroup.m */, - CC338E19D1B0972E20EE7505BA2A23D2 /* VIMInteraction.h */, - D8008689D0B9CEE5A8B4F22EDD838235 /* VIMInteraction.m */, - C99148A0B79F2354BFE4ACBDE082A809 /* VIMMappable.h */, - ECF46B5E5956D18C9AAD34EE80C8F77E /* VIMModelObject.h */, - DEA77B71C751EBAB48B5E4F1CB110265 /* VIMModelObject.m */, - F780713BAF9F48FFB39AC81244609869 /* VIMNotification.h */, - CB8AD1BB40CAF74E14801DCD2423742E /* VIMNotification.m */, - 500FE9C937B576F7F751188E9C8B58C2 /* VIMNotificationsConnection.h */, - 9AF9D80E0A02BB32BC9B773852EB179C /* VIMNotificationsConnection.m */, - 813FFFC7FD25CCBEFAADC204524CBF26 /* VIMObjectMapper.h */, - AE0DF6D9E98751FE374466891CF22E93 /* VIMObjectMapper.m */, - 9FE2618631D9AF7217C1FC477FE2046E /* VIMObjectMapper+Generic.swift */, - 95DCAF0CD8E8A04FB849D0EB3ED32D01 /* VIMPicture.h */, - A33177A8F3A1862EEA26D30A1D63CC07 /* VIMPicture.m */, - C99A95A93AB75AFFF2B725A21CFF7377 /* VIMPictureCollection.h */, - 1DD953AC1282A72EB724028504DB991B /* VIMPictureCollection.m */, - A69D06730C5B3566A7B8FF5A91C529C1 /* VIMPolicyDocument.h */, - F5C6F4E723ED9B6BE8833278899E2B7A /* VIMPolicyDocument.m */, - 54DC90B45F8449D72BD99F888633B19A /* VIMPreference.h */, - 63AC97C994F4A5DEDCFAB03FE2835587 /* VIMPreference.m */, - B5BD0E4A9E13D4E5939E74CE749ACF61 /* VIMPrivacy.h */, - A95F8642BCADE8FFFF3519DABF17AB95 /* VIMPrivacy.m */, - 70B44A30D123EB8B4E494C3750DC262F /* VIMProgrammedContent.swift */, - D39B2D537CC8914B5AB105B380641859 /* VIMQuantityQuota.h */, - 33B7F78148EB2BCFE6839B0A753DA5A7 /* VIMQuantityQuota.m */, - 6E34B0E33381605BC20762BA521A846C /* VIMRecommendation.h */, - 9A4BE21C00C1529F947AEADC6AFEC0AB /* VIMRecommendation.m */, - 14EA79709F08DA21BEFAD6B727216E8A /* VIMSeason.h */, - 3BD0889F5B218566401FFF6EFC7448B1 /* VIMSeason.m */, - CF8F7E3CBB1B67B094851E251BC41BC2 /* VIMSizeQuota.h */, - 20B9A2C2DE00876AF465AD16D2C4C5BA /* VIMSizeQuota.m */, - 439CBA3DC46A23846FBD30F048BE086A /* VIMSoundtrack.h */, - 5AF82FDAADDBD52AD4A5E5FD40451B8F /* VIMSoundtrack.m */, - CA212CD04BA30762B1CD913421957487 /* VIMTag.h */, - 2C1DAA99F189991E9808E85A60902767 /* VIMTag.m */, - 58E8E3B2AB8BBBBA38D3F57103C1E48D /* VIMThumbnailUploadTicket.h */, - F4690B8E90016909BB0EA81C311C0953 /* VIMThumbnailUploadTicket.m */, - 4A6089F06B69AA4011F16D1BE20C6240 /* VIMTrigger.h */, - F268DB0DE841D483B2E3C48B95F2013B /* VIMTrigger.m */, - B784B3FDEB773915E04502100EB6F701 /* VIMUploadQuota.h */, - D91BABF53F46F9B94488819367CB559E /* VIMUploadQuota.m */, - 4E79D6C3283CB5EF1812B0021DA11FC5 /* VIMUploadTicket.h */, - 78D4C6E7DFAF7621B138929C43CEAD58 /* VIMUploadTicket.m */, - 6A8AD460DA5A2F6BCCC1E450EFCD4B60 /* VIMUser.h */, - 49FDC86C4F0DDC07BF2B3A89084F05AF /* VIMUser.m */, - 281BE9E67D00EF177F449FA07B3FB9C6 /* VIMUserBadge.h */, - 1541E9FB35206F5192232467FC5B429D /* VIMUserBadge.m */, - F321BEF3CBD2446312D1D121E254290F /* VIMVideo.h */, - 70A33F9F7F54570EFF69A144E3A3F760 /* VIMVideo.m */, - 149A190283760F475F91178FCB276A53 /* VIMVideo+VOD.h */, - 7EDADBD03E681FF52A2DE74B6E5A00A4 /* VIMVideo+VOD.m */, - DB074C96C719EAE42367359FBE57E21F /* VIMVideoDASHFile.h */, - EF00725EFACBAD93B7F4DF1A20DC1F42 /* VIMVideoDASHFile.m */, - 8B62CA840DF965405A11E44123254BAC /* VIMVideoDRMFiles.h */, - 2B409357FA7F1EE47504EB11F838F1FD /* VIMVideoDRMFiles.m */, - 90087B0D4E77D07B4E9F1D217680CB6B /* VIMVideoFairPlayFile.h */, - E062278A9F4389EDD1742AD9257524FC /* VIMVideoFairPlayFile.m */, - 0F7FE012B283AB95DB394786375AF14C /* VIMVideoFile.h */, - EB013DBE7F6A441F3FC60D8F0F84FE89 /* VIMVideoFile.m */, - 1D06933F7D0190E13136B6084CCF19FD /* VIMVideoHLSFile.h */, - 761B02BADB3E7B60DB3FF23CD76B6AF2 /* VIMVideoHLSFile.m */, - 0627D0F046BC1A05A689F1B332F10429 /* VIMVideoPlayFile.h */, - 68D1AD311A8197BF776022C79C5F1ACE /* VIMVideoPlayFile.m */, - A5CFEC28DA0D60B074FCFDEBB948B940 /* VIMVideoPlayRepresentation.h */, - 494E66C69C53C64522E95F995B56BAB5 /* VIMVideoPlayRepresentation.m */, - 528FFF37101F041C21101734F752C2AE /* VIMVideoPreference.h */, - 7FA3810B9E6829C7403D5D0F19EDACFD /* VIMVideoPreference.m */, - D3BA141A5553BAF7C116D19D1C669DC6 /* VIMVideoProgressiveFile.h */, - D112466303A0600AF69CB9E02EAA27E5 /* VIMVideoProgressiveFile.m */, - C9EA8CD923B36DA3EAD55FD3879A502F /* VIMVideoUtils.h */, - A59DE65C23DA87346FB7BB1F08A38182 /* VIMVideoUtils.m */, - 40FF5ABC89E5B4D81BB332308EBD6ABA /* VIMVODConnection.h */, - 6402A355C8648B1DF96ACEBE585B656F /* VIMVODConnection.m */, - 8C5391EE3E5EBC61C92F45484F77F90B /* VIMVODItem.h */, - E7FF72F2B598E25BCF0422AC7894A20D /* VIMVODItem.m */, - 089180826529F9F68F4B5F6A9DDBB25C /* Resources */, - 601565E25F27ABFAD5D460A428D41214 /* Support Files */, + 5461D992F0D803F0F05DF72B2849301D /* AFNetworking.framework */, + C2D2092A0B5B67D0F34937D00026E6EC /* iOS */, ); - name = VimeoNetworking; - path = VimeoNetworking; + name = Frameworks; sourceTree = ""; }; - EFC8D1216166DE80CF4A6175E6193664 /* Frameworks */ = { + FB293DC0192603A810CF47C026B5C90A /* Pods-VimeoUpload-iOS-OldUpload */ = { isa = PBXGroup; children = ( - 5461D992F0D803F0F05DF72B2849301D /* AFNetworking.framework */, - 58ADEC1A744624280C424466F85276D6 /* iOS */, + 3FBFC292EA4C54BD77E35F6BA2F575DA /* Info.plist */, + D7A828D7986D21FD6CD1AAFC2C2AD868 /* Pods-VimeoUpload-iOS-OldUpload.modulemap */, + DFBA9CB028E92A4BD313247C31E60A61 /* Pods-VimeoUpload-iOS-OldUpload-acknowledgements.markdown */, + 89919609A4C82EA22E98E3889206920D /* Pods-VimeoUpload-iOS-OldUpload-acknowledgements.plist */, + 977CC708C885349F45A1FFAA4DB28215 /* Pods-VimeoUpload-iOS-OldUpload-dummy.m */, + 1C5628750E74ECB23E63B36AEF2A8E62 /* Pods-VimeoUpload-iOS-OldUpload-frameworks.sh */, + 48142BEFC1B53A12595D6F05AE02468E /* Pods-VimeoUpload-iOS-OldUpload-resources.sh */, + 3791D86A6474626014DF7E87E64D0CC1 /* Pods-VimeoUpload-iOS-OldUpload-umbrella.h */, + EEFA41EE996C8611C4A19F86061608E7 /* Pods-VimeoUpload-iOS-OldUpload.debug.xcconfig */, + 0C55E963668441AF0A84D56BE0763691 /* Pods-VimeoUpload-iOS-OldUpload.release.xcconfig */, ); - name = Frameworks; + name = "Pods-VimeoUpload-iOS-OldUpload"; + path = "Target Support Files/Pods-VimeoUpload-iOS-OldUpload"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 117A8DE7291D5E8AA42C06C16D65274E /* Headers */ = { + 09D8A90993BFCD73EDA661FCA2493358 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - B9B6393A6D55E217BE87C42FAD925D07 /* Objc_ExceptionCatcher.h in Headers */, - 35169A4520324E50813E653E223FA16F /* VIMAccount.h in Headers */, - 5D862A3CE5B17C76E3F21ED62FBDB757 /* VIMActivity.h in Headers */, - 678D568B6F7293E48418DA96A3C9A81D /* VIMAppeal.h in Headers */, - 341C039B056DC8521ACB07FDC4857104 /* VIMCategory.h in Headers */, - F69AEBDF86112551CBE86B9A63D569AF /* VIMChannel.h in Headers */, - 178CD9C9934A47118DBF6ABCEF74DE0C /* VIMComment.h in Headers */, - 290A5C980B9B4A45125C22A3C6F4D52E /* VIMConnection.h in Headers */, - 173FC74D6CDD662BB7A7820D48E92CAF /* VIMCredit.h in Headers */, - B1A9884315D8230C190E19E5B8E87C5A /* VimeoNetworking-umbrella.h in Headers */, - F42023CADF80388A7EE24CDC3378D896 /* VimeoNetworking.h in Headers */, - 25C7F1E0679C775BC68F3F91A41898AB /* VIMGroup.h in Headers */, - 1B55EABBDFF3E11D188FC728597AD739 /* VIMInteraction.h in Headers */, - 8DC561474BEA410319DF3774BD2FE0D8 /* VIMMappable.h in Headers */, - 59660663BC5E565B0F4F994E3688083D /* VIMModelObject.h in Headers */, - D71682AD848B134EB74BB0B27F9EE2F6 /* VIMNotification.h in Headers */, - F92477EC3C798D43C7DA759DF0AFDE34 /* VIMNotificationsConnection.h in Headers */, - B793155915EDF853F2B515F87230AEC4 /* VIMObjectMapper.h in Headers */, - 862CA2F597532E9D63DB4C787AD17AA7 /* VIMPicture.h in Headers */, - 57A40C3321A9157AB2711E100C58DD2E /* VIMPictureCollection.h in Headers */, - CE513A764AEF1DF8E3788D05B03CD15E /* VIMPolicyDocument.h in Headers */, - D30636F1DCCA97413888F0D0DFB63ADF /* VIMPreference.h in Headers */, - CCFCAB315F227FF02C9DCACB24FA0AAD /* VIMPrivacy.h in Headers */, - A280ED07778424BB4FB5E2596B927323 /* VIMQuantityQuota.h in Headers */, - BD3361E6028D2FD289D7E9BEF5392A6A /* VIMRecommendation.h in Headers */, - EAEBAD0876E9C66617B5366DC192ABDB /* VIMSeason.h in Headers */, - 6B0432E81EC7132ADF0516729B74C724 /* VIMSizeQuota.h in Headers */, - B7A153052BBBE07EE5C653777F052C3F /* VIMSoundtrack.h in Headers */, - A8E116A9A098FE44D9CEAA85FCF9D408 /* VIMTag.h in Headers */, - 32F90DCD5121984682C68D40A51EC126 /* VIMThumbnailUploadTicket.h in Headers */, - 9E155F6AE09BB4243CAE115081560893 /* VIMTrigger.h in Headers */, - 91258FC91233FB6DA9C05902C106514B /* VIMUploadQuota.h in Headers */, - 85849DB10CF2386821DEB59E77404730 /* VIMUploadTicket.h in Headers */, - D73A12F20CB1A1B5669AF75288D52029 /* VIMUser.h in Headers */, - 048DF2FE55300A19AE363640BE8C2CA2 /* VIMUserBadge.h in Headers */, - 40630E6FBAF3FA1BA0316B7DEAB82F44 /* VIMVideo+VOD.h in Headers */, - 84F4F2115F97F8FE14D0BEBE38A772E0 /* VIMVideo.h in Headers */, - 69B1AF537561D8F581165B58FCDD81FB /* VIMVideoDASHFile.h in Headers */, - D1D2D9F03C9CBF28F01F5F293325881F /* VIMVideoDRMFiles.h in Headers */, - 80E8BEBDC57B013AB61A2D4AFED25076 /* VIMVideoFairPlayFile.h in Headers */, - F1201DC66104CE2A45B7D54394115AFC /* VIMVideoFile.h in Headers */, - 6002D7357AE628BBDB572FC9EFB211B0 /* VIMVideoHLSFile.h in Headers */, - 294377C03BC03F5CF2CCD7992872ECEF /* VIMVideoPlayFile.h in Headers */, - A346ABB83FE181956A7DC49EDF3EF2DB /* VIMVideoPlayRepresentation.h in Headers */, - DE38B59B4D7D872FEF317D301D7D0113 /* VIMVideoPreference.h in Headers */, - 3DB6964EE0B28369CE1F7A6892E75CCA /* VIMVideoProgressiveFile.h in Headers */, - 78A21D825370B0C218AEF351105AC567 /* VIMVideoUtils.h in Headers */, - C7A8FB48AC76C370F585B5E609AFC6F9 /* VIMVODConnection.h in Headers */, - 47EEFB29B92A111BE2E154B699814BBF /* VIMVODItem.h in Headers */, + 8D1538471F2C35364D46EE098BC9F426 /* Pods-VimeoUpload-iOSTests-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 155D10C569A39D79D0978C5417AAD601 /* Headers */ = { + 25FE0ED3E4046FB05741DBE1B82EAA5F /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4A5A50BC35B046280FF471A025C8F103 /* Pods-VimeoUpload-iOS-OldUploadTests-umbrella.h in Headers */, + 47A83B3FCA8F2D023C47AD1E90388C3C /* Pods-VimeoUpload-iOS-OldUpload-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 2372F640A80258E3B32EE4F49E3D78D0 /* Headers */ = { + 4AB5C6AE88C290E74BE94A528AF98DAE /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 7F7668339CCE57BC809523B5613E0BCF /* Pods-VimeoUpload-iOSTests-umbrella.h in Headers */, + 15606351AAE10A740FA83F707A743AC4 /* Pods-VimeoUpload-iOS-OldUploadTests-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 25FE0ED3E4046FB05741DBE1B82EAA5F /* Headers */ = { + 73544E2697F1D548BD0B20F57BFFC46E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 47A83B3FCA8F2D023C47AD1E90388C3C /* Pods-VimeoUpload-iOS-OldUpload-umbrella.h in Headers */, + B096979D89174D895ACAA9130A84C751 /* Objc_ExceptionCatcher.h in Headers */, + C08010E9B33FEB8A829FBFB76BA1A56A /* VIMAccount.h in Headers */, + AA20F58AB9ADF9E981355D9DDD6F43CA /* VIMActivity.h in Headers */, + D814EAEF15E35911C154C9706ACAFAB2 /* VIMAppeal.h in Headers */, + 167ACEC255DCBED6BFDC64FAD93DC1BA /* VIMCategory.h in Headers */, + BB2BB064BA029A5772F1B80A2504B6D4 /* VIMChannel.h in Headers */, + 5C0337211CDC4579019DC0704EA66370 /* VIMComment.h in Headers */, + 68E37408801BDFE64FE284EB926C84D3 /* VIMConnection.h in Headers */, + 34ACDFAC012CB5AE7996D0B1157ED336 /* VIMCredit.h in Headers */, + C9FBFA4214F4CE291C59D52DFA886C02 /* VimeoNetworking-umbrella.h in Headers */, + 67DC334CA1B22722C3A2E2C20EBF74A4 /* VimeoNetworking.h in Headers */, + 7F701AD6C1E16AC30D5A089603B3F29A /* VIMGroup.h in Headers */, + 78471141D3A567C068C60243ED3554B8 /* VIMInteraction.h in Headers */, + F99681CD0018DD5318E1C75064153302 /* VIMMappable.h in Headers */, + 7AD4CE7ABA24F180CCFBD6C0310DC1AA /* VIMModelObject.h in Headers */, + 3C178E120BAF6B59E24F466C8FF23D6B /* VIMNotification.h in Headers */, + F938EE05B1FA2FCD55CAE920B0275003 /* VIMNotificationsConnection.h in Headers */, + 9D71889BF97F2D2F4C191F9F679F841A /* VIMObjectMapper.h in Headers */, + DEA22BE9551003B62BF8C64C7B9E4352 /* VIMPicture.h in Headers */, + 12F8248721BA64F46CB0036E970CA4D2 /* VIMPictureCollection.h in Headers */, + 4D3532EDF43F7631961FBCE2118906D1 /* VIMPolicyDocument.h in Headers */, + E1EEC50202199605B8FAA025E2300EE3 /* VIMPreference.h in Headers */, + B3734EA9CE5ABDD53677CBBF95218D93 /* VIMPrivacy.h in Headers */, + 8BAC1702671F9373055297301A078026 /* VIMQuantityQuota.h in Headers */, + F36EA44AC96E1D0AFBC3061569B66BF1 /* VIMRecommendation.h in Headers */, + 52527D3845CA7EBE0E2C3CAED510C19A /* VIMSeason.h in Headers */, + F5E6F5F26F2A0FBAD39DFCC082B71083 /* VIMSoundtrack.h in Headers */, + B530B7CEF7393543955FC9EEC6C9D797 /* VIMTag.h in Headers */, + 94CABFC144E1224E093EC7B5057F08BD /* VIMThumbnailUploadTicket.h in Headers */, + D86979E7D5F083AE83F26A54375E0BE6 /* VIMTrigger.h in Headers */, + 932CA521D19C5DB870B9EA5163CDF9D0 /* VIMUploadTicket.h in Headers */, + 4FA2FC796ACCCC463EEE77542BE8D142 /* VIMUser.h in Headers */, + 730A439176273D3D0BBEF1C123CB4B87 /* VIMUserBadge.h in Headers */, + 53E43BCD6CA9C9AB125E4E8D605FC903 /* VIMVideo+VOD.h in Headers */, + CC9E35985FC0082D929D45BA28334A1C /* VIMVideo.h in Headers */, + 455719CCD0654F72FBFCF510DE328339 /* VIMVideoDASHFile.h in Headers */, + E44FBE84C5072D6406FCC4456333194E /* VIMVideoDRMFiles.h in Headers */, + 006C915A85EACBE60F75135986A6BDB4 /* VIMVideoFairPlayFile.h in Headers */, + 42002EAFB3E488172644B9CCEEBBDD5E /* VIMVideoFile.h in Headers */, + 56E84D090BF8AD39FA38E51807779BD2 /* VIMVideoHLSFile.h in Headers */, + 1E555F7B50932D19657F6BACF6482891 /* VIMVideoPlayFile.h in Headers */, + E9C53427664F14DBB8FCFAB186BCFB59 /* VIMVideoPlayRepresentation.h in Headers */, + 7184A2EBE622AC5493861089EB852BC9 /* VIMVideoPreference.h in Headers */, + BB2D516BB64D23CB562B41D9C0DCFF91 /* VIMVideoProgressiveFile.h in Headers */, + E2BC5FB5EBF6496D18C35FA18DC85B2E /* VIMVideoUtils.h in Headers */, + B9E6048FDEF1EDF00DBD5E7603882B0F /* VIMVODConnection.h in Headers */, + 986442954EB5E0C1224B22AA9DA15A3A /* VIMVODItem.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1156,9 +1195,9 @@ isa = PBXNativeTarget; buildConfigurationList = BE2F436AE57C8FBA5EE060E460C52145 /* Build configuration list for PBXNativeTarget "VimeoNetworking" */; buildPhases = ( - 69EA8A3B2B045C39F3FEAE055C1971DE /* Sources */, + 44385DFD4F4908A1717F1B54812661D4 /* Sources */, CAF8D4EE064B6B1E4B79174DA6AA5F6C /* Frameworks */, - 117A8DE7291D5E8AA42C06C16D65274E /* Headers */, + 73544E2697F1D548BD0B20F57BFFC46E /* Headers */, 8EBBDB3B4D1EB2379318B416840C565D /* Resources */, ); buildRules = ( @@ -1171,6 +1210,24 @@ productReference = F0E3C679036E864BB4FCA1E4E08863D9 /* VimeoNetworking.framework */; productType = "com.apple.product-type.framework"; }; + 7BC6B6B05349082946AE006E84760048 /* Pods-VimeoUpload-iOS-OldUploadTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5F8268041F345F4C58E5A93AB671738D /* Build configuration list for PBXNativeTarget "Pods-VimeoUpload-iOS-OldUploadTests" */; + buildPhases = ( + 54BD266D3930C2D9B3A93E01BA9485AA /* Sources */, + F42F29F6FC6D8CE0F21767BB561E6749 /* Frameworks */, + 4AB5C6AE88C290E74BE94A528AF98DAE /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 870019A37CF2B05DB96AD2B9FB7E8112 /* PBXTargetDependency */, + ); + name = "Pods-VimeoUpload-iOS-OldUploadTests"; + productName = "Pods-VimeoUpload-iOS-OldUploadTests"; + productReference = 84027987FF22C70AB94CB6DB9FB0CBD5 /* Pods_VimeoUpload_iOS_OldUploadTests.framework */; + productType = "com.apple.product-type.framework"; + }; 9ABE00A810B6AFE214900E3484571A39 /* Pods-VimeoUpload-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = 353A98449FF9A34A53AEF70073FE6EBE /* Build configuration list for PBXNativeTarget "Pods-VimeoUpload-iOS" */; @@ -1190,23 +1247,6 @@ productReference = 1C6422F81EA10F0A3062FC248BE9659A /* Pods_VimeoUpload_iOS.framework */; productType = "com.apple.product-type.framework"; }; - A358F2681BE306E8CB440C88A291B738 /* Pods-VimeoUpload-iOSTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 0D4109D91B43D42CD4DEC15877BB90A8 /* Build configuration list for PBXNativeTarget "Pods-VimeoUpload-iOSTests" */; - buildPhases = ( - 48A6D60BFBEA60A2A5034A42587756EB /* Sources */, - 4E1872D4CC7325E3EF164880191FB61B /* Frameworks */, - 2372F640A80258E3B32EE4F49E3D78D0 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Pods-VimeoUpload-iOSTests"; - productName = "Pods-VimeoUpload-iOSTests"; - productReference = 2CF57E9BE891732B80AD558CB436D205 /* Pods_VimeoUpload_iOSTests.framework */; - productType = "com.apple.product-type.framework"; - }; A8183FB71498E9B5AB9E8A5E06B4C4DA /* Pods-VimeoUpload */ = { isa = PBXNativeTarget; buildConfigurationList = 505A71250E38937722DF0019156081B4 /* Build configuration list for PBXNativeTarget "Pods-VimeoUpload" */; @@ -1243,21 +1283,22 @@ productReference = EDF2918E5CB02CFC1ADE04F783E882E5 /* AFNetworking.framework */; productType = "com.apple.product-type.framework"; }; - D5108D4DE13C49C52958F9F8BD1BE167 /* Pods-VimeoUpload-iOS-OldUploadTests */ = { + E506237629A79E0A130B676329F7D233 /* Pods-VimeoUpload-iOSTests */ = { isa = PBXNativeTarget; - buildConfigurationList = 2545BFAECF1D540C5259B454339817B4 /* Build configuration list for PBXNativeTarget "Pods-VimeoUpload-iOS-OldUploadTests" */; + buildConfigurationList = D74A5491AE8D35BC889BF72FE84777ED /* Build configuration list for PBXNativeTarget "Pods-VimeoUpload-iOSTests" */; buildPhases = ( - 6A9AF494AD585120C0686C00825742C0 /* Sources */, - D1C2FB3CCE8647049179BAAD96B9928B /* Frameworks */, - 155D10C569A39D79D0978C5417AAD601 /* Headers */, + CAEE5E688CF436D65471D644D1739023 /* Sources */, + FD7C1E955F433AD681D32DBB2F5826A3 /* Frameworks */, + 09D8A90993BFCD73EDA661FCA2493358 /* Headers */, ); buildRules = ( ); dependencies = ( + 2C203BDA52334322791C6A61DB7ADDBC /* PBXTargetDependency */, ); - name = "Pods-VimeoUpload-iOS-OldUploadTests"; - productName = "Pods-VimeoUpload-iOS-OldUploadTests"; - productReference = 84027987FF22C70AB94CB6DB9FB0CBD5 /* Pods_VimeoUpload_iOS_OldUploadTests.framework */; + name = "Pods-VimeoUpload-iOSTests"; + productName = "Pods-VimeoUpload-iOSTests"; + productReference = 2CF57E9BE891732B80AD558CB436D205 /* Pods_VimeoUpload_iOSTests.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -1266,8 +1307,8 @@ D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0830; - LastUpgradeCheck = 0700; + LastSwiftUpdateCheck = 0930; + LastUpgradeCheck = 0930; }; buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; @@ -1285,8 +1326,8 @@ A8183FB71498E9B5AB9E8A5E06B4C4DA /* Pods-VimeoUpload */, 9ABE00A810B6AFE214900E3484571A39 /* Pods-VimeoUpload-iOS */, 007473F5B3F53CD3EEA4CABB3BD4C070 /* Pods-VimeoUpload-iOS-OldUpload */, - D5108D4DE13C49C52958F9F8BD1BE167 /* Pods-VimeoUpload-iOS-OldUploadTests */, - A358F2681BE306E8CB440C88A291B738 /* Pods-VimeoUpload-iOSTests */, + 7BC6B6B05349082946AE006E84760048 /* Pods-VimeoUpload-iOS-OldUploadTests */, + E506237629A79E0A130B676329F7D233 /* Pods-VimeoUpload-iOSTests */, 119F92C3FCFD322E8CA53B254AE9B6EA /* VimeoNetworking */, ); }; @@ -1304,112 +1345,123 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 48A6D60BFBEA60A2A5034A42587756EB /* Sources */ = { + 44385DFD4F4908A1717F1B54812661D4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - CF1A8B5A81D3363C5152C2070605E3FA /* Pods-VimeoUpload-iOSTests-dummy.m in Sources */, + 907C0418B3BEBF279E024CD35630D91D /* AccountStore.swift in Sources */, + 110895699164F5489FEA1B5862189EF1 /* AppConfiguration.swift in Sources */, + 5D4A19EA76D7EA2F9AFD1D2114FE0282 /* AuthenticationController.swift in Sources */, + 4D78E4A293A03E543CB947C6E2B5BFC7 /* Constants.swift in Sources */, + 6A0B3B27B44D1B549931CA04D05FDA5F /* Dictionary+Extension.swift in Sources */, + 69D4E81727D4C0E26D58BB5A47263C6A /* ErrorCode.swift in Sources */, + A92AFBF2EA1D8470C045152905FE94EC /* ExceptionCatcher+Swift.swift in Sources */, + C740EA611A1A0708069379C21CC91D22 /* KeychainStore.swift in Sources */, + 85DA40B231DA346D3F81F5C05721E8A5 /* Mappable.swift in Sources */, + D545E07F830B9DEE5029CCAE066F5E48 /* NetworkingNotification.swift in Sources */, + E791D2683395A22962082E7163104379 /* NSError+Extensions.swift in Sources */, + 0122CB804FBC8DBEDE9E3F1C5DE370E7 /* NSURLSessionConfiguration+Extensions.swift in Sources */, + F1B355E841C99D9DBA940D0E172DAE7F /* Objc_ExceptionCatcher.m in Sources */, + 6D7348E2B052AF437E6DD693FA1BB372 /* PinCodeInfo.swift in Sources */, + E9FDD6AECB1F1502240718DD68585725 /* PlayProgress.swift in Sources */, + A90067E931B67F86573B5310EF33BEE4 /* Request+Authentication.swift in Sources */, + 1E8B612557640DDAACEB2240D859E51B /* Request+Cache.swift in Sources */, + 50240EC86EC6E3D0FE279D39C1157394 /* Request+Category.swift in Sources */, + E32C95DB739D05A45EE140D658AD40C8 /* Request+Channel.swift in Sources */, + FDB166270374B08707CC182467E2272E /* Request+Comment.swift in Sources */, + 9B5D2A28338705252BAEC9F1CDF6DB16 /* Request+Configs.swift in Sources */, + A21C97C53C6187C07993E331BB9D1BDB /* Request+Notifications.swift in Sources */, + 2F4D4E3413C1336621AD3EF5461281C6 /* Request+Picture.swift in Sources */, + 660EE8ED9CED19C9E8FD510F864F2953 /* Request+PolicyDocument.swift in Sources */, + 327BE3456189E37F229074A8E0E59D67 /* Request+ProgrammedContent.swift in Sources */, + A81D296D35F0C54AD7EFAF9C6162EEEB /* Request+Soundtrack.swift in Sources */, + A6C453AA6D3CA78851EB47381AFD4462 /* Request+Toggle.swift in Sources */, + FD825BEAA765A7ECD5D1A5B90CFD793F /* Request+Trigger.swift in Sources */, + 76FB450A67E351FEF558473DF85A052A /* Request+User.swift in Sources */, + 01BFDB7E7E77498861406FE7F563EC2F /* Request+Video.swift in Sources */, + 7EB9BEBED79E8411B9797F9B7E41B2C3 /* Request.swift in Sources */, + F2625E2811F90F09002CACB5816B66D5 /* Response.swift in Sources */, + 173092A45F57338768EE067ECFDF126F /* ResponseCache.swift in Sources */, + 2697B3FCADF5B44B1B19381D7B54F194 /* Result.swift in Sources */, + 530B47788A94A38FE1F07B0D9A0026E4 /* Scope.swift in Sources */, + 6286BBCC9E8308998C92DE6A732153C0 /* Spatial.swift in Sources */, + B8A0FD0C3B86C1B68BC177F0E4F46FF0 /* String+Parameters.swift in Sources */, + E9CCC4E47921BE30AAE21DE57E20BEFA /* Subscription.swift in Sources */, + A0BD9EC2D4DFF7F092F03C98B9A04EAC /* SubscriptionCollection.swift in Sources */, + 6AFAD442B4AAEECF1318FA8525604051 /* VIMAccount.m in Sources */, + CBB0A1DE5A92E8A8AA8EDF47F90D4704 /* VIMActivity.m in Sources */, + 6203DE451A85E5A0AA5C13D751699B1B /* VIMAppeal.m in Sources */, + 2BE918B073FD534F3D63785B26F34726 /* VIMBadge.swift in Sources */, + FB1D774E4A4E73BEC95B50B24530ADEC /* VIMCategory.m in Sources */, + DE18C4BDBECD0E69D0696F8BD2DCD577 /* VIMChannel.m in Sources */, + F918C94B773F6FAE6B379A7A216C14DF /* VIMComment.m in Sources */, + 7E9D810438EAF1EC8C73357A66E2F745 /* VIMConnection.m in Sources */, + BCBA69CD7C8C0C72ED283C9E23F1E9E8 /* VIMCredit.m in Sources */, + 44C4F1F6F4236CB76C0C34FFFBEC9E93 /* VimeoClient.swift in Sources */, + 25178C93155A9DC0484E1F299E2F7CB7 /* VimeoNetworking-dummy.m in Sources */, + D7B60EFC0FBAA6322F0E8BB9A9A81DED /* VimeoReachability.swift in Sources */, + 54C37CD332C73F67F7754DAE3F3D4B3D /* VimeoRequestSerializer.swift in Sources */, + B326931A696FDB9E8D38DACFC9B16575 /* VimeoResponseSerializer.swift in Sources */, + 3E9017BD1F6A95F49D9534FED7AEE8E0 /* VimeoSessionManager+Constructors.swift in Sources */, + D8876D8D889C6B0E96CF2AFD3CDB8B97 /* VimeoSessionManager.swift in Sources */, + 828EB50094BB958BEE3B094F96465E3E /* VIMGroup.m in Sources */, + 2F3A5EFEDFA43593DC5AA806D91BFA5A /* VIMInteraction.m in Sources */, + A07809AF47318F63FABD8430E9D2D5BA /* VIMLive.swift in Sources */, + A7B7691B6B973F3E7F1F21F416BD3613 /* VIMLiveChat.swift in Sources */, + 926D0D88C69D6E64C4F079963246D773 /* VIMLiveChatUser.swift in Sources */, + 13B2648F4C8600A30243D27AC672A0A5 /* VIMLiveHeartbeat.swift in Sources */, + 84D5E7F02850F93CBFE2114DE63556DE /* VIMLiveQuota.swift in Sources */, + 49256D3D8A3D5ECF3865BD63A889E783 /* VIMLiveStreams.swift in Sources */, + E59B30AE3C849AECA3C525452E2AE055 /* VIMLiveTime.swift in Sources */, + AF31E2ADAC20108EB84BDE3DAC89B5AD /* VIMModelObject.m in Sources */, + 84FCB295072BFCC1B8C766B77B2A4355 /* VIMNotification.m in Sources */, + B19D1BB51563B94A63A6D1AAD3318B07 /* VIMNotificationsConnection.m in Sources */, + 81D0F571B178C2F82F146F1F5E50C097 /* VIMObjectMapper+Generic.swift in Sources */, + D452173C5942C7EF4BADA8F49E73EEBB /* VIMObjectMapper.m in Sources */, + 26F8805B8DFCDA44EC786A09D93900DA /* VIMPeriodic.swift in Sources */, + 8EB0FBBB983197A428EB2C6B4F6E604F /* VIMPicture.m in Sources */, + 01C097A72389242F9B53E8A8B21AD7E8 /* VIMPictureCollection.m in Sources */, + 17AF6E91051C40A1909641FBD81CFCE6 /* VIMPolicyDocument.m in Sources */, + 79FD18E3550C4D60892402C954D89D58 /* VIMPreference.m in Sources */, + BD430763476A5C43180E216E8DF6814C /* VIMPrivacy.m in Sources */, + E322318676064FC0B87D0E9F79EA1A55 /* VIMProgrammedContent.swift in Sources */, + E6BC2F1EBCB35E455ECB7D63F1591E93 /* VIMQuantityQuota.m in Sources */, + 1A19B0C55294E4016F6F29DF11B37286 /* VIMRecommendation.m in Sources */, + FC4467E7982DA5205C40F4CE3876FD62 /* VIMReviewPage.swift in Sources */, + 1454895436E2AEDC9FBE797C83971E31 /* VIMSeason.m in Sources */, + B8C936EBBA62FA2DB48E61C49C63631B /* VIMSizeQuota.swift in Sources */, + 9CF285BF9B73A83B35CEF6FCFBF18675 /* VIMSoundtrack.m in Sources */, + D109CF550CC4B4207ABD5A8BDA5D7FB2 /* VIMSpace.swift in Sources */, + 6FC69948AF7AED0F67402F8044ABE1BC /* VIMTag.m in Sources */, + E67F7F8543FC715AD3B30BC6CB366B6E /* VIMThumbnailUploadTicket.m in Sources */, + 1F0BE13B306FC15641F3B48939AD0389 /* VIMTrigger.m in Sources */, + 21F296CA85D7E8EDCE29C153376A8E20 /* VIMUpload.swift in Sources */, + 080981D0829053FB0D91C3AC721C22E6 /* VIMUploadQuota.swift in Sources */, + C7D618E6E16BAB6EE81D7A943430A155 /* VIMUploadTicket.m in Sources */, + 9A15FF8933713870E90F69BBC18908B0 /* VIMUser.m in Sources */, + 7CCA55971A69EA53482B0040647808A8 /* VIMUserBadge.m in Sources */, + 1C762B3B85A259872E5A315B3C9FEC2F /* VIMVideo+VOD.m in Sources */, + DCE8E24B5551BD3ED1FD7ABD56C10386 /* VIMVideo.m in Sources */, + 46DE5BBE30FCA924541AC026D793A3D7 /* VIMVideoDASHFile.m in Sources */, + 25A450E1078CE9EB3462CF2D94651C0D /* VIMVideoDRMFiles.m in Sources */, + 5E954272295CF70B4C2C2815117255AB /* VIMVideoFairPlayFile.m in Sources */, + A1187C43A1E035111DE63C082E28A393 /* VIMVideoFile.m in Sources */, + B0A505817B511F3A35762CD3DC47A80A /* VIMVideoHLSFile.m in Sources */, + B8E04F3BBEBBD14C2D12C53535CEED63 /* VIMVideoPlayFile.m in Sources */, + D1CC6C140311BDF560402C7B261EC749 /* VIMVideoPlayRepresentation.m in Sources */, + 466C821E26B82F57C0936DE3A6F16554 /* VIMVideoPreference.m in Sources */, + CBD0A5C342505975B14B0722C0A40644 /* VIMVideoProgressiveFile.m in Sources */, + 2D8D15E021ED742C95A7893F7A3877DC /* VIMVideoUtils.m in Sources */, + 5C0565FFE84B204D8F6C99772868BDEB /* VIMVODConnection.m in Sources */, + 3B01A1344CDDAD474BAB3A4972534FF4 /* VIMVODItem.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 69EA8A3B2B045C39F3FEAE055C1971DE /* Sources */ = { + 54BD266D3930C2D9B3A93E01BA9485AA /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A90F6D31147BD8FCEC444B7D99EB4798 /* AccountStore.swift in Sources */, - 2D99923831FFCE9F73C0C7D1E9F850E2 /* AppConfiguration.swift in Sources */, - 409A333CEF46B3875FD07DFD2D9C351B /* AuthenticationController.swift in Sources */, - F42AFA87354F2430D2381ABF91869006 /* Constants.swift in Sources */, - B3389B8752DF8E9154754220D09D26C9 /* Dictionary+Extension.swift in Sources */, - 8C006C64C5E77BEBECE54877B7BA22F0 /* ErrorCode.swift in Sources */, - 8670EB68C4D288954C15F2F9C2C935EE /* ExceptionCatcher+Swift.swift in Sources */, - F28BC46F4F246E19C0A9B040C5834B32 /* KeychainStore.swift in Sources */, - 080339FE8D3D0888FDF6C05AFF7FC108 /* Mappable.swift in Sources */, - A08EFFFF7DFACA49EB5F271ACD172E91 /* NetworkingNotification.swift in Sources */, - 6DF3CEDD6910937636F93F666E1FEF2C /* NSError+Extensions.swift in Sources */, - 99B51DB5B80BBD7A2597A8E79C34290D /* NSURLSessionConfiguration+Extensions.swift in Sources */, - 643CE7142699088977B0ACB353A4FE6B /* Objc_ExceptionCatcher.m in Sources */, - 8EA375C3F30127C965344B1369E6CC16 /* PinCodeInfo.swift in Sources */, - CB84112F8B8F712719EA050973CCC8D1 /* PlayProgress.swift in Sources */, - 19A239662363D8BFC6BA9BF3D5067368 /* Request+Authentication.swift in Sources */, - DDC2160DEE810F9EB54D5F4A4085FD06 /* Request+Cache.swift in Sources */, - D7B8668CAC424FB726E911830640210E /* Request+Category.swift in Sources */, - 7093D03FB36F62140CD7CB962C129184 /* Request+Channel.swift in Sources */, - A4CD0619CCDE6268C1769EF1379D3C5F /* Request+Comment.swift in Sources */, - 5FF671C4F478DAC06FFC03103078E43C /* Request+Configs.swift in Sources */, - 3BA7D30869081B9F81B6AD4DB1F37EA2 /* Request+Notifications.swift in Sources */, - B259265059C9F541C99A43E37B2CEFA6 /* Request+Picture.swift in Sources */, - D8384F0B4B1075A71813D409FD144A3F /* Request+PolicyDocument.swift in Sources */, - 5B6A5C2A7EC9E33337DE6287258CE806 /* Request+ProgrammedContent.swift in Sources */, - 301E7201FA2B9D755BCB08E3159E9F50 /* Request+Soundtrack.swift in Sources */, - F9988F40EBF406C9B8DFBBED61ECFC9C /* Request+Toggle.swift in Sources */, - 187D2040010AAE21EB338F950BA62F30 /* Request+Trigger.swift in Sources */, - 3D0097FB9A164EF53868F633A5D83647 /* Request+User.swift in Sources */, - 6E4D1B3AADC1FD45199854A24E146F0C /* Request+Video.swift in Sources */, - DCD624F830FDEDF0AE7E3DB66BBFFEC2 /* Request.swift in Sources */, - 8CE568F7A75458FEE8E5920F28460A1A /* Response.swift in Sources */, - 95FFAABEF0F35C113EC0189D39FF80A0 /* ResponseCache.swift in Sources */, - 719B05BF832EB807BD9313C39D9C1923 /* Result.swift in Sources */, - D4812514244A32F4EF17A3403CEB49E0 /* Scope.swift in Sources */, - C99047215776E7CB95C77ADC520B7001 /* Spatial.swift in Sources */, - 5AFC1E2FD02BA2FADA6BA4E264CD032A /* String+Parameters.swift in Sources */, - CF276AE6C6EFAF02D2DD4373E92D0648 /* Subscription.swift in Sources */, - 9FE718C13D939CB402496CD9D1644692 /* SubscriptionCollection.swift in Sources */, - DA1A46D62BEA2431AC6FD66D58E28C27 /* VIMAccount.m in Sources */, - 6A4FBD31811C902A97F3B75EE81B0ADD /* VIMActivity.m in Sources */, - 82752C5EBCDE2118D9B50C7623D5BF3B /* VIMAppeal.m in Sources */, - 43E008C211B853777039F3785D922B98 /* VIMBadge.swift in Sources */, - 430264544D67783EE06E5CBD9F8A7538 /* VIMCategory.m in Sources */, - 8A689A9EF197DC68E6947A869A6EE657 /* VIMChannel.m in Sources */, - 39A7BA428B81014747047554360D5933 /* VIMComment.m in Sources */, - D2D5FEA35F9DC0817488AC6B206C9C5B /* VIMConnection.m in Sources */, - 02605A6A0E2F37A37F765B54D8435EFE /* VIMCredit.m in Sources */, - 9AA200004AD2C86C440D0365294E8C25 /* VimeoClient.swift in Sources */, - 5BA9E478846DD5BD2F10533663C65DB0 /* VimeoNetworking-dummy.m in Sources */, - 1439E0621A820C1E240A135EDB917A78 /* VimeoReachability.swift in Sources */, - 5D3BDA09F740ECC2062E1876B3E9397C /* VimeoRequestSerializer.swift in Sources */, - F80A5BF96718E74CF0164FF1CF6CACE6 /* VimeoResponseSerializer.swift in Sources */, - 247BEC62A7A059F149C2F1DEE37EC117 /* VimeoSessionManager+Constructors.swift in Sources */, - 7417910A809FB46D7CBE239E1E41F40E /* VimeoSessionManager.swift in Sources */, - 39C4E7D235F2488DC19D3F16FFF5EF30 /* VIMGroup.m in Sources */, - 325DB73E71BF50607177ED27D34C4DEA /* VIMInteraction.m in Sources */, - D59D192A899629E78E80F8EA3AD0122B /* VIMModelObject.m in Sources */, - CE5AC9A4F95093069A44087A1689ACCB /* VIMNotification.m in Sources */, - CD632493290A2E4430F2F12E548B03B2 /* VIMNotificationsConnection.m in Sources */, - D27E342A895F8F0BF51D6B926ECA83FF /* VIMObjectMapper+Generic.swift in Sources */, - F6258BE02142A4CCAEBB00A2C4CEE82B /* VIMObjectMapper.m in Sources */, - 57782C2C26EC21E455E8B710E011BBAE /* VIMPicture.m in Sources */, - 8588C695824D58E2A9EAAE4D4A0E1BB9 /* VIMPictureCollection.m in Sources */, - 331895E3C644AC16BE2DFF952ACA9A1B /* VIMPolicyDocument.m in Sources */, - 86BE885A7FB6FC6F0B4E1C905DA7B64C /* VIMPreference.m in Sources */, - A73687DB3AA0983108BAEBF72C2340ED /* VIMPrivacy.m in Sources */, - F76D02044108AE9B76A2EBC583A3F403 /* VIMProgrammedContent.swift in Sources */, - F82C4C45E9CC756A62AA0F72D001B83D /* VIMQuantityQuota.m in Sources */, - F5B609F28B2E1EBF8AA9348E28333378 /* VIMRecommendation.m in Sources */, - 4F4DAAC9FD07C2F53A8FCAB14DDC976D /* VIMSeason.m in Sources */, - D90CAB5734D50648EE042D7F6EF739C7 /* VIMSizeQuota.m in Sources */, - 3DD477AEFC34A1B8BE6C21CB3737112D /* VIMSoundtrack.m in Sources */, - 93096AB36C54BB032194725968A44EA3 /* VIMTag.m in Sources */, - 1C415F8572AB31B576839CD7D07F5ACA /* VIMThumbnailUploadTicket.m in Sources */, - AC2F13906A8DF6AB50AB826835026D89 /* VIMTrigger.m in Sources */, - 20B1A3A44C5B99E3C0E0111980E2D166 /* VIMUploadQuota.m in Sources */, - 8E1AF09B6DC4CAE39BD8296809C3EB0E /* VIMUploadTicket.m in Sources */, - 2E50A1D999933C0305B3BD6C8E3DB6A8 /* VIMUser.m in Sources */, - 91DFEC02233D3AB83A35E5756A18A36C /* VIMUserBadge.m in Sources */, - 2158EA68FF692EC0E79E21A1868DDADC /* VIMVideo+VOD.m in Sources */, - E9083640FA1E37FD7F1CD8C3D3113F71 /* VIMVideo.m in Sources */, - 39B6EA71EDF5F8DDFEE1E4F5BEA0159B /* VIMVideoDASHFile.m in Sources */, - C1539E868EAA683B1B80A0F530ACCDF1 /* VIMVideoDRMFiles.m in Sources */, - 0FF332A4A3B2E0FC72A18026068678FA /* VIMVideoFairPlayFile.m in Sources */, - BF2E64C3355CB069145EAF61D1223910 /* VIMVideoFile.m in Sources */, - 8BFB2E98B986C0843E8FB1D4C63DC4B1 /* VIMVideoHLSFile.m in Sources */, - A8F1B4C9D1D600563C86DF374BB1FF59 /* VIMVideoPlayFile.m in Sources */, - 778D21F2C8E74994835AF74CF639561E /* VIMVideoPlayRepresentation.m in Sources */, - B9331886EB47FEE9CC9739C45CEE35CB /* VIMVideoPreference.m in Sources */, - 1CBE32C0E7A5B487D85887CECE9070E0 /* VIMVideoProgressiveFile.m in Sources */, - 29F875173B766FA11C5852EA61C674DC /* VIMVideoUtils.m in Sources */, - F51ECD19F851C26CEB4925B83D85ABDA /* VIMVODConnection.m in Sources */, - 7DEBA2ACA54253C65CA292BCF51B476B /* VIMVODItem.m in Sources */, + B921B743C1F273406F64ABEDB7AF9400 /* Pods-VimeoUpload-iOS-OldUploadTests-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1436,27 +1488,27 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 6A9AF494AD585120C0686C00825742C0 /* Sources */ = { + 8896B3EA11AC27D3B4CE241AA6BE1F33 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 41056CE5FE3FF5AEB88B9F37047F717A /* Pods-VimeoUpload-iOS-OldUploadTests-dummy.m in Sources */, + 687E4C8F5F2ECDB2B595746B57C61B94 /* Pods-VimeoUpload-iOS-OldUpload-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8896B3EA11AC27D3B4CE241AA6BE1F33 /* Sources */ = { + 9BFD3C96C2F65BD321A79B59A5552580 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 687E4C8F5F2ECDB2B595746B57C61B94 /* Pods-VimeoUpload-iOS-OldUpload-dummy.m in Sources */, + 3AF116B17421EFBBFF9847259CFFC2B3 /* Pods-VimeoUpload-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9BFD3C96C2F65BD321A79B59A5552580 /* Sources */ = { + CAEE5E688CF436D65471D644D1739023 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 3AF116B17421EFBBFF9847259CFFC2B3 /* Pods-VimeoUpload-dummy.m in Sources */, + 30D3D5470DED1FF2B24DFE656D46F088 /* Pods-VimeoUpload-iOSTests-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1483,6 +1535,12 @@ target = 119F92C3FCFD322E8CA53B254AE9B6EA /* VimeoNetworking */; targetProxy = 6B756E77C033DC75BFC0583EB2CA55F9 /* PBXContainerItemProxy */; }; + 2C203BDA52334322791C6A61DB7ADDBC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Pods-VimeoUpload-iOS"; + target = 9ABE00A810B6AFE214900E3484571A39 /* Pods-VimeoUpload-iOS */; + targetProxy = F4716F7EEF30FEC980B19631440BDCEC /* PBXContainerItemProxy */; + }; 3ED8136B1E3DCCB23819DA2C399B53E2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = VimeoNetworking; @@ -1495,6 +1553,12 @@ target = CF671F7E57B92905F1CC91D036D6B4A7 /* AFNetworking */; targetProxy = 660A7C617140ECDFDE55BE458267EB47 /* PBXContainerItemProxy */; }; + 870019A37CF2B05DB96AD2B9FB7E8112 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Pods-VimeoUpload-iOS-OldUpload"; + target = 007473F5B3F53CD3EEA4CABB3BD4C070 /* Pods-VimeoUpload-iOS-OldUpload */; + targetProxy = C1B07E8A6BB52E5A23F0C9ABD7F591F1 /* PBXContainerItemProxy */; + }; C7DBCFC7883074C8AA163F2499A5F5DD /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = VimeoNetworking; @@ -1516,107 +1580,159 @@ /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 00F87340FE541E1103068D879CA2CF38 /* Release */ = { + 0723B219761616DD95B40679EA370CA6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E66FD2DF824A81DF2975B49945EAEA30 /* VimeoNetworking.xcconfig */; + baseConfigurationReference = E5F940FACE162064BA249F79D785233E /* Pods-VimeoUpload-iOSTests.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/VimeoNetworking/VimeoNetworking-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/VimeoNetworking/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload-iOSTests/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/VimeoNetworking/VimeoNetworking.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = VimeoNetworking; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 0353BEE271297126048240FF40109383 /* Debug */ = { + 1EE19F5DD95931924296F637BF18BD8F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C4CF223F05BF42A197EEB5B5F427FB15 /* Pods-VimeoUpload.debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + 3BF016649078803BD1067092459084D3 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6D9E2B78FA477FD2DC06D244EFF1172F /* AFNetworking.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFNetworking/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload/Pods-VimeoUpload.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_VimeoUpload; + MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; + PRODUCT_MODULE_NAME = AFNetworking; + PRODUCT_NAME = AFNetworking; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 20D32A089D17DDAD18CBFD6FBF2E9615 /* Debug */ = { + 498F7CBBD1A3DCF3E59DA8A3AFA9B8F8 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2A556F76898649B5A28BDB5446ED8308 /* Pods-VimeoUpload-iOS-OldUploadTests.debug.xcconfig */; + baseConfigurationReference = DDC16D853DAC48485B03A7FEB7485BAC /* Pods-VimeoUpload-iOS-OldUploadTests.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_VimeoUpload_iOS_OldUploadTests; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1625,332 +1741,273 @@ }; name = Debug; }; - 2175E73CD648994904DA0EE62BAFD809 /* Release */ = { + 4B84AB678E6C15463777AEB23C489E6B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F4ED96BBE5EA3EC1EC3534905722909E /* Pods-VimeoUpload-iOSTests.release.xcconfig */; + baseConfigurationReference = 133CD2F3E29DDF713318E84B2153F4C3 /* Pods-VimeoUpload-iOS.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload-iOSTests/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; + MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_VimeoUpload_iOSTests; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 2B510856FA4E9572B537CBE0802D1591 /* Release */ = { + 63A5E597442918360C38B5F50B567060 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CBED8FAC62EC97352938CA51099A55E9 /* Pods-VimeoUpload-iOS.release.xcconfig */; + baseConfigurationReference = B9E707DCE76297154377405C59ABC4F0 /* Pods-VimeoUpload.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload-iOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; + MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload/Pods-VimeoUpload.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_VimeoUpload_iOS; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 2DD310F88AC219696E5427287889ABE7 /* Release */ = { + 67386F0566A8CF1A982501F9DA8B3411 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 89AB0F31192190BE89B818137CC8A970 /* AFNetworking.xcconfig */; + baseConfigurationReference = EEFA41EE996C8611C4A19F86061608E7 /* Pods-VimeoUpload-iOS-OldUpload.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AFNetworking/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = AFNetworking; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; - }; - 34FE9531DA9AF2820790339988D5FF41 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - VALIDATE_PRODUCT = YES; - }; - name = Release; + name = Debug; }; - 505D755E61F57BAAE9431B5466556E3B /* Debug */ = { + 8D410930EE24DE65DC781EC22F3349A0 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2EC7C61DABF8951A8EA0284CE90D8C35 /* Pods-VimeoUpload-iOS-OldUpload.debug.xcconfig */; + baseConfigurationReference = AA0EE93C62DBFD353E86F429715D0E8A /* Pods-VimeoUpload.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; + MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload/Pods-VimeoUpload.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_VimeoUpload_iOS_OldUpload; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 8B3142E38294C0E28FF0047FA73C2EE5 /* Release */ = { + 91A9903111659D9D0EFD74E596EAFA25 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 533C56098EE9CDC9C94F3635F25A9F98 /* Pods-VimeoUpload-iOS-OldUpload.release.xcconfig */; + baseConfigurationReference = 3A30721CD46AC03D34457EE5B65B89B5 /* Pods-VimeoUpload-iOSTests.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload-iOSTests/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; + MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_VimeoUpload_iOS_OldUpload; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 9E3B0F5EFF14D554D71BB8100B4A6C5C /* Debug */ = { + 99C0C8FA786AADA05408FBE428F31AF2 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 89AB0F31192190BE89B818137CC8A970 /* AFNetworking.xcconfig */; + baseConfigurationReference = 529DFAF91FFD13244AB22C540723EF06 /* Pods-VimeoUpload-iOS-OldUploadTests.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AFNetworking/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = AFNetworking; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - A752ACEB3813BB9BE2907109FC21334C /* Release */ = { + B99F908BFC2327190809D37087345A9B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 590A00F4B0511AE74E5A1DE651C5634A /* Pods-VimeoUpload.release.xcconfig */; + baseConfigurationReference = 0C55E963668441AF0A84D56BE0763691 /* Pods-VimeoUpload-iOS-OldUpload.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload/Pods-VimeoUpload.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; + MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_VimeoUpload; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - B017DF19B619918B580DB5352814A431 /* Debug */ = { + BB6AF2E09454440A6B94D5DA5DEC397C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E66FD2DF824A81DF2975B49945EAEA30 /* VimeoNetworking.xcconfig */; + baseConfigurationReference = A136B115C9B8C37D0A5C9201FAB171BF /* VimeoNetworking.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; GCC_PREFIX_HEADER = "Target Support Files/VimeoNetworking/VimeoNetworking-prefix.pch"; INFOPLIST_FILE = "Target Support Files/VimeoNetworking/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = "Target Support Files/VimeoNetworking/VimeoNetworking.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_MODULE_NAME = VimeoNetworking; PRODUCT_NAME = VimeoNetworking; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1959,38 +2016,30 @@ }; name = Debug; }; - B2255DAE8F42483DEA722A3035D3E833 /* Debug */ = { + C07345BD0EF916BF089FE1EF8DD6901D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6A7DD13AE760F49BD336D2C01BAA7890 /* Pods-VimeoUpload-iOS.debug.xcconfig */; + baseConfigurationReference = 6D9E2B78FA477FD2DC06D244EFF1172F /* AFNetworking.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFNetworking/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_VimeoUpload_iOS; + MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; + PRODUCT_MODULE_NAME = AFNetworking; + PRODUCT_NAME = AFNetworking; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -1998,197 +2047,203 @@ }; name = Debug; }; - B5B05939143791DFBEA62213256EB290 /* Debug */ = { + C8375DF10ACCB6F910C290F2C7F0481C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 80E26D00B3A1139F9D88C0E57B6F0DA3 /* Pods-VimeoUpload-iOSTests.debug.xcconfig */; + baseConfigurationReference = A136B115C9B8C37D0A5C9201FAB171BF /* VimeoNetworking.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload-iOSTests/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/VimeoNetworking/VimeoNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/VimeoNetworking/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_VimeoUpload_iOSTests; + MODULEMAP_FILE = "Target Support Files/VimeoNetworking/VimeoNetworking.modulemap"; + PRODUCT_MODULE_NAME = VimeoNetworking; + PRODUCT_NAME = VimeoNetworking; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - B7BD003B8DAA163290363B593AB8A4B9 /* Release */ = { + D8841E4F7B05260238C7A45CBEE96CF7 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EF2AA60D6B2F3B5482588A54A11AEE2C /* Pods-VimeoUpload-iOS-OldUploadTests.release.xcconfig */; + baseConfigurationReference = BB9CD7C1F4049E75077274C6DCC81113 /* Pods-VimeoUpload-iOS.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-VimeoUpload-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; + MODULEMAP_FILE = "Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_VimeoUpload_iOS_OldUploadTests; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - C104F7F091290C3D1E248192F07FE689 /* Debug */ = { + F4568DEE257655D290C2B9CEAB37C934 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; COPY_PHASE_STRIP = NO; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", + "POD_CONFIGURATION_RELEASE=1", "$(inherited)", ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - ONLY_ACTIVE_ARCH = YES; - PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; SYMROOT = "${SRCROOT}/../build"; }; - name = Debug; + name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 0D4109D91B43D42CD4DEC15877BB90A8 /* Build configuration list for PBXNativeTarget "Pods-VimeoUpload-iOSTests" */ = { + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - B5B05939143791DFBEA62213256EB290 /* Debug */, - 2175E73CD648994904DA0EE62BAFD809 /* Release */, + 1EE19F5DD95931924296F637BF18BD8F /* Debug */, + F4568DEE257655D290C2B9CEAB37C934 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2545BFAECF1D540C5259B454339817B4 /* Build configuration list for PBXNativeTarget "Pods-VimeoUpload-iOS-OldUploadTests" */ = { + 31E01BC98C827BD8A78F94173CDCC418 /* Build configuration list for PBXNativeTarget "AFNetworking" */ = { isa = XCConfigurationList; buildConfigurations = ( - 20D32A089D17DDAD18CBFD6FBF2E9615 /* Debug */, - B7BD003B8DAA163290363B593AB8A4B9 /* Release */, + C07345BD0EF916BF089FE1EF8DD6901D /* Debug */, + 3BF016649078803BD1067092459084D3 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + 353A98449FF9A34A53AEF70073FE6EBE /* Build configuration list for PBXNativeTarget "Pods-VimeoUpload-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - C104F7F091290C3D1E248192F07FE689 /* Debug */, - 34FE9531DA9AF2820790339988D5FF41 /* Release */, + 4B84AB678E6C15463777AEB23C489E6B /* Debug */, + D8841E4F7B05260238C7A45CBEE96CF7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 31E01BC98C827BD8A78F94173CDCC418 /* Build configuration list for PBXNativeTarget "AFNetworking" */ = { + 505A71250E38937722DF0019156081B4 /* Build configuration list for PBXNativeTarget "Pods-VimeoUpload" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9E3B0F5EFF14D554D71BB8100B4A6C5C /* Debug */, - 2DD310F88AC219696E5427287889ABE7 /* Release */, + 8D410930EE24DE65DC781EC22F3349A0 /* Debug */, + 63A5E597442918360C38B5F50B567060 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 353A98449FF9A34A53AEF70073FE6EBE /* Build configuration list for PBXNativeTarget "Pods-VimeoUpload-iOS" */ = { + 5F8268041F345F4C58E5A93AB671738D /* Build configuration list for PBXNativeTarget "Pods-VimeoUpload-iOS-OldUploadTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - B2255DAE8F42483DEA722A3035D3E833 /* Debug */, - 2B510856FA4E9572B537CBE0802D1591 /* Release */, + 498F7CBBD1A3DCF3E59DA8A3AFA9B8F8 /* Debug */, + 99C0C8FA786AADA05408FBE428F31AF2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 505A71250E38937722DF0019156081B4 /* Build configuration list for PBXNativeTarget "Pods-VimeoUpload" */ = { + AD05C11A3D8E19B37EB76DD0591807ED /* Build configuration list for PBXNativeTarget "Pods-VimeoUpload-iOS-OldUpload" */ = { isa = XCConfigurationList; buildConfigurations = ( - 0353BEE271297126048240FF40109383 /* Debug */, - A752ACEB3813BB9BE2907109FC21334C /* Release */, + 67386F0566A8CF1A982501F9DA8B3411 /* Debug */, + B99F908BFC2327190809D37087345A9B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - AD05C11A3D8E19B37EB76DD0591807ED /* Build configuration list for PBXNativeTarget "Pods-VimeoUpload-iOS-OldUpload" */ = { + BE2F436AE57C8FBA5EE060E460C52145 /* Build configuration list for PBXNativeTarget "VimeoNetworking" */ = { isa = XCConfigurationList; buildConfigurations = ( - 505D755E61F57BAAE9431B5466556E3B /* Debug */, - 8B3142E38294C0E28FF0047FA73C2EE5 /* Release */, + BB6AF2E09454440A6B94D5DA5DEC397C /* Debug */, + C8375DF10ACCB6F910C290F2C7F0481C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - BE2F436AE57C8FBA5EE060E460C52145 /* Build configuration list for PBXNativeTarget "VimeoNetworking" */ = { + D74A5491AE8D35BC889BF72FE84777ED /* Build configuration list for PBXNativeTarget "Pods-VimeoUpload-iOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - B017DF19B619918B580DB5352814A431 /* Debug */, - 00F87340FE541E1103068D879CA2CF38 /* Release */, + 0723B219761616DD95B40679EA370CA6 /* Debug */, + 91A9903111659D9D0EFD74E596EAFA25 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig b/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig index 03d5266e..5a114d83 100644 --- a/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig +++ b/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig @@ -1,9 +1,8 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/AFNetworking +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" OTHER_LDFLAGS = -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/AFNetworking PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} diff --git a/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload-frameworks.sh b/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload-frameworks.sh index afd10b33..88c7fb73 100755 --- a/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload-frameworks.sh +++ b/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload-frameworks.sh @@ -1,11 +1,28 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -23,9 +40,9 @@ install_framework() source="$(readlink "${source}")" fi - # use filter instead of exclude so missing patterns dont' throw errors - echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" local basename basename="$(basename -s .framework "$1")" @@ -54,12 +71,40 @@ install_framework() fi } +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + if [ -r "$source" ]; then + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi + fi +} + # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" @@ -72,11 +117,19 @@ code_sign_if_enabled() { # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi stripped="" - for arch in $archs; do - if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 stripped="$stripped $arch" @@ -85,16 +138,17 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=1 } if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" - install_framework "$BUILT_PRODUCTS_DIR/VimeoNetworking/VimeoNetworking.framework" + install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework" + install_framework "${BUILT_PRODUCTS_DIR}/VimeoNetworking/VimeoNetworking.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" - install_framework "$BUILT_PRODUCTS_DIR/VimeoNetworking/VimeoNetworking.framework" + install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework" + install_framework "${BUILT_PRODUCTS_DIR}/VimeoNetworking/VimeoNetworking.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then wait diff --git a/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload-resources.sh b/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload-resources.sh index 4602c68a..345301f2 100755 --- a/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload-resources.sh +++ b/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -8,7 +16,11 @@ RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt XCASSET_FILES=() -case "${TARGETED_DEVICE_FAMILY}" in +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -21,6 +33,9 @@ case "${TARGETED_DEVICE_FAMILY}" in 3) TARGET_DEVICE_ARGS="--target-device tv" ;; + 4) + TARGET_DEVICE_ARGS="--target-device watch" + ;; *) TARGET_DEVICE_ARGS="--target-device mac" ;; @@ -41,29 +56,29 @@ EOM fi case $RESOURCE_PATH in *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ;; *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ;; *.framework) - echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" ;; *.xcdatamodel) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" ;; *.xcdatamodeld) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" ;; *.xcmappingmodel) - echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" ;; *.xcassets) @@ -71,7 +86,7 @@ EOM XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") ;; *) - echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" || true echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" ;; esac @@ -85,7 +100,7 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) @@ -95,5 +110,9 @@ then fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" + fi fi diff --git a/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload.debug.xcconfig b/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload.debug.xcconfig index 011252ee..8581223e 100644 --- a/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload.debug.xcconfig +++ b/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload.debug.xcconfig @@ -1,10 +1,11 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking/VimeoNetworking.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking/VimeoNetworking.framework/Headers" OTHER_LDFLAGS = $(inherited) -framework "AFNetworking" -framework "VimeoNetworking" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/../.. PODS_ROOT = ${SRCROOT}/../../Pods diff --git a/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload.release.xcconfig b/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload.release.xcconfig index 011252ee..8581223e 100644 --- a/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload.release.xcconfig +++ b/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUpload/Pods-VimeoUpload-iOS-OldUpload.release.xcconfig @@ -1,10 +1,11 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking/VimeoNetworking.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking/VimeoNetworking.framework/Headers" OTHER_LDFLAGS = $(inherited) -framework "AFNetworking" -framework "VimeoNetworking" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/../.. PODS_ROOT = ${SRCROOT}/../../Pods diff --git a/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests-frameworks.sh b/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests-frameworks.sh index 0f29f13c..08e3eaac 100755 --- a/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests-frameworks.sh +++ b/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests-frameworks.sh @@ -1,11 +1,28 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -23,9 +40,9 @@ install_framework() source="$(readlink "${source}")" fi - # use filter instead of exclude so missing patterns dont' throw errors - echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" local basename basename="$(basename -s .framework "$1")" @@ -54,12 +71,40 @@ install_framework() fi } +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + if [ -r "$source" ]; then + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi + fi +} + # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" @@ -72,11 +117,19 @@ code_sign_if_enabled() { # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi stripped="" - for arch in $archs; do - if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 stripped="$stripped $arch" @@ -85,6 +138,7 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=1 } if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then diff --git a/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests-resources.sh b/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests-resources.sh index 4602c68a..345301f2 100755 --- a/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests-resources.sh +++ b/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -8,7 +16,11 @@ RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt XCASSET_FILES=() -case "${TARGETED_DEVICE_FAMILY}" in +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -21,6 +33,9 @@ case "${TARGETED_DEVICE_FAMILY}" in 3) TARGET_DEVICE_ARGS="--target-device tv" ;; + 4) + TARGET_DEVICE_ARGS="--target-device watch" + ;; *) TARGET_DEVICE_ARGS="--target-device mac" ;; @@ -41,29 +56,29 @@ EOM fi case $RESOURCE_PATH in *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ;; *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ;; *.framework) - echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" ;; *.xcdatamodel) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" ;; *.xcdatamodeld) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" ;; *.xcmappingmodel) - echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" ;; *.xcassets) @@ -71,7 +86,7 @@ EOM XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") ;; *) - echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" || true echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" ;; esac @@ -85,7 +100,7 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) @@ -95,5 +110,9 @@ then fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" + fi fi diff --git a/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests.debug.xcconfig b/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests.debug.xcconfig index 364177a7..ab9b68c9 100644 --- a/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests.debug.xcconfig +++ b/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests.debug.xcconfig @@ -1,7 +1,8 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking/VimeoNetworking.framework/Headers" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking/VimeoNetworking.framework/Headers" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/../.. PODS_ROOT = ${SRCROOT}/../../Pods diff --git a/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests.release.xcconfig b/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests.release.xcconfig index 364177a7..ab9b68c9 100644 --- a/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests.release.xcconfig +++ b/Pods/Target Support Files/Pods-VimeoUpload-iOS-OldUploadTests/Pods-VimeoUpload-iOS-OldUploadTests.release.xcconfig @@ -1,7 +1,8 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking/VimeoNetworking.framework/Headers" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking/VimeoNetworking.framework/Headers" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/../.. PODS_ROOT = ${SRCROOT}/../../Pods diff --git a/Pods/Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS-frameworks.sh b/Pods/Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS-frameworks.sh index afd10b33..88c7fb73 100755 --- a/Pods/Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS-frameworks.sh +++ b/Pods/Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS-frameworks.sh @@ -1,11 +1,28 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -23,9 +40,9 @@ install_framework() source="$(readlink "${source}")" fi - # use filter instead of exclude so missing patterns dont' throw errors - echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" local basename basename="$(basename -s .framework "$1")" @@ -54,12 +71,40 @@ install_framework() fi } +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + if [ -r "$source" ]; then + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi + fi +} + # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" @@ -72,11 +117,19 @@ code_sign_if_enabled() { # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi stripped="" - for arch in $archs; do - if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 stripped="$stripped $arch" @@ -85,16 +138,17 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=1 } if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" - install_framework "$BUILT_PRODUCTS_DIR/VimeoNetworking/VimeoNetworking.framework" + install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework" + install_framework "${BUILT_PRODUCTS_DIR}/VimeoNetworking/VimeoNetworking.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "$BUILT_PRODUCTS_DIR/AFNetworking/AFNetworking.framework" - install_framework "$BUILT_PRODUCTS_DIR/VimeoNetworking/VimeoNetworking.framework" + install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework" + install_framework "${BUILT_PRODUCTS_DIR}/VimeoNetworking/VimeoNetworking.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then wait diff --git a/Pods/Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS-resources.sh b/Pods/Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS-resources.sh index 4602c68a..345301f2 100755 --- a/Pods/Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS-resources.sh +++ b/Pods/Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -8,7 +16,11 @@ RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt XCASSET_FILES=() -case "${TARGETED_DEVICE_FAMILY}" in +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -21,6 +33,9 @@ case "${TARGETED_DEVICE_FAMILY}" in 3) TARGET_DEVICE_ARGS="--target-device tv" ;; + 4) + TARGET_DEVICE_ARGS="--target-device watch" + ;; *) TARGET_DEVICE_ARGS="--target-device mac" ;; @@ -41,29 +56,29 @@ EOM fi case $RESOURCE_PATH in *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ;; *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ;; *.framework) - echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" ;; *.xcdatamodel) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" ;; *.xcdatamodeld) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" ;; *.xcmappingmodel) - echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" ;; *.xcassets) @@ -71,7 +86,7 @@ EOM XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") ;; *) - echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" || true echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" ;; esac @@ -85,7 +100,7 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) @@ -95,5 +110,9 @@ then fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" + fi fi diff --git a/Pods/Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS.debug.xcconfig b/Pods/Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS.debug.xcconfig index 011252ee..8581223e 100644 --- a/Pods/Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS.debug.xcconfig +++ b/Pods/Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS.debug.xcconfig @@ -1,10 +1,11 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking/VimeoNetworking.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking/VimeoNetworking.framework/Headers" OTHER_LDFLAGS = $(inherited) -framework "AFNetworking" -framework "VimeoNetworking" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/../.. PODS_ROOT = ${SRCROOT}/../../Pods diff --git a/Pods/Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS.release.xcconfig b/Pods/Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS.release.xcconfig index 011252ee..8581223e 100644 --- a/Pods/Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS.release.xcconfig +++ b/Pods/Target Support Files/Pods-VimeoUpload-iOS/Pods-VimeoUpload-iOS.release.xcconfig @@ -1,10 +1,11 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking/VimeoNetworking.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking/VimeoNetworking.framework/Headers" OTHER_LDFLAGS = $(inherited) -framework "AFNetworking" -framework "VimeoNetworking" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/../.. PODS_ROOT = ${SRCROOT}/../../Pods diff --git a/Pods/Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests-frameworks.sh b/Pods/Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests-frameworks.sh index 0f29f13c..08e3eaac 100755 --- a/Pods/Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests-frameworks.sh +++ b/Pods/Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests-frameworks.sh @@ -1,11 +1,28 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -23,9 +40,9 @@ install_framework() source="$(readlink "${source}")" fi - # use filter instead of exclude so missing patterns dont' throw errors - echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" local basename basename="$(basename -s .framework "$1")" @@ -54,12 +71,40 @@ install_framework() fi } +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + if [ -r "$source" ]; then + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi + fi +} + # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" @@ -72,11 +117,19 @@ code_sign_if_enabled() { # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi stripped="" - for arch in $archs; do - if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 stripped="$stripped $arch" @@ -85,6 +138,7 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=1 } if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then diff --git a/Pods/Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests-resources.sh b/Pods/Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests-resources.sh index 4602c68a..345301f2 100755 --- a/Pods/Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests-resources.sh +++ b/Pods/Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -8,7 +16,11 @@ RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt XCASSET_FILES=() -case "${TARGETED_DEVICE_FAMILY}" in +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -21,6 +33,9 @@ case "${TARGETED_DEVICE_FAMILY}" in 3) TARGET_DEVICE_ARGS="--target-device tv" ;; + 4) + TARGET_DEVICE_ARGS="--target-device watch" + ;; *) TARGET_DEVICE_ARGS="--target-device mac" ;; @@ -41,29 +56,29 @@ EOM fi case $RESOURCE_PATH in *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ;; *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ;; *.framework) - echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" ;; *.xcdatamodel) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" ;; *.xcdatamodeld) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" ;; *.xcmappingmodel) - echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" ;; *.xcassets) @@ -71,7 +86,7 @@ EOM XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") ;; *) - echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" || true echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" ;; esac @@ -85,7 +100,7 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) @@ -95,5 +110,9 @@ then fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" + fi fi diff --git a/Pods/Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests.debug.xcconfig b/Pods/Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests.debug.xcconfig index 364177a7..ab9b68c9 100644 --- a/Pods/Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests.debug.xcconfig +++ b/Pods/Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests.debug.xcconfig @@ -1,7 +1,8 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking/VimeoNetworking.framework/Headers" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking/VimeoNetworking.framework/Headers" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/../.. PODS_ROOT = ${SRCROOT}/../../Pods diff --git a/Pods/Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests.release.xcconfig b/Pods/Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests.release.xcconfig index 364177a7..ab9b68c9 100644 --- a/Pods/Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests.release.xcconfig +++ b/Pods/Target Support Files/Pods-VimeoUpload-iOSTests/Pods-VimeoUpload-iOSTests.release.xcconfig @@ -1,7 +1,8 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking/VimeoNetworking.framework/Headers" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking/VimeoNetworking.framework/Headers" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/../.. PODS_ROOT = ${SRCROOT}/../../Pods diff --git a/Pods/Target Support Files/Pods-VimeoUpload/Pods-VimeoUpload-resources.sh b/Pods/Target Support Files/Pods-VimeoUpload/Pods-VimeoUpload-resources.sh index 4602c68a..345301f2 100755 --- a/Pods/Target Support Files/Pods-VimeoUpload/Pods-VimeoUpload-resources.sh +++ b/Pods/Target Support Files/Pods-VimeoUpload/Pods-VimeoUpload-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -8,7 +16,11 @@ RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt XCASSET_FILES=() -case "${TARGETED_DEVICE_FAMILY}" in +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -21,6 +33,9 @@ case "${TARGETED_DEVICE_FAMILY}" in 3) TARGET_DEVICE_ARGS="--target-device tv" ;; + 4) + TARGET_DEVICE_ARGS="--target-device watch" + ;; *) TARGET_DEVICE_ARGS="--target-device mac" ;; @@ -41,29 +56,29 @@ EOM fi case $RESOURCE_PATH in *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ;; *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ;; *.framework) - echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" ;; *.xcdatamodel) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" ;; *.xcdatamodeld) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" ;; *.xcmappingmodel) - echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" ;; *.xcassets) @@ -71,7 +86,7 @@ EOM XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") ;; *) - echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" || true echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" ;; esac @@ -85,7 +100,7 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) @@ -95,5 +110,9 @@ then fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" + fi fi diff --git a/Pods/Target Support Files/Pods-VimeoUpload/Pods-VimeoUpload.debug.xcconfig b/Pods/Target Support Files/Pods-VimeoUpload/Pods-VimeoUpload.debug.xcconfig index 467f54d7..51a06c7f 100644 --- a/Pods/Target Support Files/Pods-VimeoUpload/Pods-VimeoUpload.debug.xcconfig +++ b/Pods/Target Support Files/Pods-VimeoUpload/Pods-VimeoUpload.debug.xcconfig @@ -1,9 +1,10 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking/VimeoNetworking.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking/VimeoNetworking.framework/Headers" OTHER_LDFLAGS = $(inherited) -framework "AFNetworking" -framework "VimeoNetworking" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/../.. PODS_ROOT = ${SRCROOT}/../../Pods diff --git a/Pods/Target Support Files/Pods-VimeoUpload/Pods-VimeoUpload.release.xcconfig b/Pods/Target Support Files/Pods-VimeoUpload/Pods-VimeoUpload.release.xcconfig index 467f54d7..51a06c7f 100644 --- a/Pods/Target Support Files/Pods-VimeoUpload/Pods-VimeoUpload.release.xcconfig +++ b/Pods/Target Support Files/Pods-VimeoUpload/Pods-VimeoUpload.release.xcconfig @@ -1,9 +1,10 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking/AFNetworking.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking/VimeoNetworking.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking/VimeoNetworking.framework/Headers" OTHER_LDFLAGS = $(inherited) -framework "AFNetworking" -framework "VimeoNetworking" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/../.. PODS_ROOT = ${SRCROOT}/../../Pods diff --git a/Pods/Target Support Files/VimeoNetworking/Info.plist b/Pods/Target Support Files/VimeoNetworking/Info.plist index cba25855..3ac477e6 100644 --- a/Pods/Target Support Files/VimeoNetworking/Info.plist +++ b/Pods/Target Support Files/VimeoNetworking/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.0.1 + 3.3.0 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/VimeoNetworking/VimeoNetworking-umbrella.h b/Pods/Target Support Files/VimeoNetworking/VimeoNetworking-umbrella.h index e091d155..5c78fbda 100644 --- a/Pods/Target Support Files/VimeoNetworking/VimeoNetworking-umbrella.h +++ b/Pods/Target Support Files/VimeoNetworking/VimeoNetworking-umbrella.h @@ -33,12 +33,10 @@ #import "VIMQuantityQuota.h" #import "VIMRecommendation.h" #import "VIMSeason.h" -#import "VIMSizeQuota.h" #import "VIMSoundtrack.h" #import "VIMTag.h" #import "VIMThumbnailUploadTicket.h" #import "VIMTrigger.h" -#import "VIMUploadQuota.h" #import "VIMUploadTicket.h" #import "VIMUser.h" #import "VIMUserBadge.h" diff --git a/Pods/Target Support Files/VimeoNetworking/VimeoNetworking.xcconfig b/Pods/Target Support Files/VimeoNetworking/VimeoNetworking.xcconfig index 4d397969..203a738f 100644 --- a/Pods/Target Support Files/VimeoNetworking/VimeoNetworking.xcconfig +++ b/Pods/Target Support Files/VimeoNetworking/VimeoNetworking.xcconfig @@ -1,10 +1,9 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/VimeoNetworking -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/VimeoNetworking +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/VimeoNetworking PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} diff --git a/Pods/VimeoNetworking/README.md b/Pods/VimeoNetworking/README.md index fe8b0162..dc46d332 100644 --- a/Pods/VimeoNetworking/README.md +++ b/Pods/VimeoNetworking/README.md @@ -1,6 +1,6 @@ # VimeoNetworking [![](https://circleci.com/gh/vimeo/VimeoNetworking.png?style=shield&circle-token=0443de366b231f05e3b1b1b3bf64a434b9ec1cfe)](https://circleci.com/gh/vimeo/VimeoNetworking) -**VimeoNetworking** is the authoritative Swift networking library for the Vimeo API. Fully designed and implemented with Swift in mind, **VimeoNetworking** is type-safe, well `enum`erated, and never, ever, *ever* force-unwrapped. +**VimeoNetworking** is the authoritative Swift networking library for the Vimeo API. Fully designed and implemented with Swift in mind, **VimeoNetworking** is type-safe, well `enum`erated, and never, ever, *ever* force-unwrapped. ##### Hey Creator, if you're primarily interested in uploading videos to Vimeo, you should also check out [VimeoUpload](https://github.com/vimeo/VimeoUpload). @@ -9,18 +9,19 @@ - iOS (8.0+) - tvOS (9.0+) -## Installing with CocoaPods - -To get started integrating `VimeoNetworking`, add the following lines to your `Podfile` and run `pod install`: +## Installing +To get started add the following to your Podfile: ```Ruby -use_frameworks! # required for Swift frameworks +use_frameworks! -target 'YourAppTargetName' do - pod 'VimeoNetworking', '1.0' +target 'YourTarget' do + pod 'VimeoNetworking' end ``` +You can optionally specify a version number, or point directly to our `develop` branch. Note that breaking changes may be introduced into `develop` at any time, but those changes will always be behind a major or minor release version number. + ## Initialization The first step towards using the Vimeo API is registering a new application on the Vimeo Developer site: [My API Apps](https://developer.vimeo.com/apps). You'll need a Vimeo account, if you don't already have one. @@ -52,15 +53,15 @@ Before we can actually start getting meaningful data from the API, there's one l Client credentials allow you to see everything that's publicly available on Vimeo. This is essentially equivalent to visiting Vimeo.com without signing up for an account or logging in. This is the simplest authentication method to implement, just one function completes the grant. -```Swift +```Swift let authenticationController = AuthenticationController(client: vimeoClient) -authenticationController.clientCredentialsGrant { result in +authenticationController.clientCredentialsGrant { result in switch result { case .Success(let account): print("Successfully authenticated with account: \(account)") case .Failure(let error): - print("error authenticating: \(error)") + print("error authenticating: \(error)") } } ``` @@ -88,7 +89,7 @@ The user will be prompted to log in and grant permissions to your application. func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool { authenticationController.codeGrant(responseURL: url) { result in - switch result + switch result { case .Success(let account): print("authenticated successfully: \(account)") @@ -96,7 +97,7 @@ func application(app: UIApplication, openURL url: NSURL, options: [String : AnyO print("failure authenticating: \(error)") } } - + return true } ``` @@ -123,18 +124,18 @@ authenticationController.accessToken("your_access_tocken") { result in `AuthenticationController` saves the accounts it successfully authenticates in the Keychain. The next time your application launches, you should first attempt to load a previously authenticated account before prompting the user to authenticate. ```Swift -do +do { - if let account = try authenticationController.loadSavedAccount() + if let account = try authenticationController.loadSavedAccount() { print("account loaded successfully: \(account)" - } - else + } + else { print("no saved account found, authenticate...") } } -catch let error +catch let error { print("error loading account: \(error)") } @@ -163,7 +164,7 @@ By declaring the expected model object type, we can ensure that both the request After we send that request, we'll get a `Result` enum back. This could be either a `.Success` or a `.Failure` value. `.Success` will contain a `Response` object, while `.Failure` will contain an `NSError`. Switch between these two cases to handle whichever is encountered: ```Swift -vimeoClient.request(videoRequest) { result in +vimeoClient.request(videoRequest) { result in switch result { case .Success(let response: Response): let video: VIMVideo = response.model @@ -182,12 +183,12 @@ One neat **ProTip**: Your `Request` model type doesn't just have to be a single ```Swift let staffPickedVideosRequest = Request<[VIMVideo]>(path: "/channels/staffpicks/videos") -vimeoClient.request(staffPickedVideosRequest) { result in - switch result +vimeoClient.request(staffPickedVideosRequest) { result in + switch result { case .Success(let response: Response): let videos: [VIMVideo] = response.model - for video in videos + for video in videos { print("retrieved video: \(video)") } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/AccountStore.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/AccountStore.swift index 29fee82c..a4eeedc7 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/AccountStore.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/AccountStore.swift @@ -53,14 +53,14 @@ final class AccountStore } } - // MARK: - + // MARK: - private struct Constants { static let ErrorDomain = "AccountStoreErrorDomain" } - // MARK: - + // MARK: - private let keychainStore: KeychainStore @@ -133,7 +133,7 @@ final class AccountStore throw error } - if let userJSON = account.userJSON + if let userJSON = account.userJSON as? [String: Any] { try account.user = VIMObjectMapper.mapObject(responseDictionary: userJSON) as VIMUser } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/AppConfiguration.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/AppConfiguration.swift index 71296bc8..1e8f7522 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/AppConfiguration.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/AppConfiguration.swift @@ -24,50 +24,41 @@ // THE SOFTWARE. // -import Foundation - -/** - * Stores all static information relevant to a client application - */ +/// Stores all static information relevant to a client application public struct AppConfiguration { public let clientIdentifier: String public let clientSecret: String public let scopes: [Scope] - - let keychainService: String - let keychainAccessGroup: String? - public let apiVersion: String public let baseUrl: URL + let keychainService: String + let keychainAccessGroup: String? - /** - Create a new `AppConfiguration` - - - parameter clientIdentifier: The client key designated by the api for your application - - parameter clientSecret: The client secret designated by the api for your application - - parameter scopes: An array of `Scope`s that your application requests - - parameter keychainService: Identifes your application to the system keychain, defaults to `KeychainServiceVimeo` - - parameter keychainAccessGroup: Access group your application should use for the system keychain, defaults to nil - - parameter apiVersion: API version your requests should use, defaults to `VimeoDefaultAPIVersionString` - - parameter baseUrl: The baseUrl for HTTP requests made using this configuration, defaults to `VimeoBaseURL` - - - returns: an initialized AppConfiguration - */ + /// Create a new `AppConfiguration` + /// + /// - Parameters: + /// - clientIdentifier: The client key designated by the api for your application + /// - clientSecret: The client secret designated by the api for your application + /// - scopes: An array of `Scope`s that your application requests + /// - keychainService: Identifes your application to the system keychain, defaults to `KeychainServiceVimeo` + /// - keychainAccessGroup: Access group your application should use for the system keychain, defaults to nil + /// - apiVersion: API version your requests should use, defaults to `VimeoDefaultAPIVersionString` + /// - baseUrl: The baseUrl for HTTP requests made using this configuration, defaults to `VimeoBaseURL` public init(clientIdentifier: String, clientSecret: String, scopes: [Scope], keychainService: String, keychainAccessGroup: String? = nil, - apiVersion: String = VimeoDefaultAPIVersionString, - baseUrl: URL = VimeoBaseURL) + apiVersion: String? = nil, + baseUrl: URL? = nil) { self.clientIdentifier = clientIdentifier self.clientSecret = clientSecret self.scopes = scopes self.keychainService = keychainService self.keychainAccessGroup = keychainAccessGroup - self.apiVersion = apiVersion - self.baseUrl = baseUrl + self.apiVersion = apiVersion ?? VimeoDefaultAPIVersionString + self.baseUrl = baseUrl ?? VimeoBaseURL } } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/AuthenticationController.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/AuthenticationController.swift index f171085c..82c908ff 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/AuthenticationController.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/AuthenticationController.swift @@ -27,9 +27,9 @@ import Foundation /** - `AuthenticationController` is used to authenticate a `VimeoClient` instance, either by loading an account stored in the system keychain, or by interacting with the Vimeo API to authenticate a new account. The two publicly accessible authentication methods are client credentials grant and code grant. + `AuthenticationController` is used to authenticate a `VimeoClient` instance, either by loading an account stored in the system keychain, or by interacting with the Vimeo API to authenticate a new account. The two publicly accessible authentication methods are client credentials grant and code grant. - Client credentials grant is a public authentication method with no logged in user, which allows your application to access anything a logged out user could see on Vimeo (public content). + Client credentials grant is a public authentication method with no logged in user, which allows your application to access anything a logged out user could see on Vimeo (public content). Code grant is a way of logging in with a user account, which can give your application access to that user's private content and permission to interact with Vimeo on their behalf. This is achieved by first opening a generated URL in Safari which presents a user log in page. When the user authenticates successfully, control is returned to your app through a redirect link, and you then make a final request to retrieve the authenticated account. @@ -259,7 +259,7 @@ final public class AuthenticationController */ public func accessToken(token: String, completion: @escaping AuthenticationCompletion) { - let customSessionManager = VimeoSessionManager.defaultSessionManager(baseUrl: self.configuration.baseUrl, accessTokenProvider: {token}) + let customSessionManager = VimeoSessionManager.defaultSessionManager(baseUrl: self.configuration.baseUrl, accessTokenProvider: {token}, apiVersion: self.configuration.apiVersion) let adhocClient = VimeoClient(appConfiguration: self.configuration, sessionManager: customSessionManager) let request = AuthenticationRequest.verifyAccessTokenRequest() @@ -292,9 +292,9 @@ final public class AuthenticationController - parameter password: the new user's password - parameter completion: handler for authentication success or failure */ - public func join(withName name: String, email: String, password: String, completion: @escaping AuthenticationCompletion) + public func join(withName name: String, email: String, password: String, marketingOptIn: String, completion: @escaping AuthenticationCompletion) { - let request = AuthenticationRequest.joinRequest(withName: name, email: email, password: password, scopes: self.configuration.scopes) + let request = AuthenticationRequest.joinRequest(withName: name, email: email, password: password, marketingOptIn: marketingOptIn, scopes: self.configuration.scopes) self.authenticate(with: request, completion: completion) } @@ -320,9 +320,9 @@ final public class AuthenticationController - parameter facebookToken: token from facebook SDK - parameter completion: handler for authentication success or failure */ - public func facebookJoin(withToken facebookToken: String, completion: @escaping AuthenticationCompletion) + public func facebookJoin(withToken facebookToken: String, marketingOptIn: String, completion: @escaping AuthenticationCompletion) { - let request = AuthenticationRequest.joinFacebookRequest(withToken: facebookToken, scopes: self.configuration.scopes) + let request = AuthenticationRequest.joinFacebookRequest(withToken: facebookToken, marketingOptIn: marketingOptIn, scopes: self.configuration.scopes) self.authenticate(with: request, completion: completion) } @@ -358,7 +358,7 @@ final public class AuthenticationController /** **(PRIVATE: Vimeo Use Only, will not work for third-party applications)** - Exchange a saved access token granted to another application for a new token granted to the calling application. This method will allow an application to re-use credentials from another Vimeo application. Client credentials must be granted before using this method. + Exchange a saved access token granted to another application for a new token granted to the calling application. This method will allow an application to re-use credentials from another Vimeo application. Client credentials must be granted before using this method. - parameter accessToken: access token granted to the other application - parameter completion: handler for authentication success or failure @@ -519,13 +519,19 @@ final public class AuthenticationController try self.accountStore.removeAccount(ofType: .user) } - // MARK: - Private - - private func authenticate(with request: AuthenticationRequest, completion: @escaping AuthenticationCompletion) + /** + Executes the specified authentication request, then the specified completion. + + - request: A request to fetch a VIMAccount. + - completion: A closure to handle the VIMAccount or error received. + */ + public func authenticate(with request: AuthenticationRequest, completion: @escaping AuthenticationCompletion) { self.authenticate(with: self.authenticatorClient, request: request, completion: completion) } + // MARK: - Private + private func authenticate(with client: VimeoClient, request: AuthenticationRequest, completion: @escaping AuthenticationCompletion) { let _ = client.request(request) { result in diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Constants.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Constants.swift index e4bb86c9..7603c334 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Constants.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Constants.swift @@ -26,8 +26,9 @@ import Foundation - /// Base URL for the Vimeo API +// TODO: Revert this constant's scope. [VN] (05/16/2018) +/// Base URL for the Vimeo API public let VimeoBaseURL = URL(string: "https://api.vimeo.com")! /// Default API version to use for requests -internal let VimeoDefaultAPIVersionString = "3.2" +internal let VimeoDefaultAPIVersionString = "3.4" diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/ErrorCode.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/ErrorCode.swift index 48626d98..5986bba5 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/ErrorCode.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/ErrorCode.swift @@ -32,7 +32,8 @@ public enum VimeoErrorCode: Int // Upload case uploadStorageQuotaExceeded = 4101 case uploadDailyQuotaExceeded = 4102 - + case uploadQuotaSizeExceededCap = 3428 + case invalidRequestInput = 2204 // root error code for all invalid parameters errors below // Password-protected video playback @@ -68,6 +69,19 @@ public enum VimeoErrorCode: Int case facebookInvalidToken = 2300 case facebookMissingProperty = 2301 case facebookMalformedToken = 2302 + case googleUnableToCreateUserMissingEmail = 2325 + case googleUnableToCreateUserTokenTooLong = 2326 + case googleUnableToLoginNoToken = 2327 + case googleUnableToLoginNonExistentProperty = 2328 + case googleUnableToLoginEmailNotFoundViaToken = 2329 + case googleUnableToCreateUserInsufficientPermissions = 2330 + case googleUnableToCreateUserCannotValidateToken = 2331 + case googleUnableToCreateUserDailyLimit = 2332 + case googleUnableToLoginInsufficientPermissions = 2333 + case googleUnableToLoginCannotValidateToken = 2334 + case googleUnableToLoginDailyLimit = 2335 + case googleUnableToLoginCouldNotVerifyToken = 2336 + case googleUnableToCreateUserCouldNotVerifyToken = 2337 case emailAlreadyRegistered = 2400 case emailBlocked = 2401 case emailSpammer = 2402 @@ -88,6 +102,11 @@ public enum VimeoErrorCode: Int case userNotAllowedToFollowChannels = 3418 case batchFollowUserRequestFailed = 4005 case batchSubscribeChannelRequestFailed = 4006 + + // Live Streaming + case userNotAllowedToLiveStream = 3422 + case userHitSimultaneousLiveStreamingLimit = 3423 + case userHitMonthlyLiveStreamingMinutesQuota = 3424 } /// `HTTPStatusCode` contains HTTP status code constants used to inspect response status diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/ExceptionCatcher+Swift.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/ExceptionCatcher+Swift.swift index 81c82f22..1c6e698b 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/ExceptionCatcher+Swift.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/ExceptionCatcher+Swift.swift @@ -26,7 +26,7 @@ import Foundation -class ExceptionCatcher: ObjC_ExceptionCatcher +public class ExceptionCatcher: ObjC_ExceptionCatcher { /** Execute a block of code that could potentially throw Objective-C exceptions @@ -35,7 +35,7 @@ class ExceptionCatcher: ObjC_ExceptionCatcher - throws: an error containing any thrown exception information */ - @nonobjc internal static func doUnsafe(unsafeBlock: @escaping ((Void) -> Void)) throws + @nonobjc public static func doUnsafe(unsafeBlock: @escaping (() -> Void)) throws { if let error = self._doUnsafe(unsafeBlock) { diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/KeychainStore.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/KeychainStore.swift index 590a8b5e..b6b246c3 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/KeychainStore.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/KeychainStore.swift @@ -119,11 +119,11 @@ final class KeychainStore } } - // MARK: - + // MARK: - - private func query(for key: String) -> [AnyHashable: Any] + private func query(for key: String) -> [String: Any] { - var query: [AnyHashable: Any] = [:] + var query: [String: Any] = [:] query[kSecClass as String] = kSecClassGenericPassword as String query[kSecAttrService as String] = self.service diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/PinCodeInfo.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/PinCodeInfo.swift index 47da6ed5..235e8ab0 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/PinCodeInfo.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/PinCodeInfo.swift @@ -28,14 +28,14 @@ import Foundation public class PinCodeInfo: VIMModelObject { - dynamic public var deviceCode: String? - dynamic public var userCode: String? - dynamic public var authorizeLink: String? - dynamic public var activateLink: String? + @objc dynamic public private(set) var deviceCode: String? + @objc dynamic public private(set) var userCode: String? + @objc dynamic public private(set) var authorizeLink: String? + @objc dynamic public private(set) var activateLink: String? // TODO: These are non-optional Ints with -1 invalid sentinel values because // an optional Int can't be represented in Objective-C and can't be marked // dynamic, which leads to it not getting parsed by VIMObjectMapper [RH] - dynamic public var expiresIn: Int = -1 - dynamic public var interval: Int = -1 + @objc dynamic public private(set) var expiresIn: Int = -1 + @objc dynamic public private(set) var interval: Int = -1 } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/PlayProgress.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/PlayProgress.swift index 33ef07f1..1c067949 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/PlayProgress.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/PlayProgress.swift @@ -12,5 +12,5 @@ import Foundation public class PlayProgress: VIMModelObject { /// The time, in seconds, that the video has been viewed. - public var seconds: NSNumber? + @objc dynamic public var seconds: NSNumber? } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/Spatial.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/Spatial.swift index f4f59859..247745e3 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/Spatial.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/Spatial.swift @@ -10,15 +10,15 @@ /// Spatial stores all information related to threesixty video public class Spatial: VIMModelObject { - public static let StereoFormatMono = "mono" - public static let StereoFormatLeftRight = "left-right" - public static let StereoFormatTopBottom = "top-bottom" + @objc public static let StereoFormatMono = "mono" + @objc public static let StereoFormatLeftRight = "left-right" + @objc public static let StereoFormatTopBottom = "top-bottom" /// Represents the projection. Value returned by the server can be: "equirectangular", "cylindrical", "cubical", "pyramid", "dome". - public var projection: String? + @objc dynamic public private(set) var projection: String? /// Represents the format. Value returned by the server can be: "mono", "left-right", "top-bottom" - public var stereoFormat: String? + @objc dynamic public private(set) var stereoFormat: String? // MARK: - VIMMappable diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/Subscription.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/Subscription.swift index 0ba72b57..cab4060c 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/Subscription.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/Subscription.swift @@ -12,50 +12,54 @@ public class Subscription: VIMModelObject // MARK: - Properties /// Represents wether the user is subscribed to the `comment` notification. - var comment: NSNumber? + @objc dynamic public private(set) var comment: NSNumber? /// Represents wether the user is subscribed to the `credit` notification. - var credit: NSNumber? + @objc dynamic public private(set) var credit: NSNumber? /// Represents wether the user is subscribed to the `like` notification. - var like: NSNumber? + @objc dynamic public private(set) var like: NSNumber? /// Represents wether the user is subscribed to the `mention` notification. - var mention: NSNumber? + @objc dynamic public private(set) var mention: NSNumber? /// Represents wether the user is subscribed to the `reply` notification. - var reply: NSNumber? + @objc dynamic public private(set) var reply: NSNumber? /// Represents wether the user is subscribed to the `follow` notification. - var follow: NSNumber? + @objc dynamic public private(set) var follow: NSNumber? /// Represents wether the user is subscribed to the `video available` notification. - var videoAvailable: NSNumber? + @objc dynamic public private(set) var videoAvailable: NSNumber? /// Represents wether the user is subscribed to the `vod pre order available` notification. - var vodPreorderAvailable: NSNumber? + @objc dynamic public private(set) var vodPreorderAvailable: NSNumber? /// Represents wether the user is subscribed to the `vod rental expiration warning` notification. - var vodRentalExpirationWarning: NSNumber? + @objc dynamic public private(set) var vodRentalExpirationWarning: NSNumber? /// Represents wether the user is subscribed to the `account expiration warning` notification. - var accountExpirationWarning: NSNumber? + @objc dynamic public private(set) var accountExpirationWarning: NSNumber? /// Represents wether the user is subscribed to the `share` notification. - var share: NSNumber? + @objc dynamic public private(set) var share: NSNumber? + + /// Represents wether the is subscribed to the `New video available from followed user` notification. + @objc dynamic public private(set) var followedUserVideoAvailable: NSNumber? /// Represents the Subscription object as a Dictionary - public var toDictionary: [AnyHashable: Any] + @objc public var toDictionary: [String: Any] { - let dictionary = ["comment": self.comment ?? false, - "credit": self.credit ?? false, - "like": self.like ?? false, - "mention": self.mention ?? false, - "reply": self.reply ?? false, - "follow": self.follow ?? false, - "vod_preorder_available": self.vodPreorderAvailable ?? false, - "video_available": self.videoAvailable ?? false, - "share": self.share ?? false] + let dictionary: [String: Any] = ["comment": self.comment ?? false, + "credit": self.credit ?? false, + "like": self.like ?? false, + "mention": self.mention ?? false, + "reply": self.reply ?? false, + "follow": self.follow ?? false, + "vod_preorder_available": self.vodPreorderAvailable ?? false, + "video_available": self.videoAvailable ?? false, + "share": self.share ?? false, + "followed_user_video_available": self.followedUserVideoAvailable ?? false] return dictionary } @@ -68,7 +72,8 @@ public class Subscription: VIMModelObject "video_available": "videoAvailable", "vod_preorder_available": "vodPreorderAvailable", "vod_rental_expiration_warning": "vodRentalExpirationWarning", - "account_expiration_warning": "accountExpirationWarning"] + "account_expiration_warning": "accountExpirationWarning", + "followed_user_video_available": "followedUserVideoAvailable"] } // MARK: - Helpers @@ -76,7 +81,7 @@ public class Subscription: VIMModelObject /// Helper method that determine whether a user has all the subscription settings turned off. /// /// - Returns: A boolean that indicates whether the user has all the settings for push notifications disabled. - public func areSubscriptionsDisabled() -> Bool + @objc public func areSubscriptionsDisabled() -> Bool { return (self.comment == false && self.credit == false && @@ -86,6 +91,7 @@ public class Subscription: VIMModelObject self.follow == false && self.vodPreorderAvailable == false && self.videoAvailable == false && - self.share == false) + self.share == false && + self.followedUserVideoAvailable == false) } } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/SubscriptionCollection.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/SubscriptionCollection.swift index eea4d188..e41dd2a5 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/SubscriptionCollection.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/SubscriptionCollection.swift @@ -12,13 +12,13 @@ public class SubscriptionCollection: VIMModelObject // MARK: - Properties /// Represents the uri - public var uri: String? + @objc dynamic public private(set) var uri: String? /// Represents the subscription - public var subscription: Subscription? + @objc dynamic public private(set) var subscription: Subscription? /// Represents the migration that indicates whether the user has migrated from the old system `VIMTrigger` to new new system `Localytics`. - public var migrated: NSNumber? + @objc dynamic public private(set) var migrated: NSNumber? // MARK: - VIMMappable diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMBadge.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMBadge.swift index a733c8fe..68835772 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMBadge.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMBadge.swift @@ -29,11 +29,11 @@ import Foundation /// VIMBadge contains the text and/or icons used to display a badge on a video item public class VIMBadge: VIMModelObject { - dynamic public var type: String? - dynamic public var festival: String? - dynamic public var link: String? - dynamic public var text: String? - dynamic public var pictures: VIMPictureCollection? + @objc dynamic public var type: String? + @objc dynamic public var festival: String? + @objc dynamic public var link: String? + @objc dynamic public var text: String? + @objc dynamic public var pictures: VIMPictureCollection? public override func getClassForObjectKey(_ key: String) -> AnyClass? { diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMConnection.h b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMConnection.h index 1b8d7a6a..c6c23d06 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMConnection.h +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMConnection.h @@ -59,6 +59,8 @@ extern NSString *const __nonnull VIMConnectionNameRecommendedUsers; extern NSString *const __nonnull VIMConnectionNameModeratedChannels; extern NSString *const __nonnull VIMConnectionNameContents; extern NSString *const __nonnull VIMConnectionNameNotifications; +extern NSString *const __nonnull VIMConnectionNameBlockUser; +extern NSString *const __nonnull VIMConnectionNameLiveStats; @interface VIMConnection : VIMModelObject diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMConnection.m b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMConnection.m index b79ef442..d15bf9b3 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMConnection.m +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMConnection.m @@ -59,6 +59,9 @@ NSString *const VIMConnectionNameModeratedChannels = @"moderated_channels"; NSString *const VIMConnectionNameContents = @"contents"; NSString *const VIMConnectionNameNotifications = @"notifications"; +NSString *const VIMConnectionNameBlockUser = @"block"; +NSString *const VIMConnectionNameLiveStats = @"live_stats"; + @implementation VIMConnection diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMInteraction.h b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMInteraction.h index 96219d23..c1ea7d67 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMInteraction.h +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMInteraction.h @@ -34,6 +34,7 @@ extern NSString * const __nonnull VIMInteractionNameLike; extern NSString * const __nonnull VIMInteractionNameBuy; extern NSString * const __nonnull VIMInteractionNameRent; extern NSString * const __nonnull VIMInteractionNameSubscribe; +extern NSString * const __nonnull VIMInteractionNamePurchase; typedef NS_ENUM(NSInteger, VIMInteractionStreamStatus) { VIMInteractionStreamStatusUnavailable = 0, // user cannot purchase @@ -48,6 +49,8 @@ typedef NS_ENUM(NSInteger, VIMInteractionStreamStatus) { @property (nonatomic, strong, nullable) NSNumber *added; @property (nonatomic, strong, nullable) NSDate *addedTime; +@property (nonatomic, strong, nullable) NSString *status; + # pragma mark - VOD related only @property (nonatomic, copy, nullable) NSString *link; @property (nonatomic, copy, nullable) NSString *download; diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMInteraction.m b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMInteraction.m index 3d342d97..df70c425 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMInteraction.m +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMInteraction.m @@ -34,6 +34,7 @@ NSString * const VIMInteractionNameBuy = @"buy"; NSString * const VIMInteractionNameRent = @"rent"; NSString * const VIMInteractionNameSubscribe = @"subscribe"; +NSString * const VIMInteractionNamePurchase = @"purchase"; @interface VIMInteraction() @property (nonatomic, copy, nullable) NSString *added_time; diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLive.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLive.swift new file mode 100644 index 00000000..a4fc0db5 --- /dev/null +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLive.swift @@ -0,0 +1,142 @@ +// +// VIMLive.swift +// VimeoNetworking +// +// Created by Van Nguyen on 08/29/2017. +// Copyright (c) Vimeo (https://vimeo.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +/// The streaming status of a live video. +/// +/// - unavailable: The RTMP link is visible but not yet able to receive the stream. +/// - pending: Vimeo is working on setting up the connection. +/// - ready: The RTMP's URL is ready to receive video content. +/// - streamingPreview: The stream is in a "preview" state. It will be accessible to the public when you transition to "streaming". +/// - streaming: The stream is open and receiving content. +/// - streamingError: The stream has failed due to an error relating to the broadcaster; They may have reached their monthly broadcast limit, for example. +/// - archiving: The stream has finished, and the video is in the process of being archived, but is not ready to play yet. +/// - archiveError: There was a problem archiving the stream. +/// - done: The stream has been ended intentionally by the end-user. +public enum LiveStreamingStatus: String +{ + case unavailable = "unavailable" + case pending = "pending" + case ready = "ready" + case streamingPreview = "streaming_preview" + case streaming = "streaming" + case streamingError = "streaming_error" + case archiving = "archiving" + case archiveError = "archive_error" + case done = "done" +} + +/// An object that represents the `live` field in +/// a `clip` response. +public class VIMLive: VIMModelObject +{ + private struct Constants + { + static let ChatKey = "chat" + } + + /// The RTMP link is visible but not yet able to receive the stream. + @objc public static let LiveStreamStatusUnavailable = "unavailable" + + /// Vimeo is working on setting up the connection. + @objc public static let LiveStreamStatusPending = "pending" + + /// The RTMP's URL is ready to receive video content. + @objc public static let LiveStreamStatusReady = "ready" + + /// The stream is in a "preview" state. It will be accessible to the public when you transition to "streaming". + @objc public static let LiveStreamStatusStreamingPreview = "streaming_preview" + + /// The stream is open and receiving content. + @objc public static let LiveStreamStatusStreaming = "streaming" + + /// The stream has failed due to an error relating to the broadcaster; They may have reached their monthly broadcast limit, for example. + @objc public static let LiveStreamStatusStreamingError = "streaming_error" + + /// The stream has finished, and the video is in the process of being archived, but is not ready to play yet. + @objc public static let LiveStreamStatusArchiving = "archiving" + + /// There was a problem archiving the stream. + @objc public static let LiveStreamStatusArchiveError = "archive_error" + + /// The stream has been ended intentionally by the end-user. + @objc public static let LiveStreamStatusDone = "done" + + /// An RTMP link used to host a live stream. + @objc dynamic public private(set) var link: String? + + /// A token for streaming. + @objc dynamic public private(set) var key: String? + + /// The timestamp that the stream is active. + @objc dynamic public private(set) var activeTime: NSDate? + + /// The timestamp that the stream is over. + @objc dynamic public private(set) var endedTime: NSDate? + + /// The timestamp that the live video is + /// archived. + @objc dynamic public private(set) var archivedTime: NSDate? + + /// The timestamp that the live video is + /// scheduled to be online. + @objc dynamic public private(set) var scheduledStartTime: NSDate? + + /** + The status of the live video in string. + + - Note: + Technically, this property should not be used to + check the status of a live video. Use + `liveStreamingStatus` instead for easy checking. + */ + @objc dynamic public private(set) var status: String? + + /// The status of the live video in `LiveStreamingStatus` enum. + public var liveStreamingStatus: LiveStreamingStatus? + { + guard let status = self.status else + { + return nil + } + + return LiveStreamingStatus(rawValue: status) + } + + /// The live event's chat. + @objc public private(set) var chat: VIMLiveChat? + + public override func getClassForObjectKey(_ key: String!) -> AnyClass? + { + if key == Constants.ChatKey + { + return VIMLiveChat.self + } + + return nil + } +} diff --git a/VimeoUpload/Upload/Operations/Private/PHAssetRetryUploadOperation.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLiveChat.swift similarity index 57% rename from VimeoUpload/Upload/Operations/Private/PHAssetRetryUploadOperation.swift rename to Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLiveChat.swift index 836079cf..8936a57d 100644 --- a/VimeoUpload/Upload/Operations/Private/PHAssetRetryUploadOperation.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLiveChat.swift @@ -1,9 +1,9 @@ // -// PHAssetRetryUploadOperation.swift -// VimeoUpload +// VIMLiveChat.swift +// VimeoNetworking // -// Created by Hanssen, Alfie on 12/2/15. -// Copyright © 2015 Vimeo. All rights reserved. +// Created by Van Nguyen on 10/10/2017. +// Copyright (c) Vimeo (https://vimeo.com) // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -24,32 +24,31 @@ // THE SOFTWARE. // -import Foundation -import Photos -import VimeoNetworking - -// This flow encapsulates the following steps: - -// 1. Perorm a MeQuotaOperation -// 2. Perform a PHAssetCloudExportQuotaOperation - -public class PHAssetRetryUploadOperation: RetryUploadOperation +/// An object representing the `chat` field in a `live` response. This +/// `live` response is part of the `clip` representation. +public class VIMLiveChat: VIMModelObject { - private let phAsset: PHAsset - - // MARK: - Initialization - - public init(sessionManager: VimeoSessionManager, phAsset: PHAsset) + private struct Constants { - self.phAsset = phAsset - - super.init(sessionManager: sessionManager) + static let UserKey = "user" } - // MARK: Overrides + /// The ID of the live event chat room. + @objc public private(set) var roomId: NSNumber? + + /// JWT for the user to access the live event chat room. + @objc public private(set) var token: String? - override func makeExportQuotaOperation(user: VIMUser) -> ExportQuotaOperation? + /// The current user. + @objc public private(set) var user: VIMLiveChatUser? + + @objc public override func getClassForObjectKey(_ key: String!) -> AnyClass? { - return PHAssetCloudExportQuotaOperation(me: user, phAsset: self.phAsset) + if key == Constants.UserKey + { + return VIMLiveChatUser.self + } + + return nil } } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLiveChatUser.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLiveChatUser.swift new file mode 100644 index 00000000..2f555db4 --- /dev/null +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLiveChatUser.swift @@ -0,0 +1,101 @@ +// +// VIMLiveChatUser.swift +// VimeoNetworking +// +// Created by Van Nguyen on 10/10/2017. +// Copyright (c) Vimeo (https://vimeo.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +/// The user's account type. +/// +/// - basic: "Vimeo Basic" tier. +/// - business: "Vimeo Business" tier. +/// - liveBusiness: "Business Live" tier. +/// - livePro: "PRO Live" tier. +/// - plus: "Vimeo Plus" tier. +/// - pro: "Vimeo PRO" tier. +/// - proUnlimited: "Custom Live" tier. +public enum AccountType: String +{ + case basic = "basic" + case business = "business" + case liveBusiness = "live_business" + case livePro = "live_pro" + case plus = "plus" + case pro = "pro" + case proUnlimited = "pro_unlimited" +} + +/// An object representing the `user` field in a `chat` response. +public class VIMLiveChatUser: VIMModelObject +{ + private struct Constants + { + static let PictureResponseKey = "pictures" + } + + /// Returns a string representation of the account type, if available. + /// + /// - Note: This property provides an Objective-C interface for the Swift-only property, `accountType`. + @objc public private(set) var account: String? + + /// The user's account type in `AccountType`. + public var accountType: AccountType? + { + guard let accountValue = self.account else + { + return nil + } + + return AccountType(rawValue: accountValue) + } + + /// The user's ID. + @objc public private(set) var id: NSNumber? + + /// Is this user the creator of the live event? + @objc public private(set) var isCreator: NSNumber? + + /// Is this user a Vimeo staff member? + @objc public private(set) var isStaff: NSNumber? + + /// The users' display name. + @objc public private(set) var name: String? + + /// The active picture for this user. + @objc public private(set) var pictures: VIMPictureCollection? + + /// URI of the current user. + @objc public private(set) var uri: String? + + /// Absolute URL of the current user. + @objc public private(set) var link: String? + + public override func getClassForObjectKey(_ key: String!) -> AnyClass? + { + if key == Constants.PictureResponseKey + { + return VIMPictureCollection.self + } + + return nil + } +} diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUploadQuota.m b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLiveHeartbeat.swift similarity index 65% rename from Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUploadQuota.m rename to Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLiveHeartbeat.swift index fe2f66ae..1c1b4557 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUploadQuota.m +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLiveHeartbeat.swift @@ -1,9 +1,9 @@ // -// VIMUploadQuota.m +// VIMLiveHeartbeat.swift // VimeoNetworking // -// Created by Hanssen, Alfie on 11/6/15. -// Copyright (c) 2015 Vimeo (https://vimeo.com) +// Created by Van Nguyen on 10/04/2017. +// Copyright (c) Vimeo (https://vimeo.com) // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -24,33 +24,21 @@ // THE SOFTWARE. // -#import "VIMUploadQuota.h" -#import "VIMQuantityQuota.h" -#import "VIMSizeQuota.h" +import Foundation -@implementation VIMUploadQuota - -#pragma mark - VIMMappable - -- (NSDictionary *)getObjectMapping -{ - return @{@"quota": @"quantityQuota", - @"space": @"sizeQuota"}; -} - -- (Class)getClassForObjectKey:(NSString *)key +/// An object representing the `live` object in either an `hls` or a `dash` response. +public class VIMLiveHeartbeat: VIMModelObject { - if ([key isEqualToString:@"quota"]) + private struct Constants { - return [VIMQuantityQuota class]; + static let HeartbeatUrlKey = "heartbeat" } - - if ([key isEqualToString:@"space"]) + + /// The heartbeat URL that the client should send requests to. + @objc dynamic public private(set) var heartbeatUrl: String? + + override public func getObjectMapping() -> Any? { - return [VIMSizeQuota class]; + return [Constants.HeartbeatUrlKey: "heartbeatUrl"] } - - return nil; } - -@end diff --git a/VimeoUpload/Upload/Operations/Sync/DailyQuotaOperation.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLiveQuota.swift similarity index 57% rename from VimeoUpload/Upload/Operations/Sync/DailyQuotaOperation.swift rename to Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLiveQuota.swift index 28559fae..cf2f335f 100644 --- a/VimeoUpload/Upload/Operations/Sync/DailyQuotaOperation.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLiveQuota.swift @@ -1,9 +1,9 @@ // -// DailyQuotaOperation.swift -// VimeoUpload +// VIMLiveQuota.swift +// VimeoNetworking // -// Created by Alfred Hanssen on 11/9/15. -// Copyright © 2015 Vimeo. All rights reserved. +// Created by Van Nguyen on 09/11/2017. +// Copyright (c) Vimeo (https://vimeo.com) // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -25,34 +25,35 @@ // import Foundation -import AVFoundation -import VimeoNetworking -public class DailyQuotaOperation: Operation -{ - private let user: VIMUser - - private(set) var result: Bool? - private(set) var error: NSError? - - init(user: VIMUser) +/// An object that represents the `live_quota` +/// field in a `user` response. +public class VIMLiveQuota: VIMModelObject +{ + private struct Constants { - self.user = user - - super.init() + static let StreamsKey = "streams" + static let TimeKey = "time" } - // MARK: Overrides - - override public func main() + /// The `streams` field in a `live_quota` response. + @objc dynamic public private(set) var streams: VIMLiveStreams? + + /// The `time` field in a `live_quota` response. + @objc dynamic public private(set) var time: VIMLiveTime? + + override public func getClassForObjectKey(_ key: String!) -> AnyClass! { - if let sd = self.user.uploadQuota?.quantityQuota?.canUploadSd, let hd = self.user.uploadQuota?.quantityQuota?.canUploadHd + if key == Constants.StreamsKey { - self.result = (sd == true || hd == true) + return VIMLiveStreams.self } - else + + if key == Constants.TimeKey { - self.error = NSError.error(withDomain: UploadErrorDomain.DailyQuotaOperation.rawValue, code: UploadLocalErrorCode.cannotEvaluateDailyQuota.rawValue, description: "User object did not contain uploadQuota.quota information") + return VIMLiveTime.self } + + return nil } } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLiveStreams.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLiveStreams.swift new file mode 100644 index 00000000..8ab56f2b --- /dev/null +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLiveStreams.swift @@ -0,0 +1,43 @@ +// +// VIMLiveStreams.swift +// VimeoNetworking +// +// Created by Van Nguyen on 09/11/2017. +// Copyright (c) Vimeo (https://vimeo.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +/// An object that represents the `streams` field +/// in a `live_quota` response. +public class VIMLiveStreams: VIMModelObject +{ + /// The maximum streams a user can make. + @objc dynamic public private(set) var maxStreams: NSNumber? + + /// The remaining streams a user can make. + @objc dynamic public private(set) var remainingStreams: NSNumber? + + override public func getObjectMapping() -> Any! + { + return ["remaining": "remainingStreams", "maximum": "maxStreams"] + } +} diff --git a/VimeoUpload/Upload/Operations/Private/PHAssetCloudExportQuotaCreateOperation.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLiveTime.swift similarity index 56% rename from VimeoUpload/Upload/Operations/Private/PHAssetCloudExportQuotaCreateOperation.swift rename to Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLiveTime.swift index bcd1c565..37322348 100644 --- a/VimeoUpload/Upload/Operations/Private/PHAssetCloudExportQuotaCreateOperation.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMLiveTime.swift @@ -1,9 +1,9 @@ // -// PHAssetCloudExportQuotaCreateOperation.swift -// VimeoUpload +// VIMLiveTime.swift +// VimeoNetworking // -// Created by Alfred Hanssen on 11/9/15. -// Copyright © 2015 Vimeo. All rights reserved. +// Created by Van Nguyen on 09/11/2017. +// Copyright (c) Vimeo (https://vimeo.com) // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -25,31 +25,22 @@ // import Foundation -import Photos -import VimeoNetworking -// This flow encapsulates the following steps: - -// 1. Perorm a PHAssetCloudExportQuotaOperation -// 2. Create video record - -public class PHAssetCloudExportQuotaCreateOperation: ExportQuotaCreateOperation +/// An object that represents the `time` field in +/// a `live_quota` response. +public class VIMLiveTime: VIMModelObject { - let phAsset: PHAsset - - // MARK: - Initialization + /// The maximum time (in seconds) per event a user can stream. + @objc dynamic public private(set) var maxTimePerEvent: NSNumber? - public init(me: VIMUser, phAsset: PHAsset, sessionManager: VimeoSessionManager, videoSettings: VideoSettings? = nil) - { - self.phAsset = phAsset - - super.init(me: me, sessionManager: sessionManager, videoSettings: videoSettings) - } + /// The maximum time (in seconds) per month a user can stream. + @objc dynamic public private(set) var maxTimePerMonth: NSNumber? - // MARK: Overrides - - override func makeExportQuotaOperation(with me: VIMUser) -> ExportQuotaOperation? + /// The remaining time (in seconds) this month a user can stream. + @objc dynamic public private(set) var remainingTimeThisMonth: NSNumber? + + override public func getObjectMapping() -> Any! { - return PHAssetCloudExportQuotaOperation(me: me, phAsset: self.phAsset) + return ["monthly_remaining": "remainingTimeThisMonth", "monthly_maximum": "maxTimePerMonth", "event_maximum": "maxTimePerEvent"] } } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMNotification.h b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMNotification.h index 561c4c7f..1ff9808a 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMNotification.h +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMNotification.h @@ -38,7 +38,8 @@ typedef NS_ENUM(NSUInteger, VIMNotificationType) { VIMNotificationTypeFollow, VIMNotificationTypeLike, VIMNotificationTypeReply, - VIMNotificationTypeVideoAvailable + VIMNotificationTypeVideoAvailable, // User new video available + VIMNotificationTypeFollowedUserVideoAvailable // Followed user new video available }; @interface VIMNotification : VIMModelObject @@ -57,4 +58,6 @@ typedef NS_ENUM(NSUInteger, VIMNotificationType) { + (nonnull NSDictionary *)supportedTypeMap; +@property (nonatomic, strong, nullable) NSNumber *typeUnseenCount; + @end diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMNotification.m b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMNotification.m index d2e148cb..fa338e71 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMNotification.m +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMNotification.m @@ -42,7 +42,8 @@ @implementation VIMNotification @"follow" : @(VIMNotificationTypeFollow), @"like" : @(VIMNotificationTypeLike), @"reply" : @(VIMNotificationTypeReply), - @"video_available" : @(VIMNotificationTypeVideoAvailable)}; + @"video_available" : @(VIMNotificationTypeVideoAvailable), + @"followed_user_video_available" : @(VIMNotificationTypeFollowedUserVideoAvailable)}; }); return _typeMap; diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMNotificationsConnection.h b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMNotificationsConnection.h index 043a9f02..3bf1f859 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMNotificationsConnection.h +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMNotificationsConnection.h @@ -16,5 +16,6 @@ @return An NSInteger specifying the total of new notifications currently supported */ - (NSInteger)supportedNotificationNewTotal; +- (NSInteger)supportedNotificationUnseenTotal; @end diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMNotificationsConnection.m b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMNotificationsConnection.m index bdee4763..525ad87f 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMNotificationsConnection.m +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMNotificationsConnection.m @@ -12,11 +12,23 @@ @interface VIMNotificationsConnection () @property (nonatomic, copy, nullable) NSDictionary *type_count; +@property (nonatomic, copy, nullable) NSDictionary *type_unseen_count; @end @implementation VIMNotificationsConnection +- (void)didFinishMapping +{ + // This is a migration for the outage on 2/20/18 where these counts were being returned as empty arrays for some users. + // https://vimean.atlassian.net/browse/VIM-5996 [ghking] 2/22/18 + + if (![self.type_count isKindOfClass:[NSDictionary class]]) + { + self.type_count = [NSDictionary new]; + } +} + - (NSInteger)supportedNotificationNewTotal { NSArray *supportedNotificationKeys = [[VIMNotification supportedTypeMap] allKeys]; @@ -30,4 +42,17 @@ - (NSInteger)supportedNotificationNewTotal return total; } +- (NSInteger)supportedNotificationUnseenTotal +{ + NSArray *supportedNotificationKeys = [[VIMNotification supportedTypeMap] allKeys]; + + NSInteger total = 0; + for (NSString *key in supportedNotificationKeys) + { + total += self.type_unseen_count[key].integerValue; + } + + return total; +} + @end diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMSizeQuota.h b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMPeriodic.swift similarity index 72% rename from Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMSizeQuota.h rename to Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMPeriodic.swift index d7973796..861df5ec 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMSizeQuota.h +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMPeriodic.swift @@ -1,9 +1,10 @@ // -// VIMSizeQuota.h +// VIMPeriodic.swift // VimeoNetworking // -// Created by Hanssen, Alfie on 11/6/15. -// Copyright (c) 2015 Vimeo (https://vimeo.com) +// Created by Lim, Jennifer on 4/3/18. +// +// Copyright © 2016 Vimeo. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -24,12 +25,15 @@ // THE SOFTWARE. // -#import "VIMModelObject.h" - -@interface VIMSizeQuota : VIMModelObject - -@property (nonatomic, strong, nullable) NSNumber *free; -@property (nonatomic, strong, nullable) NSNumber *max; -@property (nonatomic, strong, nullable) NSNumber *used; - -@end +public class VIMPeriodic: VIMSizeQuota +{ + /// The time in ISO 8601 format when your upload quota resets. + @objc dynamic public private(set) var resetDate: NSDate? + + // MARK: - VIMMappable + + public override func getObjectMapping() -> Any + { + return ["reset_date" : "resetDate"] + } +} diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMProgrammedContent.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMProgrammedContent.swift index 356eb901..503e19d1 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMProgrammedContent.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMProgrammedContent.swift @@ -28,13 +28,13 @@ import Foundation public class VIMProgrammedContent: VIMModelObject { - dynamic public var uri: String? - dynamic public var name: String? - dynamic public var type: String? - dynamic public var content: NSArray? + @objc dynamic public private(set) var uri: String? + @objc dynamic public private(set) var name: String? + @objc dynamic public private(set) var type: String? + @objc dynamic public private(set) var content: NSArray? - dynamic private var metadata: [AnyHashable: Any]? - dynamic private var connections: [AnyHashable: Any]? + @objc dynamic private var metadata: [String: Any]? + @objc dynamic private var connections: [String: Any]? private struct Constants { @@ -90,15 +90,15 @@ public class VIMProgrammedContent: VIMModelObject private func parseConnections() { - guard let dict = self.metadata?[Constants.ConnectionsKey] as? [AnyHashable: Any] else + guard let dict = self.metadata?[Constants.ConnectionsKey] as? [String: Any] else { return } - self.connections = [AnyHashable: Any]() + self.connections = [String: Any]() for (key, value) in dict { - if let valueDict = value as? [AnyHashable: Any] + if let valueDict = value as? [String: Any] { self.connections?[key] = VIMConnection(keyValueDictionary: valueDict) } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMQuantityQuota.m b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMQuantityQuota.m index 68f58e00..7331c742 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMQuantityQuota.m +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMQuantityQuota.m @@ -39,8 +39,8 @@ @implementation VIMQuantityQuota - (void)didFinishMapping { - self.canUploadHd = [self.hd boolValue]; - self.canUploadSd = [self.sd boolValue]; + self.canUploadHd = [self.hd respondsToSelector:@selector(boolValue)] ? [self.hd boolValue] : NO; + self.canUploadSd = [self.sd respondsToSelector:@selector(boolValue)] ? [self.sd boolValue] : NO; } @end diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMReviewPage.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMReviewPage.swift new file mode 100644 index 00000000..79ae4d55 --- /dev/null +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMReviewPage.swift @@ -0,0 +1,21 @@ +// +// VIMReviewPage.swift +// VimeoNetworking +// +// Created by Lim, Jennifer on 3/19/18. +// + +/// VIMReviewPage stores all information related to review a video +public class VIMReviewPage: VIMModelObject +{ + /// Represents whether the review page is active for this video + @objc dynamic public private(set) var isActive: NSNumber? + + /// Represents the review page link + @objc dynamic public private(set) var link: String? + + public override func getObjectMapping() -> Any + { + return ["active" : "isActive"] + } +} diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMSizeQuota.m b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMSizeQuota.swift similarity index 71% rename from Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMSizeQuota.m rename to Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMSizeQuota.swift index 893a7944..2018e7c9 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMSizeQuota.m +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMSizeQuota.swift @@ -1,9 +1,10 @@ // -// VIMSizeQuota.m +// VIMSizeQuota.swift // VimeoNetworking // -// Created by Hanssen, Alfie on 11/6/15. -// Copyright (c) 2015 Vimeo (https://vimeo.com) +// Created by Lim, Jennifer on 4/3/18. +// +// Copyright © 2016 Vimeo. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -24,8 +25,14 @@ // THE SOFTWARE. // -#import "VIMSizeQuota.h" +public class VIMSizeQuota: VIMModelObject +{ + /// Indicates the free space size + @objc dynamic public private(set) var free: NSNumber? -@implementation VIMSizeQuota + /// Indicates the maximum size quota + @objc dynamic public private(set) var max: NSNumber? -@end + /// Indicates the used size quota + @objc dynamic public private(set) var used: NSNumber? +} diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUploadQuota.h b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMSpace.swift similarity index 69% rename from Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUploadQuota.h rename to Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMSpace.swift index f97b2a45..42cbe15a 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUploadQuota.h +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMSpace.swift @@ -1,9 +1,10 @@ // -// VIMUploadQuota.h +// VIMSpace.swift // VimeoNetworking // -// Created by Hanssen, Alfie on 11/6/15. -// Copyright (c) 2015 Vimeo (https://vimeo.com) +// Created by Lim, Jennifer on 4/3/18. +// +// Copyright © 2016 Vimeo. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -24,14 +25,15 @@ // THE SOFTWARE. // -#import "VIMModelObject.h" - -@class VIMQuantityQuota; -@class VIMSizeQuota; - -@interface VIMUploadQuota : VIMModelObject - -@property (nonatomic, strong, nullable) VIMQuantityQuota *quantityQuota; -@property (nonatomic, strong, nullable) VIMSizeQuota *sizeQuota; - -@end +public class VIMSpace: VIMSizeQuota +{ + /// Whether the values of the upload_quota.space fields are for the lifetime quota or the periodic quota. Values can be `lifetime` or `periodic`. + @objc dynamic public private(set) var type: String? + + // MARK: - VIMMappable + + public override func getObjectMapping() -> Any + { + return ["showing" : "type"] + } +} diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUpload.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUpload.swift new file mode 100644 index 00000000..3a87fe8b --- /dev/null +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUpload.swift @@ -0,0 +1,111 @@ +// +// VIMUpload.swift +// Pods +// +// Created by Lehrer, Nicole on 4/18/18. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +/// Encapsulates the upload-related information on a video object. +public class VIMUpload: VIMModelObject +{ + /// The approach for uploading the video, expressed as a Swift-only enum + /// + /// - streaming: Two-step upload without using tus; this will be deprecated + /// - post: Upload with an HTML form or POST + /// - pull: Upload from a video file that already exists on the internet + /// - tus: Upload using the open-source tus protocol + public enum UploadApproach: String + { + case streaming + case post + case pull + case tus + } + + /// The status code for the availability of the uploaded video, expressed as a Swift-only enum + /// + /// - complete: The upload is complete + /// - error: The upload ended with an error + /// - underway: The upload is in progress + public enum UploadStatus: String + { + case complete + case error + case inProgress = "in_progress" + } + + /// The approach for uploading the video + @objc dynamic public private(set) var approach: String? + + /// The file size in bytes of the uploaded video + @objc dynamic public private(set) var size: NSNumber? + + /// The status code for the availability of the uploaded video + @objc dynamic public private(set) var status: String? + + /// The HTML form for uploading a video through the post approach + @objc dynamic public private(set) var form: String? + + /// The link of the video to capture through the pull approach + @objc dynamic public private(set) var link: String? + + /// The URI for completing the upload + @objc dynamic public private(set) var completeURI: String? + + /// The redirect URL for the upload app + @objc dynamic public private(set) var redirectURL: String? + + /// The link for sending video file data + @objc dynamic public private(set) var uploadLink: String? + + /// The approach for uploading the video, mapped to a Swift-only enum + public private(set) var uploadApproach: UploadApproach? + + /// The status code for the availability of the uploaded video, mapped to a Swift-only enum + public private(set) var uploadStatus: UploadStatus? + + // MARK: - VIMMappable Protocol Conformance + + /// Called when automatic object mapping completes + public override func didFinishMapping() + { + if let approachString = self.approach + { + self.uploadApproach = UploadApproach(rawValue: approachString) + } + + if let statusString = self.status + { + self.uploadStatus = UploadStatus(rawValue: statusString) + } + } + + /// Maps the property name that mirrors the literal JSON response to another property name. + /// Typically used to rename a property to one that follows this project's naming conventions. + /// + /// - Returns: A dictionary where the keys are the JSON response names and the values are the new property names. + public override func getObjectMapping() -> Any + { + return ["complete_uri": "completeURI", "redirect_url": "redirectURL"] + } +} diff --git a/VimeoUpload/Upload/Operations/Sync/WeeklyQuotaOperation.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUploadQuota.swift similarity index 51% rename from VimeoUpload/Upload/Operations/Sync/WeeklyQuotaOperation.swift rename to Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUploadQuota.swift index 7e3bb778..9927758e 100644 --- a/VimeoUpload/Upload/Operations/Sync/WeeklyQuotaOperation.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUploadQuota.swift @@ -1,9 +1,10 @@ // -// WeeklyQuotaOperation.swift -// VimeoUpload +// VIMUploadQuota.swift +// VimeoNetworking // -// Created by Alfred Hanssen on 11/9/15. -// Copyright © 2015 Vimeo. All rights reserved. +// Created by Lim, Jennifer on 3/26/18. +// +// Copyright © 2016 Vimeo. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -25,39 +26,38 @@ // import Foundation -import AVFoundation -import VimeoNetworking -public class WeeklyQuotaOperation: Operation -{ - private let user: VIMUser - private let fileSize: Float64 +public class VIMUploadQuota: VIMModelObject +{ + /// The values within `VIMSpace` reflect the lowest of lifetime or period for free and max. + @objc dynamic public private(set) var space: VIMSpace? - private(set) var result: FileSizeCheckResult? - private(set) var error: NSError? - - init(user: VIMUser, fileSize: Float64) - { - assert(fileSize > 0, "fileSize must be greater than 0") - - self.user = user - self.fileSize = fileSize + /// Represents the current quota period + @objc dynamic public private(set) var periodic: VIMPeriodic? - super.init() - } + /// Represents the lifetime quota period + @objc dynamic public private(set) var lifetime: VIMSizeQuota? - // MARK: Overrides - - override public func main() + public override func getClassForObjectKey(_ key: String!) -> AnyClass! { - if let free = self.user.uploadQuota?.sizeQuota?.free?.doubleValue + if key == "space" + { + return VIMSpace.self + } + else if key == "periodic" { - let success = free > self.fileSize - self.result = FileSizeCheckResult(fileSize: self.fileSize, availableSpace: free, success: success) + return VIMPeriodic.self } - else + else if key == "lifetime" { - self.error = NSError.error(withDomain: UploadErrorDomain.WeeklyQuotaOperation.rawValue, code: UploadLocalErrorCode.cannotEvaluateWeeklyQuota.rawValue, description: "User object did not contain uploadQuota.space information") + return VIMSizeQuota.self } + + return nil } + + /// Determines whether the user has a periodic storage quota limit or has a lifetime upload quota storage limit only. + @objc public lazy var isPeriodicQuota: Bool = { + return self.space?.type == "periodic" + }() } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUser.h b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUser.h index 2b2b1b54..647d4623 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUser.h +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUser.h @@ -33,13 +33,19 @@ @class VIMPreference; @class VIMUploadQuota; @class VIMUserBadge; +@class VIMLiveQuota; typedef NS_ENUM(NSInteger, VIMUserAccountType) { VIMUserAccountTypeBasic = 0, VIMUserAccountTypePro, VIMUserAccountTypePlus, - VIMUserAccountTypeBusiness + VIMUserAccountTypeBusiness, + VIMUserAccountTypeLivePro, + VIMUserAccountTypeLiveBusiness, + VIMUserAccountTypeLivePremium, + VIMUserAccountTypeProUnlimited, + VIMUserAccountTypeProducer }; @interface VIMUser : VIMModelObject @@ -61,6 +67,7 @@ typedef NS_ENUM(NSInteger, VIMUserAccountType) @property (nonatomic, strong, nullable) VIMPreference *preferences; @property (nonatomic, strong, nullable) VIMUploadQuota *uploadQuota; @property (nonatomic, copy, nullable) NSString *account; +@property (nonatomic, strong, nullable) VIMLiveQuota *liveQuota; - (nullable VIMConnection *)connectionWithName:(nonnull NSString *)connectionName; - (nullable VIMNotificationsConnection *)notificationsConnection; diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUser.m b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUser.m index 35483c4c..bba52257 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUser.m +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUser.m @@ -31,8 +31,18 @@ #import "VIMPictureCollection.h" #import "VIMPicture.h" #import "VIMPreference.h" -#import "VIMUploadQuota.h" #import "VIMUserBadge.h" +#import + +static NSString *const Basic = @"basic"; +static NSString *const Plus = @"plus"; +static NSString *const Pro = @"pro"; +static NSString *const Business = @"business"; +static NSString *const LivePro = @"live_pro"; +static NSString *const LiveBusiness = @"live_business"; +static NSString *const LivePremium = @"live_premium"; +static NSString *const ProUnlimited = @"pro_unlimited"; +static NSString *const Producer = @"producer"; @interface VIMUser () @@ -92,6 +102,11 @@ - (Class)getClassForObjectKey:(NSString *)key { return [VIMUploadQuota class]; } + + if ([key isEqualToString:@"live_quota"]) + { + return [VIMLiveQuota class]; + } return nil; } @@ -199,22 +214,42 @@ - (void)parseInteractions - (void)parseAccountType { - if ([self.account isEqualToString:@"plus"]) + if ([self.account isEqualToString:Plus]) { self.accountType = VIMUserAccountTypePlus; } - else if ([self.account isEqualToString:@"pro"]) + else if ([self.account isEqualToString:Pro]) { self.accountType = VIMUserAccountTypePro; } - else if ([self.account isEqualToString:@"basic"]) + else if ([self.account isEqualToString:Basic]) { self.accountType = VIMUserAccountTypeBasic; } - else if ([self.account isEqualToString:@"business"]) + else if ([self.account isEqualToString:Business]) { self.accountType = VIMUserAccountTypeBusiness; } + else if ([self.account isEqualToString:LivePro]) + { + self.accountType = VIMUserAccountTypeLivePro; + } + else if ([self.account isEqualToString:LiveBusiness]) + { + self.accountType = VIMUserAccountTypeLiveBusiness; + } + else if ([self.account isEqualToString:LivePremium]) + { + self.accountType = VIMUserAccountTypeLivePremium; + } + else if ([self.account isEqualToString:ProUnlimited]) + { + self.accountType = VIMUserAccountTypeProUnlimited; + } + else if ([self.account isEqualToString:Producer]) + { + self.accountType = VIMUserAccountTypeProducer; + } } - (void)parseEmails @@ -270,13 +305,23 @@ - (NSString *)accountTypeAnalyticsIdentifier { default: case VIMUserAccountTypeBasic: - return @"basic"; + return Basic; case VIMUserAccountTypePlus: - return @"plus"; + return Plus; case VIMUserAccountTypePro: - return @"pro"; + return Pro; case VIMUserAccountTypeBusiness: - return @"business"; + return Business; + case VIMUserAccountTypeLivePro: + return LivePro; + case VIMUserAccountTypeLiveBusiness: + return LiveBusiness; + case VIMUserAccountTypeLivePremium: + return LivePremium; + case VIMUserAccountTypeProUnlimited: + return ProUnlimited; + case VIMUserAccountTypeProducer: + return Producer; } } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUserBadge.h b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUserBadge.h index 247c3b3f..66083571 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUserBadge.h +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUserBadge.h @@ -30,12 +30,16 @@ typedef NS_ENUM(NSInteger, VIMUserBadgeType) { VIMUserBadgeTypeDefault = 0, VIMUserBadgeTypePlus, + // PRO and PRO Unlimited have the same BadgeType `PRO` [JL 07/18/2018] VIMUserBadgeTypePro, VIMUserBadgeTypeBusiness, + VIMUserBadgeTypeLiveBusiness, + VIMUserBadgeTypeLivePro, VIMUserBadgeTypeAlum, VIMUserBadgeTypeStaff, VIMUserBadgeTypeSupport, - VIMUserBadgeTypeCuration + VIMUserBadgeTypeCuration, + VIMUserBadgeTypeProducer }; @interface VIMUserBadge : VIMModelObject diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUserBadge.m b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUserBadge.m index 984d9c90..c1d8ca8e 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUserBadge.m +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMUserBadge.m @@ -35,6 +35,9 @@ @implementation VIMUserBadge static NSString *const Curation = @"curation"; static NSString *const Support = @"support"; static NSString *const Alum = @"alum"; +static NSString *const LivePro = @"live_pro"; +static NSString *const LiveBusiness = @"live_business"; +static NSString *const Producer = @"producer"; - (void)didFinishMapping { @@ -71,6 +74,18 @@ - (void)parseBadge { self.badgeType = VIMUserBadgeTypeAlum; } + else if ([self.type isEqualToString:LivePro]) + { + self.badgeType = VIMUserBadgeTypeLivePro; + } + else if ([self.type isEqualToString:LiveBusiness]) + { + self.badgeType = VIMUserBadgeTypeLiveBusiness; + } + else if ([self.type isEqualToString:Producer]) + { + self.badgeType = VIMUserBadgeTypeProducer; + } else { self.badgeType = VIMUserBadgeTypeDefault; diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMVideo.h b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMVideo.h index 370864f8..643fb411 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMVideo.h +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMVideo.h @@ -36,6 +36,9 @@ @class VIMVideoPlayRepresentation; @class VIMBadge; @class Spatial; +@class VIMLive; +@class VIMReviewPage; +@class VIMUpload; extern NSString * __nonnull VIMContentRating_Language; extern NSString * __nonnull VIMContentRating_Drugs; @@ -45,13 +48,15 @@ extern NSString * __nonnull VIMContentRating_Unrated; extern NSString * __nonnull VIMContentRating_Safe; typedef NS_ENUM(NSUInteger, VIMVideoProcessingStatus) { + VIMVideoProcessingStatusUnavailable, VIMVideoProcessingStatusAvailable, VIMVideoProcessingStatusUploading, VIMVideoProcessingStatusTranscodeStarting, // New state added to API 11/18/2015 with in-app support added 2/11/2016 [AH] VIMVideoProcessingStatusTranscoding, VIMVideoProcessingStatusUploadingError, VIMVideoProcessingStatusTranscodingError, - VIMVideoProcessingStatusQuotaExceeded + VIMVideoProcessingStatusQuotaExceeded, + VIMVideoProcessingStatusTotalCapExceeded }; @interface VIMVideo : VIMModelObject @@ -84,6 +89,9 @@ typedef NS_ENUM(NSUInteger, VIMVideoProcessingStatus) { @property (nonatomic, copy, nullable) NSString *password; @property (nonatomic, strong, nullable) VIMBadge *badge; @property (nonatomic, strong, nullable) Spatial *spatial; +@property (nonatomic, strong, nullable) VIMLive *live; +@property (nonatomic, strong, nullable) VIMReviewPage *reviewPage; +@property (nonatomic, strong, nullable) VIMUpload *upload; @property (nonatomic, assign) VIMVideoProcessingStatus videoStatus; @@ -108,9 +116,59 @@ typedef NS_ENUM(NSUInteger, VIMVideoProcessingStatus) { - (BOOL)isDRMProtected; - (NSInteger)likesCount; - (NSInteger)commentsCount; + +/** + Checks for the existence of a Spatial object on this VIMVideo and returns @p true if one exists. + + @return Returns @p true if a Spatial object exists for this VIMVideo. + */ - (BOOL)is360; +/** + Checks for the existence of a VIMLive object on this VIMVideo and returns @p true if one exists, but does not check the state of the live event. + + @return Returns @p true if a VIMLive object exists for this VIMVideo. + */ +- (BOOL)isLive; + +/** + Determines whether the current video represents a live event and if the event is in the pre, mid, or archiving state indicating that a live event is currently underway. + + @return Returns @p true if the live video's broadcast is about to begin, is underway, or is being archived. Returns @p false if the live video's broadcast has already been archived. + */ +- (BOOL)isLiveEventInProgress; + +/** + Determines whether the current video represents a live event and whether or not the broadcast has started. + + @return Returns @p true if the live video's broadcast has not begun. + */ +- (BOOL)isPreBroadcast; + +/** + Determines whether the current video represents a live event and if the broadcast is underway. + + @return Returns @p true when the live video's broadcast is underway. + */ +- (BOOL)isMidBroadcast; + +/** + Determines whether the current video represents a live event that is in the process of being archived. + + @return Returns @p true when the live video's broadcast has ended and is being archived. + */ +- (BOOL)isArchivingBroadcast; + +/** + Determines whether the current video represents a live event, whether it has ended, and if an archive of the broadcast is ready for playback. + + @return Returns @p true when the live video event has ended and an archive of the broadcast is available. + */ +- (BOOL)isPostBroadcast; + - (void)setIsLiked:(BOOL)isLiked; - (void)setIsWatchLater:(BOOL)isWatchLater; +- (BOOL)hasReviewPage; +- (BOOL)canDownloadFromDesktop; @end diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMVideo.m b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMVideo.m index a77b0f3e..3a80aacc 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMVideo.m +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMVideo.m @@ -77,7 +77,9 @@ - (NSDictionary *)getObjectMapping { return @{@"description": @"videoDescription", @"pictures": @"pictureCollection", - @"play": @"playRepresentation"}; + @"play": @"playRepresentation", + @"review_page": @"reviewPage", + }; } - (Class)getClassForCollectionKey:(NSString *)key @@ -133,7 +135,22 @@ - (Class)getClassForObjectKey:(NSString *)key if ([key isEqualToString:@"spatial"]) { - return [Spatial class]; + return [Spatial class]; + } + + if ([key isEqualToString:@"live"]) + { + return [VIMLive class]; + } + + if ([key isEqualToString:@"review_page"]) + { + return [VIMReviewPage class]; + } + + if ([key isEqualToString:@"upload"]) + { + return [VIMUpload class]; } return nil; @@ -309,6 +326,7 @@ - (void)formatModifiedTime - (void)setVideoStatus { NSDictionary *statusDictionary = [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInt:VIMVideoProcessingStatusUnavailable], @"unavailable", [NSNumber numberWithInt:VIMVideoProcessingStatusAvailable], @"available", [NSNumber numberWithInt:VIMVideoProcessingStatusUploading], @"uploading", [NSNumber numberWithInt:VIMVideoProcessingStatusTranscoding], @"transcoding", @@ -316,6 +334,7 @@ - (void)setVideoStatus [NSNumber numberWithInt:VIMVideoProcessingStatusUploadingError], @"uploading_error", [NSNumber numberWithInt:VIMVideoProcessingStatusTranscodingError], @"transcoding_error", [NSNumber numberWithInt:VIMVideoProcessingStatusQuotaExceeded], @"quota_exceeded", + [NSNumber numberWithInt:VIMVideoProcessingStatusTotalCapExceeded], @"total_cap_exceeded", nil]; NSNumber *number = [statusDictionary objectForKey:self.status]; @@ -496,4 +515,55 @@ - (BOOL)is360 return self.spatial != nil; } +- (BOOL)isLive +{ + return self.live != nil; +} + +- (BOOL)isLiveEventInProgress +{ + return self.live != nil && (self.isPreBroadcast || self.isMidBroadcast || self.isArchivingBroadcast); +} + +- (BOOL)isPreBroadcast +{ + return self.isLive && ([self.live.status isEqual: VIMLive.LiveStreamStatusUnavailable] || [self.live.status isEqual: VIMLive.LiveStreamStatusReady] || [self.live.status isEqual: VIMLive.LiveStreamStatusPending]); +} + +- (BOOL)isMidBroadcast +{ + return self.isLive && [self.live.status isEqual: VIMLive.LiveStreamStatusStreaming]; +} + +- (BOOL)isArchivingBroadcast +{ + return self.isLive && [self.live.status isEqualToString:VIMLive.LiveStreamStatusArchiving]; +} + +- (BOOL)isPostBroadcast +{ + return self.isLive && ([self.live.status isEqual: VIMLive.LiveStreamStatusDone]); +} + +- (BOOL)hasReviewPage +{ + NSString *trimmedReviewLink = [self.reviewPage.link stringByReplacingOccurrencesOfString:@" " withString:@""]; + + return self.reviewPage != nil && + self.reviewPage.isActive.boolValue == true && + self.reviewPage.link != nil && + trimmedReviewLink.length > 0; +} + +- (BOOL)canDownloadFromDesktop +{ + if ([self.privacy.canDownload respondsToSelector: @selector(boolValue)]) + { + return [self.privacy.canDownload boolValue]; + } + + NSAssert(false, @"`video.privacy.canDownload` is an unexpected type."); + return false; +} + @end diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMVideoPlayFile.h b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMVideoPlayFile.h index 8408c132..8a9fd74c 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMVideoPlayFile.h +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMVideoPlayFile.h @@ -28,11 +28,14 @@ #import "VIMModelObject.h" +@class VIMLiveHeartbeat; + @interface VIMVideoPlayFile : VIMModelObject @property (nonatomic, copy, nullable) NSString *link; @property (nonatomic, strong, nullable) NSDate *expirationDate; @property (nonatomic, copy, nullable) NSString *log; +@property (nonatomic, strong, nullable) VIMLiveHeartbeat *heartbeat; - (BOOL)isExpired; diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMVideoPlayFile.m b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMVideoPlayFile.m index b55960a4..4186df02 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMVideoPlayFile.m +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Models/VIMVideoPlayFile.m @@ -25,6 +25,7 @@ // #import "VIMVideoPlayFile.h" +#import @interface VIMVideoPlayFile() @@ -36,6 +37,16 @@ @implementation VIMVideoPlayFile #pragma mark - VIMMappable +- (Class)getClassForObjectKey:(NSString *)key +{ + if ([key isEqualToString:@"live"]) + { + return [VIMLiveHeartbeat class]; + } + + return nil; +} + - (void)didFinishMapping { if ([self.expires isKindOfClass:[NSString class]]) @@ -57,7 +68,7 @@ - (void)didFinishMapping - (NSDictionary *)getObjectMapping { - return @{@"link_expiration_time": @"expires"}; + return @{@"link_expiration_time": @"expires", @"live": @"heartbeat"}; } #pragma mark - Instance methods diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/NSError+Extensions.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/NSError+Extensions.swift index f221590d..c5ee3c86 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/NSError+Extensions.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/NSError+Extensions.swift @@ -35,7 +35,7 @@ public enum VimeoErrorKey: String } /// Convenience methods used to parse `NSError`s returned by Vimeo api responses -public extension NSError +@objc public extension NSError { /// Returns true if the error is a 503 Service Unavailable error public var isServiceUnavailableError: Bool @@ -83,7 +83,7 @@ public extension NSError - returns: a new `NSError` */ - class func error(withDomain domain: String?, code: Int?, description: String?) -> NSError + @nonobjc class func error(withDomain domain: String?, code: Int?, description: String?) -> NSError { var error = NSError(domain: VimeoErrorKey.VimeoErrorDomain.rawValue, code: 0, userInfo: nil) @@ -119,7 +119,7 @@ public extension NSError - returns: An error with additional user info */ - func error(byAddingUserInfo userInfo: [AnyHashable: Any]) -> NSError + func error(byAddingUserInfo userInfo: [String: Any]) -> NSError { return self.error(byAddingDomain: nil, code: nil, userInfo: userInfo) } @@ -145,7 +145,7 @@ public extension NSError - returns: An error with additional information in the user info dictionary */ - func error(byAddingDomain domain: String?, code: Int?, userInfo: [AnyHashable: Any]?) -> NSError + @nonobjc func error(byAddingDomain domain: String?, code: Int?, userInfo: [String: Any]?) -> NSError { var augmentedInfo = self.userInfo @@ -180,7 +180,7 @@ public extension NSError } /// Returns the status code of the failing response, if available - public var statusCode: Int? + @nonobjc public var statusCode: Int? { if let response = self.userInfo[AFNetworkingOperationFailingURLResponseErrorKey] as? HTTPURLResponse { @@ -191,7 +191,7 @@ public extension NSError } /// Returns the api error code of the failing response, if available - public var vimeoServerErrorCode: Int? + @nonobjc public var vimeoServerErrorCode: Int? { if let errorCode = (self.userInfo[Constants.VimeoErrorCodeKeyLegacy] as? Int) { @@ -218,7 +218,7 @@ public extension NSError { var errorCodes: [Int] = [] - if let json = self.errorResponseBodyJSON, let invalidParameters = json[Constants.VimeoInvalidParametersKey] as? [[AnyHashable: Any]] + if let json = self.errorResponseBodyJSON, let invalidParameters = json[Constants.VimeoInvalidParametersKey] as? [[String: Any]] { for invalidParameter in invalidParameters { @@ -233,13 +233,13 @@ public extension NSError } /// Returns the api error JSON dictionary, if available - public var errorResponseBodyJSON: [AnyHashable: Any]? + public var errorResponseBodyJSON: [String: Any]? { if let data = self.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] as? Data { do { - let json = try JSONSerialization.jsonObject(with: data, options: []) as? [AnyHashable: Any] + let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] return json } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/NetworkingNotification.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/NetworkingNotification.swift index 0cc6b1c2..b7768e80 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/NetworkingNotification.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/NetworkingNotification.swift @@ -83,7 +83,7 @@ public enum NetworkingNotification: String - parameter object: an optional object to pass to observers of this `NetworkingNotification` */ - public func post(object: Any?, userInfo: [AnyHashable: Any]? = nil) + public func post(object: Any?, userInfo: [String: Any]? = nil) { DispatchQueue.main.async { diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Authentication.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Authentication.swift index 8d478d9e..7258710c 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Authentication.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Authentication.swift @@ -26,6 +26,8 @@ import Foundation +public typealias AuthenticationRequest = Request + private let GrantTypeKey = "grant_type" private let ScopeKey = "scope" private let CodeKey = "code" @@ -38,6 +40,7 @@ private let TokenKey = "token" private let PinCodeKey = "user_code" private let DeviceCodeKey = "device_code" private let AccessTokenKey = "access_token" +private let MarketingOptIn = "marketing_opt_in" private let GrantTypeClientCredentials = "client_credentials" private let GrantTypeAuthorizationCode = "authorization_code" @@ -55,13 +58,10 @@ private let AuthenticationPathPinCode = "oauth/device" private let AuthenticationPathPinCodeAuthorize = "oauth/device/authorize" private let AuthenticationPathAppTokenExchange = "oauth/appexchange" - // MARK: - private let AuthenticationPathTokens = "/tokens" -typealias AuthenticationRequest = Request - extension Request where ModelType: VIMAccount { /** @@ -76,7 +76,7 @@ extension Request where ModelType: VIMAccount let parameters = [GrantTypeKey: GrantTypeClientCredentials, ScopeKey: Scope.combine(scopes)] - return Request(method: .POST, path: AuthenticationPathClientCredentials, parameters: parameters, cacheFetchPolicy: .networkOnly, shouldCacheResponse: false) + return Request(method: .POST, path: AuthenticationPathClientCredentials, parameters: parameters) } /** @@ -93,7 +93,7 @@ extension Request where ModelType: VIMAccount CodeKey: code, RedirectURIKey: redirectURI] - return Request(method: .POST, path: AuthenticationPathCodeGrant, parameters: parameters, cacheFetchPolicy: .networkOnly, shouldCacheResponse: false) + return Request(method: .POST, path: AuthenticationPathCodeGrant, parameters: parameters) } /** @@ -112,7 +112,7 @@ extension Request where ModelType: VIMAccount UsernameKey: email, PasswordKey: password] - return Request(method: .POST, path: AuthenticationPathAccessToken, parameters: parameters, cacheFetchPolicy: .networkOnly, shouldCacheResponse: false) + return Request(method: .POST, path: AuthenticationPathAccessToken, parameters: parameters) } /** @@ -122,7 +122,7 @@ extension Request where ModelType: VIMAccount */ static func verifyAccessTokenRequest() -> Request { - return Request(method: .GET, path: AuthenticationPathAccessTokenVerify, cacheFetchPolicy: .networkOnly, shouldCacheResponse: false) + return Request(method: .GET, path: AuthenticationPathAccessTokenVerify) } /** @@ -135,14 +135,15 @@ extension Request where ModelType: VIMAccount - returns: a new `Request` */ - static func joinRequest(withName name: String, email: String, password: String, scopes: [Scope]) -> Request + static func joinRequest(withName name: String, email: String, password: String, marketingOptIn: String, scopes: [Scope]) -> Request { let parameters = [ScopeKey: Scope.combine(scopes), DisplayNameKey: name, EmailKey: email, - PasswordKey: password] + PasswordKey: password, + MarketingOptIn: marketingOptIn] - return Request(method: .POST, path: AuthenticationPathUsers, parameters: parameters, cacheFetchPolicy: .networkOnly, shouldCacheResponse: false) + return Request(method: .POST, path: AuthenticationPathUsers, parameters: parameters) } /** @@ -159,7 +160,7 @@ extension Request where ModelType: VIMAccount ScopeKey: Scope.combine(scopes), TokenKey: facebookToken] - return Request(method: .POST, path: AuthenticationPathFacebookToken, parameters: parameters, cacheFetchPolicy: .networkOnly, shouldCacheResponse: false) + return Request(method: .POST, path: AuthenticationPathFacebookToken, parameters: parameters) } /** @@ -170,12 +171,13 @@ extension Request where ModelType: VIMAccount - returns: a new `Request` */ - static func joinFacebookRequest(withToken facebookToken: String, scopes: [Scope]) -> Request + static func joinFacebookRequest(withToken facebookToken: String, marketingOptIn: String, scopes: [Scope]) -> Request { let parameters = [ScopeKey: Scope.combine(scopes), - TokenKey: facebookToken] + TokenKey: facebookToken, + MarketingOptIn: marketingOptIn] - return Request(method: .POST, path: AuthenticationPathUsers, parameters: parameters, cacheFetchPolicy: .networkOnly, shouldCacheResponse: false) + return Request(method: .POST, path: AuthenticationPathUsers, parameters: parameters) } /** @@ -191,7 +193,7 @@ extension Request where ModelType: VIMAccount let parameters = [PinCodeKey: userCode, DeviceCodeKey: deviceCode] - return Request(method: .POST, path: AuthenticationPathPinCodeAuthorize, parameters: parameters, cacheFetchPolicy: .networkOnly, shouldCacheResponse: false) + return Request(method: .POST, path: AuthenticationPathPinCodeAuthorize, parameters: parameters) } /** @@ -205,7 +207,7 @@ extension Request where ModelType: VIMAccount { let parameters = [AccessTokenKey: accessToken] - return Request(method: .POST, path: AuthenticationPathAppTokenExchange, parameters: parameters, cacheFetchPolicy: .networkOnly, shouldCacheResponse: false) + return Request(method: .POST, path: AuthenticationPathAppTokenExchange, parameters: parameters) } } @@ -230,7 +232,7 @@ extension Request where ModelType: VIMNullResponse */ public static func resetPasswordRequest(withEmail email: String) -> Request { - let path = "/users/" + email + "/password/reset" + let path = "/users/\(email)/password/reset" return Request(method: .POST, path: path) } @@ -254,6 +256,6 @@ extension Request where ModelType: PinCodeInfo let parameters = [GrantTypeKey: GrantTypePinCode, ScopeKey: Scope.combine(scopes)] - return Request(method: .POST, path: AuthenticationPathPinCode, parameters: parameters, cacheFetchPolicy: .networkOnly, shouldCacheResponse: false) + return Request(method: .POST, path: AuthenticationPathPinCode, parameters: parameters) } } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Cache.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Cache.swift index 68469636..9fa5047a 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Cache.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Cache.swift @@ -35,7 +35,7 @@ public extension Request let url = NSURL(string: self.path) let urlPath = url?.path ?? "" - var cacheKey = "cached" + urlPath + "." + String(self.path.hashValue) + var cacheKey = "cached\(urlPath).\(self.path.hashValue)" cacheKey = cacheKey.replacingOccurrences(of: "/", with: ".") return cacheKey diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Configs.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Configs.swift index 6365f131..46663ba3 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Configs.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Configs.swift @@ -23,11 +23,11 @@ extension Request if cache { - return Request(method: .GET, path: path, cacheFetchPolicy: .cacheOnly) + return Request(method: .GET, path: path, useCache: true) } else { - return Request(method: .GET, path: path, cacheFetchPolicy: .networkOnly, shouldCacheResponse: true) + return Request(method: .GET, path: path, cacheResponse: true) } } } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Notifications.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Notifications.swift index 5a830160..8f8bb62a 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Notifications.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Notifications.swift @@ -10,7 +10,7 @@ public extension Request { private static var Path: String { return "/me/notifications/subscriptions" } - private typealias ParameterDictionary = [AnyHashable: Any] + private typealias ParameterDictionary = [String: Any] private static var SubscriptionsPathComponent: String { return "/subscriptions" } @@ -51,7 +51,7 @@ public extension Request private static func subscriptionsURI(forNotificationsURI notificationsURI: String, deviceToken: String) -> String { - return notificationsURI + "/\(deviceToken)" + SubscriptionsPathComponent + return "\(notificationsURI)/\(deviceToken)\(SubscriptionsPathComponent)" } public static func markNotificationAsNotNewRequest(forNotification notification: VIMNotification, notificationsURI: String) -> Request diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Picture.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Picture.swift index 5d3c4d2a..e36776a9 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Picture.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Picture.swift @@ -20,7 +20,7 @@ public extension Request */ public static func createPictureRequest(forUserURI userURI: String) -> Request { - let uri = userURI + "/pictures" + let uri = "\(userURI)/pictures" return Request(method: .POST, path: uri) } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Trigger.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Trigger.swift index a5f50f81..b10b26d7 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Trigger.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Trigger.swift @@ -92,6 +92,6 @@ extension Request { let deviceTypeIdentifier = UIDevice.current.userInterfaceIdiom == .phone ? "iphone" : "ipad" - return "me/devices/" + deviceTypeIdentifier + "/" + deviceToken + return "me/devices/\(deviceTypeIdentifier)/\(deviceToken)" } } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Video.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Video.swift index a7e4b64f..b0527ec0 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Video.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Request+Video.swift @@ -38,7 +38,9 @@ public extension Request private static var VideosPath: String { return "/videos" } - // MARK: - + private static var SelectedUsersPrivacyPath: String { return "/privacy/users" } + + // MARK: - /** Create a `Request` to get a specific video @@ -92,7 +94,9 @@ public extension Request { let parameters = [VimeoClient.Constants.PerPageKey: 100] - return Request(path: videoURI, parameters: parameters) + let path = videoURI + self.SelectedUsersPrivacyPath + + return Request(path: path, parameters: parameters) } // MARK: - Search diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Request.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Request.swift index 925a18df..4ba9121d 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Request.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Request.swift @@ -27,34 +27,6 @@ import Foundation import AFNetworking -/// Describes how a request should query the cache -public enum CacheFetchPolicy -{ - /// Only request cached responses. No network request is made. - case cacheOnly - - /// Try to load from both cache and network, note that two results may be returned when using this method (cached, then network) - case cacheThenNetwork - - /// Only try to load the request from network. The cache is not queried - case networkOnly - - /// First try the network request, then fallback to cache if it fails - case tryNetworkThenCache - - /** - Construct the default cache fetch policy for a given `Method` - - - parameter method: the request `Method` - - - returns: the default cache policy for the provided `Method` - */ - static func defaultPolicyForMethod(method: VimeoClient.Method) -> CacheFetchPolicy - { - return .networkOnly - } -} - /// Describes how a request should handle retrying after failure public enum RetryPolicy { @@ -118,10 +90,10 @@ public struct Request public let modelKeyPath: String? /// describes how this request should query for cached responses - internal(set) public var cacheFetchPolicy: CacheFetchPolicy + public let useCache: Bool /// whether a successful response to this request should be stored in cache - public let shouldCacheResponse: Bool + public let cacheResponse: Bool /// describes how the request should handle retrying after failure internal(set) public var retryPolicy: RetryPolicy @@ -145,16 +117,16 @@ public struct Request path: String, parameters: Any? = nil, modelKeyPath: String? = nil, - cacheFetchPolicy: CacheFetchPolicy? = nil, - shouldCacheResponse: Bool? = nil, + useCache: Bool = false, + cacheResponse: Bool = false, retryPolicy: RetryPolicy? = nil) { self.method = method self.path = path self.parameters = parameters self.modelKeyPath = modelKeyPath - self.cacheFetchPolicy = cacheFetchPolicy ?? CacheFetchPolicy.defaultPolicyForMethod(method: method) - self.shouldCacheResponse = shouldCacheResponse ?? (method == .GET) + self.useCache = useCache + self.cacheResponse = cacheResponse self.retryPolicy = retryPolicy ?? RetryPolicy.defaultPolicyForMethod(for: method) } @@ -169,7 +141,7 @@ public struct Request { let queryString = AFQueryStringFromParameters(parameters) - if queryString.characters.count > 0 + if queryString.count > 0 { components?.query = queryString } @@ -201,8 +173,8 @@ public struct Request path: updatedPath, parameters: updatedParameters, modelKeyPath: self.modelKeyPath, - cacheFetchPolicy: self.cacheFetchPolicy, - shouldCacheResponse: self.shouldCacheResponse, + useCache: self.useCache, + cacheResponse: self.cacheResponse, retryPolicy: self.retryPolicy) } } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Response.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Response.swift index 3ee4b27a..45de8d0f 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Response.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Response.swift @@ -40,9 +40,6 @@ import Foundation /// Whether this `Response` was generated by a cache query public var isCachedResponse: Bool - /// Whether this `Response` will be the final one received for it's associated `Request` - public var isFinalResponse: Bool - /// Total amount of items in the collection associated with this response public let totalCount: Int? @@ -64,7 +61,7 @@ import Foundation /// The request for the last page associated with this collection response, if one exists public let lastPageRequest: Request? - // MARK: - + // MARK: - /** Creates a new `Response` @@ -72,7 +69,6 @@ import Foundation - parameter model: The parsed model object returned by the response - parameter json: The raw JSON dictionary returned by the response - parameter isCachedResponse: Whether this `Response` was generated by a cache query, defaults to false - - parameter isFinalResponse: Whether this `Response` will be the final one received for it's associated `Request`, defaults to true - parameter totalCount: Total amount of items in the collection associated with this response - parameter page: The page number for this response, relevant if associated with a collection - parameter itemsPerPage: The maximum number of items on a page of this response, if associated with a collection @@ -86,7 +82,6 @@ import Foundation init(model: ModelType, json: VimeoClient.ResponseDictionary, isCachedResponse: Bool = false, - isFinalResponse: Bool = true, totalCount: Int? = nil, page: Int? = nil, itemsPerPage: Int? = nil, @@ -98,7 +93,6 @@ import Foundation self.model = model self.json = json self.isCachedResponse = isCachedResponse - self.isFinalResponse = isFinalResponse self.totalCount = totalCount self.page = page self.itemsPerPage = itemsPerPage diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/ResponseCache.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/ResponseCache.swift index d0350a51..99b84d64 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/ResponseCache.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/ResponseCache.swift @@ -40,7 +40,7 @@ private protocol Cache } /// Response cache handles the storage of JSON response dictionaries indexed by their associated `Request`. It contains both memory and disk caching functionality -final internal class ResponseCache +final public class ResponseCache { private struct Constant { @@ -171,7 +171,7 @@ final internal class ResponseCache let fileManager = FileManager() let directoryPath = self.cachesDirectoryURL().path - guard let filePath = self.fileURL(forKey: key)?.path else + guard let filePath = self.fileURL(forKey: key)?.path else { assertionFailure("No cache path found.") return @@ -195,7 +195,7 @@ final internal class ResponseCache { print("ResponseDiskCache error: \(error)") } - }) + }) } func responseDictionary(forKey key: String, completion: @escaping (VimeoClient.ResponseDictionary?) -> Void) @@ -270,7 +270,7 @@ final internal class ResponseCache { print("Removal of disk cache for \(key) failed with error \(error)") } - }) + }) } func removeAllResponseDictionaries() @@ -294,7 +294,7 @@ final internal class ResponseCache { print("Could not clear disk cache.") } - }) + }) } // MARK: - directories diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Result.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Result.swift index 19592df8..266d871f 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Result.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Result.swift @@ -41,7 +41,7 @@ public enum Result case failure(error: NSError) } -/// `ResultCompletion` creates a generic typealias to generally define completion blocks that return a `Result` +/// `ResultCompletion` creates a generic typealias to generally define completion blocks that return a `Result` public enum ResultCompletion { public typealias T = (Result) -> Void diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/Scope.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/Scope.swift index fb2fbb1b..13a773bd 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/Scope.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/Scope.swift @@ -26,33 +26,36 @@ import Foundation - /// `Scope` describes a permission that your application requests from the API +/// `Scope` describes a permission that your application requests from the API public enum Scope: String { - /// View public videos + /// View public videos case Public = "public" - /// View private videos + /// View private videos case Private = "private" - /// View Vimeo On Demand purchase history + /// View Vimeo On Demand purchase history case Purchased = "purchased" - /// Create new videos, groups, albums, etc. + /// Create new videos, groups, albums, etc. case Create = "create" - /// Edit videos, groups, albums, etc. + /// Edit videos, groups, albums, etc. case Edit = "edit" - /// Delete videos, groups, albums, etc. + /// Delete videos, groups, albums, etc. case Delete = "delete" - /// Interact with a video on behalf of a user, such as liking a video or adding it to your watch later queue + /// Interact with a video on behalf of a user, such as liking a video or adding it to your watch later queue case Interact = "interact" - /// Upload a video + /// Upload a video case Upload = "upload" + /// Receive live-related statistics. + case Stats = "stats" + /** Combines an array of scopes into a scope string as expected by the api diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoClient.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoClient.swift index 028c32fc..41e82a65 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoClient.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoClient.swift @@ -27,12 +27,12 @@ import Foundation /// `VimeoClient` handles a rich assortment of functionality focused around interacting with the Vimeo API. A client object tracks an authenticated account, handles the low-level execution of requests through a session manager with caching functionality, presents a high-level `Request` and `Response` interface, and notifies of globally relevant events and errors through `Notification`s -/// +/// /// To start using a client, first instantiate an `AuthenticationController` to load a stored account or authenticate a new one. Next, create `Request` instances and pass them into the `request` function, which returns `Response`s on success. final public class VimeoClient { - // MARK: - + // MARK: - /// HTTP methods available for requests public enum Method: String @@ -61,7 +61,8 @@ final public class VimeoClient /// The path of the request public let path: String? - fileprivate let task: URLSessionDataTask? + /// The data task of the request + public let task: URLSessionDataTask? /** Cancel the request @@ -73,13 +74,13 @@ final public class VimeoClient } /// Dictionary containing URL parameters for a request - public typealias RequestParametersDictionary = [AnyHashable: Any] + public typealias RequestParametersDictionary = [String: Any] /// Array containing URL parameters for a request public typealias RequestParametersArray = [Any] /// Dictionary containing a JSON response - public typealias ResponseDictionary = [AnyHashable: Any] + public typealias ResponseDictionary = [String: Any] /// Domain for errors generated by `VimeoClient` public static let ErrorDomain = "VimeoClientErrorDomain" @@ -159,7 +160,7 @@ final public class VimeoClient public func notifyObserversAccountChanged(forAccount account: VIMAccount?, previousAccount: VIMAccount?) { NetworkingNotification.authenticatedAccountDidChange.post(object: account, - userInfo: [UserInfoKey.previousAccount.rawValue : previousAccount ?? NSNull()]) + userInfo: [UserInfoKey.previousAccount.rawValue as String : previousAccount ?? NSNull()]) } // MARK: - Request @@ -173,127 +174,97 @@ final public class VimeoClient - returns: a `RequestToken` for the in-flight request */ - public func request(_ request: Request, completionQueue: DispatchQueue = DispatchQueue.main, completion: @escaping ResultCompletion>.T) -> RequestToken + public func request(_ request: Request, completionQueue: DispatchQueue = DispatchQueue.main, completion: @escaping ResultCompletion>.T) -> RequestToken { - var networkRequestCompleted = false - - switch request.cacheFetchPolicy + if request.useCache { - case .cacheOnly, .cacheThenNetwork: - self.responseCache.response(forRequest: request) { result in - if networkRequestCompleted - { - // If the network request somehow completes before the cache, abort any cache action [RH] (4/21/16) - - return - } - switch result { case .success(let responseDictionary): if let responseDictionary = responseDictionary { - self.handleTaskSuccess(forRequest: request, task: nil, responseObject: responseDictionary, isCachedResponse: true, isFinalResponse: request.cacheFetchPolicy == .cacheOnly, completionQueue: completionQueue, completion: completion) + self.handleTaskSuccess(forRequest: request, task: nil, responseObject: responseDictionary, isCachedResponse: true, completionQueue: completionQueue, completion: completion) } - else if request.cacheFetchPolicy == .cacheOnly + else { - let description = "Cached response not found" - let error = NSError(domain: type(of: self).ErrorDomain, code: LocalErrorCode.cachedResponseNotFound.rawValue, userInfo: [NSLocalizedDescriptionKey: description]) + let error = NSError(domain: type(of: self).ErrorDomain, code: LocalErrorCode.cachedResponseNotFound.rawValue, userInfo: [NSLocalizedDescriptionKey: "Cached response not found"]) self.handleError(error, request: request) - completionQueue.async - { + completionQueue.async { + completion(.failure(error: error)) } } - else - { - // no action required for a cache miss with a network request pending [RH] - } case .failure(let error): - print("cache failure: \(error)") - self.handleError(error, request: request) - if request.cacheFetchPolicy == .cacheOnly - { - completionQueue.async - { - completion(.failure(error: error)) - } - } - else - { - // no action required for a cache error with a network request pending [RH] + completionQueue.async { + + completion(.failure(error: error)) } } } - - if request.cacheFetchPolicy == .cacheOnly - { - return RequestToken(path: request.path, task: nil) - } - - case .networkOnly, .tryNetworkThenCache: - break + + return RequestToken(path: request.path, task: nil) } - - let success: (URLSessionDataTask, Any?) -> Void = { (task, responseObject) in - - DispatchQueue.global(qos: .userInitiated).async { - networkRequestCompleted = true - self.handleTaskSuccess(forRequest: request, task: task, responseObject: responseObject, completionQueue: completionQueue, completion: completion) + else + { + let success: (URLSessionDataTask, Any?) -> Void = { (task, responseObject) in + + DispatchQueue.global(qos: .userInitiated).async { + + self.handleTaskSuccess(forRequest: request, task: task, responseObject: responseObject, completionQueue: completionQueue, completion: completion) + } } - } - - let failure: (URLSessionDataTask?, Error) -> Void = { (task, error) in - DispatchQueue.global(qos: .userInitiated).async { - networkRequestCompleted = true - self.handleTaskFailure(forRequest: request, task: task, error: error as NSError, completionQueue: completionQueue, completion: completion) + + let failure: (URLSessionDataTask?, Error) -> Void = { (task, error) in + + DispatchQueue.global(qos: .userInitiated).async { + + self.handleTaskFailure(forRequest: request, task: task, error: error as NSError, completionQueue: completionQueue, completion: completion) + } } - } - - let path = request.path - let parameters = request.parameters - - let task: URLSessionDataTask? - - switch request.method - { - case .GET: - task = self.sessionManager?.get(path, parameters: parameters, progress: nil, success: success, failure: failure) - case .POST: - task = self.sessionManager?.post(path, parameters: parameters, progress: nil, success: success, failure: failure) - case .PUT: - task = self.sessionManager?.put(path, parameters: parameters, success: success, failure: failure) - case .PATCH: - task = self.sessionManager?.patch(path, parameters: parameters, success: success, failure: failure) - case .DELETE: - task = self.sessionManager?.delete(path, parameters: parameters, success: success, failure: failure) - } - - guard let requestTask = task else - { - let description = "Session manager did not return a task" - assertionFailure(description) + let path = request.path + let parameters = request.parameters - let error = NSError(domain: type(of: self).ErrorDomain, code: LocalErrorCode.requestMalformed.rawValue, userInfo: [NSLocalizedDescriptionKey: description]) + let task: URLSessionDataTask? - networkRequestCompleted = true + switch request.method + { + case .GET: + task = self.sessionManager?.get(path, parameters: parameters, progress: nil, success: success, failure: failure) + case .POST: + task = self.sessionManager?.post(path, parameters: parameters, progress: nil, success: success, failure: failure) + case .PUT: + task = self.sessionManager?.put(path, parameters: parameters, success: success, failure: failure) + case .PATCH: + task = self.sessionManager?.patch(path, parameters: parameters, success: success, failure: failure) + case .DELETE: + task = self.sessionManager?.delete(path, parameters: parameters, success: success, failure: failure) + } - self.handleTaskFailure(forRequest: request, task: task, error: error, completionQueue: completionQueue, completion: completion) + guard let requestTask = task else + { + let description = "Session manager did not return a task" + + assertionFailure(description) + + let error = NSError(domain: type(of: self).ErrorDomain, code: LocalErrorCode.requestMalformed.rawValue, userInfo: [NSLocalizedDescriptionKey: description]) + + self.handleTaskFailure(forRequest: request, task: task, error: error, completionQueue: completionQueue, completion: completion) + + return RequestToken(path: request.path, task: nil) + } - return RequestToken(path: request.path, task: nil) + return RequestToken(path: request.path, task: requestTask) } - - return RequestToken(path: request.path, task: requestTask) } /** @@ -316,7 +287,7 @@ final public class VimeoClient // MARK: - Private task completion handlers - private func handleTaskSuccess(forRequest request: Request, task: URLSessionDataTask?, responseObject: Any?, isCachedResponse: Bool = false, isFinalResponse: Bool = true, completionQueue: DispatchQueue, completion: @escaping ResultCompletion>.T) + private func handleTaskSuccess(forRequest request: Request, task: URLSessionDataTask?, responseObject: Any?, isCachedResponse: Bool = false, completionQueue: DispatchQueue, completion: @escaping ResultCompletion>.T) { guard let responseDictionary = responseObject as? ResponseDictionary else @@ -388,7 +359,6 @@ final public class VimeoClient response = Response(model: modelObject, json: responseDictionary, isCachedResponse: isCachedResponse, - isFinalResponse: isFinalResponse, totalCount: totalCount, page: currentPage, itemsPerPage: itemsPerPage, @@ -399,11 +369,11 @@ final public class VimeoClient } else { - response = Response(model: modelObject, json: responseDictionary, isCachedResponse: isCachedResponse, isFinalResponse: isFinalResponse) + response = Response(model: modelObject, json: responseDictionary, isCachedResponse: isCachedResponse) } // To avoid a poisoned cache, explicitly wait until model object parsing is successful to store responseDictionary [RH] - if request.shouldCacheResponse + if request.cacheResponse { self.responseCache.setResponse(responseDictionary: responseDictionary, forRequest: request) } @@ -421,7 +391,7 @@ final public class VimeoClient } } - private func handleTaskFailure(forRequest request: Request, task: URLSessionDataTask?, error: NSError?, completionQueue: DispatchQueue, completion: @escaping ResultCompletion>.T) + private func handleTaskFailure(forRequest request: Request, task: URLSessionDataTask?, error: NSError?, completionQueue: DispatchQueue, completion: @escaping ResultCompletion>.T) { let error = error ?? NSError(domain: type(of: self).ErrorDomain, code: LocalErrorCode.undefined.rawValue, userInfo: [NSLocalizedDescriptionKey: "Undefined error"]) @@ -435,6 +405,7 @@ final public class VimeoClient if case .multipleAttempts(let attemptCount, let initialDelay) = request.retryPolicy, attemptCount > 1 { var retryRequest = request + retryRequest.retryPolicy = .multipleAttempts(attemptCount: attemptCount - 1, initialDelay: initialDelay * 2) DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(initialDelay * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC)) @@ -443,16 +414,6 @@ final public class VimeoClient } } - else if request.cacheFetchPolicy == .tryNetworkThenCache - { - var cacheRequest = request - cacheRequest.cacheFetchPolicy = .cacheOnly - - let _ = self.request(cacheRequest, completionQueue: completionQueue, completion: completion) - - return - } - completionQueue.async { completion(.failure(error: error)) @@ -461,7 +422,7 @@ final public class VimeoClient // MARK: - Private error handling - private func handleError(_ error: NSError, request: Request, task: URLSessionDataTask? = nil) + private func handleError(_ error: NSError, request: Request, task: URLSessionDataTask? = nil) { if error.isServiceUnavailableError { @@ -486,7 +447,6 @@ final public class VimeoClient } } - extension VimeoClient { /// Singleton instance for VimeoClient. Applications must call configureSharedClient(withAppConfiguration appConfiguration:) diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoNetworking.h b/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoNetworking.h index 96bbdb29..1999cdd7 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoNetworking.h +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoNetworking.h @@ -48,10 +48,8 @@ FOUNDATION_EXPORT const unsigned char VimeoNetworkingVersionString[]; #import #import #import -#import #import #import -#import #import #import #import diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoRequestSerializer.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoRequestSerializer.swift index 77c5495e..605ed7c3 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoRequestSerializer.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoRequestSerializer.swift @@ -37,11 +37,12 @@ final public class VimeoRequestSerializer: AFJSONRequestSerializer { static let AcceptHeaderKey = "Accept" static let AuthorizationHeaderKey = "Authorization" + static let UserAgentKey = "User-Agent" } - public typealias AccessTokenProvider = (Void) -> String? + public typealias AccessTokenProvider = () -> String? - // MARK: + // MARK: // for authenticated requests var accessTokenProvider: AccessTokenProvider? @@ -59,14 +60,14 @@ final public class VimeoRequestSerializer: AFJSONRequestSerializer - returns: an initialized `VimeoRequestSerializer` */ - init(accessTokenProvider: @escaping AccessTokenProvider, apiVersion: String = VimeoDefaultAPIVersionString) + init(accessTokenProvider: @escaping AccessTokenProvider, apiVersion: String) { self.accessTokenProvider = accessTokenProvider self.appConfiguration = nil super.init() - self.setup(apiVersion: apiVersion) + self.configureDefaultHeaders(withAPIVersion: apiVersion) } /** @@ -83,7 +84,7 @@ final public class VimeoRequestSerializer: AFJSONRequestSerializer super.init() - self.setup(apiVersion: appConfiguration.apiVersion) + self.configureDefaultHeaders(withAPIVersion: appConfiguration.apiVersion) } /** @@ -100,7 +101,7 @@ final public class VimeoRequestSerializer: AFJSONRequestSerializer { var request = super.request(withMethod: method, urlString: URLString, parameters: parameters, error: error) as URLRequest - request = self.requestWithAuthorizationHeader(fromRequest: request) + request = self.requestConfiguringHeaders(fromRequest: request) return (request as NSURLRequest).mutableCopy() as! NSMutableURLRequest } @@ -109,7 +110,7 @@ final public class VimeoRequestSerializer: AFJSONRequestSerializer { var request = super.multipartFormRequest(withMethod: method, urlString: URLString, parameters: parameters, constructingBodyWith: block, error: error) as URLRequest - request = self.requestWithAuthorizationHeader(fromRequest: request) + request = self.requestConfiguringHeaders(fromRequest: request) return (request as NSURLRequest).mutableCopy() as! NSMutableURLRequest } @@ -118,7 +119,7 @@ final public class VimeoRequestSerializer: AFJSONRequestSerializer { var request = super.request(withMultipartForm: request, writingStreamContentsToFile: fileURL, completionHandler: handler) as URLRequest - request = self.requestWithAuthorizationHeader(fromRequest: request) + request = self.requestConfiguringHeaders(fromRequest: request) return (request as NSURLRequest).mutableCopy() as! NSMutableURLRequest } @@ -127,7 +128,7 @@ final public class VimeoRequestSerializer: AFJSONRequestSerializer { if var request = super.request(bySerializingRequest: request, withParameters: parameters, error: error) { - request = self.requestWithAuthorizationHeader(fromRequest: request) + request = self.requestConfiguringHeaders(fromRequest: request) return request } @@ -135,14 +136,24 @@ final public class VimeoRequestSerializer: AFJSONRequestSerializer return nil } - // MARK: Private API + // MARK: Header Helpers - private func setup(apiVersion: String) + private func configureDefaultHeaders(withAPIVersion apiVersion: String) { self.setValue("application/vnd.vimeo.*+json; version=\(apiVersion)", forHTTPHeaderField: Constants.AcceptHeaderKey) } - private func requestWithAuthorizationHeader(fromRequest request: URLRequest) -> URLRequest + private func requestConfiguringHeaders(fromRequest request: URLRequest) -> URLRequest + { + var request = request + + request = self.requestAddingAuthorizationHeader(fromRequest: request) + request = self.requestModifyingUserAgentHeader(fromRequest: request) + + return request + } + + private func requestAddingAuthorizationHeader(fromRequest request: URLRequest) -> URLRequest { var request = request @@ -169,4 +180,39 @@ final public class VimeoRequestSerializer: AFJSONRequestSerializer return request } + + private func requestModifyingUserAgentHeader(fromRequest request: URLRequest) -> URLRequest + { + guard let frameworkVersion = Bundle(for: type(of: self)).infoDictionary?["CFBundleShortVersionString"] as? String else + { + assertionFailure("Unable to get the framework version") + + return request + } + + var request = request + + let frameworkString = "VimeoNetworking/\(frameworkVersion)" + + guard let existingUserAgent = request.value(forHTTPHeaderField: Constants.UserAgentKey) else + { + // DISCUSSION: AFNetworking doesn't set a User Agent for tvOS (look at the init method in AFHTTPRequestSerializer.m). + // So, on tvOS the User Agent will only specify the framework. System information might be something we want to add + // in the future if AFNetworking isn't providing it. [ghking] 6/19/17 + + #if !os(tvOS) + assertionFailure("An existing user agent was not found") + #endif + + request.setValue(frameworkString, forHTTPHeaderField: Constants.UserAgentKey) + + return request + } + + let modifiedUserAgent = "\(existingUserAgent) \(frameworkString)" + + request.setValue(modifiedUserAgent, forHTTPHeaderField: Constants.UserAgentKey) + + return request + } } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoResponseSerializer.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoResponseSerializer.swift index bf2ec1ac..dbb702db 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoResponseSerializer.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoResponseSerializer.swift @@ -63,9 +63,9 @@ final public class VimeoResponseSerializer: AFJSONResponseSerializer - returns: the serialized JSON dictionary */ - public func responseObjectFromDownloadTaskResponse(response: URLResponse?, url: URL?, error: NSError?) throws -> [AnyHashable: Any]? + public func responseObjectFromDownloadTaskResponse(response: URLResponse?, url: URL?, error: NSError?) throws -> [String: Any]? { - var responseObject: [AnyHashable: Any]? = nil + var responseObject: [String: Any]? = nil var serializationError: NSError? = nil do { @@ -134,7 +134,7 @@ final public class VimeoResponseSerializer: AFJSONResponseSerializer - returns: downloaded data serialized into JSON dictionary */ - public func dictionaryFromDownloadTaskResponse(url: URL?) throws -> [AnyHashable: Any] + public func dictionaryFromDownloadTaskResponse(url: URL?) throws -> [String: Any] { guard let url = url else { @@ -148,10 +148,10 @@ final public class VimeoResponseSerializer: AFJSONResponseSerializer throw NSError(domain: Constants.ErrorDomain, code: 0, userInfo: userInfo) } - var dictionary: [AnyHashable: Any]? = [:] + var dictionary: [String: Any]? = [:] if data.count > 0 { - dictionary = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as? [AnyHashable: Any] + dictionary = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as? [String: Any] } if dictionary == nil @@ -165,9 +165,9 @@ final public class VimeoResponseSerializer: AFJSONResponseSerializer // MARK: Private API - private func errorInfo(fromResponse response: URLResponse?, responseObject: Any?) -> [AnyHashable: Any]? + private func errorInfo(fromResponse response: URLResponse?, responseObject: Any?) -> [String: Any]? { - var errorInfo: [AnyHashable: Any] = [:] + var errorInfo: [String: Any] = [:] if let dictionary = responseObject as? [String: Any] { @@ -215,7 +215,8 @@ final public class VimeoResponseSerializer: AFJSONResponseSerializer "application/vnd.vimeo.programmed.cinema+json", "application/vnd.vimeo.policydocument+json", "application/vnd.vimeo.notification+json", - "application/vnd.vimeo.notification.subscriptions+json"] + "application/vnd.vimeo.notification.subscriptions+json", + "application/vnd.vimeo.product+json"] ) } } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoSessionManager+Constructors.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoSessionManager+Constructors.swift index 7ba09c23..98f62aaa 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoSessionManager+Constructors.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoSessionManager+Constructors.swift @@ -38,10 +38,10 @@ public extension VimeoSessionManager - returns: an initialized `VimeoSessionManager` */ - static func defaultSessionManager(baseUrl: URL, accessToken: String) -> VimeoSessionManager + static func defaultSessionManager(baseUrl: URL, accessToken: String, apiVersion: String) -> VimeoSessionManager { let sessionConfiguration = URLSessionConfiguration.defaultSessionConfigurationNoCache() - let requestSerializer = VimeoRequestSerializer(accessTokenProvider: { accessToken }) + let requestSerializer = VimeoRequestSerializer(accessTokenProvider: { accessToken }, apiVersion: apiVersion) return VimeoSessionManager(baseUrl: baseUrl, sessionConfiguration: sessionConfiguration, requestSerializer: requestSerializer) } @@ -54,10 +54,10 @@ public extension VimeoSessionManager - returns: an initialized `VimeoSessionManager` */ - static func defaultSessionManager(baseUrl: URL, accessTokenProvider: @escaping VimeoRequestSerializer.AccessTokenProvider) -> VimeoSessionManager + static func defaultSessionManager(baseUrl: URL, accessTokenProvider: @escaping VimeoRequestSerializer.AccessTokenProvider, apiVersion: String) -> VimeoSessionManager { let sessionConfiguration = URLSessionConfiguration.defaultSessionConfigurationNoCache() - let requestSerializer = VimeoRequestSerializer(accessTokenProvider: accessTokenProvider) + let requestSerializer = VimeoRequestSerializer(accessTokenProvider: accessTokenProvider, apiVersion: apiVersion) return VimeoSessionManager(baseUrl: baseUrl, sessionConfiguration: sessionConfiguration, requestSerializer: requestSerializer) } @@ -88,10 +88,10 @@ public extension VimeoSessionManager - returns: an initialized `VimeoSessionManager` */ - static func backgroundSessionManager(identifier: String, baseUrl: URL, accessToken: String) -> VimeoSessionManager + static func backgroundSessionManager(identifier: String, baseUrl: URL, accessToken: String, apiVersion: String) -> VimeoSessionManager { let sessionConfiguration = self.backgroundSessionConfiguration(identifier: identifier) - let requestSerializer = VimeoRequestSerializer(accessTokenProvider: { accessToken }) + let requestSerializer = VimeoRequestSerializer(accessTokenProvider: { accessToken }, apiVersion: apiVersion) return VimeoSessionManager(baseUrl: baseUrl, sessionConfiguration: sessionConfiguration, requestSerializer: requestSerializer) } @@ -105,10 +105,32 @@ public extension VimeoSessionManager - returns: an initialized `VimeoSessionManager` */ - static func backgroundSessionManager(identifier: String, baseUrl: URL, accessTokenProvider: @escaping VimeoRequestSerializer.AccessTokenProvider) -> VimeoSessionManager + static func backgroundSessionManager(identifier: String, baseUrl: URL, accessTokenProvider: @escaping VimeoRequestSerializer.AccessTokenProvider, apiVersion: String) -> VimeoSessionManager { let sessionConfiguration = self.backgroundSessionConfiguration(identifier: identifier) - let requestSerializer = VimeoRequestSerializer(accessTokenProvider: accessTokenProvider) + let requestSerializer = VimeoRequestSerializer(accessTokenProvider: accessTokenProvider, apiVersion: apiVersion) + + return VimeoSessionManager(baseUrl: baseUrl, sessionConfiguration: sessionConfiguration, requestSerializer: requestSerializer) + } + + /// Creates a background session manager suitable for share extension to + /// use. + /// + /// - Parameters: + /// - identifier: The background session identifier. + /// - baseUrl: The base URL for the HTTP client. This value should + /// usually be set to `VimeoBaseURL`. + /// - sharedContainerIdentifier: The name of the shared container + /// between the main app and the share extension. + /// - accessTokenProvider: A block that provides an access token + /// dynamically, called on each request serialization. + /// - apiVersion: The API version to use. + /// - Returns: an initialized `VimeoSessionManager`. + static func backgroundSessionManager(identifier: String, baseUrl: URL, sharedContainerIdentifier: String, accessTokenProvider: @escaping VimeoRequestSerializer.AccessTokenProvider, apiVersion: String) -> VimeoSessionManager + { + let sessionConfiguration = self.backgroundSessionConfiguration(identifier: identifier) + sessionConfiguration.sharedContainerIdentifier = sharedContainerIdentifier + let requestSerializer = VimeoRequestSerializer(accessTokenProvider: accessTokenProvider, apiVersion: apiVersion) return VimeoSessionManager(baseUrl: baseUrl, sessionConfiguration: sessionConfiguration, requestSerializer: requestSerializer) } diff --git a/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoSessionManager.swift b/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoSessionManager.swift index 4abb51bb..fb649306 100644 --- a/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoSessionManager.swift +++ b/Pods/VimeoNetworking/VimeoNetworking/Sources/VimeoSessionManager.swift @@ -31,7 +31,7 @@ import AFNetworking /** `VimeoSessionManager` handles networking and serialization for raw HTTP requests. It is a direct subclass of `AFHTTPSessionManager` and it's designed to be used internally by `VimeoClient`. For the majority of purposes, it would be better to use `VimeoClient` and a `Request` object to better encapsulate this logic, since the latter provides richer functionality overall. */ final public class VimeoSessionManager: AFHTTPSessionManager -{ +{ // MARK: Initialization /** @@ -44,7 +44,7 @@ final public class VimeoSessionManager: AFHTTPSessionManager - returns: an initialized `VimeoSessionManager` */ required public init(baseUrl: URL, sessionConfiguration: URLSessionConfiguration, requestSerializer: VimeoRequestSerializer) - { + { super.init(baseURL: baseUrl, sessionConfiguration: sessionConfiguration) self.requestSerializer = requestSerializer diff --git a/README.md b/README.md index cd1abeb5..f8ec14df 100644 --- a/README.md +++ b/README.md @@ -1,151 +1,64 @@ # VimeoUpload [![](https://circleci.com/gh/vimeo/VimeoUpload.png?style=shield&circle-token=2e7f762969ca311fc851e32d6ef2038f797f7e23)](https://circleci.com/gh/vimeo/VimeoUpload) -This library is under active development. We're shooting for a v1.0 release soon. All comments, questions, pull requests, and issues are welcome. See below for details. +This library is under active development. All comments, questions, pull requests, and issues are welcome. See below for details. ## Contents -* [Design Considerations](#design-considerations) - * [Old Upload, New Upload 👴👶](#old-upload-new-upload) - * [Constraints](#constraints) - * [Goals](#goals) - * [Anatomy](#anatomy) - * [NSURLSession](#nsurlsession) - * [AFNetworking](#afnetworking) - * [VimeoUpload](#vimeoupload) * [Getting Started](#getting-started) - * [Prerequisites](#prerequisites) - * [Example Projects](#example-projects) - * [CocoaPods](#cocoapods) - * [Submodule](#submodule) - * [Initialization](#initialization) + * [Prerequisites](#prerequisites) + * [Which example project should I use?](#which-example-project-should-i-use) + * [Setup your Submodules](#setup-your-submodules) + * [Initialization](#initialization) * [Uploading Videos](#uploading-videos) * [Starting an Upload](#starting-an-upload) * [Obtaining a File URL For a PHAsset](#obtaining-a-file-url-for-a-phasset) - * [Obtaining a File URL For an ALAsset](#obtaining-a-file-url-for-an-alasset) * [Obtaining a File URL For an Asset That You Manage](#obtaining-a-file-url-for-an-asset-that-you-manage) * [Start Your Upload](#start-your-upload) * [Inspecting Upload State and Progress](#inspecting-upload-state-and-progress) * [Canceling an Upload](#canceling-an-upload) + * [Locating your uploaded video on Vimeo](#locating-your-uploaded-video-on-vimeo) +* [Design Considerations](#design-considerations) + * [Constraints](#constraints) + * [Goals](#goals) + * [Anatomy](#anatomy) + * [NSURLSession](#nsurlsession) + * [AFNetworking](#afnetworking) + * [VimeoUpload](#vimeoupload) * [Custom Workflows 🍪🎉](#custom-workflows) * [Want to Contribute?](#want-to-contribute) * [Found an Issue?](#found-an-issue) +* [Troubleshooting](#troubleshooting) * [Questions](#questions) * [License](#license) -## Design Considerations -### Old Upload, New Upload +## Getting Started + +### Prerequisites + +1. Ensure that you've verified your Vimeo account. When you create an account, you'll receive an email asking that you verify your account. **Until you verify your account you will not be able to upload videos using the API**. +2. Ensure you have been granted permission to use the "upload" scope. This permission must explicitly be granted by Vimeo API admins. You can request this permission on your "My Apps" page under "Request upload access". Visit [developer.vimeo.com](https://developer.vimeo.com/). +3. Ensure that the OAuth token that you're using to make your requests has the "upload" scope included. + +### Which example project should I use? -The current (public) server-side Vimeo upload API is comprised of 4 separate requests that must be made in sequence. This is more complex than we'd like it to be, and this complexity is not ideal for native mobile clients. More requests means more failure points. More requests means a process that's challenging to communicate to the developer and in turn to the user. The 4 requests are: +The publicly available server-side Vimeo upload API is comprised of 4 separate requests that must be made in sequence. The 4 requests are: 1. Create a video object 2. Upload the video file 3. Activate the video object 4. Optionally set the video object's metadata (e.g. title, description, privacy, etc.) -We affectionately refer to this 4-step flow as Old Upload. - -A simplified flow that eliminates steps 3 and 4 above is in private beta right now. It's being used in the current [Vimeo iOS](https://itunes.apple.com/app/id425194759) and [Vimeo Android](https://play.google.com/store/apps/details?id=com.vimeo.android.videoapp) apps and it's slated to be made available to the public later this year. - -We affectionately refer to this 2-step flow as New Upload. - -VimeoUpload is designed to accommodate a variety of [background task workflows](#custom-workflows) including Old Upload and New Upload. The library currently contains support for both. However, New Upoad classes are currently marked as "private" and will not work for the general public until they are released from private beta. - -The VimeoUpload APIs for New and Old Upload are very similar. The Old Upload API is documented below. Old upload will be deprecated as soon as possible and the README will be updated to reflec the New Upload API at that time. - -### Constraints - -* **iOS 7 Support Required** +A simplified server-side flow that eliminates steps 3 and 4 is being used in the current [Vimeo iOS](https://itunes.apple.com/app/id425194759) and [Vimeo Android](https://play.google.com/store/apps/details?id=com.vimeo.android.videoapp) mobile apps. While it's currently for internal use only, we're actively working on making it available to the public before the end of 2017. - Because the Vimeo iOS app supports iOS7, and because a bunch of other apps out there do too, we must support both the [ALAsset](https://developer.apple.com/library/ios/documentation/AssetsLibrary/Reference/ALAssetsLibrary_Class/) and [PHAsset](https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAsset_Class/index.html) APIs. +While VimeoUpload contains support for both of these flows, the public only has access to the 4-step upload process. That means the following: -* **No Direct Access to PHAsset or ALAsset Source Files** +1. If you would like to get started using an example project, **you must set your build target to be `VimeoUpload-iOS-OldUpload`**. This is the example that uses the publicly accessible 4-step flow. - Because of how the Apple APIs are designed, we cannot upload directly from [ALAsset](https://developer.apple.com/library/ios/documentation/AssetsLibrary/Reference/ALAssetsLibrary_Class/) and [PHAsset](https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAsset_Class/index.html) source files. So we must export a copy of the asset using an [AVAssetExportSession](https://developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVAssetExportSession_Class/index.html) before starting the upload process. Asset export must happen when the app is in the foreground. +2. In order to run this project, **you will have to insert a valid OAuth token into the `init` method of the class called `OldVimeoUploader`** where it says `"YOUR_OAUTH_TOKEN"`. You can obtain an OAuth token by visiting [developer.vimeo.com](https://developer.vimeo.com/apps) and creating a new "app" and associated OAuth token. Without a valid OAuth token, you will be presented with a "Request failed: unauthorized (401)" error alert when you try to upload a video. -* **iCloud Photos** - If a [PHAsset](https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAsset_Class/index.html) is in iCloud and not resident on device we need to download it to the device before asset export. Download must happen when the app is in the foreground. +### Setup your Submodules -* **Background Sessions** - - Because an upload can take a significant amount of time, we must design for the user potentially backgrounding the application at any point in the process. Therefore all requests must be handled by an [NSURLSession](https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSession_class/) configured with a background [NSURLSessionConfiguration](https://developer.apple.com/library/prerelease/ios/documentation/Foundation/Reference/NSURLSessionConfiguration_class/index.html). This means we must rely exclusively on the [NSURLSessionDelegate](https://developer.apple.com/library/prerelease/ios/documentation/Foundation/Reference/NSURLSessionDelegate_protocol/index.html), [NSURLSessionTaskDelegate](https://developer.apple.com/library/prerelease/ios/documentation/Foundation/Reference/NSURLSessionTaskDelegate_protocol/index.html#//apple_ref/occ/intf/NSURLSessionTaskDelegate), and [NSURLSessionDownloadDelegate](https://developer.apple.com/library/prerelease/ios/documentation/Foundation/Reference/NSURLSessionDownloadDelegate_protocol/index.html#//apple_ref/occ/intf/NSURLSessionDownloadDelegate) protocols. We cannot rely on an [NSURLSessionTask](https://developer.apple.com/library/prerelease/ios/documentation/Foundation/Reference/NSURLSessionTask_class/index.html) subclasses' completion blocks. - -* **Resumable Uploads** - - The [NSURLSession](https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSession_class/) API does not support resuming an interrupted background upload from an offset. The initial release of this library will use these APIs exclusively and therefore will also not support resuming an upload from an offset. - -* **Fault Tolerance** - - The app process could be backgrounded, terminated, or crash at any time. This means that we need to persist the state of the upload system to disk so that it can be reconstructed as needed. Crashes should not adversely impact uploads or the upload system. - -* **Concurrent File Uploads** - - We want to be able to conduct concurrent uploads. - -* **State Introspection** - - We want to be able to communicate upload progress and state to the user in a variety of locations. Including communicating state for uploads initiated on other devices and other platforms. - -* **Reachability Awareness** - - The app could lose connectivity at any time. We want to be able to pause and resume the upload system when we lose connectivity. And we want to be able to allow the user to restrict uploads to wifi. - -* **Upload Quotas** - - We need to be able to communicate information to users about their [upload quota](https://vimeo.com/help/faq/uploading-to-vimeo/uploading-basics). - -* **iOS SDK Quirks** - - NSURLSessionTask's `suspend` method doesn't quite do what we want it to `TODO: Provide details` - - NSURLRequest's and NSURLSessionConfiguration's `allowsCellularAccess` properties don't quite do what we want them to `TODO: provide details` - - AFURLSessionManager's `tasks` property behaves differently on iOS7 vs. iOS8+ `TODO: provide details` - - And more... - -### Goals - -1. A simplified server-side upload API - -1. An upload system that addresses each [constraint](#constraints) listed above - -1. Clear and concise upload system initialization, management, and introspection - -1. An upload system that accommodates as many UX futures as possible - -### Anatomy - -#### NSURLSession - -TODO - -#### AFNetworking - -TODO - -#### VimeoUpload - -TODO - -## Getting Started - -### Prerequisites - -1. Ensure that you've verified your Vimeo account. When you create an account, you'll receive an email asking that you verify your account. Until you verify your account you will not be able to upload videos using the API. -2. Ensure you have been granted permission to use the "upload" scope. This permission must explicitly be granted by Vimeo API admins. You can request this permission on your app page under "Request upload access". Visit [developer.vimeo.com](https://developer.vimeo.com/). -3. Ensure that the OAuth token that you're using to make your requests has the "upload" scope included. - -### Example Projects - -There's an example project for New Upload and one for Old Upload. In order to run them you'll have to drop a valid OAuth token into the example project's `VimeoUpload` subclass' `init` method where it says `"YOUR_OAUTH_TOKEN"`. You can obtain an OAuth token by visiting [developer.vimeo.com](https://developer.vimeo.com/apps) and creating a new "app" and associated OAuth token. - -### CocoaPods - -TODO - -### Submodule - -TODO +If you are adding this library to your own project, follow the steps outlined in [Getting Started with Submodules as Development Pods](https://paper.dropbox.com/doc/Getting-Started-with-Submodules-as-Development-Pods-yRpNbPxIOjzGlcEbecuOC). ### Initialization @@ -177,9 +90,9 @@ You can obtain an OAuth token by using the authentication methods provided by [V In order to start an upload, you need a file URL pointing to the video file on disk that you would like to upload. -The steps required to obtain the file URL will vary depending on whether you are uploading a [PHAsset](#obtaining-a-file-url-for-a-phasset), an [ALAsset](#obtaining-a-file-url-for-an-alasset), or an [asset that you manage](#obtaining-a-file-url-for-an-asset-that-you-manage) outside of the device Photos environment. Once you have a valid file URL, you will use it to [start your upload](#start-your-upload). +The steps required to obtain the file URL will vary depending on whether you are uploading a [PHAsset](#obtaining-a-file-url-for-a-phasset) or an [asset that you manage](#obtaining-a-file-url-for-an-asset-that-you-manage) outside of the device Photos environment. Once you have a valid file URL, you will use it to [start your upload](#start-your-upload). -Unfortunately, because of how Apple's [PHAsset](https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAsset_Class/index.html) and [ALAsset](https://developer.apple.com/library/ios/documentation/AssetsLibrary/Reference/ALAssetsLibrary_Class/) APIs are designed uploading directly from a [PHAsset](https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAsset_Class/index.html) or [ALAsset](https://developer.apple.com/library/ios/documentation/AssetsLibrary/Reference/ALAssetsLibrary_Class/) resource URL is not possible. In order to upload [PHAsset](https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAsset_Class/index.html)s and [ALAsset](https://developer.apple.com/library/ios/documentation/AssetsLibrary/Reference/ALAssetsLibrary_Class/)s you will need to first create a copy of the asset itself and upload from that copy. See below for instructions on how to do this. +Unfortunately, because of how Apple's [PHAsset](https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAsset_Class/index.html) APIs are designed, uploading directly from a [PHAsset](https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAsset_Class/index.html) resource URL is not possible. In order to upload [PHAsset](https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAsset_Class/index.html)s you will need to first create a copy of the asset itself and upload from that copy. See below for instructions on how to do this. #### Obtaining a File URL For a PHAsset @@ -251,44 +164,6 @@ Next, use VimeoUpload's `ExportOperation` to export a copy of the [PHAsset](http operation.start() ``` -#### Obtaining a File URL For an ALAsset - -Use VimeoUpload's `ExportOperation` to export a copy of the [ALAsset](https://developer.apple.com/library/ios/documentation/AssetsLibrary/Reference/ALAssetsLibrary_Class/) you intend to upload. You can then use the resulting `url` to [start your upload](#start-your-upload). - -```Swift - let alAsset = ... // The ALAsset you intend to upload - let url = alAsset.defaultRepresentation().url() // For example - let avAsset = AVURLAsset(URL: url) - let operation = ExportOperation(asset: avAsset) - - // Optionally set a progress block - operation.progressBlock = { (progress: Double) -> Void in - // Do something with progress - } - - operation.completionBlock = { - guard operation.cancelled == false else - { - return - } - - if let error = operation.error - { - // Do something with the error - } - else if let url = operation.outputURL - { - // Use the url to start your upload (see below) - } - else - { - assertionFailure("error and outputURL are mutually exclusive, this should never happen.") - } - } - - operation.start() -``` - #### Obtaining a File URL For an Asset That You Manage This is quite a bit simpler: @@ -430,13 +305,125 @@ Or by using the `identifier` of the `OldUploadDescriptor` in question: vimeoUpload.cancelUpload(identifier: identifier) ``` +### Locating your uploaded video on Vimeo + +One can access a video's URL by inspecting the link property on the video that's associated with the upload descriptor: `descriptor.video.link`. + +For example, one could use the results of either the `Activation` or `Settings` stage to access the video object. See the following method implementation inside of `OldUploadDescriptor`: + +```swift +override public func taskDidFinishDownloading(sessionManager: AFURLSessionManager, task: URLSessionDownloadTask, url: URL) -> URL? +{ + ... + do + { + switch self.currentRequest + { + case .Create: + ... + case .Upload: + ... + case .Activate: + // Use the `self.videoURI` to request a video object and inspect its `link`. + self.videoUri = try responseSerializer.process(activateVideoResponse: task.response, url: url, error: error) + case .Settings: + // Or, wait for the Settings step to complete and access `self.video.link`. + self.video = try responseSerializer.process(videoSettingsResponse: task.response, url: url, error: error) + } + } + ... +} +``` + +Note: ellipses indicate code excluded for brevity. + +## Design Considerations + +The following sections provide more insight into the motivation behind VimeoUpload's design, given some identified constraints and goals. + +### Constraints + +* **No Direct Access to PHAsset Source Files** + + Because of how the Apple APIs are designed, we cannot upload directly from [PHAsset](https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAsset_Class/index.html) source files. So we must export a copy of the asset using an [AVAssetExportSession](https://developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVAssetExportSession_Class/index.html) before starting the upload process. Asset export must happen when the app is in the foreground. + +* **iCloud Photos** + + If a [PHAsset](https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAsset_Class/index.html) is in iCloud and not resident on device we need to download it to the device before asset export. Download must happen when the app is in the foreground. + +* **Background Sessions** + + Because an upload can take a significant amount of time, we must design for the user potentially backgrounding the application at any point in the process. Therefore all requests must be handled by an [NSURLSession](https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSession_class/) configured with a background [NSURLSessionConfiguration](https://developer.apple.com/library/prerelease/ios/documentation/Foundation/Reference/NSURLSessionConfiguration_class/index.html). This means we must rely exclusively on the [NSURLSessionDelegate](https://developer.apple.com/library/prerelease/ios/documentation/Foundation/Reference/NSURLSessionDelegate_protocol/index.html), [NSURLSessionTaskDelegate](https://developer.apple.com/library/prerelease/ios/documentation/Foundation/Reference/NSURLSessionTaskDelegate_protocol/index.html#//apple_ref/occ/intf/NSURLSessionTaskDelegate), and [NSURLSessionDownloadDelegate](https://developer.apple.com/library/prerelease/ios/documentation/Foundation/Reference/NSURLSessionDownloadDelegate_protocol/index.html#//apple_ref/occ/intf/NSURLSessionDownloadDelegate) protocols. We cannot rely on an [NSURLSessionTask](https://developer.apple.com/library/prerelease/ios/documentation/Foundation/Reference/NSURLSessionTask_class/index.html) subclasses' completion blocks. + +* **Resumable Uploads** + + The [NSURLSession](https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSession_class/) API does not support resuming an interrupted background upload from an offset. The initial release of this library will use these APIs exclusively and therefore will also not support resuming an upload from an offset. + +* **Fault Tolerance** + + The app process could be backgrounded, terminated, or crash at any time. This means that we need to persist the state of the upload system to disk so that it can be reconstructed as needed. Crashes should not adversely impact uploads or the upload system. + +* **Concurrent File Uploads** + + We want to be able to conduct concurrent uploads. + +* **State Introspection** + + We want to be able to communicate upload progress and state to the user in a variety of locations. Including communicating state for uploads initiated on other devices and other platforms. + +* **Reachability Awareness** + + The app could lose connectivity at any time. We want to be able to pause and resume the upload system when we lose connectivity. And we want to be able to allow the user to restrict uploads to wifi. + +* **Upload Quotas** + + We need to be able to communicate information to users about their [upload quota](https://vimeo.com/help/faq/uploading-to-vimeo/uploading-basics). + +* **iOS SDK Quirks** + + NSURLSessionTask's `suspend` method doesn't quite do what we want it to `TODO: Provide details` + + NSURLRequest's and NSURLSessionConfiguration's `allowsCellularAccess` properties don't quite do what we want them to `TODO: provide details` + + AFURLSessionManager's `tasks` property behaves differently on iOS7 vs. iOS8+ `TODO: provide details` + + And more... + +### Goals + +1. A simplified server-side upload API + +1. An upload system that addresses each [constraint](#constraints) listed above + +1. Clear and concise upload system initialization, management, and introspection + +1. An upload system that accommodates as many UX futures as possible + +### Anatomy + +#### NSURLSession + +TODO + +#### AFNetworking + +TODO + +#### VimeoUpload + +TODO + ## Custom Workflows TODO ## Found an Issue? -Please file it in the git [issue tracker](https://github.com/vimeo/VimeoUpload/issues). +If you find any bugs or technical issues with this library, please [create an issue](https://github.com/vimeo/VimeoUpload/issues) and provide relevant code snippets, specific details about the issue, and steps to replicate behavior. + +## Troubleshooting + +If you have any questions about using this library, please [contact us directly](https://help.vimeo.com), post in the [Vimeo API Forum](https://vimeo.com/forums/api), or check out [StackOverflow](https://stackoverflow.com/tags/vimeo). ## Want to Contribute? diff --git a/VimeoUpload.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/VimeoUpload.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/VimeoUpload.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/VimeoUpload/Descriptor System/DescriptorManager.swift b/VimeoUpload/Descriptor System/DescriptorManager.swift index 5ef798cc..a115367f 100644 --- a/VimeoUpload/Descriptor System/DescriptorManager.swift +++ b/VimeoUpload/Descriptor System/DescriptorManager.swift @@ -41,18 +41,31 @@ public typealias VoidClosure = () -> Void open class DescriptorManager: NSObject { - private static let QueueName = "descriptor_manager.synchronization_queue" + private struct Constants + { + static let QueueName = "descriptor_manager.synchronization_queue" + static let ShareExtensionArchivePrefix = "share_extension" + static let ShareExtensionDescriptorDidSuspend = "ShareExtensionDescriptorDidSuspend" + + struct InvalidationError + { + static let Domain = "BackgroundSessionInvalidationError" + static let Code = 1 + static let LocalizedDescription = "A session object referring to the same background session has been invalidated and thus disconnected from the session." + } + } // MARK: private var sessionManager: AFURLSessionManager private let name: String + private let archivePrefix: String? private weak var delegate: DescriptorManagerDelegate? // MARK: private let archiver: DescriptorManagerArchiver // This object handles persistence of descriptors and suspended state to disk - private let synchronizationQueue = DispatchQueue(label: DescriptorManager.QueueName, attributes: []) + private let synchronizationQueue = DispatchQueue(label: Constants.QueueName, attributes: []) // MARK: @@ -70,12 +83,26 @@ open class DescriptorManager: NSObject // By passing the delegate into the constructor (as opposed to using a public property) // We ensure that early events like "load" can be reported [AH] 11/25/2015 - init(sessionManager: AFURLSessionManager, name: String, delegate: DescriptorManagerDelegate? = nil) + init?(sessionManager: AFURLSessionManager, + name: String, + archivePrefix: String?, + documentsFolderURL: URL, + delegate: DescriptorManagerDelegate? = nil) { + guard let archiver = DescriptorManagerArchiver(name: name, + archivePrefix: archivePrefix, + documentsFolderURL: documentsFolderURL) + else + { + return nil + } + self.sessionManager = sessionManager self.name = name self.delegate = delegate - self.archiver = DescriptorManagerArchiver(name: name) + + self.archiver = archiver + self.archivePrefix = archivePrefix super.init() @@ -125,12 +152,24 @@ open class DescriptorManager: NSObject private func setupSessionBlocks() { - // Because we're using a background session we never have cause to invalidate the session, - // Which means that if this block is called it's likely due to an unrecoverable error, - // So we respond by clearing the descriptors set, returning to a blank slate. [AH] 10/28/2015 - + // To restate Alfie's comment on this session invalid callback, in the + // past we did not want to invalidate a background session because we + // wanted to handle upload events coming back to the app as soon as the + // associated upload task is finished, so any invalidation might likely + // be caused by a weird error that we could not handle. That assumption + // is not true anymore unfortunately with the share extension. When the + // app has to handle upload events coming from the share extension, it + // must create an instance of `VimeoSessionManager` whose background ID + // is the same as the one that made the upload task. Because + // `VimeoSessionManager` retains `URLSession` while acting as its + // delegate, and `URLSession` retains its delegate object until it is + // invalidated, an explicit call to the `invalidate` method is necessary + // to avoid leaking memory. If the underlying session is not invalidated, + // not only the app will leak memory but the share extension won't be + // able to upload due to the main app still binding to that session ID. + // [VN] (07/03/2018) self.sessionManager.setSessionDidBecomeInvalidBlock { [weak self] (session, error) -> Void in - + guard let strongSelf = self else { return @@ -142,14 +181,41 @@ open class DescriptorManager: NSObject { return } - + strongSelf.archiver.removeAll() // TODO: Need to respond to this notification [AH] 2/22/2016 (remove from downloads store, delete active uploads etc.) - strongSelf.delegate?.sessionDidBecomeInvalid?(error: error as NSError) + // Why do we need to check if `error` is `nil` even though the compiler + // tells us that this checking will always succeed? Behind the scene, we + // are using the `AFURLSessionManager` class -- which is an Objective-C + // class -- for managing background upload sessions. For the session + // invalid callback, its header file does not mark the `NSError` object + // as nullable; in reality, this object will be `nil` if we explicitly + // invalidate the underlying session. Because of that, it is necessary + // to check for `nil` here, else the runtime will crash if the error + // object is `nil`. + // + // In short, trying to safely unwrap `error` will result in a crash, so + // as weird as it sounds, please do not do that here. [VN] (06/13/2018) + + // TODO: Either update AFNetworking to the latest version, or redesign + // our networking library so that we have a better control over this + // error. [VN] (07/03/2018) + let theError: NSError? + if error != nil + { + let userInfo = [NSLocalizedDescriptionKey: Constants.InvalidationError.LocalizedDescription] + theError = NSError(domain: Constants.InvalidationError.Domain, code: Constants.InvalidationError.Code, userInfo: userInfo) + } + else + { + theError = nil + } - NotificationCenter.default.post(name: Notification.Name(rawValue: DescriptorManagerNotification.SessionDidBecomeInvalid.rawValue), object: error) + strongSelf.delegate?.sessionDidBecomeInvalid?(error: theError) + + NotificationCenter.default.post(name: Notification.Name(rawValue: DescriptorManagerNotification.SessionDidBecomeInvalid.rawValue), object: theError) }) } @@ -227,24 +293,39 @@ open class DescriptorManager: NSObject return } - // These types of errors can occur when connection drops and before suspend() is called, - // Or when connection drop is slow -> timeouts etc. [AH] 2/22/2016 + // For background upload tasks, keep in mind that if the device cannot + // connect to the Internet, they will not give up right away. Instead, + // they will be retried by the OS on our behalf. This timeout period is + // determined by `URLSessionConfiguration`'s `timeoutIntervalForResource` + // property. By default, it has a value of 7 days, meaning the OS will + // attempt to retry for a week before returning with a connection error. + // [VN] (07/03/2018) let isConnectionError = ((task.error as? NSError)?.isConnectionError() == true || (error as? NSError)?.isConnectionError() == true) if isConnectionError { - do + if let prefix = strongSelf.archivePrefix, prefix == Constants.ShareExtensionArchivePrefix { - try descriptor.prepare(sessionManager: strongSelf.sessionManager) - - descriptor.resume(sessionManager: strongSelf.sessionManager) // TODO: for a specific number of retries? [AH] + descriptor.suspend(sessionManager: strongSelf.sessionManager) strongSelf.save() + + NotificationCenter.default.post(name: Notification.Name(Constants.ShareExtensionDescriptorDidSuspend), object: descriptor) } - catch + else { - strongSelf.archiver.remove(descriptor: descriptor) - - strongSelf.delegate?.descriptorDidFail?(descriptor) - NotificationCenter.default.post(name: Notification.Name(rawValue: DescriptorManagerNotification.DescriptorDidFail.rawValue), object: descriptor) + do + { + try descriptor.prepare(sessionManager: strongSelf.sessionManager) + + descriptor.resume(sessionManager: strongSelf.sessionManager) // TODO: for a specific number of retries? [AH] + strongSelf.save() + } + catch + { + strongSelf.archiver.remove(descriptor: descriptor) + + strongSelf.delegate?.descriptorDidFail?(descriptor) + NotificationCenter.default.post(name: Notification.Name(rawValue: DescriptorManagerNotification.DescriptorDidFail.rawValue), object: descriptor) + } } return @@ -295,7 +376,7 @@ open class DescriptorManager: NSObject { return } - + if let backgroundEventsCompletionHandler = strongSelf.backgroundEventsCompletionHandler { // The completionHandler must be called on the main thread @@ -317,18 +398,39 @@ open class DescriptorManager: NSObject // MARK: Public API - open func handleEventsForBackgroundURLSession(identifier: String, completionHandler: @escaping VoidClosure) -> Bool + /// Invalidate the underlying session manager object. You should + /// call this method whenever you're finished using the descriptor + /// manager, else you'll risk leaking memory. + public func invalidateSessionManager() + { + self.sessionManager.invalidateSessionCancelingTasks(false) + } + + /// Determines if the manager can handle events from a background upload + /// session. + /// + /// Each descriptor manager is backed with a background upload session. + /// If the upload is in progress, and your app enters background mode, + /// this upload session still continues its progress. Once the upload + /// task either completes or fails, it will ping your app delegate so + /// that your app has an opportunity to handle the session's events. + /// Use or override this method to check if the descriptor manager + /// should handle events from the background session. + /// + /// - Parameter identifier: The identifier of a background session. + /// - Returns: `true` if the identifier is the same as the underlying + /// background upload session and thus the descriptor manager should + /// handle the events. `false` otherwise. + open func canHandleEventsForBackgroundURLSession(withIdentifier identifier: String) -> Bool + { + return identifier == self.sessionManager.session.configuration.identifier + } + + open func handleEventsForBackgroundURLSession(completionHandler: @escaping VoidClosure) { - guard identifier == self.sessionManager.session.configuration.identifier else - { - return false - } - self.delegate?.willHandleEventsForBackgroundSession?() self.backgroundEventsCompletionHandler = completionHandler - - return true } open func suspend() diff --git a/VimeoUpload/Descriptor System/DescriptorManagerArchiver.swift b/VimeoUpload/Descriptor System/DescriptorManagerArchiver.swift index 11916327..f17b76b3 100644 --- a/VimeoUpload/Descriptor System/DescriptorManagerArchiver.swift +++ b/VimeoUpload/Descriptor System/DescriptorManagerArchiver.swift @@ -47,34 +47,56 @@ class DescriptorManagerArchiver // MARK: - Initialization - init(name: String) + init?(name: String, + archivePrefix: String?, + documentsFolderURL: URL) { - self.archiver = type(of: self).setupArchiver(name: name) + guard let archiver = type(of: self).setupArchiver(name: name, archivePrefix: archivePrefix, documentsFolderURL: documentsFolderURL) else + { + return nil + } + + self.archiver = archiver + + let migrator = ArchiveMigrator(fileManager: FileManager.default) - self.descriptors = self.loadDescriptors() - self.suspended = self.loadSuspendedState() + let relativeFolderURL = URL(string: name) + self.descriptors = self.loadDescriptors(withMigrator: migrator, relativeFolderURL: relativeFolderURL) + self.suspended = self.loadSuspendedState(withMigrator: migrator, relativeFolderURL: relativeFolderURL) } // MARK: Setup - Archiving - private static func setupArchiver(name: String) -> KeyedArchiver + private static func setupArchiver(name: String, archivePrefix: String?, documentsFolderURL: URL) -> KeyedArchiver? { - let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] - var documentsURL = URL(string: documentsPath)! - - documentsURL = documentsURL.appendingPathComponent(name) + let typeFolderURL = documentsFolderURL.appendingPathComponent(name) - if FileManager.default.fileExists(atPath: documentsURL.path) == false + if FileManager.default.fileExists(atPath: typeFolderURL.path) == false { - try! FileManager.default.createDirectory(atPath: documentsURL.path, withIntermediateDirectories: true, attributes: nil) + do + { + try FileManager.default.createDirectory(at: typeFolderURL, withIntermediateDirectories: true, attributes: nil) + } + catch + { + return nil + } } - return KeyedArchiver(basePath: documentsURL.path) + return KeyedArchiver(basePath: typeFolderURL.path, archivePrefix: archivePrefix) } - private func loadDescriptors() -> Set + private func loadDescriptors(withMigrator migrator: ArchiveMigrating?, relativeFolderURL: URL?) -> Set { - return self.archiver.loadObject(for: type(of: self).DescriptorsArchiveKey) as? Set ?? Set() + guard let descriptors = ArchiveDataLoader.loadData(relativeFolderURL: relativeFolderURL, + archiver: self.archiver, + key: DescriptorManagerArchiver.DescriptorsArchiveKey) as? Set + else + { + return Set() + } + + return descriptors } private func saveDescriptors() @@ -82,9 +104,17 @@ class DescriptorManagerArchiver self.archiver.save(object: self.descriptors, key: type(of: self).DescriptorsArchiveKey) } - private func loadSuspendedState() -> Bool + private func loadSuspendedState(withMigrator migrator: ArchiveMigrating?, relativeFolderURL: URL?) -> Bool { - return self.archiver.loadObject(for: type(of: self).SuspendedArchiveKey) as? Bool ?? false + guard let suspendedState = ArchiveDataLoader.loadData(relativeFolderURL: relativeFolderURL, + archiver: self.archiver, + key: DescriptorManagerArchiver.SuspendedArchiveKey) as? Bool + else + { + return false + } + + return suspendedState } private func saveSuspendedState() diff --git a/VimeoUpload/Descriptor System/DescriptorManagerDelegate.swift b/VimeoUpload/Descriptor System/DescriptorManagerDelegate.swift index 846afad9..47c70394 100644 --- a/VimeoUpload/Descriptor System/DescriptorManagerDelegate.swift +++ b/VimeoUpload/Descriptor System/DescriptorManagerDelegate.swift @@ -34,7 +34,7 @@ import Foundation @objc optional func didSaveDescriptors(count: Int) @objc optional func didFailToLoadDescriptor(error: NSError) - @objc optional func sessionDidBecomeInvalid(error: NSError) + @objc optional func sessionDidBecomeInvalid(error: NSError?) @objc optional func willHandleEventsForBackgroundSession() @objc optional func didFinishEventsForBackgroundSession() diff --git a/VimeoUpload/Descriptor System/KeyedArchiver.swift b/VimeoUpload/Descriptor System/KeyedArchiver.swift index 7b0a256b..0d5ffda4 100644 --- a/VimeoUpload/Descriptor System/KeyedArchiver.swift +++ b/VimeoUpload/Descriptor System/KeyedArchiver.swift @@ -28,27 +28,33 @@ import Foundation public class KeyedArchiver: ArchiverProtocol { - private static let ArchiveExtension = "archive" + private struct Constants + { + static let ArchiveExtension = "archive" + static let UnderscoreText = "_" + } private let basePath: String + private let prefix: String? - public init(basePath: String) + public init(basePath: String, archivePrefix: String? = nil) { assert(FileManager.default.fileExists(atPath: basePath, isDirectory: nil), "Invalid basePath") self.basePath = basePath + self.prefix = archivePrefix } public func loadObject(for key: String) -> Any? { - let path = self.archivePath(key: key) + let path = self.archivePath(key: self.key(withPrefix: self.prefix, key: key)) return NSKeyedUnarchiver.unarchiveObject(withFile: path) } public func save(object: Any, key: String) { - let path = self.archivePath(key: key) + let path = self.archivePath(key: self.key(withPrefix: self.prefix, key: key)) NSKeyedArchiver.archiveRootObject(object, toFile: path) } @@ -60,8 +66,18 @@ public class KeyedArchiver: ArchiverProtocol var url = URL(string: self.basePath)! url = url.appendingPathComponent(key) - url = url.appendingPathExtension(type(of: self).ArchiveExtension) + url = url.appendingPathExtension(Constants.ArchiveExtension) return url.absoluteString as String } + + private func key(withPrefix prefix: String?, key: String) -> String + { + guard let prefix = prefix else + { + return key + } + + return prefix + Constants.UnderscoreText + key + } } diff --git a/VimeoUpload/Descriptor System/ReachableDescriptorManager.swift b/VimeoUpload/Descriptor System/ReachableDescriptorManager.swift index 14c37481..8aea4fda 100644 --- a/VimeoUpload/Descriptor System/ReachableDescriptorManager.swift +++ b/VimeoUpload/Descriptor System/ReachableDescriptorManager.swift @@ -47,11 +47,52 @@ import VimeoNetworking // MARK: - Initialization - public init(name: String, backgroundSessionIdentifier: String, descriptorManagerDelegate: DescriptorManagerDelegate? = nil, accessTokenProvider: @escaping VimeoRequestSerializer.AccessTokenProvider) + /// Initializes a reachable descriptor manager object. + /// + /// - Parameters: + /// - name: The name of the descriptor manager. + /// - archivePrefix: The prefix of the archive file. You pass in the + /// prefix if you want to keep track of multiple archive files. By + /// default, it has the value of `nil`. + /// - documentsFolderURL: The Documents folder's URL of the folder in + /// which the upload description will be stored. That folder has the + /// same name as the first argument. + /// - backgroundSessionIdentifier: An ID of the background upload + /// session. + /// - sharedContainerIdentifier: An ID of a shared sandbox. By default + /// this value is `nil`, but if `VimeoUpload` is used in an app + /// extension, this value must be set. + /// - descriptorManagerDelegate: A delegate object of this descriptor + /// manager. + /// - accessTokenProvider: A closure that provides an authenticated + /// token. Any upload needs this token in order to work properly. + /// - apiVersion: The API version to use. + /// - Returns: `nil` if the keyed archiver cannot load descriptors' archive. + public init?(name: String, + archivePrefix: String? = nil, + documentsFolderURL: URL, + backgroundSessionIdentifier: String, + sharedContainerIdentifier: String? = nil, + descriptorManagerDelegate: DescriptorManagerDelegate? = nil, + accessTokenProvider: @escaping VimeoRequestSerializer.AccessTokenProvider, + apiVersion: String) { - let backgroundSessionManager = VimeoSessionManager.backgroundSessionManager(identifier: backgroundSessionIdentifier, baseUrl: VimeoBaseURL, accessTokenProvider: accessTokenProvider) + let backgroundSessionManager: VimeoSessionManager - super.init(sessionManager: backgroundSessionManager, name: name, delegate: descriptorManagerDelegate) + if let sharedContainerIdentifier = sharedContainerIdentifier + { + backgroundSessionManager = VimeoSessionManager.backgroundSessionManager(identifier: backgroundSessionIdentifier, baseUrl: VimeoBaseURL, sharedContainerIdentifier: sharedContainerIdentifier, accessTokenProvider: accessTokenProvider, apiVersion: apiVersion) + } + else + { + backgroundSessionManager = VimeoSessionManager.backgroundSessionManager(identifier: backgroundSessionIdentifier, baseUrl: VimeoBaseURL, accessTokenProvider: accessTokenProvider, apiVersion: apiVersion) + } + + super.init(sessionManager: backgroundSessionManager, + name: name, + archivePrefix: archivePrefix, + documentsFolderURL: documentsFolderURL, + delegate: descriptorManagerDelegate) self.connectivityManager.delegate = self } diff --git a/VimeoUpload/Extensions/ArchiveMigrating.swift b/VimeoUpload/Extensions/ArchiveMigrating.swift new file mode 100644 index 00000000..371b8f41 --- /dev/null +++ b/VimeoUpload/Extensions/ArchiveMigrating.swift @@ -0,0 +1,70 @@ +// +// ArchiveMigrating.swift +// VimeoUpload +// +// Created by Nguyen, Van on 6/1/18. +// Copyright © 2018 Vimeo. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +/// Classes conforming to the `ArchiveMigrating` protocol can move +/// upload data from one sandbox to another. This protocol is for +/// internal use only. +protocol ArchiveMigrating +{ + /// Provides a means for the client to determine if an archive exists + /// at a file path relative to a Documents folder. + /// + /// - Parameter relativeFileURL: The relative URL of the archive file. + /// - Returns: `true` if the archive file exists. + func archiveFileExists(relativeFileURL: URL) -> Bool + + /// Provides a means for the client to load an archive file into + /// memory. + /// + /// - Parameter relativeFilePath: The relative path of the archive file. + /// - Returns: The data from the archive file. + func loadArchiveFile(relativeFileURL: URL) -> Any? + + /// Provides a means for the client to delete an archive file. + /// + /// - Parameter relativeFilePath: The relative path of the archive file. + func deleteArchiveFile(relativeFileURL: URL) +} + +struct ArchiveDataLoader +{ + static func loadData(relativeFolderURL: URL?, archiver: KeyedArchiver, key: String) -> Any? + { + let dataAtNewLocation = archiver.loadObject(for: key) + + guard let migrator = ArchiveMigrator(fileManager: FileManager.default), + let relativeFileURL = relativeFolderURL?.appendingPathComponent(key + ".archive"), + let dataAtOldLocation = migrator.loadArchiveFile(relativeFileURL: relativeFileURL) + else + { + return dataAtNewLocation + } + + migrator.deleteArchiveFile(relativeFileURL: relativeFileURL) + + return dataAtOldLocation + } +} diff --git a/VimeoUpload/Extensions/ArchiveMigrator.swift b/VimeoUpload/Extensions/ArchiveMigrator.swift new file mode 100644 index 00000000..64e11e35 --- /dev/null +++ b/VimeoUpload/Extensions/ArchiveMigrator.swift @@ -0,0 +1,73 @@ +// +// ArchiveMigrating.swift +// VimeoUpload +// +// Created by Nguyen, Van on 6/1/18. +// Copyright © 2018 Vimeo. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +class ArchiveMigrator: ArchiveMigrating +{ + private let fileManager: FileManager + private let documentsFolderURL: URL + + init?(fileManager: FileManager) + { + guard let documentsFolderURL = try? fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) else + { + return nil + } + + self.documentsFolderURL = documentsFolderURL + self.fileManager = fileManager + } + + func archiveFileExists(relativeFileURL: URL) -> Bool + { + let fileURL = self.fileURL(withRelativeFilePath: relativeFileURL.path) + + return self.fileManager.fileExists(atPath: fileURL.path) + } + + func loadArchiveFile(relativeFileURL: URL) -> Any? + { + let fileURL = self.fileURL(withRelativeFilePath: relativeFileURL.path) + + return NSKeyedUnarchiver.unarchiveObject(withFile: fileURL.path) + } + + func deleteArchiveFile(relativeFileURL: URL) + { + guard self.archiveFileExists(relativeFileURL: relativeFileURL) == true else + { + return + } + + let fileURL = self.fileURL(withRelativeFilePath: relativeFileURL.path) + + try? self.fileManager.removeItem(at: fileURL) + } + + private func fileURL(withRelativeFilePath relativeFilePath: String) -> URL + { + return self.documentsFolderURL.appendingPathComponent(relativeFilePath) + } +} diff --git a/VimeoUpload/UIKit/Extensions/NSString+Conversions.swift b/VimeoUpload/UIKit/Extensions/NSString+Conversions.swift index b2b53c22..c1030d96 100644 --- a/VimeoUpload/UIKit/Extensions/NSString+Conversions.swift +++ b/VimeoUpload/UIKit/Extensions/NSString+Conversions.swift @@ -83,18 +83,18 @@ public extension NSString { if minutes > 0 { - result = minutes < 10 ? "0\(minutes)" + ":\(result)" : "\(minutes)" + ":\(result)" + result = minutes < 10 ? "0\(minutes):\(result)" : "\(minutes):\(result)" } else { result = "00:\(result)" } - result = "\(hours)" + ":\(result)" + result = "\(hours):\(result)" } else { - result = "\(minutes)" + ":\(result)" + result = "\(minutes):\(result)" } return result as NSString diff --git a/VimeoUpload/Upload/Controllers/VideoDeletionManager.swift b/VimeoUpload/Upload/Controllers/VideoDeletionManager.swift index 3c4f1474..1e63449a 100644 --- a/VimeoUpload/Upload/Controllers/VideoDeletionManager.swift +++ b/VimeoUpload/Upload/Controllers/VideoDeletionManager.swift @@ -51,58 +51,97 @@ public class VideoDeletionManager: NSObject self.operationQueue.cancelAllOperations() self.removeObservers() } - - public init(sessionManager: VimeoSessionManager, retryCount: Int = VideoDeletionManager.DefaultRetryCount) + + /// Initializes a video deletion manager object. Upon creation, the + /// object will attempt to create a folder to save deletion information + /// if needed. If the folder already exists, it will attempt to load + /// that information into memory, then perform deletion. + /// + /// The folder is created with the following scheme: + /// + /// ``` + /// Documents/deletions + /// ``` + /// + /// - Parameters: + /// - sessionManager: A session manager object capable of deleting + /// uploads. + /// - archivePrefix: The prefix of the archive file. You pass in the + /// prefix if you want to keep track of multiple archive files. By + /// default, it has the value of `nil`. + /// - documentsFolderURL: The Documents folder's URL in which the folder + /// is located. + /// - retryCount: The number of retries. The default value is `3`. + /// - Returns: `nil` if the keyed archiver cannot load deletions' archive. + public init?(sessionManager: VimeoSessionManager, + archivePrefix: String? = nil, + documentsFolderURL: URL, + retryCount: Int = VideoDeletionManager.DefaultRetryCount) { + guard let archiver = VideoDeletionManager.setupArchiver(name: VideoDeletionManager.DeletionsArchiveKey, archivePrefix: archivePrefix, documentsFolderURL: documentsFolderURL) else + { + return nil + } + + self.archiver = archiver + self.sessionManager = sessionManager self.retryCount = retryCount self.operationQueue = OperationQueue() self.operationQueue.maxConcurrentOperationCount = OperationQueue.defaultMaxConcurrentOperationCount - self.archiver = VideoDeletionManager.setupArchiver(name: VideoDeletionManager.DeletionsArchiveKey) super.init() self.addObservers() self.reachabilityDidChange(nil) // Set suspended state - self.deletions = self.loadDeletions() + let migrator = ArchiveMigrator(fileManager: FileManager.default) + self.deletions = self.loadDeletions(withMigrator: migrator) self.startDeletions() } // MARK: Setup - private static func setupArchiver(name: String) -> KeyedArchiver + private static func setupArchiver(name: String, archivePrefix: String?, documentsFolderURL: URL) -> KeyedArchiver? { - let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] - var documentsURL = URL(string: documentsPath)! - - documentsURL = documentsURL.appendingPathComponent(name) - documentsURL = documentsURL.appendingPathComponent(VideoDeletionManager.DeletionsArchiveKey) + let deletionsFolder = documentsFolderURL.appendingPathComponent(name) + let deletionsArchiveDirectory = deletionsFolder.appendingPathComponent(VideoDeletionManager.DeletionsArchiveKey) - if FileManager.default.fileExists(atPath: documentsURL.path) == false + if FileManager.default.fileExists(atPath: deletionsArchiveDirectory.path) == false { - try! FileManager.default.createDirectory(atPath: documentsURL.path, withIntermediateDirectories: true, attributes: nil) + do + { + try FileManager.default.createDirectory(at: deletionsArchiveDirectory, withIntermediateDirectories: true, attributes: nil) + } + catch + { + return nil + } } - return KeyedArchiver(basePath: documentsURL.path) + return KeyedArchiver(basePath: deletionsArchiveDirectory.path, archivePrefix: archivePrefix) } // MARK: Archiving - private func loadDeletions() -> [VideoUri: Int] + private func loadDeletions(withMigrator migrator: ArchiveMigrating?) -> [VideoUri: Int] { - if let deletions = self.archiver.loadObject(for: type(of: self).DeletionsArchiveKey) as? [VideoUri: Int] + let relativeFolderURL = URL(string: VideoDeletionManager.DeletionsArchiveKey)?.appendingPathComponent(VideoDeletionManager.DeletionsArchiveKey) + guard let retries = ArchiveDataLoader.loadData(relativeFolderURL: relativeFolderURL, + archiver: self.archiver, + key: VideoDeletionManager.DeletionsArchiveKey) as? [VideoUri: Int] + else { - return deletions + return [:] } - return [:] + return retries } private func startDeletions() { - for (key, value) in self.deletions + for (key, value) in deletions { self.deleteVideo(withURI: key, retryCount: value) } @@ -110,7 +149,7 @@ public class VideoDeletionManager: NSObject private func save() { - self.archiver.save(object: self.deletions, key: type(of: self).DeletionsArchiveKey) + self.archiver.save(object: deletions, key: type(of: self).DeletionsArchiveKey) } // MARK: Public API diff --git a/VimeoUpload/Upload/Descriptor System/DescriptorManagerTracker.swift b/VimeoUpload/Upload/Descriptor System/DescriptorManagerTracker.swift index 0a03a744..e4d61888 100644 --- a/VimeoUpload/Upload/Descriptor System/DescriptorManagerTracker.swift +++ b/VimeoUpload/Upload/Descriptor System/DescriptorManagerTracker.swift @@ -55,8 +55,13 @@ open class DescriptorManagerTracker: DescriptorManagerDelegate self.printMessageAndPostLocalNotification("Load failed: \(error.localizedDescription)") } - @objc open func sessionDidBecomeInvalid(error: NSError) + @objc open func sessionDidBecomeInvalid(error: NSError?) { + guard let error = error else + { + return + } + self.printMessageAndPostLocalNotification("Session invalidated: \(error.localizedDescription)") } diff --git a/VimeoUpload/Upload/Descriptor System/New Upload (Private)/UploadDescriptor.swift b/VimeoUpload/Upload/Descriptor System/New Upload (Private)/UploadDescriptor.swift index 08d65d34..9904ec35 100644 --- a/VimeoUpload/Upload/Descriptor System/New Upload (Private)/UploadDescriptor.swift +++ b/VimeoUpload/Upload/Descriptor System/New Upload (Private)/UploadDescriptor.swift @@ -28,16 +28,17 @@ import Foundation import VimeoNetworking import AFNetworking -public class UploadDescriptor: ProgressDescriptor, VideoDescriptor +open class UploadDescriptor: ProgressDescriptor, VideoDescriptor { private static let FileNameCoderKey = "fileName" private static let FileExtensionCoderKey = "fileExtension" private static let UploadTicketCoderKey = "uploadTicket" + private static let VideoCoderKey = "video" // MARK: public var url: URL - public var uploadTicket: VIMUploadTicket + public var video: VIMVideo? // MARK: VideoDescriptor @@ -48,7 +49,7 @@ public class UploadDescriptor: ProgressDescriptor, VideoDescriptor public var videoUri: VideoUri? { - return self.uploadTicket.video?.uri + return self.video?.uri } public var progressDescriptor: ProgressDescriptor @@ -63,31 +64,29 @@ public class UploadDescriptor: ProgressDescriptor, VideoDescriptor fatalError("init() has not been implemented") } - public init(url: URL, uploadTicket: VIMUploadTicket) + public init(url: URL, video: VIMVideo) { self.url = url - self.uploadTicket = uploadTicket + self.video = video super.init() } // MARK: Overrides - override public func prepare(sessionManager: AFURLSessionManager) throws + override open func prepare(sessionManager: AFURLSessionManager) throws { // TODO: Do we need to set self.state == .Ready here? [AH] 2/22/2016 do { - guard let uploadLinkSecure = self.uploadTicket.uploadLinkSecure else + guard let uploadLink = self.video?.upload?.uploadLink else { - // TODO: delete file here? Same in download? - throw NSError(domain: UploadErrorDomain.Upload.rawValue, code: 0, userInfo: [NSLocalizedDescriptionKey: "Attempt to initiate upload but the uploadUri is nil."]) } let sessionManager = sessionManager as! VimeoSessionManager - let task = try sessionManager.uploadVideoTask(source: self.url, destination: uploadLinkSecure, completionHandler: nil) + let task = try sessionManager.uploadVideoTask(source: self.url, destination: uploadLink, completionHandler: nil) self.currentTaskIdentifier = task.taskIdentifier } @@ -101,7 +100,7 @@ public class UploadDescriptor: ProgressDescriptor, VideoDescriptor } } - override public func resume(sessionManager: AFURLSessionManager) + override open func resume(sessionManager: AFURLSessionManager) { super.resume(sessionManager: sessionManager) @@ -113,14 +112,14 @@ public class UploadDescriptor: ProgressDescriptor, VideoDescriptor } } - override public func cancel(sessionManager: AFURLSessionManager) + override open func cancel(sessionManager: AFURLSessionManager) { super.cancel(sessionManager: sessionManager) FileManager.default.deleteFile(at: self.url) } - override public func didLoadFromCache(sessionManager: AFURLSessionManager) throws + override open func didLoadFromCache(sessionManager: AFURLSessionManager) throws { guard let identifier = self.currentTaskIdentifier, let task = sessionManager.uploadTask(for: identifier), @@ -141,7 +140,7 @@ public class UploadDescriptor: ProgressDescriptor, VideoDescriptor self.progress = progress } - override public func taskDidComplete(sessionManager: AFURLSessionManager, task: URLSessionTask, error: NSError?) + override open func taskDidComplete(sessionManager: AFURLSessionManager, task: URLSessionTask, error: NSError?) { self.currentTaskIdentifier = nil @@ -185,19 +184,28 @@ public class UploadDescriptor: ProgressDescriptor, VideoDescriptor let path = URL.uploadDirectory().appendingPathComponent(fileName).appendingPathExtension(fileExtension).absoluteString self.url = URL(fileURLWithPath: path) - self.uploadTicket = aDecoder.decodeObject(forKey: type(of: self).UploadTicketCoderKey) as! VIMUploadTicket + + // Support migrating archived uploadTickets to videos for API versions less than v3.4 + if let uploadTicket = aDecoder.decodeObject(forKey: type(of: self).UploadTicketCoderKey) as? VIMUploadTicket + { + self.video = uploadTicket.video + } + else + { + self.video = aDecoder.decodeObject(forKey: type(of: self).VideoCoderKey) as? VIMVideo + } super.init(coder: aDecoder) } - override public func encode(with aCoder: NSCoder) + override open func encode(with aCoder: NSCoder) { let fileName = self.url.deletingPathExtension().lastPathComponent let ext = self.url.pathExtension aCoder.encode(fileName, forKey: type(of: self).FileNameCoderKey) aCoder.encode(ext, forKey: type(of: self).FileExtensionCoderKey) - aCoder.encode(self.uploadTicket, forKey: type(of: self).UploadTicketCoderKey) + aCoder.encode(self.video, forKey: type(of: self).VideoCoderKey) super.encode(with: aCoder) } diff --git a/VimeoUpload/Upload/Descriptor System/VideoDescriptorFailureTracker.swift b/VimeoUpload/Upload/Descriptor System/VideoDescriptorFailureTracker.swift index f1b9f5f0..94f881ac 100644 --- a/VimeoUpload/Upload/Descriptor System/VideoDescriptorFailureTracker.swift +++ b/VimeoUpload/Upload/Descriptor System/VideoDescriptorFailureTracker.swift @@ -42,37 +42,78 @@ import Foundation self.removeObservers() } - public init(name: String) + /// Initializes a descriptor failure tracker object. Upon creation, the + /// object will attempt to create a folder to save the description of + /// failed uploads if needed. If the folder already exists, it will + /// attempt to load that information into memory if desired. + /// + /// The folder is created with the following scheme: + /// + /// ``` + /// Documents/name + /// ``` + /// + /// - Parameters: + /// - name: The name of the folder that we'll store the archive. + /// - archivePrefix: The prefix of the archive file. You pass in the + /// prefix if you want to keep track of multiple archive files. By + /// default, it has the value of `nil`. + /// - documentsFolderURL: The Documents folder's URL in which the folder + /// is located. + /// - Returns: `nil` if the keyed archiver cannot load descriptors' archive. + public init?(name: String, + archivePrefix: String? = nil, + documentsFolderURL: URL) { - self.archiver = type(of: self).setupArchiver(name: name) - + guard let archiver = type(of: self).setupArchiver(folderName: name, archivePrefix: archivePrefix, documentsFolderURL: documentsFolderURL) else + { + return nil + } + + self.archiver = archiver + super.init() - self.failedDescriptors = self.load() + let migrator = ArchiveMigrator(fileManager: FileManager.default) + + let relativeFolderURL = URL(string: name) + self.failedDescriptors = self.load(relativeFolderURL: relativeFolderURL, migrator: migrator) self.addObservers() } // MARK: Setup - private static func setupArchiver(name: String) -> KeyedArchiver + private static func setupArchiver(folderName: String, archivePrefix: String?, documentsFolderURL: URL) -> KeyedArchiver? { - let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] + let folderURL = documentsFolderURL.appendingPathComponent(folderName) - var documentsURL = URL(string: documentsPath)! - documentsURL = documentsURL.appendingPathComponent(name) - - if FileManager.default.fileExists(atPath: documentsURL.path) == false + if FileManager.default.fileExists(atPath: folderURL.path) == false { - try! FileManager.default.createDirectory(atPath: documentsURL.path, withIntermediateDirectories: true, attributes: nil) + do + { + try FileManager.default.createDirectory(at: folderURL, withIntermediateDirectories: true, attributes: nil) + } + catch + { + return nil + } } - return KeyedArchiver(basePath: documentsURL.path) + return KeyedArchiver(basePath: folderURL.path, archivePrefix: archivePrefix) } - private func load() -> [String: Descriptor] + private func load(relativeFolderURL: URL?, migrator: ArchiveMigrating?) -> [String: Descriptor] { - return self.archiver.loadObject(for: type(of: self).ArchiveKey) as? [String: Descriptor] ?? [:] + guard let failedDescriptors = ArchiveDataLoader.loadData(relativeFolderURL: relativeFolderURL, + archiver: self.archiver, + key: VideoDescriptorFailureTracker.ArchiveKey) as? [String: Descriptor] + else + { + return [:] + } + + return failedDescriptors } private func save() diff --git a/VimeoUpload/Upload/Extensions/NSError+Upload.swift b/VimeoUpload/Upload/Extensions/NSError+Upload.swift index e396557b..1bc6b8b6 100644 --- a/VimeoUpload/Upload/Extensions/NSError+Upload.swift +++ b/VimeoUpload/Upload/Extensions/NSError+Upload.swift @@ -29,12 +29,9 @@ import Foundation public enum UploadErrorDomain: String { case PHAssetExportSession = "PHAssetExportSessionErrorDomain" - case DailyQuota = "DailyQuotaErrorDomain" - case WeeklyQuota = "WeeklyQuotaErrorDomain" case DiskSpace = "DiskSpaceErrorDomain" case Export = "ExportVideoErrorDomain" - case Me = "MeErrorDomain" case MyVideos = "MyVideosErrorDomain" case Create = "CreateVideoErrorDomain" case Upload = "VideoUploadErrorDomain" @@ -44,17 +41,9 @@ public enum UploadErrorDomain: String case Video = "VideoErrorDomain" case DiskSpaceOperation = "DiskSpaceOperationErrorDomain" - case WeeklyQuotaOperation = "WeeklyQuotaOperationErrorDomain" - case DailyQuotaOperation = "DailyQuotaOperationErrorDomain" - case RetryUploadOperation = "RetryUploadOperationErrorDomain" - case ExportQuotaCreateOperation = "ExportQuotaCreateOperationErrorDomain" case CreateVideoOperation = "CreateVideoOperationErrorDomain" case VideoOperation = "VideoOperationErrorDomain" - case MeQuotaOperation = "MeQuotaOperationErrorDomain" - case MeOperation = "MeOperationErrorDomain" - case PHAssetCloudExportQuotaOperation = "PHAssetCloudExportQuotaOperationErrorDomain" - case PHAssetExportSessionOperation = "PHAssetExportSessionOperationErrorDomain" - case PHAssetDownloadOperation = "PHAssetDownloadOperationErrorDomain" + case ExportSessionOperation = "ExportSessionOperationErrorDomain" case ExportOperation = "ExportOperationErrorDomain" case DeleteVideoOperation = "DeleteVideoOperationErrorDomain" @@ -67,14 +56,9 @@ public enum UploadErrorDomain: String public enum UploadLocalErrorCode: Int { - case cannotEvaluateDailyQuota = 0 // "User object did not contain uploadQuota.quota information" - case cannotCalculateDiskSpace = 1 // "File system information did not contain NSFileSystemFreeSize key:value pair" - case cannotEvaluateWeeklyQuota = 2 // "User object did not contain uploadQuota.space information" - - case diskSpaceException = 3 - case assetIsNotExportable = 4 - case dailyQuotaException = 5 - case weeklyQuotaException = 6 + case cannotCalculateDiskSpace // "File system information did not contain NSFileSystemFreeSize key:value pair" + case diskSpaceException + case assetIsNotExportable } public enum UploadErrorKey: String diff --git a/VimeoUpload/Upload/Extensions/NSURL+Upload.swift b/VimeoUpload/Upload/Extensions/NSURL+Upload.swift index 877fad03..e577bc5a 100644 --- a/VimeoUpload/Upload/Extensions/NSURL+Upload.swift +++ b/VimeoUpload/Upload/Extensions/NSURL+Upload.swift @@ -34,25 +34,41 @@ import Foundation public extension URL { - static func uploadURL(withFileName filename: String, fileType: String) throws -> URL + static func uploadURL(documentsFolderURL: URL? = nil, withFileName filename: String, fileType: String) throws -> URL { - let url = URL.uploadDirectory() + let url = URL.uploadDirectory(documentsFolderURL: documentsFolderURL) - if FileManager.default.fileExists(atPath: url.absoluteString) == false + if FileManager.default.fileExists(atPath: url.path) == false { - try FileManager.default.createDirectory(atPath: url.absoluteString, withIntermediateDirectories: true, attributes: nil) + try FileManager.default.createDirectory(atPath: url.path, withIntermediateDirectories: true, attributes: nil) } let unmanagedTag = UTTypeCopyPreferredTagWithClass(fileType as CFString, kUTTagClassFilenameExtension)! let ext = unmanagedTag.takeRetainedValue() as String - let path = url.appendingPathComponent(filename).appendingPathExtension(ext).absoluteString + let path = url.appendingPathComponent(filename).appendingPathExtension(ext) - return URL(fileURLWithPath: path) + return path } - static func uploadDirectory() -> URL + static func uploadDirectory(documentsFolderURL: URL? = nil) -> URL { - let documentsURL = URL(string: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])! + let documentsURL: URL + + if let documentsFolderURL = documentsFolderURL + { + documentsURL = documentsFolderURL + } + else + { + do + { + documentsURL = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) + } + catch + { + fatalError("Failure: Documents folder does not exist.") + } + } return documentsURL.appendingPathComponent("uploader").appendingPathComponent("videos") } diff --git a/VimeoUpload/Upload/Model/VideoSettings.swift b/VimeoUpload/Upload/Model/VideoSettings.swift index 2049833b..2f50b1e6 100644 --- a/VimeoUpload/Upload/Model/VideoSettings.swift +++ b/VimeoUpload/Upload/Model/VideoSettings.swift @@ -26,7 +26,7 @@ import Foundation -public class VideoSettings: NSObject, NSCoding +open class VideoSettings: NSObject, NSCoding { public var title: String? { @@ -61,7 +61,7 @@ public class VideoSettings: NSObject, NSCoding // MARK: Public API - public func parameterDictionary() -> [String: Any] + open func parameterDictionary() -> [String: Any] { var parameters: [String: Any] = [:] diff --git a/VimeoUpload/Upload/Networking/New Upload (Private)/VimeoRequestSerializer+Upload.swift b/VimeoUpload/Upload/Networking/New Upload (Private)/VimeoRequestSerializer+Upload.swift index 0f331148..136f009d 100644 --- a/VimeoUpload/Upload/Networking/New Upload (Private)/VimeoRequestSerializer+Upload.swift +++ b/VimeoUpload/Upload/Networking/New Upload (Private)/VimeoRequestSerializer+Upload.swift @@ -1,5 +1,5 @@ // -// VimeoRequestSerializer+SimpleUpload.swift +// VimeoRequestSerializer+Upload.swift // VimeoUpload // // Created by Alfred Hanssen on 11/20/15. @@ -29,10 +29,23 @@ import VimeoNetworking extension VimeoRequestSerializer { + private struct Constants + { + static let ApproachKey = "approach" + static let ApproachDefaultValue = "streaming" + static let UploadKey = "upload" + } + func createVideoRequest(with url: URL, videoSettings: VideoSettings?) throws -> NSMutableURLRequest { - var parameters = try self.createVideoRequestBaseParameters(url: url) - parameters["create_clip"] = "true" + // Create a dictionary containing the file size parameters + var uploadParameters = try self.createFileSizeParameters(url: url) + + // Add on the key-value pair for approach type + uploadParameters[Constants.ApproachKey] = Constants.ApproachDefaultValue + + // Store `uploadParameters` dictionary as the value to "upload" key inside `parameters` dictionary. + var parameters = [Constants.UploadKey: uploadParameters as Any] if let videoSettings = videoSettings { diff --git a/VimeoUpload/Upload/Networking/New Upload (Private)/VimeoSessionManager+Upload.swift b/VimeoUpload/Upload/Networking/New Upload (Private)/VimeoSessionManager+Upload.swift index 00fbdbdd..21071325 100644 --- a/VimeoUpload/Upload/Networking/New Upload (Private)/VimeoSessionManager+Upload.swift +++ b/VimeoUpload/Upload/Networking/New Upload (Private)/VimeoSessionManager+Upload.swift @@ -29,7 +29,7 @@ import VimeoNetworking extension VimeoSessionManager { - func createVideoDataTask(url: URL, videoSettings: VideoSettings?, completionHandler: @escaping UploadTicketCompletionHandler) throws -> URLSessionDataTask + func createVideoDataTask(url: URL, videoSettings: VideoSettings?, completionHandler: @escaping VideoCompletionHandler) throws -> URLSessionDataTask { let request = try (self.requestSerializer as! VimeoRequestSerializer).createVideoRequest(with: url, videoSettings: videoSettings) @@ -44,8 +44,8 @@ extension VimeoSessionManager do { - let uploadTicket = try (strongSelf.responseSerializer as! VimeoResponseSerializer).process(createVideoResponse: response, responseObject: responseObject as AnyObject?, error: error as NSError?) - completionHandler(uploadTicket, nil) + let video = try (strongSelf.responseSerializer as! VimeoResponseSerializer).process(videoResponse: response, responseObject: responseObject as AnyObject?, error: error as NSError?) + completionHandler(video, nil) } catch let error as NSError { diff --git a/VimeoUpload/Upload/Networking/Old Upload/VimeoResponseSerializer+OldUpload.swift b/VimeoUpload/Upload/Networking/Old Upload/VimeoResponseSerializer+OldUpload.swift index e82ca62d..d6a87e8e 100644 --- a/VimeoUpload/Upload/Networking/Old Upload/VimeoResponseSerializer+OldUpload.swift +++ b/VimeoUpload/Upload/Networking/Old Upload/VimeoResponseSerializer+OldUpload.swift @@ -31,27 +31,6 @@ extension VimeoResponseSerializer { private static let LocationKey = "Location" - func process(meResponse response: URLResponse?, responseObject: AnyObject?, error: NSError?) throws -> VIMUser - { - do - { - try checkDataResponseForError(response: response, responseObject: responseObject, error: error) - } - catch let error as NSError - { - throw error.error(byAddingDomain: UploadErrorDomain.Me.rawValue) - } - - do - { - return try self.user(from: responseObject) - } - catch let error as NSError - { - throw error.error(byAddingDomain: UploadErrorDomain.Me.rawValue) - } - } - func process(myVideosResponse response: URLResponse?, responseObject: AnyObject?, error: NSError?) throws -> [VIMVideo] { do diff --git a/VimeoUpload/Upload/Networking/Old Upload/VimeoSessionManager+OldUpload.swift b/VimeoUpload/Upload/Networking/Old Upload/VimeoSessionManager+OldUpload.swift index 4e6e6b00..b0a46ebf 100644 --- a/VimeoUpload/Upload/Networking/Old Upload/VimeoSessionManager+OldUpload.swift +++ b/VimeoUpload/Upload/Networking/Old Upload/VimeoSessionManager+OldUpload.swift @@ -29,7 +29,6 @@ import VimeoNetworking enum UploadTaskDescription: String { - case Me = "Me" case MyVideos = "MyVideos" case CreateVideo = "CreateVideo" case UploadVideo = "UploadVideo" @@ -44,36 +43,6 @@ enum UploadTaskDescription: String extension VimeoSessionManager { - public func meDataTask(completionHandler: @escaping UserCompletionHandler) throws -> URLSessionDataTask - { - let request = try (self.requestSerializer as! VimeoRequestSerializer).meRequest() - - let task = self.dataTask(with: request as URLRequest, completionHandler: { [weak self] (response, responseObject, error) -> Void in - - // Do model parsing on a background thread - DispatchQueue.global(qos: .default).async(execute: { [weak self] () -> Void in - guard let strongSelf = self else - { - return - } - - do - { - let user = try (strongSelf.responseSerializer as! VimeoResponseSerializer).process(meResponse: response, responseObject: responseObject as AnyObject?, error: error as NSError?) - completionHandler(user, nil) - } - catch let error as NSError - { - completionHandler(nil, error) - } - }) - }) - - task.taskDescription = UploadTaskDescription.Me.rawValue - - return task - } - public func myVideosDataTask(completionHandler: @escaping VideosCompletionHandler) throws -> URLSessionDataTask { let request = try (self.requestSerializer as! VimeoRequestSerializer).myVideosRequest() diff --git a/VimeoUpload/Upload/Networking/Old Upload/VimeoRequestSerializer+OldUpload.swift b/VimeoUpload/Upload/Networking/Shared/VimeoRequestSerializer+SharedUpload.swift similarity index 90% rename from VimeoUpload/Upload/Networking/Old Upload/VimeoRequestSerializer+OldUpload.swift rename to VimeoUpload/Upload/Networking/Shared/VimeoRequestSerializer+SharedUpload.swift index 6d4b8112..f2f503d3 100644 --- a/VimeoUpload/Upload/Networking/Old Upload/VimeoRequestSerializer+OldUpload.swift +++ b/VimeoUpload/Upload/Networking/Shared/VimeoRequestSerializer+SharedUpload.swift @@ -1,5 +1,5 @@ // -// VimeoRequestSerializer+Upload.swift +// VimeoRequestSerializer+SharedUpload.swift // VimeoUpload // // Created by Alfred Hanssen on 10/21/15. @@ -30,20 +30,14 @@ import VimeoNetworking extension VimeoRequestSerializer { - func meRequest() throws -> NSMutableURLRequest + private struct Constants { - let url = URL(string: "/me", relativeTo: VimeoBaseURL)! - var error: NSError? - - let request = self.request(withMethod: "GET", urlString: url.absoluteString, parameters: nil, error: &error) - if let error = error - { - throw error.error(byAddingDomain: UploadErrorDomain.Me.rawValue) - } - - return request + static let CreateVideoURI = "/me/videos" + static let TypeKey = "type" + static let TypeDefaultValue = VIMUpload.UploadApproach.streaming.rawValue + static let SizeKey = "size" } - + func myVideosRequest() throws -> NSMutableURLRequest { let url = URL(string: "/me/videos", relativeTo: VimeoBaseURL)! @@ -57,12 +51,14 @@ extension VimeoRequestSerializer return request } - + func createVideoRequest(with url: URL) throws -> NSMutableURLRequest { - let parameters = try self.createVideoRequestBaseParameters(url: url) + var parameters = try self.createFileSizeParameters(url: url) - let url = URL(string: "/me/videos", relativeTo: VimeoBaseURL)! + parameters[Constants.TypeKey] = Constants.TypeDefaultValue + + let url = URL(string: Constants.CreateVideoURI, relativeTo: VimeoBaseURL)! return try self.createVideoRequest(with: url, parameters: parameters) } @@ -79,8 +75,8 @@ extension VimeoRequestSerializer return request } - - func createVideoRequestBaseParameters(url: URL) throws -> [String: Any] + + func createFileSizeParameters(url: URL) throws -> [String: Any] { let asset = AVURLAsset(url: url) @@ -94,7 +90,9 @@ extension VimeoRequestSerializer throw error.error(byAddingDomain: UploadErrorDomain.Create.rawValue) } - return ["type": "streaming", "size": fileSize] + let fileSizeString = fileSize + + return [Constants.SizeKey: fileSizeString] } func uploadVideoRequest(with source: URL, destination: String) throws -> NSMutableURLRequest diff --git a/VimeoUpload/Upload/Operations/Private/CreateVideoOperation.swift b/VimeoUpload/Upload/Operations/Async/CreateVideoOperation.swift similarity index 94% rename from VimeoUpload/Upload/Operations/Private/CreateVideoOperation.swift rename to VimeoUpload/Upload/Operations/Async/CreateVideoOperation.swift index e84caafb..97748256 100644 --- a/VimeoUpload/Upload/Operations/Private/CreateVideoOperation.swift +++ b/VimeoUpload/Upload/Operations/Async/CreateVideoOperation.swift @@ -35,7 +35,7 @@ public class CreateVideoOperation: ConcurrentOperation private var task: URLSessionDataTask? - public var result: VIMUploadTicket? + public var result: VIMVideo? public var error: NSError? // MARK: - Initialization @@ -65,7 +65,7 @@ public class CreateVideoOperation: ConcurrentOperation do { - self.task = try self.sessionManager.createVideoDataTask(url: url, videoSettings: videoSettings, completionHandler: { [weak self] (uploadTicket, error) -> Void in + self.task = try self.sessionManager.createVideoDataTask(url: url, videoSettings: videoSettings, completionHandler: { [weak self] (video, error) -> Void in guard let strongSelf = self else { @@ -83,9 +83,9 @@ public class CreateVideoOperation: ConcurrentOperation { strongSelf.error = error.error(byAddingDomain: UploadErrorDomain.CreateVideoOperation.rawValue) } - else if let uploadTicket = uploadTicket + else if let video = video { - strongSelf.result = uploadTicket + strongSelf.result = video } else { diff --git a/VimeoUpload/Upload/Operations/Async/ExportOperation.swift b/VimeoUpload/Upload/Operations/Async/ExportOperation.swift index ecf771ca..de7d28ef 100644 --- a/VimeoUpload/Upload/Operations/Async/ExportOperation.swift +++ b/VimeoUpload/Upload/Operations/Async/ExportOperation.swift @@ -50,14 +50,14 @@ public class ExportOperation: ConcurrentOperation // MARK: - Initialization - convenience init(asset: AVAsset) + convenience init(asset: AVAsset, documentsFolderURL: URL? = nil) { let exportSession = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetPassthrough)! - self.init(exportSession: exportSession) + self.init(exportSession: exportSession, documentsFolderURL: documentsFolderURL) } - init(exportSession: AVAssetExportSession) + init(exportSession: AVAssetExportSession, documentsFolderURL: URL? = nil) { // exportSession.timeRange must be valid so that the exportSession's estimatedOutputFileLength is non zero // We use estimatedOutputFileLength below to check that there is ample disk space to perform the export [AH] 10/15/2015 @@ -76,7 +76,7 @@ public class ExportOperation: ConcurrentOperation do { let filename = ProcessInfo.processInfo.globallyUniqueString - exportSession.outputURL = try URL.uploadURL(withFileName: filename, fileType: type(of: self).FileType) + exportSession.outputURL = try URL.uploadURL(documentsFolderURL: documentsFolderURL, withFileName: filename, fileType: type(of: self).FileType) } catch let error as NSError { diff --git a/VimeoUpload/Upload/Operations/Private/ExportQuotaCreateOperation.swift b/VimeoUpload/Upload/Operations/Async/ExportSessionExportCreateVideoOperation.swift similarity index 70% rename from VimeoUpload/Upload/Operations/Private/ExportQuotaCreateOperation.swift rename to VimeoUpload/Upload/Operations/Async/ExportSessionExportCreateVideoOperation.swift index 732aecd7..91c0737c 100644 --- a/VimeoUpload/Upload/Operations/Private/ExportQuotaCreateOperation.swift +++ b/VimeoUpload/Upload/Operations/Async/ExportSessionExportCreateVideoOperation.swift @@ -1,5 +1,5 @@ // -// ExportQuotaCreateOperation.swift +// ExportSessionExportCreateVideoOperation.swift // VimeoUpload // // Created by Hanssen, Alfie on 12/22/15. @@ -27,10 +27,10 @@ import Foundation import AVFoundation import VimeoNetworking +import Photos -open class ExportQuotaCreateOperation: ConcurrentOperation +open class ExportSessionExportCreateVideoOperation: ConcurrentOperation { - let me: VIMUser let sessionManager: VimeoSessionManager open var videoSettings: VideoSettings? let operationQueue: OperationQueue @@ -42,8 +42,11 @@ open class ExportQuotaCreateOperation: ConcurrentOperation // MARK: + private let phAsset: PHAsset + private let documentsFolderURL: URL? + open var url: URL? - open var uploadTicket: VIMUploadTicket? + open var video: VIMVideo? open var error: NSError? { didSet @@ -57,14 +60,31 @@ open class ExportQuotaCreateOperation: ConcurrentOperation // MARK: - Initialization - public init(me: VIMUser, sessionManager: VimeoSessionManager, videoSettings: VideoSettings? = nil) + /// Initializes an instance of `ExportSessionExportCreateVideoOperation`. + /// + /// - Parameters: + /// - phAsset: An instance of `PHAsset` representing a media that the + /// user picks from the Photos app. + /// - sessionManager: An instance of `VimeoSessionManager` that will + /// be used for creating an upload ticket. + /// - videoSettings: An instance of `VideoSettings` representing the + /// title, description, and privacy option that the user has edited. + /// - documentsFolderURL: An URL pointing to a Documents folder; + /// default to `nil`. For third-party use, this argument should not be + /// filled. + public init(phAsset: PHAsset, sessionManager: VimeoSessionManager, videoSettings: VideoSettings? = nil, documentsFolderURL: URL? = nil) { - self.me = me + self.phAsset = phAsset + self.sessionManager = sessionManager self.videoSettings = videoSettings self.operationQueue = OperationQueue() self.operationQueue.maxConcurrentOperationCount = 1 + + self.documentsFolderURL = documentsFolderURL + + super.init() } deinit @@ -81,8 +101,8 @@ open class ExportQuotaCreateOperation: ConcurrentOperation return } - let operation = self.makeExportQuotaOperation(with: self.me)! - self.perform(exportQuotaOperation: operation) + let operation = ExportSessionExportOperation(phAsset: self.phAsset, documentsFolderURL: self.documentsFolderURL) + self.perform(exportSessionExportOperation: operation) } override open func cancel() @@ -97,18 +117,9 @@ open class ExportQuotaCreateOperation: ConcurrentOperation } } - // MARK: Public API - - func makeExportQuotaOperation(with me: VIMUser) -> ExportQuotaOperation? - { - assertionFailure("Subclasses must override") - - return nil - } - // MARK: Private API - private func perform(exportQuotaOperation operation: ExportQuotaOperation) + private func perform(exportSessionExportOperation operation: ExportSessionExportOperation) { operation.downloadProgressBlock = { [weak self] (progress: Double) -> Void in self?.downloadProgressBlock?(progress) @@ -168,20 +179,21 @@ open class ExportQuotaCreateOperation: ConcurrentOperation if let error = operation.error { - if let fileSize = try? AVURLAsset(url: url).fileSize(), let availableSpace = strongSelf.me.uploadQuota?.sizeQuota?.free?.doubleValue - { - let userInfo = [UploadErrorKey.FileSize.rawValue: fileSize, UploadErrorKey.AvailableSpace.rawValue: availableSpace] - strongSelf.error = error.error(byAddingUserInfo: userInfo) - } - else + var userInfo = error.userInfo + + let asset = AVURLAsset(url: url) + + if let fileSize = try? asset.fileSize() { - strongSelf.error = error + userInfo.append([UploadErrorKey.FileSize.rawValue : fileSize]) } + + strongSelf.error = NSError(domain: error.domain, code: error.code, userInfo: userInfo) } else { strongSelf.url = url - strongSelf.uploadTicket = operation.result! + strongSelf.video = operation.result! strongSelf.state = .finished } }) diff --git a/VimeoUpload/Upload/Operations/Async/ExportQuotaOperation.swift b/VimeoUpload/Upload/Operations/Async/ExportSessionExportOperation.swift similarity index 77% rename from VimeoUpload/Upload/Operations/Async/ExportQuotaOperation.swift rename to VimeoUpload/Upload/Operations/Async/ExportSessionExportOperation.swift index 1554ce25..586a8341 100644 --- a/VimeoUpload/Upload/Operations/Async/ExportQuotaOperation.swift +++ b/VimeoUpload/Upload/Operations/Async/ExportSessionExportOperation.swift @@ -1,5 +1,5 @@ // -// ExportQuotaOperation.swift +// ExportSessionExportOperation.swift // VimeoUpload // // Created by Hanssen, Alfie on 12/22/15. @@ -27,17 +27,19 @@ import Foundation import AVFoundation import VimeoNetworking +import Photos public typealias ExportProgressBlock = (AVAssetExportSession, Double) -> Void -open class ExportQuotaOperation: ConcurrentOperation +open class ExportSessionExportOperation: ConcurrentOperation { - let me: VIMUser let operationQueue: OperationQueue open var downloadProgressBlock: ProgressBlock? open var exportProgressBlock: ExportProgressBlock? + private let phAsset: PHAsset + open var error: NSError? { didSet @@ -50,11 +52,26 @@ open class ExportQuotaOperation: ConcurrentOperation } open var result: URL? - init(me: VIMUser) + private let documentsFolderURL: URL? + + /// Initializes an instance of `ExportSessionExportOperation`. + /// + /// - Parameters: + /// - phAsset: An instance of `PHAsset` representing a media that the + /// user picks from the Photos app. + /// - documentsFolderURL: An URL pointing to a Documents folder; + /// default to `nil`. For third-party use, this argument should not be + /// filled. + public init(phAsset: PHAsset, documentsFolderURL: URL? = nil) { - self.me = me + self.phAsset = phAsset + self.operationQueue = OperationQueue() self.operationQueue.maxConcurrentOperationCount = 1 + + self.documentsFolderURL = documentsFolderURL + + super.init() } deinit @@ -90,22 +107,9 @@ open class ExportQuotaOperation: ConcurrentOperation func requestExportSession() { - assertionFailure("Subclasses must override") - } - - func performExport(exportOperation: ExportOperation) - { - exportOperation.progressBlock = { [weak self] (progress: Double) -> Void in // This block is called on a background thread - - if let progressBlock = self?.exportProgressBlock - { - DispatchQueue.main.async(execute: { () -> Void in - progressBlock(exportOperation.exportSession, progress) - }) - } - } - - exportOperation.completionBlock = { [weak self] () -> Void in + let operation = ExportSessionOperation(phAsset: self.phAsset) + operation.progressBlock = self.downloadProgressBlock + operation.completionBlock = { [weak self] () -> Void in DispatchQueue.main.async(execute: { [weak self] () -> Void in @@ -114,47 +118,40 @@ open class ExportQuotaOperation: ConcurrentOperation return } - if exportOperation.isCancelled == true + if operation.isCancelled == true { return } - if let error = exportOperation.error + if let error = operation.error { strongSelf.error = error } else { - let url = exportOperation.outputURL! - strongSelf.checkExactWeeklyQuota(url: url) + let exportSession = operation.result! + let exportOperation = ExportOperation(exportSession: exportSession, documentsFolderURL: strongSelf.documentsFolderURL) + strongSelf.performExport(exportOperation: exportOperation) } }) } - self.operationQueue.addOperation(exportOperation) + self.operationQueue.addOperation(operation) } - // MARK: Private API - - private func checkExactWeeklyQuota(url: URL) + func performExport(exportOperation: ExportOperation) { - let me = self.me - let avUrlAsset = AVURLAsset(url: url) - - let fileSize: Double - do - { - fileSize = try avUrlAsset.fileSize() - } - catch let error as NSError - { - self.error = error + exportOperation.progressBlock = { [weak self] (progress: Double) -> Void in // This block is called on a background thread - return + if let progressBlock = self?.exportProgressBlock + { + DispatchQueue.main.async(execute: { () -> Void in + progressBlock(exportOperation.exportSession, progress) + }) + } } - let operation = WeeklyQuotaOperation(user: me, fileSize: fileSize) - operation.completionBlock = { [weak self] () -> Void in + exportOperation.completionBlock = { [weak self] () -> Void in DispatchQueue.main.async(execute: { [weak self] () -> Void in @@ -163,26 +160,24 @@ open class ExportQuotaOperation: ConcurrentOperation return } - if operation.isCancelled == true + if exportOperation.isCancelled == true { return } - // Do not check error, allow to pass [AH] - - if let result = operation.result, result.success == false + if let error = exportOperation.error { - let userInfo = [UploadErrorKey.FileSize.rawValue: result.fileSize, UploadErrorKey.AvailableSpace.rawValue: result.availableSpace] - strongSelf.error = NSError.error(withDomain: UploadErrorDomain.PHAssetCloudExportQuotaOperation.rawValue, code: UploadLocalErrorCode.weeklyQuotaException.rawValue, description: "Upload would exceed weekly quota.").error(byAddingUserInfo: userInfo as [String : AnyObject]) + strongSelf.error = error } else { + let url = exportOperation.outputURL! strongSelf.result = url strongSelf.state = .finished } }) } - self.operationQueue.addOperation(operation) + self.operationQueue.addOperation(exportOperation) } } diff --git a/VimeoUpload/Upload/Operations/Async/PHAssetExportSessionOperation.swift b/VimeoUpload/Upload/Operations/Async/ExportSessionOperation.swift similarity index 93% rename from VimeoUpload/Upload/Operations/Async/PHAssetExportSessionOperation.swift rename to VimeoUpload/Upload/Operations/Async/ExportSessionOperation.swift index 3d258d7c..b25fa3f7 100644 --- a/VimeoUpload/Upload/Operations/Async/PHAssetExportSessionOperation.swift +++ b/VimeoUpload/Upload/Operations/Async/ExportSessionOperation.swift @@ -1,5 +1,5 @@ // -// PHAssetExportSessionOperation.swift +// ExportSessionOperation.swift // VimeoUpload // // Created by Hanssen, Alfie on 11/10/15. @@ -27,7 +27,7 @@ import Foundation import Photos -class PHAssetExportSessionOperation: ConcurrentOperation +class ExportSessionOperation: ConcurrentOperation { private let phAsset: PHAsset private let exportPreset: String @@ -120,7 +120,7 @@ class PHAssetExportSessionOperation: ConcurrentOperation if let info = info, let error = info[PHImageErrorKey] as? NSError { - strongSelf.error = error.error(byAddingDomain: UploadErrorDomain.PHAssetExportSessionOperation.rawValue) + strongSelf.error = error.error(byAddingDomain: UploadErrorDomain.ExportSessionOperation.rawValue) } else if let exportSession = exportSession { @@ -128,7 +128,7 @@ class PHAssetExportSessionOperation: ConcurrentOperation } else { - strongSelf.error = NSError.error(withDomain: UploadErrorDomain.PHAssetExportSessionOperation.rawValue, code: nil, description: "Request for export session returned no error and no export session") + strongSelf.error = NSError.error(withDomain: UploadErrorDomain.ExportSessionOperation.rawValue, code: nil, description: "Request for export session returned no error and no export session") } strongSelf.state = .finished diff --git a/VimeoUpload/Upload/Operations/Async/MeOperation.swift b/VimeoUpload/Upload/Operations/Async/MeOperation.swift deleted file mode 100644 index 7ddb7100..00000000 --- a/VimeoUpload/Upload/Operations/Async/MeOperation.swift +++ /dev/null @@ -1,111 +0,0 @@ -// -// MeOperation.swift -// VimeoUpload -// -// Created by Alfred Hanssen on 11/9/15. -// Copyright © 2015 Vimeo. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation -import VimeoNetworking - -public class MeOperation: ConcurrentOperation -{ - private let sessionManager: VimeoSessionManager - - private var task: URLSessionDataTask? - - public var result: VIMUser? - public var error: NSError? - - // MARK: - Initialization - - public init(sessionManager: VimeoSessionManager) - { - self.sessionManager = sessionManager - - super.init() - } - - deinit - { - self.task?.cancel() - self.task = nil - } - - // MARK: Overrides - - override public func main() - { - if self.isCancelled - { - return - } - - do - { - self.task = try self.sessionManager.meDataTask(completionHandler: { [weak self] (user, error) -> Void in - - guard let strongSelf = self else - { - return - } - - strongSelf.task = nil - - if strongSelf.isCancelled - { - return - } - - if let error = error - { - strongSelf.error = error.error(byAddingDomain: UploadErrorDomain.MeOperation.rawValue) - } - else if let user = user - { - strongSelf.result = user - } - else - { - fatalError("Execution should never reach this point") - } - - strongSelf.state = .finished - }) - - self.task?.resume() - } - catch let error as NSError - { - self.error = error.error(byAddingDomain: UploadErrorDomain.MeOperation.rawValue) - self.state = .finished - } - } - - override public func cancel() - { - super.cancel() - - self.task?.cancel() - self.task = nil - } -} diff --git a/VimeoUpload/Upload/Operations/Async/MeQuotaOperation.swift b/VimeoUpload/Upload/Operations/Async/MeQuotaOperation.swift deleted file mode 100644 index f9207b31..00000000 --- a/VimeoUpload/Upload/Operations/Async/MeQuotaOperation.swift +++ /dev/null @@ -1,298 +0,0 @@ -// -// MeQuotaOperation.swift -// VimeoUpload -// -// Created by Alfred Hanssen on 11/9/15. -// Copyright © 2015 Vimeo. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation -import AVFoundation -import VimeoNetworking - -// This flow encapsulates the following steps: -// 1. Request me -// 2. Fulfill asset selection -// 3. Check daily quota -// 4. If non iCloud asset, check approximate weekly quota -// 5. If non iCloud asset, check approximate disk space - -public class MeQuotaOperation: ConcurrentOperation -{ - let sessionManager: VimeoSessionManager - - public var me: VIMUser? - private let operationQueue: OperationQueue - - private var avAsset: AVAsset? - private var selectionFulfilled: Bool = false - - public var error: NSError? - { - didSet - { - if self.error != nil - { - self.state = .finished - } - } - } - - public init(sessionManager: VimeoSessionManager, me: VIMUser? = nil) - { - self.sessionManager = sessionManager - self.me = me - - self.operationQueue = OperationQueue() - self.operationQueue.maxConcurrentOperationCount = 1 - } - - deinit - { - self.operationQueue.cancelAllOperations() - } - - // MARK: Overrides - - override public func main() - { - if self.isCancelled - { - return - } - - if let _ = self.me - { - self.proceedIfMeAndSelectionFulfilled() - } - else - { - self.requestMe() - } - } - - override public func cancel() - { - super.cancel() - - self.operationQueue.cancelAllOperations() - } - - // MARK: Public API - - // If selection is fulfilled with a nil AVAsset, - // Then we're dealing with an iCloud asset - // This is ok, but download of iCloud asset is not handled by this workflow - - public func fulfillSelection(avAsset: AVAsset?) - { - if self.selectionFulfilled == true - { - assertionFailure("Attempt to fulfill selection that has already been fulfilled") - - return - } - - if self.isCancelled - { - return - } - - if let _ = self.error - { - return - } - - self.avAsset = avAsset - self.selectionFulfilled = true - - self.proceedIfMeAndSelectionFulfilled() - } - - // MARK: Private API - - private func requestMe() - { - let operation = MeOperation(sessionManager: self.sessionManager) - operation.completionBlock = { [weak self] () -> Void in - - DispatchQueue.main.async(execute: { [weak self] () -> Void in - - guard let strongSelf = self else - { - return - } - - if operation.isCancelled == true - { - return - } - - if let error = operation.error - { - strongSelf.error = error - } - else - { - strongSelf.me = operation.result! - strongSelf.proceedIfMeAndSelectionFulfilled() - } - }) - } - - self.operationQueue.addOperation(operation) - } - - private func proceedIfMeAndSelectionFulfilled() - { - if let _ = self.error - { - return - } - - guard let _ = self.me, self.selectionFulfilled == true else - { - return - } - - self.checkDailyQuota() - } - - private func checkDailyQuota() - { - let me = self.me! - - let operation = DailyQuotaOperation(user: me) - operation.completionBlock = { [weak self] () -> Void in - - DispatchQueue.main.async(execute: { [weak self] () -> Void in - - guard let strongSelf = self else - { - return - } - - if operation.isCancelled == true - { - return - } - - // Do not check error, allow to pass [AH] - - if let result = operation.result, result == false - { - strongSelf.error = NSError.error(withDomain: UploadErrorDomain.MeQuotaOperation.rawValue, code: UploadLocalErrorCode.dailyQuotaException.rawValue, description: "Upload would exceed daily quota.") - } - else - { - if strongSelf.avAsset != nil - { - strongSelf.checkApproximateWeeklyQuota() // If the asset is not nil, then we can perform the the MB-based checks - } - else - { - strongSelf.state = .finished // If the asset is nil, then it's in iCloud and we don't yet have access to the filesize - } - } - }) - } - - self.operationQueue.addOperation(operation) - } - - private func checkApproximateWeeklyQuota() - { - let me = self.me! - let avAsset = self.avAsset! - avAsset.approximateFileSize { [weak self] (value) -> Void in - - guard let strongSelf = self else - { - return - } - - let operation = WeeklyQuotaOperation(user: me, fileSize: value) - operation.completionBlock = { [weak self] () -> Void in - - DispatchQueue.main.async(execute: { [weak self] () -> Void in - - guard let strongSelf = self else - { - return - } - - if operation.isCancelled == true - { - return - } - - // Do not check error, allow to pass [AH] - - if let result = operation.result, result.success == false - { - let userInfo = [UploadErrorKey.FileSize.rawValue: result.fileSize, UploadErrorKey.AvailableSpace.rawValue: result.availableSpace] - strongSelf.error = NSError.error(withDomain: UploadErrorDomain.MeQuotaOperation.rawValue, code: UploadLocalErrorCode.weeklyQuotaException.rawValue, description: "Upload would exceed approximate weekly quota.").error(byAddingUserInfo: userInfo as [String : AnyObject]) - } - else - { - strongSelf.checkApproximateDiskSpace(fileSize: value) - } - }) - } - - strongSelf.operationQueue.addOperation(operation) - } - } - - private func checkApproximateDiskSpace(fileSize: Float64) - { - let operation = DiskSpaceOperation(fileSize: fileSize) - operation.completionBlock = { [weak self] () -> Void in - - DispatchQueue.main.async(execute: { [weak self] () -> Void in - - guard let strongSelf = self else - { - return - } - - if operation.isCancelled == true - { - return - } - - // Do not check error, allow to pass [AH] - - if let result = operation.result, result.success == false - { - let userInfo = [UploadErrorKey.FileSize.rawValue: result.fileSize, UploadErrorKey.AvailableSpace.rawValue: result.availableSpace] - strongSelf.error = NSError.error(withDomain: UploadErrorDomain.MeQuotaOperation.rawValue, code: UploadLocalErrorCode.diskSpaceException.rawValue, description: "Not enough approximate disk space to export asset.").error(byAddingUserInfo: userInfo as [String : AnyObject]) - } - else - { - strongSelf.state = .finished - } - }) - } - - self.operationQueue.addOperation(operation) - } -} diff --git a/VimeoUpload/Upload/Operations/Async/PHAssetCloudExportQuotaOperation.swift b/VimeoUpload/Upload/Operations/Async/PHAssetCloudExportQuotaOperation.swift deleted file mode 100644 index 9ca99754..00000000 --- a/VimeoUpload/Upload/Operations/Async/PHAssetCloudExportQuotaOperation.swift +++ /dev/null @@ -1,81 +0,0 @@ -// -// PHAssetCloudExportQuotaOperation.swift -// VimeoUpload -// -// Created by Alfred Hanssen on 11/9/15. -// Copyright © 2015 Vimeo. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Photos -import VimeoNetworking - -// This flow encapsulates the following steps: -// 1. If inCloud, download -// 2. Export (check disk space within this step) -// 3. Check weekly quota - -public class PHAssetCloudExportQuotaOperation: ExportQuotaOperation -{ - let phAsset: PHAsset - - public init(me: VIMUser, phAsset: PHAsset) - { - self.phAsset = phAsset - - super.init(me: me) - } - - // MARK: Subclass Overrides - - override func requestExportSession() - { - let operation = PHAssetExportSessionOperation(phAsset: self.phAsset) - operation.progressBlock = super.downloadProgressBlock - operation.completionBlock = { [weak self] () -> Void in - - DispatchQueue.main.async(execute: { [weak self] () -> Void in - - guard let strongSelf = self else - { - return - } - - if operation.isCancelled == true - { - return - } - - if let error = operation.error - { - strongSelf.error = error - } - else - { - let exportSession = operation.result! - let exportOperation = ExportOperation(exportSession: exportSession) - strongSelf.performExport(exportOperation: exportOperation) - } - }) - } - - self.operationQueue.addOperation(operation) - } -} diff --git a/VimeoUpload/Upload/Operations/Async/PHAssetDownloadOperation.swift b/VimeoUpload/Upload/Operations/Async/PHAssetDownloadOperation.swift deleted file mode 100644 index cd135488..00000000 --- a/VimeoUpload/Upload/Operations/Async/PHAssetDownloadOperation.swift +++ /dev/null @@ -1,168 +0,0 @@ -// -// PHAssetDownloadOperation.swift -// VimeoUpload -// -// Created by Hanssen, Alfie on 10/13/15. -// Copyright © 2015 Vimeo. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation -import Photos - -public class PHAssetDownloadOperation: ConcurrentOperation -{ - private let phAsset: PHAsset - private var requestID: PHImageRequestID? - - public var progressBlock: ProgressBlock? - - public var result: AVAsset? - public var error: NSError? - - // MARK: - Initialization - - deinit - { - self.cleanup() - } - - public required init(phAsset: PHAsset) - { - self.phAsset = phAsset - - super.init() - } - - // MARK: Overrides - - override public func main() - { - if self.isCancelled - { - return - } - - let options = PHVideoRequestOptions() - options.isNetworkAccessAllowed = true - options.deliveryMode = .highQualityFormat - options.progressHandler = { [weak self] (progress: Double, error: Error?, stop: UnsafeMutablePointer, info: [AnyHashable: Any]?) -> Void in - - guard let strongSelf = self else - { - return - } - - strongSelf.requestID = nil - - if strongSelf.isCancelled - { - return - } - - if let info = info, let cancelled = info[PHImageCancelledKey] as? Bool, cancelled == true - { - return - } - - if strongSelf.state == .finished // Just in case - { - return - } - - if let error = error - { - strongSelf.progressBlock = nil - strongSelf.error = (error as NSError).error(byAddingDomain: UploadErrorDomain.PHAssetDownloadOperation.rawValue) - strongSelf.state = .finished - } - else if let info = info, let error = info[PHImageErrorKey] as? NSError - { - strongSelf.progressBlock = nil - strongSelf.error = error - strongSelf.state = .finished - } - else - { - strongSelf.progressBlock?(progress) - } - } - - self.requestID = PHImageManager.default().requestAVAsset(forVideo: self.phAsset, options: options) { [weak self] (asset, audioMix, info) -> Void in - - guard let strongSelf = self else - { - return - } - - strongSelf.requestID = nil - - if strongSelf.isCancelled - { - return - } - - if let info = info, let cancelled = info[PHImageCancelledKey] as? Bool, cancelled == true - { - return - } - - if strongSelf.state == .finished // In case the state is changed to .Finished in the progressHandler above - { - return - } - - if let info = info, let error = info[PHImageErrorKey] as? NSError - { - strongSelf.error = error.error(byAddingDomain: UploadErrorDomain.PHAssetDownloadOperation.rawValue) - } - else if let asset = asset - { - strongSelf.result = asset - } - else - { - strongSelf.error = NSError.error(withDomain: UploadErrorDomain.PHAssetDownloadOperation.rawValue, code: nil, description: "Request for AVAsset returned no error and no asset.") - } - - strongSelf.state = .finished - } - } - - override public func cancel() - { - super.cancel() - - self.cleanup() - } - - // MARK: Private API - - private func cleanup() - { - self.progressBlock = nil - - if let requestID = self.requestID - { - PHImageManager.default().cancelImageRequest(requestID) - self.requestID = nil - } - } -} diff --git a/VimeoUpload/Upload/Operations/Private/RetryUploadOperation.swift b/VimeoUpload/Upload/Operations/Async/RetryUploadOperation.swift similarity index 71% rename from VimeoUpload/Upload/Operations/Private/RetryUploadOperation.swift rename to VimeoUpload/Upload/Operations/Async/RetryUploadOperation.swift index 12073bc8..d255e62e 100644 --- a/VimeoUpload/Upload/Operations/Private/RetryUploadOperation.swift +++ b/VimeoUpload/Upload/Operations/Async/RetryUploadOperation.swift @@ -27,6 +27,7 @@ import Foundation import VimeoNetworking import AVFoundation +import Photos public class RetryUploadOperation: ConcurrentOperation { @@ -40,8 +41,9 @@ public class RetryUploadOperation: ConcurrentOperation // MARK: + private let phAsset: PHAsset + private(set) public var url: URL? - private(set) public var error: NSError? { didSet @@ -53,13 +55,30 @@ public class RetryUploadOperation: ConcurrentOperation } } + private let documentsFolderURL: URL? + // MARK: - Initialization - init(sessionManager: VimeoSessionManager) + /// Initializes an instance of `ExportSessionExportOperation`. + /// + /// - Parameters: + /// - phAsset: An instance of `PHAsset` representing a media that the + /// user picks from the Photos app. + /// - sessionManager: An instance of `VimeoSessionManager`. + /// - documentsFolderURL: An URL pointing to a Documents folder; + /// default to `nil`. For third-party use, this argument should not be + /// filled. + public init(phAsset: PHAsset, sessionManager: VimeoSessionManager, documentsFolderURL: URL? = nil) { + self.phAsset = phAsset + self.sessionManager = sessionManager self.operationQueue = OperationQueue() self.operationQueue.maxConcurrentOperationCount = 1 + + self.documentsFolderURL = documentsFolderURL + + super.init() } deinit @@ -76,7 +95,8 @@ public class RetryUploadOperation: ConcurrentOperation return } - self.performMeQuotaOperation() + let operation = ExportSessionExportOperation(phAsset: self.phAsset, documentsFolderURL: self.documentsFolderURL) + self.perform(exportSessionExportOperation: operation) } override public func cancel() @@ -88,42 +108,7 @@ public class RetryUploadOperation: ConcurrentOperation // MARK: Private API - private func performMeQuotaOperation() - { - let operation = MeQuotaOperation(sessionManager: self.sessionManager) - operation.completionBlock = { [weak self] () -> Void in - - DispatchQueue.main.async(execute: { [weak self] () -> Void in - - guard let strongSelf = self else - { - return - } - - if strongSelf.isCancelled - { - return - } - - if let error = operation.error - { - strongSelf.error = error - } - else - { - let user = operation.me! - let exportQuotaOperation = strongSelf.makeExportQuotaOperation(user: user)! - strongSelf.perform(exportQuotaOperation: exportQuotaOperation) - } - }) - } - - self.operationQueue.addOperation(operation) - - operation.fulfillSelection(avAsset: nil) - } - - private func perform(exportQuotaOperation operation: ExportQuotaOperation) + private func perform(exportSessionExportOperation operation: ExportSessionExportOperation) { operation.downloadProgressBlock = { [weak self] (progress: Double) -> Void in self?.downloadProgressBlock?(progress) @@ -161,13 +146,4 @@ public class RetryUploadOperation: ConcurrentOperation self.operationQueue.addOperation(operation) } - - // MARK: Public API - - func makeExportQuotaOperation(user: VIMUser) -> ExportQuotaOperation? - { - assertionFailure("Subclasses must override") - - return nil - } } diff --git a/VimeoUpload/Upload/Operations/Async/ConcurrentOperation.swift b/VimeoUpload/Upload/Operations/ConcurrentOperation.swift similarity index 100% rename from VimeoUpload/Upload/Operations/Async/ConcurrentOperation.swift rename to VimeoUpload/Upload/Operations/ConcurrentOperation.swift diff --git a/VimeoUpload/VimeoUploader.swift b/VimeoUpload/VimeoUploader.swift index 9f0dddfa..dc6a0c8f 100644 --- a/VimeoUpload/VimeoUploader.swift +++ b/VimeoUpload/VimeoUploader.swift @@ -45,21 +45,34 @@ open class VimeoUploader // MARK: - Initialization - public convenience init(backgroundSessionIdentifier: String, descriptorManagerDelegate: DescriptorManagerDelegate? = nil, accessToken: String) + public convenience init?(backgroundSessionIdentifier: String, descriptorManagerDelegate: DescriptorManagerDelegate? = nil, accessToken: String, apiVersion: String) { self.init(backgroundSessionIdentifier: backgroundSessionIdentifier, descriptorManagerDelegate: descriptorManagerDelegate, accessTokenProvider: { () -> String? in return accessToken - }) + }, apiVersion: apiVersion) } - public init(backgroundSessionIdentifier: String, descriptorManagerDelegate: DescriptorManagerDelegate? = nil, accessTokenProvider: @escaping VimeoRequestSerializer.AccessTokenProvider) + public init?(backgroundSessionIdentifier: String, descriptorManagerDelegate: DescriptorManagerDelegate? = nil, accessTokenProvider: @escaping VimeoRequestSerializer.AccessTokenProvider, apiVersion: String) { - self.foregroundSessionManager = VimeoSessionManager.defaultSessionManager(baseUrl: VimeoBaseURL, accessTokenProvider: accessTokenProvider) + self.foregroundSessionManager = VimeoSessionManager.defaultSessionManager(baseUrl: VimeoBaseURL, accessTokenProvider: accessTokenProvider, apiVersion: apiVersion) - self.deletionManager = VideoDeletionManager(sessionManager: self.foregroundSessionManager) + do + { + let documentsFolderURL = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) - self.descriptorManager = ReachableDescriptorManager(name: type(of: self).Name, backgroundSessionIdentifier: backgroundSessionIdentifier, descriptorManagerDelegate: descriptorManagerDelegate, - accessTokenProvider: accessTokenProvider) + guard let descriptorManager = ReachableDescriptorManager(name: type(of: self).Name, documentsFolderURL: documentsFolderURL, backgroundSessionIdentifier: backgroundSessionIdentifier, descriptorManagerDelegate: descriptorManagerDelegate, accessTokenProvider: accessTokenProvider, apiVersion: apiVersion), + let deletionManager = VideoDeletionManager(sessionManager: self.foregroundSessionManager, documentsFolderURL: documentsFolderURL) else + { + return nil + } + + self.descriptorManager = descriptorManager + self.deletionManager = deletionManager + } + catch + { + return nil + } } // MARK: Public API - Starting diff --git a/circle.yml b/circle.yml deleted file mode 100644 index 9ef2eb15..00000000 --- a/circle.yml +++ /dev/null @@ -1,13 +0,0 @@ -machine: - xcode: - version: 8.3.2 - -dependencies: - override: - - bundle install --deployment - cache_directories: - - "vendor/bundle" - -test: - override: - - FASTLANE_SKIP_UPDATE_CHECK=1 bundle exec fastlane test diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 524944d8..d42caf06 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -17,7 +17,7 @@ default_platform :ios platform :ios do before_all do - ensure_xcode_version(version: "8.3.2") + ensure_xcode_version(version: "9.0.1") end desc "buid the example project"