From b8122fab8dcfb70dace0d8fbba06cc124042b6a3 Mon Sep 17 00:00:00 2001 From: Gorjan Shukov Date: Sat, 1 Aug 2026 17:54:37 +0200 Subject: [PATCH 01/13] Fix URLSession race causing crash on invalidated session --- Source/PendingRequest.swift | 2 +- Source/ResourceLoaderDelegate.swift | 114 ++++++++++++++++++++++------ 2 files changed, 90 insertions(+), 26 deletions(-) diff --git a/Source/PendingRequest.swift b/Source/PendingRequest.swift index d74429d..c9a70e8 100644 --- a/Source/PendingRequest.swift +++ b/Source/PendingRequest.swift @@ -16,7 +16,7 @@ class PendingRequest { private let customHeaders: [String: String]? private var task: URLSessionTask? private var didCancelTask = false - fileprivate unowned var session: URLSession + fileprivate let session: URLSession let loadingRequest: AVAssetResourceLoadingRequest var isCancelled: Bool { loadingRequest.isCancelled || didCancelTask } diff --git a/Source/ResourceLoaderDelegate.swift b/Source/ResourceLoaderDelegate.swift index fb08f62..e795be7 100644 --- a/Source/ResourceLoaderDelegate.swift +++ b/Source/ResourceLoaderDelegate.swift @@ -13,14 +13,22 @@ import UIKit final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URLSessionDelegate, URLSessionDataDelegate, URLSessionTaskDelegate { typealias PendingRequestId = Int - private let lock = NSLock() + private let bufferLock = NSLock() + private let sessionLock = NSLock() private var bufferData = Data() + private var bufferedByteCount: Int { + bufferLock.lock() + defer { bufferLock.unlock() } + + return bufferData.count + } private var configuration: CachingPlayerItemConfiguration { owner?.configuration ?? .default } private lazy var fileHandle = MediaFileHandle(filePath: saveFilePath) private var session: URLSession? + private var isSessionInvalidated = false private let operationQueue = { let queue = OperationQueue() queue.name = "CachingPlayerItemOperationQueue" @@ -30,10 +38,37 @@ final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URL private var pendingContentInfoRequest: PendingContentInfoRequest? { didSet { oldValue?.cancelTask() } } - private var contentInfoResponse: URLResponse? + private var contentInfoResponseValue: URLResponse? + private var contentInfoResponse: URLResponse? { + get { + sessionLock.lock() + defer { sessionLock.unlock() } + + return contentInfoResponseValue + } + + set { + sessionLock.lock() + defer { sessionLock.unlock() } + + contentInfoResponseValue = newValue + } + } private var pendingDataRequests: [PendingRequestId: PendingDataRequest] = [:] private var fullMediaFileDownloadTask: URLSessionDataTask? - private(set) var isDownloadComplete = false + private var fullMediaFileDownloadTaskId: Int? { + sessionLock.lock() + defer { sessionLock.unlock() } + + return fullMediaFileDownloadTask?.taskIdentifier + } + private var isDownloadCompleteValue = false + var isDownloadComplete: Bool { + sessionLock.lock() + defer { sessionLock.unlock() } + + return isDownloadCompleteValue + } private let url: URL private let saveFilePath: String @@ -53,16 +88,20 @@ final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URL // MARK: AVAssetResourceLoaderDelegate func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool { - if session == nil { - startFileDownload(with: url) - } + // Strong reference kept, owner's deinit re-locks (deadlocks) sessionLock on this thread. + let owner = self.owner + + startFileDownload(with: url) + + sessionLock.lock() + defer { sessionLock.unlock() } - assert(session != nil, "Session must be set before proceeding.") guard let session else { return false } if let _ = loadingRequest.contentInformationRequest { - pendingContentInfoRequest = PendingContentInfoRequest(url: url, session: session, loadingRequest: loadingRequest, customHeaders: owner?.urlRequestHeaders) - pendingContentInfoRequest?.startTask() + let request = PendingContentInfoRequest(url: url, session: session, loadingRequest: loadingRequest, customHeaders: owner?.urlRequestHeaders) + addOperationOnQueue { [weak self] in self?.pendingContentInfoRequest = request } + request.startTask() return true } else if let _ = loadingRequest.dataRequest { let request = PendingDataRequest(url: url, session: session, loadingRequest: loadingRequest, customHeaders: owner?.urlRequestHeaders) @@ -94,17 +133,19 @@ final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URL pendingDataRequests[dataTask.taskIdentifier]?.respond(withRemoteData: data) } - if fullMediaFileDownloadTask?.taskIdentifier == dataTask.taskIdentifier { - bufferData.append(data) - writeBufferDataToFileIfNeeded() + guard fullMediaFileDownloadTaskId == dataTask.taskIdentifier else { return } - guard let response = contentInfoResponse ?? dataTask.response else { return } + appendDataToBuffer(data) + writeBufferDataToFileIfNeeded() - DispatchQueue.main.async { - self.owner?.delegate?.playerItem?(self.owner!, - didDownloadBytesSoFar: self.fileHandle.fileSize + self.bufferData.count, - outOf: Int(response.processedInfoData.expectedContentLength)) - } + guard let response = contentInfoResponse ?? dataTask.response else { return } + + DispatchQueue.main.async { [weak self] in + guard let self, let owner = self.owner else { return } + + owner.delegate?.playerItem?(owner, + didDownloadBytesSoFar: self.fileHandle.fileSize + self.bufferedByteCount, + outOf: Int(response.processedInfoData.expectedContentLength)) } } @@ -120,7 +161,7 @@ final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URL if pendingContentInfoRequest?.id == taskId { finishLoadingPendingRequest(withId: taskId, error: error) downloadFailed(with: error) - } else if fullMediaFileDownloadTask?.taskIdentifier == taskId { + } else if fullMediaFileDownloadTaskId == taskId { downloadFailed(with: error) } else { finishLoadingPendingRequest(withId: taskId, error: error) @@ -143,9 +184,9 @@ final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URL finishLoadingPendingRequest(withId: taskId) } - guard fullMediaFileDownloadTask?.taskIdentifier == taskId else { return } + guard fullMediaFileDownloadTaskId == taskId else { return } - if bufferData.count > 0 { + if bufferedByteCount > 0 { writeBufferDataToFileIfNeeded(forced: true) } @@ -163,7 +204,10 @@ final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URL // MARK: Internal methods func startFileDownload(with url: URL) { - guard session == nil else { return } + sessionLock.lock() + defer { sessionLock.unlock() } + + guard session == nil && isSessionInvalidated == false else { return } createURLSession() @@ -175,12 +219,19 @@ final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URL } func invalidateAndCancelSession(shouldResetData: Bool = true) { + sessionLock.lock() session?.invalidateAndCancel() session = nil + isSessionInvalidated = true + sessionLock.unlock() + operationQueue.cancelAllOperations() if shouldResetData { + bufferLock.lock() bufferData = Data() + bufferLock.unlock() + addOperationOnQueue { [weak self] in guard let self else { return } @@ -218,9 +269,16 @@ final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URL } } + private func appendDataToBuffer(_ data: Data) { + bufferLock.lock() + defer { bufferLock.unlock() } + + bufferData.append(data) + } + private func writeBufferDataToFileIfNeeded(forced: Bool = false) { - lock.lock() - defer { lock.unlock() } + bufferLock.lock() + defer { bufferLock.unlock() } guard bufferData.count >= configuration.downloadBufferLimit || forced else { return } @@ -229,7 +287,9 @@ final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URL } private func downloadComplete() { - isDownloadComplete = true + sessionLock.lock() + isDownloadCompleteValue = true + sessionLock.unlock() DispatchQueue.main.async { self.owner?.delegate?.playerItem?(self.owner!, didFinishDownloadingFileAt: self.saveFilePath) @@ -269,6 +329,10 @@ final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URL } private func downloadFailed(with error: Error) { + sessionLock.lock() + isSessionInvalidated = true + sessionLock.unlock() + invalidateAndCancelSession() DispatchQueue.main.async { From 1b510ec6d9e1efcdbe1500f30d6a2175b3f81435 Mon Sep 17 00:00:00 2001 From: Gorjan Shukov Date: Sat, 1 Aug 2026 18:20:33 +0200 Subject: [PATCH 02/13] Fix ResourceLoaderDelegate fileHandle not reset on cancelDownload --- Source/MediaFileHandle.swift | 16 ++++++++++++++++ Source/ResourceLoaderDelegate.swift | 7 +++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/Source/MediaFileHandle.swift b/Source/MediaFileHandle.swift index e568481..ff58ef6 100644 --- a/Source/MediaFileHandle.swift +++ b/Source/MediaFileHandle.swift @@ -88,6 +88,22 @@ extension MediaFileHandle { writeHandle?.closeFile() } + func reset() { + lock.lock() + defer { lock.unlock() } + + close() + + if FileManager.default.fileExists(atPath: filePath) { + deleteFile() + } + + FileManager.default.createFile(atPath: filePath, contents: nil, attributes: nil) + + readHandle = FileHandle(forReadingAtPath: filePath) + writeHandle = FileHandle(forWritingAtPath: filePath) + } + func deleteFile() { do { try FileManager.default.removeItem(atPath: filePath) diff --git a/Source/ResourceLoaderDelegate.swift b/Source/ResourceLoaderDelegate.swift index e795be7..3b84aab 100644 --- a/Source/ResourceLoaderDelegate.swift +++ b/Source/ResourceLoaderDelegate.swift @@ -222,7 +222,6 @@ final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URL sessionLock.lock() session?.invalidateAndCancel() session = nil - isSessionInvalidated = true sessionLock.unlock() operationQueue.cancelAllOperations() @@ -243,7 +242,11 @@ final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URL // We need to only remove the file if it hasn't been fully downloaded guard isDownloadComplete == false else { return } - fileHandle.deleteFile() + if shouldResetData { + fileHandle.reset() + } else { + fileHandle.deleteFile() + } } // MARK: Private methods From 8ef4a23e66dc71a3f90019bd61c0d651523c7a78 Mon Sep 17 00:00:00 2001 From: Gorjan Shukov Date: Sat, 1 Aug 2026 18:54:12 +0200 Subject: [PATCH 03/13] Bump deployment target to iOS 13.4 --- CachingPlayerItem.podspec | 2 +- Example/Pods/Local Podspecs/CachingPlayerItem.podspec.json | 2 +- Package.swift | 2 +- README.md | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CachingPlayerItem.podspec b/CachingPlayerItem.podspec index 3b569e1..51baf98 100644 --- a/CachingPlayerItem.podspec +++ b/CachingPlayerItem.podspec @@ -10,7 +10,7 @@ Pod::Spec.new do |s| s.documentation_url = 'https://sukov.github.io/CachingPlayerItem/' s.swift_version = '5.0' - s.ios.deployment_target = '10.0' + s.ios.deployment_target = '13.4' s.source_files = 'Source/*.swift' diff --git a/Example/Pods/Local Podspecs/CachingPlayerItem.podspec.json b/Example/Pods/Local Podspecs/CachingPlayerItem.podspec.json index f08a111..f666ec0 100644 --- a/Example/Pods/Local Podspecs/CachingPlayerItem.podspec.json +++ b/Example/Pods/Local Podspecs/CachingPlayerItem.podspec.json @@ -17,7 +17,7 @@ "documentation_url": "https://sukov.github.io/CachingPlayerItem/", "swift_versions": "5.0", "platforms": { - "ios": "10.0" + "ios": "13.4" }, "source_files": "Source/*.swift", "frameworks": [ diff --git a/Package.swift b/Package.swift index 71e3fd7..7220f13 100644 --- a/Package.swift +++ b/Package.swift @@ -6,7 +6,7 @@ let package = Package( name: "CachingPlayerItem", defaultLocalization: "en", platforms: [ - .iOS(.v10), + .iOS("13.4"), ], products: [ .library(name: "CachingPlayerItem", targets: ["CachingPlayerItem"]), diff --git a/README.md b/README.md index 0843005..c86a641 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ CachingPlayerItem is a subclass of AVPlayerItem that lets you stream and cache m ## Requirements -- iOS 10.0+ +- iOS 13.4+ - Xcode 12.0+ - Swift 5.0+ @@ -40,7 +40,7 @@ To integrate CachingPlayerItem into your Xcode project using CocoaPods, specify ```ruby source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '10.0' +platform :ios, '13.4' use_frameworks! target '' do From 5f9f408b56e4c2acd0481b9f237cafcb2b52e6ea Mon Sep 17 00:00:00 2001 From: Gorjan Shukov Date: Sat, 1 Aug 2026 19:04:31 +0200 Subject: [PATCH 04/13] Handle file write failures instead of crashing - Switch MediaFileHandle to the throwing FileHandle API - Route write failures through downloadFailed --- Source/MediaFileHandle.swift | 27 ++++++++++++++++----------- Source/ResourceLoaderDelegate.swift | 25 +++++++++++++++++++++---- 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/Source/MediaFileHandle.swift b/Source/MediaFileHandle.swift index ff58ef6..d1f43c3 100644 --- a/Source/MediaFileHandle.swift +++ b/Source/MediaFileHandle.swift @@ -60,32 +60,37 @@ extension MediaFileHandle { lock.lock() defer { lock.unlock() } - readHandle?.seek(toFileOffset: UInt64(offset)) - return readHandle?.readData(ofLength: length) + guard let readHandle else { return nil } + + do { + try readHandle.seek(toOffset: UInt64(offset)) + return try readHandle.read(upToCount: length) + } catch { + AppLogger.error("Failed reading \(length) bytes at offset \(offset) from \(filePath) with error: \(error)") + return nil + } } - func append(data: Data) { + func append(data: Data) throws { lock.lock() defer { lock.unlock() } - guard let writeHandle = writeHandle else { return } + guard let writeHandle else { return } - writeHandle.seekToEndOfFile() - writeHandle.write(data) + try writeHandle.seekToEnd() + try writeHandle.write(contentsOf: data) } func synchronize() { lock.lock() defer { lock.unlock() } - guard let writeHandle = writeHandle else { return } - - writeHandle.synchronizeFile() + try? writeHandle?.synchronize() } func close() { - readHandle?.closeFile() - writeHandle?.closeFile() + try? readHandle?.close() + try? writeHandle?.close() } func reset() { diff --git a/Source/ResourceLoaderDelegate.swift b/Source/ResourceLoaderDelegate.swift index 3b84aab..e502701 100644 --- a/Source/ResourceLoaderDelegate.swift +++ b/Source/ResourceLoaderDelegate.swift @@ -280,13 +280,30 @@ final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URL } private func writeBufferDataToFileIfNeeded(forced: Bool = false) { + let downloadBufferLimit = configuration.downloadBufferLimit + bufferLock.lock() - defer { bufferLock.unlock() } - guard bufferData.count >= configuration.downloadBufferLimit || forced else { return } + guard bufferData.count >= downloadBufferLimit || forced else { + bufferLock.unlock() + return + } + + var error: Error? - fileHandle.append(data: bufferData) - bufferData = Data() + do { + try fileHandle.append(data: bufferData) + bufferData = Data() + } catch let appendError { + error = appendError + } + + bufferLock.unlock() + + if let error { + AppLogger.error("Failed writing buffered data to \(saveFilePath) with error: \(error)") + downloadFailed(with: error) + } } private func downloadComplete() { From 3ec44b49771aa45ad2c49283440eeb998f111f28 Mon Sep 17 00:00:00 2001 From: Gorjan Shukov Date: Sat, 1 Aug 2026 19:16:52 +0200 Subject: [PATCH 05/13] Add concurrency and playback stress tests - MediaFileHandle: reset, closed handle, concurrent appends - ResourceLoaderDelegate: interleaved cancel, restart and received data - Playback: cancelDownload racing seeks, item released mid-loading - Fixtures: generated mp4 and loopback HTTP server with Range support --- Example/Tests/Tests.swift | 567 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 567 insertions(+) diff --git a/Example/Tests/Tests.swift b/Example/Tests/Tests.swift index c11369f..4f279c8 100644 --- a/Example/Tests/Tests.swift +++ b/Example/Tests/Tests.swift @@ -1,6 +1,7 @@ import Quick import Nimble import AVFoundation +import Network @testable import CachingPlayerItem class CachingPlayerItemSpec: QuickSpec { @@ -703,6 +704,90 @@ class CachingPlayerItemSpec: QuickSpec { } } + // MARK: - MediaFileHandle Tests + + describe("MediaFileHandle") { + var tempDirectory: URL! + var filePath: String! + + beforeEach { + tempDirectory = FileManager.default.temporaryDirectory + .appendingPathComponent(UUID().uuidString, isDirectory: true) + try? FileManager.default.createDirectory(at: tempDirectory, withIntermediateDirectories: true) + filePath = tempDirectory.appendingPathComponent("media.mp4").path + } + + afterEach { + try? FileManager.default.removeItem(at: tempDirectory) + } + + // Issue #38: these used to raise NSFileHandleOperationException, uncatchable from Swift. + context("when the handle is closed") { + it("throws from append instead of raising") { + let sut = MediaFileHandle(filePath: filePath) + try? sut.append(data: Data([0x01, 0x02, 0x03])) + sut.close() + + expect { try sut.append(data: Data([0x04, 0x05, 0x06])) }.to(throwError()) + } + + it("returns nil from read instead of raising") { + let sut = MediaFileHandle(filePath: filePath) + try? sut.append(data: Data([0x01, 0x02, 0x03])) + sut.close() + + expect(sut.readData(withOffset: 0, forLength: 3)).to(beNil()) + } + + it("does not raise from synchronize or a second close") { + let sut = MediaFileHandle(filePath: filePath) + try? sut.append(data: Data([0x01])) + sut.close() + + expect { sut.synchronize() }.toNot(raiseException()) + expect { sut.close() }.toNot(raiseException()) + } + } + + context("when reset") { + it("empties the file") { + let sut = MediaFileHandle(filePath: filePath) + try? sut.append(data: Data(repeating: 0xAB, count: 128)) + expect(sut.fileSize).to(equal(128)) + + sut.reset() + + expect(sut.fileSize).to(equal(0)) + expect(FileManager.default.fileExists(atPath: filePath)).to(beTrue()) + } + + it("appends to the new file after the old one was deleted") { + let sut = MediaFileHandle(filePath: filePath) + try? sut.append(data: Data(repeating: 0xAB, count: 128)) + + // A handle left open on the unlinked file would keep writing nowhere. + sut.deleteFile() + sut.reset() + try? sut.append(data: Data(repeating: 0xCD, count: 64)) + + expect(sut.fileSize).to(equal(64)) + expect(try? Data(contentsOf: URL(fileURLWithPath: filePath))) + .to(equal(Data(repeating: 0xCD, count: 64))) + } + + it("reads back data written after the reset") { + let sut = MediaFileHandle(filePath: filePath) + try? sut.append(data: Data(repeating: 0xAB, count: 32)) + _ = sut.readData(withOffset: 0, forLength: 32) + + sut.reset() + try? sut.append(data: Data([0x01, 0x02, 0x03, 0x04])) + + expect(sut.readData(withOffset: 0, forLength: 4)).to(equal(Data([0x01, 0x02, 0x03, 0x04]))) + } + } + } + // MARK: - Resource Loader Integration Tests describe("Resource Loader Integration") { @@ -876,3 +961,485 @@ class MockCachingPlayerItemDelegate: NSObject, CachingPlayerItemDelegate { lastPlayError = nil } } + +// MARK: - Concurrency Tests + +/// Connection is refused immediately, so tasks resolve without leaving the device. +private let unreachableURL = URL(string: "http://127.0.0.1:1/test-video.mp4")! + +class CachingPlayerItemConcurrencySpec: QuickSpec { + override class func spec() { + var tempDirectory: URL! + + func makeFilePath() -> String { + tempDirectory.appendingPathComponent("\(UUID().uuidString).mp4").path + } + + beforeEach { + tempDirectory = FileManager.default.temporaryDirectory + .appendingPathComponent(UUID().uuidString, isDirectory: true) + try? FileManager.default.createDirectory(at: tempDirectory, withIntermediateDirectories: true) + } + + afterEach { + try? FileManager.default.removeItem(at: tempDirectory) + } + + describe("MediaFileHandle under contention") { + it("serializes concurrent appends without losing bytes") { + let sut = MediaFileHandle(filePath: makeFilePath()) + let chunk = Data(repeating: 0xEE, count: 512) + let writers = 8 + let appendsPerWriter = 50 + let group = DispatchGroup() + + for _ in 0.. Data? { + try? FileManager.default.removeItem(at: url) + + guard let writer = try? AVAssetWriter(outputURL: url, fileType: .mp4) else { return nil } + + let width = 320 + let height = 240 + let input = AVAssetWriterInput(mediaType: .video, outputSettings: [ + AVVideoCodecKey: AVVideoCodecType.h264, + AVVideoWidthKey: width, + AVVideoHeightKey: height, + ]) + input.expectsMediaDataInRealTime = false + + let adaptor = AVAssetWriterInputPixelBufferAdaptor(assetWriterInput: input, sourcePixelBufferAttributes: [ + kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_32BGRA, + kCVPixelBufferWidthKey as String: width, + kCVPixelBufferHeightKey as String: height, + ]) + + guard writer.canAdd(input) else { return nil } + writer.add(input) + guard writer.startWriting() else { return nil } + writer.startSession(atSourceTime: .zero) + + for frame in 0..<(Int(fps) * durationSeconds) { + while input.isReadyForMoreMediaData == false { usleep(2_000) } + + guard let buffer = makePixelBuffer(width: width, height: height, seed: frame) else { continue } + adaptor.append(buffer, withPresentationTime: CMTime(value: Int64(frame), timescale: fps)) + } + input.markAsFinished() + + let finished = DispatchSemaphore(value: 0) + writer.finishWriting { finished.signal() } + guard finished.wait(timeout: .now() + 30) == .success, writer.status == .completed else { return nil } + + return try? Data(contentsOf: url) + } + + private static func makePixelBuffer(width: Int, height: Int, seed: Int) -> CVPixelBuffer? { + var pixelBuffer: CVPixelBuffer? + guard CVPixelBufferCreate(kCFAllocatorDefault, width, height, + kCVPixelFormatType_32BGRA, nil, &pixelBuffer) == kCVReturnSuccess, + let buffer = pixelBuffer + else { return nil } + + CVPixelBufferLockBaseAddress(buffer, []) + if let base = CVPixelBufferGetBaseAddress(buffer) { + memset(base, Int32(32 + (seed * 9) % 200), CVPixelBufferGetBytesPerRow(buffer) * height) + } + CVPixelBufferUnlockBaseAddress(buffer, []) + + return buffer + } +} + +/// Loopback HTTP server with the `Range` support the library needs for byte-range access. +final class LocalMediaServer { + private let media: Data + private let listener: NWListener + private let queue = DispatchQueue(label: "LocalMediaServer", attributes: .concurrent) + + var port: UInt16 { listener.port?.rawValue ?? 0 } + + init(media: Data) throws { + self.media = media + + let parameters = NWParameters.tcp + parameters.allowLocalEndpointReuse = true + listener = try NWListener(using: parameters) + } + + func start() -> Bool { + let ready = DispatchSemaphore(value: 0) + + listener.stateUpdateHandler = { state in + switch state { + case .ready, .failed, .cancelled: ready.signal() + default: break + } + } + listener.newConnectionHandler = { [weak self] connection in + guard let self else { return connection.cancel() } + + connection.start(queue: queue) + receive(on: connection, buffer: Data()) + } + listener.start(queue: queue) + + return ready.wait(timeout: .now() + 10) == .success && port > 0 + } + + func stop() { + listener.stateUpdateHandler = nil + listener.newConnectionHandler = nil + listener.cancel() + } + + private func receive(on connection: NWConnection, buffer: Data) { + connection.receive(minimumIncompleteLength: 1, maximumLength: 16_384) { [weak self] data, _, isComplete, error in + guard let self else { return connection.cancel() } + + var buffer = buffer + if let data { buffer.append(data) } + + guard let headerEnd = buffer.range(of: Data("\r\n\r\n".utf8)) else { + guard error == nil, isComplete == false else { return connection.cancel() } + + receive(on: connection, buffer: buffer) + return + } + + respond(to: String(decoding: buffer[.. 1, let end = Int(bounds[1]) { upper = min(end, total - 1) } + } + } + + var response: Data + + if lower > upper || lower >= total { + response = Data("HTTP/1.1 416 Requested Range Not Satisfiable\r\nContent-Length: 0\r\nConnection: close\r\n\r\n".utf8) + } else { + let body = media.subdata(in: lower..<(upper + 1)) + var head = isPartial ? "HTTP/1.1 206 Partial Content\r\n" : "HTTP/1.1 200 OK\r\n" + head += "Content-Type: video/mp4\r\n" + head += "Accept-Ranges: bytes\r\n" + head += "Content-Length: \(body.count)\r\n" + if isPartial { head += "Content-Range: bytes \(lower)-\(upper)/\(total)\r\n" } + head += "Connection: close\r\n\r\n" + + response = Data(head.utf8) + response.append(body) + } + + connection.send(content: response, completion: .contentProcessed { _ in connection.cancel() }) + } +} + +// MARK: - Playback Stress Tests + +class CachingPlayerItemPlaybackStressSpec: QuickSpec { + override class func spec() { + describe("resource loader during playback") { + var tempDirectory: URL! + var server: LocalMediaServer! + var mediaData: Data! + var mediaURL: URL! + + beforeEach { + tempDirectory = FileManager.default.temporaryDirectory + .appendingPathComponent(UUID().uuidString, isDirectory: true) + try? FileManager.default.createDirectory(at: tempDirectory, withIntermediateDirectories: true) + + mediaData = TestMedia.makeMP4(at: tempDirectory.appendingPathComponent("source.mp4")) + server = try? LocalMediaServer(media: mediaData ?? Data()) + _ = server?.start() + mediaURL = URL(string: "http://127.0.0.1:\(server?.port ?? 0)/video.mp4") + } + + afterEach { + server?.stop() + server = nil + try? FileManager.default.removeItem(at: tempDirectory) + } + + // Guards the suite below: if the fixture breaks, the stress tests would pass vacuously. + it("serves real seekable media over loopback") { + expect(mediaData?.count ?? 0).to(beGreaterThan(2_000)) + expect(server.port).to(beGreaterThan(0)) + + let delegate = MockCachingPlayerItemDelegate() + let item = CachingPlayerItem(url: mediaURL) + item.delegate = delegate + let player = AVPlayer(playerItem: item) + player.play() + + // The resource loader is called on the main queue, so the run loop has to be pumped. + let deadline = Date().addingTimeInterval(6) + while Date() < deadline && delegate.didDownloadBytesCalled == false { + RunLoop.current.run(mode: .default, before: Date().addingTimeInterval(0.05)) + } + + player.pause() + player.replaceCurrentItem(with: nil) + + expect(delegate.didDownloadBytesCalled).to(beTrue()) + expect(delegate.lastBytesExpected).to(equal(mediaData.count)) + } + + // The frame that crashed in issue #31, driven through a real player. + it("survives cancelDownload and download racing seeks during playback") { + let rounds = 5 + var completedRounds = 0 + var sawLoaderActivity = false + + for round in 0..= nextSeek { + player.seek(to: CMTime(seconds: Double.random(in: 0...3), preferredTimescale: 600)) + nextSeek = Date().addingTimeInterval(0.05) + } + } + if churn.wait(timeout: .now() + 30) == .timedOut { + fail("round \(round) churn did not finish in 30s - probable deadlock") + break + } + + player.pause() + player.replaceCurrentItem(with: nil) + + if delegate.didDownloadBytesCalled || delegate.downloadingFailedCalled + || delegate.didFailToPlayCalled || delegate.readyToPlayCalled { + sawLoaderActivity = true + } + completedRounds += 1 + } + + expect(completedRounds).to(equal(rounds)) + // Proves the resource loader path actually ran rather than the test passing vacuously. + expect(sawLoaderActivity).to(beTrue()) + } + + // Drops the item's last reference off-thread, so `deinit` can re-enter the delegate. + it("does not deadlock when the item is released during active loading") { + final class Holder { + var item: CachingPlayerItem? + var player: AVPlayer? + } + + let rounds = 10 + var completedRounds = 0 + + for round in 0.. deadline { + timedOut = true + break + } + RunLoop.current.run(mode: .default, before: Date().addingTimeInterval(0.02)) + } + + if timedOut { + fail("round \(round) release did not complete in 20s - probable deadlock") + break + } + + completedRounds += 1 + } + + expect(completedRounds).to(equal(rounds)) + } + } + } +} From 872b8fef6c3419074208bbdd45ee4d7d4903a24b Mon Sep 17 00:00:00 2001 From: Gorjan Shukov Date: Sat, 1 Aug 2026 19:34:03 +0200 Subject: [PATCH 06/13] Add support for macOS, tvOS and visionOS --- CachingPlayerItem.podspec | 3 +++ Package.swift | 2 ++ README.md | 6 +++--- Source/ResourceLoaderDelegate.swift | 12 +++++++++++- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/CachingPlayerItem.podspec b/CachingPlayerItem.podspec index 51baf98..ed7b00a 100644 --- a/CachingPlayerItem.podspec +++ b/CachingPlayerItem.podspec @@ -11,6 +11,9 @@ Pod::Spec.new do |s| s.swift_version = '5.0' s.ios.deployment_target = '13.4' + s.osx.deployment_target = '10.15.4' + s.tvos.deployment_target = '13.4' + s.visionos.deployment_target = '1.0' s.source_files = 'Source/*.swift' diff --git a/Package.swift b/Package.swift index 7220f13..e34742e 100644 --- a/Package.swift +++ b/Package.swift @@ -7,6 +7,8 @@ let package = Package( defaultLocalization: "en", platforms: [ .iOS("13.4"), + .macOS("10.15.4"), + .tvOS("13.4"), ], products: [ .library(name: "CachingPlayerItem", targets: ["CachingPlayerItem"]), diff --git a/README.md b/README.md index c86a641..f884cdb 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # CachingPlayerItem -CachingPlayerItem is a subclass of AVPlayerItem that lets you stream and cache media content on iOS. Initial idea for this library was found [here](https://github.com/neekeetab/CachingPlayerItem). +CachingPlayerItem is a subclass of AVPlayerItem that lets you stream and cache media content on iOS, macOS, tvOS and visionOS. Initial idea for this library was found [here](https://github.com/neekeetab/CachingPlayerItem). [![Version](https://img.shields.io/cocoapods/v/CachingPlayerItem.svg?style=flat)](https://cocoapods.org/pods/CachingPlayerItem) [![License](https://img.shields.io/cocoapods/l/CachingPlayerItem.svg?style=flat)](https://cocoapods.org/pods/CachingPlayerItem) [![Language Swift](https://img.shields.io/badge/Language-Swift%205.0-orange.svg?style=flat)](https://swift.org) -[![Platform](https://img.shields.io/cocoapods/p/CachingPlayerItem.svg?style=flat)](https://cocoapods.org/pods/CachingPlayerItem) +[![Platform](https://img.shields.io/badge/Platforms-iOS%20%7C%20macOS%20%7C%20tvOS%20%7C%20visionOS-blue?style=flat)](https://cocoapods.org/pods/CachingPlayerItem) [![Swift Package Manager](https://img.shields.io/badge/Swift_Package_Manager-compatible-orange?style=flat)](https://www.swift.org/package-manager) ## Features @@ -22,7 +22,7 @@ CachingPlayerItem is a subclass of AVPlayerItem that lets you stream and cache m ## Requirements -- iOS 13.4+ +- iOS 13.4+ / macOS 10.15.4+ / tvOS 13.4+ / visionOS 1.0+ - Xcode 12.0+ - Swift 5.0+ diff --git a/Source/ResourceLoaderDelegate.swift b/Source/ResourceLoaderDelegate.swift index e502701..906b7e2 100644 --- a/Source/ResourceLoaderDelegate.swift +++ b/Source/ResourceLoaderDelegate.swift @@ -7,7 +7,11 @@ import Foundation import AVFoundation +#if canImport(UIKit) import UIKit +#elseif canImport(AppKit) +import AppKit +#endif /// Responsible for downloading media data and providing the requested data parts. final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URLSessionDelegate, URLSessionDataDelegate, URLSessionTaskDelegate { @@ -82,7 +86,13 @@ final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URL self.owner = owner super.init() - NotificationCenter.default.addObserver(self, selector: #selector(handleAppWillTerminate), name: UIApplication.willTerminateNotification, object: nil) + #if canImport(UIKit) + let willTerminateNotification = UIApplication.willTerminateNotification + #elseif canImport(AppKit) + let willTerminateNotification = NSApplication.willTerminateNotification + #endif + + NotificationCenter.default.addObserver(self, selector: #selector(handleAppWillTerminate), name: willTerminateNotification, object: nil) } // MARK: AVAssetResourceLoaderDelegate From 1a85d8a5d161ca5362d8e9387ddefadcd774f224 Mon Sep 17 00:00:00 2001 From: Gorjan Shukov Date: Sat, 1 Aug 2026 22:26:28 +0200 Subject: [PATCH 07/13] pod install Example app --- Example/Podfile.lock | 2 +- .../CachingPlayerItem.podspec.json | 5 +- Example/Pods/Manifest.lock | 2 +- Example/Pods/Pods.xcodeproj/project.pbxproj | 828 +++++++++--------- 4 files changed, 424 insertions(+), 413 deletions(-) diff --git a/Example/Podfile.lock b/Example/Podfile.lock index c25c773..f99f768 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -33,7 +33,7 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - CachingPlayerItem: b295ac21229739016125e262f84d9e6caf845cb1 + CachingPlayerItem: 8a941cfd7a9d54654da71890ce17617667699071 CwlCatchException: 7acc161b299a6de7f0a46a6ed741eae2c8b4d75a CwlCatchExceptionSupport: 54ccab8d8c78907b57f99717fb19d4cc3bce02dc CwlMachBadInstructionHandler: dae4fdd124d45c9910ac240287cc7b898f4502a1 diff --git a/Example/Pods/Local Podspecs/CachingPlayerItem.podspec.json b/Example/Pods/Local Podspecs/CachingPlayerItem.podspec.json index f666ec0..313033a 100644 --- a/Example/Pods/Local Podspecs/CachingPlayerItem.podspec.json +++ b/Example/Pods/Local Podspecs/CachingPlayerItem.podspec.json @@ -17,7 +17,10 @@ "documentation_url": "https://sukov.github.io/CachingPlayerItem/", "swift_versions": "5.0", "platforms": { - "ios": "13.4" + "ios": "13.4", + "osx": "10.15.4", + "tvos": "13.4", + "visionos": "1.0" }, "source_files": "Source/*.swift", "frameworks": [ diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index c25c773..f99f768 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -33,7 +33,7 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - CachingPlayerItem: b295ac21229739016125e262f84d9e6caf845cb1 + CachingPlayerItem: 8a941cfd7a9d54654da71890ce17617667699071 CwlCatchException: 7acc161b299a6de7f0a46a6ed741eae2c8b4d75a CwlCatchExceptionSupport: 54ccab8d8c78907b57f99717fb19d4cc3bce02dc CwlMachBadInstructionHandler: dae4fdd124d45c9910ac240287cc7b898f4502a1 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index 0d29f1c..5834564 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -8,14 +8,13 @@ /* Begin PBXBuildFile section */ 049558D26BEC8CA362DBCD7BFB749B91 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 812B7B757261CC91F4D5CEE4CBB365AA /* DSL.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 07EAAE767AC935B7C7FD44E08F555BC3 /* CwlCatchExceptionSupport-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E3175669EC99FC1B2E97FAD01B812A2E /* CwlCatchExceptionSupport-dummy.m */; }; 0D2AD3A610BA8D8700735AA4E2C61CA9 /* BeWithin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B89E6D27304A488340CAB6B99FF973C5 /* BeWithin.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 0DAB30482E44576CBB61F92AF4EDF673 /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37F9E1F40FDF833DDCCD691C88A75B59 /* AssertionDispatcher.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 0FA52D1C96202BDB296281B04124E85D /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F3B85709C50E00EC8B5FEE379C74E45 /* NimbleXCTestHandler.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 0FB32CC37CBAB835F32D5AA671BCEF63 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 934DD6D6B80D8D03313055F4C3440EC6 /* BeNil.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 1098183F5F8FD0DFC48BBE211B488C4B /* QuickSpecBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8358C13AA5F74AE2AAB4A6B8E392E733 /* QuickSpecBase.h */; settings = {ATTRIBUTES = (Project, ); }; }; 10C869ACE40DB1B0075F624D0FE53133 /* AsyncAwait.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A6AA384A36A5BBDC51AAE2DF6477FDC /* AsyncAwait.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 11D7BD01483923F3359592CAEEEE9811 /* PendingRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49FB7F462D76DC21FEB7F970503336D6 /* PendingRequest.swift */; }; + 11D7BD01483923F3359592CAEEEE9811 /* PendingRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76178209E731214FB0D0220976B0189A /* PendingRequest.swift */; }; 1324BE0A90E313923DA04A1F4AF0604C /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = 373C46B37A3358E09C676219E5A987BA /* Match.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 1895EB7508DE35DB9CAC9032FF194535 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24AC7385ABE4A4C005A679A8D985860F /* Errors.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 1A2024BCE25A33C62313B1131A349D55 /* CwlPosixPreconditionTesting-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A7DD7F5A7DB3895B6E8AB64880F4D81 /* CwlPosixPreconditionTesting-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -28,11 +27,13 @@ 20B526554C38AE7A1DABC30E09EA9319 /* QuickConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85C8A1552C33266B7131C800EC5EC353 /* QuickConfiguration.swift */; }; 22AFB695682D75764EAA01895E00ADBE /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75AA6F4596B47B195092556F7622D6D /* BeAKindOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 26E47A2FF0CDA129C1248716C9176507 /* Matcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC399A290E5134E690E256625CEA1A37 /* Matcher.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 27368712E7653701AC2EDA78E05DC2DF /* CwlCatchException.m in Sources */ = {isa = PBXBuildFile; fileRef = 183EB9D99198F3EFDC362CA407F07D5C /* CwlCatchException.m */; }; 2923C22D361FCD02A207937F6D5A89C5 /* String+C99ExtendedIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9946C230568672DD4EBF6A742FE8438F /* String+C99ExtendedIdentifier.swift */; }; 29A454912E6711940DB8D64E4267DCFB /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = F2FF5598DCABA22DC3F4A71165EE9DA9 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; 29EA39ED87CF8C2D472CCD5DEF2ABFED /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE792BC237403FF58FE096CB9E372062 /* Foundation.framework */; }; 2AEFB9861F28A2AB9FBDC97EF8470230 /* Pods-CachingPlayerItem_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DA1CAF837E658527708A866443BF5F75 /* Pods-CachingPlayerItem_Tests-dummy.m */; }; - 2BA99DB739995270888ADB7993EA2D16 /* AppLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 924E607E5EFF40444577E6C36BC4B264 /* AppLogger.swift */; }; + 2BA99DB739995270888ADB7993EA2D16 /* AppLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8ACBE7FCC8D8AF946C34FA3CFB94A854 /* AppLogger.swift */; }; + 2D1413F57590F7E67190BA03B7A2F206 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE792BC237403FF58FE096CB9E372062 /* Foundation.framework */; }; 2F40D27F39EF50A87195CA7AF2B91334 /* CwlMachBadInstructionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B0AA3E2E11FE2F9FBDD833F3B409EC8 /* CwlMachBadInstructionHandler.m */; }; 30939D360BFC744F1811E2A71E5D13BA /* ContainElementSatisfying.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2439DCDC23201F14DB258AD24ED6C8B8 /* ContainElementSatisfying.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 3402AC2C7800D5CF0794BB3B04E07CD0 /* AsyncExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6E6F0423B9285DDAACE1D1F0A0087D3 /* AsyncExample.swift */; }; @@ -41,8 +42,7 @@ 34EFCF9086A4B09AB6FD3A7A8C2504FA /* AsyncTimerSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24CD661DF2F841D7B1D31742AC94743D /* AsyncTimerSequence.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 3531FDB73F085444222F2E2EB3C4D324 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DDAA5311831946542B1933DC03842D7 /* NMBExceptionCapture.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 35F34BC004C024266675006F6744A2DB /* Equal+TupleArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC19BC15471A4A1687E0260089FD55C5 /* Equal+TupleArray.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 367CB319E2BF8870C624CE47328EFB86 /* ResourceLoaderDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22D1F4758F4DDB45283940EDF88978BB /* ResourceLoaderDelegate.swift */; }; - 37B869A0EF06185A29F2ED5B0C9F2F29 /* CwlCatchException.h in Headers */ = {isa = PBXBuildFile; fileRef = E90285FB8827FA97213E64FC0316B0C8 /* CwlCatchException.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 367CB319E2BF8870C624CE47328EFB86 /* ResourceLoaderDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 279DEA457009A8BF5851F9A258196435 /* ResourceLoaderDelegate.swift */; }; 3B9D71C228241D63CED0C6B072E4D97B /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A0F5CF3F8E55B129E5E18B693E6D43C /* NMBExpectation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 3C298F9D9EF861E82A79FDA9ECD161C4 /* mach_excServer.c in Sources */ = {isa = PBXBuildFile; fileRef = 734F553E6A6F6884558693E207B58D78 /* mach_excServer.c */; }; 3DFB290484F525B829DDA10A1CA791FB /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = B0F03CB243E9B0C3B589495F0690D884 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -70,16 +70,16 @@ 561ED22BC886EF8B4AC8B7C2ECCDB73A /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52CCF764D56ECDEE07E6B172E011D18 /* BeAnInstanceOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 581C46341020D188E748438E23134D6F /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A784E569CD2A1B6173E812677AE5BC5 /* PostNotification.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 582C16B6637727B2178256261D5DD00F /* AsyncMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C575CE00D26CDB9C1E9CA22B277C131 /* AsyncMatcher.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 5D724CC7A6A25F924650F0A4DB49F696 /* CachingPlayerItem-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A358B719822650BED204ADCA56DD8375 /* CachingPlayerItem-dummy.m */; }; - 5D7A90A934E00439B3C280D4C8631C85 /* URLResponseExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5F5A7621F82A9BAA4A89D25F88CEE58 /* URLResponseExtension.swift */; }; + 5D724CC7A6A25F924650F0A4DB49F696 /* CachingPlayerItem-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C702230B3A4A3DEEE80B27B9229988C9 /* CachingPlayerItem-dummy.m */; }; + 5D7A90A934E00439B3C280D4C8631C85 /* URLResponseExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F7226D2140D40B94EA8DF10135A30CA /* URLResponseExtension.swift */; }; 60047BD8AF182AD53512CB4F23F741B5 /* CwlCatchException-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FCD9784D0D43C9C85E50913CF97A29D7 /* CwlCatchException-dummy.m */; }; 6488F83FBEC98A88DE9FC9D80DF10888 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 53D4B42FB31ECE931C95CF95CA620696 /* NMBStringify.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 65B1A9CB705BC730A31877A52402C352 /* CwlCatchException.m in Sources */ = {isa = PBXBuildFile; fileRef = 183EB9D99198F3EFDC362CA407F07D5C /* CwlCatchException.m */; }; 68D5333B0D68BDDD85084154B1E03F74 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37BC531CBA1B98AD278C63EDF08975C1 /* Contain.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 6B6663947381FFBBFE357E4134197C10 /* CwlMachBadInstructionHandler-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E518FEC21DAC827E711F2DE1ED4FCBF9 /* CwlMachBadInstructionHandler-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6B7D4F500E4358E7B9DD81D30F39FB73 /* CachingPlayerItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CAF7FE2FF8C859A1915FA22F4310C17 /* CachingPlayerItem.swift */; }; + 6B7D4F500E4358E7B9DD81D30F39FB73 /* CachingPlayerItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CE7A6B4047A80BA69A482386843B164 /* CachingPlayerItem.swift */; }; 6DCBAACCF8CC5006FC73313AB67286F6 /* Polling+AsyncAwait.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F5B1AA5E2EC60C821B877EF727E05D9 /* Polling+AsyncAwait.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 6E2834B7E4B59C0AC4CD61B89BABDB78 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE792BC237403FF58FE096CB9E372062 /* Foundation.framework */; }; + 6EC688643958E29B2BC16F07288CC4B0 /* CwlCatchException.h in Headers */ = {isa = PBXBuildFile; fileRef = E90285FB8827FA97213E64FC0316B0C8 /* CwlCatchException.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6F3765FAE3920A18607D719137972E8E /* CwlCatchException-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AB90CD912B04BA71A6592AF1155499F /* CwlCatchException-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6FE5FECBFEF32554D6FFB94B6628203C /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 154FCAA114CC03C30144EC1D88FC9B42 /* XCTestSuite+QuickTestSuiteBuilder.m */; }; 70AF947B52D9CB1929D8BE04F4446ABE /* QCKConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588A0E154F50CBAE3DE465E7E2B961F8 /* QCKConfiguration.swift */; }; @@ -120,6 +120,7 @@ 9649F45A0451189303B1F4F61C9220BB /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C09930EED0FBD67108C13CC4EF3F7D5 /* BeGreaterThan.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 9BBB90080E21E181578C40CE025128C9 /* Equal+Tuple.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE4F05985E14A4DBA9319F7451500F38 /* Equal+Tuple.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 9BF29A930F20F0EEEA914F5A68772BDC /* ElementsEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CD816D738F167237C9A3B13DAA014EF /* ElementsEqual.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 9C05E4ABD9F458B9F7C0DEE1DDF1F519 /* CwlCatchExceptionSupport-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E3175669EC99FC1B2E97FAD01B812A2E /* CwlCatchExceptionSupport-dummy.m */; }; 9C1721018B658167D11C278FF302D519 /* NimbleSwiftTestingHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7827360ADA6D94E9172DFFFCD3C363CA /* NimbleSwiftTestingHandler.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 9CF063AD4B3A38BB68F24F8258FA4943 /* CwlPreconditionTesting-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C844570D34F1E5B123F30AA895A668DC /* CwlPreconditionTesting-dummy.m */; }; 9D12F5F7DDFA20226009ECE1F93685BB /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = B840FD7E2B734F14C64AF239FC062BF6 /* World+DSL.swift */; }; @@ -129,12 +130,11 @@ A4BA2214734C3F9BA7B29111A3ECB53F /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B081EBD0C08252737A0F2520D9D7995 /* SatisfyAnyOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; A4F6EFCC6014A3AD7E2F070BB2C6816D /* TestSelectorNameProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DB970DD6DE656FA70BD51556EE658CC /* TestSelectorNameProvider.swift */; }; A72E6EC24DCAE0BF3B0FCA5B51CA76AD /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = C031122302F7D8CC5FA91D363F3532FD /* DSL+Wait.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - A7567347B8B2FF0E3B30A64F6CFC14AF /* URLExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6095F4C2739D787484B9EDC13CDB670 /* URLExtension.swift */; }; + A7567347B8B2FF0E3B30A64F6CFC14AF /* URLExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1067F5AE46F7D134ACCB864AE2A5C030 /* URLExtension.swift */; }; A7E2198EB7070BEE958C9CB2C1915D37 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DFF4086A8A79FCCF7C0C8AFCBFB6559 /* BeginWith.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; A9D2D4EAF689DDE99B16E419CFDB8DEB /* Nimble-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 190ACFAC4CE32FB94934E98A3A0D2F66 /* Nimble-dummy.m */; }; AD1B4274C77DCCB80DE7FE3D0F9203F7 /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = E77EFE5D58E902C62E82C82457493963 /* Map.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; AD275CD587C0BBDBB6359E41A40FCB49 /* PollAwait.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3297DD9882F50844D0A77ABBA7D1E877 /* PollAwait.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - AF6D08939F5591CBF2A02030B8360345 /* CwlCatchExceptionSupport-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E55D8EE918317B05053CB6D426C37FB4 /* CwlCatchExceptionSupport-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; AFC2E714C38974AA05FC3CE80C56E6CC /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4754252DA617DC5F91C42390F16B6DC4 /* World.swift */; }; BB09B8FA4D5F302917996FC19BC55D55 /* QuickSpecBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 84D8F22D0EAB990FD3D770A14B01230F /* QuickSpecBase.m */; }; BBEF03A40B511307408E71EF435ED82D /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = 09CDBFA23FE6897D14A16ADBDF47BAD4 /* XCTestObservationCenter+Register.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; @@ -142,7 +142,6 @@ BCC5F39F50D864BCB2FEA6D05179D412 /* HooksPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A3305076E39F887374BE6563DF9FD8 /* HooksPhase.swift */; }; BE777469F6B656573287828391B99E98 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5116F78E8A297D5444789A083DB1F0 /* MatchError.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; BE90281F3D712810D22EC11D42A35712 /* CwlCatchException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DDDBB24FD704FDA57F249434BB38B56 /* CwlCatchException.swift */; }; - C0AB02184DA06F991F4B5283ACB3ABD6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE792BC237403FF58FE096CB9E372062 /* Foundation.framework */; }; C1C3D7A89F77B96491652DFC2D42E955 /* CurrentSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EC5965DA5E495F41026F149427B322B /* CurrentSpec.swift */; }; C228EDE946AD9E8E31CC33F46425C82B /* StopTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD8B7D9CFCB8048E7190AF94ACD737B7 /* StopTest.swift */; }; C38DA6B7A2F4987752D004E0FC830F02 /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FC78755097D8F91A26C7A9C9DEA275B /* SuiteHooks.swift */; }; @@ -155,7 +154,7 @@ D4727348757C8DFA3E7A20AE51191E52 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE07C0D6707CAFD4E25D81D250D800FA /* Example.swift */; }; D6B4B3395CCDBB5CA8A0704D7FAA96BB /* CwlMachBadInstructionHandler-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BC89CD4AF41F647751AF403A71AD03E7 /* CwlMachBadInstructionHandler-dummy.m */; }; D6BDA4F87E9CBA049938A87C4BF226A0 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A09D0C88FCFA2BA4FB46A48D71D4F68 /* BeIdenticalTo.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - D7A4B31685CE0DD1641E586694DFAE99 /* MediaFileHandle.swift in Sources */ = {isa = PBXBuildFile; fileRef = F20ADCB7B3D9197526C98880EC6D33B7 /* MediaFileHandle.swift */; }; + D7A4B31685CE0DD1641E586694DFAE99 /* MediaFileHandle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BC8235954DDF90004F369B98A074EA8 /* MediaFileHandle.swift */; }; D930E5A9D0B6D3C26546116F5B58828C /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD7AEA1D34691169E2852ADEA17A853 /* BeLessThan.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; DFF1506E9144524F2452D10A516E29C3 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842127781EEE561F787B98F6B09BD441 /* Expression.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; E03A6E70F99CD8CCA0653DFED6B41665 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE792BC237403FF58FE096CB9E372062 /* Foundation.framework */; }; @@ -166,13 +165,13 @@ E32A1F3DD67E2E985E18B4FC270BDEE4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE792BC237403FF58FE096CB9E372062 /* Foundation.framework */; }; E4CA95EBA8B21AFD47EA6AC3B46346F1 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = E053EDCA12F098DA5736AA0E8A4B1EA1 /* Expectation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; E960415AAB8F829884897C0D95DC1666 /* ErrorUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED045DAEF684A47094A9C91DCE921DB /* ErrorUtility.swift */; }; - EA78AA0D99F54886498F1957308C73F8 /* CachingPlayerItemConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22B94E56984BF6DFB084BAF09A042507 /* CachingPlayerItemConfiguration.swift */; }; + EA78AA0D99F54886498F1957308C73F8 /* CachingPlayerItemConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16E6FD87C97C632445473E1AD365A302 /* CachingPlayerItemConfiguration.swift */; }; EC9E8B2E8B198B3042EF9C0C42725539 /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52C7F11F8477187E05A307C65B929747 /* ExampleMetadata.swift */; }; ECD14C6FE8031AB0AC6A1407804AA421 /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F5E683E75D0E1A91A3B187911096F29 /* ThrowError.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; EF48F98DACE80E4AAFC210E73148CFE3 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 696C9EF513565DBADB9B049AF58C42D3 /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; EF68BCBF3E27425A7B3AFF6119211FCC /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1DF80A1C1ACA31F49AB97C53243E9E0 /* Filter.swift */; }; F1C44E72D1C0EB8CADE53B670DCEFF36 /* CwlCatchBadInstruction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4F263F22947887755A65015F5CFC9D3 /* CwlCatchBadInstruction.swift */; }; - F362D6F0D5013AD045875D8658B95384 /* CachingPlayerItem-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B718BEBBA0E9B6D3D2BFD371591D3AE /* CachingPlayerItem-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F362D6F0D5013AD045875D8658B95384 /* CachingPlayerItem-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A69E69526FD35834D8787D4FFC27126 /* CachingPlayerItem-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; F5F0B18CF019B5B96124A6E3763170A7 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = C058D7C5A1F00F83BBB583AA2A69D5A7 /* Stringers.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; F65CB19072D2E6688AE3F26751BC920A /* TestState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C5028EA35DF1107E9996C3FB6CE6A5B /* TestState.swift */; }; F6711420390223C10F858040EC4BA988 /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A94158E8856EF5C38B1F0CB38DB1CE2 /* HaveCount.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; @@ -180,119 +179,123 @@ FB21B4BEB9A9E57EDDD216D90A94C812 /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 258DB62C2BB8F1A95665EEFCE00D85DD /* utils.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; FB29BF15EC9278EF39C150C3DE8177A5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE792BC237403FF58FE096CB9E372062 /* Foundation.framework */; }; FB2A9B61916FE446A8227C6FA69EDA2B /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A97B0E735A3C8028882301275FF6A0B /* ExampleHooks.swift */; }; + FC3D0C6F94A6E0D15AE00328C3261D02 /* CwlCatchExceptionSupport-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E55D8EE918317B05053CB6D426C37FB4 /* CwlCatchExceptionSupport-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; FC778BB2D89F5D73C65C6982CA2956FD /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6212D8F8983A5AD15D8DE34F6A7ACA80 /* AssertionRecorder.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; FF744586E3BE9A490AD34F932C498AEC /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57DF519F504CE40821EC463E65D43D9D /* Closures.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 0449F304E3CEEF6B4FCD266E82DEAE38 /* PBXContainerItemProxy */ = { + 04B477A63629CC3E993EF630A7E2A47F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = CA3D99499260B4C146BBB22670C1D8AD; - remoteInfo = CwlCatchExceptionSupport; + remoteGlobalIDString = EB8B23AD889CF5BE4A85CD0D8EF2DF99; + remoteInfo = CwlPosixPreconditionTesting; }; - 1C9525FFF2EF184FDA42147AED71B945 /* PBXContainerItemProxy */ = { + 07BD7E23AA160A527D1FD2107E73B754 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 6F13695E06195A78EA8A95F8C7ED0D2F; remoteInfo = Nimble; }; - 2330FE715C00DDC7A4F861004CF47649 /* PBXContainerItemProxy */ = { + 1DCD052D150BE48902514C8A8F389B79 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 3BBD87E27EAD36B90D168213ED6DC32C; - remoteInfo = CwlMachBadInstructionHandler; + remoteGlobalIDString = 308B5C440C446909122081D367A27A8F; + remoteInfo = CwlCatchException; }; - 264EBF4D2AC776DA96751A4E1D18BBD8 /* PBXContainerItemProxy */ = { + 30F5664230A4FFBD1E9DA16FA6D2B8F1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = EB8B23AD889CF5BE4A85CD0D8EF2DF99; - remoteInfo = CwlPosixPreconditionTesting; + remoteGlobalIDString = 5AC845F8F60E6D74BC46BB3D65D32A0E; + remoteInfo = "Pods-CachingPlayerItem_Example"; }; - 2D8ADF810B53F5684FDB066C5AC21A2B /* PBXContainerItemProxy */ = { + 3C24BBA55D496B30DC4C10225D1D23DB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = E4D853F6FBAB5A9BDBE843E4EFB22EB7; - remoteInfo = CwlPreconditionTesting; + remoteGlobalIDString = 31D3DC3FCCAB0AB08B35437BFBC158AA; + remoteInfo = CachingPlayerItem; }; - 320D189301A29D4903B60F950C736AEC /* PBXContainerItemProxy */ = { + 4234B3D5CA4CE5483F1D8E7B07555550 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = C82891EAB7293DBEE916B21F57E8474D; - remoteInfo = Quick; + remoteGlobalIDString = 3BBD87E27EAD36B90D168213ED6DC32C; + remoteInfo = CwlMachBadInstructionHandler; }; - 4DA27B89F63638C0B5CB604FD284FF81 /* PBXContainerItemProxy */ = { + 49AD5A09E3FEE36FBD0640A9A5194D74 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 308B5C440C446909122081D367A27A8F; - remoteInfo = CwlCatchException; + remoteGlobalIDString = C82891EAB7293DBEE916B21F57E8474D; + remoteInfo = Quick; }; - 688A2FE970FDF39AD3D4B34467DB54EA /* PBXContainerItemProxy */ = { + 4C31B63FD4692EF7C37EDB9281628B00 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = CA3D99499260B4C146BBB22670C1D8AD; remoteInfo = CwlCatchExceptionSupport; }; - 820ABA68D2E9A36A7BDA3289B45520D7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5AC845F8F60E6D74BC46BB3D65D32A0E; - remoteInfo = "Pods-CachingPlayerItem_Example"; - }; - 85C4C7C6F756987789F937301CF55B78 /* PBXContainerItemProxy */ = { + 7337489882360ACFADEA1681A018436C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = E4D853F6FBAB5A9BDBE843E4EFB22EB7; remoteInfo = CwlPreconditionTesting; }; - 9021AD31240291415C3B4F4B85C65C9E /* PBXContainerItemProxy */ = { + 760E231B383C04BB4C9204C0B6CE2B5B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 308B5C440C446909122081D367A27A8F; remoteInfo = CwlCatchException; }; - B46CEAD667584FB799994DF2F7304D72 /* PBXContainerItemProxy */ = { + ADB94AD34139A76C7B31AC02A9FA9E98 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = EB8B23AD889CF5BE4A85CD0D8EF2DF99; remoteInfo = CwlPosixPreconditionTesting; }; - DB92FC2D1E53B3526D2D1A53883D3711 /* PBXContainerItemProxy */ = { + AF65777E6F0E2E2A18E0D965B3B3F25C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 31D3DC3FCCAB0AB08B35437BFBC158AA; - remoteInfo = CachingPlayerItem; + remoteGlobalIDString = 3BBD87E27EAD36B90D168213ED6DC32C; + remoteInfo = CwlMachBadInstructionHandler; }; - E9B432D0A65D5CAD6BB9B70249395737 /* PBXContainerItemProxy */ = { + B2F7377DC311E4185C5CFA44EBF5929D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 3BBD87E27EAD36B90D168213ED6DC32C; - remoteInfo = CwlMachBadInstructionHandler; + remoteGlobalIDString = CA3D99499260B4C146BBB22670C1D8AD; + remoteInfo = CwlCatchExceptionSupport; + }; + DD1038BE119C671CFDD6411DE4642797 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E4D853F6FBAB5A9BDBE843E4EFB22EB7; + remoteInfo = CwlPreconditionTesting; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 007809F12EC3F58AFD49CF39D5644FB8 /* BeLogical.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLogical.swift; path = Sources/Nimble/Matchers/BeLogical.swift; sourceTree = ""; }; + 02E755FEA37E477B2AD9C925AC35EA4C /* docSet.dsidx */ = {isa = PBXFileReference; includeInIndex = 1; name = docSet.dsidx; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/docSet.dsidx; sourceTree = ""; }; + 034351D1B9282E0ACE5410E2032B475E /* CachingPlayerItem-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "CachingPlayerItem-Info.plist"; sourceTree = ""; }; + 03A49A494B66E9FE4333DE133A355928 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; 03C2C6CFDBECAD7300037B3245BB754D /* CwlPosixPreconditionTesting-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CwlPosixPreconditionTesting-dummy.m"; sourceTree = ""; }; + 0461D46E0237B7C91EACCD48DCF1712D /* CachingPlayerItem.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = CachingPlayerItem.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 046BB3775EC1E5F60683BB2ED92E8537 /* CwlPreconditionTesting.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CwlPreconditionTesting.release.xcconfig; sourceTree = ""; }; 046D59E18190A9B02174EFC64FDF1093 /* CwlPreconditionTesting.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = CwlPreconditionTesting.modulemap; sourceTree = ""; }; 0635135D0FA704D3211EAD9B213C1B2B /* QuickSpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickSpec.m; path = Sources/QuickObjectiveC/QuickSpec.m; sourceTree = ""; }; 06E58D58F6C692B8D29CDEDF3D25F7FA /* FailureMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FailureMessage.swift; path = Sources/Nimble/FailureMessage.swift; sourceTree = ""; }; - 07008EF04A6AA3FCE574CDD3D57D60F3 /* badge.svg */ = {isa = PBXFileReference; includeInIndex = 1; name = badge.svg; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/badge.svg; sourceTree = ""; }; 0776EEDA55241DC03C977F74ED16651F /* BeCloseTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeCloseTo.swift; path = Sources/Nimble/Matchers/BeCloseTo.swift; sourceTree = ""; }; 07AF2576A9AF12ED17056907C58F3C48 /* AsyncSpec+testMethodSelectors.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "AsyncSpec+testMethodSelectors.m"; path = "Sources/QuickObjectiveC/AsyncSpec+testMethodSelectors.m"; sourceTree = ""; }; 09245E40B17313D7EEA810E35467BCD4 /* NMBStringify.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NMBStringify.h; path = Sources/NimbleObjectiveC/include/NMBStringify.h; sourceTree = ""; }; @@ -300,40 +303,35 @@ 0AB90CD912B04BA71A6592AF1155499F /* CwlCatchException-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CwlCatchException-umbrella.h"; sourceTree = ""; }; 0D631E9908483F9525A6B3F36F16CC61 /* Quick */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Quick; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 0E7CCDE71C8687888FFDFDC7D13B02D7 /* CwlMachBadInstructionHandler.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CwlMachBadInstructionHandler.debug.xcconfig; sourceTree = ""; }; + 1067F5AE46F7D134ACCB864AE2A5C030 /* URLExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLExtension.swift; path = Source/URLExtension.swift; sourceTree = ""; }; 1198014F2E90B6C98610669754E5AD7E /* Quick-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Quick-Info.plist"; sourceTree = ""; }; 125B2DF909470F43204069C82BDDF9D2 /* Pods-CachingPlayerItem_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CachingPlayerItem_Tests-acknowledgements.plist"; sourceTree = ""; }; 154FCAA114CC03C30144EC1D88FC9B42 /* XCTestSuite+QuickTestSuiteBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "XCTestSuite+QuickTestSuiteBuilder.m"; path = "Sources/QuickObjectiveC/XCTestSuite+QuickTestSuiteBuilder.m"; sourceTree = ""; }; 159B750FE5DC51E9D842C7D13A094A47 /* AsyncBehavior.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncBehavior.swift; path = Sources/Quick/Async/AsyncBehavior.swift; sourceTree = ""; }; - 17452639EF6002439D9FDFF27E1090B4 /* CachingPlayerItemConfiguration.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingPlayerItemConfiguration.html; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Enums/CachingPlayerItemConfiguration.html; sourceTree = ""; }; + 165CF54B8677C36053FA5E591F983070 /* Classes.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Classes.html; path = docs/Classes.html; sourceTree = ""; }; + 16E6FD87C97C632445473E1AD365A302 /* CachingPlayerItemConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CachingPlayerItemConfiguration.swift; path = Source/CachingPlayerItemConfiguration.swift; sourceTree = ""; }; 1791D3EE80056B67DAF4379BE191DC47 /* CwlPosixPreconditionTesting.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CwlPosixPreconditionTesting.release.xcconfig; sourceTree = ""; }; + 17BBD4A195864A7D8A466C206EEE77F0 /* jazzy.css */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.css; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/css/jazzy.css; sourceTree = ""; }; 183EB9D99198F3EFDC362CA407F07D5C /* CwlCatchException.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CwlCatchException.m; path = Sources/CwlCatchExceptionSupport/CwlCatchException.m; sourceTree = ""; }; 186174F8DBFEDA8C1D1EC61862BBA5B8 /* CwlPosixPreconditionTesting.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = CwlPosixPreconditionTesting.modulemap; sourceTree = ""; }; 190ACFAC4CE32FB94934E98A3A0D2F66 /* Nimble-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Nimble-dummy.m"; sourceTree = ""; }; - 193663ABD5BE642FCE4CB7D5835706C0 /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; name = index.html; path = docs/index.html; sourceTree = ""; }; - 1B718BEBBA0E9B6D3D2BFD371591D3AE /* CachingPlayerItem-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CachingPlayerItem-umbrella.h"; sourceTree = ""; }; - 1C1BB892B17ABA27A60DA2BD60B8F9A7 /* carat.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = carat.png; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/img/carat.png; sourceTree = ""; }; 1C260E5AB7CEA0178FC0CC013AF2AE19 /* SubclassDetection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubclassDetection.swift; path = Sources/Quick/SubclassDetection.swift; sourceTree = ""; }; 1F57C537EE08408AC0E1EDD3379C14FD /* AdapterProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AdapterProtocols.swift; path = Sources/Nimble/Adapters/AdapterProtocols.swift; sourceTree = ""; }; 1FDF0C12C43602A63D8388EB54280793 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/AVFoundation.framework; sourceTree = DEVELOPER_DIR; }; - 2020F8DE0D3E263D2D9FEFEBEA8C170A /* Protocols.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Protocols.html; path = docs/Protocols.html; sourceTree = ""; }; 20F685C2C5493766DB305F6891B23D0F /* Polling.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Polling.swift; path = Sources/Nimble/Polling.swift; sourceTree = ""; }; - 21C9409F2AF5995D7DEFE60F19DFD976 /* lunr.min.js */ = {isa = PBXFileReference; includeInIndex = 1; name = lunr.min.js; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/js/lunr.min.js; sourceTree = ""; }; 220D1365CED5CB83C4C0CE1E3DABD3B0 /* CwlCatchExceptionSupport */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = CwlCatchExceptionSupport; path = CwlCatchExceptionSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 22B94E56984BF6DFB084BAF09A042507 /* CachingPlayerItemConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CachingPlayerItemConfiguration.swift; path = Source/CachingPlayerItemConfiguration.swift; sourceTree = ""; }; - 22D1F4758F4DDB45283940EDF88978BB /* ResourceLoaderDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResourceLoaderDelegate.swift; path = Source/ResourceLoaderDelegate.swift; sourceTree = ""; }; - 241724AED8974488C9A440E6A90FD4BF /* CachingPlayerItemConfiguration.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingPlayerItemConfiguration.html; path = docs/Enums/CachingPlayerItemConfiguration.html; sourceTree = ""; }; 242F4E1A38349B95AE989E8C8F70A2D8 /* NimbleEnvironment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NimbleEnvironment.swift; path = Sources/Nimble/Adapters/NimbleEnvironment.swift; sourceTree = ""; }; - 2436840460CC398CC3943B75FB017B61 /* gh.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = gh.png; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/img/gh.png; sourceTree = ""; }; 2439DCDC23201F14DB258AD24ED6C8B8 /* ContainElementSatisfying.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContainElementSatisfying.swift; path = Sources/Nimble/Matchers/ContainElementSatisfying.swift; sourceTree = ""; }; + 247CAF5960FDB7865342B946EA54A6BE /* Classes.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Classes.html; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Classes.html; sourceTree = ""; }; 24AC7385ABE4A4C005A679A8D985860F /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = Sources/Nimble/Utils/Errors.swift; sourceTree = ""; }; 24CD661DF2F841D7B1D31742AC94743D /* AsyncTimerSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncTimerSequence.swift; path = Sources/Nimble/Utils/AsyncTimerSequence.swift; sourceTree = ""; }; 258DB62C2BB8F1A95665EEFCE00D85DD /* utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = utils.swift; path = Sources/NimbleSharedTestHelpers/utils.swift; sourceTree = ""; }; - 26DB2E42B8D9F4409ABB93C65EBB34DE /* CachingPlayerItem.tgz */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingPlayerItem.tgz; path = docs/docsets/CachingPlayerItem.tgz; sourceTree = ""; }; - 26E0E9EC2B098A0CF66040ADDD0C7A01 /* jquery.min.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jquery.min.js; path = docs/js/jquery.min.js; sourceTree = ""; }; - 280690B43C975E9E920DEA481B74C40A /* jquery.min.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jquery.min.js; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/js/jquery.min.js; sourceTree = ""; }; + 279DEA457009A8BF5851F9A258196435 /* ResourceLoaderDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResourceLoaderDelegate.swift; path = Source/ResourceLoaderDelegate.swift; sourceTree = ""; }; + 2906CA99C8361D3A927F67F401FA3407 /* Structs.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Structs.html; path = docs/Structs.html; sourceTree = ""; }; 297A54D6187AC30861EEE1C2FB9E31CA /* Quick.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Quick.release.xcconfig; sourceTree = ""; }; 2A5BB27C7E815F05BA10C5665A7A9CFC /* DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSL.swift; path = Sources/Nimble/DSL.swift; sourceTree = ""; }; 2A5EA4B3A78B3BF0B2C0112052507620 /* AsyncAllPass.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncAllPass.swift; path = Sources/Nimble/Matchers/AsyncAllPass.swift; sourceTree = ""; }; + 2A69E69526FD35834D8787D4FFC27126 /* CachingPlayerItem-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CachingPlayerItem-umbrella.h"; sourceTree = ""; }; 2A94158E8856EF5C38B1F0CB38DB1CE2 /* HaveCount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HaveCount.swift; path = Sources/Nimble/Matchers/HaveCount.swift; sourceTree = ""; }; 2B99216BBFF97142CBFB99563E7FECE7 /* Nimble.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Nimble.release.xcconfig; sourceTree = ""; }; 2C5028EA35DF1107E9996C3FB6CE6A5B /* TestState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestState.swift; path = Sources/Quick/TestState.swift; sourceTree = ""; }; @@ -342,119 +340,125 @@ 338908D1D0F87DD3B7192AFD06B854DF /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThanOrEqual.swift; path = Sources/Nimble/Matchers/BeLessThanOrEqual.swift; sourceTree = ""; }; 34EB35DAD99DC6416D4670B6D9793071 /* Pods-CachingPlayerItem_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-CachingPlayerItem_Example-acknowledgements.markdown"; sourceTree = ""; }; 355FF6D448054FF8C345BDBF1E1BFC54 /* CwlMachBadInstructionHandler-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CwlMachBadInstructionHandler-prefix.pch"; sourceTree = ""; }; + 35797E04427A22CF4424770039122FDF /* highlight.css */ = {isa = PBXFileReference; includeInIndex = 1; name = highlight.css; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/css/highlight.css; sourceTree = ""; }; 357F42A18689A1FF862D76759BCDAE54 /* Quick.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Quick.modulemap; sourceTree = ""; }; 373C46B37A3358E09C676219E5A987BA /* Match.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Match.swift; path = Sources/Nimble/Matchers/Match.swift; sourceTree = ""; }; 37BC531CBA1B98AD278C63EDF08975C1 /* Contain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Contain.swift; path = Sources/Nimble/Matchers/Contain.swift; sourceTree = ""; }; 37F9E1F40FDF833DDCCD691C88A75B59 /* AssertionDispatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertionDispatcher.swift; path = Sources/Nimble/Adapters/AssertionDispatcher.swift; sourceTree = ""; }; + 39294C41C3397B76B9E54CEE0890EE6D /* CachingPlayerItemDelegate.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingPlayerItemDelegate.html; path = docs/Protocols/CachingPlayerItemDelegate.html; sourceTree = ""; }; 3A243E965D5AE90EE3E7E2BD576AC686 /* Nimble-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nimble-umbrella.h"; sourceTree = ""; }; 3A7DD7F5A7DB3895B6E8AB64880F4D81 /* CwlPosixPreconditionTesting-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CwlPosixPreconditionTesting-umbrella.h"; sourceTree = ""; }; 3AE0EEF3E12756622D1E1F1B394D11AF /* QuickSelectedTestSuiteBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuickSelectedTestSuiteBuilder.swift; path = Sources/Quick/QuickSelectedTestSuiteBuilder.swift; sourceTree = ""; }; + 3B80F8832329948FB57D1302DF33842B /* carat.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = carat.png; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/img/carat.png; sourceTree = ""; }; 3C1CCBC85490771810D386AC31498DD6 /* CwlPosixPreconditionTesting.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CwlPosixPreconditionTesting.debug.xcconfig; sourceTree = ""; }; - 3D69E697E7B2DB36953E6586FE043057 /* highlight.css */ = {isa = PBXFileReference; includeInIndex = 1; name = highlight.css; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/css/highlight.css; sourceTree = ""; }; 3E09FFA9DB74D5A4F5782E5360A568CF /* CwlCatchExceptionSupport-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "CwlCatchExceptionSupport-Info.plist"; sourceTree = ""; }; 3EBFC33CF6E064AA51900D3A3AB7EC01 /* Nimble.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Nimble.modulemap; sourceTree = ""; }; 3ED045DAEF684A47094A9C91DCE921DB /* ErrorUtility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ErrorUtility.swift; path = Sources/Quick/ErrorUtility.swift; sourceTree = ""; }; + 3F0A24EC2A53580D4800B19BCA779FAD /* CachingPlayerItemConfiguration.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingPlayerItemConfiguration.html; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Enums/CachingPlayerItemConfiguration.html; sourceTree = ""; }; 3F3B85709C50E00EC8B5FEE379C74E45 /* NimbleXCTestHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NimbleXCTestHandler.swift; path = Sources/Nimble/Adapters/NimbleXCTestHandler.swift; sourceTree = ""; }; + 3F7226D2140D40B94EA8DF10135A30CA /* URLResponseExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLResponseExtension.swift; path = Source/URLResponseExtension.swift; sourceTree = ""; }; + 405C7A51769DB8E6BEE4D3E2526F0FAD /* undocumented.json */ = {isa = PBXFileReference; includeInIndex = 1; name = undocumented.json; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/undocumented.json; sourceTree = ""; }; 41DA644041A772EED9CDF38792B4F92E /* QCKDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QCKDSL.m; path = Sources/QuickObjectiveC/DSL/QCKDSL.m; sourceTree = ""; }; 439B0494B0C4CD44699477F95607F918 /* CwlPreconditionTesting-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CwlPreconditionTesting-prefix.pch"; sourceTree = ""; }; 4754252DA617DC5F91C42390F16B6DC4 /* World.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = World.swift; path = Sources/Quick/World.swift; sourceTree = ""; }; 475EBDAD40B237A3E567B928C1F7D606 /* BeginWithPrefix.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeginWithPrefix.swift; path = Sources/Nimble/Matchers/BeginWithPrefix.swift; sourceTree = ""; }; - 47DA2E8F038DDF6A6BFF8BAF92DF91C2 /* jazzy.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.js; path = docs/js/jazzy.js; sourceTree = ""; }; 49198519E2706FE0611859921FA93D0A /* CwlPosixPreconditionTesting-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "CwlPosixPreconditionTesting-Info.plist"; sourceTree = ""; }; - 49FB7F462D76DC21FEB7F970503336D6 /* PendingRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PendingRequest.swift; path = Source/PendingRequest.swift; sourceTree = ""; }; 4B12B12B24D7C4856B265F2D3414B4E1 /* QuickConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickConfiguration.m; path = Sources/QuickObjectiveC/Configuration/QuickConfiguration.m; sourceTree = ""; }; 4BF842AAE9465BB337085EAE3475C001 /* NSBundle+CurrentTestBundle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSBundle+CurrentTestBundle.swift"; path = "Sources/Quick/NSBundle+CurrentTestBundle.swift"; sourceTree = ""; }; - 4CAF7FE2FF8C859A1915FA22F4310C17 /* CachingPlayerItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CachingPlayerItem.swift; path = Source/CachingPlayerItem.swift; sourceTree = ""; }; 4D42FC874139F1DA97F5C9F58306FDC6 /* CwlCatchException-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CwlCatchException-prefix.pch"; sourceTree = ""; }; 4DFF4086A8A79FCCF7C0C8AFCBFB6559 /* BeginWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeginWith.swift; path = Sources/Nimble/Matchers/BeginWith.swift; sourceTree = ""; }; 4EE77A447396E89722C477CC9AB510B4 /* Quick-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Quick-umbrella.h"; sourceTree = ""; }; 4F5B1AA5E2EC60C821B877EF727E05D9 /* Polling+AsyncAwait.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Polling+AsyncAwait.swift"; path = "Sources/Nimble/Polling+AsyncAwait.swift"; sourceTree = ""; }; 4F63A83CAE97E1BD208963CCCE47A500 /* CwlPosixPreconditionTesting-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CwlPosixPreconditionTesting-prefix.pch"; sourceTree = ""; }; + 4FAD55138DE2A3E2E3101DBE933150FA /* CachingPlayerItemConfiguration.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingPlayerItemConfiguration.html; path = docs/Enums/CachingPlayerItemConfiguration.html; sourceTree = ""; }; 51431BD810B927DCAD67A4548949C253 /* CwlCatchBadInstructionPosix.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlCatchBadInstructionPosix.swift; path = Sources/CwlPosixPreconditionTesting/CwlCatchBadInstructionPosix.swift; sourceTree = ""; }; 526F23A217BAB3DEF2E0200AF209EFA4 /* Pods-CachingPlayerItem_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CachingPlayerItem_Tests.release.xcconfig"; sourceTree = ""; }; 52C7F11F8477187E05A307C65B929747 /* ExampleMetadata.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleMetadata.swift; path = Sources/Quick/Examples/ExampleMetadata.swift; sourceTree = ""; }; - 5388B93426EC46ADF16634319B4BA23D /* badge.svg */ = {isa = PBXFileReference; includeInIndex = 1; name = badge.svg; path = docs/badge.svg; sourceTree = ""; }; + 52CC27B47BE284A2A9E3E8457703FCF3 /* gh.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = gh.png; path = docs/img/gh.png; sourceTree = ""; }; 53D4B42FB31ECE931C95CF95CA620696 /* NMBStringify.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NMBStringify.m; path = Sources/NimbleObjectiveC/NMBStringify.m; sourceTree = ""; }; 562743D3E3D9A1D90630F55105FC503E /* Pods-CachingPlayerItem_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CachingPlayerItem_Tests-Info.plist"; sourceTree = ""; }; + 573AEA30CD55BC553C1B731E379910EE /* CachingPlayerItem.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingPlayerItem.html; path = docs/Classes/CachingPlayerItem.html; sourceTree = ""; }; 57DCB0505A6CCEBDFBAB00473DC7CE5A /* Pods-CachingPlayerItem_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CachingPlayerItem_Example.debug.xcconfig"; sourceTree = ""; }; 57DF519F504CE40821EC463E65D43D9D /* Closures.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Closures.swift; path = Sources/Quick/Hooks/Closures.swift; sourceTree = ""; }; 5864D935270DB5D519BA2E73846A615E /* SatisfyAllOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SatisfyAllOf.swift; path = Sources/Nimble/Matchers/SatisfyAllOf.swift; sourceTree = ""; }; 588A0E154F50CBAE3DE465E7E2B961F8 /* QCKConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QCKConfiguration.swift; path = Sources/Quick/Configuration/QCKConfiguration.swift; sourceTree = ""; }; 5926323BEACFA1DBA4091D57ABE4B5A9 /* Nimble-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Nimble-Info.plist"; sourceTree = ""; }; 59AC9ED95324504D94C38E138491CA5C /* Quick.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Quick.debug.xcconfig; sourceTree = ""; }; + 5A0D510B8AEC490CB9BB33F56722C9C0 /* dash.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = dash.png; path = docs/img/dash.png; sourceTree = ""; }; 5A0F5CF3F8E55B129E5E18B693E6D43C /* NMBExpectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NMBExpectation.swift; path = Sources/Nimble/Adapters/NMBExpectation.swift; sourceTree = ""; }; - 5A94DED8979587B4DD736D5093C4A497 /* Enums.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Enums.html; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Enums.html; sourceTree = ""; }; + 5BC8235954DDF90004F369B98A074EA8 /* MediaFileHandle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MediaFileHandle.swift; path = Source/MediaFileHandle.swift; sourceTree = ""; }; 5CD816D738F167237C9A3B13DAA014EF /* ElementsEqual.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ElementsEqual.swift; path = Sources/Nimble/Matchers/ElementsEqual.swift; sourceTree = ""; }; - 5D0066CD8D2AF8516FB15CEBE9463B80 /* Enums.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Enums.html; path = docs/Enums.html; sourceTree = ""; }; 5E3A948374B447E80B3F7A9D1BB3866D /* Pods-CachingPlayerItem_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-CachingPlayerItem_Example-frameworks.sh"; sourceTree = ""; }; - 5F0BABD35B3972C3B450F96F68BA3402 /* highlight.css */ = {isa = PBXFileReference; includeInIndex = 1; name = highlight.css; path = docs/css/highlight.css; sourceTree = ""; }; 5F536E8B1B6F8B075512829536DE9634 /* Pods-CachingPlayerItem_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-CachingPlayerItem_Tests-frameworks.sh"; sourceTree = ""; }; 5FCC4A9D07B7B3D779CB9646EF898676 /* QuickTestSuite.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuickTestSuite.swift; path = Sources/Quick/QuickTestSuite.swift; sourceTree = ""; }; 6212D8F8983A5AD15D8DE34F6A7ACA80 /* AssertionRecorder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertionRecorder.swift; path = Sources/Nimble/Adapters/AssertionRecorder.swift; sourceTree = ""; }; 62243388BD2CDBA0C9E1E84E4EC3C0E3 /* Pods-CachingPlayerItem_Example */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-CachingPlayerItem_Example"; path = Pods_CachingPlayerItem_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 641D4B5D91824160AD2BBD088B2CBE0F /* Pods-CachingPlayerItem_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CachingPlayerItem_Example-acknowledgements.plist"; sourceTree = ""; }; - 66B28FF47F05C2A4821911BDA22DEE84 /* CachingPlayerItem.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CachingPlayerItem.debug.xcconfig; sourceTree = ""; }; - 66B932A6A9C342C6425397C65E4DA917 /* CachingPlayerItem-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CachingPlayerItem-prefix.pch"; sourceTree = ""; }; + 64FF0CBE6395A9431EDC20C66C96D58C /* Protocols.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Protocols.html; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Protocols.html; sourceTree = ""; }; + 652F7655B26126652267A3154842EE55 /* CachingPlayerItem.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CachingPlayerItem.release.xcconfig; sourceTree = ""; }; 66BC4D82D2EF667E34B0124CE88608AE /* BeVoid.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeVoid.swift; path = Sources/Nimble/Matchers/BeVoid.swift; sourceTree = ""; }; 6717AF842D3DE72EB50578E98D8B932A /* DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSL.swift; path = Sources/Quick/DSL/DSL.swift; sourceTree = ""; }; - 6766B23C5084ED68F8C30A1D13F1B9BD /* search.json */ = {isa = PBXFileReference; includeInIndex = 1; name = search.json; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/search.json; sourceTree = ""; }; + 68319932ABB25CF0141DFA08856A496A /* jazzy.search.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.search.js; path = docs/js/jazzy.search.js; sourceTree = ""; }; 696C9EF513565DBADB9B049AF58C42D3 /* QuickSpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickSpec.h; path = Sources/QuickObjectiveC/QuickSpec.h; sourceTree = ""; }; 6A784E569CD2A1B6173E812677AE5BC5 /* PostNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PostNotification.swift; path = Sources/Nimble/Matchers/PostNotification.swift; sourceTree = ""; }; - 6AC819E00FF0B0131858BF7A870DA1D7 /* gh.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = gh.png; path = docs/img/gh.png; sourceTree = ""; }; - 6B28592A3B5B98079F9E51083BD64F33 /* search.json */ = {isa = PBXFileReference; includeInIndex = 1; name = search.json; path = docs/search.json; sourceTree = ""; }; 6BA76569E355779114EE6D2A2991ADB5 /* DSL+Require.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DSL+Require.swift"; path = "Sources/Nimble/DSL+Require.swift"; sourceTree = ""; }; 6C09930EED0FBD67108C13CC4EF3F7D5 /* BeGreaterThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThan.swift; path = Sources/Nimble/Matchers/BeGreaterThan.swift; sourceTree = ""; }; 6C5116F78E8A297D5444789A083DB1F0 /* MatchError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatchError.swift; path = Sources/Nimble/Matchers/MatchError.swift; sourceTree = ""; }; - 6E0DF57B543DDF48B894ECE336ABFB69 /* undocumented.json */ = {isa = PBXFileReference; includeInIndex = 1; name = undocumented.json; path = docs/undocumented.json; sourceTree = ""; }; + 6CE7A6B4047A80BA69A482386843B164 /* CachingPlayerItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CachingPlayerItem.swift; path = Source/CachingPlayerItem.swift; sourceTree = ""; }; + 6EB73D84CC6314567D6322FA95D57578 /* CachingPlayerItem.xml */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingPlayerItem.xml; path = docs/docsets/CachingPlayerItem.xml; sourceTree = ""; }; + 6F2B56BC85D43715BE8E74E36EAB8915 /* CachingPlayerItem-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CachingPlayerItem-prefix.pch"; sourceTree = ""; }; 6FC78755097D8F91A26C7A9C9DEA275B /* SuiteHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SuiteHooks.swift; path = Sources/Quick/Hooks/SuiteHooks.swift; sourceTree = ""; }; 727285845B61AF115505B260047096B4 /* Polling+Require.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Polling+Require.swift"; path = "Sources/Nimble/Polling+Require.swift"; sourceTree = ""; }; 7272E4D939AEBB2377FDF2E368114B87 /* QuickConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickConfiguration.h; path = Sources/QuickObjectiveC/Configuration/QuickConfiguration.h; sourceTree = ""; }; 734F553E6A6F6884558693E207B58D78 /* mach_excServer.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mach_excServer.c; path = Sources/CwlMachBadInstructionHandler/mach_excServer.c; sourceTree = ""; }; + 742ADF0A4160816DECE036A495B40032 /* CachingPlayerItemConfiguration.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingPlayerItemConfiguration.html; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Structs/CachingPlayerItemConfiguration.html; sourceTree = ""; }; 74452D1F0621AC9F56C720D50841B6E6 /* Pods-CachingPlayerItem_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-CachingPlayerItem_Example.modulemap"; sourceTree = ""; }; - 75F7810C11DB1C48BCDB7FAC203BC32B /* CachingPlayerItemDelegate.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingPlayerItemDelegate.html; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Protocols/CachingPlayerItemDelegate.html; sourceTree = ""; }; - 7743FB828C337C909A5A3EE7AA36FC2E /* jazzy.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.js; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/js/jazzy.js; sourceTree = ""; }; + 76178209E731214FB0D0220976B0189A /* PendingRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PendingRequest.swift; path = Source/PendingRequest.swift; sourceTree = ""; }; + 771B1A5A8DEC55CFEE08BBF01A2BD175 /* CachingPlayerItem.tgz */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingPlayerItem.tgz; path = docs/docsets/CachingPlayerItem.tgz; sourceTree = ""; }; 7827360ADA6D94E9172DFFFCD3C363CA /* NimbleSwiftTestingHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NimbleSwiftTestingHandler.swift; path = Sources/Nimble/Adapters/NimbleSwiftTestingHandler.swift; sourceTree = ""; }; - 784A45A205D130DD519F7327F4129D11 /* dash.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = dash.png; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/img/dash.png; sourceTree = ""; }; 78D9C4E0B0B4127448A128C2FF6B0ED2 /* URL+FileName.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+FileName.swift"; path = "Sources/Quick/URL+FileName.swift"; sourceTree = ""; }; - 7AFAB986F5E2386B7FE45F2097DB23C0 /* jazzy.search.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.search.js; path = docs/js/jazzy.search.js; sourceTree = ""; }; 7B081EBD0C08252737A0F2520D9D7995 /* SatisfyAnyOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SatisfyAnyOf.swift; path = Sources/Nimble/Matchers/SatisfyAnyOf.swift; sourceTree = ""; }; - 7BC562D0AE45B630EE39B074BB011A07 /* typeahead.jquery.js */ = {isa = PBXFileReference; includeInIndex = 1; name = typeahead.jquery.js; path = docs/js/typeahead.jquery.js; sourceTree = ""; }; + 7C7549B42A84C60B6EC0965DDAB631B8 /* undocumented.json */ = {isa = PBXFileReference; includeInIndex = 1; name = undocumented.json; path = docs/undocumented.json; sourceTree = ""; }; 7D087DD2924D24176D9FBD0C05865101 /* mach_excServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mach_excServer.h; path = Sources/CwlMachBadInstructionHandler/mach_excServer.h; sourceTree = ""; }; - 7DB5783AE876B456315696A658544C19 /* Classes.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Classes.html; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Classes.html; sourceTree = ""; }; 7DB970DD6DE656FA70BD51556EE658CC /* TestSelectorNameProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestSelectorNameProvider.swift; path = Sources/Quick/TestSelectorNameProvider.swift; sourceTree = ""; }; + 7EC616AC81F178EFA07FBC3A5D40BA20 /* spinner.gif */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.gif; name = spinner.gif; path = docs/img/spinner.gif; sourceTree = ""; }; 7F5A9DBF79578F7F414BDF81C3642587 /* CwlPreconditionTesting-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "CwlPreconditionTesting-Info.plist"; sourceTree = ""; }; 80866F3BED60668CEF76874DFB2C499E /* AssertionRecorder+Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssertionRecorder+Async.swift"; path = "Sources/Nimble/Adapters/AssertionRecorder+Async.swift"; sourceTree = ""; }; 812B7B757261CC91F4D5CEE4CBB365AA /* DSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DSL.m; path = Sources/NimbleObjectiveC/DSL.m; sourceTree = ""; }; + 813C6A11E3E896243B882ACB675303E1 /* dash.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = dash.png; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/img/dash.png; sourceTree = ""; }; 814F3B596B7C905CFBA41491CFA10F36 /* CwlBadInstructionException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlBadInstructionException.swift; path = Sources/CwlPreconditionTesting/CwlBadInstructionException.swift; sourceTree = ""; }; - 830C91D2A885F74CC6A324D35E7169A9 /* CachingPlayerItem-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "CachingPlayerItem-Info.plist"; sourceTree = ""; }; 8358C13AA5F74AE2AAB4A6B8E392E733 /* QuickSpecBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickSpecBase.h; path = Sources/QuickObjCRuntime/include/QuickSpecBase.h; sourceTree = ""; }; 842127781EEE561F787B98F6B09BD441 /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Sources/Nimble/Expression.swift; sourceTree = ""; }; 84D8F22D0EAB990FD3D770A14B01230F /* QuickSpecBase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickSpecBase.m; path = Sources/QuickObjCRuntime/QuickSpecBase.m; sourceTree = ""; }; 85C8A1552C33266B7131C800EC5EC353 /* QuickConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuickConfiguration.swift; path = Sources/Quick/Configuration/QuickConfiguration.swift; sourceTree = ""; }; 87A99AE39108DEFB24B13DDF873EAD04 /* Pods-CachingPlayerItem_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-CachingPlayerItem_Example-umbrella.h"; sourceTree = ""; }; + 89657AB115C8DA9E1FEF6D9B3D8999CC /* lunr.min.js */ = {isa = PBXFileReference; includeInIndex = 1; name = lunr.min.js; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/js/lunr.min.js; sourceTree = ""; }; 8A09D0C88FCFA2BA4FB46A48D71D4F68 /* BeIdenticalTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeIdenticalTo.swift; path = Sources/Nimble/Matchers/BeIdenticalTo.swift; sourceTree = ""; }; 8A6231DC8C4D8B744E89BA96003682AB /* CachingPlayerItem */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = CachingPlayerItem; path = CachingPlayerItem.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 8A6AA384A36A5BBDC51AAE2DF6477FDC /* AsyncAwait.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncAwait.swift; path = Sources/Nimble/Utils/AsyncAwait.swift; sourceTree = ""; }; 8A97B0E735A3C8028882301275FF6A0B /* ExampleHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleHooks.swift; path = Sources/Quick/Hooks/ExampleHooks.swift; sourceTree = ""; }; 8ACA1624684F4AEC088EECD0D91CB738 /* EndWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EndWith.swift; path = Sources/Nimble/Matchers/EndWith.swift; sourceTree = ""; }; + 8ACBE7FCC8D8AF946C34FA3CFB94A854 /* AppLogger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AppLogger.swift; path = Source/AppLogger.swift; sourceTree = ""; }; 8B0AA3E2E11FE2F9FBDD833F3B409EC8 /* CwlMachBadInstructionHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CwlMachBadInstructionHandler.m; path = Sources/CwlMachBadInstructionHandler/CwlMachBadInstructionHandler.m; sourceTree = ""; }; 8BEB9EBDFD8B62EC9CCCA4E18600F49A /* AsyncExampleHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncExampleHooks.swift; path = Sources/Quick/Hooks/AsyncExampleHooks.swift; sourceTree = ""; }; 8C5DF600EE5B8C426968E4CD443F164C /* AsyncWorld.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncWorld.swift; path = Sources/Quick/Async/AsyncWorld.swift; sourceTree = ""; }; 8DDAA5311831946542B1933DC03842D7 /* NMBExceptionCapture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NMBExceptionCapture.m; path = Sources/NimbleObjectiveC/NMBExceptionCapture.m; sourceTree = ""; }; 8E10C2B3DBD94311A01650E1062B203F /* NMBExceptionCapture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NMBExceptionCapture.h; path = Sources/NimbleObjectiveC/include/NMBExceptionCapture.h; sourceTree = ""; }; + 8E40AD4ABCAB4332961C6DD33DCBD714 /* jazzy.search.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.search.js; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/js/jazzy.search.js; sourceTree = ""; }; + 8E8C0C09FD7B722A133645E7C42554DF /* LogLevel.html */ = {isa = PBXFileReference; includeInIndex = 1; name = LogLevel.html; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Enums/LogLevel.html; sourceTree = ""; }; 8EC5965DA5E495F41026F149427B322B /* CurrentSpec.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CurrentSpec.swift; path = Sources/Quick/CurrentSpec.swift; sourceTree = ""; }; + 9198AD1EFA6069E6816BDF5A8E8DDA71 /* typeahead.jquery.js */ = {isa = PBXFileReference; includeInIndex = 1; name = typeahead.jquery.js; path = docs/js/typeahead.jquery.js; sourceTree = ""; }; 9199D850DE7CE26E9B8652A003707B0C /* Nimble.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Nimble.debug.xcconfig; sourceTree = ""; }; - 9205BB40C7AD67EF42DE634C853A0120 /* docSet.dsidx */ = {isa = PBXFileReference; includeInIndex = 1; name = docSet.dsidx; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/docSet.dsidx; sourceTree = ""; }; 924C44B12549B2FDD2AE1E7D756560E1 /* AsyncExpression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncExpression.swift; path = Sources/Nimble/AsyncExpression.swift; sourceTree = ""; }; - 924E607E5EFF40444577E6C36BC4B264 /* AppLogger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AppLogger.swift; path = Source/AppLogger.swift; sourceTree = ""; }; 934DD6D6B80D8D03313055F4C3440EC6 /* BeNil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeNil.swift; path = Sources/Nimble/Matchers/BeNil.swift; sourceTree = ""; }; 948523F871E964584F7745FA7462DDC0 /* CwlCatchException.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CwlCatchException.release.xcconfig; sourceTree = ""; }; - 957A1A665F229456A021A111F91C3393 /* CachingPlayerItem.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CachingPlayerItem.release.xcconfig; sourceTree = ""; }; 960F7C00D7B59C008A1A03940F81A280 /* Quick-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Quick-dummy.m"; sourceTree = ""; }; 978DC30E4C91FAD26579A85A06EB1645 /* CwlCatchExceptionSupport.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CwlCatchExceptionSupport.release.xcconfig; sourceTree = ""; }; + 97A291E4E8A35608F15C6EDD81FE024E /* jquery.min.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jquery.min.js; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/js/jquery.min.js; sourceTree = ""; }; 9946C230568672DD4EBF6A742FE8438F /* String+C99ExtendedIdentifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+C99ExtendedIdentifier.swift"; path = "Sources/Quick/String+C99ExtendedIdentifier.swift"; sourceTree = ""; }; 9A27901B100E9596DCBD9DDCB924B3B3 /* AsyncDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncDSL.swift; path = Sources/Quick/DSL/AsyncDSL.swift; sourceTree = ""; }; 9AA1B94C5A428565FF46130919760E74 /* CwlCatchException.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CwlCatchException.debug.xcconfig; sourceTree = ""; }; + 9B3F63973ADFAD7AE1C3E819E57BE144 /* CachingPlayerItem.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = CachingPlayerItem.modulemap; sourceTree = ""; }; 9B4B27140EB8EF3CDF0A2D887F299737 /* BeEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeEmpty.swift; path = Sources/Nimble/Matchers/BeEmpty.swift; sourceTree = ""; }; 9C575CE00D26CDB9C1E9CA22B277C131 /* AsyncMatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncMatcher.swift; path = Sources/Nimble/Matchers/AsyncMatcher.swift; sourceTree = ""; }; 9C8277D51F5ADD4D00006089F94105EE /* CwlCatchException.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = CwlCatchException.modulemap; sourceTree = ""; }; @@ -465,109 +469,109 @@ 9E8FD286F8787099492634F36F2BD22B /* QuickTestObservation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuickTestObservation.swift; path = Sources/Quick/QuickTestObservation.swift; sourceTree = ""; }; 9F5E683E75D0E1A91A3B187911096F29 /* ThrowError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThrowError.swift; path = Sources/Nimble/Matchers/ThrowError.swift; sourceTree = ""; }; A30B79740CF1E51E4245E17A5A16A6A4 /* AsyncSpec.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncSpec.swift; path = Sources/Quick/Async/AsyncSpec.swift; sourceTree = ""; }; - A358B719822650BED204ADCA56DD8375 /* CachingPlayerItem-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CachingPlayerItem-dummy.m"; sourceTree = ""; }; - A8F421EAE28F8ED580FC424497F61041 /* CachingPlayerItem.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingPlayerItem.html; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Classes/CachingPlayerItem.html; sourceTree = ""; }; - A93D18DC7031B89412559AE979B883B0 /* CachingPlayerItem.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingPlayerItem.html; path = docs/Classes/CachingPlayerItem.html; sourceTree = ""; }; - A98FC75050D72CFE1C894FE4C717E34B /* dash.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = dash.png; path = docs/img/dash.png; sourceTree = ""; }; + A632EF48C0790DEDF27D4526E356408F /* jazzy.css */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.css; path = docs/css/jazzy.css; sourceTree = ""; }; + A6380D896F0CDC53F783A988B040C926 /* jquery.min.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jquery.min.js; path = docs/js/jquery.min.js; sourceTree = ""; }; A9912AB777B6C90403988AAD23F41D81 /* CwlPreconditionTesting-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CwlPreconditionTesting-umbrella.h"; sourceTree = ""; }; AA886B7E94EBCF398FB981F4C43403CE /* RaisesException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RaisesException.swift; path = Sources/Nimble/Matchers/RaisesException.swift; sourceTree = ""; }; AA8FB5C3C35312AD587DBD03732DF917 /* Pods-CachingPlayerItem_Tests */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-CachingPlayerItem_Tests"; path = Pods_CachingPlayerItem_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AABD53E84E6A17CD94409F4BE424E151 /* search.json */ = {isa = PBXFileReference; includeInIndex = 1; name = search.json; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/search.json; sourceTree = ""; }; AB0F500431261E9FA617D5A1DCDB256F /* SourceLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SourceLocation.swift; path = Sources/Nimble/Utils/SourceLocation.swift; sourceTree = ""; }; + AE7615C752A50973539D2914A2610EC9 /* gh.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = gh.png; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/img/gh.png; sourceTree = ""; }; AEBDEDD0143A4CF89941F8FCFD386262 /* Pods-CachingPlayerItem_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-CachingPlayerItem_Example-dummy.m"; sourceTree = ""; }; + AFC9C520646993D64217D9F63D0EF58A /* badge.svg */ = {isa = PBXFileReference; includeInIndex = 1; name = badge.svg; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/badge.svg; sourceTree = ""; }; B0F03CB243E9B0C3B589495F0690D884 /* Nimble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Nimble.h; path = Sources/Nimble/Nimble.h; sourceTree = ""; }; - B27DBF2F6A1D168C6FC7C20582B47930 /* LogLevel.html */ = {isa = PBXFileReference; includeInIndex = 1; name = LogLevel.html; path = docs/Enums/LogLevel.html; sourceTree = ""; }; + B4618B721017192AEB975F19DADEA421 /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; name = index.html; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/index.html; sourceTree = ""; }; B4F263F22947887755A65015F5CFC9D3 /* CwlCatchBadInstruction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlCatchBadInstruction.swift; path = Sources/CwlPreconditionTesting/CwlCatchBadInstruction.swift; sourceTree = ""; }; B52CCF764D56ECDEE07E6B172E011D18 /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAnInstanceOf.swift; path = Sources/Nimble/Matchers/BeAnInstanceOf.swift; sourceTree = ""; }; - B66F93E843F4AFBE383A537BD031018C /* LogLevel.html */ = {isa = PBXFileReference; includeInIndex = 1; name = LogLevel.html; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Enums/LogLevel.html; sourceTree = ""; }; + B52DD1B2ACE178EEF85EE9A1F6A36299 /* Protocols.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Protocols.html; path = docs/Protocols.html; sourceTree = ""; }; + B677884FA68152C104201776D3AA4EB4 /* lunr.min.js */ = {isa = PBXFileReference; includeInIndex = 1; name = lunr.min.js; path = docs/js/lunr.min.js; sourceTree = ""; }; + B6B4603AC3ED0D56EE63EFED8B2E8FFE /* search.json */ = {isa = PBXFileReference; includeInIndex = 1; name = search.json; path = docs/search.json; sourceTree = ""; }; B830ACD510D08BD4C2A808254F7E9800 /* BeResult.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeResult.swift; path = Sources/Nimble/Matchers/BeResult.swift; sourceTree = ""; }; B840FD7E2B734F14C64AF239FC062BF6 /* World+DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "World+DSL.swift"; path = "Sources/Quick/DSL/World+DSL.swift"; sourceTree = ""; }; B89E6D27304A488340CAB6B99FF973C5 /* BeWithin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeWithin.swift; path = Sources/Nimble/Matchers/BeWithin.swift; sourceTree = ""; }; BA3331B4C307050B4B321AB8242FB701 /* QuickObjCRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickObjCRuntime.h; path = Sources/QuickObjCRuntime/include/QuickObjCRuntime.h; sourceTree = ""; }; BAE263041362D074978BB3B577DF0A05 /* Nimble */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Nimble; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BC19BC15471A4A1687E0260089FD55C5 /* Equal+TupleArray.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Equal+TupleArray.swift"; path = "Sources/Nimble/Matchers/Equal+TupleArray.swift"; sourceTree = ""; }; - BC454D16A1C70FE03CCB8EDC32165497 /* carat.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = carat.png; path = docs/img/carat.png; sourceTree = ""; }; BC89CD4AF41F647751AF403A71AD03E7 /* CwlMachBadInstructionHandler-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CwlMachBadInstructionHandler-dummy.m"; sourceTree = ""; }; BD833984B5A96D615BE3E22B1493BB7E /* ExpectationMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpectationMessage.swift; path = Sources/Nimble/ExpectationMessage.swift; sourceTree = ""; }; BDB33B0060DEBA123D6DE3AAB7D53623 /* DSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DSL.h; path = Sources/NimbleObjectiveC/include/DSL.h; sourceTree = ""; }; C031122302F7D8CC5FA91D363F3532FD /* DSL+Wait.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DSL+Wait.swift"; path = "Sources/Nimble/DSL+Wait.swift"; sourceTree = ""; }; + C03DFB956709FC03590406D4BF523714 /* Structs.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Structs.html; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Structs.html; sourceTree = ""; }; C058D7C5A1F00F83BBB583AA2A69D5A7 /* Stringers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stringers.swift; path = Sources/Nimble/Utils/Stringers.swift; sourceTree = ""; }; C1DF80A1C1ACA31F49AB97C53243E9E0 /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = Sources/Quick/Filter.swift; sourceTree = ""; }; + C217F7D593C3CF25CCFECB1A5639F050 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; C2A45AD34C96D97DAAC4C22F198A6E04 /* Pods-CachingPlayerItem_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CachingPlayerItem_Example.release.xcconfig"; sourceTree = ""; }; C2D577E548C1EB15AD711AE248F9E951 /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThanOrEqualTo.swift; path = Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift; sourceTree = ""; }; + C41BA045F9BED8B0B174ECB5F99B8511 /* Enums.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Enums.html; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Enums.html; sourceTree = ""; }; C533CBA1B86E4713E15AE2863C275293 /* Equal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Equal.swift; path = Sources/Nimble/Matchers/Equal.swift; sourceTree = ""; }; - C66EB2711568718C762BEE8D6A129D6C /* CachingPlayerItem.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = CachingPlayerItem.modulemap; sourceTree = ""; }; + C541EB6BE6ED01D01616DDF33D068A5E /* carat.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = carat.png; path = docs/img/carat.png; sourceTree = ""; }; C6E6F0423B9285DDAACE1D1F0A0087D3 /* AsyncExample.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncExample.swift; path = Sources/Quick/Examples/AsyncExample.swift; sourceTree = ""; }; + C702230B3A4A3DEEE80B27B9229988C9 /* CachingPlayerItem-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CachingPlayerItem-dummy.m"; sourceTree = ""; }; C7C23A97D5E391B8BC4CF9E14E9B3B25 /* Requirement.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Requirement.swift; path = Sources/Nimble/Requirement.swift; sourceTree = ""; }; C7C643B9B6D0B0B30694D696BE857EF5 /* Pods-CachingPlayerItem_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CachingPlayerItem_Example-Info.plist"; sourceTree = ""; }; C844570D34F1E5B123F30AA895A668DC /* CwlPreconditionTesting-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CwlPreconditionTesting-dummy.m"; sourceTree = ""; }; - C9EA5DAD5285EC7220B478218C628C2F /* spinner.gif */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.gif; name = spinner.gif; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/img/spinner.gif; sourceTree = ""; }; - CACEFB4D3B6A85B49B9ED9CE52B82A6F /* jazzy.css */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.css; path = docs/css/jazzy.css; sourceTree = ""; }; - CAD72D65D45A598417E0F0A6C20BD03A /* Classes.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Classes.html; path = docs/Classes.html; sourceTree = ""; }; - CB6F06134C7F8F3118D560AEFB8256DA /* lunr.min.js */ = {isa = PBXFileReference; includeInIndex = 1; name = lunr.min.js; path = docs/js/lunr.min.js; sourceTree = ""; }; + C9D88217312FB7AB783E7D489ED6EDB9 /* CachingPlayerItemDelegate.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingPlayerItemDelegate.html; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Protocols/CachingPlayerItemDelegate.html; sourceTree = ""; }; + CB24044E91F31F927329F020E8C7EF55 /* jazzy.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.js; path = docs/js/jazzy.js; sourceTree = ""; }; CBDD71AC9161D2132369BCD91E180313 /* MatcherProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherProtocols.swift; path = Sources/Nimble/Matchers/MatcherProtocols.swift; sourceTree = ""; }; CC399A290E5134E690E256625CEA1A37 /* Matcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Matcher.swift; path = Sources/Nimble/Matchers/Matcher.swift; sourceTree = ""; }; CC56497384E780278F916D6C57EA4951 /* CwlPreconditionTesting */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = CwlPreconditionTesting; path = CwlPreconditionTesting.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CD9096776D09651F87C54FE79847F44D /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; name = index.html; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/index.html; sourceTree = ""; }; CE4F05985E14A4DBA9319F7451500F38 /* Equal+Tuple.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Equal+Tuple.swift"; path = "Sources/Nimble/Matchers/Equal+Tuple.swift"; sourceTree = ""; }; - D11F751E2F79F4E8718F870BB10BB495 /* CachingPlayerItem.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = CachingPlayerItem.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; D26432F0BF4D912E39130691BD532D03 /* Negation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Negation.swift; path = Sources/Nimble/Matchers/Negation.swift; sourceTree = ""; }; + D27BEE1843E8B22DCE183915161FC1D7 /* spinner.gif */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.gif; name = spinner.gif; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/img/spinner.gif; sourceTree = ""; }; D2AD834000B280096FEB80FBEBD9A414 /* CwlPosixPreconditionTesting */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = CwlPosixPreconditionTesting; path = CwlPosixPreconditionTesting.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D2E79603727F03D57F2E60FEF86B3FE6 /* jazzy.css */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.css; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/css/jazzy.css; sourceTree = ""; }; D32ED24BA18BEC46F8D3095F86363BFD /* AsyncExampleGroup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncExampleGroup.swift; path = Sources/Quick/Async/AsyncExampleGroup.swift; sourceTree = ""; }; D3710DDE0AB41CE30DE32403A6662103 /* Pods-CachingPlayerItem_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-CachingPlayerItem_Tests.modulemap"; sourceTree = ""; }; - D3DDBE4F09C5186E2A72FD575B5A36FF /* typeahead.jquery.js */ = {isa = PBXFileReference; includeInIndex = 1; name = typeahead.jquery.js; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/js/typeahead.jquery.js; sourceTree = ""; }; + D4E46401360CE37270DB0A06C9D6A4FB /* LogLevel.html */ = {isa = PBXFileReference; includeInIndex = 1; name = LogLevel.html; path = docs/Enums/LogLevel.html; sourceTree = ""; }; D75AA6F4596B47B195092556F7622D6D /* BeAKindOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAKindOf.swift; path = Sources/Nimble/Matchers/BeAKindOf.swift; sourceTree = ""; }; D7A3305076E39F887374BE6563DF9FD8 /* HooksPhase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HooksPhase.swift; path = Sources/Quick/Hooks/HooksPhase.swift; sourceTree = ""; }; D8DC6582D12740E1319D8EDA1EE01495 /* Pods-CachingPlayerItem_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CachingPlayerItem_Tests.debug.xcconfig"; sourceTree = ""; }; D98B88E3D6E3E20B9AFF606951940627 /* DSL+AsyncAwait.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DSL+AsyncAwait.swift"; path = "Sources/Nimble/DSL+AsyncAwait.swift"; sourceTree = ""; }; D9A5CED0E20FFC458251D9F1B39E9E56 /* ToSucceed.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToSucceed.swift; path = Sources/Nimble/Matchers/ToSucceed.swift; sourceTree = ""; }; DA1CAF837E658527708A866443BF5F75 /* Pods-CachingPlayerItem_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-CachingPlayerItem_Tests-dummy.m"; sourceTree = ""; }; - DB044C92F45FE5FEAC623A7138A6086C /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; + DABAE67020387EC1DEB4D614F445A79B /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; name = index.html; path = docs/index.html; sourceTree = ""; }; DB40C687491728A3C38AAB00933319F3 /* CwlDarwinDefinitions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlDarwinDefinitions.swift; path = Sources/CwlPreconditionTesting/CwlDarwinDefinitions.swift; sourceTree = ""; }; DB659AD4D143586181E9D1B76689CD8C /* Quick-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Quick-prefix.pch"; sourceTree = ""; }; DBD7AEA1D34691169E2852ADEA17A853 /* BeLessThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThan.swift; path = Sources/Nimble/Matchers/BeLessThan.swift; sourceTree = ""; }; DC84494EAA270DCC4EDDF38E28C184A7 /* Nimble-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nimble-prefix.pch"; sourceTree = ""; }; + DCADCC18663838D4A77EAA84692A622F /* CachingPlayerItem.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CachingPlayerItem.debug.xcconfig; sourceTree = ""; }; DD4611592D96902A726C37A2575027E3 /* CwlMachBadInstructionHandler.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CwlMachBadInstructionHandler.release.xcconfig; sourceTree = ""; }; DD8B7D9CFCB8048E7190AF94ACD737B7 /* StopTest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StopTest.swift; path = Sources/Quick/StopTest.swift; sourceTree = ""; }; DE792BC237403FF58FE096CB9E372062 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; DF428A36EE044403E19AF6993A20B510 /* CwlCatchExceptionSupport.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = CwlCatchExceptionSupport.modulemap; sourceTree = ""; }; DF7EA634A584964E7CD27D1A9A00328C /* CwlCatchExceptionSupport-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CwlCatchExceptionSupport-prefix.pch"; sourceTree = ""; }; - E04289F8AD10CBA2A4570FDB3749B1C8 /* undocumented.json */ = {isa = PBXFileReference; includeInIndex = 1; name = undocumented.json; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/undocumented.json; sourceTree = ""; }; E053EDCA12F098DA5736AA0E8A4B1EA1 /* Expectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expectation.swift; path = Sources/Nimble/Expectation.swift; sourceTree = ""; }; + E09F02D5A461A0F5610840A1C226A8D6 /* Enums.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Enums.html; path = docs/Enums.html; sourceTree = ""; }; E0BC8BB0FE4725CF87EB0A9F5D400FD6 /* CwlCatchException */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = CwlCatchException; path = CwlCatchException.framework; sourceTree = BUILT_PRODUCTS_DIR; }; E1176A8E7C8F4162FFCA404BE6EEBB1C /* CwlMachBadInstructionHandler */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = CwlMachBadInstructionHandler; path = CwlMachBadInstructionHandler.framework; sourceTree = BUILT_PRODUCTS_DIR; }; E17BCE4FD86C91E6A18FFEAFB71FD504 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - E1AE21F56977FB1922E7309BDE904346 /* CachingPlayerItemDelegate.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingPlayerItemDelegate.html; path = docs/Protocols/CachingPlayerItemDelegate.html; sourceTree = ""; }; E3175669EC99FC1B2E97FAD01B812A2E /* CwlCatchExceptionSupport-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CwlCatchExceptionSupport-dummy.m"; sourceTree = ""; }; + E4BE52FFB4E4C4489E63B6474AFAFAF1 /* highlight.css */ = {isa = PBXFileReference; includeInIndex = 1; name = highlight.css; path = docs/css/highlight.css; sourceTree = ""; }; E518FEC21DAC827E711F2DE1ED4FCBF9 /* CwlMachBadInstructionHandler-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CwlMachBadInstructionHandler-umbrella.h"; sourceTree = ""; }; E55D8EE918317B05053CB6D426C37FB4 /* CwlCatchExceptionSupport-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CwlCatchExceptionSupport-umbrella.h"; sourceTree = ""; }; + E609505E48CDA960080DFEFD29C62606 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = docs/docsets/CachingPlayerItem.docset/Contents/Info.plist; sourceTree = ""; }; E660CEDD9984520671374A01FC77D77C /* ExampleGroup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleGroup.swift; path = Sources/Quick/ExampleGroup.swift; sourceTree = ""; }; + E718D02E7ACA8AF374908326424DD19D /* typeahead.jquery.js */ = {isa = PBXFileReference; includeInIndex = 1; name = typeahead.jquery.js; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/js/typeahead.jquery.js; sourceTree = ""; }; E77EFE5D58E902C62E82C82457493963 /* Map.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Map.swift; path = Sources/Nimble/Matchers/Map.swift; sourceTree = ""; }; E90285FB8827FA97213E64FC0316B0C8 /* CwlCatchException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CwlCatchException.h; path = Sources/CwlCatchExceptionSupport/include/CwlCatchException.h; sourceTree = ""; }; E948624B089B84DEBD7A0F07EE9D921D /* Callsite.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Callsite.swift; path = Sources/Quick/Callsite.swift; sourceTree = ""; }; - EB689FD9F259D15DA2B71BA980186645 /* Protocols.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Protocols.html; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Protocols.html; sourceTree = ""; }; + EAF30D1B3AE9DAE2B82ACDC151BCE777 /* CachingPlayerItemConfiguration.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingPlayerItemConfiguration.html; path = docs/Structs/CachingPlayerItemConfiguration.html; sourceTree = ""; }; EC9B65410CACE4C2A5CBD50957182093 /* Quick.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Quick.h; path = Sources/QuickObjectiveC/Quick.h; sourceTree = ""; }; ECD5401400D6B9BEB2D658B56A664582 /* ThrowAssertion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThrowAssertion.swift; path = Sources/Nimble/Matchers/ThrowAssertion.swift; sourceTree = ""; }; EDE01D515EFCEE160617FF9AA536E581 /* CwlCatchException-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "CwlCatchException-Info.plist"; sourceTree = ""; }; EE07C0D6707CAFD4E25D81D250D800FA /* Example.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Example.swift; path = Sources/Quick/Examples/Example.swift; sourceTree = ""; }; + F03A2AC77A35D1A93CC564C7FAA4A8EB /* jazzy.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.js; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/js/jazzy.js; sourceTree = ""; }; F159A8EE59163A5B6452321421DAFBD3 /* CwlMachBadInstructionHandler-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "CwlMachBadInstructionHandler-Info.plist"; sourceTree = ""; }; F1970AA0814F5A4601580F35852F0381 /* CwlPreconditionTesting.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CwlPreconditionTesting.debug.xcconfig; sourceTree = ""; }; - F20ADCB7B3D9197526C98880EC6D33B7 /* MediaFileHandle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MediaFileHandle.swift; path = Source/MediaFileHandle.swift; sourceTree = ""; }; F2FF5598DCABA22DC3F4A71165EE9DA9 /* QCKDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QCKDSL.h; path = Sources/QuickObjectiveC/DSL/QCKDSL.h; sourceTree = ""; }; F33AF786A1C5679C6F8830A8B0E4E80C /* AsyncWorld+DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AsyncWorld+DSL.swift"; path = "Sources/Quick/DSL/AsyncWorld+DSL.swift"; sourceTree = ""; }; - F35F4D4A0F5C17BEA2CAAB858CA2C6A5 /* CachingPlayerItem.xml */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingPlayerItem.xml; path = docs/docsets/CachingPlayerItem.xml; sourceTree = ""; }; F41C35966E92CBCF284BCF820FE53ABB /* CwlMachBadInstructionHandler.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = CwlMachBadInstructionHandler.modulemap; sourceTree = ""; }; F4868ECDDB40A10CB942F995EE1F6CF3 /* NimbleTimeInterval.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NimbleTimeInterval.swift; path = Sources/Nimble/Utils/NimbleTimeInterval.swift; sourceTree = ""; }; - F5F5A7621F82A9BAA4A89D25F88CEE58 /* URLResponseExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLResponseExtension.swift; path = Source/URLResponseExtension.swift; sourceTree = ""; }; - F6095F4C2739D787484B9EDC13CDB670 /* URLExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLExtension.swift; path = Source/URLExtension.swift; sourceTree = ""; }; + F56F85023535DE33CB2A4F88E460B3CC /* badge.svg */ = {isa = PBXFileReference; includeInIndex = 1; name = badge.svg; path = docs/badge.svg; sourceTree = ""; }; F6E07D9449996759F9D67A9AC7D5A539 /* CwlCatchExceptionSupport.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CwlCatchExceptionSupport.debug.xcconfig; sourceTree = ""; }; F6EF5A91DCBDBBCF28DFAE025082C601 /* AllPass.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllPass.swift; path = Sources/Nimble/Matchers/AllPass.swift; sourceTree = ""; }; F8F69CB6EC4CAEA45D8C30BD0EC63FBB /* CwlMachBadInstructionHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CwlMachBadInstructionHandler.h; path = Sources/CwlMachBadInstructionHandler/include/CwlMachBadInstructionHandler.h; sourceTree = ""; }; - F9E3F1A73DA619F6BD29A1E57A1075A0 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; - FABB95A57D6E0066EDA88AD6080E3097 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = docs/docsets/CachingPlayerItem.docset/Contents/Info.plist; sourceTree = ""; }; FCD9784D0D43C9C85E50913CF97A29D7 /* CwlCatchException-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CwlCatchException-dummy.m"; sourceTree = ""; }; - FD89C8D4E29F82A3A28521581EC19F70 /* jazzy.search.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.search.js; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/js/jazzy.search.js; sourceTree = ""; }; - FEBEE1630A47663480852C1E742261EC /* spinner.gif */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.gif; name = spinner.gif; path = docs/img/spinner.gif; sourceTree = ""; }; + FD8369C75222367FFC7CF0C2B89F146C /* CachingPlayerItem.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingPlayerItem.html; path = docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Classes/CachingPlayerItem.html; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -596,6 +600,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 1B9A1F1479A3A71366C524135774C7EF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D1413F57590F7E67190BA03B7A2F206 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 237C978329FEC27D73C6ABBA809DBFD2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -629,14 +641,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 6D2C28A5252ED7C6941E440E052CA6BB /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C0AB02184DA06F991F4B5283ACB3ABD6 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 9D8BFD9AD424B7A73EAB7915EF1D2573 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -728,6 +732,21 @@ path = "../Target Support Files/CwlCatchExceptionSupport"; sourceTree = ""; }; + 34FBC21A974B07380FAF48F777431C15 /* Support Files */ = { + isa = PBXGroup; + children = ( + 9B3F63973ADFAD7AE1C3E819E57BE144 /* CachingPlayerItem.modulemap */, + C702230B3A4A3DEEE80B27B9229988C9 /* CachingPlayerItem-dummy.m */, + 034351D1B9282E0ACE5410E2032B475E /* CachingPlayerItem-Info.plist */, + 6F2B56BC85D43715BE8E74E36EAB8915 /* CachingPlayerItem-prefix.pch */, + 2A69E69526FD35834D8787D4FFC27126 /* CachingPlayerItem-umbrella.h */, + DCADCC18663838D4A77EAA84692A622F /* CachingPlayerItem.debug.xcconfig */, + 652F7655B26126652267A3154842EE55 /* CachingPlayerItem.release.xcconfig */, + ); + name = "Support Files"; + path = "Example/Pods/Target Support Files/CachingPlayerItem"; + sourceTree = ""; + }; 3716154DF12D1550B84D5852DBA067E8 /* Support Files */ = { isa = PBXGroup; children = ( @@ -753,27 +772,30 @@ path = CwlCatchException; sourceTree = ""; }; - 488AD3F2EEDF34CB47EC2C7F37C4094C /* Support Files */ = { + 4D3BE8FF26D4666187DB8F3DAD45463F /* Development Pods */ = { isa = PBXGroup; children = ( - C66EB2711568718C762BEE8D6A129D6C /* CachingPlayerItem.modulemap */, - A358B719822650BED204ADCA56DD8375 /* CachingPlayerItem-dummy.m */, - 830C91D2A885F74CC6A324D35E7169A9 /* CachingPlayerItem-Info.plist */, - 66B932A6A9C342C6425397C65E4DA917 /* CachingPlayerItem-prefix.pch */, - 1B718BEBBA0E9B6D3D2BFD371591D3AE /* CachingPlayerItem-umbrella.h */, - 66B28FF47F05C2A4821911BDA22DEE84 /* CachingPlayerItem.debug.xcconfig */, - 957A1A665F229456A021A111F91C3393 /* CachingPlayerItem.release.xcconfig */, + 567F1805E5CFE0FB1660DC24F66E26B4 /* CachingPlayerItem */, ); - name = "Support Files"; - path = "Example/Pods/Target Support Files/CachingPlayerItem"; + name = "Development Pods"; sourceTree = ""; }; - 4D3BE8FF26D4666187DB8F3DAD45463F /* Development Pods */ = { + 567F1805E5CFE0FB1660DC24F66E26B4 /* CachingPlayerItem */ = { isa = PBXGroup; children = ( - 8353BAE9617922F95C128134BEB63E7D /* CachingPlayerItem */, + 8ACBE7FCC8D8AF946C34FA3CFB94A854 /* AppLogger.swift */, + 6CE7A6B4047A80BA69A482386843B164 /* CachingPlayerItem.swift */, + 16E6FD87C97C632445473E1AD365A302 /* CachingPlayerItemConfiguration.swift */, + 5BC8235954DDF90004F369B98A074EA8 /* MediaFileHandle.swift */, + 76178209E731214FB0D0220976B0189A /* PendingRequest.swift */, + 279DEA457009A8BF5851F9A258196435 /* ResourceLoaderDelegate.swift */, + 1067F5AE46F7D134ACCB864AE2A5C030 /* URLExtension.swift */, + 3F7226D2140D40B94EA8DF10135A30CA /* URLResponseExtension.swift */, + 8E61AF7CD3F96EEEC8C97983130BD1B9 /* Pod */, + 34FBC21A974B07380FAF48F777431C15 /* Support Files */, ); - name = "Development Pods"; + name = CachingPlayerItem; + path = ../..; sourceTree = ""; }; 5D05ECB5B21F83F2D5DFEDCA62B5E277 /* CwlCatchExceptionSupport */ = { @@ -809,64 +831,6 @@ path = CwlPreconditionTesting; sourceTree = ""; }; - 6E6307E29D05E0A765817DF30EC674FC /* Pod */ = { - isa = PBXGroup; - children = ( - 5388B93426EC46ADF16634319B4BA23D /* badge.svg */, - 07008EF04A6AA3FCE574CDD3D57D60F3 /* badge.svg */, - A93D18DC7031B89412559AE979B883B0 /* CachingPlayerItem.html */, - A8F421EAE28F8ED580FC424497F61041 /* CachingPlayerItem.html */, - D11F751E2F79F4E8718F870BB10BB495 /* CachingPlayerItem.podspec */, - 26DB2E42B8D9F4409ABB93C65EBB34DE /* CachingPlayerItem.tgz */, - F35F4D4A0F5C17BEA2CAAB858CA2C6A5 /* CachingPlayerItem.xml */, - 17452639EF6002439D9FDFF27E1090B4 /* CachingPlayerItemConfiguration.html */, - 241724AED8974488C9A440E6A90FD4BF /* CachingPlayerItemConfiguration.html */, - 75F7810C11DB1C48BCDB7FAC203BC32B /* CachingPlayerItemDelegate.html */, - E1AE21F56977FB1922E7309BDE904346 /* CachingPlayerItemDelegate.html */, - 1C1BB892B17ABA27A60DA2BD60B8F9A7 /* carat.png */, - BC454D16A1C70FE03CCB8EDC32165497 /* carat.png */, - CAD72D65D45A598417E0F0A6C20BD03A /* Classes.html */, - 7DB5783AE876B456315696A658544C19 /* Classes.html */, - 784A45A205D130DD519F7327F4129D11 /* dash.png */, - A98FC75050D72CFE1C894FE4C717E34B /* dash.png */, - 9205BB40C7AD67EF42DE634C853A0120 /* docSet.dsidx */, - 5A94DED8979587B4DD736D5093C4A497 /* Enums.html */, - 5D0066CD8D2AF8516FB15CEBE9463B80 /* Enums.html */, - 2436840460CC398CC3943B75FB017B61 /* gh.png */, - 6AC819E00FF0B0131858BF7A870DA1D7 /* gh.png */, - 5F0BABD35B3972C3B450F96F68BA3402 /* highlight.css */, - 3D69E697E7B2DB36953E6586FE043057 /* highlight.css */, - CD9096776D09651F87C54FE79847F44D /* index.html */, - 193663ABD5BE642FCE4CB7D5835706C0 /* index.html */, - FABB95A57D6E0066EDA88AD6080E3097 /* Info.plist */, - CACEFB4D3B6A85B49B9ED9CE52B82A6F /* jazzy.css */, - D2E79603727F03D57F2E60FEF86B3FE6 /* jazzy.css */, - 7743FB828C337C909A5A3EE7AA36FC2E /* jazzy.js */, - 47DA2E8F038DDF6A6BFF8BAF92DF91C2 /* jazzy.js */, - FD89C8D4E29F82A3A28521581EC19F70 /* jazzy.search.js */, - 7AFAB986F5E2386B7FE45F2097DB23C0 /* jazzy.search.js */, - 280690B43C975E9E920DEA481B74C40A /* jquery.min.js */, - 26E0E9EC2B098A0CF66040ADDD0C7A01 /* jquery.min.js */, - F9E3F1A73DA619F6BD29A1E57A1075A0 /* LICENSE */, - B66F93E843F4AFBE383A537BD031018C /* LogLevel.html */, - B27DBF2F6A1D168C6FC7C20582B47930 /* LogLevel.html */, - 21C9409F2AF5995D7DEFE60F19DFD976 /* lunr.min.js */, - CB6F06134C7F8F3118D560AEFB8256DA /* lunr.min.js */, - EB689FD9F259D15DA2B71BA980186645 /* Protocols.html */, - 2020F8DE0D3E263D2D9FEFEBEA8C170A /* Protocols.html */, - DB044C92F45FE5FEAC623A7138A6086C /* README.md */, - 6766B23C5084ED68F8C30A1D13F1B9BD /* search.json */, - 6B28592A3B5B98079F9E51083BD64F33 /* search.json */, - C9EA5DAD5285EC7220B478218C628C2F /* spinner.gif */, - FEBEE1630A47663480852C1E742261EC /* spinner.gif */, - D3DDBE4F09C5186E2A72FD575B5A36FF /* typeahead.jquery.js */, - 7BC562D0AE45B630EE39B074BB011A07 /* typeahead.jquery.js */, - E04289F8AD10CBA2A4570FDB3749B1C8 /* undocumented.json */, - 6E0DF57B543DDF48B894ECE336ABFB69 /* undocumented.json */, - ); - name = Pod; - sourceTree = ""; - }; 7B8B455A8857C7DAEC4A6DDA2872CB9C /* Nimble */ = { isa = PBXGroup; children = ( @@ -953,22 +917,66 @@ path = Nimble; sourceTree = ""; }; - 8353BAE9617922F95C128134BEB63E7D /* CachingPlayerItem */ = { + 8E61AF7CD3F96EEEC8C97983130BD1B9 /* Pod */ = { isa = PBXGroup; children = ( - 924E607E5EFF40444577E6C36BC4B264 /* AppLogger.swift */, - 4CAF7FE2FF8C859A1915FA22F4310C17 /* CachingPlayerItem.swift */, - 22B94E56984BF6DFB084BAF09A042507 /* CachingPlayerItemConfiguration.swift */, - F20ADCB7B3D9197526C98880EC6D33B7 /* MediaFileHandle.swift */, - 49FB7F462D76DC21FEB7F970503336D6 /* PendingRequest.swift */, - 22D1F4758F4DDB45283940EDF88978BB /* ResourceLoaderDelegate.swift */, - F6095F4C2739D787484B9EDC13CDB670 /* URLExtension.swift */, - F5F5A7621F82A9BAA4A89D25F88CEE58 /* URLResponseExtension.swift */, - 6E6307E29D05E0A765817DF30EC674FC /* Pod */, - 488AD3F2EEDF34CB47EC2C7F37C4094C /* Support Files */, + F56F85023535DE33CB2A4F88E460B3CC /* badge.svg */, + AFC9C520646993D64217D9F63D0EF58A /* badge.svg */, + 573AEA30CD55BC553C1B731E379910EE /* CachingPlayerItem.html */, + FD8369C75222367FFC7CF0C2B89F146C /* CachingPlayerItem.html */, + 0461D46E0237B7C91EACCD48DCF1712D /* CachingPlayerItem.podspec */, + 771B1A5A8DEC55CFEE08BBF01A2BD175 /* CachingPlayerItem.tgz */, + 6EB73D84CC6314567D6322FA95D57578 /* CachingPlayerItem.xml */, + 3F0A24EC2A53580D4800B19BCA779FAD /* CachingPlayerItemConfiguration.html */, + 742ADF0A4160816DECE036A495B40032 /* CachingPlayerItemConfiguration.html */, + 4FAD55138DE2A3E2E3101DBE933150FA /* CachingPlayerItemConfiguration.html */, + EAF30D1B3AE9DAE2B82ACDC151BCE777 /* CachingPlayerItemConfiguration.html */, + C9D88217312FB7AB783E7D489ED6EDB9 /* CachingPlayerItemDelegate.html */, + 39294C41C3397B76B9E54CEE0890EE6D /* CachingPlayerItemDelegate.html */, + 3B80F8832329948FB57D1302DF33842B /* carat.png */, + C541EB6BE6ED01D01616DDF33D068A5E /* carat.png */, + 165CF54B8677C36053FA5E591F983070 /* Classes.html */, + 247CAF5960FDB7865342B946EA54A6BE /* Classes.html */, + 813C6A11E3E896243B882ACB675303E1 /* dash.png */, + 5A0D510B8AEC490CB9BB33F56722C9C0 /* dash.png */, + 02E755FEA37E477B2AD9C925AC35EA4C /* docSet.dsidx */, + C41BA045F9BED8B0B174ECB5F99B8511 /* Enums.html */, + E09F02D5A461A0F5610840A1C226A8D6 /* Enums.html */, + AE7615C752A50973539D2914A2610EC9 /* gh.png */, + 52CC27B47BE284A2A9E3E8457703FCF3 /* gh.png */, + E4BE52FFB4E4C4489E63B6474AFAFAF1 /* highlight.css */, + 35797E04427A22CF4424770039122FDF /* highlight.css */, + B4618B721017192AEB975F19DADEA421 /* index.html */, + DABAE67020387EC1DEB4D614F445A79B /* index.html */, + E609505E48CDA960080DFEFD29C62606 /* Info.plist */, + A632EF48C0790DEDF27D4526E356408F /* jazzy.css */, + 17BBD4A195864A7D8A466C206EEE77F0 /* jazzy.css */, + F03A2AC77A35D1A93CC564C7FAA4A8EB /* jazzy.js */, + CB24044E91F31F927329F020E8C7EF55 /* jazzy.js */, + 8E40AD4ABCAB4332961C6DD33DCBD714 /* jazzy.search.js */, + 68319932ABB25CF0141DFA08856A496A /* jazzy.search.js */, + 97A291E4E8A35608F15C6EDD81FE024E /* jquery.min.js */, + A6380D896F0CDC53F783A988B040C926 /* jquery.min.js */, + C217F7D593C3CF25CCFECB1A5639F050 /* LICENSE */, + 8E8C0C09FD7B722A133645E7C42554DF /* LogLevel.html */, + D4E46401360CE37270DB0A06C9D6A4FB /* LogLevel.html */, + 89657AB115C8DA9E1FEF6D9B3D8999CC /* lunr.min.js */, + B677884FA68152C104201776D3AA4EB4 /* lunr.min.js */, + 64FF0CBE6395A9431EDC20C66C96D58C /* Protocols.html */, + B52DD1B2ACE178EEF85EE9A1F6A36299 /* Protocols.html */, + 03A49A494B66E9FE4333DE133A355928 /* README.md */, + AABD53E84E6A17CD94409F4BE424E151 /* search.json */, + B6B4603AC3ED0D56EE63EFED8B2E8FFE /* search.json */, + D27BEE1843E8B22DCE183915161FC1D7 /* spinner.gif */, + 7EC616AC81F178EFA07FBC3A5D40BA20 /* spinner.gif */, + C03DFB956709FC03590406D4BF523714 /* Structs.html */, + 2906CA99C8361D3A927F67F401FA3407 /* Structs.html */, + E718D02E7ACA8AF374908326424DD19D /* typeahead.jquery.js */, + 9198AD1EFA6069E6816BDF5A8E8DDA71 /* typeahead.jquery.js */, + 405C7A51769DB8E6BEE4D3E2526F0FAD /* undocumented.json */, + 7C7549B42A84C60B6EC0965DDAB631B8 /* undocumented.json */, ); - name = CachingPlayerItem; - path = ../..; + name = Pod; sourceTree = ""; }; 98C46215ECE4A4875B26BFA92B4C531A /* Support Files */ = { @@ -1207,20 +1215,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 7E4F967D00A928EC04C284D3B82BE752 /* Headers */ = { + 8BCE0D8414D22702512DEE35B529895E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 37B869A0EF06185A29F2ED5B0C9F2F29 /* CwlCatchException.h in Headers */, - AF6D08939F5591CBF2A02030B8360345 /* CwlCatchExceptionSupport-umbrella.h in Headers */, + 1A2024BCE25A33C62313B1131A349D55 /* CwlPosixPreconditionTesting-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8BCE0D8414D22702512DEE35B529895E /* Headers */ = { + 935A91DA0BC18E6036A1AB74631C6717 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 1A2024BCE25A33C62313B1131A349D55 /* CwlPosixPreconditionTesting-umbrella.h in Headers */, + 6EC688643958E29B2BC16F07288CC4B0 /* CwlCatchException.h in Headers */, + FC3D0C6F94A6E0D15AE00328C3261D02 /* CwlCatchExceptionSupport-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1273,7 +1281,7 @@ buildRules = ( ); dependencies = ( - 63330C81FD42F878F46D790C5CDAA696 /* PBXTargetDependency */, + 1F628BC33FE661BC20D78CE796985B94 /* PBXTargetDependency */, ); name = CwlCatchException; productName = CwlCatchException; @@ -1328,7 +1336,7 @@ buildRules = ( ); dependencies = ( - 7F342B97D04B1B85C5311AA4627FE2C3 /* PBXTargetDependency */, + 6D71C328A70751BB44C4CB78883971B3 /* PBXTargetDependency */, ); name = "Pods-CachingPlayerItem_Example"; productName = Pods_CachingPlayerItem_Example; @@ -1347,7 +1355,7 @@ buildRules = ( ); dependencies = ( - 10AAF3EBC07DDED4EB884177C45A32DE /* PBXTargetDependency */, + 1F34E2401D2380D0D16C0B14AD20EE97 /* PBXTargetDependency */, ); name = Nimble; productName = Nimble; @@ -1366,14 +1374,14 @@ buildRules = ( ); dependencies = ( - 849022AA5FFB04064505D7864C7BA50C /* PBXTargetDependency */, - 972A5302B7AA05560913CBEB8BB0F84E /* PBXTargetDependency */, - A004A92019C40AF5E5F2AABF43AE4DD6 /* PBXTargetDependency */, - BDCF1A3FCD65EEAD1D8FA2758DC67063 /* PBXTargetDependency */, - E37109363F8BADF3876D174006F22B99 /* PBXTargetDependency */, - 87FA81C885F0C37CDFDF7FD0A8D63523 /* PBXTargetDependency */, - 255316C05B066018AAF9C03DF6990594 /* PBXTargetDependency */, - 8E0F119F294CB1F810BFFC6E480A9C3B /* PBXTargetDependency */, + 4B7971F7BA55E56EAE0D427E554924A9 /* PBXTargetDependency */, + 3001D8B3E18346EA16EC9AF8892B1778 /* PBXTargetDependency */, + BD7481C62C1A9F1A4A58171104BCF10B /* PBXTargetDependency */, + 49E64C6A9D2BD0987FDA88F95E3B38F6 /* PBXTargetDependency */, + E00669584DEE83AC868D74FF8C822F29 /* PBXTargetDependency */, + 025636066BC39D75713E3D643B20A2C7 /* PBXTargetDependency */, + 2A4D4353ABF0D1667B829D4DB859EBA9 /* PBXTargetDependency */, + 5FA95D312B2BBBE65DBE40C7BBDC5917 /* PBXTargetDependency */, ); name = "Pods-CachingPlayerItem_Tests"; productName = Pods_CachingPlayerItem_Tests; @@ -1400,12 +1408,12 @@ }; CA3D99499260B4C146BBB22670C1D8AD /* CwlCatchExceptionSupport */ = { isa = PBXNativeTarget; - buildConfigurationList = 8CAFFE9422B1A41D5892E461D9778344 /* Build configuration list for PBXNativeTarget "CwlCatchExceptionSupport" */; + buildConfigurationList = 6C02E90ACDF5BE4FFF2E2B2F87B6AAC4 /* Build configuration list for PBXNativeTarget "CwlCatchExceptionSupport" */; buildPhases = ( - 7E4F967D00A928EC04C284D3B82BE752 /* Headers */, - F88C555F5F0146F7B4B32FC9AB6D93F5 /* Sources */, - 6D2C28A5252ED7C6941E440E052CA6BB /* Frameworks */, - AB1D2685F92881E78C88E863C4710E1C /* Resources */, + 935A91DA0BC18E6036A1AB74631C6717 /* Headers */, + CC0D1879581B5AFD7FAA62CCE90C5D81 /* Sources */, + 1B9A1F1479A3A71366C524135774C7EF /* Frameworks */, + E3607A78143A847BA47D7FEDB4B8D5BB /* Resources */, ); buildRules = ( ); @@ -1428,9 +1436,9 @@ buildRules = ( ); dependencies = ( - AECE088C37E1307877A8EE9801DD4408 /* PBXTargetDependency */, - 034257B2049492223417921D45B2B083 /* PBXTargetDependency */, - E9D0BF45BA9DA0E807D52E9757F743C6 /* PBXTargetDependency */, + F47F4F0FC2728AB8D7588FBF247496E5 /* PBXTargetDependency */, + FAB40406D07FCD784FDBC73EEF32D93C /* PBXTargetDependency */, + 99F80433D57F074B0B6030A76FEC63B2 /* PBXTargetDependency */, ); name = CwlPreconditionTesting; productName = CwlPreconditionTesting; @@ -1529,14 +1537,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - AB1D2685F92881E78C88E863C4710E1C /* Resources */ = { + CDC317CDAB48690109003C11F95185F3 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - CDC317CDAB48690109003C11F95185F3 /* Resources */ = { + E3607A78143A847BA47D7FEDB4B8D5BB /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -1760,109 +1768,109 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DCED28C9841FFB44F8BC328D1EEAC08F /* Sources */ = { + CC0D1879581B5AFD7FAA62CCE90C5D81 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9384440B7670C698B979A2E54C2163A5 /* Pods-CachingPlayerItem_Example-dummy.m in Sources */, + 27368712E7653701AC2EDA78E05DC2DF /* CwlCatchException.m in Sources */, + 9C05E4ABD9F458B9F7C0DEE1DDF1F519 /* CwlCatchExceptionSupport-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F88C555F5F0146F7B4B32FC9AB6D93F5 /* Sources */ = { + DCED28C9841FFB44F8BC328D1EEAC08F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 65B1A9CB705BC730A31877A52402C352 /* CwlCatchException.m in Sources */, - 07EAAE767AC935B7C7FD44E08F555BC3 /* CwlCatchExceptionSupport-dummy.m in Sources */, + 9384440B7670C698B979A2E54C2163A5 /* Pods-CachingPlayerItem_Example-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 034257B2049492223417921D45B2B083 /* PBXTargetDependency */ = { + 025636066BC39D75713E3D643B20A2C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = CwlMachBadInstructionHandler; - target = 3BBD87E27EAD36B90D168213ED6DC32C /* CwlMachBadInstructionHandler */; - targetProxy = E9B432D0A65D5CAD6BB9B70249395737 /* PBXContainerItemProxy */; + name = Nimble; + target = 6F13695E06195A78EA8A95F8C7ED0D2F /* Nimble */; + targetProxy = 07BD7E23AA160A527D1FD2107E73B754 /* PBXContainerItemProxy */; }; - 10AAF3EBC07DDED4EB884177C45A32DE /* PBXTargetDependency */ = { + 1F34E2401D2380D0D16C0B14AD20EE97 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = CwlPreconditionTesting; target = E4D853F6FBAB5A9BDBE843E4EFB22EB7 /* CwlPreconditionTesting */; - targetProxy = 2D8ADF810B53F5684FDB066C5AC21A2B /* PBXContainerItemProxy */; + targetProxy = DD1038BE119C671CFDD6411DE4642797 /* PBXContainerItemProxy */; + }; + 1F628BC33FE661BC20D78CE796985B94 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = CwlCatchExceptionSupport; + target = CA3D99499260B4C146BBB22670C1D8AD /* CwlCatchExceptionSupport */; + targetProxy = B2F7377DC311E4185C5CFA44EBF5929D /* PBXContainerItemProxy */; }; - 255316C05B066018AAF9C03DF6990594 /* PBXTargetDependency */ = { + 2A4D4353ABF0D1667B829D4DB859EBA9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "Pods-CachingPlayerItem_Example"; target = 5AC845F8F60E6D74BC46BB3D65D32A0E /* Pods-CachingPlayerItem_Example */; - targetProxy = 820ABA68D2E9A36A7BDA3289B45520D7 /* PBXContainerItemProxy */; + targetProxy = 30F5664230A4FFBD1E9DA16FA6D2B8F1 /* PBXContainerItemProxy */; }; - 63330C81FD42F878F46D790C5CDAA696 /* PBXTargetDependency */ = { + 3001D8B3E18346EA16EC9AF8892B1778 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = CwlCatchExceptionSupport; target = CA3D99499260B4C146BBB22670C1D8AD /* CwlCatchExceptionSupport */; - targetProxy = 688A2FE970FDF39AD3D4B34467DB54EA /* PBXContainerItemProxy */; + targetProxy = 4C31B63FD4692EF7C37EDB9281628B00 /* PBXContainerItemProxy */; }; - 7F342B97D04B1B85C5311AA4627FE2C3 /* PBXTargetDependency */ = { + 49E64C6A9D2BD0987FDA88F95E3B38F6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = CachingPlayerItem; - target = 31D3DC3FCCAB0AB08B35437BFBC158AA /* CachingPlayerItem */; - targetProxy = DB92FC2D1E53B3526D2D1A53883D3711 /* PBXContainerItemProxy */; + name = CwlPosixPreconditionTesting; + target = EB8B23AD889CF5BE4A85CD0D8EF2DF99 /* CwlPosixPreconditionTesting */; + targetProxy = 04B477A63629CC3E993EF630A7E2A47F /* PBXContainerItemProxy */; }; - 849022AA5FFB04064505D7864C7BA50C /* PBXTargetDependency */ = { + 4B7971F7BA55E56EAE0D427E554924A9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = CwlCatchException; target = 308B5C440C446909122081D367A27A8F /* CwlCatchException */; - targetProxy = 4DA27B89F63638C0B5CB604FD284FF81 /* PBXContainerItemProxy */; + targetProxy = 1DCD052D150BE48902514C8A8F389B79 /* PBXContainerItemProxy */; }; - 87FA81C885F0C37CDFDF7FD0A8D63523 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Nimble; - target = 6F13695E06195A78EA8A95F8C7ED0D2F /* Nimble */; - targetProxy = 1C9525FFF2EF184FDA42147AED71B945 /* PBXContainerItemProxy */; - }; - 8E0F119F294CB1F810BFFC6E480A9C3B /* PBXTargetDependency */ = { + 5FA95D312B2BBBE65DBE40C7BBDC5917 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Quick; target = C82891EAB7293DBEE916B21F57E8474D /* Quick */; - targetProxy = 320D189301A29D4903B60F950C736AEC /* PBXContainerItemProxy */; - }; - 972A5302B7AA05560913CBEB8BB0F84E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = CwlCatchExceptionSupport; - target = CA3D99499260B4C146BBB22670C1D8AD /* CwlCatchExceptionSupport */; - targetProxy = 0449F304E3CEEF6B4FCD266E82DEAE38 /* PBXContainerItemProxy */; - }; - A004A92019C40AF5E5F2AABF43AE4DD6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = CwlMachBadInstructionHandler; - target = 3BBD87E27EAD36B90D168213ED6DC32C /* CwlMachBadInstructionHandler */; - targetProxy = 2330FE715C00DDC7A4F861004CF47649 /* PBXContainerItemProxy */; + targetProxy = 49AD5A09E3FEE36FBD0640A9A5194D74 /* PBXContainerItemProxy */; }; - AECE088C37E1307877A8EE9801DD4408 /* PBXTargetDependency */ = { + 6D71C328A70751BB44C4CB78883971B3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = CwlCatchException; - target = 308B5C440C446909122081D367A27A8F /* CwlCatchException */; - targetProxy = 9021AD31240291415C3B4F4B85C65C9E /* PBXContainerItemProxy */; + name = CachingPlayerItem; + target = 31D3DC3FCCAB0AB08B35437BFBC158AA /* CachingPlayerItem */; + targetProxy = 3C24BBA55D496B30DC4C10225D1D23DB /* PBXContainerItemProxy */; }; - BDCF1A3FCD65EEAD1D8FA2758DC67063 /* PBXTargetDependency */ = { + 99F80433D57F074B0B6030A76FEC63B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = CwlPosixPreconditionTesting; target = EB8B23AD889CF5BE4A85CD0D8EF2DF99 /* CwlPosixPreconditionTesting */; - targetProxy = 264EBF4D2AC776DA96751A4E1D18BBD8 /* PBXContainerItemProxy */; + targetProxy = ADB94AD34139A76C7B31AC02A9FA9E98 /* PBXContainerItemProxy */; + }; + BD7481C62C1A9F1A4A58171104BCF10B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = CwlMachBadInstructionHandler; + target = 3BBD87E27EAD36B90D168213ED6DC32C /* CwlMachBadInstructionHandler */; + targetProxy = AF65777E6F0E2E2A18E0D965B3B3F25C /* PBXContainerItemProxy */; }; - E37109363F8BADF3876D174006F22B99 /* PBXTargetDependency */ = { + E00669584DEE83AC868D74FF8C822F29 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = CwlPreconditionTesting; target = E4D853F6FBAB5A9BDBE843E4EFB22EB7 /* CwlPreconditionTesting */; - targetProxy = 85C4C7C6F756987789F937301CF55B78 /* PBXContainerItemProxy */; + targetProxy = 7337489882360ACFADEA1681A018436C /* PBXContainerItemProxy */; }; - E9D0BF45BA9DA0E807D52E9757F743C6 /* PBXTargetDependency */ = { + F47F4F0FC2728AB8D7588FBF247496E5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = CwlPosixPreconditionTesting; - target = EB8B23AD889CF5BE4A85CD0D8EF2DF99 /* CwlPosixPreconditionTesting */; - targetProxy = B46CEAD667584FB799994DF2F7304D72 /* PBXContainerItemProxy */; + name = CwlCatchException; + target = 308B5C440C446909122081D367A27A8F /* CwlCatchException */; + targetProxy = 760E231B383C04BB4C9204C0B6CE2B5B /* PBXContainerItemProxy */; + }; + FAB40406D07FCD784FDBC73EEF32D93C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = CwlMachBadInstructionHandler; + target = 3BBD87E27EAD36B90D168213ED6DC32C /* CwlMachBadInstructionHandler */; + targetProxy = 4234B3D5CA4CE5483F1D8E7B07555550 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -1903,116 +1911,6 @@ }; name = Debug; }; - 0CB0B7A450A09DE80F74656E3D90A2BB /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 66B28FF47F05C2A4821911BDA22DEE84 /* CachingPlayerItem.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - "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"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/CachingPlayerItem/CachingPlayerItem-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/CachingPlayerItem/CachingPlayerItem-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/CachingPlayerItem/CachingPlayerItem.modulemap"; - PRODUCT_MODULE_NAME = CachingPlayerItem; - PRODUCT_NAME = CachingPlayerItem; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 1AE2616B7568CAAC467E49742E63280B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 957A1A665F229456A021A111F91C3393 /* CachingPlayerItem.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - "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"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/CachingPlayerItem/CachingPlayerItem-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/CachingPlayerItem/CachingPlayerItem-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/CachingPlayerItem/CachingPlayerItem.modulemap"; - PRODUCT_MODULE_NAME = CachingPlayerItem; - PRODUCT_NAME = CachingPlayerItem; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 2E0137AFA1621966BBEAE148D6FE79AE /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 978DC30E4C91FAD26579A85A06EB1645 /* CwlCatchExceptionSupport.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - "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"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/CwlCatchExceptionSupport/CwlCatchExceptionSupport-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/CwlCatchExceptionSupport/CwlCatchExceptionSupport-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/CwlCatchExceptionSupport/CwlCatchExceptionSupport.modulemap"; - PRODUCT_MODULE_NAME = CwlCatchExceptionSupport; - PRODUCT_NAME = CwlCatchExceptionSupport; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.5; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; 30E0B9EFD9A5C45D0D351231E81B30B3 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2366,7 +2264,44 @@ }; name = Release; }; - 606E88F7584C57165D5B28D8D231A651 /* Debug */ = { + 58AD3E8F73E4D269A5BE3FB713747117 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 978DC30E4C91FAD26579A85A06EB1645 /* CwlCatchExceptionSupport.release.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + "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"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/CwlCatchExceptionSupport/CwlCatchExceptionSupport-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/CwlCatchExceptionSupport/CwlCatchExceptionSupport-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/CwlCatchExceptionSupport/CwlCatchExceptionSupport.modulemap"; + PRODUCT_MODULE_NAME = CwlCatchExceptionSupport; + PRODUCT_NAME = CwlCatchExceptionSupport; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.5; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 801E7D6EEA647DC07D3AB7BD770FF8D4 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = F6E07D9449996759F9D67A9AC7D5A539 /* CwlCatchExceptionSupport.debug.xcconfig */; buildSettings = { @@ -2437,6 +2372,42 @@ }; name = Debug; }; + 84A52E0E543F676C25D98866FCE1EAE9 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DCADCC18663838D4A77EAA84692A622F /* CachingPlayerItem.debug.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + "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"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/CachingPlayerItem/CachingPlayerItem-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/CachingPlayerItem/CachingPlayerItem-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/CachingPlayerItem/CachingPlayerItem.modulemap"; + PRODUCT_MODULE_NAME = CachingPlayerItem; + PRODUCT_NAME = CachingPlayerItem; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; AAF7087EBD2BAEA8725D856B7B590A61 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 1791D3EE80056B67DAF4379BE191DC47 /* CwlPosixPreconditionTesting.release.xcconfig */; @@ -2582,6 +2553,43 @@ }; name = Debug; }; + E24C053AFB4CC270D2C2B3A3FA560B30 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 652F7655B26126652267A3154842EE55 /* CachingPlayerItem.release.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + "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"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/CachingPlayerItem/CachingPlayerItem-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/CachingPlayerItem/CachingPlayerItem-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/CachingPlayerItem/CachingPlayerItem.modulemap"; + PRODUCT_MODULE_NAME = CachingPlayerItem; + PRODUCT_NAME = CachingPlayerItem; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; F4FF6A0D1970CA9705974E3CB2134802 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2751,29 +2759,29 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 82B9980BBAC2CBB2A6EAE74C1BDC1A4B /* Build configuration list for PBXNativeTarget "Pods-CachingPlayerItem_Tests" */ = { + 6C02E90ACDF5BE4FFF2E2B2F87B6AAC4 /* Build configuration list for PBXNativeTarget "CwlCatchExceptionSupport" */ = { isa = XCConfigurationList; buildConfigurations = ( - 4D2168686ED353883F11420E3B96F5CA /* Debug */, - FBB637266BD30E27197061E5890115C0 /* Release */, + 801E7D6EEA647DC07D3AB7BD770FF8D4 /* Debug */, + 58AD3E8F73E4D269A5BE3FB713747117 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 8AC46CF02836F734776D62A2C6470190 /* Build configuration list for PBXNativeTarget "CwlMachBadInstructionHandler" */ = { + 82B9980BBAC2CBB2A6EAE74C1BDC1A4B /* Build configuration list for PBXNativeTarget "Pods-CachingPlayerItem_Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( - C21E6A2E753C43D675E1105133A9B2B6 /* Debug */, - B469FFD90A14BAA6110CEEEB2AFA8879 /* Release */, + 4D2168686ED353883F11420E3B96F5CA /* Debug */, + FBB637266BD30E27197061E5890115C0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 8CAFFE9422B1A41D5892E461D9778344 /* Build configuration list for PBXNativeTarget "CwlCatchExceptionSupport" */ = { + 8AC46CF02836F734776D62A2C6470190 /* Build configuration list for PBXNativeTarget "CwlMachBadInstructionHandler" */ = { isa = XCConfigurationList; buildConfigurations = ( - 606E88F7584C57165D5B28D8D231A651 /* Debug */, - 2E0137AFA1621966BBEAE148D6FE79AE /* Release */, + C21E6A2E753C43D675E1105133A9B2B6 /* Debug */, + B469FFD90A14BAA6110CEEEB2AFA8879 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -2817,8 +2825,8 @@ CAD3B5926CEBAF1AD9082E6F362C9E9E /* Build configuration list for PBXNativeTarget "CachingPlayerItem" */ = { isa = XCConfigurationList; buildConfigurations = ( - 0CB0B7A450A09DE80F74656E3D90A2BB /* Debug */, - 1AE2616B7568CAAC467E49742E63280B /* Release */, + 84A52E0E543F676C25D98866FCE1EAE9 /* Debug */, + E24C053AFB4CC270D2C2B3A3FA560B30 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; From 1bfde42ad4f6d68a5fce8061817dc72b9bfe6079 Mon Sep 17 00:00:00 2001 From: Gorjan Shukov Date: Sat, 1 Aug 2026 22:58:50 +0200 Subject: [PATCH 08/13] Update gitignore --- .gitignore | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.gitignore b/.gitignore index 5073505..3478970 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,12 @@ ## User settings xcuserdata/ + +## macOS +.DS_Store + +## Xcode +DerivedData/ + +## Swift Package Manager +.build/ +.swiftpm/ From a20135b68b454ef081f8e330f7a9a1cc1a567c2f Mon Sep 17 00:00:00 2001 From: Gorjan Shukov Date: Sat, 1 Aug 2026 23:00:14 +0200 Subject: [PATCH 09/13] Add build & tests workflows badge --- .github/workflows/ci.yml | 75 ++++++++++++++++++++++++++++++++++++++++ README.md | 1 + 2 files changed, 76 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..4667725 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,75 @@ +name: CI + +on: + push: + branches: [master] + paths-ignore: + - '**.md' + - 'docs/**' + pull_request: + branches: [master] + paths-ignore: + - '**.md' + - 'docs/**' + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + test: + name: Test (iOS) + runs-on: macos-15 + steps: + - uses: actions/checkout@v4 + + - name: Install pods + working-directory: Example + run: pod install + + - name: Pick an iOS simulator + id: simulator + run: | + UDID=$(xcrun simctl list devices available --json | python3 -c ' + import json, sys + for runtime, devices in json.load(sys.stdin)["devices"].items(): + if "iOS" not in runtime: + continue + for device in devices: + if "iPhone" in device["name"]: + print(device["udid"]) + raise SystemExit + raise SystemExit("no iPhone simulator available") + ') + echo "udid=$UDID" >> "$GITHUB_OUTPUT" + + - name: Test + working-directory: Example + run: | + xcodebuild test \ + -workspace CachingPlayerItem.xcworkspace \ + -scheme CachingPlayerItem-Example \ + -destination "id=${{ steps.simulator.outputs.udid }}" + + build: + name: Build (${{ matrix.platform }}) + runs-on: macos-15 + strategy: + fail-fast: false + matrix: + include: + - platform: macOS + destination: platform=macOS + - platform: tvOS + destination: generic/platform=tvOS Simulator + - platform: visionOS + destination: generic/platform=visionOS Simulator + steps: + - uses: actions/checkout@v4 + + - name: Build + run: | + xcodebuild -quiet \ + -scheme CachingPlayerItem \ + -destination '${{ matrix.destination }}' diff --git a/README.md b/README.md index f884cdb..dde38b2 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ CachingPlayerItem is a subclass of AVPlayerItem that lets you stream and cache media content on iOS, macOS, tvOS and visionOS. Initial idea for this library was found [here](https://github.com/neekeetab/CachingPlayerItem). +[![CI](https://github.com/sukov/CachingPlayerItem/actions/workflows/ci.yml/badge.svg)](https://github.com/sukov/CachingPlayerItem/actions/workflows/ci.yml) [![Version](https://img.shields.io/cocoapods/v/CachingPlayerItem.svg?style=flat)](https://cocoapods.org/pods/CachingPlayerItem) [![License](https://img.shields.io/cocoapods/l/CachingPlayerItem.svg?style=flat)](https://cocoapods.org/pods/CachingPlayerItem) [![Language Swift](https://img.shields.io/badge/Language-Swift%205.0-orange.svg?style=flat)](https://swift.org) From 26ec7bdec9b664013641b6175223021b2b6521d0 Mon Sep 17 00:00:00 2001 From: Gorjan Shukov Date: Thu, 10 Sep 2026 11:31:42 +0200 Subject: [PATCH 10/13] Fix delegate didDownloadBytesSoFar inconsistency --- Example/Tests/Tests.swift | 2 ++ Source/ResourceLoaderDelegate.swift | 11 ++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Example/Tests/Tests.swift b/Example/Tests/Tests.swift index 4f279c8..cde904a 100644 --- a/Example/Tests/Tests.swift +++ b/Example/Tests/Tests.swift @@ -1330,6 +1330,8 @@ class CachingPlayerItemPlaybackStressSpec: QuickSpec { expect(delegate.didDownloadBytesCalled).to(beTrue()) expect(delegate.lastBytesExpected).to(equal(mediaData.count)) + expect(delegate.lastBytesDownloaded).to(beGreaterThan(0)) + expect(delegate.lastBytesDownloaded).to(beLessThanOrEqualTo(mediaData.count)) } // The frame that crashed in issue #31, driven through a real player. diff --git a/Source/ResourceLoaderDelegate.swift b/Source/ResourceLoaderDelegate.swift index 906b7e2..2db31e7 100644 --- a/Source/ResourceLoaderDelegate.swift +++ b/Source/ResourceLoaderDelegate.swift @@ -27,6 +27,13 @@ final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URL return bufferData.count } + private var downloadedByteCountValue = 0 + private var downloadedByteCount: Int { + bufferLock.lock() + defer { bufferLock.unlock() } + + return downloadedByteCountValue + } private var configuration: CachingPlayerItemConfiguration { owner?.configuration ?? .default } private lazy var fileHandle = MediaFileHandle(filePath: saveFilePath) @@ -154,7 +161,7 @@ final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URL guard let self, let owner = self.owner else { return } owner.delegate?.playerItem?(owner, - didDownloadBytesSoFar: self.fileHandle.fileSize + self.bufferedByteCount, + didDownloadBytesSoFar: self.downloadedByteCount, outOf: Int(response.processedInfoData.expectedContentLength)) } } @@ -239,6 +246,7 @@ final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URL if shouldResetData { bufferLock.lock() bufferData = Data() + downloadedByteCountValue = 0 bufferLock.unlock() addOperationOnQueue { [weak self] in @@ -287,6 +295,7 @@ final class ResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URL defer { bufferLock.unlock() } bufferData.append(data) + downloadedByteCountValue += data.count } private func writeBufferDataToFileIfNeeded(forced: Bool = false) { From 28ec7825944dfbb39bd0ae85f030bec308fc40c5 Mon Sep 17 00:00:00 2001 From: Gorjan Shukov Date: Thu, 24 Sep 2026 13:10:51 +0200 Subject: [PATCH 11/13] Bump pod version --- CachingPlayerItem.podspec | 2 +- Example/Podfile.lock | 4 ++-- Example/Pods/Local Podspecs/CachingPlayerItem.podspec.json | 4 ++-- Example/Pods/Manifest.lock | 4 ++-- .../CachingPlayerItem/CachingPlayerItem-Info.plist | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CachingPlayerItem.podspec b/CachingPlayerItem.podspec index ed7b00a..5621baa 100644 --- a/CachingPlayerItem.podspec +++ b/CachingPlayerItem.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'CachingPlayerItem' - s.version = '2.2.0' + s.version = '2.3.0' s.summary = 'Cache & Play audio and video files' s.homepage = 'https://github.com/sukov/CachingPlayerItem' diff --git a/Example/Podfile.lock b/Example/Podfile.lock index f99f768..6c4cdef 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - CachingPlayerItem (2.2.0) + - CachingPlayerItem (2.3.0) - CwlCatchException (2.2.1): - CwlCatchExceptionSupport (~> 2.2.1) - CwlCatchExceptionSupport (2.2.1) @@ -33,7 +33,7 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - CachingPlayerItem: 8a941cfd7a9d54654da71890ce17617667699071 + CachingPlayerItem: 9ac35e40bb02066916dd8721b2e7a5cf89fcf0dd CwlCatchException: 7acc161b299a6de7f0a46a6ed741eae2c8b4d75a CwlCatchExceptionSupport: 54ccab8d8c78907b57f99717fb19d4cc3bce02dc CwlMachBadInstructionHandler: dae4fdd124d45c9910ac240287cc7b898f4502a1 diff --git a/Example/Pods/Local Podspecs/CachingPlayerItem.podspec.json b/Example/Pods/Local Podspecs/CachingPlayerItem.podspec.json index 313033a..5942f80 100644 --- a/Example/Pods/Local Podspecs/CachingPlayerItem.podspec.json +++ b/Example/Pods/Local Podspecs/CachingPlayerItem.podspec.json @@ -1,6 +1,6 @@ { "name": "CachingPlayerItem", - "version": "2.2.0", + "version": "2.3.0", "summary": "Cache & Play audio and video files", "homepage": "https://github.com/sukov/CachingPlayerItem", "license": { @@ -12,7 +12,7 @@ }, "source": { "git": "https://github.com/sukov/CachingPlayerItem.git", - "tag": "2.2.0" + "tag": "2.3.0" }, "documentation_url": "https://sukov.github.io/CachingPlayerItem/", "swift_versions": "5.0", diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index f99f768..6c4cdef 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -1,5 +1,5 @@ PODS: - - CachingPlayerItem (2.2.0) + - CachingPlayerItem (2.3.0) - CwlCatchException (2.2.1): - CwlCatchExceptionSupport (~> 2.2.1) - CwlCatchExceptionSupport (2.2.1) @@ -33,7 +33,7 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - CachingPlayerItem: 8a941cfd7a9d54654da71890ce17617667699071 + CachingPlayerItem: 9ac35e40bb02066916dd8721b2e7a5cf89fcf0dd CwlCatchException: 7acc161b299a6de7f0a46a6ed741eae2c8b4d75a CwlCatchExceptionSupport: 54ccab8d8c78907b57f99717fb19d4cc3bce02dc CwlMachBadInstructionHandler: dae4fdd124d45c9910ac240287cc7b898f4502a1 diff --git a/Example/Pods/Target Support Files/CachingPlayerItem/CachingPlayerItem-Info.plist b/Example/Pods/Target Support Files/CachingPlayerItem/CachingPlayerItem-Info.plist index 3e91b61..ec1afe7 100644 --- a/Example/Pods/Target Support Files/CachingPlayerItem/CachingPlayerItem-Info.plist +++ b/Example/Pods/Target Support Files/CachingPlayerItem/CachingPlayerItem-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.2.0 + 2.3.0 CFBundleSignature ???? CFBundleVersion From a490940dcf8970f058d8fe53d3e91c75436b340c Mon Sep 17 00:00:00 2001 From: Gorjan Shukov Date: Thu, 24 Sep 2026 13:10:52 +0200 Subject: [PATCH 12/13] Update Readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dde38b2..2aa269a 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Once you have your Swift package set up, adding `CachingPlayerItem` as a depende ```swift dependencies: [ - .package(url: "https://github.com/sukov/CachingPlayerItem.git", upToNextMajor(from: "2.2.0")) + .package(url: "https://github.com/sukov/CachingPlayerItem.git", upToNextMajor(from: "2.3.0")) ] ``` From ea920733b00a6da214a243222ebb6d7eac9cbc14 Mon Sep 17 00:00:00 2001 From: Gorjan Shukov Date: Thu, 24 Sep 2026 13:10:52 +0200 Subject: [PATCH 13/13] Update jazzy docs --- docs/Classes.html | 4 ++-- docs/Classes/CachingPlayerItem.html | 4 ++-- docs/Enums.html | 4 ++-- docs/Enums/LogLevel.html | 4 ++-- docs/Protocols.html | 4 ++-- docs/Protocols/CachingPlayerItemDelegate.html | 4 ++-- docs/Structs.html | 4 ++-- .../CachingPlayerItemConfiguration.html | 4 ++-- .../Contents/Resources/Documents/Classes.html | 4 ++-- .../Documents/Classes/CachingPlayerItem.html | 4 ++-- .../Contents/Resources/Documents/Enums.html | 4 ++-- .../Resources/Documents/Enums/LogLevel.html | 4 ++-- .../Resources/Documents/Protocols.html | 4 ++-- .../Protocols/CachingPlayerItemDelegate.html | 4 ++-- .../Contents/Resources/Documents/Structs.html | 4 ++-- .../CachingPlayerItemConfiguration.html | 4 ++-- .../Contents/Resources/Documents/badge.svg | 4 ++-- .../Contents/Resources/Documents/index.html | 17 +++++++++-------- .../Resources/Documents/undocumented.json | 2 +- docs/docsets/CachingPlayerItem.tgz | Bin 83444 -> 87398 bytes docs/docsets/CachingPlayerItem.xml | 2 +- docs/index.html | 17 +++++++++-------- 22 files changed, 54 insertions(+), 52 deletions(-) diff --git a/docs/Classes.html b/docs/Classes.html index a701495..1bf141c 100644 --- a/docs/Classes.html +++ b/docs/Classes.html @@ -21,7 +21,7 @@

- CachingPlayerItem 2.2.0 Docs + CachingPlayerItem 2.3.0 Docs (89% documented)

@@ -141,7 +141,7 @@

Declaration

diff --git a/docs/Classes/CachingPlayerItem.html b/docs/Classes/CachingPlayerItem.html index 6dcfca9..12037f7 100644 --- a/docs/Classes/CachingPlayerItem.html +++ b/docs/Classes/CachingPlayerItem.html @@ -21,7 +21,7 @@

- CachingPlayerItem 2.2.0 Docs + CachingPlayerItem 2.3.0 Docs (89% documented)

@@ -912,7 +912,7 @@

Declaration

diff --git a/docs/Enums.html b/docs/Enums.html index 2f8dc4b..38f785d 100644 --- a/docs/Enums.html +++ b/docs/Enums.html @@ -21,7 +21,7 @@

- CachingPlayerItem 2.2.0 Docs + CachingPlayerItem 2.3.0 Docs (89% documented)

@@ -140,7 +140,7 @@

Declaration

diff --git a/docs/Enums/LogLevel.html b/docs/Enums/LogLevel.html index e44eba0..d8fea44 100644 --- a/docs/Enums/LogLevel.html +++ b/docs/Enums/LogLevel.html @@ -21,7 +21,7 @@

- CachingPlayerItem 2.2.0 Docs + CachingPlayerItem 2.3.0 Docs (89% documented)

@@ -283,7 +283,7 @@

Declaration

diff --git a/docs/Protocols.html b/docs/Protocols.html index 4ce5178..f50059f 100644 --- a/docs/Protocols.html +++ b/docs/Protocols.html @@ -21,7 +21,7 @@

- CachingPlayerItem 2.2.0 Docs + CachingPlayerItem 2.3.0 Docs (89% documented)

@@ -141,7 +141,7 @@

Declaration

diff --git a/docs/Protocols/CachingPlayerItemDelegate.html b/docs/Protocols/CachingPlayerItemDelegate.html index ada9704..2a26ad0 100644 --- a/docs/Protocols/CachingPlayerItemDelegate.html +++ b/docs/Protocols/CachingPlayerItemDelegate.html @@ -21,7 +21,7 @@

- CachingPlayerItem 2.2.0 Docs + CachingPlayerItem 2.3.0 Docs (89% documented)

@@ -312,7 +312,7 @@

Declaration

diff --git a/docs/Structs.html b/docs/Structs.html index 91b82aa..69f2fe8 100644 --- a/docs/Structs.html +++ b/docs/Structs.html @@ -21,7 +21,7 @@

- CachingPlayerItem 2.2.0 Docs + CachingPlayerItem 2.3.0 Docs (89% documented)

@@ -140,7 +140,7 @@

Declaration

diff --git a/docs/Structs/CachingPlayerItemConfiguration.html b/docs/Structs/CachingPlayerItemConfiguration.html index df6de8c..9ea9e65 100644 --- a/docs/Structs/CachingPlayerItemConfiguration.html +++ b/docs/Structs/CachingPlayerItemConfiguration.html @@ -21,7 +21,7 @@

- CachingPlayerItem 2.2.0 Docs + CachingPlayerItem 2.3.0 Docs (89% documented)

@@ -643,7 +643,7 @@

Parameters

diff --git a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Classes.html index a701495..1bf141c 100644 --- a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Classes.html +++ b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Classes.html @@ -21,7 +21,7 @@

- CachingPlayerItem 2.2.0 Docs + CachingPlayerItem 2.3.0 Docs (89% documented)

@@ -141,7 +141,7 @@

Declaration

diff --git a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Classes/CachingPlayerItem.html b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Classes/CachingPlayerItem.html index 6dcfca9..12037f7 100644 --- a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Classes/CachingPlayerItem.html +++ b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Classes/CachingPlayerItem.html @@ -21,7 +21,7 @@

- CachingPlayerItem 2.2.0 Docs + CachingPlayerItem 2.3.0 Docs (89% documented)

@@ -912,7 +912,7 @@

Declaration

diff --git a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Enums.html b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Enums.html index 2f8dc4b..38f785d 100644 --- a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Enums.html +++ b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Enums.html @@ -21,7 +21,7 @@

- CachingPlayerItem 2.2.0 Docs + CachingPlayerItem 2.3.0 Docs (89% documented)

@@ -140,7 +140,7 @@

Declaration

diff --git a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Enums/LogLevel.html b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Enums/LogLevel.html index e44eba0..d8fea44 100644 --- a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Enums/LogLevel.html +++ b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Enums/LogLevel.html @@ -21,7 +21,7 @@

- CachingPlayerItem 2.2.0 Docs + CachingPlayerItem 2.3.0 Docs (89% documented)

@@ -283,7 +283,7 @@

Declaration

diff --git a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Protocols.html b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Protocols.html index 4ce5178..f50059f 100644 --- a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Protocols.html +++ b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Protocols.html @@ -21,7 +21,7 @@

- CachingPlayerItem 2.2.0 Docs + CachingPlayerItem 2.3.0 Docs (89% documented)

@@ -141,7 +141,7 @@

Declaration

diff --git a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Protocols/CachingPlayerItemDelegate.html b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Protocols/CachingPlayerItemDelegate.html index ada9704..2a26ad0 100644 --- a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Protocols/CachingPlayerItemDelegate.html +++ b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Protocols/CachingPlayerItemDelegate.html @@ -21,7 +21,7 @@

- CachingPlayerItem 2.2.0 Docs + CachingPlayerItem 2.3.0 Docs (89% documented)

@@ -312,7 +312,7 @@

Declaration

diff --git a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Structs.html index 91b82aa..69f2fe8 100644 --- a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Structs.html +++ b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Structs.html @@ -21,7 +21,7 @@

- CachingPlayerItem 2.2.0 Docs + CachingPlayerItem 2.3.0 Docs (89% documented)

@@ -140,7 +140,7 @@

Declaration

diff --git a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Structs/CachingPlayerItemConfiguration.html b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Structs/CachingPlayerItemConfiguration.html index df6de8c..9ea9e65 100644 --- a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Structs/CachingPlayerItemConfiguration.html +++ b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/Structs/CachingPlayerItemConfiguration.html @@ -21,7 +21,7 @@

- CachingPlayerItem 2.2.0 Docs + CachingPlayerItem 2.3.0 Docs (89% documented)

@@ -643,7 +643,7 @@

Parameters

diff --git a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/badge.svg b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/badge.svg index be498fa..b28dab6 100644 --- a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/badge.svg +++ b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/badge.svg @@ -19,10 +19,10 @@ documentation - 86% + 89% - 86% + 89% diff --git a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/index.html b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/index.html index 5be413b..44cee88 100644 --- a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/index.html +++ b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/index.html @@ -20,7 +20,7 @@

- CachingPlayerItem 2.2.0 Docs + CachingPlayerItem 2.3.0 Docs (89% documented)

@@ -94,12 +94,13 @@

CachingPlayerItem

-

CachingPlayerItem is a subclass of AVPlayerItem that lets you stream and cache media content on iOS. Initial idea for this library was found here.

+

CachingPlayerItem is a subclass of AVPlayerItem that lets you stream and cache media content on iOS, macOS, tvOS and visionOS. Initial idea for this library was found here.

-

Version +

CI +Version License Language Swift -Platform +Platform Swift Package Manager

Features

@@ -117,7 +118,7 @@

Features

Requirements

    -
  • iOS 10.0+
  • +
  • iOS 13.4+ / macOS 10.15.4+ / tvOS 13.4+ / visionOS 1.0+
  • Xcode 12.0+
  • Swift 5.0+
@@ -130,7 +131,7 @@

CocoaPods

To integrate CachingPlayerItem into your Xcode project using CocoaPods, specify it in your Podfile:

source 'https://github.com/CocoaPods/Specs.git'
-platform :ios, '10.0'
+platform :ios, '13.4'
 use_frameworks!
 
 target '<Your Target Name>' do
@@ -143,7 +144,7 @@ 

Swift Package Manager

Once you have your Swift package set up, adding CachingPlayerItem as a dependency is as easy as adding it to the dependencies value of your Package.swift.

dependencies: [
-    .package(url: "https://github.com/sukov/CachingPlayerItem.git", upToNextMajor(from: "2.2.0"))
+    .package(url: "https://github.com/sukov/CachingPlayerItem.git", upToNextMajor(from: "2.3.0"))
 ]
 

Usage

@@ -229,7 +230,7 @@

Known limitations

diff --git a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/undocumented.json b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/undocumented.json index 14563de..f045417 100644 --- a/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/undocumented.json +++ b/docs/docsets/CachingPlayerItem.docset/Contents/Resources/Documents/undocumented.json @@ -30,7 +30,7 @@ }, { "file": "/Users/shukov/Projects/CachingPlayerItem/Source/CachingPlayerItem.swift", - "line": 252, + "line": 281, "symbol": "CachingPlayerItem.observeValue(forKeyPath:of:change:context:)", "symbol_kind": "source.lang.swift.decl.function.method.instance", "warning": "undocumented" diff --git a/docs/docsets/CachingPlayerItem.tgz b/docs/docsets/CachingPlayerItem.tgz index fd5ef4ede4a1c649998e93b577a91c34e2d0e125..66239e4b0cf4fc0dcea77f57dcc9ae962a9c9395 100644 GIT binary patch literal 87398 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 literal 83444 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.2.0https://sukov.github.io/CachingPlayerItem/docsets/CachingPlayerItem.tgz +2.3.0https://sukov.github.io/CachingPlayerItem/docsets/CachingPlayerItem.tgz diff --git a/docs/index.html b/docs/index.html index 5be413b..44cee88 100644 --- a/docs/index.html +++ b/docs/index.html @@ -20,7 +20,7 @@

- CachingPlayerItem 2.2.0 Docs + CachingPlayerItem 2.3.0 Docs (89% documented)

@@ -94,12 +94,13 @@

CachingPlayerItem

-

CachingPlayerItem is a subclass of AVPlayerItem that lets you stream and cache media content on iOS. Initial idea for this library was found here.

+

CachingPlayerItem is a subclass of AVPlayerItem that lets you stream and cache media content on iOS, macOS, tvOS and visionOS. Initial idea for this library was found here.

-

Version +

CI +Version License Language Swift -Platform +Platform Swift Package Manager

Features

@@ -117,7 +118,7 @@

Features

Requirements

    -
  • iOS 10.0+
  • +
  • iOS 13.4+ / macOS 10.15.4+ / tvOS 13.4+ / visionOS 1.0+
  • Xcode 12.0+
  • Swift 5.0+
@@ -130,7 +131,7 @@

CocoaPods

To integrate CachingPlayerItem into your Xcode project using CocoaPods, specify it in your Podfile:

source 'https://github.com/CocoaPods/Specs.git'
-platform :ios, '10.0'
+platform :ios, '13.4'
 use_frameworks!
 
 target '<Your Target Name>' do
@@ -143,7 +144,7 @@ 

Swift Package Manager

Once you have your Swift package set up, adding CachingPlayerItem as a dependency is as easy as adding it to the dependencies value of your Package.swift.

dependencies: [
-    .package(url: "https://github.com/sukov/CachingPlayerItem.git", upToNextMajor(from: "2.2.0"))
+    .package(url: "https://github.com/sukov/CachingPlayerItem.git", upToNextMajor(from: "2.3.0"))
 ]
 

Usage

@@ -229,7 +230,7 @@

Known limitations