diff --git a/Pods/DVR/LICENSE b/Pods/DVR/LICENSE new file mode 100644 index 0000000..2317f84 --- /dev/null +++ b/Pods/DVR/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2015 Venmo + +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. diff --git a/Pods/DVR/Readme.markdown b/Pods/DVR/Readme.markdown new file mode 100644 index 0000000..92bf3d0 --- /dev/null +++ b/Pods/DVR/Readme.markdown @@ -0,0 +1,56 @@ +# DVR + +[![Version](https://img.shields.io/github/release/venmo/DVR.svg)](https://github.com/venmo/DVR/releases) +![Status](https://travis-ci.org/venmo/DVR.svg?branch=master) +![Swift Version](https://img.shields.io/badge/swift-4.2-orange.svg) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) +[![Swift Package Manager](https://img.shields.io/badge/SPM-compatible-brightgreen.svg)](https://swift.org/package-manager/) + +DVR is a simple Swift framework for making fake `NSURLSession` requests for iOS, +watchOS, and OS X based on [VCR](https://github.com/vcr/vcr). + +Easy [dependency injection](https://en.wikipedia.org/wiki/Dependency_injection) is the main design goal. The API is the same as `NSURLSession`. `DVR.Session` is a subclass of `NSURLSession` so you can use it as a drop in replacement anywhere. (Currently only data tasks are supported.) + + +## Usage + +```swift +let session = Session(cassetteName: "example") +let task = session.dataTask(with: request) { data, response, error in + // Do something with the response +} + +// Nothing happens until you call `resume` as you'd expect. +task.resume() +``` + +This will playback the `example` cassette. The completion handler exactly the same way it normally would. In this example, DVR will look for a cassette named `example.json` in your test bundle. + +If the recording of the request is missing, it will record and save it to disk. After saving to disk, it will assert with path of the recorded file. This causes the tests to stop so you can add the cassette to your test target and rerun your tests. + + +### Recording Multiple Requests + +By default, a DVR session only records one request. You can record multiple requests in the same cassette if you tell DVR when to start and stop recording. + +``` swift +let session = Session(cassetteName: "multiple") + +// Begin recording multiple requests +session.beginRecording() + +session.dataTask(with: URLRequest(url: URL(string: "http://apple.com")!)) { data, response, error in + // Do something with the response + + session.dataTask(with: URLRequest(url: URL(string: "http://google.com")!)) { data, response, error in + // Do something with the response + }.resume() + + // Finish recording multiple requests + session.endRecording() { + // All requests have completed + } +}.resume() +``` + +If you don't call `beginRecording` and `endRecording`, DVR will call these for your around the first request you make to a session. You can call `endRecording` immediately after you've submitted all of your requests to the session. The optional completion block that `endRecording` accepts will be called when all requests have finished. This is a good spot to fulfill XCTest expectations you've setup or do whatever else now that networking has finished. diff --git a/Pods/DVR/Sources/DVR/Cassette.swift b/Pods/DVR/Sources/DVR/Cassette.swift new file mode 100644 index 0000000..b3e8fb9 --- /dev/null +++ b/Pods/DVR/Sources/DVR/Cassette.swift @@ -0,0 +1,68 @@ +import Foundation + +struct Cassette { + + // MARK: - Properties + + let name: String + let interactions: [Interaction] + + + // MARK: - Initializers + + init(name: String, interactions: [Interaction]) { + self.name = name + self.interactions = interactions + } + + + // MARK: - Functions + + func interactionForRequest(_ request: URLRequest) -> Interaction? { + for interaction in interactions { + let interactionRequest = interaction.request + + // Note: We don't check headers right now + if interactionRequest.httpMethod == request.httpMethod && interactionRequest.url == request.url && interactionRequest.hasHTTPBodyEqualToThatOfRequest(request) { + return interaction + } + } + return nil + } +} + + +extension Cassette { + var dictionary: [String: Any] { + return [ + "name": name as Any, + "interactions": interactions.map { $0.dictionary } + ] + } + + init?(dictionary: [String: Any]) { + guard let name = dictionary["name"] as? String else { return nil } + + self.name = name + + if let array = dictionary["interactions"] as? [[String: Any]] { + interactions = array.compactMap { Interaction(dictionary: $0) } + } else { + interactions = [] + } + } +} + +private extension URLRequest { + func hasHTTPBodyEqualToThatOfRequest(_ request: URLRequest) -> Bool { + guard let body1 = self.httpBody, + let body2 = request.httpBody, + let encoded1 = Interaction.encodeBody(body1, headers: self.allHTTPHeaderFields), + let encoded2 = Interaction.encodeBody(body2, headers: request.allHTTPHeaderFields) + else { + return self.httpBody == request.httpBody + } + + return encoded1.isEqual(encoded2) + } +} diff --git a/Pods/DVR/Sources/DVR/HTTPURLResponse.swift b/Pods/DVR/Sources/DVR/HTTPURLResponse.swift new file mode 100644 index 0000000..7078b3d --- /dev/null +++ b/Pods/DVR/Sources/DVR/HTTPURLResponse.swift @@ -0,0 +1,57 @@ +import Foundation + +// There isn't a mutable HTTPURLResponse, so we have to make our own. +class HTTPURLResponse: Foundation.HTTPURLResponse { + + // MARK: - Properties + + private var _url: URL? + override var url: URL? { + get { + return _url ?? super.url + } + + set { + _url = newValue + } + } + + private var _statusCode: Int? + override var statusCode: Int { + get { + return _statusCode ?? super.statusCode + } + + set { + _statusCode = newValue + } + } + + private var _allHeaderFields: [AnyHashable: Any]? + override var allHeaderFields: [AnyHashable: Any] { + get { + return _allHeaderFields ?? super.allHeaderFields + } + + set { + _allHeaderFields = newValue + } + } +} + + +extension HTTPURLResponse { + convenience init(dictionary: [String: Any]) { + let url = URL(string: dictionary["url"] as! String)! + + self.init(url: url, mimeType: nil, expectedContentLength: 0, textEncodingName: nil) + + if let headers = dictionary["headers"] as? [String: String] { + allHeaderFields = headers + } + + if let status = dictionary["status"] as? Int { + statusCode = status + } + } +} diff --git a/Pods/DVR/Sources/DVR/Interaction.swift b/Pods/DVR/Sources/DVR/Interaction.swift new file mode 100644 index 0000000..b37af0b --- /dev/null +++ b/Pods/DVR/Sources/DVR/Interaction.swift @@ -0,0 +1,110 @@ +import Foundation + +struct Interaction { + + // MARK: - Properties + + let request: URLRequest + let response: Foundation.URLResponse + let responseData: Data? + let recordedAt: Date + + + // MARK: - Initializers + + init(request: URLRequest, response: Foundation.URLResponse, responseData: Data? = nil, recordedAt: Date = Date()) { + self.request = request + self.response = response + self.responseData = responseData + self.recordedAt = recordedAt + } + + + // MARK: - Encoding + + static func encodeBody(_ body: Data, headers: [String: String]? = nil) -> AnyObject? { + if let contentType = headers?["Content-Type"] { + // Text + if contentType.hasPrefix("text/") { + // TODO: Use text encoding if specified in headers + return NSString(data: body, encoding: String.Encoding.utf8.rawValue) + } + + // JSON + if contentType.hasPrefix("application/json") { + do { + return try JSONSerialization.jsonObject(with: body, options: []) as AnyObject + } catch { + return nil + } + } + } + + // Base64 + return body.base64EncodedString(options: []) as AnyObject? + } + + static func dencodeBody(_ body: Any?, headers: [String: String]? = nil) -> Data? { + guard let body = body else { return nil } + + if let contentType = headers?["Content-Type"] { + // Text + if let string = body as? String , contentType.hasPrefix("text/") { + // TODO: Use encoding if specified in headers + return string.data(using: String.Encoding.utf8) + } + + // JSON + if contentType.hasPrefix("application/json") { + do { + return try JSONSerialization.data(withJSONObject: body, options: []) + } catch { + return nil + } + } + } + + // Base64 + if let base64 = body as? String { + return Data(base64Encoded: base64, options: []) + } + + return nil + } +} + + +extension Interaction { + var dictionary: [String: Any] { + var dictionary: [String: Any] = [ + "request": request.dictionary, + "recorded_at": recordedAt.timeIntervalSince1970 + ] + + var responseDictionary = self.response.dictionary + + if let httpResponse = response as? Foundation.HTTPURLResponse { + responseDictionary["headers"] = httpResponse.allHeaderFields + responseDictionary["status"] = httpResponse.statusCode + } + + if let data = responseData, let body = Interaction.encodeBody(data, headers: responseDictionary["headers"] as? [String: String]) { + responseDictionary["body"] = body + } + + dictionary["response"] = responseDictionary + + return dictionary + } + + init?(dictionary: [String: Any]) { + guard let request = dictionary["request"] as? [String: Any], + let response = dictionary["response"] as? [String: Any], + let recordedAt = dictionary["recorded_at"] as? TimeInterval else { return nil } + + self.request = NSMutableURLRequest(dictionary: request) as URLRequest + self.response = HTTPURLResponse(dictionary: response) + self.recordedAt = Date(timeIntervalSince1970: recordedAt) + self.responseData = Interaction.dencodeBody(response["body"], headers: response["headers"] as? [String: String]) + } +} diff --git a/Pods/DVR/Sources/DVR/Session.swift b/Pods/DVR/Sources/DVR/Session.swift new file mode 100644 index 0000000..3cf1aab --- /dev/null +++ b/Pods/DVR/Sources/DVR/Session.swift @@ -0,0 +1,241 @@ +import Foundation + +open class Session: URLSession { + + // MARK: - Properties + + public static var defaultTestBundle: Bundle? { + return Bundle.allBundles.first { $0.bundlePath.hasSuffix(".xctest") } + } + + open var outputDirectory: String + public let cassetteName: String + public let backingSession: URLSession + open var recordingEnabled = true + + private let testBundle: Bundle + + private var recording = false + private var needsPersistence = false + private var outstandingTasks = [URLSessionTask]() + private var completedInteractions = [Interaction]() + private var completionBlock: (() -> Void)? + + override open var delegate: URLSessionDelegate? { + return backingSession.delegate + } + + // MARK: - Initializers + + public init(outputDirectory: String = "~/Desktop/DVR/", cassetteName: String, testBundle: Bundle = Session.defaultTestBundle!, backingSession: URLSession = URLSession.shared) { + self.outputDirectory = outputDirectory + self.cassetteName = cassetteName + self.testBundle = testBundle + self.backingSession = backingSession + super.init() + } + + + // MARK: - URLSession + + open override func dataTask(with request: URLRequest) -> URLSessionDataTask { + return addDataTask(request) + } + + open override func dataTask(with request: URLRequest, completionHandler: @escaping ((Data?, Foundation.URLResponse?, Error?) -> Void)) -> URLSessionDataTask { + return addDataTask(request, completionHandler: completionHandler) + } + + open override func downloadTask(with request: URLRequest) -> URLSessionDownloadTask { + return addDownloadTask(request) + } + + open override func downloadTask(with request: URLRequest, completionHandler: @escaping (URL?, Foundation.URLResponse?, Error?) -> Void) -> URLSessionDownloadTask { + return addDownloadTask(request, completionHandler: completionHandler) + } + + open override func uploadTask(with request: URLRequest, from bodyData: Data) -> URLSessionUploadTask { + return addUploadTask(request, fromData: bodyData) + } + + open override func uploadTask(with request: URLRequest, from bodyData: Data?, completionHandler: @escaping (Data?, Foundation.URLResponse?, Error?) -> Void) -> URLSessionUploadTask { + return addUploadTask(request, fromData: bodyData, completionHandler: completionHandler) + } + + open override func uploadTask(with request: URLRequest, fromFile fileURL: URL) -> URLSessionUploadTask { + let data = try! Data(contentsOf: fileURL) + return addUploadTask(request, fromData: data) + } + + open override func uploadTask(with request: URLRequest, fromFile fileURL: URL, completionHandler: @escaping (Data?, Foundation.URLResponse?, Error?) -> Void) -> URLSessionUploadTask { + let data = try! Data(contentsOf: fileURL) + return addUploadTask(request, fromData: data, completionHandler: completionHandler) + } + + open override func invalidateAndCancel() { + recording = false + outstandingTasks.removeAll() + backingSession.invalidateAndCancel() + } + + + // MARK: - Recording + + /// You don’t need to call this method if you're only recoding one request. + open func beginRecording() { + if recording { + return + } + + recording = true + needsPersistence = false + outstandingTasks = [] + completedInteractions = [] + completionBlock = nil + } + + /// This only needs to be called if you call `beginRecording`. `completion` will be called on the main queue after + /// the completion block of the last task is called. `completion` is useful for fulfilling an expectation you setup + /// before calling `beginRecording`. + open func endRecording(_ completion: (() -> Void)? = nil) { + if !recording { + return + } + + recording = false + completionBlock = completion + + if outstandingTasks.count == 0 { + finishRecording() + } + } + + + // MARK: - Internal + + var cassette: Cassette? { + guard let path = testBundle.path(forResource: cassetteName, ofType: "json"), + let data = try? Data(contentsOf: URL(fileURLWithPath: path)), + let raw = try? JSONSerialization.jsonObject(with: data, options: []), + let json = raw as? [String: Any] + else { return nil } + + return Cassette(dictionary: json) + } + + func finishTask(_ task: URLSessionTask, interaction: Interaction, playback: Bool) { + needsPersistence = needsPersistence || !playback + + if let index = outstandingTasks.firstIndex(of: task) { + outstandingTasks.remove(at: index) + } + + completedInteractions.append(interaction) + + if !recording && outstandingTasks.count == 0 { + finishRecording() + } + + if let delegate = delegate as? URLSessionDataDelegate, let task = task as? URLSessionDataTask, let data = interaction.responseData { + delegate.urlSession?(self, dataTask: task, didReceive: data as Data) + } + + if let delegate = delegate as? URLSessionTaskDelegate { + delegate.urlSession?(self, task: task, didCompleteWithError: nil) + } + } + + + // MARK: - Private + + private func addDataTask(_ request: URLRequest, completionHandler: ((Data?, Foundation.URLResponse?, NSError?) -> Void)? = nil) -> URLSessionDataTask { + let modifiedRequest = backingSession.configuration.httpAdditionalHeaders.map(request.appending) ?? request + let task = SessionDataTask(session: self, request: modifiedRequest, completion: completionHandler) + addTask(task) + return task + } + + private func addDownloadTask(_ request: URLRequest, completionHandler: SessionDownloadTask.Completion? = nil) -> URLSessionDownloadTask { + let modifiedRequest = backingSession.configuration.httpAdditionalHeaders.map(request.appending) ?? request + let task = SessionDownloadTask(session: self, request: modifiedRequest, completion: completionHandler) + addTask(task) + return task + } + + private func addUploadTask(_ request: URLRequest, fromData data: Data?, completionHandler: SessionUploadTask.Completion? = nil) -> URLSessionUploadTask { + var modifiedRequest = backingSession.configuration.httpAdditionalHeaders.map(request.appending) ?? request + modifiedRequest = data.map(modifiedRequest.appending) ?? modifiedRequest + let task = SessionUploadTask(session: self, request: modifiedRequest, completion: completionHandler) + addTask(task.dataTask) + return task + } + + private func addTask(_ task: URLSessionTask) { + let shouldRecord = !recording + if shouldRecord { + beginRecording() + } + + outstandingTasks.append(task) + + if shouldRecord { + endRecording() + } + } + + private func persist(_ interactions: [Interaction]) { + defer { + abort() + } + + // Create directory + let outputDirectory = (self.outputDirectory as NSString).expandingTildeInPath + let fileManager = FileManager.default + if !fileManager.fileExists(atPath: outputDirectory) { + do { + try fileManager.createDirectory(atPath: outputDirectory, withIntermediateDirectories: true, attributes: nil) + } catch { + print("[DVR] Failed to create cassettes directory.") + } + } + + let cassette = Cassette(name: cassetteName, interactions: interactions) + + // Persist + + + do { + let outputPath = ((outputDirectory as NSString).appendingPathComponent(cassetteName) as NSString).appendingPathExtension("json")! + let data = try JSONSerialization.data(withJSONObject: cassette.dictionary, options: [.prettyPrinted]) + + // Add trailing new line + guard var string = NSString(data: data, encoding: String.Encoding.utf8.rawValue) else { + print("[DVR] Failed to persist cassette.") + return + } + string = string.appending("\n") as NSString + + if let data = string.data(using: String.Encoding.utf8.rawValue) { + try? data.write(to: URL(fileURLWithPath: outputPath), options: [.atomic]) + print("[DVR] Persisted cassette at \(outputPath). Please add this file to your test target") + return + } + + print("[DVR] Failed to persist cassette.") + } catch { + print("[DVR] Failed to persist cassette.") + } + } + + private func finishRecording() { + if needsPersistence { + persist(completedInteractions) + } + + // Clean up + completedInteractions = [] + + // Call session’s completion block + completionBlock?() + } +} diff --git a/Pods/DVR/Sources/DVR/SessionDataTask.swift b/Pods/DVR/Sources/DVR/SessionDataTask.swift new file mode 100644 index 0000000..8ac1a3a --- /dev/null +++ b/Pods/DVR/Sources/DVR/SessionDataTask.swift @@ -0,0 +1,85 @@ +import Foundation + +final class SessionDataTask: URLSessionDataTask { + + // MARK: - Types + + typealias Completion = (Data?, Foundation.URLResponse?, NSError?) -> Void + + + // MARK: - Properties + + weak var session: Session! + let request: URLRequest + let completion: Completion? + private let queue = DispatchQueue(label: "com.venmo.DVR.sessionDataTaskQueue", attributes: []) + private var interaction: Interaction? + + override var response: Foundation.URLResponse? { + return interaction?.response + } + + + // MARK: - Initializers + + init(session: Session, request: URLRequest, completion: (Completion)? = nil) { + self.session = session + self.request = request + self.completion = completion + } + + + // MARK: - URLSessionTask + + override func cancel() { + // Don't do anything + } + + override func resume() { + let cassette = session.cassette + + // Find interaction + if let interaction = session.cassette?.interactionForRequest(request) { + self.interaction = interaction + // Forward completion + if let completion = completion { + queue.async { + completion(interaction.responseData, interaction.response, nil) + } + } + session.finishTask(self, interaction: interaction, playback: true) + return + } + + if cassette != nil { + fatalError("[DVR] Invalid request. The request was not found in the cassette.") + } + + // Cassette is missing. Record. + if session.recordingEnabled == false { + fatalError("[DVR] Recording is disabled.") + } + + let task = session.backingSession.dataTask(with: request, completionHandler: { [weak self] data, response, error in + + //Ensure we have a response + guard let response = response else { + fatalError("[DVR] Failed to record because the task returned a nil response.") + } + + guard let this = self else { + fatalError("[DVR] Something has gone horribly wrong.") + } + + // Still call the completion block so the user can chain requests while recording. + this.queue.async { + this.completion?(data, response, nil) + } + + // Create interaction + this.interaction = Interaction(request: this.request, response: response, responseData: data) + this.session.finishTask(this, interaction: this.interaction!, playback: false) + }) + task.resume() + } +} diff --git a/Pods/DVR/Sources/DVR/SessionDownloadTask.swift b/Pods/DVR/Sources/DVR/SessionDownloadTask.swift new file mode 100644 index 0000000..0cd70df --- /dev/null +++ b/Pods/DVR/Sources/DVR/SessionDownloadTask.swift @@ -0,0 +1,46 @@ +import Foundation + +final class SessionDownloadTask: URLSessionDownloadTask { + + // MARK: - Types + + typealias Completion = (URL?, Foundation.URLResponse?, NSError?) -> Void + + // MARK: - Properties + + weak var session: Session! + let request: URLRequest + let completion: Completion? + + + // MARK: - Initializers + + init(session: Session, request: URLRequest, completion: Completion? = nil) { + self.session = session + self.request = request + self.completion = completion + } + + // MARK: - URLSessionTask + + override func cancel() { + // Don't do anything + } + + override func resume() { + let task = SessionDataTask(session: session, request: request) { data, response, error in + let location: URL? + if let data = data { + // Write data to temporary file + let tempURL = URL(fileURLWithPath: (NSTemporaryDirectory() as NSString).appendingPathComponent(UUID().uuidString)) + try? data.write(to: tempURL, options: [.atomic]) + location = tempURL + } else { + location = nil + } + + self.completion?(location, response, error) + } + task.resume() + } +} diff --git a/Pods/DVR/Sources/DVR/SessionUploadTask.swift b/Pods/DVR/Sources/DVR/SessionUploadTask.swift new file mode 100644 index 0000000..fb66596 --- /dev/null +++ b/Pods/DVR/Sources/DVR/SessionUploadTask.swift @@ -0,0 +1,34 @@ +import Foundation + +final class SessionUploadTask: URLSessionUploadTask { + + // MARK: - Types + + typealias Completion = (Data?, Foundation.URLResponse?, NSError?) -> Void + + // MARK: - Properties + + weak var session: Session! + let request: URLRequest + let completion: Completion? + let dataTask: SessionDataTask + + // MARK: - Initializers + + init(session: Session, request: URLRequest, completion: Completion? = nil) { + self.session = session + self.request = request + self.completion = completion + dataTask = SessionDataTask(session: session, request: request, completion: completion) + } + + // MARK: - URLSessionTask + + override func cancel() { + // Don't do anything + } + + override func resume() { + dataTask.resume() + } +} diff --git a/Pods/DVR/Sources/DVR/URLRequest.swift b/Pods/DVR/Sources/DVR/URLRequest.swift new file mode 100644 index 0000000..8299383 --- /dev/null +++ b/Pods/DVR/Sources/DVR/URLRequest.swift @@ -0,0 +1,86 @@ +import Foundation + +extension URLRequest { + var dictionary: [String: Any] { + var dictionary = [String: Any]() + + if let method = httpMethod { + dictionary["method"] = method as Any? + } + + if let url = url?.absoluteString { + dictionary["url"] = url as Any? + } + + if let headers = allHTTPHeaderFields { + dictionary["headers"] = headers as Any? + } + + if let data = httpBody, let body = Interaction.encodeBody(data, headers: allHTTPHeaderFields) { + dictionary["body"] = body + } + + return dictionary + } +} + + +extension URLRequest { + func appending(headers: [AnyHashable: Any]) -> URLRequest { + guard let headers = headers as? [String: String] else { return self } + + var request = self + + for (key, value) in headers { + request.addValue(value, forHTTPHeaderField: key) + } + + return request + } + + func appending(body: Data?) -> URLRequest { + var request = self + request.httpBody = body + return request + } +} + + +extension NSMutableURLRequest { + convenience init(dictionary: [String: Any]) { + self.init() + + if let method = dictionary["method"] as? String { + httpMethod = method + } + + if let string = dictionary["url"] as? String, let url = URL(string: string) { + self.url = url + } + + if let headers = dictionary["headers"] as? [String: String] { + allHTTPHeaderFields = headers + } + + if let body = dictionary["body"] { + httpBody = Interaction.dencodeBody(body, headers: allHTTPHeaderFields) + } + } +} + + +extension NSMutableURLRequest { + func appendHeaders(_ headers: [AnyHashable: Any]) { + var existingHeaders = allHTTPHeaderFields ?? [:] + + headers.forEach { header in + guard let key = header.0 as? String, let value = header.1 as? String , existingHeaders[key] == nil else { + return + } + + existingHeaders[key] = value + } + + allHTTPHeaderFields = existingHeaders + } +} diff --git a/Pods/DVR/Sources/DVR/URLResponse.swift b/Pods/DVR/Sources/DVR/URLResponse.swift new file mode 100644 index 0000000..b5b4ba2 --- /dev/null +++ b/Pods/DVR/Sources/DVR/URLResponse.swift @@ -0,0 +1,37 @@ +import Foundation + +// There isn't a mutable URLResponse, so we have to make our own. +class URLResponse: Foundation.URLResponse { + private var _URL: Foundation.URL? + override var url: Foundation.URL? { + get { + return _URL ?? super.url + } + + set { + _URL = newValue + } + } +} + + +extension Foundation.URLResponse { + var dictionary: [String: Any] { + if let url = url?.absoluteString { + return ["url": url as Any] + } + + return [:] + } +} + + +extension URLResponse { + convenience init(dictionary: [String: Any]) { + self.init() + + if let string = dictionary["url"] as? String, let url = Foundation.URL(string: string) { + self.url = url + } + } +} diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock new file mode 100644 index 0000000..b5bd883 --- /dev/null +++ b/Pods/Manifest.lock @@ -0,0 +1,20 @@ +PODS: + - DVR (2.0.0) + - SAMKeychain (1.5.3) + +DEPENDENCIES: + - DVR + - SAMKeychain + +SPEC REPOS: + trunk: + - DVR + - SAMKeychain + +SPEC CHECKSUMS: + DVR: 062c287b9dc613a84120e44640176e4ef3ecf943 + SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c + +PODFILE CHECKSUM: 02c21c317ba9be4fdecdfff242f3fa20e9b269bd + +COCOAPODS: 1.8.4 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 0000000..0a0633c --- /dev/null +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,1029 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 51; + objects = { + +/* Begin PBXBuildFile section */ + 06807C205FE8C18B68229A21B79F2C0A /* SAMKeychainQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E84E3242B3EB1E5E85DCC2E8B03EBC /* SAMKeychainQuery.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0E740145DC8569F11C3D23161F42A3F3 /* SAMKeychainQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AEEE2832AFF20A6F549EC2A319C1A5A /* SAMKeychainQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 180B0BC996F28420A22940BB965F2687 /* SAMKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = B63FFF6C3E3EC854DDA25565ECB653DF /* SAMKeychain.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 1B815895BB27D326F959D2E3C8C99302 /* URLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68A7621ACBD07E7C91AB6184DDE51591 /* URLRequest.swift */; }; + 1F76FE48BAE3021631A8C0EC47758EA0 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C6FBEEEFA5DEBF6E6E83512D4F03EE /* Security.framework */; }; + 2550EA80C45F86FEFB6B484590C3127B /* SAMKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = B0545A9742888BED4846C62C54D0A65B /* SAMKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2581FFD24BA6040D51D1026A22D662A2 /* DVR-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A49D9706970C362DC8749280AFD7897 /* DVR-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 27A2EE4A3D8CCFC8A952A5456C9F16E0 /* Pods-fakestagramTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 59A8492818977F5930B0AAAFD8AD5E42 /* Pods-fakestagramTests-dummy.m */; }; + 2CEE9A3A00184D730B23CD8A599D5C9B /* URLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD323A0687C01A094A4398393F61D003 /* URLResponse.swift */; }; + 2F2DE653FDC005F2E921F46B3EE3E7D8 /* Pods-fakestagram-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 90BCDA4ADEBFA1F53BA12D6B569F08CC /* Pods-fakestagram-dummy.m */; }; + 3CBF47DECEC4BC7EF06674F7B94A39DE /* SessionUploadTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A0D780E187FAC62513FE66BABFDFD2 /* SessionUploadTask.swift */; }; + 48749968F49ABC19B218B6A650DA2EFA /* SAMKeychain.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 6A510F250C2F135F01D673AD47A38DE6 /* SAMKeychain.bundle */; }; + 4F467F8DE7756FE386809A1A36E8759C /* HTTPURLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 311FE9B18E379AA65C325B06E9528351 /* HTTPURLResponse.swift */; }; + 824FE389846E821F786C40A28CC9B89E /* Pods-fakestagram-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 91F5BE5AE8BF396D2FFE3A083654F55D /* Pods-fakestagram-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8E68897246F917EC04BC035BADFF78C3 /* SessionDownloadTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 122017F22A2F0B330DC1A3C61F57F696 /* SessionDownloadTask.swift */; }; + 8E860D3F5EAA1B9BA6C8B0772356FCB6 /* Pods-fakestagramTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E64F123CB3E44E23F1E2260C175ACABB /* Pods-fakestagramTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 99BD442E3473FF1BD45267F99AF9FB17 /* Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = 718AC69AAFAF41AD67F09D13C8F3619E /* Session.swift */; }; + 9DF6D02518F1F91B36CEA39816658F98 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EF0537674118F909E1B2AFD9940729FD /* Foundation.framework */; }; + A44705A450B7BC75180A9FC266CCFB3D /* SAMKeychain-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B550E0B60910515F7A99C95B9941DBF4 /* SAMKeychain-dummy.m */; }; + A89C15CBEAFACA18FD1704EAB020BAD1 /* Cassette.swift in Sources */ = {isa = PBXBuildFile; fileRef = B35816E22FFBA22812C78F4018E1216E /* Cassette.swift */; }; + ADC58AC3629C08D95E3F5D45CC0C6094 /* Interaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = D682B8F67556C7E2C4750006588D16A3 /* Interaction.swift */; }; + C050181AF88C681D976640BD1FCC41BB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EF0537674118F909E1B2AFD9940729FD /* Foundation.framework */; }; + C2792E6A65FDBBF7261F1C6F21146FAE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EF0537674118F909E1B2AFD9940729FD /* Foundation.framework */; }; + C62F2DC3C488FEB2A1C1E0FA31FCDE81 /* DVR-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 94825A1BAD66FA89734231732C9CC363 /* DVR-dummy.m */; }; + CCC0CABB1AADB1E1751D6FC4F8CC4DAC /* SAMKeychain-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F1B372698496D28CDA2D055E888C4348 /* SAMKeychain-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D6CE1DA5D5D86C699A9F9B5DD25BE95B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EF0537674118F909E1B2AFD9940729FD /* Foundation.framework */; }; + F49DAB6CD6CE82D9AE54962891D2DF6B /* SessionDataTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD3978B6A33339DDA9D3ED2B69F53C81 /* SessionDataTask.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 17414ED8749102A3FA2A67AFBD067C61 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5572D14DECB5A676C1B31B30A3BA7F10; + remoteInfo = SAMKeychain; + }; + 86CA88CA94FD6858C9AC02D6320864DA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 61AEDBBA57E392B1F205C81674A649D6; + remoteInfo = "Pods-fakestagram"; + }; + BF29B87760F0FC7D925FA0F749D1A5DA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 26F44590B017B9CF61B71B978A6C48A9; + remoteInfo = DVR; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 053512BAF1A5A9D43C8DBE24A968B099 /* Pods-fakestagramTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-fakestagramTests.release.xcconfig"; sourceTree = ""; }; + 122017F22A2F0B330DC1A3C61F57F696 /* SessionDownloadTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDownloadTask.swift; path = Sources/DVR/SessionDownloadTask.swift; sourceTree = ""; }; + 13933B2BA0EA9B8C7F04CB48B4D211EC /* Pods-fakestagramTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-fakestagramTests.debug.xcconfig"; sourceTree = ""; }; + 1413B6EBAE58CA3D1EB635F37FD0D8FB /* Pods-fakestagram-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-fakestagram-Info.plist"; sourceTree = ""; }; + 1AEEE2832AFF20A6F549EC2A319C1A5A /* SAMKeychainQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SAMKeychainQuery.h; path = Sources/SAMKeychainQuery.h; sourceTree = ""; }; + 1E1EA3F1B3EB127825D5DB0D8EDFC9C7 /* DVR.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = DVR.framework; path = DVR.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1F30323AA9315F80C09F38F3FA4FB6DB /* Pods_fakestagram.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_fakestagram.framework; path = "Pods-fakestagram.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 20BA74F50916A518C61868BDBE8A0A53 /* Pods-fakestagram.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-fakestagram.release.xcconfig"; sourceTree = ""; }; + 2CCCF5CA7CE74E382143A3DFF0C4EAF6 /* Pods-fakestagram-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-fakestagram-frameworks.sh"; sourceTree = ""; }; + 311FE9B18E379AA65C325B06E9528351 /* HTTPURLResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPURLResponse.swift; path = Sources/DVR/HTTPURLResponse.swift; sourceTree = ""; }; + 40C6FBEEEFA5DEBF6E6E83512D4F03EE /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + 583116C34718B4104B213A754C2F14AF /* Pods-fakestagramTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-fakestagramTests-acknowledgements.markdown"; sourceTree = ""; }; + 59A8492818977F5930B0AAAFD8AD5E42 /* Pods-fakestagramTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-fakestagramTests-dummy.m"; sourceTree = ""; }; + 612028EAFF1C2054A0EB821A9C9F2440 /* SAMKeychain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SAMKeychain.framework; path = SAMKeychain.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6864987775489E2B6D4C815D5311D86F /* DVR-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DVR-prefix.pch"; sourceTree = ""; }; + 68A569029EE104E8308612D026219115 /* Pods-fakestagramTests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-fakestagramTests-Info.plist"; sourceTree = ""; }; + 68A7621ACBD07E7C91AB6184DDE51591 /* URLRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLRequest.swift; path = Sources/DVR/URLRequest.swift; sourceTree = ""; }; + 694C3B279742AA9A8DD64C3F11CC8EDA /* DVR.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DVR.modulemap; sourceTree = ""; }; + 6A49D9706970C362DC8749280AFD7897 /* DVR-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DVR-umbrella.h"; sourceTree = ""; }; + 6A510F250C2F135F01D673AD47A38DE6 /* SAMKeychain.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SAMKeychain.bundle; path = Support/SAMKeychain.bundle; sourceTree = ""; }; + 718AC69AAFAF41AD67F09D13C8F3619E /* Session.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Session.swift; path = Sources/DVR/Session.swift; sourceTree = ""; }; + 84A0D780E187FAC62513FE66BABFDFD2 /* SessionUploadTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionUploadTask.swift; path = Sources/DVR/SessionUploadTask.swift; sourceTree = ""; }; + 85425238E1D910A19C2AFDA001348B9C /* DVR-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DVR-Info.plist"; sourceTree = ""; }; + 90BCDA4ADEBFA1F53BA12D6B569F08CC /* Pods-fakestagram-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-fakestagram-dummy.m"; sourceTree = ""; }; + 91F5BE5AE8BF396D2FFE3A083654F55D /* Pods-fakestagram-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-fakestagram-umbrella.h"; sourceTree = ""; }; + 935B2EBEB5C8126CBD501146563B912A /* Pods_fakestagramTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_fakestagramTests.framework; path = "Pods-fakestagramTests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 94825A1BAD66FA89734231732C9CC363 /* DVR-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DVR-dummy.m"; sourceTree = ""; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + A2B48B4990FCC0EBB3CF1968C2EE7F97 /* DVR.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DVR.xcconfig; sourceTree = ""; }; + ADE202199E8AE3E45C7B773CA2F823F4 /* Pods-fakestagram-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-fakestagram-acknowledgements.plist"; sourceTree = ""; }; + B0545A9742888BED4846C62C54D0A65B /* SAMKeychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SAMKeychain.h; path = Sources/SAMKeychain.h; sourceTree = ""; }; + B35816E22FFBA22812C78F4018E1216E /* Cassette.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cassette.swift; path = Sources/DVR/Cassette.swift; sourceTree = ""; }; + B550E0B60910515F7A99C95B9941DBF4 /* SAMKeychain-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SAMKeychain-dummy.m"; sourceTree = ""; }; + B63FFF6C3E3EC854DDA25565ECB653DF /* SAMKeychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SAMKeychain.m; path = Sources/SAMKeychain.m; sourceTree = ""; }; + CD323A0687C01A094A4398393F61D003 /* URLResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLResponse.swift; path = Sources/DVR/URLResponse.swift; sourceTree = ""; }; + D682B8F67556C7E2C4750006588D16A3 /* Interaction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Interaction.swift; path = Sources/DVR/Interaction.swift; sourceTree = ""; }; + D9D3551B5F195DE7A99E1E25F557E8DC /* Pods-fakestagramTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-fakestagramTests-acknowledgements.plist"; sourceTree = ""; }; + E08D35AC1BA4D8EB4520D9E7A0363FB2 /* SAMKeychain-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SAMKeychain-prefix.pch"; sourceTree = ""; }; + E64F123CB3E44E23F1E2260C175ACABB /* Pods-fakestagramTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-fakestagramTests-umbrella.h"; sourceTree = ""; }; + E96E855D25BDAB602D5D6FC1D6FF4980 /* SAMKeychain-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SAMKeychain-Info.plist"; sourceTree = ""; }; + EB9CD9D588692FFC8C171E8959FC6A5E /* Pods-fakestagramTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-fakestagramTests-frameworks.sh"; sourceTree = ""; }; + ED561DD918F6540A952AB8AE94257DCF /* Pods-fakestagram.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-fakestagram.modulemap"; sourceTree = ""; }; + EF0537674118F909E1B2AFD9940729FD /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + EFBC1B690A9F27CF95FDD0D98628D8DA /* SAMKeychain.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SAMKeychain.xcconfig; sourceTree = ""; }; + F1B372698496D28CDA2D055E888C4348 /* SAMKeychain-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SAMKeychain-umbrella.h"; sourceTree = ""; }; + F1E84E3242B3EB1E5E85DCC2E8B03EBC /* SAMKeychainQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SAMKeychainQuery.m; path = Sources/SAMKeychainQuery.m; sourceTree = ""; }; + F1F82FB9189506D61C6B7A94BC71DFA5 /* Pods-fakestagram-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-fakestagram-acknowledgements.markdown"; sourceTree = ""; }; + F79885221207B69427C47E713867DFD4 /* Pods-fakestagramTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-fakestagramTests.modulemap"; sourceTree = ""; }; + F7E71CBB4B160B59D5219FC079FFBB1A /* Pods-fakestagram.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-fakestagram.debug.xcconfig"; sourceTree = ""; }; + FD0429D3D8416DC13AE06064AD1A268D /* SAMKeychain.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SAMKeychain.modulemap; sourceTree = ""; }; + FD3978B6A33339DDA9D3ED2B69F53C81 /* SessionDataTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDataTask.swift; path = Sources/DVR/SessionDataTask.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 4C4576A34B849022BE42DD796D17F6EC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9DF6D02518F1F91B36CEA39816658F98 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B3D5D6B487B493B2D48298B3DED84BD9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D6CE1DA5D5D86C699A9F9B5DD25BE95B /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C92F66CC4A5F2F7CEBEF011807241DFE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C050181AF88C681D976640BD1FCC41BB /* Foundation.framework in Frameworks */, + 1F76FE48BAE3021631A8C0EC47758EA0 /* Security.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D679A4D37A03CF5C6A767C980A64E61E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C2792E6A65FDBBF7261F1C6F21146FAE /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 6B475D44F9DE8B3EB70D1C14FDE147B9 /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + 1B2CC7483679035B85390AF56CA2B745 /* Products */ = { + isa = PBXGroup; + children = ( + 1E1EA3F1B3EB127825D5DB0D8EDFC9C7 /* DVR.framework */, + 1F30323AA9315F80C09F38F3FA4FB6DB /* Pods_fakestagram.framework */, + 935B2EBEB5C8126CBD501146563B912A /* Pods_fakestagramTests.framework */, + 612028EAFF1C2054A0EB821A9C9F2440 /* SAMKeychain.framework */, + ); + name = Products; + sourceTree = ""; + }; + 23FC5D5FCCEFDF054462B86E2E45F18E /* Resources */ = { + isa = PBXGroup; + children = ( + 6A510F250C2F135F01D673AD47A38DE6 /* SAMKeychain.bundle */, + ); + name = Resources; + sourceTree = ""; + }; + 4EE7C35955D73545FBF950BD9111503F /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + CA24EBD84B723DF2E72AA948AC765356 /* Pods-fakestagram */, + C6988779A6E720A4EB3777144850697B /* Pods-fakestagramTests */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + 6B475D44F9DE8B3EB70D1C14FDE147B9 /* iOS */ = { + isa = PBXGroup; + children = ( + EF0537674118F909E1B2AFD9940729FD /* Foundation.framework */, + 40C6FBEEEFA5DEBF6E6E83512D4F03EE /* Security.framework */, + ); + name = iOS; + sourceTree = ""; + }; + 7FAAF75322C60EEC429FE19549CAFE8B /* Support Files */ = { + isa = PBXGroup; + children = ( + 694C3B279742AA9A8DD64C3F11CC8EDA /* DVR.modulemap */, + A2B48B4990FCC0EBB3CF1968C2EE7F97 /* DVR.xcconfig */, + 94825A1BAD66FA89734231732C9CC363 /* DVR-dummy.m */, + 85425238E1D910A19C2AFDA001348B9C /* DVR-Info.plist */, + 6864987775489E2B6D4C815D5311D86F /* DVR-prefix.pch */, + 6A49D9706970C362DC8749280AFD7897 /* DVR-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/DVR"; + sourceTree = ""; + }; + 92D95B49133DFC1C864296A8A7B17B11 /* SAMKeychain */ = { + isa = PBXGroup; + children = ( + B0545A9742888BED4846C62C54D0A65B /* SAMKeychain.h */, + B63FFF6C3E3EC854DDA25565ECB653DF /* SAMKeychain.m */, + 1AEEE2832AFF20A6F549EC2A319C1A5A /* SAMKeychainQuery.h */, + F1E84E3242B3EB1E5E85DCC2E8B03EBC /* SAMKeychainQuery.m */, + 23FC5D5FCCEFDF054462B86E2E45F18E /* Resources */, + A6A92A0E14AEDCFF0D413455369BA437 /* Support Files */, + ); + name = SAMKeychain; + path = SAMKeychain; + sourceTree = ""; + }; + A6A92A0E14AEDCFF0D413455369BA437 /* Support Files */ = { + isa = PBXGroup; + children = ( + FD0429D3D8416DC13AE06064AD1A268D /* SAMKeychain.modulemap */, + EFBC1B690A9F27CF95FDD0D98628D8DA /* SAMKeychain.xcconfig */, + B550E0B60910515F7A99C95B9941DBF4 /* SAMKeychain-dummy.m */, + E96E855D25BDAB602D5D6FC1D6FF4980 /* SAMKeychain-Info.plist */, + E08D35AC1BA4D8EB4520D9E7A0363FB2 /* SAMKeychain-prefix.pch */, + F1B372698496D28CDA2D055E888C4348 /* SAMKeychain-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/SAMKeychain"; + sourceTree = ""; + }; + C6988779A6E720A4EB3777144850697B /* Pods-fakestagramTests */ = { + isa = PBXGroup; + children = ( + F79885221207B69427C47E713867DFD4 /* Pods-fakestagramTests.modulemap */, + 583116C34718B4104B213A754C2F14AF /* Pods-fakestagramTests-acknowledgements.markdown */, + D9D3551B5F195DE7A99E1E25F557E8DC /* Pods-fakestagramTests-acknowledgements.plist */, + 59A8492818977F5930B0AAAFD8AD5E42 /* Pods-fakestagramTests-dummy.m */, + EB9CD9D588692FFC8C171E8959FC6A5E /* Pods-fakestagramTests-frameworks.sh */, + 68A569029EE104E8308612D026219115 /* Pods-fakestagramTests-Info.plist */, + E64F123CB3E44E23F1E2260C175ACABB /* Pods-fakestagramTests-umbrella.h */, + 13933B2BA0EA9B8C7F04CB48B4D211EC /* Pods-fakestagramTests.debug.xcconfig */, + 053512BAF1A5A9D43C8DBE24A968B099 /* Pods-fakestagramTests.release.xcconfig */, + ); + name = "Pods-fakestagramTests"; + path = "Target Support Files/Pods-fakestagramTests"; + sourceTree = ""; + }; + CA24EBD84B723DF2E72AA948AC765356 /* Pods-fakestagram */ = { + isa = PBXGroup; + children = ( + ED561DD918F6540A952AB8AE94257DCF /* Pods-fakestagram.modulemap */, + F1F82FB9189506D61C6B7A94BC71DFA5 /* Pods-fakestagram-acknowledgements.markdown */, + ADE202199E8AE3E45C7B773CA2F823F4 /* Pods-fakestagram-acknowledgements.plist */, + 90BCDA4ADEBFA1F53BA12D6B569F08CC /* Pods-fakestagram-dummy.m */, + 2CCCF5CA7CE74E382143A3DFF0C4EAF6 /* Pods-fakestagram-frameworks.sh */, + 1413B6EBAE58CA3D1EB635F37FD0D8FB /* Pods-fakestagram-Info.plist */, + 91F5BE5AE8BF396D2FFE3A083654F55D /* Pods-fakestagram-umbrella.h */, + F7E71CBB4B160B59D5219FC079FFBB1A /* Pods-fakestagram.debug.xcconfig */, + 20BA74F50916A518C61868BDBE8A0A53 /* Pods-fakestagram.release.xcconfig */, + ); + name = "Pods-fakestagram"; + path = "Target Support Files/Pods-fakestagram"; + sourceTree = ""; + }; + CF1408CF629C7361332E53B88F7BD30C = { + isa = PBXGroup; + children = ( + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, + 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */, + D83AA71E53446D48D21689E6E794CCF4 /* Pods */, + 1B2CC7483679035B85390AF56CA2B745 /* Products */, + 4EE7C35955D73545FBF950BD9111503F /* Targets Support Files */, + ); + sourceTree = ""; + }; + D83AA71E53446D48D21689E6E794CCF4 /* Pods */ = { + isa = PBXGroup; + children = ( + ED840B56367C1B27CC3CA5DAF7B3580A /* DVR */, + 92D95B49133DFC1C864296A8A7B17B11 /* SAMKeychain */, + ); + name = Pods; + sourceTree = ""; + }; + ED840B56367C1B27CC3CA5DAF7B3580A /* DVR */ = { + isa = PBXGroup; + children = ( + B35816E22FFBA22812C78F4018E1216E /* Cassette.swift */, + 311FE9B18E379AA65C325B06E9528351 /* HTTPURLResponse.swift */, + D682B8F67556C7E2C4750006588D16A3 /* Interaction.swift */, + 718AC69AAFAF41AD67F09D13C8F3619E /* Session.swift */, + FD3978B6A33339DDA9D3ED2B69F53C81 /* SessionDataTask.swift */, + 122017F22A2F0B330DC1A3C61F57F696 /* SessionDownloadTask.swift */, + 84A0D780E187FAC62513FE66BABFDFD2 /* SessionUploadTask.swift */, + 68A7621ACBD07E7C91AB6184DDE51591 /* URLRequest.swift */, + CD323A0687C01A094A4398393F61D003 /* URLResponse.swift */, + 7FAAF75322C60EEC429FE19549CAFE8B /* Support Files */, + ); + name = DVR; + path = DVR; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 6245C00F64E89DA283F0798C9544BB7B /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 8E860D3F5EAA1B9BA6C8B0772356FCB6 /* Pods-fakestagramTests-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 784080E16476341D20781AF2902317C5 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 2581FFD24BA6040D51D1026A22D662A2 /* DVR-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + ADEF261B253DB102D68EBF8E235DA9FF /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + CCC0CABB1AADB1E1751D6FC4F8CC4DAC /* SAMKeychain-umbrella.h in Headers */, + 2550EA80C45F86FEFB6B484590C3127B /* SAMKeychain.h in Headers */, + 0E740145DC8569F11C3D23161F42A3F3 /* SAMKeychainQuery.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E0F73066CC66D05653B61AFE5205EDC9 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 824FE389846E821F786C40A28CC9B89E /* Pods-fakestagram-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 26F44590B017B9CF61B71B978A6C48A9 /* DVR */ = { + isa = PBXNativeTarget; + buildConfigurationList = BB4A8EDF819F1F0E0B18EA4D9BF70600 /* Build configuration list for PBXNativeTarget "DVR" */; + buildPhases = ( + 784080E16476341D20781AF2902317C5 /* Headers */, + A9F19AE051CBB89DAFBD44FD2E39980F /* Sources */, + B3D5D6B487B493B2D48298B3DED84BD9 /* Frameworks */, + 821CB6386DC60F6A19F6CEAA2E7AEE0B /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = DVR; + productName = DVR; + productReference = 1E1EA3F1B3EB127825D5DB0D8EDFC9C7 /* DVR.framework */; + productType = "com.apple.product-type.framework"; + }; + 37DFBE9967A351080A46211968162EDE /* Pods-fakestagramTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 50602180414D758F8D725517101D4C5B /* Build configuration list for PBXNativeTarget "Pods-fakestagramTests" */; + buildPhases = ( + 6245C00F64E89DA283F0798C9544BB7B /* Headers */, + F4B17D67EA1413FDE96A9A76FBECB97C /* Sources */, + 4C4576A34B849022BE42DD796D17F6EC /* Frameworks */, + 506D48D632D979E702F9FDBA4112059B /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + C0EA27B480E84CF98928B1B8A341A924 /* PBXTargetDependency */, + 7CF03A27C10B968562A4216FD01FDD0C /* PBXTargetDependency */, + ); + name = "Pods-fakestagramTests"; + productName = "Pods-fakestagramTests"; + productReference = 935B2EBEB5C8126CBD501146563B912A /* Pods_fakestagramTests.framework */; + productType = "com.apple.product-type.framework"; + }; + 5572D14DECB5A676C1B31B30A3BA7F10 /* SAMKeychain */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6D0BF722BE8E60C7D236665B49E830FF /* Build configuration list for PBXNativeTarget "SAMKeychain" */; + buildPhases = ( + ADEF261B253DB102D68EBF8E235DA9FF /* Headers */, + A63338510D2B653EDCDA5C95CBFCA292 /* Sources */, + C92F66CC4A5F2F7CEBEF011807241DFE /* Frameworks */, + E057DD10B33CF59170DCD03B6F66E50E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SAMKeychain; + productName = SAMKeychain; + productReference = 612028EAFF1C2054A0EB821A9C9F2440 /* SAMKeychain.framework */; + productType = "com.apple.product-type.framework"; + }; + 61AEDBBA57E392B1F205C81674A649D6 /* Pods-fakestagram */ = { + isa = PBXNativeTarget; + buildConfigurationList = 20A69520979FE10BFD5B0F0DBD12647E /* Build configuration list for PBXNativeTarget "Pods-fakestagram" */; + buildPhases = ( + E0F73066CC66D05653B61AFE5205EDC9 /* Headers */, + 44E4A6AD7438ABD266A86B72783800F1 /* Sources */, + D679A4D37A03CF5C6A767C980A64E61E /* Frameworks */, + BE5AC97192CFD183414F38C0752E98D7 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 4370C1ABA79BBD5765042F46F6F1D887 /* PBXTargetDependency */, + ); + name = "Pods-fakestagram"; + productName = "Pods-fakestagram"; + productReference = 1F30323AA9315F80C09F38F3FA4FB6DB /* Pods_fakestagram.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + BFDFE7DC352907FC980B868725387E98 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1100; + LastUpgradeCheck = 1100; + }; + buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 10.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = CF1408CF629C7361332E53B88F7BD30C; + productRefGroup = 1B2CC7483679035B85390AF56CA2B745 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 26F44590B017B9CF61B71B978A6C48A9 /* DVR */, + 61AEDBBA57E392B1F205C81674A649D6 /* Pods-fakestagram */, + 37DFBE9967A351080A46211968162EDE /* Pods-fakestagramTests */, + 5572D14DECB5A676C1B31B30A3BA7F10 /* SAMKeychain */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 506D48D632D979E702F9FDBA4112059B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 821CB6386DC60F6A19F6CEAA2E7AEE0B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BE5AC97192CFD183414F38C0752E98D7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E057DD10B33CF59170DCD03B6F66E50E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 48749968F49ABC19B218B6A650DA2EFA /* SAMKeychain.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 44E4A6AD7438ABD266A86B72783800F1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2F2DE653FDC005F2E921F46B3EE3E7D8 /* Pods-fakestagram-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A63338510D2B653EDCDA5C95CBFCA292 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A44705A450B7BC75180A9FC266CCFB3D /* SAMKeychain-dummy.m in Sources */, + 180B0BC996F28420A22940BB965F2687 /* SAMKeychain.m in Sources */, + 06807C205FE8C18B68229A21B79F2C0A /* SAMKeychainQuery.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A9F19AE051CBB89DAFBD44FD2E39980F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A89C15CBEAFACA18FD1704EAB020BAD1 /* Cassette.swift in Sources */, + C62F2DC3C488FEB2A1C1E0FA31FCDE81 /* DVR-dummy.m in Sources */, + 4F467F8DE7756FE386809A1A36E8759C /* HTTPURLResponse.swift in Sources */, + ADC58AC3629C08D95E3F5D45CC0C6094 /* Interaction.swift in Sources */, + 99BD442E3473FF1BD45267F99AF9FB17 /* Session.swift in Sources */, + F49DAB6CD6CE82D9AE54962891D2DF6B /* SessionDataTask.swift in Sources */, + 8E68897246F917EC04BC035BADFF78C3 /* SessionDownloadTask.swift in Sources */, + 3CBF47DECEC4BC7EF06674F7B94A39DE /* SessionUploadTask.swift in Sources */, + 1B815895BB27D326F959D2E3C8C99302 /* URLRequest.swift in Sources */, + 2CEE9A3A00184D730B23CD8A599D5C9B /* URLResponse.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F4B17D67EA1413FDE96A9A76FBECB97C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 27A2EE4A3D8CCFC8A952A5456C9F16E0 /* Pods-fakestagramTests-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 4370C1ABA79BBD5765042F46F6F1D887 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SAMKeychain; + target = 5572D14DECB5A676C1B31B30A3BA7F10 /* SAMKeychain */; + targetProxy = 17414ED8749102A3FA2A67AFBD067C61 /* PBXContainerItemProxy */; + }; + 7CF03A27C10B968562A4216FD01FDD0C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Pods-fakestagram"; + target = 61AEDBBA57E392B1F205C81674A649D6 /* Pods-fakestagram */; + targetProxy = 86CA88CA94FD6858C9AC02D6320864DA /* PBXContainerItemProxy */; + }; + C0EA27B480E84CF98928B1B8A341A924 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DVR; + target = 26F44590B017B9CF61B71B978A6C48A9 /* DVR */; + targetProxy = BF29B87760F0FC7D925FA0F749D1A5DA /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 1422B121EAEAEA11307496903FA623C6 /* Release */ = { + isa = XCBuildConfiguration; + 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; + COPY_PHASE_STRIP = NO; + 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_RELEASE=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 = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; + }; + 3547A182D8304E546E03392FE52804C4 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 20BA74F50916A518C61868BDBE8A0A53 /* Pods-fakestagram.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-fakestagram/Pods-fakestagram-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-fakestagram/Pods-fakestagram.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; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 53E59C198B6DC3AF5B94923214D99515 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 13933B2BA0EA9B8C7F04CB48B4D211EC /* Pods-fakestagramTests.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests.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; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 5B8944E8CB02AEF5B66B2727234DA374 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F7E71CBB4B160B59D5219FC079FFBB1A /* Pods-fakestagram.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-fakestagram/Pods-fakestagram-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-fakestagram/Pods-fakestagram.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; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 80B8E3CCEC8B37739AF5D737CD55445B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EFBC1B690A9F27CF95FDD0D98628D8DA /* SAMKeychain.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SAMKeychain/SAMKeychain-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SAMKeychain/SAMKeychain-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/SAMKeychain/SAMKeychain.modulemap"; + PRODUCT_MODULE_NAME = SAMKeychain; + PRODUCT_NAME = SAMKeychain; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 84D002ED109032D26D7727656816360D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 053512BAF1A5A9D43C8DBE24A968B099 /* Pods-fakestagramTests.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests.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; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 8D404CBFE53B67F33C3EB2ED8ECEADEB /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A2B48B4990FCC0EBB3CF1968C2EE7F97 /* DVR.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/DVR/DVR-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DVR/DVR-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/DVR/DVR.modulemap"; + PRODUCT_MODULE_NAME = DVR; + PRODUCT_NAME = DVR; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 97172E77B9DF71E94D334322B5D9A612 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A2B48B4990FCC0EBB3CF1968C2EE7F97 /* DVR.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/DVR/DVR-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DVR/DVR-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/DVR/DVR.modulemap"; + PRODUCT_MODULE_NAME = DVR; + PRODUCT_NAME = DVR; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + A7E6A10383C96330489D1B81BEC6B474 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EFBC1B690A9F27CF95FDD0D98628D8DA /* SAMKeychain.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SAMKeychain/SAMKeychain-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SAMKeychain/SAMKeychain-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/SAMKeychain/SAMKeychain.modulemap"; + PRODUCT_MODULE_NAME = SAMKeychain; + PRODUCT_NAME = SAMKeychain; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + ED7888FA6713EABBF66D26A8003AD1CA /* Debug */ = { + isa = XCBuildConfiguration; + 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; + 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 = 13.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 20A69520979FE10BFD5B0F0DBD12647E /* Build configuration list for PBXNativeTarget "Pods-fakestagram" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5B8944E8CB02AEF5B66B2727234DA374 /* Debug */, + 3547A182D8304E546E03392FE52804C4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + ED7888FA6713EABBF66D26A8003AD1CA /* Debug */, + 1422B121EAEAEA11307496903FA623C6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 50602180414D758F8D725517101D4C5B /* Build configuration list for PBXNativeTarget "Pods-fakestagramTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 53E59C198B6DC3AF5B94923214D99515 /* Debug */, + 84D002ED109032D26D7727656816360D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6D0BF722BE8E60C7D236665B49E830FF /* Build configuration list for PBXNativeTarget "SAMKeychain" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 80B8E3CCEC8B37739AF5D737CD55445B /* Debug */, + A7E6A10383C96330489D1B81BEC6B474 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + BB4A8EDF819F1F0E0B18EA4D9BF70600 /* Build configuration list for PBXNativeTarget "DVR" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97172E77B9DF71E94D334322B5D9A612 /* Debug */, + 8D404CBFE53B67F33C3EB2ED8ECEADEB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; +} diff --git a/Pods/Pods.xcodeproj/xcuserdata/carloscarventevelasco.xcuserdatad/xcschemes/DVR.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/carloscarventevelasco.xcuserdatad/xcschemes/DVR.xcscheme new file mode 100644 index 0000000..0f901e0 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/carloscarventevelasco.xcuserdatad/xcschemes/DVR.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/carloscarventevelasco.xcuserdatad/xcschemes/Pods-fakestagram.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/carloscarventevelasco.xcuserdatad/xcschemes/Pods-fakestagram.xcscheme new file mode 100644 index 0000000..32f2715 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/carloscarventevelasco.xcuserdatad/xcschemes/Pods-fakestagram.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/carloscarventevelasco.xcuserdatad/xcschemes/Pods-fakestagramTests.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/carloscarventevelasco.xcuserdatad/xcschemes/Pods-fakestagramTests.xcscheme new file mode 100644 index 0000000..4f5af4e --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/carloscarventevelasco.xcuserdatad/xcschemes/Pods-fakestagramTests.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/carloscarventevelasco.xcuserdatad/xcschemes/SAMKeychain.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/carloscarventevelasco.xcuserdatad/xcschemes/SAMKeychain.xcscheme new file mode 100644 index 0000000..8cb3dd4 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/carloscarventevelasco.xcuserdatad/xcschemes/SAMKeychain.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/carloscarventevelasco.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/carloscarventevelasco.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..4b967f8 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/carloscarventevelasco.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,39 @@ + + + + + SchemeUserState + + DVR.xcscheme + + isShown + + orderHint + 0 + + Pods-fakestagram.xcscheme + + isShown + + orderHint + 1 + + Pods-fakestagramTests.xcscheme + + isShown + + orderHint + 2 + + SAMKeychain.xcscheme + + isShown + + orderHint + 3 + + + SuppressBuildableAutocreation + + + diff --git a/Pods/SAMKeychain/LICENSE b/Pods/SAMKeychain/LICENSE new file mode 100644 index 0000000..21fe4ef --- /dev/null +++ b/Pods/SAMKeychain/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2010-2016 Sam Soffes, http://soff.es + +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. diff --git a/Pods/SAMKeychain/Readme.markdown b/Pods/SAMKeychain/Readme.markdown new file mode 100644 index 0000000..fbd8d96 --- /dev/null +++ b/Pods/SAMKeychain/Readme.markdown @@ -0,0 +1,87 @@ +# SAMKeychain + +[![Version](https://img.shields.io/github/release/soffes/SAMKeychain.svg)](https://github.com/soffes/SAMKeychain/releases) +[![CocoaPods](https://img.shields.io/cocoapods/v/SAMKeychain.svg)](https://cocoapods.org/pods/SAMKeychain) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) + +SAMKeychain is a simple wrapper for accessing accounts, getting passwords, setting passwords, and deleting passwords using the system Keychain on Mac OS X and iOS. + +## Adding to Your Project + +Simply add the following to your Podfile if you're using CocoaPods: + +``` ruby +pod 'SAMKeychain' +``` + +or Cartfile if you're using Carthage: + +``` +github "soffes/SAMKeychain" +``` + +To manually add to your project: + +1. Add `Security.framework` to your target +2. Add `SAMKeychain.h`, `SAMKeychain.m`, `SAMKeychainQuery.h`, and `SAMKeychainQuery.m` to your project. + +SAMKeychain requires ARC. + +Note: Currently SAMKeychain does not support Mac OS 10.6. + +## Working with the Keychain + +SAMKeychain has the following class methods for working with the system keychain: + +```objective-c ++ (NSArray *)allAccounts; ++ (NSArray *)accountsForService:(NSString *)serviceName; ++ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account; ++ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account; ++ (void)setAccessibilityType:(CFTypeRef)accessibilityType; ++ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account; +``` + +Easy as that. (See [SAMKeychain.h](https://github.com/soffes/samkeychain/blob/master/Sources/SAMKeychain.h) and [SAMKeychainQuery.h](https://github.com/soffes/samkeychain/blob/master/Sources/SAMKeychainQuery.h) for all of the methods.) + + +## Documentation + +### Use prepared documentation + +Read the [online documentation](http://cocoadocs.org/docsets/SAMKeychain). + +## Debugging + +If your saving to the keychain fails, use the NSError object to handle it. You can invoke `[error code]` to get the numeric error code. A few values are defined in SAMKeychain.h, and the rest in SecBase.h. + +```objective-c +NSError *error = nil; +SAMKeychainQuery *query = [[SAMKeychainQuery alloc] init]; +query.service = @"MyService"; +query.account = @"soffes"; +[query fetch:&error]; + +if ([error code] == errSecItemNotFound) { + NSLog(@"Password not found"); +} else if (error != nil) { + NSLog(@"Some other error occurred: %@", [error localizedDescription]); +} +``` + +Obviously, you should do something more sophisticated. You can just call `[error localizedDescription]` if all you need is the error message. + +## Disclaimer + +Working with the keychain is pretty sucky. You should really check for errors and failures. This library doesn't make it any more stable, it just wraps up all of the annoying C APIs. + +You also really should not use the default but set the `accessibilityType`. +`kSecAttrAccessibleWhenUnlocked` should work for most applications. See +[Apple Documentation](https://developer.apple.com/library/ios/DOCUMENTATION/Security/Reference/keychainservices/Reference/reference.html#//apple_ref/doc/constant_group/Keychain_Item_Accessibility_Constants) +for other options. + +## Thanks + +This was originally inspired by EMKeychain and SDKeychain (both of which are now gone). Thanks to the authors. SAMKeychain has since switched to a simpler implementation that was abstracted from [SSToolkit](https://github.com/soffes/sstoolkit). + +A huge thanks to [Caleb Davenport](https://github.com/calebd) for leading the way on version 1.0 of SAMKeychain. diff --git a/Pods/SAMKeychain/Sources/SAMKeychain.h b/Pods/SAMKeychain/Sources/SAMKeychain.h new file mode 100644 index 0000000..2af305d --- /dev/null +++ b/Pods/SAMKeychain/Sources/SAMKeychain.h @@ -0,0 +1,203 @@ +// +// SAMKeychain.h +// SAMKeychain +// +// Created by Sam Soffes on 5/19/10. +// Copyright (c) 2010-2014 Sam Soffes. All rights reserved. +// + +#if __has_feature(modules) + @import Foundation; +#else + #import +#endif + +NS_ASSUME_NONNULL_BEGIN + +/** + Error code specific to SAMKeychain that can be returned in NSError objects. + For codes returned by the operating system, refer to SecBase.h for your + platform. + */ +typedef NS_ENUM(OSStatus, SAMKeychainErrorCode) { + /** Some of the arguments were invalid. */ + SAMKeychainErrorBadArguments = -1001, +}; + +/** SAMKeychain error domain */ +extern NSString *const kSAMKeychainErrorDomain; + +/** Account name. */ +extern NSString *const kSAMKeychainAccountKey; + +/** + Time the item was created. + + The value will be a string. + */ +extern NSString *const kSAMKeychainCreatedAtKey; + +/** Item class. */ +extern NSString *const kSAMKeychainClassKey; + +/** Item description. */ +extern NSString *const kSAMKeychainDescriptionKey; + +/** Item label. */ +extern NSString *const kSAMKeychainLabelKey; + +/** Time the item was last modified. + + The value will be a string. + */ +extern NSString *const kSAMKeychainLastModifiedKey; + +/** Where the item was created. */ +extern NSString *const kSAMKeychainWhereKey; + +/** + Simple wrapper for accessing accounts, getting passwords, setting passwords, and deleting passwords using the system + Keychain on Mac OS X and iOS. + + This was originally inspired by EMKeychain and SDKeychain (both of which are now gone). Thanks to the authors. + SAMKeychain has since switched to a simpler implementation that was abstracted from [SSToolkit](http://sstoolk.it). + */ +@interface SAMKeychain : NSObject + +#pragma mark - Classic methods + +/** + Returns a string containing the password for a given account and service, or `nil` if the Keychain doesn't have a + password for the given parameters. + + @param serviceName The service for which to return the corresponding password. + + @param account The account for which to return the corresponding password. + + @return Returns a string containing the password for a given account and service, or `nil` if the Keychain doesn't + have a password for the given parameters. + */ ++ (nullable NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account; ++ (nullable NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error __attribute__((swift_error(none))); + +/** + Returns a nsdata containing the password for a given account and service, or `nil` if the Keychain doesn't have a + password for the given parameters. + + @param serviceName The service for which to return the corresponding password. + + @param account The account for which to return the corresponding password. + + @return Returns a nsdata containing the password for a given account and service, or `nil` if the Keychain doesn't + have a password for the given parameters. + */ ++ (nullable NSData *)passwordDataForService:(NSString *)serviceName account:(NSString *)account; ++ (nullable NSData *)passwordDataForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error __attribute__((swift_error(none))); + + +/** + Deletes a password from the Keychain. + + @param serviceName The service for which to delete the corresponding password. + + @param account The account for which to delete the corresponding password. + + @return Returns `YES` on success, or `NO` on failure. + */ ++ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account; ++ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error __attribute__((swift_error(none))); + + +/** + Sets a password in the Keychain. + + @param password The password to store in the Keychain. + + @param serviceName The service for which to set the corresponding password. + + @param account The account for which to set the corresponding password. + + @return Returns `YES` on success, or `NO` on failure. + */ ++ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account; ++ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error __attribute__((swift_error(none))); + +/** + Sets a password in the Keychain. + + @param password The password to store in the Keychain. + + @param serviceName The service for which to set the corresponding password. + + @param account The account for which to set the corresponding password. + + @return Returns `YES` on success, or `NO` on failure. + */ ++ (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName account:(NSString *)account; ++ (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error __attribute__((swift_error(none))); + +/** + Returns an array containing the Keychain's accounts, or `nil` if the Keychain has no accounts. + + See the `NSString` constants declared in SAMKeychain.h for a list of keys that can be used when accessing the + dictionaries returned by this method. + + @return An array of dictionaries containing the Keychain's accounts, or `nil` if the Keychain doesn't have any + accounts. The order of the objects in the array isn't defined. + */ ++ (nullable NSArray *> *)allAccounts; ++ (nullable NSArray *> *)allAccounts:(NSError *__autoreleasing *)error __attribute__((swift_error(none))); + + +/** + Returns an array containing the Keychain's accounts for a given service, or `nil` if the Keychain doesn't have any + accounts for the given service. + + See the `NSString` constants declared in SAMKeychain.h for a list of keys that can be used when accessing the + dictionaries returned by this method. + + @param serviceName The service for which to return the corresponding accounts. + + @return An array of dictionaries containing the Keychain's accounts for a given `serviceName`, or `nil` if the Keychain + doesn't have any accounts for the given `serviceName`. The order of the objects in the array isn't defined. + */ ++ (nullable NSArray *> *)accountsForService:(nullable NSString *)serviceName; ++ (nullable NSArray *> *)accountsForService:(nullable NSString *)serviceName error:(NSError *__autoreleasing *)error __attribute__((swift_error(none))); + + +#pragma mark - Configuration + +#if __IPHONE_4_0 && TARGET_OS_IPHONE +/** + Returns the accessibility type for all future passwords saved to the Keychain. + + @return Returns the accessibility type. + + The return value will be `NULL` or one of the "Keychain Item Accessibility + Constants" used for determining when a keychain item should be readable. + + @see setAccessibilityType + */ ++ (CFTypeRef)accessibilityType; + +/** + Sets the accessibility type for all future passwords saved to the Keychain. + + @param accessibilityType One of the "Keychain Item Accessibility Constants" + used for determining when a keychain item should be readable. + + If the value is `NULL` (the default), the Keychain default will be used which + is highly insecure. You really should use at least `kSecAttrAccessibleAfterFirstUnlock` + for background applications or `kSecAttrAccessibleWhenUnlocked` for all + other applications. + + @see accessibilityType + */ ++ (void)setAccessibilityType:(CFTypeRef)accessibilityType; +#endif + +@end + +NS_ASSUME_NONNULL_END + +#import diff --git a/Pods/SAMKeychain/Sources/SAMKeychain.m b/Pods/SAMKeychain/Sources/SAMKeychain.m new file mode 100644 index 0000000..6d01d3d --- /dev/null +++ b/Pods/SAMKeychain/Sources/SAMKeychain.m @@ -0,0 +1,130 @@ +// +// SAMKeychain.m +// SAMKeychain +// +// Created by Sam Soffes on 5/19/10. +// Copyright (c) 2010-2014 Sam Soffes. All rights reserved. +// + +#import "SAMKeychain.h" +#import "SAMKeychainQuery.h" + +NSString *const kSAMKeychainErrorDomain = @"com.samsoffes.samkeychain"; +NSString *const kSAMKeychainAccountKey = @"acct"; +NSString *const kSAMKeychainCreatedAtKey = @"cdat"; +NSString *const kSAMKeychainClassKey = @"labl"; +NSString *const kSAMKeychainDescriptionKey = @"desc"; +NSString *const kSAMKeychainLabelKey = @"labl"; +NSString *const kSAMKeychainLastModifiedKey = @"mdat"; +NSString *const kSAMKeychainWhereKey = @"svce"; + +#if __IPHONE_4_0 && TARGET_OS_IPHONE + static CFTypeRef SAMKeychainAccessibilityType = NULL; +#endif + +@implementation SAMKeychain + ++ (nullable NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account { + return [self passwordForService:serviceName account:account error:nil]; +} + + ++ (nullable NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account error:(NSError *__autoreleasing *)error { + SAMKeychainQuery *query = [[SAMKeychainQuery alloc] init]; + query.service = serviceName; + query.account = account; + [query fetch:error]; + return query.password; +} + ++ (nullable NSData *)passwordDataForService:(NSString *)serviceName account:(NSString *)account { + return [self passwordDataForService:serviceName account:account error:nil]; +} + ++ (nullable NSData *)passwordDataForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error { + SAMKeychainQuery *query = [[SAMKeychainQuery alloc] init]; + query.service = serviceName; + query.account = account; + [query fetch:error]; + + return query.passwordData; +} + + ++ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account { + return [self deletePasswordForService:serviceName account:account error:nil]; +} + + ++ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account error:(NSError *__autoreleasing *)error { + SAMKeychainQuery *query = [[SAMKeychainQuery alloc] init]; + query.service = serviceName; + query.account = account; + return [query deleteItem:error]; +} + + ++ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account { + return [self setPassword:password forService:serviceName account:account error:nil]; +} + + ++ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError *__autoreleasing *)error { + SAMKeychainQuery *query = [[SAMKeychainQuery alloc] init]; + query.service = serviceName; + query.account = account; + query.password = password; + return [query save:error]; +} + ++ (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName account:(NSString *)account { + return [self setPasswordData:password forService:serviceName account:account error:nil]; +} + + ++ (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error { + SAMKeychainQuery *query = [[SAMKeychainQuery alloc] init]; + query.service = serviceName; + query.account = account; + query.passwordData = password; + return [query save:error]; +} + ++ (nullable NSArray *)allAccounts { + return [self allAccounts:nil]; +} + + ++ (nullable NSArray *)allAccounts:(NSError *__autoreleasing *)error { + return [self accountsForService:nil error:error]; +} + + ++ (nullable NSArray *)accountsForService:(nullable NSString *)serviceName { + return [self accountsForService:serviceName error:nil]; +} + + ++ (nullable NSArray *)accountsForService:(nullable NSString *)serviceName error:(NSError *__autoreleasing *)error { + SAMKeychainQuery *query = [[SAMKeychainQuery alloc] init]; + query.service = serviceName; + return [query fetchAll:error]; +} + + +#if __IPHONE_4_0 && TARGET_OS_IPHONE ++ (CFTypeRef)accessibilityType { + return SAMKeychainAccessibilityType; +} + + ++ (void)setAccessibilityType:(CFTypeRef)accessibilityType { + CFRetain(accessibilityType); + if (SAMKeychainAccessibilityType) { + CFRelease(SAMKeychainAccessibilityType); + } + SAMKeychainAccessibilityType = accessibilityType; +} +#endif + +@end diff --git a/Pods/SAMKeychain/Sources/SAMKeychainQuery.h b/Pods/SAMKeychain/Sources/SAMKeychainQuery.h new file mode 100644 index 0000000..84658e2 --- /dev/null +++ b/Pods/SAMKeychain/Sources/SAMKeychainQuery.h @@ -0,0 +1,147 @@ +// +// SAMKeychainQuery.h +// SAMKeychain +// +// Created by Caleb Davenport on 3/19/13. +// Copyright (c) 2013-2014 Sam Soffes. All rights reserved. +// + +#if __has_feature(modules) + @import Foundation; + @import Security; +#else + #import + #import +#endif + +NS_ASSUME_NONNULL_BEGIN + +#if __IPHONE_7_0 || __MAC_10_9 + // Keychain synchronization available at compile time + #define SAMKEYCHAIN_SYNCHRONIZATION_AVAILABLE 1 +#endif + +#if __IPHONE_3_0 || __MAC_10_9 + // Keychain access group available at compile time + #define SAMKEYCHAIN_ACCESS_GROUP_AVAILABLE 1 +#endif + +#ifdef SAMKEYCHAIN_SYNCHRONIZATION_AVAILABLE +typedef NS_ENUM(NSUInteger, SAMKeychainQuerySynchronizationMode) { + SAMKeychainQuerySynchronizationModeAny, + SAMKeychainQuerySynchronizationModeNo, + SAMKeychainQuerySynchronizationModeYes +}; +#endif + +/** + Simple interface for querying or modifying keychain items. + */ +@interface SAMKeychainQuery : NSObject + +/** kSecAttrAccount */ +@property (nonatomic, copy, nullable) NSString *account; + +/** kSecAttrService */ +@property (nonatomic, copy, nullable) NSString *service; + +/** kSecAttrLabel */ +@property (nonatomic, copy, nullable) NSString *label; + +#ifdef SAMKEYCHAIN_ACCESS_GROUP_AVAILABLE +/** kSecAttrAccessGroup (only used on iOS) */ +@property (nonatomic, copy, nullable) NSString *accessGroup; +#endif + +#ifdef SAMKEYCHAIN_SYNCHRONIZATION_AVAILABLE +/** kSecAttrSynchronizable */ +@property (nonatomic) SAMKeychainQuerySynchronizationMode synchronizationMode; +#endif + +/** Root storage for password information */ +@property (nonatomic, copy, nullable) NSData *passwordData; + +/** + This property automatically transitions between an object and the value of + `passwordData` using NSKeyedArchiver and NSKeyedUnarchiver. + */ +@property (nonatomic, copy, nullable) id passwordObject; + +/** + Convenience accessor for setting and getting a password string. Passes through + to `passwordData` using UTF-8 string encoding. + */ +@property (nonatomic, copy, nullable) NSString *password; + + +///------------------------ +/// @name Saving & Deleting +///------------------------ + +/** + Save the receiver's attributes as a keychain item. Existing items with the + given account, service, and access group will first be deleted. + + @param error Populated should an error occur. + + @return `YES` if saving was successful, `NO` otherwise. + */ +- (BOOL)save:(NSError **)error; + +/** + Delete keychain items that match the given account, service, and access group. + + @param error Populated should an error occur. + + @return `YES` if saving was successful, `NO` otherwise. + */ +- (BOOL)deleteItem:(NSError **)error; + + +///--------------- +/// @name Fetching +///--------------- + +/** + Fetch all keychain items that match the given account, service, and access + group. The values of `password` and `passwordData` are ignored when fetching. + + @param error Populated should an error occur. + + @return An array of dictionaries that represent all matching keychain items or + `nil` should an error occur. + The order of the items is not determined. + */ +- (nullable NSArray *> *)fetchAll:(NSError **)error; + +/** + Fetch the keychain item that matches the given account, service, and access + group. The `password` and `passwordData` properties will be populated unless + an error occurs. The values of `password` and `passwordData` are ignored when + fetching. + + @param error Populated should an error occur. + + @return `YES` if fetching was successful, `NO` otherwise. + */ +- (BOOL)fetch:(NSError **)error; + + +///----------------------------- +/// @name Synchronization Status +///----------------------------- + +#ifdef SAMKEYCHAIN_SYNCHRONIZATION_AVAILABLE +/** + Returns a boolean indicating if keychain synchronization is available on the device at runtime. The #define + SAMKEYCHAIN_SYNCHRONIZATION_AVAILABLE is only for compile time. If you are checking for the presence of synchronization, + you should use this method. + + @return A value indicating if keychain synchronization is available + */ ++ (BOOL)isSynchronizationAvailable; +#endif + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/SAMKeychain/Sources/SAMKeychainQuery.m b/Pods/SAMKeychain/Sources/SAMKeychainQuery.m new file mode 100644 index 0000000..00ecb80 --- /dev/null +++ b/Pods/SAMKeychain/Sources/SAMKeychainQuery.m @@ -0,0 +1,316 @@ +// +// SAMKeychainQuery.m +// SAMKeychain +// +// Created by Caleb Davenport on 3/19/13. +// Copyright (c) 2013-2014 Sam Soffes. All rights reserved. +// + +#import "SAMKeychainQuery.h" +#import "SAMKeychain.h" + +@implementation SAMKeychainQuery + +@synthesize account = _account; +@synthesize service = _service; +@synthesize label = _label; +@synthesize passwordData = _passwordData; + +#ifdef SAMKEYCHAIN_ACCESS_GROUP_AVAILABLE +@synthesize accessGroup = _accessGroup; +#endif + +#ifdef SAMKEYCHAIN_SYNCHRONIZATION_AVAILABLE +@synthesize synchronizationMode = _synchronizationMode; +#endif + +#pragma mark - Public + +- (BOOL)save:(NSError *__autoreleasing *)error { + OSStatus status = SAMKeychainErrorBadArguments; + if (!self.service || !self.account || !self.passwordData) { + if (error) { + *error = [[self class] errorWithCode:status]; + } + return NO; + } + NSMutableDictionary *query = nil; + NSMutableDictionary * searchQuery = [self query]; + status = SecItemCopyMatching((__bridge CFDictionaryRef)searchQuery, nil); + if (status == errSecSuccess) {//item already exists, update it! + query = [[NSMutableDictionary alloc]init]; + [query setObject:self.passwordData forKey:(__bridge id)kSecValueData]; +#if __IPHONE_4_0 && TARGET_OS_IPHONE + CFTypeRef accessibilityType = [SAMKeychain accessibilityType]; + if (accessibilityType) { + [query setObject:(__bridge id)accessibilityType forKey:(__bridge id)kSecAttrAccessible]; + } +#endif + status = SecItemUpdate((__bridge CFDictionaryRef)(searchQuery), (__bridge CFDictionaryRef)(query)); + }else if(status == errSecItemNotFound){//item not found, create it! + query = [self query]; + if (self.label) { + [query setObject:self.label forKey:(__bridge id)kSecAttrLabel]; + } + [query setObject:self.passwordData forKey:(__bridge id)kSecValueData]; +#if __IPHONE_4_0 && TARGET_OS_IPHONE + CFTypeRef accessibilityType = [SAMKeychain accessibilityType]; + if (accessibilityType) { + [query setObject:(__bridge id)accessibilityType forKey:(__bridge id)kSecAttrAccessible]; + } +#endif + status = SecItemAdd((__bridge CFDictionaryRef)query, NULL); + } + if (status != errSecSuccess && error != NULL) { + *error = [[self class] errorWithCode:status]; + } + return (status == errSecSuccess);} + + +- (BOOL)deleteItem:(NSError *__autoreleasing *)error { + OSStatus status = SAMKeychainErrorBadArguments; + if (!self.service || !self.account) { + if (error) { + *error = [[self class] errorWithCode:status]; + } + return NO; + } + + NSMutableDictionary *query = [self query]; +#if TARGET_OS_IPHONE + status = SecItemDelete((__bridge CFDictionaryRef)query); +#else + // On Mac OS, SecItemDelete will not delete a key created in a different + // app, nor in a different version of the same app. + // + // To replicate the issue, save a password, change to the code and + // rebuild the app, and then attempt to delete that password. + // + // This was true in OS X 10.6 and probably later versions as well. + // + // Work around it by using SecItemCopyMatching and SecKeychainItemDelete. + CFTypeRef result = NULL; + [query setObject:@YES forKey:(__bridge id)kSecReturnRef]; + status = SecItemCopyMatching((__bridge CFDictionaryRef)query, &result); + if (status == errSecSuccess) { + status = SecKeychainItemDelete((SecKeychainItemRef)result); + CFRelease(result); + } +#endif + + if (status != errSecSuccess && error != NULL) { + *error = [[self class] errorWithCode:status]; + } + + return (status == errSecSuccess); +} + + +- (nullable NSArray *)fetchAll:(NSError *__autoreleasing *)error { + NSMutableDictionary *query = [self query]; + [query setObject:@YES forKey:(__bridge id)kSecReturnAttributes]; + [query setObject:(__bridge id)kSecMatchLimitAll forKey:(__bridge id)kSecMatchLimit]; +#if __IPHONE_4_0 && TARGET_OS_IPHONE + CFTypeRef accessibilityType = [SAMKeychain accessibilityType]; + if (accessibilityType) { + [query setObject:(__bridge id)accessibilityType forKey:(__bridge id)kSecAttrAccessible]; + } +#endif + + CFTypeRef result = NULL; + OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, &result); + if (status != errSecSuccess && error != NULL) { + *error = [[self class] errorWithCode:status]; + return nil; + } + + return (__bridge_transfer NSArray *)result; +} + + +- (BOOL)fetch:(NSError *__autoreleasing *)error { + OSStatus status = SAMKeychainErrorBadArguments; + if (!self.service || !self.account) { + if (error) { + *error = [[self class] errorWithCode:status]; + } + return NO; + } + + CFTypeRef result = NULL; + NSMutableDictionary *query = [self query]; + [query setObject:@YES forKey:(__bridge id)kSecReturnData]; + [query setObject:(__bridge id)kSecMatchLimitOne forKey:(__bridge id)kSecMatchLimit]; + status = SecItemCopyMatching((__bridge CFDictionaryRef)query, &result); + + if (status != errSecSuccess) { + if (error) { + *error = [[self class] errorWithCode:status]; + } + return NO; + } + + self.passwordData = (__bridge_transfer NSData *)result; + return YES; +} + + +#pragma mark - Accessors + +- (void)setPasswordObject:(id)object { + self.passwordData = [NSKeyedArchiver archivedDataWithRootObject:object]; +} + + +- (id)passwordObject { + if ([self.passwordData length]) { + return [NSKeyedUnarchiver unarchiveObjectWithData:self.passwordData]; + } + return nil; +} + + +- (void)setPassword:(NSString *)password { + self.passwordData = [password dataUsingEncoding:NSUTF8StringEncoding]; +} + + +- (NSString *)password { + if ([self.passwordData length]) { + return [[NSString alloc] initWithData:self.passwordData encoding:NSUTF8StringEncoding]; + } + return nil; +} + + +#pragma mark - Synchronization Status + +#ifdef SAMKEYCHAIN_SYNCHRONIZATION_AVAILABLE ++ (BOOL)isSynchronizationAvailable { +#if TARGET_OS_IPHONE + // Apple suggested way to check for 7.0 at runtime + // https://developer.apple.com/library/ios/documentation/userexperience/conceptual/transitionguide/SupportingEarlieriOS.html + return floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1; +#else + return floor(NSFoundationVersionNumber) > NSFoundationVersionNumber10_8_4; +#endif +} +#endif + + +#pragma mark - Private + +- (NSMutableDictionary *)query { + NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:3]; + [dictionary setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass]; + + if (self.service) { + [dictionary setObject:self.service forKey:(__bridge id)kSecAttrService]; + } + + if (self.account) { + [dictionary setObject:self.account forKey:(__bridge id)kSecAttrAccount]; + } + +#ifdef SAMKEYCHAIN_ACCESS_GROUP_AVAILABLE +#if !TARGET_IPHONE_SIMULATOR + if (self.accessGroup) { + [dictionary setObject:self.accessGroup forKey:(__bridge id)kSecAttrAccessGroup]; + } +#endif +#endif + +#ifdef SAMKEYCHAIN_SYNCHRONIZATION_AVAILABLE + if ([[self class] isSynchronizationAvailable]) { + id value; + + switch (self.synchronizationMode) { + case SAMKeychainQuerySynchronizationModeNo: { + value = @NO; + break; + } + case SAMKeychainQuerySynchronizationModeYes: { + value = @YES; + break; + } + case SAMKeychainQuerySynchronizationModeAny: { + value = (__bridge id)(kSecAttrSynchronizableAny); + break; + } + } + + [dictionary setObject:value forKey:(__bridge id)(kSecAttrSynchronizable)]; + } +#endif + + return dictionary; +} + + ++ (NSError *)errorWithCode:(OSStatus) code { + static dispatch_once_t onceToken; + static NSBundle *resourcesBundle = nil; + dispatch_once(&onceToken, ^{ + NSURL *url = [[NSBundle bundleForClass:[SAMKeychainQuery class]] URLForResource:@"SAMKeychain" withExtension:@"bundle"]; + resourcesBundle = [NSBundle bundleWithURL:url]; + }); + + NSString *message = nil; + switch (code) { + case errSecSuccess: return nil; + case SAMKeychainErrorBadArguments: message = NSLocalizedStringFromTableInBundle(@"SAMKeychainErrorBadArguments", @"SAMKeychain", resourcesBundle, nil); break; + +#if TARGET_OS_IPHONE + case errSecUnimplemented: { + message = NSLocalizedStringFromTableInBundle(@"errSecUnimplemented", @"SAMKeychain", resourcesBundle, nil); + break; + } + case errSecParam: { + message = NSLocalizedStringFromTableInBundle(@"errSecParam", @"SAMKeychain", resourcesBundle, nil); + break; + } + case errSecAllocate: { + message = NSLocalizedStringFromTableInBundle(@"errSecAllocate", @"SAMKeychain", resourcesBundle, nil); + break; + } + case errSecNotAvailable: { + message = NSLocalizedStringFromTableInBundle(@"errSecNotAvailable", @"SAMKeychain", resourcesBundle, nil); + break; + } + case errSecDuplicateItem: { + message = NSLocalizedStringFromTableInBundle(@"errSecDuplicateItem", @"SAMKeychain", resourcesBundle, nil); + break; + } + case errSecItemNotFound: { + message = NSLocalizedStringFromTableInBundle(@"errSecItemNotFound", @"SAMKeychain", resourcesBundle, nil); + break; + } + case errSecInteractionNotAllowed: { + message = NSLocalizedStringFromTableInBundle(@"errSecInteractionNotAllowed", @"SAMKeychain", resourcesBundle, nil); + break; + } + case errSecDecode: { + message = NSLocalizedStringFromTableInBundle(@"errSecDecode", @"SAMKeychain", resourcesBundle, nil); + break; + } + case errSecAuthFailed: { + message = NSLocalizedStringFromTableInBundle(@"errSecAuthFailed", @"SAMKeychain", resourcesBundle, nil); + break; + } + default: { + message = NSLocalizedStringFromTableInBundle(@"errSecDefault", @"SAMKeychain", resourcesBundle, nil); + } +#else + default: + message = (__bridge_transfer NSString *)SecCopyErrorMessageString(code, NULL); +#endif + } + + NSDictionary *userInfo = nil; + if (message) { + userInfo = @{ NSLocalizedDescriptionKey : message }; + } + return [NSError errorWithDomain:kSAMKeychainErrorDomain code:code userInfo:userInfo]; +} + +@end diff --git a/Pods/SAMKeychain/Support/SAMKeychain.bundle/en.lproj/SAMKeychain.strings b/Pods/SAMKeychain/Support/SAMKeychain.bundle/en.lproj/SAMKeychain.strings new file mode 100644 index 0000000..5c0f174 Binary files /dev/null and b/Pods/SAMKeychain/Support/SAMKeychain.bundle/en.lproj/SAMKeychain.strings differ diff --git a/Pods/Target Support Files/DVR/DVR-Info.plist b/Pods/Target Support Files/DVR/DVR-Info.plist new file mode 100644 index 0000000..0a12077 --- /dev/null +++ b/Pods/Target Support Files/DVR/DVR-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/DVR/DVR-dummy.m b/Pods/Target Support Files/DVR/DVR-dummy.m new file mode 100644 index 0000000..2793711 --- /dev/null +++ b/Pods/Target Support Files/DVR/DVR-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_DVR : NSObject +@end +@implementation PodsDummy_DVR +@end diff --git a/Pods/Target Support Files/DVR/DVR-prefix.pch b/Pods/Target Support Files/DVR/DVR-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/DVR/DVR-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/DVR/DVR-umbrella.h b/Pods/Target Support Files/DVR/DVR-umbrella.h new file mode 100644 index 0000000..6132b8e --- /dev/null +++ b/Pods/Target Support Files/DVR/DVR-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double DVRVersionNumber; +FOUNDATION_EXPORT const unsigned char DVRVersionString[]; + diff --git a/Pods/Target Support Files/DVR/DVR.modulemap b/Pods/Target Support Files/DVR/DVR.modulemap new file mode 100644 index 0000000..2f6c814 --- /dev/null +++ b/Pods/Target Support Files/DVR/DVR.modulemap @@ -0,0 +1,6 @@ +framework module DVR { + umbrella header "DVR-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/DVR/DVR.xcconfig b/Pods/Target Support Files/DVR/DVR.xcconfig new file mode 100644 index 0000000..6b2e24d --- /dev/null +++ b/Pods/Target Support Files/DVR/DVR.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DVR +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/DVR +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-Info.plist b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-acknowledgements.markdown b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-acknowledgements.markdown new file mode 100644 index 0000000..11044cb --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-acknowledgements.markdown @@ -0,0 +1,27 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## SAMKeychain + +Copyright (c) 2010-2016 Sam Soffes, http://soff.es + +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. + +Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-acknowledgements.plist b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-acknowledgements.plist new file mode 100644 index 0000000..3783cd2 --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-acknowledgements.plist @@ -0,0 +1,59 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2010-2016 Sam Soffes, http://soff.es + +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. + + License + MIT + Title + SAMKeychain + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-dummy.m b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-dummy.m new file mode 100644 index 0000000..f266da4 --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_fakestagram : NSObject +@end +@implementation PodsDummy_Pods_fakestagram +@end diff --git a/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-frameworks-Debug-input-files.xcfilelist b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-frameworks-Debug-input-files.xcfilelist new file mode 100644 index 0000000..8f68cb4 --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-frameworks-Debug-input-files.xcfilelist @@ -0,0 +1,2 @@ +${PODS_ROOT}/Target Support Files/Pods-fakestagram/Pods-fakestagram-frameworks.sh +${BUILT_PRODUCTS_DIR}/SAMKeychain/SAMKeychain.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-frameworks-Debug-output-files.xcfilelist b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-frameworks-Debug-output-files.xcfilelist new file mode 100644 index 0000000..2211fcb --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-frameworks-Debug-output-files.xcfilelist @@ -0,0 +1 @@ +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SAMKeychain.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-frameworks-Release-input-files.xcfilelist b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-frameworks-Release-input-files.xcfilelist new file mode 100644 index 0000000..8f68cb4 --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-frameworks-Release-input-files.xcfilelist @@ -0,0 +1,2 @@ +${PODS_ROOT}/Target Support Files/Pods-fakestagram/Pods-fakestagram-frameworks.sh +${BUILT_PRODUCTS_DIR}/SAMKeychain/SAMKeychain.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-frameworks-Release-output-files.xcfilelist b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-frameworks-Release-output-files.xcfilelist new file mode 100644 index 0000000..2211fcb --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-frameworks-Release-output-files.xcfilelist @@ -0,0 +1 @@ +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SAMKeychain.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-frameworks.sh b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-frameworks.sh new file mode 100755 index 0000000..ac7abfe --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-frameworks.sh @@ -0,0 +1,171 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +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 + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # 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")" + binary="${destination}/${basename}.framework/${basename}" + + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + 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 +} + +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" +} + +# 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 + # Use the current code_sign_identity + 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'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # 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 $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi + STRIP_BINARY_RETVAL=1 +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/SAMKeychain/SAMKeychain.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/SAMKeychain/SAMKeychain.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-umbrella.h b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-umbrella.h new file mode 100644 index 0000000..b3b51df --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_fakestagramVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_fakestagramVersionString[]; + diff --git a/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram.debug.xcconfig b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram.debug.xcconfig new file mode 100644 index 0000000..40bcc85 --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram.debug.xcconfig @@ -0,0 +1,10 @@ +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SAMKeychain" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SAMKeychain/SAMKeychain.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "SAMKeychain" -framework "Security" +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 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram.modulemap b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram.modulemap new file mode 100644 index 0000000..1c79b9b --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram.modulemap @@ -0,0 +1,6 @@ +framework module Pods_fakestagram { + umbrella header "Pods-fakestagram-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram.release.xcconfig b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram.release.xcconfig new file mode 100644 index 0000000..40bcc85 --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagram/Pods-fakestagram.release.xcconfig @@ -0,0 +1,10 @@ +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SAMKeychain" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SAMKeychain/SAMKeychain.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "SAMKeychain" -framework "Security" +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 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-Info.plist b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-acknowledgements.markdown b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-acknowledgements.markdown new file mode 100644 index 0000000..bc283b5 --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-acknowledgements.markdown @@ -0,0 +1,27 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## DVR + +Copyright (c) 2015 Venmo + +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. + +Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-acknowledgements.plist b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-acknowledgements.plist new file mode 100644 index 0000000..69b32d2 --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-acknowledgements.plist @@ -0,0 +1,59 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2015 Venmo + +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. + + License + MIT + Title + DVR + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-dummy.m b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-dummy.m new file mode 100644 index 0000000..3113f34 --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_fakestagramTests : NSObject +@end +@implementation PodsDummy_Pods_fakestagramTests +@end diff --git a/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-frameworks-Debug-input-files.xcfilelist b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-frameworks-Debug-input-files.xcfilelist new file mode 100644 index 0000000..65ff78c --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-frameworks-Debug-input-files.xcfilelist @@ -0,0 +1,2 @@ +${PODS_ROOT}/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-frameworks.sh +${BUILT_PRODUCTS_DIR}/DVR/DVR.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-frameworks-Debug-output-files.xcfilelist b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-frameworks-Debug-output-files.xcfilelist new file mode 100644 index 0000000..31b1df9 --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-frameworks-Debug-output-files.xcfilelist @@ -0,0 +1 @@ +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DVR.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-frameworks-Release-input-files.xcfilelist b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-frameworks-Release-input-files.xcfilelist new file mode 100644 index 0000000..65ff78c --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-frameworks-Release-input-files.xcfilelist @@ -0,0 +1,2 @@ +${PODS_ROOT}/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-frameworks.sh +${BUILT_PRODUCTS_DIR}/DVR/DVR.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-frameworks-Release-output-files.xcfilelist b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-frameworks-Release-output-files.xcfilelist new file mode 100644 index 0000000..31b1df9 --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-frameworks-Release-output-files.xcfilelist @@ -0,0 +1 @@ +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DVR.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-frameworks.sh b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-frameworks.sh new file mode 100755 index 0000000..4c461ee --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-frameworks.sh @@ -0,0 +1,171 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +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 + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # 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")" + binary="${destination}/${basename}.framework/${basename}" + + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + 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 +} + +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" +} + +# 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 + # Use the current code_sign_identity + 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'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # 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 $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi + STRIP_BINARY_RETVAL=1 +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/DVR/DVR.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/DVR/DVR.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-umbrella.h b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-umbrella.h new file mode 100644 index 0000000..8ae0937 --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_fakestagramTestsVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_fakestagramTestsVersionString[]; + diff --git a/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests.debug.xcconfig b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests.debug.xcconfig new file mode 100644 index 0000000..fec5fc6 --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests.debug.xcconfig @@ -0,0 +1,12 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DVR" "${PODS_CONFIGURATION_BUILD_DIR}/SAMKeychain" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DVR/DVR.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SAMKeychain/SAMKeychain.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "DVR" -framework "Foundation" -framework "SAMKeychain" -framework "Security" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +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 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests.modulemap b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests.modulemap new file mode 100644 index 0000000..5c513c9 --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests.modulemap @@ -0,0 +1,6 @@ +framework module Pods_fakestagramTests { + umbrella header "Pods-fakestagramTests-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests.release.xcconfig b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests.release.xcconfig new file mode 100644 index 0000000..fec5fc6 --- /dev/null +++ b/Pods/Target Support Files/Pods-fakestagramTests/Pods-fakestagramTests.release.xcconfig @@ -0,0 +1,12 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DVR" "${PODS_CONFIGURATION_BUILD_DIR}/SAMKeychain" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DVR/DVR.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SAMKeychain/SAMKeychain.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "DVR" -framework "Foundation" -framework "SAMKeychain" -framework "Security" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +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 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/SAMKeychain/SAMKeychain-Info.plist b/Pods/Target Support Files/SAMKeychain/SAMKeychain-Info.plist new file mode 100644 index 0000000..d24e508 --- /dev/null +++ b/Pods/Target Support Files/SAMKeychain/SAMKeychain-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.5.3 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/SAMKeychain/SAMKeychain-dummy.m b/Pods/Target Support Files/SAMKeychain/SAMKeychain-dummy.m new file mode 100644 index 0000000..7bb8fc3 --- /dev/null +++ b/Pods/Target Support Files/SAMKeychain/SAMKeychain-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_SAMKeychain : NSObject +@end +@implementation PodsDummy_SAMKeychain +@end diff --git a/Pods/Target Support Files/SAMKeychain/SAMKeychain-prefix.pch b/Pods/Target Support Files/SAMKeychain/SAMKeychain-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/SAMKeychain/SAMKeychain-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/SAMKeychain/SAMKeychain-umbrella.h b/Pods/Target Support Files/SAMKeychain/SAMKeychain-umbrella.h new file mode 100644 index 0000000..6577879 --- /dev/null +++ b/Pods/Target Support Files/SAMKeychain/SAMKeychain-umbrella.h @@ -0,0 +1,18 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "SAMKeychain.h" +#import "SAMKeychainQuery.h" + +FOUNDATION_EXPORT double SAMKeychainVersionNumber; +FOUNDATION_EXPORT const unsigned char SAMKeychainVersionString[]; + diff --git a/Pods/Target Support Files/SAMKeychain/SAMKeychain.modulemap b/Pods/Target Support Files/SAMKeychain/SAMKeychain.modulemap new file mode 100644 index 0000000..47b7948 --- /dev/null +++ b/Pods/Target Support Files/SAMKeychain/SAMKeychain.modulemap @@ -0,0 +1,6 @@ +framework module SAMKeychain { + umbrella header "SAMKeychain-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/SAMKeychain/SAMKeychain.xcconfig b/Pods/Target Support Files/SAMKeychain/SAMKeychain.xcconfig new file mode 100644 index 0000000..a72668c --- /dev/null +++ b/Pods/Target Support Files/SAMKeychain/SAMKeychain.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SAMKeychain +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "Security" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SAMKeychain +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/fakestagram.xcodeproj/xcuserdata/carloscarventevelasco.xcuserdatad/xcschemes/xcschememanagement.plist b/fakestagram.xcodeproj/xcuserdata/carloscarventevelasco.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..5378346 --- /dev/null +++ b/fakestagram.xcodeproj/xcuserdata/carloscarventevelasco.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + fakestagram.xcscheme_^#shared#^_ + + orderHint + 4 + + + + diff --git a/fakestagram.xcworkspace/xcuserdata/carloscarventevelasco.xcuserdatad/UserInterfaceState.xcuserstate b/fakestagram.xcworkspace/xcuserdata/carloscarventevelasco.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..cc9fdb9 Binary files /dev/null and b/fakestagram.xcworkspace/xcuserdata/carloscarventevelasco.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/fakestagram/ViewControllers/CameraViewController.swift b/fakestagram/ViewControllers/CameraViewController.swift index a7996c7..8ecb278 100644 --- a/fakestagram/ViewControllers/CameraViewController.swift +++ b/fakestagram/ViewControllers/CameraViewController.swift @@ -99,7 +99,7 @@ class CameraViewController: UIViewController { func setupCaptureSession() { session.beginConfiguration() - let device = AVCaptureDevice.default(.builtInDualCamera, + let device = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back)! guard let videoDeviceInput = try? AVCaptureDeviceInput(device: device), session.canAddInput(videoDeviceInput) else { return }