.Event) {
- switch event {
- case let .error(error):
- self = .completed(result: .failure(error))
- case let .value(response, isCompleted):
- if isCompleted {
- self = .completed(result: .success(response))
- } else {
- self = .intermediateResponseReceived(response: response)
- }
- case let .progress(progress):
- self = .progressUpdated(completedUnitCount: progress.completed, totalUnitCount: progress.total)
- }
- }
-}
-
-final class ImagePipelineDefaultDelegate: ImagePipelineDelegate {}
diff --git a/Pods/Nuke/Sources/Core/ImageRequest.swift b/Pods/Nuke/Sources/Core/ImageRequest.swift
deleted file mode 100644
index 1362d60c5..000000000
--- a/Pods/Nuke/Sources/Core/ImageRequest.swift
+++ /dev/null
@@ -1,471 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-import Combine
-
-#if os(iOS) || os(tvOS) || os(watchOS)
-import UIKit
-#endif
-
-#if os(watchOS)
-import WatchKit
-#endif
-
-#if os(macOS)
-import Cocoa
-#endif
-
-// MARK: - ImageRequest
-
-/// Represents an image request.
-public struct ImageRequest: CustomStringConvertible {
-
- // MARK: Parameters
-
- /// Returns the request `URLRequest`.
- ///
- /// Returns `nil` for publisher-based requests.
- public var urlRequest: URLRequest? {
- switch ref.resource {
- case .url(let url): return url.map { URLRequest(url: $0) } // create lazily
- case .urlRequest(let urlRequest): return urlRequest
- case .publisher: return nil
- }
- }
-
- /// Returns the request `URL`.
- ///
- /// Returns `nil` for publisher-based requests.
- public var url: URL? {
- switch ref.resource {
- case .url(let url): return url
- case .urlRequest(let request): return request.url
- case .publisher: return nil
- }
- }
-
- /// Returns the ID of the underlying image. For URL-based request, it's an
- /// image URL. For publisher – a custom ID.
- public var imageId: String? {
- switch ref.resource {
- case .url(let url): return url?.absoluteString
- case .urlRequest(let urlRequest): return urlRequest.url?.absoluteString
- case .publisher(let publisher): return publisher.id
- }
- }
-
- /// The relative priority of the request. The priority affects the order in
- /// which the requests are performed. `.normal` by default.
- public var priority: Priority {
- get { ref.priority }
- set { mutate { $0.priority = newValue } }
- }
-
- /// Processor to be applied to the image. Empty by default.
- public var processors: [ImageProcessing] {
- get { ref.processors }
- set { mutate { $0.processors = newValue } }
- }
-
- /// The request options.
- public var options: Options {
- get { ref.options }
- set { mutate { $0.options = newValue } }
- }
-
- /// Custom info passed alongside the request.
- public var userInfo: [UserInfoKey: Any] {
- get { ref.userInfo ?? [:] }
- set { mutate { $0.userInfo = newValue } }
- }
-
- /// The priority affecting the order in which the requests are performed.
- public enum Priority: Int, Comparable {
- case veryLow = 0, low, normal, high, veryHigh
-
- public static func < (lhs: Priority, rhs: Priority) -> Bool {
- lhs.rawValue < rhs.rawValue
- }
- }
-
- /// A key use in `userInfo`.
- public struct UserInfoKey: Hashable, ExpressibleByStringLiteral {
- public let rawValue: String
-
- public init(_ rawValue: String) {
- self.rawValue = rawValue
- }
-
- public init(stringLiteral value: String) {
- self.rawValue = value
- }
-
- /// By default, a pipeline uses URLs as unique image identifiers for
- /// caching and task coalescing. You can override this behavior by
- /// providing an `imageIdKey` instead. For example, you can use it to remove
- /// transient query parameters from the request.
- ///
- /// ```
- /// let request = ImageRequest(
- /// url: URL(string: "http://example.com/image.jpeg?token=123"),
- /// userInfo: [.imageIdKey: "http://example.com/image.jpeg"]
- /// )
- /// ```
- public static let imageIdKey: ImageRequest.UserInfoKey = "github.com/kean/nuke/imageId"
-
- /// The image scale to be used. By default, the scale matches the scale
- /// of the current display.
- public static let scaleKey: ImageRequest.UserInfoKey = "github.com/kean/nuke/scale"
-
- /// Specifies whether the pipeline should retreive or generate a thumbnail
- /// instead of a full image. The thumbnail creation is generally significantly
- /// more efficient, especially in terms of memory usage, than image resizing
- /// (`ImageProcessors.Resize`).
- ///
- /// - note: You must be using the default image decoder to make it work.
- public static let thumbnailKey: ImageRequest.UserInfoKey = "github.com/kean/nuke/thumbmnailKey"
- }
-
- // MARK: Initializers
-
- /// Initializes a request with the given URL.
- ///
- /// - parameter url: The request URL.
- /// - parameter processors: Processors to be apply to the image. `[]` by default.
- /// - parameter priority: The priority of the request, `.normal` by default.
- /// - parameter options: Image loading options. `[]` by default.
- /// - parameter userInfo: Custom info passed alongside the request. `nil` by default.
- ///
- /// ```swift
- /// let request = ImageRequest(
- /// url: URL(string: "http://..."),
- /// processors: [ImageProcessors.Resize(size: imageView.bounds.size)],
- /// priority: .high
- /// )
- /// ```
- public init(url: URL?,
- processors: [ImageProcessing] = [],
- priority: Priority = .normal,
- options: Options = [],
- userInfo: [UserInfoKey: Any]? = nil) {
- self.ref = Container(
- resource: Resource.url(url),
- processors: processors,
- priority: priority,
- options: options,
- userInfo: userInfo
- )
- }
-
- /// Initializes a request with the given request.
- ///
- /// - parameter urlRequest: The URLRequest describing the image request.
- /// - parameter processors: Processors to be apply to the image. `[]` by default.
- /// - parameter priority: The priority of the request, `.normal` by default.
- /// - parameter options: Image loading options. `[]` by default.
- /// - parameter userInfo: Custom info passed alongside the request. `nil` by default.
- ///
- /// ```swift
- /// let request = ImageRequest(
- /// url: URLRequest(url: URL(string: "http://...")),
- /// processors: [ImageProcessors.Resize(size: imageView.bounds.size)],
- /// priority: .high
- /// )
- /// ```
- public init(urlRequest: URLRequest,
- processors: [ImageProcessing] = [],
- priority: Priority = .normal,
- options: Options = [],
- userInfo: [UserInfoKey: Any]? = nil) {
- self.ref = Container(
- resource: Resource.urlRequest(urlRequest),
- processors: processors,
- priority: priority,
- options: options,
- userInfo: userInfo
- )
- }
-
- /// Initializes a request with the given data publisher.
- ///
- /// - parameter id: Uniquely identifies the image data.
- /// - parameter data: A data publisher to be used for fetching image data.
- /// - parameter processors: Processors to be apply to the image. `[]` by default.
- /// - parameter priority: The priority of the request, `.normal` by default.
- /// - parameter options: Image loading options. `[]` by default.
- /// - parameter userInfo: Custom info passed alongside the request. `nil` by default.
- ///
- /// For example, here is how you can use it with Photos framework (the
- /// `imageDataPublisher()` API is a convenience extension).
- ///
- /// ```swift
- /// let request = ImageRequest(
- /// id: asset.localIdentifier,
- /// data: PHAssetManager.imageDataPublisher(for: asset)
- /// )
- /// ```
- ///
- /// - warning: If you don't want data to be stored in the disk cache, make
- /// sure to create a pipeline without it or disable it on a per-request basis.
- /// You can also disable it dynamically using `ImagePipelineDelegate`.
- @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
- public init(id: String, data: P,
- processors: [ImageProcessing] = [],
- priority: Priority = .normal,
- options: Options = [],
- userInfo: [UserInfoKey: Any]? = nil) where P: Publisher, P.Output == Data {
- // It could technically be implemented without any special change to the
- // pipeline by using a custom DataLoader, disabling resumable data, and
- // passing a publisher in the request userInfo.
- self.ref = Container(
- resource: .publisher(DataPublisher(id: id, data)),
- processors: processors,
- priority: priority,
- options: options,
- userInfo: userInfo
- )
- }
-
- // MARK: Options
-
- /// Image request options.
- public struct Options: OptionSet, Hashable {
- /// Returns a raw value.
- public let rawValue: UInt16
-
- /// Initialializes options with a given raw values.
- public init(rawValue: UInt16) {
- self.rawValue = rawValue
- }
-
- /// Disables memory cache reads (`ImageCaching`).
- public static let disableMemoryCacheReads = Options(rawValue: 1 << 0)
-
- /// Disables memory cache writes (`ImageCaching`).
- public static let disableMemoryCacheWrites = Options(rawValue: 1 << 1)
-
- /// Disables both memory cache reads and writes (`ImageCaching`).
- public static let disableMemoryCache: Options = [.disableMemoryCacheReads, .disableMemoryCacheWrites]
-
- /// Disables disk cache reads (`DataCaching`).
- public static let disableDiskCacheReads = Options(rawValue: 1 << 2)
-
- /// Disables disk cache writes (`DataCaching`).
- public static let disableDiskCacheWrites = Options(rawValue: 1 << 3)
-
- /// Disables both disk cache reads and writes (`DataCaching`).
- public static let disableDiskCache: Options = [.disableDiskCacheReads, .disableDiskCacheWrites]
-
- /// The image should be loaded only from the originating source.
- ///
- /// This option only works `ImageCaching` and `DataCaching`, but not
- /// `URLCache`. If you want to ignore `URLCache`, initialize the request
- /// with `URLRequest` with the respective policy
- public static let reloadIgnoringCachedData: Options = [.disableMemoryCacheReads, .disableDiskCacheReads]
-
- /// Use existing cache data and fail if no cached data is available.
- public static let returnCacheDataDontLoad = Options(rawValue: 1 << 4)
- }
-
- /// Thumbnail options.
- ///
- /// For more info, see https://developer.apple.com/documentation/imageio/cgimagesource/image_source_option_dictionary_keys
- public struct ThumbnailOptions: Hashable {
- /// The maximum width and height in pixels of a thumbnail. If this key
- /// is not specified, the width and height of a thumbnail is not limited
- /// and thumbnails may be as big as the image itself.
- public var maxPixelSize: CGFloat
-
- /// Whether a thumbnail should be automatically created for an image if
- /// a thumbnail isn't present in the image source file. The thumbnail is
- /// created from the full image, subject to the limit specified by
- /// `maxPixelSize`.
- ///
- /// By default, `true`.
- public var createThumbnailFromImageIfAbsent = true
-
- /// Whether a thumbnail should be created from the full image even if a
- /// thumbnail is present in the image source file. The thumbnail is created
- /// from the full image, subject to the limit specified by
- /// `maxPixelSize`.
- ///
- /// By default, `true`.
- public var createThumbnailFromImageAlways = true
-
- /// Whether the thumbnail should be rotated and scaled according to the
- /// orientation and pixel aspect ratio of the full image.
- ///
- /// By default, `true`.
- public var createThumbnailWithTransform = true
-
- /// Specifies whether image decoding and caching should happen at image
- /// creation time.
- ///
- /// By default, `true`.
- public var shouldCacheImmediately = true
-
- public init(maxPixelSize: CGFloat,
- createThumbnailFromImageIfAbsent: Bool = true,
- createThumbnailFromImageAlways: Bool = true,
- createThumbnailWithTransform: Bool = true,
- shouldCacheImmediately: Bool = true) {
- self.maxPixelSize = maxPixelSize
- self.createThumbnailFromImageIfAbsent = createThumbnailFromImageIfAbsent
- self.createThumbnailFromImageAlways = createThumbnailFromImageAlways
- self.createThumbnailWithTransform = createThumbnailWithTransform
- self.shouldCacheImmediately = shouldCacheImmediately
- }
-
- var identifier: String {
- "com.github/kean/nuke/thumbnail?mxs=\(maxPixelSize),options=\(createThumbnailFromImageIfAbsent)\(createThumbnailFromImageAlways)\(createThumbnailWithTransform)\(shouldCacheImmediately)"
- }
- }
-
- // MARK: Internal
-
- private(set) var ref: Container
-
- private mutating func mutate(_ closure: (Container) -> Void) {
- if !isKnownUniquelyReferenced(&ref) {
- ref = Container(ref)
- }
- closure(ref)
- }
-
- /// Just like many Swift built-in types, `ImageRequest` uses CoW approach to
- /// avoid memberwise retain/releases when `ImageRequest` is passed around.
- final class Container {
- // It's benefitial to put resource before priority and options because
- // of the resource size/stride of 9/16. Priority (1 byte) and Options
- // (2 bytes) slot just right in the remaining space.
- let resource: Resource
- fileprivate(set) var priority: Priority
- fileprivate(set) var options: Options
- fileprivate(set) var processors: [ImageProcessing]
- fileprivate(set) var userInfo: [UserInfoKey: Any]?
- // After trimming down the request size, it is no longer
- // as beneficial using CoW for ImageRequest, but there
- // still is a small but measurable difference.
-
- deinit {
- #if TRACK_ALLOCATIONS
- Allocations.decrement("ImageRequest.Container")
- #endif
- }
-
- /// Creates a resource with a default processor.
- init(resource: Resource, processors: [ImageProcessing], priority: Priority, options: Options, userInfo: [UserInfoKey: Any]?) {
- self.resource = resource
- self.processors = processors
- self.priority = priority
- self.options = options
- self.userInfo = userInfo
-
- #if TRACK_ALLOCATIONS
- Allocations.increment("ImageRequest.Container")
- #endif
- }
-
- /// Creates a copy.
- init(_ ref: Container) {
- self.resource = ref.resource
- self.processors = ref.processors
- self.priority = ref.priority
- self.options = ref.options
- self.userInfo = ref.userInfo
-
- #if TRACK_ALLOCATIONS
- Allocations.increment("ImageRequest.Container")
- #endif
- }
- }
-
- // Every case takes 8 bytes and the enum 9 bytes overall (use stride!)
- enum Resource: CustomStringConvertible {
- case url(URL?)
- case urlRequest(URLRequest)
- case publisher(DataPublisher)
-
- var description: String {
- switch self {
- case .url(let url): return "\(url?.absoluteString ?? "nil")"
- case .urlRequest(let urlRequest): return "\(urlRequest)"
- case .publisher(let data): return "\(data)"
- }
- }
- }
-
- public var description: String {
- "ImageRequest(resource: \(ref.resource), priority: \(priority), processors: \(processors), options: \(options), userInfo: \(userInfo))"
- }
-
- func withProcessors(_ processors: [ImageProcessing]) -> ImageRequest {
- var request = self
- request.processors = processors
- return request
- }
-
- var preferredImageId: String {
- if let imageId = ref.userInfo?[.imageIdKey] as? String {
- return imageId
- }
- return imageId ?? ""
- }
-
- var thubmnail: ThumbnailOptions? {
- ref.userInfo?[.thumbnailKey] as? ThumbnailOptions
- }
-
- var scale: CGFloat? {
- guard let scale = ref.userInfo?[.scaleKey] as? NSNumber else {
- return nil
- }
- return CGFloat(scale.floatValue)
- }
-
- var publisher: DataPublisher? {
- guard case .publisher(let publisher) = ref.resource else {
- return nil
- }
- return publisher
- }
-}
-
-// MARK: - ImageRequestConvertible
-
-/// Represents a type that can be converted to an `ImageRequest`.
-public protocol ImageRequestConvertible {
- func asImageRequest() -> ImageRequest
-}
-
-extension ImageRequest: ImageRequestConvertible {
- public func asImageRequest() -> ImageRequest {
- self
- }
-}
-
-extension URL: ImageRequestConvertible {
- public func asImageRequest() -> ImageRequest {
- ImageRequest(url: self)
- }
-}
-
-extension Optional: ImageRequestConvertible where Wrapped == URL {
- public func asImageRequest() -> ImageRequest {
- ImageRequest(url: self)
- }
-}
-
-extension URLRequest: ImageRequestConvertible {
- public func asImageRequest() -> ImageRequest {
- ImageRequest(urlRequest: self)
- }
-}
-
-extension String: ImageRequestConvertible {
- public func asImageRequest() -> ImageRequest {
- ImageRequest(url: URL(string: self))
- }
-}
diff --git a/Pods/Nuke/Sources/Core/ImageResponse.swift b/Pods/Nuke/Sources/Core/ImageResponse.swift
deleted file mode 100644
index 200399ae6..000000000
--- a/Pods/Nuke/Sources/Core/ImageResponse.swift
+++ /dev/null
@@ -1,144 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-#if !os(watchOS)
-import AVKit
-#endif
-
-import Foundation
-
-#if !os(macOS)
-import UIKit.UIImage
-#else
-import AppKit.NSImage
-#endif
-
-// MARK: - ImageResponse
-
-/// An image response that contains a fetched image and some metadata.
-public struct ImageResponse {
- /// An image container with an image and associated metadata.
- public let container: ImageContainer
-
- #if os(macOS)
- /// A convenience computed property that returns an image from the container.
- public var image: NSImage { container.image }
- #else
- /// A convenience computed property that returns an image from the container.
- public var image: UIImage { container.image }
- #endif
-
- /// A response. `nil` unless the resource was fetched from the network or an
- /// HTTP cache.
- public let urlResponse: URLResponse?
-
- /// Contains a cache type in case the image was returned from one of the
- /// pipeline caches (not including any of the HTTP caches if enabled).
- public let cacheType: CacheType?
-
- /// Initializes the response with the given image.
- public init(container: ImageContainer, urlResponse: URLResponse? = nil, cacheType: CacheType? = nil) {
- self.container = container
- self.urlResponse = urlResponse
- self.cacheType = cacheType
- }
-
- func map(_ transformation: (ImageContainer) -> ImageContainer?) -> ImageResponse? {
- return autoreleasepool {
- guard let output = transformation(container) else {
- return nil
- }
- return ImageResponse(container: output, urlResponse: urlResponse, cacheType: cacheType)
- }
- }
-
- /// A cache type.
- public enum CacheType {
- /// Memory cache (see `ImageCaching`)
- case memory
- /// Disk cache (see `DataCaching`)
- case disk
- }
-}
-
-// MARK: - ImageContainer
-
-/// An image container with an image and associated metadata.
-public struct ImageContainer {
- #if os(macOS)
- /// A fetched image.
- public var image: NSImage
- #else
- /// A fetched image.
- public var image: UIImage
- #endif
-
- /// An image type.
- public var type: AssetType?
-
- /// Returns `true` if the image in the container is a preview of the image.
- public var isPreview: Bool
-
- /// Contains the original image `data`, but only if the decoder decides to
- /// attach it to the image.
- ///
- /// The default decoder (`ImageDecoders.Default`) attaches data to GIFs to
- /// allow to display them using a rendering engine of your choice.
- ///
- /// - note: The `data`, along with the image container itself gets stored
- /// in the memory cache.
- public var data: Data?
-
- #if !os(watchOS)
- /// Represents in-memory video asset.
- public var asset: AVAsset?
- #endif
-
- /// An metadata provided by the user.
- public var userInfo: [UserInfoKey: Any]
-
- /// Initializes the container with the given image.
- public init(image: PlatformImage, type: AssetType? = nil, isPreview: Bool = false, data: Data? = nil, userInfo: [UserInfoKey: Any] = [:]) {
- self.image = image
- self.type = type
- self.isPreview = isPreview
- self.data = data
- self.userInfo = userInfo
-
- #if !os(watchOS)
- if type?.isVideo == true {
- self.asset = data.flatMap {
- AVDataAsset.init(data: $0, type: type)
- }
- }
- #endif
- }
-
- /// Modifies the wrapped image and keeps all of the rest of the metadata.
- public func map(_ closure: (PlatformImage) -> PlatformImage?) -> ImageContainer? {
- guard let image = closure(self.image) else {
- return nil
- }
- return ImageContainer(image: image, type: type, isPreview: isPreview, data: data, userInfo: userInfo)
- }
-
- /// A key use in `userInfo`.
- public struct UserInfoKey: Hashable, ExpressibleByStringLiteral {
- public let rawValue: String
-
- public init(_ rawValue: String) {
- self.rawValue = rawValue
- }
-
- public init(stringLiteral value: String) {
- self.rawValue = value
- }
-
- // For internal purposes.
- static let isThumbnailKey: UserInfoKey = "com.github/kean/nuke/skip-decompression"
-
- /// A user info key to get the scan number (Int).
- public static let scanNumberKey: UserInfoKey = "com.github/kean/nuke/scan-number"
- }
-}
diff --git a/Pods/Nuke/Sources/Core/ImageTask.swift b/Pods/Nuke/Sources/Core/ImageTask.swift
deleted file mode 100644
index 671366a2d..000000000
--- a/Pods/Nuke/Sources/Core/ImageTask.swift
+++ /dev/null
@@ -1,108 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-/// A task performed by the `ImagePipeline`.
-///
-/// The pipeline maintains a strong reference to the task until the request
-/// finishes or fails; you do not need to maintain a reference to the task unless
-/// it is useful for your app.
-public final class ImageTask: Hashable, CustomStringConvertible {
- /// An identifier that uniquely identifies the task within a given pipeline.
- /// Unique only within that pipeline.
- public let taskId: Int64
-
- /// The original request.
- public let request: ImageRequest
-
- let isDataTask: Bool
-
- /// Updates the priority of the task, even if it is already running.
- public var priority: ImageRequest.Priority {
- didSet {
- pipeline?.imageTaskUpdatePriorityCalled(self, priority: priority)
- }
- }
- var _priority: ImageRequest.Priority // Backing store for access from pipeline
- // Putting all smaller units closer together (1 byte / 1 byte / 1 byte)
-
- weak var pipeline: ImagePipeline?
-
- // MARK: Progress
-
- /// The number of bytes that the task has received.
- public private(set) var completedUnitCount: Int64 = 0
-
- /// A best-guess upper bound on the number of bytes of the resource.
- public private(set) var totalUnitCount: Int64 = 0
-
- /// Returns a progress object for the task, created lazily.
- public var progress: Progress {
- if _progress == nil { _progress = Progress() }
- return _progress!
- }
- private var _progress: Progress?
-
- var isCancelled: Bool { _isCancelled.pointee == 1 }
- private let _isCancelled: UnsafeMutablePointer
-
- var onCancel: (() -> Void)?
-
- deinit {
- self._isCancelled.deallocate()
- #if TRACK_ALLOCATIONS
- Allocations.decrement("ImageTask")
- #endif
- }
-
- init(taskId: Int64, request: ImageRequest, isDataTask: Bool) {
- self.taskId = taskId
- self.request = request
- self._priority = request.priority
- self.priority = request.priority
- self.isDataTask = isDataTask
-
- self._isCancelled = UnsafeMutablePointer.allocate(capacity: 1)
- self._isCancelled.initialize(to: 0)
-
- #if TRACK_ALLOCATIONS
- Allocations.increment("ImageTask")
- #endif
- }
-
- /// Marks task as being cancelled.
- ///
- /// The pipeline will immediately cancel any work associated with a task
- /// unless there is an equivalent outstanding task running (see
- /// `ImagePipeline.Configuration.isCoalescingEnabled` for more info).
- public func cancel() {
- if OSAtomicCompareAndSwap32Barrier(0, 1, _isCancelled) {
- pipeline?.imageTaskCancelCalled(self)
- }
- }
-
- func setProgress(_ progress: TaskProgress) {
- completedUnitCount = progress.completed
- totalUnitCount = progress.total
- _progress?.completedUnitCount = progress.completed
- _progress?.totalUnitCount = progress.total
- }
-
- // MARK: Hashable
-
- public func hash(into hasher: inout Hasher) {
- hasher.combine(ObjectIdentifier(self).hashValue)
- }
-
- public static func == (lhs: ImageTask, rhs: ImageTask) -> Bool {
- ObjectIdentifier(lhs) == ObjectIdentifier(rhs)
- }
-
- // MARK: CustomStringConvertible
-
- public var description: String {
- "ImageTask(id: \(taskId), priority: \(priority), completedUnitCount: \(completedUnitCount), totalUnitCount: \(totalUnitCount), isCancelled: \(isCancelled))"
- }
-}
diff --git a/Pods/Nuke/Sources/Core/Loading/DataLoader.swift b/Pods/Nuke/Sources/Core/Loading/DataLoader.swift
deleted file mode 100644
index f631c853b..000000000
--- a/Pods/Nuke/Sources/Core/Loading/DataLoader.swift
+++ /dev/null
@@ -1,210 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-/// Provides basic networking using `URLSession`.
-public final class DataLoader: DataLoading, _DataLoaderObserving {
- public let session: URLSession
- private let impl = _DataLoader()
-
- public var observer: DataLoaderObserving?
-
- deinit {
- session.invalidateAndCancel()
-
- #if TRACK_ALLOCATIONS
- Allocations.decrement("DataLoader")
- #endif
- }
-
- /// Initializes `DataLoader` with the given configuration.
- /// - parameter configuration: `URLSessionConfiguration.default` with
- /// `URLCache` with 0 MB memory capacity and 150 MB disk capacity.
- public init(configuration: URLSessionConfiguration = DataLoader.defaultConfiguration,
- validate: @escaping (URLResponse) -> Swift.Error? = DataLoader.validate) {
- let queue = OperationQueue()
- queue.maxConcurrentOperationCount = 1
- self.session = URLSession(configuration: configuration, delegate: impl, delegateQueue: queue)
- self.session.sessionDescription = "Nuke URLSession"
- self.impl.validate = validate
- self.impl.observer = self
-
- #if TRACK_ALLOCATIONS
- Allocations.increment("DataLoader")
- #endif
- }
-
- /// Returns a default configuration which has a `sharedUrlCache` set
- /// as a `urlCache`.
- public static var defaultConfiguration: URLSessionConfiguration {
- let conf = URLSessionConfiguration.default
- conf.urlCache = DataLoader.sharedUrlCache
- return conf
- }
-
- /// Validates `HTTP` responses by checking that the status code is 2xx. If
- /// it's not returns `DataLoader.Error.statusCodeUnacceptable`.
- public static func validate(response: URLResponse) -> Swift.Error? {
- guard let response = response as? HTTPURLResponse else {
- return nil
- }
- return (200..<300).contains(response.statusCode) ? nil : Error.statusCodeUnacceptable(response.statusCode)
- }
-
- #if !os(macOS) && !targetEnvironment(macCatalyst)
- private static let cachePath = "com.github.kean.Nuke.Cache"
- #else
- private static let cachePath: String = {
- let cachePaths = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true)
- if let cachePath = cachePaths.first, let identifier = Bundle.main.bundleIdentifier {
- return cachePath.appending("/" + identifier)
- }
-
- return ""
- }()
- #endif
-
- /// Shared url cached used by a default `DataLoader`. The cache is
- /// initialized with 0 MB memory capacity and 150 MB disk capacity.
- public static let sharedUrlCache: URLCache = {
- let diskCapacity = 150 * 1024 * 1024 // 150 MB
- #if targetEnvironment(macCatalyst)
- return URLCache(memoryCapacity: 0, diskCapacity: diskCapacity, directory: URL(fileURLWithPath: cachePath))
- #else
- return URLCache(memoryCapacity: 0, diskCapacity: diskCapacity, diskPath: cachePath)
- #endif
- }()
-
- public func loadData(with request: URLRequest,
- didReceiveData: @escaping (Data, URLResponse) -> Void,
- completion: @escaping (Swift.Error?) -> Void) -> Cancellable {
- impl.loadData(with: request, session: session, didReceiveData: didReceiveData, completion: completion)
- }
-
- /// Errors produced by `DataLoader`.
- public enum Error: Swift.Error, CustomStringConvertible {
- /// Validation failed.
- case statusCodeUnacceptable(Int)
-
- public var description: String {
- switch self {
- case let .statusCodeUnacceptable(code):
- return "Response status code was unacceptable: \(code.description)"
- }
- }
- }
-
- // MARK: _DataLoaderObserving
-
- func dataTask(_ dataTask: URLSessionDataTask, didReceiveEvent event: DataTaskEvent) {
- observer?.dataLoader(self, urlSession: session, dataTask: dataTask, didReceiveEvent: event)
- }
-}
-
-// Actual data loader implementation. Hide NSObject inheritance, hide
-// URLSessionDataDelegate conformance, and break retain cycle between URLSession
-// and URLSessionDataDelegate.
-private final class _DataLoader: NSObject, URLSessionDataDelegate {
- var validate: (URLResponse) -> Swift.Error? = DataLoader.validate
- private var handlers = [URLSessionTask: _Handler]()
- weak var observer: _DataLoaderObserving?
-
- /// Loads data with the given request.
- func loadData(with request: URLRequest,
- session: URLSession,
- didReceiveData: @escaping (Data, URLResponse) -> Void,
- completion: @escaping (Error?) -> Void) -> Cancellable {
- let task = session.dataTask(with: request)
- let handler = _Handler(didReceiveData: didReceiveData, completion: completion)
- session.delegateQueue.addOperation { // `URLSession` is configured to use this same queue
- self.handlers[task] = handler
- }
- task.taskDescription = "Nuke Load Data"
- task.resume()
- send(task, .resumed)
- return task
- }
-
- // MARK: URLSessionDelegate
-
- func urlSession(_ session: URLSession,
- dataTask: URLSessionDataTask,
- didReceive response: URLResponse,
- completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) {
- send(dataTask, .receivedResponse(response: response))
-
- guard let handler = handlers[dataTask] else {
- completionHandler(.cancel)
- return
- }
- if let error = validate(response) {
- handler.completion(error)
- completionHandler(.cancel)
- return
- }
- completionHandler(.allow)
- }
-
- func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
- assert(task is URLSessionDataTask)
- if let dataTask = task as? URLSessionDataTask {
- send(dataTask, .completed(error: error))
- }
-
- guard let handler = handlers[task] else {
- return
- }
- handlers[task] = nil
- handler.completion(error)
- }
-
- // MARK: URLSessionDataDelegate
-
- func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
- send(dataTask, .receivedData(data: data))
-
- guard let handler = handlers[dataTask], let response = dataTask.response else {
- return
- }
- // Don't store data anywhere, just send it to the pipeline.
- handler.didReceiveData(data, response)
- }
-
- // MARK: Internal
-
- private func send(_ dataTask: URLSessionDataTask, _ event: DataTaskEvent) {
- observer?.dataTask(dataTask, didReceiveEvent: event)
- }
-
- private final class _Handler {
- let didReceiveData: (Data, URLResponse) -> Void
- let completion: (Error?) -> Void
-
- init(didReceiveData: @escaping (Data, URLResponse) -> Void, completion: @escaping (Error?) -> Void) {
- self.didReceiveData = didReceiveData
- self.completion = completion
- }
- }
-}
-
-// MARK: - DataLoaderObserving
-
-/// An event send by the data loader.
-public enum DataTaskEvent {
- case resumed
- case receivedResponse(response: URLResponse)
- case receivedData(data: Data)
- case completed(error: Error?)
-}
-
-/// Allows you to tap into internal events of the data loader. Events are
-/// delivered on the internal serial operation queue.
-public protocol DataLoaderObserving {
- func dataLoader(_ loader: DataLoader, urlSession: URLSession, dataTask: URLSessionDataTask, didReceiveEvent event: DataTaskEvent)
-}
-
-protocol _DataLoaderObserving: AnyObject {
- func dataTask(_ dataTask: URLSessionDataTask, didReceiveEvent event: DataTaskEvent)
-}
diff --git a/Pods/Nuke/Sources/Core/Loading/DataLoading.swift b/Pods/Nuke/Sources/Core/Loading/DataLoading.swift
deleted file mode 100644
index 792bdb617..000000000
--- a/Pods/Nuke/Sources/Core/Loading/DataLoading.swift
+++ /dev/null
@@ -1,23 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-/// A unit of work that can be cancelled.
-public protocol Cancellable: AnyObject {
- func cancel()
-}
-
-/// Fetches original image data.
-public protocol DataLoading {
- /// - parameter didReceiveData: Can be called multiple times if streaming
- /// is supported.
- /// - parameter completion: Must be called once after all (or none in case
- /// of an error) `didReceiveData` closures have been called.
- func loadData(with request: URLRequest,
- didReceiveData: @escaping (Data, URLResponse) -> Void,
- completion: @escaping (Error?) -> Void) -> Cancellable
-}
-
-extension URLSessionTask: Cancellable {}
diff --git a/Pods/Nuke/Sources/Core/Prefetching/ImagePrefetcher.swift b/Pods/Nuke/Sources/Core/Prefetching/ImagePrefetcher.swift
deleted file mode 100644
index ce2fea286..000000000
--- a/Pods/Nuke/Sources/Core/Prefetching/ImagePrefetcher.swift
+++ /dev/null
@@ -1,203 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-/// Prefetches and caches images to eliminate delays when requesting the same
-/// images later.
-///
-/// The prefetcher cancels all of the outstanding tasks when deallocated.
-///
-/// All `ImagePrefetcher` methods are thread-safe and are optimized to be used
-/// even from the main thread during scrolling.
-public final class ImagePrefetcher {
- private let pipeline: ImagePipeline
- private var tasks = [ImageLoadKey: Task]()
- private let destination: Destination
- let queue = OperationQueue() // internal for testing
- public var didComplete: (() -> Void)? // called when # of in-flight tasks decrements to 0
-
- /// Pauses the prefetching.
- ///
- /// - note: When you pause, the prefetcher will finish outstanding tasks
- /// (by default, there are only 2 at a time), and pause the rest.
- public var isPaused: Bool = false {
- didSet { queue.isSuspended = isPaused }
- }
-
- /// The priority of the requests. By default, `.low`.
- ///
- /// Changing the priority also changes the priority of all of the outstanding
- /// tasks managed by the prefetcher.
- public var priority: ImageRequest.Priority = .low {
- didSet {
- let newValue = priority
- pipeline.queue.async { self.didUpdatePriority(to: newValue) }
- }
- }
- private var _priority: ImageRequest.Priority = .low
-
- /// Prefetching destination.
- public enum Destination {
- /// Prefetches the image and stores it in both the memory and the disk
- /// cache (make sure to enable it).
- case memoryCache
-
- /// Prefetches the image data and stores it in disk caches. It does not
- /// require decoding the image data and therefore requires less CPU.
- ///
- /// - warning: This option is incompatible with `DataCachePolicy.automatic`
- /// (for requests with processors) and `DataCachePolicy.storeEncodedImages`.
- case diskCache
- }
-
- /// Initializes the `ImagePrefetcher` instance.
- /// - parameter manager: `Loader.shared` by default.
- /// - parameter destination: `.memoryCache` by default.
- /// - parameter `maxConcurrentRequestCount`: 2 by default.
- public init(pipeline: ImagePipeline = ImagePipeline.shared,
- destination: Destination = .memoryCache,
- maxConcurrentRequestCount: Int = 2) {
- self.pipeline = pipeline
- self.destination = destination
- self.queue.maxConcurrentOperationCount = maxConcurrentRequestCount
- self.queue.underlyingQueue = pipeline.queue
-
- #if TRACK_ALLOCATIONS
- Allocations.increment("ImagePrefetcher")
- #endif
- }
-
- deinit {
- let tasks = self.tasks.values // Make sure we don't retain self
- pipeline.queue.async {
- for task in tasks {
- task.cancel()
- }
- }
-
- #if TRACK_ALLOCATIONS
- Allocations.decrement("ImagePrefetcher")
- #endif
- }
-
- /// Starts prefetching images for the given requests.
- ///
- /// When you need to display the same image later, use the `ImagePipeline`
- /// or the view extensions to load it as usual. The pipeline will take care
- /// of coalescing the requests to avoid any duplicate work.
- ///
- /// The priority of the requests is set to the priority of the prefetcher
- /// (`.low` by default).
- public func startPrefetching(with requests: [ImageRequestConvertible]) {
- pipeline.queue.async {
- for request in requests {
- var request = request.asImageRequest()
- request.priority = self._priority
- self._startPrefetching(with: request)
- }
- }
- }
-
- private func _startPrefetching(with request: ImageRequest) {
- guard pipeline.cache[request] == nil else {
- return // The image is already in memory cache
- }
-
- let key = request.makeImageLoadKey()
- guard tasks[key] == nil else {
- return // Already started prefetching
- }
-
- let task = Task(request: request, key: key)
- task.operation = queue.add { [weak self] finish in
- guard let self = self else { return finish() }
- self.loadImage(task: task, finish: finish)
- }
- tasks[key] = task
- }
-
- private func loadImage(task: Task, finish: @escaping () -> Void) {
- switch destination {
- case .diskCache:
- task.imageTask = pipeline.loadData(with: task.request, isConfined: true, queue: pipeline.queue, progress: nil) { [weak self] _ in
- self?._remove(task)
- finish()
- }
- case .memoryCache:
- task.imageTask = pipeline.loadImage(with: task.request, isConfined: true, queue: pipeline.queue, progress: nil) { [weak self] _ in
- self?._remove(task)
- finish()
- }
- }
- task.onCancelled = finish
- }
-
- private func _remove(_ task: Task) {
- guard tasks[task.key] === task else { return } // Should never happen
- tasks[task.key] = nil
- if tasks.isEmpty {
- didComplete?()
- }
- }
-
- /// Stops prefetching images for the given requests and cancels outstanding
- /// requests.
- ///
- /// You don't need to balance the number of `start` and `stop` requests.
- /// If you have multiple screens with prefetching, create multiple instances
- /// of `ImagePrefetcher`.
- ///
- /// - parameter destination: `.memoryCache` by default.
- public func stopPrefetching(with requests: [ImageRequestConvertible]) {
- pipeline.queue.async {
- for request in requests {
- self._stopPrefetching(with: request.asImageRequest())
- }
- }
- }
-
- private func _stopPrefetching(with request: ImageRequest) {
- if let task = tasks.removeValue(forKey: request.makeImageLoadKey()) {
- task.cancel()
- }
- }
-
- /// Stops all prefetching tasks.
- public func stopPrefetching() {
- pipeline.queue.async {
- self.tasks.values.forEach { $0.cancel() }
- self.tasks.removeAll()
- }
- }
-
- private func didUpdatePriority(to priority: ImageRequest.Priority) {
- guard _priority != priority else { return }
- _priority = priority
- for task in tasks.values {
- task.imageTask?.priority = priority
- }
- }
-
- private final class Task {
- let key: ImageLoadKey
- let request: ImageRequest
- weak var imageTask: ImageTask?
- weak var operation: Operation?
- var onCancelled: (() -> Void)?
-
- init(request: ImageRequest, key: ImageLoadKey) {
- self.request = request
- self.key = key
- }
-
- // When task is cancelled, it is removed from the prefetcher and can
- // never get cancelled twice.
- func cancel() {
- operation?.cancel()
- imageTask?.cancel()
- onCancelled?()
- }
- }
-}
diff --git a/Pods/Nuke/Sources/Core/Processing/ImageDecompression.swift b/Pods/Nuke/Sources/Core/Processing/ImageDecompression.swift
deleted file mode 100644
index 65dfd6482..000000000
--- a/Pods/Nuke/Sources/Core/Processing/ImageDecompression.swift
+++ /dev/null
@@ -1,24 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-struct ImageDecompression {
-
- static func decompress(image: PlatformImage) -> PlatformImage {
- image.decompressed() ?? image
- }
-
- // MARK: Managing Decompression State
-
- static var isDecompressionNeededAK = "ImageDecompressor.isDecompressionNeeded.AssociatedKey"
-
- static func setDecompressionNeeded(_ isDecompressionNeeded: Bool, for image: PlatformImage) {
- objc_setAssociatedObject(image, &isDecompressionNeededAK, isDecompressionNeeded, .OBJC_ASSOCIATION_RETAIN)
- }
-
- static func isDecompressionNeeded(for image: PlatformImage) -> Bool? {
- objc_getAssociatedObject(image, &isDecompressionNeededAK) as? Bool
- }
-}
diff --git a/Pods/Nuke/Sources/Core/Processing/ImageProcessing.swift b/Pods/Nuke/Sources/Core/Processing/ImageProcessing.swift
deleted file mode 100644
index cf6348aff..000000000
--- a/Pods/Nuke/Sources/Core/Processing/ImageProcessing.swift
+++ /dev/null
@@ -1,86 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-/// Performs image processing.
-///
-/// For basic processing needs, implement the following method:
-///
-/// ```
-/// func process(image: PlatformImage) -> PlatformImage?
-/// ```
-///
-/// If your processor needs to manipulate image metadata (`ImageContainer`), or
-/// get access to more information via the context (`ImageProcessingContext`),
-/// there is an additional method that allows you to do that:
-///
-/// ```
-/// func process(image container: ImageContainer, context: ImageProcessingContext) -> ImageContainer?
-/// ```
-///
-/// You must implement either one of those methods.
-public protocol ImageProcessing {
- /// Returns a processed image. By default, returns `nil`.
- ///
- /// - note: Gets called a background queue managed by the pipeline.
- func process(_ image: PlatformImage) -> PlatformImage?
-
- /// Optional method. Returns a processed image. By default, this calls the
- /// basic `process(image:)` method.
- ///
- /// - note: Gets called a background queue managed by the pipeline.
- func process(_ container: ImageContainer, context: ImageProcessingContext) -> ImageContainer?
-
- /// Returns a string that uniquely identifies the processor.
- ///
- /// Consider using the reverse DNS notation.
- var identifier: String { get }
-
- /// Returns a unique processor identifier.
- ///
- /// The default implementation simply returns `var identifier: String` but
- /// can be overridden as a performance optimization - creating and comparing
- /// strings is _expensive_ so you can opt-in to return something which is
- /// fast to create and to compare. See `ImageProcessors.Resize` for an example.
- ///
- /// - note: A common approach is to make your processor `Hashable` and return `self`
- /// from `hashableIdentifier`.
- var hashableIdentifier: AnyHashable { get }
-}
-
-public extension ImageProcessing {
- /// The default implementation simply calls the basic
- /// `process(_ image: PlatformImage) -> PlatformImage?` method.
- func process(_ container: ImageContainer, context: ImageProcessingContext) -> ImageContainer? {
- container.map(process)
- }
-
- /// The default impleemntation simply returns `var identifier: String`.
- var hashableIdentifier: AnyHashable { identifier }
-}
-
-/// Image processing context used when selecting which processor to use.
-public struct ImageProcessingContext {
- public let request: ImageRequest
- public let response: ImageResponse
- public let isFinal: Bool
-
- public init(request: ImageRequest, response: ImageResponse, isFinal: Bool) {
- self.request = request
- self.response = response
- self.isFinal = isFinal
- }
-}
-
-func == (lhs: [ImageProcessing], rhs: [ImageProcessing]) -> Bool {
- guard lhs.count == rhs.count else {
- return false
- }
- // Lazily creates `hashableIdentifiers` because for some processors the
- // identifiers might be expensive to compute.
- return zip(lhs, rhs).allSatisfy {
- $0.hashableIdentifier == $1.hashableIdentifier
- }
-}
diff --git a/Pods/Nuke/Sources/Core/Processing/ImageProcessingOptions.swift b/Pods/Nuke/Sources/Core/Processing/ImageProcessingOptions.swift
deleted file mode 100644
index 127b61814..000000000
--- a/Pods/Nuke/Sources/Core/Processing/ImageProcessingOptions.swift
+++ /dev/null
@@ -1,70 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-#if os(iOS) || os(tvOS) || os(watchOS)
-import UIKit
-#endif
-
-#if os(watchOS)
-import WatchKit
-#endif
-
-#if os(macOS)
-import Cocoa
-#endif
-
-/// A namespace with shared image processing options.
-public enum ImageProcessingOptions {
-
- public enum Unit: CustomStringConvertible {
- case points
- case pixels
-
- public var description: String {
- switch self {
- case .points: return "points"
- case .pixels: return "pixels"
- }
- }
- }
-
- /// Draws a border.
- ///
- /// - warning: To make sure that the border looks the way you expect,
- /// make sure that the images you display exactly match the size of the
- /// views in which they get displayed. If you can't guarantee that, pleasee
- /// consider adding border to a view layer. This should be your primary
- /// option regardless.
- public struct Border: Hashable, CustomStringConvertible {
- public let width: CGFloat
-
- #if os(iOS) || os(tvOS) || os(watchOS)
- public let color: UIColor
-
- /// - parameter color: Border color.
- /// - parameter width: Border width. 1 points by default.
- /// - parameter unit: Unit of the width, `.points` by default.
- public init(color: UIColor, width: CGFloat = 1, unit: Unit = .points) {
- self.color = color
- self.width = width.converted(to: unit)
- }
- #else
- public let color: NSColor
-
- /// - parameter color: Border color.
- /// - parameter width: Border width. 1 points by default.
- /// - parameter unit: Unit of the width, `.points` by default.
- public init(color: NSColor, width: CGFloat = 1, unit: Unit = .points) {
- self.color = color
- self.width = width.converted(to: unit)
- }
- #endif
-
- public var description: String {
- "Border(color: \(color.hex), width: \(width) pixels)"
- }
- }
-}
diff --git a/Pods/Nuke/Sources/Core/Processing/ImageProcessors+Anonymous.swift b/Pods/Nuke/Sources/Core/Processing/ImageProcessors+Anonymous.swift
deleted file mode 100644
index 5ca6f6e78..000000000
--- a/Pods/Nuke/Sources/Core/Processing/ImageProcessors+Anonymous.swift
+++ /dev/null
@@ -1,26 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-extension ImageProcessors {
- /// Processed an image using a specified closure.
- public struct Anonymous: ImageProcessing, CustomStringConvertible {
- public let identifier: String
- private let closure: (PlatformImage) -> PlatformImage?
-
- public init(id: String, _ closure: @escaping (PlatformImage) -> PlatformImage?) {
- self.identifier = id
- self.closure = closure
- }
-
- public func process(_ image: PlatformImage) -> PlatformImage? {
- self.closure(image)
- }
-
- public var description: String {
- "AnonymousProcessor(identifier: \(identifier)"
- }
- }
-}
diff --git a/Pods/Nuke/Sources/Core/Processing/ImageProcessors+Circle.swift b/Pods/Nuke/Sources/Core/Processing/ImageProcessors+Circle.swift
deleted file mode 100644
index 84447f1a3..000000000
--- a/Pods/Nuke/Sources/Core/Processing/ImageProcessors+Circle.swift
+++ /dev/null
@@ -1,34 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-extension ImageProcessors {
-
- /// Rounds the corners of an image into a circle. If the image is not a square,
- /// crops it to a square first.
- public struct Circle: ImageProcessing, Hashable, CustomStringConvertible {
- private let border: ImageProcessingOptions.Border?
-
- /// - parameter border: `nil` by default.
- public init(border: ImageProcessingOptions.Border? = nil) {
- self.border = border
- }
-
- public func process(_ image: PlatformImage) -> PlatformImage? {
- image.processed.byDrawingInCircle(border: border)
- }
-
- public var identifier: String {
- let suffix = border.map { "?border=\($0)" }
- return "com.github.kean/nuke/circle" + (suffix ?? "")
- }
-
- public var hashableIdentifier: AnyHashable { self }
-
- public var description: String {
- "Circle(border: \(border?.description ?? "nil"))"
- }
- }
-}
diff --git a/Pods/Nuke/Sources/Core/Processing/ImageProcessors+Composition.swift b/Pods/Nuke/Sources/Core/Processing/ImageProcessors+Composition.swift
deleted file mode 100644
index d2e5fb68f..000000000
--- a/Pods/Nuke/Sources/Core/Processing/ImageProcessors+Composition.swift
+++ /dev/null
@@ -1,57 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-extension ImageProcessors {
- /// Composes multiple processors.
- public struct Composition: ImageProcessing, Hashable, CustomStringConvertible {
- let processors: [ImageProcessing]
-
- /// Composes multiple processors.
- public init(_ processors: [ImageProcessing]) {
- // note: multiple compositions are not flatten by default.
- self.processors = processors
- }
-
- public func process(_ image: PlatformImage) -> PlatformImage? {
- processors.reduce(image) { image, processor in
- autoreleasepool {
- image.flatMap { processor.process($0) }
- }
- }
- }
-
- /// Processes the given image by applying each processor in an order in
- /// which they were added. If one of the processors fails to produce
- /// an image the processing stops and `nil` is returned.
- public func process(_ container: ImageContainer, context: ImageProcessingContext) -> ImageContainer? {
- processors.reduce(container) { container, processor in
- autoreleasepool {
- container.flatMap { processor.process($0, context: context) }
- }
- }
- }
-
- public var identifier: String {
- processors.map({ $0.identifier }).joined()
- }
-
- public var hashableIdentifier: AnyHashable { self }
-
- public func hash(into hasher: inout Hasher) {
- for processor in processors {
- hasher.combine(processor.hashableIdentifier)
- }
- }
-
- public static func == (lhs: Composition, rhs: Composition) -> Bool {
- lhs.processors == rhs.processors
- }
-
- public var description: String {
- "Composition(processors: \(processors))"
- }
- }
-}
diff --git a/Pods/Nuke/Sources/Core/Processing/ImageProcessors+CoreImage.swift b/Pods/Nuke/Sources/Core/Processing/ImageProcessors+CoreImage.swift
deleted file mode 100644
index b6ca76c4c..000000000
--- a/Pods/Nuke/Sources/Core/Processing/ImageProcessors+CoreImage.swift
+++ /dev/null
@@ -1,87 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-#if os(iOS) || os(tvOS) || os(macOS)
-
-import Foundation
-import CoreImage
-
-extension ImageProcessors {
-
- /// Applies Core Image filter (`CIFilter`) to the image.
- ///
- /// # Performance Considerations.
- ///
- /// Prefer chaining multiple `CIFilter` objects using `Core Image` facilities
- /// instead of using multiple instances of `ImageProcessors.CoreImageFilter`.
- ///
- /// # References
- ///
- /// - [Core Image Programming Guide](https://developer.apple.com/library/ios/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_intro/ci_intro.html)
- /// - [Core Image Filter Reference](https://developer.apple.com/library/prerelease/ios/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html)
- public struct CoreImageFilter: ImageProcessing, CustomStringConvertible {
- private let name: String
- private let parameters: [String: Any]
- public let identifier: String
-
- /// - parameter identifier: Uniquely identifies the processor.
- public init(name: String, parameters: [String: Any], identifier: String) {
- self.name = name
- self.parameters = parameters
- self.identifier = identifier
- }
-
- public init(name: String) {
- self.name = name
- self.parameters = [:]
- self.identifier = "com.github.kean/nuke/core_image?name=\(name))"
- }
-
- public func process(_ image: PlatformImage) -> PlatformImage? {
- let filter = CIFilter(name: name, parameters: parameters)
- return CoreImageFilter.apply(filter: filter, to: image)
- }
-
- // MARK: - Apply Filter
-
- /// A default context shared between all Core Image filters. The context
- /// has `.priorityRequestLow` option set to `true`.
- public static var context = CIContext(options: [.priorityRequestLow: true])
-
- public static func apply(filter: CIFilter?, to image: PlatformImage) -> PlatformImage? {
- guard let filter = filter else {
- return nil
- }
- return applyFilter(to: image) {
- filter.setValue($0, forKey: kCIInputImageKey)
- return filter.outputImage
- }
- }
-
- static func applyFilter(to image: PlatformImage, context: CIContext = context, closure: (CoreImage.CIImage) -> CoreImage.CIImage?) -> PlatformImage? {
- let ciImage: CoreImage.CIImage? = {
- if let image = image.ciImage {
- return image
- }
- if let image = image.cgImage {
- return CoreImage.CIImage(cgImage: image)
- }
- return nil
- }()
- guard let inputImage = ciImage, let outputImage = closure(inputImage) else {
- return nil
- }
- guard let imageRef = context.createCGImage(outputImage, from: outputImage.extent) else {
- return nil
- }
- return PlatformImage.make(cgImage: imageRef, source: image)
- }
-
- public var description: String {
- "CoreImageFilter(name: \(name), parameters: \(parameters))"
- }
- }
-}
-
-#endif
diff --git a/Pods/Nuke/Sources/Core/Processing/ImageProcessors+GaussianBlur.swift b/Pods/Nuke/Sources/Core/Processing/ImageProcessors+GaussianBlur.swift
deleted file mode 100644
index 019410072..000000000
--- a/Pods/Nuke/Sources/Core/Processing/ImageProcessors+GaussianBlur.swift
+++ /dev/null
@@ -1,40 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-#if os(iOS) || os(tvOS) || os(macOS)
-
-import Foundation
-import CoreImage
-
-extension ImageProcessors {
- /// Blurs an image using `CIGaussianBlur` filter.
- public struct GaussianBlur: ImageProcessing, Hashable, CustomStringConvertible {
- private let radius: Int
-
- /// Initializes the receiver with a blur radius.
- ///
- /// - parameter radius: `8` by default.
- public init(radius: Int = 8) {
- self.radius = radius
- }
-
- /// Applies `CIGaussianBlur` filter to the image.
- public func process(_ image: PlatformImage) -> PlatformImage? {
- let filter = CIFilter(name: "CIGaussianBlur", parameters: ["inputRadius": radius])
- return CoreImageFilter.apply(filter: filter, to: image)
- }
-
- public var identifier: String {
- "com.github.kean/nuke/gaussian_blur?radius=\(radius)"
- }
-
- public var hashableIdentifier: AnyHashable { self }
-
- public var description: String {
- "GaussianBlur(radius: \(radius))"
- }
- }
-}
-
-#endif
diff --git a/Pods/Nuke/Sources/Core/Processing/ImageProcessors+Resize.swift b/Pods/Nuke/Sources/Core/Processing/ImageProcessors+Resize.swift
deleted file mode 100644
index 05d27c34a..000000000
--- a/Pods/Nuke/Sources/Core/Processing/ImageProcessors+Resize.swift
+++ /dev/null
@@ -1,103 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-import CoreGraphics
-
-extension ImageProcessors {
- /// Scales an image to a specified size.
- public struct Resize: ImageProcessing, Hashable, CustomStringConvertible {
- private let size: Size
- private let contentMode: ContentMode
- private let crop: Bool
- private let upscale: Bool
-
- /// An option for how to resize the image.
- public enum ContentMode: CustomStringConvertible {
- /// Scales the image so that it completely fills the target area.
- /// Maintains the aspect ratio of the original image.
- case aspectFill
-
- /// Scales the image so that it fits the target size. Maintains the
- /// aspect ratio of the original image.
- case aspectFit
-
- public var description: String {
- switch self {
- case .aspectFill: return ".aspectFill"
- case .aspectFit: return ".aspectFit"
- }
- }
- }
-
- /// Initializes the processor with the given size.
- ///
- /// - parameter size: The target size.
- /// - parameter unit: Unit of the target size, `.points` by default.
- /// - parameter contentMode: `.aspectFill` by default.
- /// - parameter crop: If `true` will crop the image to match the target size.
- /// Does nothing with content mode .aspectFill. `false` by default.
- /// - parameter upscale: `false` by default.
- public init(size: CGSize, unit: ImageProcessingOptions.Unit = .points, contentMode: ContentMode = .aspectFill, crop: Bool = false, upscale: Bool = false) {
- self.size = Size(size: size, unit: unit)
- self.contentMode = contentMode
- self.crop = crop
- self.upscale = upscale
- }
-
- /// Scales an image to the given width preserving aspect ratio.
- ///
- /// - parameter width: The target width.
- /// - parameter unit: Unit of the target size, `.points` by default.
- /// - parameter upscale: `false` by default.
- public init(width: CGFloat, unit: ImageProcessingOptions.Unit = .points, upscale: Bool = false) {
- self.init(size: CGSize(width: width, height: 9999), unit: unit, contentMode: .aspectFit, crop: false, upscale: upscale)
- }
-
- /// Scales an image to the given height preserving aspect ratio.
- ///
- /// - parameter height: The target height.
- /// - parameter unit: Unit of the target size, `.points` by default.
- /// - parameter upscale: `false` by default.
- public init(height: CGFloat, unit: ImageProcessingOptions.Unit = .points, upscale: Bool = false) {
- self.init(size: CGSize(width: 9999, height: height), unit: unit, contentMode: .aspectFit, crop: false, upscale: upscale)
- }
-
- public func process(_ image: PlatformImage) -> PlatformImage? {
- if crop && contentMode == .aspectFill {
- return image.processed.byResizingAndCropping(to: size.cgSize)
- }
- return image.processed.byResizing(to: size.cgSize, contentMode: contentMode, upscale: upscale)
- }
-
- public var identifier: String {
- "com.github.kean/nuke/resize?s=\(size.cgSize),cm=\(contentMode),crop=\(crop),upscale=\(upscale)"
- }
-
- public var hashableIdentifier: AnyHashable { self }
-
- public var description: String {
- "Resize(size: \(size.cgSize) pixels, contentMode: \(contentMode), crop: \(crop), upscale: \(upscale))"
- }
- }
-}
-
-// Adds Hashable without making changes to public CGSize API
-private struct Size: Hashable {
- let cgSize: CGSize
-
- /// Creates the size in pixels by scaling to the input size to the screen scale
- /// if needed.
- init(size: CGSize, unit: ImageProcessingOptions.Unit) {
- switch unit {
- case .pixels: self.cgSize = size // The size is already in pixels
- case .points: self.cgSize = size.scaled(by: Screen.scale)
- }
- }
-
- func hash(into hasher: inout Hasher) {
- hasher.combine(cgSize.width)
- hasher.combine(cgSize.height)
- }
-}
diff --git a/Pods/Nuke/Sources/Core/Processing/ImageProcessors+RoundedCorners.swift b/Pods/Nuke/Sources/Core/Processing/ImageProcessors+RoundedCorners.swift
deleted file mode 100644
index 239812acf..000000000
--- a/Pods/Nuke/Sources/Core/Processing/ImageProcessors+RoundedCorners.swift
+++ /dev/null
@@ -1,42 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-import CoreGraphics
-
-extension ImageProcessors {
- /// Rounds the corners of an image to the specified radius.
- ///
- /// - warning: In order for the corners to be displayed correctly, the image must exactly match the size
- /// of the image view in which it will be displayed. See `ImageProcessor.Resize` for more info.
- public struct RoundedCorners: ImageProcessing, Hashable, CustomStringConvertible {
- private let radius: CGFloat
- private let border: ImageProcessingOptions.Border?
-
- /// Initializes the processor with the given radius.
- ///
- /// - parameter radius: The radius of the corners.
- /// - parameter unit: Unit of the radius, `.points` by default.
- /// - parameter border: An optional border drawn around the image.
- public init(radius: CGFloat, unit: ImageProcessingOptions.Unit = .points, border: ImageProcessingOptions.Border? = nil) {
- self.radius = radius.converted(to: unit)
- self.border = border
- }
-
- public func process(_ image: PlatformImage) -> PlatformImage? {
- image.processed.byAddingRoundedCorners(radius: radius, border: border)
- }
-
- public var identifier: String {
- let suffix = border.map { ",border=\($0)" }
- return "com.github.kean/nuke/rounded_corners?radius=\(radius)" + (suffix ?? "")
- }
-
- public var hashableIdentifier: AnyHashable { self }
-
- public var description: String {
- "RoundedCorners(radius: \(radius) pixels, border: \(border?.description ?? "nil"))"
- }
- }
-}
diff --git a/Pods/Nuke/Sources/Core/Processing/ImageProcessors.swift b/Pods/Nuke/Sources/Core/Processing/ImageProcessors.swift
deleted file mode 100644
index e09b62029..000000000
--- a/Pods/Nuke/Sources/Core/Processing/ImageProcessors.swift
+++ /dev/null
@@ -1,113 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-#if os(iOS) || os(tvOS) || os(watchOS)
-import UIKit
-#endif
-
-#if os(watchOS)
-import WatchKit
-#endif
-
-#if os(macOS)
-import Cocoa
-#endif
-
-/// A namespace for all processors that implement `ImageProcessing` protocol.
-public enum ImageProcessors {}
-
-#if swift(>=5.5)
-extension ImageProcessing where Self == ImageProcessors.Resize {
- /// Scales an image to a specified size.
- ///
- /// - parameter size: The target size.
- /// - parameter unit: Unit of the target size, `.points` by default.
- /// - parameter contentMode: `.aspectFill` by default.
- /// - parameter crop: If `true` will crop the image to match the target size.
- /// Does nothing with content mode .aspectFill. `false` by default.
- /// - parameter upscale: `false` by default.
- public static func resize(size: CGSize, unit: ImageProcessingOptions.Unit = .points, contentMode: ImageProcessors.Resize.ContentMode = .aspectFill, crop: Bool = false, upscale: Bool = false) -> ImageProcessors.Resize {
- ImageProcessors.Resize(size: size, unit: unit, contentMode: contentMode, crop: crop, upscale: upscale)
- }
-
- /// Scales an image to the given width preserving aspect ratio.
- ///
- /// - parameter width: The target width.
- /// - parameter unit: Unit of the target size, `.points` by default.
- /// - parameter upscale: `false` by default.
- public static func resize(width: CGFloat, unit: ImageProcessingOptions.Unit = .points, upscale: Bool = false) -> ImageProcessors.Resize {
- ImageProcessors.Resize(width: width, unit: unit, upscale: upscale)
- }
-
- /// Scales an image to the given height preserving aspect ratio.
- ///
- /// - parameter height: The target height.
- /// - parameter unit: Unit of the target size, `.points` by default.
- /// - parameter upscale: `false` by default.
- public static func resize(height: CGFloat, unit: ImageProcessingOptions.Unit = .points, upscale: Bool = false) -> ImageProcessors.Resize {
- ImageProcessors.Resize(height: height, unit: unit, upscale: upscale)
- }
-}
-
-extension ImageProcessing where Self == ImageProcessors.Circle {
- /// Rounds the corners of an image into a circle. If the image is not a square,
- /// crops it to a square first.
- ///
- /// - parameter border: `nil` by default.
- public static func circle(border: ImageProcessingOptions.Border? = nil) -> ImageProcessors.Circle {
- ImageProcessors.Circle(border: border)
- }
-}
-
-extension ImageProcessing where Self == ImageProcessors.RoundedCorners {
- /// Rounds the corners of an image to the specified radius.
- ///
- /// - parameter radius: The radius of the corners.
- /// - parameter unit: Unit of the radius, `.points` by default.
- /// - parameter border: An optional border drawn around the image.
- ///
- /// - warning: In order for the corners to be displayed correctly, the image must exactly match the size
- /// of the image view in which it will be displayed. See `ImageProcessor.Resize` for more info.
- public static func roundedCorners(radius: CGFloat, unit: ImageProcessingOptions.Unit = .points, border: ImageProcessingOptions.Border? = nil) -> ImageProcessors.RoundedCorners {
- ImageProcessors.RoundedCorners(radius: radius, unit: unit, border: border)
- }
-}
-
-#if os(iOS) || os(tvOS) || os(macOS)
-
-extension ImageProcessing where Self == ImageProcessors.CoreImageFilter {
- /// Applies Core Image filter (`CIFilter`) to the image.
- ///
- /// - parameter identifier: Uniquely identifies the processor.
- public static func coreImageFilter(name: String, parameters: [String: Any], identifier: String) -> ImageProcessors.CoreImageFilter {
- ImageProcessors.CoreImageFilter(name: name, parameters: parameters, identifier: identifier)
- }
-
- /// Applies Core Image filter (`CIFilter`) to the image.
- ///
- public static func coreImageFilter(name: String) -> ImageProcessors.CoreImageFilter {
- ImageProcessors.CoreImageFilter(name: name)
- }
-}
-
-extension ImageProcessing where Self == ImageProcessors.GaussianBlur {
- /// Blurs an image using `CIGaussianBlur` filter.
- ///
- /// - parameter radius: `8` by default.
- public static func gaussianBlur(radius: Int = 8) -> ImageProcessors.GaussianBlur {
- ImageProcessors.GaussianBlur(radius: radius)
- }
-}
-
-#endif
-
-extension ImageProcessing where Self == ImageProcessors.Anonymous {
- /// Processed an image using a specified closure.
- public static func process(id: String, _ closure: @escaping (PlatformImage) -> PlatformImage?) -> ImageProcessors.Anonymous {
- ImageProcessors.Anonymous(id: id, closure)
- }
-}
-#endif
diff --git a/Pods/Nuke/Sources/Core/Tasks/AsyncTask.swift b/Pods/Nuke/Sources/Core/Tasks/AsyncTask.swift
deleted file mode 100644
index 8d11a5382..000000000
--- a/Pods/Nuke/Sources/Core/Tasks/AsyncTask.swift
+++ /dev/null
@@ -1,382 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-/// Represents a task with support for multiple observers, cancellation,
-/// progress reporting, dependencies – everything that `ImagePipeline` needs.
-///
-/// A `AsyncTask` can have zero or more subscriptions (`TaskSubscription`) which can
-/// be used to later unsubscribe or change the priority of the subscription.
-///
-/// The task has built-in support for operations (`Foundation.Operation`) – it
-/// automatically cancels them, updates the priority, etc. Most steps in the
-/// image pipeline are represented using Operation to take advantage of these features.
-///
-/// - warning: Must be thread-confined!
-class AsyncTask: AsyncTaskSubscriptionDelegate {
-
- private struct Subscription {
- let closure: (Event) -> Void
- weak var subscriber: AnyObject?
- var priority: TaskPriority
- }
-
- // In most situations, especially for intermediate tasks, the almost almost
- // only one subscription.
- private var inlineSubscription: Subscription?
- private var subscriptions: [TaskSubscriptionKey: Subscription]? // Create lazily
- private var nextSubscriptionKey = 0
-
- var subscribers: [AnyObject] {
- var output = [AnyObject?]()
- output.append(inlineSubscription?.subscriber)
- subscriptions?.values.forEach { output.append($0.subscriber) }
- return output.compactMap { $0 }
- }
-
- /// Returns `true` if the task was either cancelled, or was completed.
- private(set) var isDisposed = false
- private var isStarted = false
-
- /// Gets called when the task is either cancelled, or was completed.
- var onDisposed: (() -> Void)?
-
- var onCancelled: (() -> Void)?
-
- var priority: TaskPriority = .normal {
- didSet {
- guard oldValue != priority else { return }
- operation?.queuePriority = priority.queuePriority
- dependency?.setPriority(priority)
- dependency2?.setPriority(priority)
- }
- }
-
- /// A task might have a dependency. The task automatically unsubscribes
- /// from the dependency when it gets cancelled, and also updates the
- /// priority of the subscription to the dependency when its own
- /// priority is updated.
- var dependency: TaskSubscription? {
- didSet {
- dependency?.setPriority(priority)
- }
- }
-
- // The tasks only ever need up to 2 dependencies and this code is much faster
- // than creating an array.
- var dependency2: TaskSubscription? {
- didSet {
- dependency2?.setPriority(priority)
- }
- }
-
- weak var operation: Foundation.Operation? {
- didSet {
- guard priority != .normal else { return }
- operation?.queuePriority = priority.queuePriority
- }
- }
-
- /// Publishes the results of the task.
- var publisher: Publisher { Publisher(task: self) }
-
- #if TRACK_ALLOCATIONS
- deinit {
- Allocations.decrement("AsyncTask")
- }
-
- init() {
- Allocations.increment("AsyncTask")
- }
- #endif
-
- /// Override this to start image task. Only gets called once.
- func start() {}
-
- // MARK: - Managing Observers
-
- /// - notes: Returns `nil` if the task was disposed.
- private func subscribe(priority: TaskPriority = .normal, subscriber: AnyObject? = nil, _ closure: @escaping (Event) -> Void) -> TaskSubscription? {
- guard !isDisposed else { return nil }
-
- let subscriptionKey = nextSubscriptionKey
- nextSubscriptionKey += 1
- let subscription = TaskSubscription(task: self, key: subscriptionKey)
-
- if subscriptionKey == 0 {
- inlineSubscription = Subscription(closure: closure, subscriber: subscriber, priority: priority)
- } else {
- if subscriptions == nil { subscriptions = [:] }
- subscriptions![subscriptionKey] = Subscription(closure: closure, subscriber: subscriber, priority: priority)
- }
-
- updatePriority(suggestedPriority: priority)
-
- if !isStarted {
- isStarted = true
- start()
- }
-
- // The task may have been completed synchronously by `starter`.
- guard !isDisposed else { return nil }
-
- return subscription
- }
-
- // MARK: - TaskSubscriptionDelegate
-
- fileprivate func setPriority(_ priority: TaskPriority, for key: TaskSubscriptionKey) {
- guard !isDisposed else { return }
-
- if key == 0 {
- inlineSubscription?.priority = priority
- } else {
- subscriptions![key]?.priority = priority
- }
- updatePriority(suggestedPriority: priority)
- }
-
- fileprivate func unsubsribe(key: TaskSubscriptionKey) {
- if key == 0 {
- guard inlineSubscription != nil else { return }
- inlineSubscription = nil
- } else {
- guard subscriptions!.removeValue(forKey: key) != nil else { return }
- }
-
- guard !isDisposed else { return }
-
- if inlineSubscription == nil && subscriptions?.isEmpty ?? true {
- terminate(reason: .cancelled)
- } else {
- updatePriority(suggestedPriority: nil)
- }
- }
-
- // MARK: - Sending Events
-
- func send(value: Value, isCompleted: Bool = false) {
- send(event: .value(value, isCompleted: isCompleted))
- }
-
- func send(error: Error) {
- send(event: .error(error))
- }
-
- func send(progress: TaskProgress) {
- send(event: .progress(progress))
- }
-
- private func send(event: Event) {
- guard !isDisposed else { return }
-
- switch event {
- case let .value(_, isCompleted):
- if isCompleted {
- terminate(reason: .finished)
- }
- case .progress:
- break // Simply send the event
- case .error:
- terminate(reason: .finished)
- }
-
- inlineSubscription?.closure(event)
- if let subscriptions = subscriptions {
- for subscription in subscriptions.values {
- subscription.closure(event)
- }
- }
- }
-
- // MARK: - Termination
-
- private enum TerminationReason {
- case finished, cancelled
- }
-
- private func terminate(reason: TerminationReason) {
- guard !isDisposed else { return }
- isDisposed = true
-
- if reason == .cancelled {
- operation?.cancel()
- dependency?.unsubscribe()
- dependency2?.unsubscribe()
- onCancelled?()
- }
- onDisposed?()
- }
-
- // MARK: - Priority
-
- private func updatePriority(suggestedPriority: TaskPriority?) {
- if let suggestedPriority = suggestedPriority, suggestedPriority >= priority {
- // No need to recompute, won't go higher than that
- priority = suggestedPriority
- return
- }
-
- var newPriority = inlineSubscription?.priority
- // Same as subscriptions.map { $0?.priority }.max() but without allocating
- // any memory for redundant arrays
- if let subscriptions = subscriptions {
- for subscription in subscriptions.values {
- if newPriority == nil {
- newPriority = subscription.priority
- } else if subscription.priority > newPriority! {
- newPriority = subscription.priority
- }
- }
- }
- self.priority = newPriority ?? .normal
- }
-}
-
-// MARK: - AsyncTask (Publisher)
-
-extension AsyncTask {
- /// Publishes the results of the task.
- struct Publisher {
- fileprivate let task: AsyncTask
-
- /// Attaches the subscriber to the task.
- /// - notes: Returns `nil` if the task is already disposed.
- func subscribe(priority: TaskPriority = .normal, subscriber: AnyObject? = nil, _ closure: @escaping (Event) -> Void) -> TaskSubscription? {
- task.subscribe(priority: priority, subscriber: subscriber, closure)
- }
-
- /// Attaches the subscriber to the task. Automatically forwards progress
- /// andd error events to the given task.
- /// - notes: Returns `nil` if the task is already disposed.
- func subscribe(_ task: AsyncTask, onValue: @escaping (Value, Bool) -> Void) -> TaskSubscription? {
- subscribe(subscriber: task) { [weak task] event in
- guard let task = task else { return }
- switch event {
- case let .value(value, isCompleted):
- onValue(value, isCompleted)
- case let .progress(progress):
- task.send(progress: progress)
- case let .error(error):
- task.send(error: error)
- }
- }
- }
- }
-}
-
-struct TaskProgress: Hashable {
- let completed: Int64
- let total: Int64
-}
-
-enum TaskPriority: Int, Comparable {
- case veryLow = 0, low, normal, high, veryHigh
-
- var queuePriority: Operation.QueuePriority {
- switch self {
- case .veryLow: return .veryLow
- case .low: return .low
- case .normal: return .normal
- case .high: return .high
- case .veryHigh: return .veryHigh
- }
- }
-
- static func < (lhs: TaskPriority, rhs: TaskPriority) -> Bool {
- lhs.rawValue < rhs.rawValue
- }
-}
-
-// MARK: - AsyncTask.Event {
-extension AsyncTask {
- enum Event {
- case value(Value, isCompleted: Bool)
- case progress(TaskProgress)
- case error(Error)
-
- var isCompleted: Bool {
- switch self {
- case let .value(_, isCompleted): return isCompleted
- case .progress: return false
- case .error: return true
- }
- }
- }
-}
-
-extension AsyncTask.Event: Equatable where Value: Equatable, Error: Equatable {}
-
-// MARK: - TaskSubscription
-
-/// Represents a subscription to a task. The observer must retain a strong
-/// reference to a subscription.
-struct TaskSubscription {
- private let task: AsyncTaskSubscriptionDelegate
- private let key: TaskSubscriptionKey
-
- fileprivate init(task: AsyncTaskSubscriptionDelegate, key: TaskSubscriptionKey) {
- self.task = task
- self.key = key
- }
-
- /// Removes the subscription from the task. The observer won't receive any
- /// more events from the task.
- ///
- /// If there are no more subscriptions attached to the task, the task gets
- /// cancelled along with its dependencies. The cancelled task is
- /// marked as disposed.
- func unsubscribe() {
- task.unsubsribe(key: key)
- }
-
- /// Updates the priority of the subscription. The priority of the task is
- /// calculated as the maximum priority out of all of its subscription. When
- /// the priority of the task is updated, the priority of a dependency also is.
- ///
- /// - note: The priority also automatically gets updated when the subscription
- /// is removed from the task.
- func setPriority(_ priority: TaskPriority) {
- task.setPriority(priority, for: key)
- }
-}
-
-private protocol AsyncTaskSubscriptionDelegate: AnyObject {
- func unsubsribe(key: TaskSubscriptionKey)
- func setPriority(_ priority: TaskPriority, for observer: TaskSubscriptionKey)
-}
-
-private typealias TaskSubscriptionKey = Int
-
-// MARK: - TaskPool
-
-/// Contains the tasks which haven't completed yet.
-final class TaskPool {
- private let isCoalescingEnabled: Bool
- private var map = [Key: AsyncTask]()
-
- init(_ isCoalescingEnabled: Bool) {
- self.isCoalescingEnabled = isCoalescingEnabled
- }
-
- /// Creates a task with the given key. If there is an outstanding task with
- /// the given key in the pool, the existing task is returned. Tasks are
- /// automatically removed from the pool when they are disposed.
- func publisherForKey(_ key: @autoclosure () -> Key, _ make: () -> AsyncTask) -> AsyncTask.Publisher {
- guard isCoalescingEnabled else {
- return make().publisher
- }
- let key = key()
- if let task = map[key] {
- return task.publisher
- }
- let task = make()
- map[key] = task
- task.onDisposed = { [weak self] in
- self?.map[key] = nil
- }
- return task.publisher
- }
-}
diff --git a/Pods/Nuke/Sources/Core/Tasks/ImagePipelineTask.swift b/Pods/Nuke/Sources/Core/Tasks/ImagePipelineTask.swift
deleted file mode 100644
index 6dc145162..000000000
--- a/Pods/Nuke/Sources/Core/Tasks/ImagePipelineTask.swift
+++ /dev/null
@@ -1,43 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-// Each task holds a strong reference to the pipeline. This is by design. The
-// user does not need to hold a strong reference to the pipeline.
-class ImagePipelineTask: AsyncTask {
- let pipeline: ImagePipeline
- // A canonical request representing the unit work performed by the task.
- let request: ImageRequest
-
- init(_ pipeline: ImagePipeline, _ request: ImageRequest) {
- self.pipeline = pipeline
- self.request = request
- }
-
- /// Executes work on the pipeline synchronization queue.
- func async(_ work: @escaping () -> Void) {
- pipeline.queue.async(execute: work)
- }
-}
-
-// Returns all image tasks subscribed to the current pipeline task.
-// A suboptimal approach just to make the new DiskCachPolicy.automatic work.
-protocol ImageTaskSubscribers {
- var imageTasks: [ImageTask] { get }
-}
-
-extension ImageTask: ImageTaskSubscribers {
- var imageTasks: [ImageTask] {
- [self]
- }
-}
-
-extension ImagePipelineTask: ImageTaskSubscribers {
- var imageTasks: [ImageTask] {
- subscribers.flatMap { subscribers -> [ImageTask] in
- (subscribers as? ImageTaskSubscribers)?.imageTasks ?? []
- }
- }
-}
diff --git a/Pods/Nuke/Sources/Core/Tasks/OperationTask.swift b/Pods/Nuke/Sources/Core/Tasks/OperationTask.swift
deleted file mode 100644
index 5a7815261..000000000
--- a/Pods/Nuke/Sources/Core/Tasks/OperationTask.swift
+++ /dev/null
@@ -1,34 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-/// A one-shot task for performing a single () -> T function.
-final class OperationTask: AsyncTask {
- private let pipeline: ImagePipeline
- private let queue: OperationQueue
- private let process: () -> T?
-
- init(_ pipeline: ImagePipeline, _ queue: OperationQueue, _ process: @escaping () -> T?) {
- self.pipeline = pipeline
- self.queue = queue
- self.process = process
- }
-
- override func start() {
- operation = queue.add { [weak self] in
- guard let self = self else { return }
- let output = self.process()
- self.pipeline.queue.async {
- guard let output = output else {
- self.send(error: Error())
- return
- }
- self.send(value: output, isCompleted: true)
- }
- }
- }
-
- struct Error: Swift.Error {}
-}
diff --git a/Pods/Nuke/Sources/Core/Tasks/TaskFetchDecodedImage.swift b/Pods/Nuke/Sources/Core/Tasks/TaskFetchDecodedImage.swift
deleted file mode 100644
index 8788be4d1..000000000
--- a/Pods/Nuke/Sources/Core/Tasks/TaskFetchDecodedImage.swift
+++ /dev/null
@@ -1,86 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-/// Receives data from ``TaskLoadImageData` and decodes it as it arrives.
-final class TaskFetchDecodedImage: ImagePipelineTask {
- private var decoder: ImageDecoding?
-
- override func start() {
- dependency = pipeline.makeTaskFetchOriginalImageData(for: request).subscribe(self) { [weak self] in
- self?.didReceiveData($0.0, urlResponse: $0.1, isCompleted: $1)
- }
- }
-
- /// Receiving data from `OriginalDataTask`.
- private func didReceiveData(_ data: Data, urlResponse: URLResponse?, isCompleted: Bool) {
- guard isCompleted || pipeline.configuration.isProgressiveDecodingEnabled else {
- return
- }
-
- if !isCompleted && operation != nil {
- return // Back pressure - already decoding another progressive data chunk
- }
-
- if isCompleted {
- operation?.cancel() // Cancel any potential pending progressive decoding tasks
- }
-
- // Sanity check
- guard !data.isEmpty else {
- if isCompleted {
- send(error: .decodingFailed)
- }
- return
- }
-
- guard let decoder = decoder(data: data, urlResponse: urlResponse, isCompleted: isCompleted) else {
- if isCompleted {
- send(error: .decodingFailed)
- } // Try again when more data is downloaded.
- return
- }
-
- // Fast-track default decoders, most work is already done during
- // initialization anyway.
- let decode = {
- signpost(log, "DecodeImageData", isCompleted ? "FinalImage" : "ProgressiveImage") {
- decoder.decode(data, urlResponse: urlResponse, isCompleted: isCompleted, cacheType: nil)
- }
- }
- if !decoder.isAsynchronous {
- self.sendResponse(decode(), isCompleted: isCompleted)
- } else {
- operation = pipeline.configuration.imageDecodingQueue.add { [weak self] in
- guard let self = self else { return }
-
- let response = decode()
- self.async {
- self.sendResponse(response, isCompleted: isCompleted)
- }
- }
- }
- }
-
- private func sendResponse(_ response: ImageResponse?, isCompleted: Bool) {
- if let response = response {
- send(value: response, isCompleted: isCompleted)
- } else if isCompleted {
- send(error: .decodingFailed)
- }
- }
-
- // Lazily creates decoding for task
- private func decoder(data: Data, urlResponse: URLResponse?, isCompleted: Bool) -> ImageDecoding? {
- // Return the existing processor in case it has already been created.
- if let decoder = self.decoder {
- return decoder
- }
- let context = ImageDecodingContext(request: request, data: data, isCompleted: isCompleted, urlResponse: urlResponse)
- let decoder = pipeline.delegate.imageDecoder(for: context, pipeline: pipeline)
- self.decoder = decoder
- return decoder
- }
-}
diff --git a/Pods/Nuke/Sources/Core/Tasks/TaskFetchOriginalImageData.swift b/Pods/Nuke/Sources/Core/Tasks/TaskFetchOriginalImageData.swift
deleted file mode 100644
index 42fe58847..000000000
--- a/Pods/Nuke/Sources/Core/Tasks/TaskFetchOriginalImageData.swift
+++ /dev/null
@@ -1,167 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-/// Fetches original image from the data loader (`DataLoading`) and stores it
-/// in the disk cache (`DataCaching`).
-final class TaskFetchOriginalImageData: ImagePipelineTask<(Data, URLResponse?)> {
- private var urlResponse: URLResponse?
- private var resumableData: ResumableData?
- private var resumedDataCount: Int64 = 0
- private lazy var data = Data()
-
- override func start() {
- guard let urlRequest = request.urlRequest else {
- self.send(error: .dataLoadingFailed(URLError(.badURL)))
- return
- }
-
- if let rateLimiter = pipeline.rateLimiter {
- // Rate limiter is synchronized on pipeline's queue. Delayed work is
- // executed asynchronously also on the same queue.
- rateLimiter.execute { [weak self] in
- guard let self = self, !self.isDisposed else {
- return false
- }
- self.loadData(urlRequest: urlRequest)
- return true
- }
- } else { // Start loading immediately.
- loadData(urlRequest: urlRequest)
- }
- }
-
- private func loadData(urlRequest: URLRequest) {
- // Wrap data request in an operation to limit the maximum number of
- // concurrent data tasks.
- operation = pipeline.configuration.dataLoadingQueue.add { [weak self] finish in
- guard let self = self else {
- return finish()
- }
- self.async {
- self.loadData(urlRequest: urlRequest, finish: finish)
- }
- }
- }
-
- // This methods gets called inside data loading operation (Operation).
- private func loadData(urlRequest: URLRequest, finish: @escaping () -> Void) {
- guard !isDisposed else {
- return finish()
- }
- // Read and remove resumable data from cache (we're going to insert it
- // back in the cache if the request fails to complete again).
- var urlRequest = urlRequest
- if pipeline.configuration.isResumableDataEnabled,
- let resumableData = ResumableDataStorage.shared.removeResumableData(for: request, pipeline: pipeline) {
- // Update headers to add "Range" and "If-Range" headers
- resumableData.resume(request: &urlRequest)
- // Save resumable data to be used later (before using it, the pipeline
- // verifies that the server returns "206 Partial Content")
- self.resumableData = resumableData
- }
-
- signpost(log, self, "LoadImageData", .begin, "URL: \(urlRequest.url?.absoluteString ?? ""), resumable data: \(Formatter.bytes(resumableData?.data.count ?? 0))")
-
- let dataLoader = pipeline.delegate.dataLoader(for: request, pipeline: pipeline)
- let dataTask = dataLoader.loadData(with: urlRequest, didReceiveData: { [weak self] data, response in
- guard let self = self else { return }
- self.async {
- self.dataTask(didReceiveData: data, response: response)
- }
- }, completion: { [weak self] error in
- finish() // Finish the operation!
- guard let self = self else { return }
- signpost(log, self, "LoadImageData", .end, "Finished with size \(Formatter.bytes(self.data.count))")
- self.async {
- self.dataTaskDidFinish(error: error)
- }
- })
-
- onCancelled = { [weak self] in
- guard let self = self else { return }
-
- signpost(log, self, "LoadImageData", .end, "Cancelled")
- dataTask.cancel()
- finish() // Finish the operation!
-
- self.tryToSaveResumableData()
- }
- }
-
- private func dataTask(didReceiveData chunk: Data, response: URLResponse) {
- // Check if this is the first response.
- if urlResponse == nil {
- // See if the server confirmed that the resumable data can be used
- if let resumableData = resumableData, ResumableData.isResumedResponse(response) {
- data = resumableData.data
- resumedDataCount = Int64(resumableData.data.count)
- signpost(log, self, "LoadImageData", .event, "Resumed with data \(Formatter.bytes(resumedDataCount))")
- }
- resumableData = nil // Get rid of resumable data
- }
-
- // Append data and save response
- data.append(chunk)
- urlResponse = response
-
- let progress = TaskProgress(completed: Int64(data.count), total: response.expectedContentLength + resumedDataCount)
- send(progress: progress)
-
- // If the image hasn't been fully loaded yet, give decoder a change
- // to decode the data chunk. In case `expectedContentLength` is `0`,
- // progressive decoding doesn't run.
- guard data.count < response.expectedContentLength else { return }
-
- send(value: (data, response))
- }
-
- private func dataTaskDidFinish(error: Swift.Error?) {
- if let error = error {
- tryToSaveResumableData()
- send(error: .dataLoadingFailed(error))
- return
- }
-
- // Sanity check, should never happen in practice
- guard !data.isEmpty else {
- send(error: .dataLoadingFailed(URLError(.unknown, userInfo: [:])))
- return
- }
-
- // Store in data cache
- if let dataCache = pipeline.delegate.dataCache(for: request, pipeline: pipeline), shouldStoreDataInDiskCache() {
- let key = pipeline.cache.makeDataCacheKey(for: request)
- pipeline.delegate.willCache(data: data, image: nil, for: request, pipeline: pipeline) {
- guard let data = $0 else { return }
- // Important! Storing directly ignoring `ImageRequest.Options`.
- dataCache.storeData(data, for: key)
- }
- }
-
- send(value: (data, urlResponse), isCompleted: true)
- }
-
- private func shouldStoreDataInDiskCache() -> Bool {
- guard request.url?.isCacheable ?? false else {
- return false
- }
- let policy = pipeline.configuration.dataCachePolicy
- guard imageTasks.contains(where: { !$0.request.options.contains(.disableDiskCacheWrites) }) else {
- return false
- }
- return policy == .storeOriginalData || policy == .storeAll || (policy == .automatic && imageTasks.contains { $0.request.processors.isEmpty })
- }
-
- private func tryToSaveResumableData() {
- // Try to save resumable data in case the task was cancelled
- // (`URLError.cancelled`) or failed to complete with other error.
- if pipeline.configuration.isResumableDataEnabled,
- let response = urlResponse, !data.isEmpty,
- let resumableData = ResumableData(response: response, data: data) {
- ResumableDataStorage.shared.storeResumableData(resumableData, for: request, pipeline: pipeline)
- }
- }
-}
diff --git a/Pods/Nuke/Sources/Core/Tasks/TaskFetchWithPublisher.swift b/Pods/Nuke/Sources/Core/Tasks/TaskFetchWithPublisher.swift
deleted file mode 100644
index 3fce2f35f..000000000
--- a/Pods/Nuke/Sources/Core/Tasks/TaskFetchWithPublisher.swift
+++ /dev/null
@@ -1,61 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-/// Fetches data using the publisher provided with the request.
-/// Unlike `TaskFetchOriginalImageData`, there is no resumable data involved.
-final class TaskFetchWithPublisher: ImagePipelineTask<(Data, URLResponse?)> {
- private lazy var data = Data()
-
- override func start() {
- // Wrap data request in an operation to limit the maximum number of
- // concurrent data tasks.
- operation = pipeline.configuration.dataLoadingQueue.add { [weak self] finish in
- guard let self = self else {
- return finish()
- }
- self.async {
- self.loadData(finish: finish)
- }
- }
- }
-
- // This methods gets called inside data loading operation (Operation).
- private func loadData(finish: @escaping () -> Void) {
- guard !isDisposed else {
- return finish()
- }
-
- guard let publisher = request.publisher else {
- self.send(error: .dataLoadingFailed(URLError(.unknown, userInfo: [:])))
- return assertionFailure("This should never happen")
- }
-
- let cancellable = publisher.sink(receiveCompletion: { [weak self] result in
- finish() // Finish the operation!
- guard let self = self else { return }
- self.async {
- switch result {
- case .finished:
- guard !self.data.isEmpty else {
- return self.send(error: .dataLoadingFailed(URLError(.resourceUnavailable, userInfo: [:])))
- }
- self.send(value: (self.data, nil), isCompleted: true)
- case .failure(let error):
- self.send(error: .dataLoadingFailed(error))
- }
- }
- }, receiveValue: { [weak self] data in
- guard let self = self else { return }
- self.async {
- self.data.append(data)
- }
- })
-
- onCancelled = {
- cancellable.cancel()
- }
- }
-}
diff --git a/Pods/Nuke/Sources/Core/Tasks/TaskLoadData.swift b/Pods/Nuke/Sources/Core/Tasks/TaskLoadData.swift
deleted file mode 100644
index 770430559..000000000
--- a/Pods/Nuke/Sources/Core/Tasks/TaskLoadData.swift
+++ /dev/null
@@ -1,56 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-/// Wrapper for tasks created by `loadData` calls.
-final class TaskLoadData: ImagePipelineTask<(Data, URLResponse?)> {
- override func start() {
- guard let dataCache = pipeline.delegate.dataCache(for: request, pipeline: pipeline),
- !request.options.contains(.disableDiskCacheReads) else {
- loadData()
- return
- }
- operation = pipeline.configuration.dataCachingQueue.add { [weak self] in
- self?.getCachedData(dataCache: dataCache)
- }
- }
-
- private func getCachedData(dataCache: DataCaching) {
- let data = signpost(log, "ReadCachedImageData") {
- pipeline.cache.cachedData(for: request)
- }
- async {
- if let data = data {
- self.send(value: (data, nil), isCompleted: true)
- } else {
- self.loadData()
- }
- }
- }
-
- private func loadData() {
- guard !request.options.contains(.returnCacheDataDontLoad) else {
- // Same error that URLSession produces when .returnCacheDataDontLoad is specified and the
- // data is no found in the cache.
- let error = NSError(domain: URLError.errorDomain, code: URLError.resourceUnavailable.rawValue, userInfo: nil)
- return send(error: .dataLoadingFailed(error))
- }
-
- let request = self.request.withProcessors([])
- dependency = pipeline.makeTaskFetchOriginalImageData(for: request).subscribe(self) { [weak self] in
- self?.didReceiveData($0.0, urlResponse: $0.1, isCompleted: $1)
- }
- }
-
- private func didReceiveData(_ data: Data, urlResponse: URLResponse?, isCompleted: Bool) {
- // Sanity check, should never happen in practice
- guard !data.isEmpty else {
- send(error: .dataLoadingFailed(URLError(.unknown, userInfo: [:])))
- return
- }
-
- send(value: (data, urlResponse), isCompleted: isCompleted)
- }
-}
diff --git a/Pods/Nuke/Sources/Core/Tasks/TaskLoadImage.swift b/Pods/Nuke/Sources/Core/Tasks/TaskLoadImage.swift
deleted file mode 100644
index cb7a46ebd..000000000
--- a/Pods/Nuke/Sources/Core/Tasks/TaskLoadImage.swift
+++ /dev/null
@@ -1,279 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-/// Wrapper for tasks created by `loadData` calls.
-///
-/// Performs all the quick cache lookups and also manages image processing.
-/// The coalesing for image processing is implemented on demand (extends the
-/// scenarios in which coalescing can kick in).
-final class TaskLoadImage: ImagePipelineTask {
- override func start() {
- // Memory cache lookup
- if let image = pipeline.cache[request] {
- let response = ImageResponse(container: image, cacheType: .memory)
- send(value: response, isCompleted: !image.isPreview)
- if !image.isPreview {
- return // Already got the result!
- }
- }
-
- // Disk cache lookup
- if let dataCache = pipeline.delegate.dataCache(for: request, pipeline: pipeline),
- !request.options.contains(.disableDiskCacheReads) {
- operation = pipeline.configuration.dataCachingQueue.add { [weak self] in
- self?.getCachedData(dataCache: dataCache)
- }
- return
- }
-
- // Fetch image
- fetchImage()
- }
-
- // MARK: Disk Cache Lookup
-
- private func getCachedData(dataCache: DataCaching) {
- let data = signpost(log, "ReadCachedProcessedImageData") {
- pipeline.cache.cachedData(for: request)
- }
- async {
- if let data = data {
- self.didReceiveCachedData(data)
- } else {
- self.fetchImage()
- }
- }
- }
-
- private func didReceiveCachedData(_ data: Data) {
- guard !isDisposed else { return }
-
- let context = ImageDecodingContext(request: request, data: data, isCompleted: true, urlResponse: nil)
- guard let decoder = pipeline.delegate.imageDecoder(for: context, pipeline: pipeline) else {
- // This shouldn't happen in practice unless encoder/decoder pair
- // for data cache is misconfigured.
- return fetchImage()
- }
-
- let decode = {
- signpost(log, "DecodeCachedProcessedImageData") {
- decoder.decode(data, urlResponse: nil, isCompleted: true, cacheType: .disk)
- }
- }
- if !decoder.isAsynchronous {
- didDecodeCachedData(decode())
- } else {
- operation = pipeline.configuration.imageDecodingQueue.add { [weak self] in
- guard let self = self else { return }
- let response = decode()
- self.async {
- self.didDecodeCachedData(response)
- }
- }
- }
- }
-
- private func didDecodeCachedData(_ response: ImageResponse?) {
- if let response = response {
- decompressImage(response, isCompleted: true, isFromDiskCache: true)
- } else {
- fetchImage()
- }
- }
-
- // MARK: Fetch Image
-
- private func fetchImage() {
- // Memory cache lookup for intermediate images.
- // For example, for processors ["p1", "p2"], check only ["p1"].
- // Then apply the remaining processors.
- //
- // We are not performing data cache lookup for intermediate requests
- // for now (because it's not free), but maybe adding an option would be worth it.
- // You can emulate this behavior by manually creating intermediate requests.
- if request.processors.count > 1 {
- var processors = request.processors
- var remaining: [ImageProcessing] = []
- if let last = processors.popLast() {
- remaining.append(last)
- }
- while !processors.isEmpty {
- if let image = pipeline.cache[request.withProcessors(processors)] {
- let response = ImageResponse(container: image, cacheType: .memory)
- process(response, isCompleted: !image.isPreview, processors: remaining)
- if !image.isPreview {
- return // Nothing left to do, just apply the processors
- } else {
- break
- }
- }
- if let last = processors.popLast() {
- remaining.append(last)
- }
- }
- }
-
- let processors: [ImageProcessing] = request.processors.reversed()
- // The only remaining choice is to fetch the image
- if request.options.contains(.returnCacheDataDontLoad) {
- // Same error that URLSession produces when .returnCacheDataDontLoad
- // is specified and the data is no found in the cache.
- let error = NSError(domain: URLError.errorDomain, code: URLError.resourceUnavailable.rawValue, userInfo: nil)
- send(error: .dataLoadingFailed(error))
- } else if request.processors.isEmpty {
- dependency = pipeline.makeTaskFetchDecodedImage(for: request).subscribe(self) { [weak self] in
- self?.process($0, isCompleted: $1, processors: processors)
- }
- } else {
- let request = self.request.withProcessors([])
- dependency = pipeline.makeTaskLoadImage(for: request).subscribe(self) { [weak self] in
- self?.process($0, isCompleted: $1, processors: processors)
- }
- }
- }
-
- // MARK: Processing
-
- /// - parameter processors: Remaining processors to by applied
- private func process(_ response: ImageResponse, isCompleted: Bool, processors: [ImageProcessing]) {
- guard !(ImagePipeline.Configuration._isAnimatedImageDataEnabled && response.image._animatedImageData != nil) else {
- self.decompressImage(response, isCompleted: isCompleted)
- return
- }
-
- if isCompleted {
- dependency2?.unsubscribe() // Cancel any potential pending progressive processing tasks
- } else if dependency2 != nil {
- return // Back pressure - already processing another progressive image
- }
-
- _process(response, isCompleted: isCompleted, processors: processors)
- }
-
- /// - parameter processors: Remaining processors to by applied
- private func _process(_ response: ImageResponse, isCompleted: Bool, processors: [ImageProcessing]) {
- guard let processor = processors.last else {
- self.decompressImage(response, isCompleted: isCompleted)
- return
- }
-
- let key = ImageProcessingKey(image: response, processor: processor)
- dependency2 = pipeline.makeTaskProcessImage(key: key, process: { [request] in
- let context = ImageProcessingContext(request: request, response: response, isFinal: isCompleted)
- return signpost(log, "ProcessImage", isCompleted ? "FinalImage" : "ProgressiveImage") {
- response.map { processor.process($0, context: context) }
- }
- }).subscribe(priority: priority) { [weak self] event in
- guard let self = self else { return }
- if event.isCompleted {
- self.dependency2 = nil
- }
- switch event {
- case .value(let response, _):
- self._process(response, isCompleted: isCompleted, processors: processors.dropLast())
- case .error:
- if isCompleted {
- self.send(error: .processingFailed(processor))
- }
- case .progress:
- break // Do nothing (Not reported by OperationTask)
- }
- }
- }
-
- // MARK: Decompression
-
- #if os(macOS)
- private func decompressImage(_ response: ImageResponse, isCompleted: Bool, isFromDiskCache: Bool = false) {
- storeImageInCaches(response, isFromDiskCache: isFromDiskCache)
- send(value: response, isCompleted: isCompleted) // There is no decompression on macOS
- }
- #else
- private func decompressImage(_ response: ImageResponse, isCompleted: Bool, isFromDiskCache: Bool = false) {
- guard isDecompressionNeeded(for: response) else {
- storeImageInCaches(response, isFromDiskCache: isFromDiskCache)
- send(value: response, isCompleted: isCompleted)
- return
- }
-
- if isCompleted {
- operation?.cancel() // Cancel any potential pending progressive decompression tasks
- } else if operation != nil {
- return // Back-pressure: we are receiving data too fast
- }
-
- guard !isDisposed else { return }
-
- operation = pipeline.configuration.imageDecompressingQueue.add { [weak self] in
- guard let self = self else { return }
-
- let response = signpost(log, "DecompressImage", isCompleted ? "FinalImage" : "ProgressiveImage") {
- response.map { $0.map(ImageDecompression.decompress(image:)) } ?? response
- }
-
- self.async {
- self.storeImageInCaches(response, isFromDiskCache: isFromDiskCache)
- self.send(value: response, isCompleted: isCompleted)
- }
- }
- }
-
- private func isDecompressionNeeded(for response: ImageResponse) -> Bool {
- return pipeline.configuration.isDecompressionEnabled &&
- ImageDecompression.isDecompressionNeeded(for: response.image) ?? false &&
- !(ImagePipeline.Configuration._isAnimatedImageDataEnabled && response.image._animatedImageData != nil)
- }
- #endif
-
- // MARK: Caching
-
- private func storeImageInCaches(_ response: ImageResponse, isFromDiskCache: Bool) {
- guard subscribers.contains(where: { $0 is ImageTask }) else {
- return // Only store for direct requests
- }
- // Memory cache (ImageCaching)
- pipeline.cache[request] = response.container
- // Disk cache (DataCaching)
- if !isFromDiskCache {
- storeImageInDataCache(response)
- }
- }
-
- private func storeImageInDataCache(_ response: ImageResponse) {
- guard !response.container.isPreview else {
- return
- }
- guard let dataCache = pipeline.delegate.dataCache(for: request, pipeline: pipeline), shouldStoreFinalImageInDiskCache() else {
- return
- }
- let context = ImageEncodingContext(request: request, image: response.image, urlResponse: response.urlResponse)
- let encoder = pipeline.delegate.imageEncoder(for: context, pipeline: pipeline)
- let key = pipeline.cache.makeDataCacheKey(for: request)
- pipeline.configuration.imageEncodingQueue.addOperation { [weak pipeline, request] in
- guard let pipeline = pipeline else { return }
- let encodedData = signpost(log, "EncodeImage") {
- encoder.encode(response.container, context: context)
- }
- guard let data = encodedData else { return }
- pipeline.delegate.willCache(data: data, image: response.container, for: request, pipeline: pipeline) {
- guard let data = $0 else { return }
- // Important! Storing directly ignoring `ImageRequest.Options`.
- dataCache.storeData(data, for: key) // This is instant, writes are async
- }
- }
- if pipeline.configuration.debugIsSyncImageEncoding { // Only for debug
- pipeline.configuration.imageEncodingQueue.waitUntilAllOperationsAreFinished()
- }
- }
-
- private func shouldStoreFinalImageInDiskCache() -> Bool {
- guard request.url?.isCacheable ?? false else {
- return false
- }
- let policy = pipeline.configuration.dataCachePolicy
- return ((policy == .automatic || policy == .storeAll) && !request.processors.isEmpty) || policy == .storeEncodedImages
- }
-}
diff --git a/Pods/Nuke/Sources/Internal/AVDataAsset.swift b/Pods/Nuke/Sources/Internal/AVDataAsset.swift
deleted file mode 100644
index cfe6a571d..000000000
--- a/Pods/Nuke/Sources/Internal/AVDataAsset.swift
+++ /dev/null
@@ -1,75 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import AVKit
-import Foundation
-
-#if !os(watchOS)
-
-private extension AssetType {
- var avFileType: AVFileType? {
- switch self {
- case .mp4: return .mp4
- case .m4v: return .m4v
- default: return nil
- }
- }
-}
-
-// This class keeps strong pointer to DataAssetResourceLoader
-final class AVDataAsset: AVURLAsset {
- private let resourceLoaderDelegate: DataAssetResourceLoader
-
- init(data: Data, type: AssetType?) {
- self.resourceLoaderDelegate = DataAssetResourceLoader(
- data: data,
- contentType: type?.avFileType?.rawValue ?? AVFileType.mp4.rawValue
- )
-
- // The URL is irrelevant
- let url = URL(string: "in-memory-data://\(UUID().uuidString)") ?? URL(fileURLWithPath: "/dev/null")
- super.init(url: url, options: nil)
-
- resourceLoader.setDelegate(resourceLoaderDelegate, queue: .global())
- }
-}
-
-// This allows LazyImage to play video from memory.
-private final class DataAssetResourceLoader: NSObject, AVAssetResourceLoaderDelegate {
- private let data: Data
- private let contentType: String
-
- init(data: Data, contentType: String) {
- self.data = data
- self.contentType = contentType
- }
-
- // MARK: - DataAssetResourceLoader
-
- func resourceLoader(
- _ resourceLoader: AVAssetResourceLoader,
- shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest
- ) -> Bool {
- if let contentRequest = loadingRequest.contentInformationRequest {
- contentRequest.contentType = contentType
- contentRequest.contentLength = Int64(data.count)
- contentRequest.isByteRangeAccessSupported = true
- }
-
- if let dataRequest = loadingRequest.dataRequest {
- if dataRequest.requestsAllDataToEndOfResource {
- dataRequest.respond(with: data[dataRequest.requestedOffset...])
- } else {
- let range = dataRequest.requestedOffset..<(dataRequest.requestedOffset + Int64(dataRequest.requestedLength))
- dataRequest.respond(with: data[range])
- }
- }
-
- loadingRequest.finishLoading()
-
- return true
- }
-}
-
-#endif
diff --git a/Pods/Nuke/Sources/Internal/Allocations.swift b/Pods/Nuke/Sources/Internal/Allocations.swift
deleted file mode 100644
index 264bf9d25..000000000
--- a/Pods/Nuke/Sources/Internal/Allocations.swift
+++ /dev/null
@@ -1,81 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-#if TRACK_ALLOCATIONS
-enum Allocations {
- static var allocations = [String: Int]()
- static var total = 0
- static let lock = NSLock()
- static var timer: Timer?
-
- static let isPrintingEnabled = ProcessInfo.processInfo.environment["NUKE_PRINT_ALL_ALLOCATIONS"] != nil
- static let isTimerEnabled = ProcessInfo.processInfo.environment["NUKE_ALLOCATIONS_PERIODIC_LOG"] != nil
-
- static func increment(_ name: String) {
- lock.lock()
- defer { lock.unlock() }
-
- allocations[name, default: 0] += 1
- total += 1
-
- if isPrintingEnabled {
- debugPrint("Increment \(name): \(allocations[name] ?? 0) Total: \(totalAllocationCount)")
- }
-
- if isTimerEnabled, timer == nil {
- timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in
- Allocations.printAllocations()
- }
- }
- }
-
- static var totalAllocationCount: Int {
- allocations.values.reduce(0, +)
- }
-
- static func decrement(_ name: String) {
- lock.lock()
- defer { lock.unlock() }
-
- allocations[name, default: 0] -= 1
-
- let totalAllocationCount = self.totalAllocationCount
-
- if isPrintingEnabled {
- debugPrint("Decrement \(name): \(allocations[name] ?? 0) Total: \(totalAllocationCount)")
- }
-
- if totalAllocationCount == 0 {
- _onDeinitAll?()
- _onDeinitAll = nil
- }
- }
-
- private static var _onDeinitAll: (() -> Void)?
-
- static func onDeinitAll(_ closure: @escaping () -> Void) {
- lock.lock()
- defer { lock.unlock() }
-
- if totalAllocationCount == 0 {
- closure()
- } else {
- _onDeinitAll = closure
- }
- }
-
- static func printAllocations() {
- lock.lock()
- defer { lock.unlock() }
- let allocations = self.allocations
- .filter { $0.value > 0 }
- .map { "\($0.key): \($0.value)" }
- .sorted()
- .joined(separator: " ")
- debugPrint("Current: \(totalAllocationCount) Overall: \(total) \(allocations)")
- }
-}
-#endif
diff --git a/Pods/Nuke/Sources/Internal/Combine.swift b/Pods/Nuke/Sources/Internal/Combine.swift
deleted file mode 100644
index 703f81dd2..000000000
--- a/Pods/Nuke/Sources/Internal/Combine.swift
+++ /dev/null
@@ -1,48 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-import Combine
-
-final class DataPublisher {
- let id: String
- private let _sink: (@escaping ((PublisherCompletion) -> Void), @escaping ((Data) -> Void)) -> Cancellable
-
- @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
- init(id: String, _ publisher: P) where P.Output == Data {
- self.id = id
- self._sink = { onCompletion, onValue in
- let cancellable = publisher.sink(receiveCompletion: {
- switch $0 {
- case .finished: onCompletion(.finished)
- case .failure(let error): onCompletion(.failure(error))
- }
- }, receiveValue: {
- onValue($0)
- })
- return AnyCancellable(cancellable.cancel)
- }
- }
-
- func sink(receiveCompletion: @escaping ((PublisherCompletion) -> Void), receiveValue: @escaping ((Data) -> Void)) -> Cancellable {
- _sink(receiveCompletion, receiveValue)
- }
-}
-
-private final class AnyCancellable: Cancellable {
- let closure: () -> Void
-
- init(_ closure: @escaping () -> Void) {
- self.closure = closure
- }
-
- func cancel() {
- closure()
- }
-}
-
-enum PublisherCompletion {
- case finished
- case failure(Error)
-}
diff --git a/Pods/Nuke/Sources/Internal/Deprecated.swift b/Pods/Nuke/Sources/Internal/Deprecated.swift
deleted file mode 100644
index 9b091273c..000000000
--- a/Pods/Nuke/Sources/Internal/Deprecated.swift
+++ /dev/null
@@ -1,310 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-// Deprecated in 9.4.1
-@available(*, deprecated, message: "Renamed to ImagePrefetcher")
-public typealias ImagePreheater = ImagePrefetcher
-
-public extension ImagePrefetcher {
- // Deprecated in 9.4.1
- @available(*, deprecated, message: "Renamed to startPrefetching")
- func startPreheating(with urls: [URL]) {
- startPrefetching(with: urls)
- }
-
- // Deprecated in 9.4.1
- @available(*, deprecated, message: "Renamed to startPrefetching")
- func startPreheating(with requests: [ImageRequest]) {
- startPrefetching(with: requests)
- }
-
- // Deprecated in 9.4.1
- @available(*, deprecated, message: "Renamed to stopPrefetching")
- func stopPreheating(with urls: [URL]) {
- stopPrefetching(with: urls)
- }
-
- // Deprecated in 9.4.1
- @available(*, deprecated, message: "Renamed to stopPrefetching")
- func stopPreheating(with requests: [ImageRequest]) {
- stopPrefetching(with: requests)
- }
-
- // Deprecated in 9.4.1
- @available(*, deprecated, message: "Renamed to stopPrefetching")
- func stopPreheating() {
- stopPrefetching()
- }
-}
-
-public extension ImagePipeline {
- // Deprecated in 10.0.0
- @available(*, deprecated, message: "Use pipeline.cache[url] instead")
- func cachedImage(for url: URL) -> ImageContainer? {
- cachedImage(for: ImageRequest(url: url))
- }
-
- // Deprecated in 10.0.0
- @available(*, deprecated, message: "Use pipeline.cache[request] instead")
- func cachedImage(for request: ImageRequest) -> ImageContainer? {
- cache[request]
- }
-
- // Deprecated in 10.0.0
- @available(*, deprecated, message: "If needed, use pipeline.cache.makeDataCacheKey(for:) instead. For original image data, remove the processors from the request. In general, there should be no need to create the keys manually anymore.")
- func cacheKey(for request: ImageRequest, item: DataCacheItem) -> String {
- switch item {
- case .originalImageData:
- var request = request
- request.processors = []
- return request.makeDataCacheKey()
- case .finalImage: return request.makeDataCacheKey()
- }
- }
-
- @available(*, deprecated, message: "Please use `dataCachePolicy` instead. The recommended policy is the new `.automatic` policy.")
- enum DataCacheItem {
- /// Same as the new `DataCachePolicy.storeOriginalData`
- case originalImageData
- /// Same as the new `DataCachePolicy.storeEncodedImages`
- case finalImage
- }
-}
-
-// Deprecated in 10.0.0
-@available(*, deprecated, message: "Please use ImagePipelineDelegate")
-public protocol ImagePipelineObserving {
- /// Delivers the events produced by the image tasks started via `loadImage` method.
- func pipeline(_ pipeline: ImagePipeline, imageTask: ImageTask, didReceiveEvent event: ImageTaskEvent)
-}
-
-// Deprecated in 10.0.0
-@available(*, deprecated, message: "Please use the new initializer with `ImageRequest.Options`. It offers the same options and more. For more information see the migration guide at https://github.com/kean/Nuke/blob/master/Documentation/Migrations/Nuke%2010%20Migration%20Guide.md#imagerequestoptions.")
-public struct ImageRequestOptions {
- // Deprecated in 10.0.0
- @available(*, deprecated, message: "Please use `ImagePipeline.Options` instead: `disableMemoryCacheRead`, `disableMemoryCacheWrite`.")
- public struct MemoryCacheOptions {
- /// `true` by default.
- public var isReadAllowed = true
-
- /// `true` by default.
- public var isWriteAllowed = true
-
- public init(isReadAllowed: Bool = true, isWriteAllowed: Bool = true) {
- self.isReadAllowed = isReadAllowed
- self.isWriteAllowed = isWriteAllowed
- }
- }
-
- /// `MemoryCacheOptions()` (read allowed, write allowed) by default.
- public var memoryCacheOptions: MemoryCacheOptions
-
- // Deprecated in 10.0.0
- @available(*, deprecated, message: "Please pass ")
- var cacheKey: AnyHashable?
-
- // Deprecated in 10.0.0
- @available(*, deprecated, message: "This API does nothing starting with Nuke 10. If you found an issue in coalescing, please report it on GitHub and consider disabling it using ImagePipeline.Configuration.")
- var loadKey: AnyHashable?
-
- // Deprecated in 10.0.0
- @available(*, deprecated, message: "Please pass imageId (`ImageRequest.UserInfoKey.imageIdKey`) in the request `userInfo`. The deprecated API does nothing starting with Nuke 10.")
- var filteredURL: AnyHashable?
-
- // Deprecated in 10.0.0
- @available(*, deprecated, message: "Please pass the `userInfo` directly to the request. The deprecated API does nothing starting with Nuke 10.")
- var userInfo: [AnyHashable: Any]
-
- public init(memoryCacheOptions: MemoryCacheOptions = .init(),
- filteredURL: String? = nil,
- cacheKey: AnyHashable? = nil,
- loadKey: AnyHashable? = nil,
- userInfo: [AnyHashable: Any] = [:]) {
- self.memoryCacheOptions = memoryCacheOptions
- self.filteredURL = filteredURL
- self.cacheKey = cacheKey
- self.loadKey = loadKey
- self.userInfo = userInfo
- }
-}
-
-public extension ImageRequest {
- // Deprecated in 10.0.0
- @available(*, deprecated, message: "Please use the new initializer with `ImageRequest.Options`. It offers the same options and more. For more information see the migration guide at https://github.com/kean/Nuke/blob/master/Documentation/Migrations/Nuke%2010%20Migration%20Guide.md#imagerequestoptions.")
- init(url: URL,
- processors: [ImageProcessing] = [],
- cachePolicy: CachePolicy,
- priority: ImageRequest.Priority = .normal,
- options: ImageRequestOptions = .init()) {
- var userInfo = [UserInfoKey: Any]()
- if let filteredURL = options.filteredURL {
- userInfo[.imageIdKey] = filteredURL
- }
- let options = ImageRequest.Options(cachePolicy, options)
- self.init(url: url, processors: processors, priority: priority, options: options, userInfo: userInfo)
- }
-
- // Deprecated in 10.0.0
- @available(*, deprecated, message: "Please use the new initializer with `ImageRequest.Options`. It offers the same options and more. For more information see the migration guide at https://github.com/kean/Nuke/blob/master/Documentation/Migrations/Nuke%2010%20Migration%20Guide.md#imagerequestoptions")
- init(urlRequest: URLRequest,
- processors: [ImageProcessing] = [],
- cachePolicy: CachePolicy,
- priority: ImageRequest.Priority = .normal,
- options: ImageRequestOptions = .init()) {
- var userInfo = [UserInfoKey: Any]()
- if let filteredURL = options.filteredURL {
- userInfo[.imageIdKey] = filteredURL
- }
- let options = ImageRequest.Options(cachePolicy, options)
- self.init(urlRequest: urlRequest, processors: processors, priority: priority, options: options, userInfo: userInfo)
- }
-
- // Deprecated in 10.0.0
- @available(*, deprecated, message: "Please use `ImageRequest.Options` instead, it offers the same options under the same names.")
- var cachePolicy: CachePolicy {
- get {
- if options.contains(.returnCacheDataDontLoad) {
- return .returnCacheDataDontLoad
- }
- if options.contains(.reloadIgnoringCachedData) {
- return .reloadIgnoringCachedData
- }
- return .default
- }
- set {
- options.insert(.init(newValue))
- }
- }
-
- // Deprecated in 10.0.0
- @available(*, deprecated, message: "Please use `ImageRequest.Options` instead, it offers the same options under the same names. And .reloadIgnoringCachedData no longer affects URLCache!")
- enum CachePolicy {
- case `default`
- /// The image should be loaded only from the originating source.
- ///
- /// If you initialize the request with `URLRequest`, make sure to provide
- /// the correct policy in the request too.
- @available(*, deprecated, message: "Please use `ImageRequest.Options` instead. This option is available under the same name: .reloadIgnoringCachedData. This option is also no longer affects URLCache!")
- case reloadIgnoringCachedData
-
- /// Use existing cache data and fail if no cached data is available.
- @available(*, deprecated, message: "Please use `ImageRequest.Options` instead. This option is available under the same name: .returnCacheDataDontLoad.")
- case returnCacheDataDontLoad
- }
-}
-
-private extension ImageRequest.Options {
- // Deprecated in 10.0.0
- @available(*, deprecated, message: "Please use `ImageRequest.Options` instead, it offers the same options under the same names.")
- init(_ cachePolicy: ImageRequest.CachePolicy) {
- switch cachePolicy {
- case .default:
- self = []
- case .reloadIgnoringCachedData:
- self = .reloadIgnoringCachedData
- case .returnCacheDataDontLoad:
- self = .returnCacheDataDontLoad
- }
- }
-
- // Deprecated in 10.0.0
- @available(*, deprecated, message: "Please use `ImageRequest.Options` instead, it offers the same options under the same names.")
- init(_ cachePolicy: ImageRequest.CachePolicy, _ oldOptions: ImageRequestOptions) {
- var options: ImageRequest.Options = .init(cachePolicy)
- if !oldOptions.memoryCacheOptions.isReadAllowed {
- options.insert(.disableMemoryCacheReads)
- }
- if !oldOptions.memoryCacheOptions.isWriteAllowed {
- options.insert(.disableMemoryCacheWrites)
- }
- self = options
- }
-}
-
-public extension ImageDecoders.Default {
- // Deprecated in 10.0.0
- @available(*, deprecated, message: "Please use `ImageConatainer.UserInfoKey.scanNumber.")
- static let scanNumberKey = "ImageDecoders.Default.scanNumberKey"
-}
-
-public extension ImagePipeline.Configuration {
- // Deprecated in 10.0.0
- @available(*, deprecated, message: "Please use `ImageConatainer` `data` instead. The default image decoder now automatically attaches image data to the ImageContainer type. To learn how to implement animated image support using this new type, see the new Image Formats guide https://github.com/kean/Nuke/blob/9.6.0/Documentation/Guides/image-formats.md. Also see Nuke 10 migration guide https://github.com/kean/Nuke/blob/master/Documentation/Migrations/Nuke%2010%20Migration%20Guide.md.")
- static var isAnimatedImageDataEnabled: Bool {
- get { _isAnimatedImageDataEnabled }
- set { _isAnimatedImageDataEnabled = newValue }
- }
-}
-
-private var _animatedImageDataAK = "Nuke.AnimatedImageData.AssociatedKey"
-
-extension PlatformImage {
- // Deprecated in 10.0.0
- /// - warning: Soft-deprecated in Nuke 9.0.
- @available(*, deprecated, message: "Please use `ImageConatainer` `data` instead")
- public var animatedImageData: Data? {
- get { _animatedImageData }
- set { _animatedImageData = newValue }
- }
-
- // Deprecated in 10.0.0
- internal var _animatedImageData: Data? {
- get { objc_getAssociatedObject(self, &_animatedImageDataAK) as? Data }
- set { objc_setAssociatedObject(self, &_animatedImageDataAK, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) }
- }
-}
-
-extension ImagePipeline.Configuration {
- // Deprecated in 10.0.0
- @available(*, deprecated, message: "Please use `ImageConfiguration.default` and provide a `dataLoader` afterwards or use a closure-based ImagePipeline initializer.")
- public init(dataLoader: DataLoading = DataLoader(), imageCache: ImageCaching?) {
- self.init(dataLoader: dataLoader)
- self.imageCache = imageCache
- }
-
- // Deprecated in 10.0.0
- @available(*, deprecated, message: "Renamed to isTaskCoalescingEnabled")
- public var isDeduplicationEnabled: Bool {
- get { isTaskCoalescingEnabled }
- set { isTaskCoalescingEnabled = newValue }
- }
-
- // Deprecated in 10.0.0
- // There is simply no way to make it work consistently across subsystems.
- @available(*, deprecated, message: "Deprecated and will be removed. Please use the new ImageLoadingOptions processors option, or create another way to apply processors by default.")
- public var processors: [ImageProcessing] {
- get { _processors }
- set { _processors = newValue }
- }
-
- /// Inherits some of the pipeline configuration options like processors.
- func inheritOptions(_ request: ImageRequest) -> ImageRequest {
- guard !_processors.isEmpty, request.processors.isEmpty else {
- return request
- }
- var request = request
- request.processors = _processors
- return request
- }
-}
-
-// Deprecated in 10.0.0
-@available(*, deprecated, message: "Please use ImageDecoders.Default directly")
-public typealias ImageDecoder = ImageDecoders.Default
-
-// Deprecated in 10.0.0
-@available(*, deprecated, message: "Please use ImageEncoders.Default directly")
-public typealias ImageEncoder = ImageEncoders.Default
-
-// Deprecated in 10.5.0
-@available(*, deprecated, message: "Please use AssetType instead")
-public typealias ImageType = AssetType
-
-extension ImageDecoders.Empty {
- public init(imageType: AssetType, isProgressive: Bool = false) {
- self = .init(assetType: imageType, isProgressive: isProgressive)
- }
-}
diff --git a/Pods/Nuke/Sources/Internal/Extensions.swift b/Pods/Nuke/Sources/Internal/Extensions.swift
deleted file mode 100644
index 31f2c925b..000000000
--- a/Pods/Nuke/Sources/Internal/Extensions.swift
+++ /dev/null
@@ -1,62 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-import CommonCrypto
-
-extension String {
- /// Calculates SHA1 from the given string and returns its hex representation.
- ///
- /// ```swift
- /// print("http://test.com".sha1)
- /// // prints "50334ee0b51600df6397ce93ceed4728c37fee4e"
- /// ```
- var sha1: String? {
- guard !isEmpty, let input = self.data(using: .utf8) else {
- return nil
- }
-
- let hash = input.withUnsafeBytes { (bytes: UnsafeRawBufferPointer) -> [UInt8] in
- var hash = [UInt8](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH))
- CC_SHA1(bytes.baseAddress, CC_LONG(input.count), &hash)
- return hash
- }
-
- return hash.map({ String(format: "%02x", $0) }).joined()
- }
-}
-
-extension NSLock {
- func sync(_ closure: () -> T) -> T {
- lock()
- defer { unlock() }
- return closure()
- }
-}
-
-extension URL {
- var isCacheable: Bool {
- let scheme = self.scheme
- return scheme != "file" && scheme != "data"
- }
-}
-
-extension OperationQueue {
- convenience init(maxConcurrentCount: Int) {
- self.init()
- self.maxConcurrentOperationCount = maxConcurrentCount
- }
-}
-
-extension ImageRequest.Priority {
- var taskPriority: TaskPriority {
- switch self {
- case .veryLow: return .veryLow
- case .low: return .low
- case .normal: return .normal
- case .high: return .high
- case .veryHigh: return .veryHigh
- }
- }
-}
diff --git a/Pods/Nuke/Sources/Internal/Graphics.swift b/Pods/Nuke/Sources/Internal/Graphics.swift
deleted file mode 100644
index b290a2b29..000000000
--- a/Pods/Nuke/Sources/Internal/Graphics.swift
+++ /dev/null
@@ -1,332 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-#if os(iOS) || os(tvOS) || os(watchOS)
-import UIKit
-#endif
-
-#if os(watchOS)
-import ImageIO
-import CoreGraphics
-import WatchKit
-#endif
-
-#if os(macOS)
-import Cocoa
-#endif
-
-extension PlatformImage {
- var processed: ImageProcessingExtensions {
- ImageProcessingExtensions(image: self)
- }
-}
-
-struct ImageProcessingExtensions {
- let image: PlatformImage
-
- func byResizing(to targetSize: CGSize,
- contentMode: ImageProcessors.Resize.ContentMode,
- upscale: Bool) -> PlatformImage? {
- guard let cgImage = image.cgImage else {
- return nil
- }
- #if os(iOS) || os(tvOS) || os(watchOS)
- let targetSize = targetSize.rotatedForOrientation(image.imageOrientation)
- #endif
- let scale = cgImage.size.getScale(targetSize: targetSize, contentMode: contentMode)
- guard scale < 1 || upscale else {
- return image // The image doesn't require scaling
- }
- let size = cgImage.size.scaled(by: scale).rounded()
- return image.draw(inCanvasWithSize: size)
- }
-
- /// Crops the input image to the given size and resizes it if needed.
- /// - note: this method will always upscale.
- func byResizingAndCropping(to targetSize: CGSize) -> PlatformImage? {
- guard let cgImage = image.cgImage else {
- return nil
- }
- #if os(iOS) || os(tvOS) || os(watchOS)
- let targetSize = targetSize.rotatedForOrientation(image.imageOrientation)
- #endif
- let scale = cgImage.size.getScale(targetSize: targetSize, contentMode: .aspectFill)
- let scaledSize = cgImage.size.scaled(by: scale)
- let drawRect = scaledSize.centeredInRectWithSize(targetSize)
- return image.draw(inCanvasWithSize: targetSize, drawRect: drawRect)
- }
-
- func byDrawingInCircle(border: ImageProcessingOptions.Border?) -> PlatformImage? {
- guard let squared = byCroppingToSquare(), let cgImage = squared.cgImage else {
- return nil
- }
- let radius = CGFloat(cgImage.width) // Can use any dimension since image is a square
- return squared.processed.byAddingRoundedCorners(radius: radius / 2.0, border: border)
- }
-
- /// Draws an image in square by preserving an aspect ratio and filling the
- /// square if needed. If the image is already a square, returns an original image.
- func byCroppingToSquare() -> PlatformImage? {
- guard let cgImage = image.cgImage else {
- return nil
- }
-
- guard cgImage.width != cgImage.height else {
- return image // Already a square
- }
-
- let imageSize = cgImage.size
- let side = min(cgImage.width, cgImage.height)
- let targetSize = CGSize(width: side, height: side)
- let cropRect = CGRect(origin: .zero, size: targetSize).offsetBy(
- dx: max(0, (imageSize.width - targetSize.width) / 2),
- dy: max(0, (imageSize.height - targetSize.height) / 2)
- )
- guard let cropped = cgImage.cropping(to: cropRect) else {
- return nil
- }
- return PlatformImage.make(cgImage: cropped, source: image)
- }
-
- /// Adds rounded corners with the given radius to the image.
- /// - parameter radius: Radius in pixels.
- /// - parameter border: Optional stroke border.
- func byAddingRoundedCorners(radius: CGFloat, border: ImageProcessingOptions.Border? = nil) -> PlatformImage? {
- guard let cgImage = image.cgImage else {
- return nil
- }
- guard let ctx = CGContext.make(cgImage, size: cgImage.size, alphaInfo: .premultipliedLast) else {
- return nil
- }
- let rect = CGRect(origin: CGPoint.zero, size: cgImage.size)
- let path = CGPath(roundedRect: rect, cornerWidth: radius, cornerHeight: radius, transform: nil)
- ctx.addPath(path)
- ctx.clip()
- ctx.draw(cgImage, in: CGRect(origin: CGPoint.zero, size: cgImage.size))
-
- if let border = border {
- ctx.setStrokeColor(border.color.cgColor)
- ctx.addPath(path)
- ctx.setLineWidth(border.width)
- ctx.strokePath()
- }
- guard let outputCGImage = ctx.makeImage() else {
- return nil
- }
- return PlatformImage.make(cgImage: outputCGImage, source: image)
- }
-}
-
-extension PlatformImage {
- /// Draws the image in a `CGContext` in a canvas with the given size using
- /// the specified draw rect.
- ///
- /// For example, if the canvas size is `CGSize(width: 10, height: 10)` and
- /// the draw rect is `CGRect(x: -5, y: 0, width: 20, height: 10)` it would
- /// draw the input image (which is horizontal based on the known draw rect)
- /// in a square by centering it in the canvas.
- ///
- /// - parameter drawRect: `nil` by default. If `nil` will use the canvas rect.
- func draw(inCanvasWithSize canvasSize: CGSize, drawRect: CGRect? = nil) -> PlatformImage? {
- guard let cgImage = cgImage else {
- return nil
- }
- guard let ctx = CGContext.make(cgImage, size: canvasSize) else {
- return nil
- }
- ctx.draw(cgImage, in: drawRect ?? CGRect(origin: .zero, size: canvasSize))
- guard let outputCGImage = ctx.makeImage() else {
- return nil
- }
- return PlatformImage.make(cgImage: outputCGImage, source: self)
- }
-
- /// Decompresses the input image by drawing in the the `CGContext`.
- func decompressed() -> PlatformImage? {
- guard let cgImage = cgImage else {
- return nil
- }
- return draw(inCanvasWithSize: cgImage.size, drawRect: CGRect(origin: .zero, size: cgImage.size))
- }
-}
-
-private extension CGContext {
- static func make(_ image: CGImage, size: CGSize, alphaInfo: CGImageAlphaInfo? = nil) -> CGContext? {
- let alphaInfo: CGImageAlphaInfo = alphaInfo ?? (image.isOpaque ? .noneSkipLast : .premultipliedLast)
-
- // Create the context which matches the input image.
- if let ctx = CGContext(
- data: nil,
- width: Int(size.width),
- height: Int(size.height),
- bitsPerComponent: 8,
- bytesPerRow: 0,
- space: image.colorSpace ?? CGColorSpaceCreateDeviceRGB(),
- bitmapInfo: alphaInfo.rawValue
- ) {
- return ctx
- }
-
- // In case the combination of parameters (color space, bits per component, etc)
- // is nit supported by Core Graphics, switch to default context.
- // - Quartz 2D Programming Guide
- // - https://github.com/kean/Nuke/issues/35
- // - https://github.com/kean/Nuke/issues/57
- return CGContext(
- data: nil,
- width: Int(size.width), height: Int(size.height),
- bitsPerComponent: 8,
- bytesPerRow: 0,
- space: CGColorSpaceCreateDeviceRGB(),
- bitmapInfo: alphaInfo.rawValue
- )
- }
-}
-
-extension CGFloat {
- func converted(to unit: ImageProcessingOptions.Unit) -> CGFloat {
- switch unit {
- case .pixels: return self
- case .points: return self * Screen.scale
- }
- }
-}
-
-extension CGSize {
- func getScale(targetSize: CGSize, contentMode: ImageProcessors.Resize.ContentMode) -> CGFloat {
- let scaleHor = targetSize.width / width
- let scaleVert = targetSize.height / height
-
- switch contentMode {
- case .aspectFill:
- return max(scaleHor, scaleVert)
- case .aspectFit:
- return min(scaleHor, scaleVert)
- }
- }
-
- /// Calculates a rect such that the output rect will be in the center of
- /// the rect of the input size (assuming origin: .zero)
- func centeredInRectWithSize(_ targetSize: CGSize) -> CGRect {
- // First, resize the original size to fill the target size.
- CGRect(origin: .zero, size: self).offsetBy(
- dx: -(width - targetSize.width) / 2,
- dy: -(height - targetSize.height) / 2
- )
- }
-}
-
-#if os(iOS) || os(tvOS) || os(watchOS)
-private extension CGSize {
- func rotatedForOrientation(_ imageOrientation: UIImage.Orientation) -> CGSize {
- switch imageOrientation {
- case .left, .leftMirrored, .right, .rightMirrored:
- return CGSize(width: height, height: width) // Rotate 90 degrees
- case .up, .upMirrored, .down, .downMirrored:
- return self
- @unknown default:
- return self
- }
- }
-}
-#endif
-
-#if os(macOS)
-extension NSImage {
- var cgImage: CGImage? {
- cgImage(forProposedRect: nil, context: nil, hints: nil)
- }
-
- var ciImage: CIImage? {
- cgImage.map { CIImage(cgImage: $0) }
- }
-
- static func make(cgImage: CGImage, source: NSImage) -> NSImage {
- NSImage(cgImage: cgImage, size: .zero)
- }
-
- convenience init(cgImage: CGImage) {
- self.init(cgImage: cgImage, size: .zero)
- }
-}
-#else
-extension UIImage {
- static func make(cgImage: CGImage, source: UIImage) -> UIImage {
- UIImage(cgImage: cgImage, scale: source.scale, orientation: source.imageOrientation)
- }
-}
-#endif
-
-extension CGImage {
- /// Returns `true` if the image doesn't contain alpha channel.
- var isOpaque: Bool {
- let alpha = alphaInfo
- return alpha == .none || alpha == .noneSkipFirst || alpha == .noneSkipLast
- }
-
- var size: CGSize {
- CGSize(width: width, height: height)
- }
-}
-
-extension CGSize {
- func scaled(by scale: CGFloat) -> CGSize {
- CGSize(width: width * scale, height: height * scale)
- }
-
- func rounded() -> CGSize {
- CGSize(width: CGFloat(round(width)), height: CGFloat(round(height)))
- }
-}
-
-struct Screen {
- #if os(iOS) || os(tvOS)
- /// Returns the current screen scale.
- static var scale: CGFloat { UIScreen.main.scale }
- #elseif os(watchOS)
- /// Returns the current screen scale.
- static var scale: CGFloat { WKInterfaceDevice.current().screenScale }
- #elseif os(macOS)
- /// Always returns 1.
- static var scale: CGFloat { 1 }
- #endif
-}
-
-#if os(macOS)
-typealias Color = NSColor
-#else
-typealias Color = UIColor
-#endif
-
-extension Color {
- /// Returns a hex representation of the color, e.g. "#FFFFAA".
- var hex: String {
- var (r, g, b, a) = (CGFloat(0), CGFloat(0), CGFloat(0), CGFloat(0))
- getRed(&r, green: &g, blue: &b, alpha: &a)
- let components = [r, g, b, a < 1 ? a : nil]
- return "#" + components
- .compactMap { $0 }
- .map { String(format: "%02lX", lroundf(Float($0) * 255)) }
- .joined()
- }
-}
-
-/// Creates an image thumbnail. Uses significantly less memory than other options.
-func makeThumbnail(data: Data, options: ImageRequest.ThumbnailOptions) -> PlatformImage? {
- guard let source = CGImageSourceCreateWithData(data as CFData, [kCGImageSourceShouldCache: false] as CFDictionary) else {
- return nil
- }
- let options = [
- kCGImageSourceCreateThumbnailFromImageAlways: options.createThumbnailFromImageAlways,
- kCGImageSourceCreateThumbnailFromImageIfAbsent: options.createThumbnailFromImageIfAbsent,
- kCGImageSourceShouldCacheImmediately: options.shouldCacheImmediately,
- kCGImageSourceCreateThumbnailWithTransform: options.createThumbnailWithTransform,
- kCGImageSourceThumbnailMaxPixelSize: options.maxPixelSize] as CFDictionary
- guard let image = CGImageSourceCreateThumbnailAtIndex(source, 0, options) else {
- return nil
- }
- return PlatformImage(cgImage: image)
-}
diff --git a/Pods/Nuke/Sources/Internal/ImageRequestKeys.swift b/Pods/Nuke/Sources/Internal/ImageRequestKeys.swift
deleted file mode 100644
index ac23e15ef..000000000
--- a/Pods/Nuke/Sources/Internal/ImageRequestKeys.swift
+++ /dev/null
@@ -1,115 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-extension ImageRequest {
-
- // MARK: - Cache Keys
-
- /// A key for processed image in memory cache.
- func makeImageCacheKey() -> CacheKey {
- CacheKey(self)
- }
-
- /// A key for processed image data in disk cache.
- func makeDataCacheKey() -> String {
- "\(preferredImageId)\(thubmnail?.identifier ?? "")\(ImageProcessors.Composition(processors).identifier)"
- }
-
- // MARK: - Load Keys
-
- /// A key for deduplicating operations for fetching the processed image.
- func makeImageLoadKey() -> ImageLoadKey {
- ImageLoadKey(self)
- }
-
- /// A key for deduplicating operations for fetching the decoded image.
- func makeDecodedImageLoadKey() -> DecodedImageLoadKey {
- DecodedImageLoadKey(self)
- }
-
- /// A key for deduplicating operations for fetching the original image.
- func makeDataLoadKey() -> DataLoadKey {
- DataLoadKey(self)
- }
-}
-
-/// Uniquely identifies a cache processed image.
-struct CacheKey: Hashable {
- private let imageId: String?
- private let thumbnail: ImageRequest.ThumbnailOptions?
- private let processors: [ImageProcessing]
-
- init(_ request: ImageRequest) {
- self.imageId = request.preferredImageId
- self.thumbnail = request.thubmnail
- self.processors = request.ref.processors
- }
-
- func hash(into hasher: inout Hasher) {
- hasher.combine(imageId)
- hasher.combine(thumbnail)
- hasher.combine(processors.count)
- }
-
- static func == (lhs: CacheKey, rhs: CacheKey) -> Bool {
- lhs.imageId == rhs.imageId && lhs.thumbnail == rhs.thumbnail && lhs.processors == rhs.processors
- }
-}
-
-/// Uniquely identifies a task of retrieving the processed image.
-struct ImageLoadKey: Hashable {
- let cacheKey: CacheKey
- let options: ImageRequest.Options
- let thumbnail: ImageRequest.ThumbnailOptions?
- let loadKey: DataLoadKey
-
- init(_ request: ImageRequest) {
- self.cacheKey = CacheKey(request)
- self.options = request.options
- self.thumbnail = request.thubmnail
- self.loadKey = DataLoadKey(request)
- }
-}
-
-/// Uniquely identifies a task of retrieving the decoded image.
-struct DecodedImageLoadKey: Hashable {
- let dataLoadKey: DataLoadKey
- let thumbnail: ImageRequest.ThumbnailOptions?
-
- init(_ request: ImageRequest) {
- self.dataLoadKey = DataLoadKey(request)
- self.thumbnail = request.thubmnail
- }
-}
-
-/// Uniquely identifies a task of retrieving the original image dataa.
-struct DataLoadKey: Hashable {
- private let imageId: String?
- private let cachePolicy: URLRequest.CachePolicy
- private let allowsCellularAccess: Bool
-
- init(_ request: ImageRequest) {
- self.imageId = request.imageId
- switch request.ref.resource {
- case .url, .publisher:
- self.cachePolicy = .useProtocolCachePolicy
- self.allowsCellularAccess = true
- case let .urlRequest(urlRequest):
- self.cachePolicy = urlRequest.cachePolicy
- self.allowsCellularAccess = urlRequest.allowsCellularAccess
- }
- }
-}
-
-struct ImageProcessingKey: Equatable, Hashable {
- let imageId: ObjectIdentifier
- let processorId: AnyHashable
-
- init(image: ImageResponse, processor: ImageProcessing) {
- self.imageId = ObjectIdentifier(image.image)
- self.processorId = processor.hashableIdentifier
- }
-}
diff --git a/Pods/Nuke/Sources/Internal/LinkedList.swift b/Pods/Nuke/Sources/Internal/LinkedList.swift
deleted file mode 100644
index afd492d05..000000000
--- a/Pods/Nuke/Sources/Internal/LinkedList.swift
+++ /dev/null
@@ -1,85 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-/// A doubly linked list.
-final class LinkedList {
- // first <-> node <-> ... <-> last
- private(set) var first: Node?
- private(set) var last: Node?
-
- deinit {
- removeAll()
-
- #if TRACK_ALLOCATIONS
- Allocations.decrement("LinkedList")
- #endif
- }
-
- init() {
- #if TRACK_ALLOCATIONS
- Allocations.increment("LinkedList")
- #endif
- }
-
- var isEmpty: Bool {
- last == nil
- }
-
- /// Adds an element to the end of the list.
- @discardableResult
- func append(_ element: Element) -> Node {
- let node = Node(value: element)
- append(node)
- return node
- }
-
- /// Adds a node to the end of the list.
- func append(_ node: Node) {
- if let last = last {
- last.next = node
- node.previous = last
- self.last = node
- } else {
- last = node
- first = node
- }
- }
-
- func remove(_ node: Node) {
- node.next?.previous = node.previous // node.previous is nil if node=first
- node.previous?.next = node.next // node.next is nil if node=last
- if node === last {
- last = node.previous
- }
- if node === first {
- first = node.next
- }
- node.next = nil
- node.previous = nil
- }
-
- func removeAll() {
- // avoid recursive Nodes deallocation
- var node = first
- while let next = node?.next {
- node?.next = nil
- next.previous = nil
- node = next
- }
- last = nil
- first = nil
- }
-
- final class Node {
- let value: Element
- fileprivate var next: Node?
- fileprivate var previous: Node?
-
- init(value: Element) {
- self.value = value
- }
- }
-}
diff --git a/Pods/Nuke/Sources/Internal/Log.swift b/Pods/Nuke/Sources/Internal/Log.swift
deleted file mode 100644
index 81e24319f..000000000
--- a/Pods/Nuke/Sources/Internal/Log.swift
+++ /dev/null
@@ -1,73 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-import os
-
-func signpost(_ log: OSLog, _ object: AnyObject, _ name: StaticString, _ type: SignpostType) {
- guard ImagePipeline.Configuration.isSignpostLoggingEnabled else { return }
- if #available(OSX 10.14, iOS 12.0, watchOS 5.0, tvOS 12.0, *) {
- let signpostId = OSSignpostID(log: log, object: object)
- os_signpost(type.os, log: log, name: name, signpostID: signpostId)
- }
-}
-
-func signpost(_ log: OSLog, _ object: AnyObject, _ name: StaticString, _ type: SignpostType, _ message: @autoclosure () -> String) {
- guard ImagePipeline.Configuration.isSignpostLoggingEnabled else { return }
- if #available(OSX 10.14, iOS 12.0, watchOS 5.0, tvOS 12.0, *) {
- let signpostId = OSSignpostID(log: log, object: object)
- os_signpost(type.os, log: log, name: name, signpostID: signpostId, "%{public}s", message())
- }
-}
-
-func signpost(_ log: OSLog, _ name: StaticString, _ work: () -> T) -> T {
- if #available(OSX 10.14, iOS 12.0, watchOS 5.0, tvOS 12.0, *), ImagePipeline.Configuration.isSignpostLoggingEnabled {
- let signpostId = OSSignpostID(log: log)
- os_signpost(.begin, log: log, name: name, signpostID: signpostId)
- let result = work()
- os_signpost(.end, log: log, name: name, signpostID: signpostId)
- return result
- } else {
- return work()
- }
-}
-
-func signpost(_ log: OSLog, _ name: StaticString, _ message: @autoclosure () -> String, _ work: () -> T) -> T {
- if #available(OSX 10.14, iOS 12.0, watchOS 5.0, tvOS 12.0, *), ImagePipeline.Configuration.isSignpostLoggingEnabled {
- let signpostId = OSSignpostID(log: log)
- os_signpost(.begin, log: log, name: name, signpostID: signpostId, "%{public}s", message())
- let result = work()
- os_signpost(.end, log: log, name: name, signpostID: signpostId)
- return result
- } else {
- return work()
- }
-}
-
-var log: OSLog = .disabled
-
-private let byteFormatter = ByteCountFormatter()
-
-enum Formatter {
- static func bytes(_ count: Int) -> String {
- bytes(Int64(count))
- }
-
- static func bytes(_ count: Int64) -> String {
- byteFormatter.string(fromByteCount: count)
- }
-}
-
-enum SignpostType {
- case begin, event, end
-
- @available(OSX 10.14, iOS 12.0, watchOS 5.0, tvOS 12.0, *)
- var os: OSSignpostType {
- switch self {
- case .begin: return .begin
- case .event: return .event
- case .end: return .end
- }
- }
-}
diff --git a/Pods/Nuke/Sources/Internal/Operation.swift b/Pods/Nuke/Sources/Internal/Operation.swift
deleted file mode 100644
index 7c48ca762..000000000
--- a/Pods/Nuke/Sources/Internal/Operation.swift
+++ /dev/null
@@ -1,97 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-final class Operation: Foundation.Operation {
- private let _isExecuting: UnsafeMutablePointer
- private let _isFinished: UnsafeMutablePointer
- private let isFinishCalled: UnsafeMutablePointer
-
- override var isExecuting: Bool {
- get { _isExecuting.pointee == 1 }
- set {
- guard OSAtomicCompareAndSwap32Barrier(newValue ? 0 : 1, newValue ? 1 : 0, _isExecuting) else {
- return assertionFailure("Invalid state, operation is already (not) executing")
- }
- willChangeValue(forKey: "isExecuting")
- didChangeValue(forKey: "isExecuting")
- }
- }
- override var isFinished: Bool {
- get { _isFinished.pointee == 1 }
- set {
- guard OSAtomicCompareAndSwap32Barrier(newValue ? 0 : 1, newValue ? 1 : 0, _isFinished) else {
- return assertionFailure("Invalid state, operation is already finished")
- }
- willChangeValue(forKey: "isFinished")
- didChangeValue(forKey: "isFinished")
- }
- }
-
- typealias Starter = (_ finish: @escaping () -> Void) -> Void
- private let starter: Starter
-
- deinit {
- self._isExecuting.deallocate()
- self._isFinished.deallocate()
- self.isFinishCalled.deallocate()
-
- #if TRACK_ALLOCATIONS
- Allocations.decrement("Operation")
- #endif
- }
-
- init(starter: @escaping Starter) {
- self.starter = starter
-
- self._isExecuting = UnsafeMutablePointer.allocate(capacity: 1)
- self._isExecuting.initialize(to: 0)
-
- self._isFinished = UnsafeMutablePointer.allocate(capacity: 1)
- self._isFinished.initialize(to: 0)
-
- self.isFinishCalled = UnsafeMutablePointer.allocate(capacity: 1)
- self.isFinishCalled.initialize(to: 0)
-
- #if TRACK_ALLOCATIONS
- Allocations.increment("Operation")
- #endif
- }
-
- override func start() {
- guard !isCancelled else {
- isFinished = true
- return
- }
- isExecuting = true
- starter { [weak self] in
- self?._finish()
- }
- }
-
- private func _finish() {
- // Make sure that we ignore if `finish` is called more than once.
- if OSAtomicCompareAndSwap32Barrier(0, 1, isFinishCalled) {
- isExecuting = false
- isFinished = true
- }
- }
-}
-
-extension OperationQueue {
- /// Adds simple `BlockOperation`.
- func add(_ closure: @escaping () -> Void) -> BlockOperation {
- let operation = BlockOperation(block: closure)
- addOperation(operation)
- return operation
- }
-
- /// Adds asynchronous operation (`Nuke.Operation`) with the given starter.
- func add(_ starter: @escaping Operation.Starter) -> Operation {
- let operation = Operation(starter: starter)
- addOperation(operation)
- return operation
- }
-}
diff --git a/Pods/Nuke/Sources/Internal/RateLimiter.swift b/Pods/Nuke/Sources/Internal/RateLimiter.swift
deleted file mode 100644
index 303602235..000000000
--- a/Pods/Nuke/Sources/Internal/RateLimiter.swift
+++ /dev/null
@@ -1,114 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-/// Controls the rate at which the work is executed. Uses the classic [token
-/// bucket](https://en.wikipedia.org/wiki/Token_bucket) algorithm.
-///
-/// The main use case for rate limiter is to support large (infinite) collections
-/// of images by preventing trashing of underlying systems, primary URLSession.
-///
-/// The implementation supports quick bursts of requests which can be executed
-/// without any delays when "the bucket is full". This is important to prevent
-/// rate limiter from affecting "normal" requests flow.
-final class RateLimiter {
- private let bucket: TokenBucket
- private let queue: DispatchQueue
- private var pending = LinkedList() // fast append, fast remove first
- private var isExecutingPendingTasks = false
-
- typealias Work = () -> Bool
-
- /// Initializes the `RateLimiter` with the given configuration.
- /// - parameter queue: Queue on which to execute pending tasks.
- /// - parameter rate: Maximum number of requests per second. 80 by default.
- /// - parameter burst: Maximum number of requests which can be executed without
- /// any delays when "bucket is full". 25 by default.
- init(queue: DispatchQueue, rate: Int = 80, burst: Int = 25) {
- self.queue = queue
- self.bucket = TokenBucket(rate: Double(rate), burst: Double(burst))
-
- #if TRACK_ALLOCATIONS
- Allocations.increment("RateLimiter")
- #endif
- }
-
- deinit {
- #if TRACK_ALLOCATIONS
- Allocations.decrement("RateLimiter")
- #endif
- }
-
- /// - parameter closure: Returns `true` if the close was executed, `false`
- /// if the work was cancelled.
- func execute( _ work: @escaping Work) {
- if !pending.isEmpty || !bucket.execute(work) {
- pending.append(work)
- setNeedsExecutePendingTasks()
- }
- }
-
- private func setNeedsExecutePendingTasks() {
- guard !isExecutingPendingTasks else {
- return
- }
- isExecutingPendingTasks = true
- // Compute a delay such that by the time the closure is executed the
- // bucket is refilled to a point that is able to execute at least one
- // pending task. With a rate of 80 tasks we expect a refill every ~26 ms
- // or as soon as the new tasks are added.
- let bucketRate = 1000.0 / bucket.rate
- let delay = Int(2.1 * bucketRate) // 14 ms for rate 80 (default)
- let bounds = min(100, max(15, delay))
- queue.asyncAfter(deadline: .now() + .milliseconds(bounds), execute: executePendingTasks)
- }
-
- private func executePendingTasks() {
- while let node = pending.first, bucket.execute(node.value) {
- pending.remove(node)
- }
- isExecutingPendingTasks = false
- if !pending.isEmpty { // Not all pending items were executed
- setNeedsExecutePendingTasks()
- }
- }
-}
-
-private final class TokenBucket {
- let rate: Double
- private let burst: Double // maximum bucket size
- private var bucket: Double
- private var timestamp: TimeInterval // last refill timestamp
-
- /// - parameter rate: Rate (tokens/second) at which bucket is refilled.
- /// - parameter burst: Bucket size (maximum number of tokens).
- init(rate: Double, burst: Double) {
- self.rate = rate
- self.burst = burst
- self.bucket = burst
- self.timestamp = CFAbsoluteTimeGetCurrent()
- }
-
- /// Returns `true` if the closure was executed, `false` if dropped.
- func execute(_ work: () -> Bool) -> Bool {
- refill()
- guard bucket >= 1.0 else {
- return false // bucket is empty
- }
- if work() {
- bucket -= 1.0 // work was cancelled, no need to reduce the bucket
- }
- return true
- }
-
- private func refill() {
- let now = CFAbsoluteTimeGetCurrent()
- bucket += rate * max(0, now - timestamp) // rate * (time delta)
- timestamp = now
- if bucket > burst { // prevent bucket overflow
- bucket = burst
- }
- }
-}
diff --git a/Pods/Nuke/Sources/Internal/ResumableData.swift b/Pods/Nuke/Sources/Internal/ResumableData.swift
deleted file mode 100644
index bd2a8a5a7..000000000
--- a/Pods/Nuke/Sources/Internal/ResumableData.swift
+++ /dev/null
@@ -1,133 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-/// Resumable data support. For more info see:
-/// - https://developer.apple.com/library/content/qa/qa1761/_index.html
-struct ResumableData {
- let data: Data
- let validator: String // Either Last-Modified or ETag
-
- init?(response: URLResponse, data: Data) {
- // Check if "Accept-Ranges" is present and the response is valid.
- guard !data.isEmpty,
- let response = response as? HTTPURLResponse,
- data.count < response.expectedContentLength,
- response.statusCode == 200 /* OK */ || response.statusCode == 206, /* Partial Content */
- let acceptRanges = response.allHeaderFields["Accept-Ranges"] as? String,
- acceptRanges.lowercased() == "bytes",
- let validator = ResumableData._validator(from: response) else {
- return nil
- }
-
- // NOTE: https://developer.apple.com/documentation/foundation/httpurlresponse/1417930-allheaderfields
- // HTTP headers are case insensitive. To simplify your code, certain
- // header field names are canonicalized into their standard form.
- // For example, if the server sends a content-length header,
- // it is automatically adjusted to be Content-Length.
-
- self.data = data; self.validator = validator
- }
-
- private static func _validator(from response: HTTPURLResponse) -> String? {
- if let entityTag = response.allHeaderFields["ETag"] as? String {
- return entityTag // Prefer ETag
- }
- // There seems to be a bug with ETag where HTTPURLResponse would canonicalize
- // it to Etag instead of ETag
- // https://bugs.swift.org/browse/SR-2429
- if let entityTag = response.allHeaderFields["Etag"] as? String {
- return entityTag // Prefer ETag
- }
- if let lastModified = response.allHeaderFields["Last-Modified"] as? String {
- return lastModified
- }
- return nil
- }
-
- func resume(request: inout URLRequest) {
- var headers = request.allHTTPHeaderFields ?? [:]
- // "bytes=1000-" means bytes from 1000 up to the end (inclusive)
- headers["Range"] = "bytes=\(data.count)-"
- headers["If-Range"] = validator
- request.allHTTPHeaderFields = headers
- }
-
- // Check if the server decided to resume the response.
- static func isResumedResponse(_ response: URLResponse) -> Bool {
- // "206 Partial Content" (server accepted "If-Range")
- (response as? HTTPURLResponse)?.statusCode == 206
- }
-}
-
-/// Shared cache, uses the same memory pool across multiple pipelines.
-final class ResumableDataStorage {
- static let shared = ResumableDataStorage()
-
- private let lock = NSLock()
- private var registeredPipelines = Set()
-
- private var cache: Cache?
-
- // MARK: Registration
-
- func register(_ pipeline: ImagePipeline) {
- lock.lock(); defer { lock.unlock() }
-
- if registeredPipelines.isEmpty {
- // 32 MB
- cache = Cache(costLimit: 32000000, countLimit: 100)
- }
- registeredPipelines.insert(pipeline.id)
- }
-
- func unregister(_ pipeline: ImagePipeline) {
- lock.lock(); defer { lock.unlock() }
-
- registeredPipelines.remove(pipeline.id)
- if registeredPipelines.isEmpty {
- cache = nil // Deallocate storage
- }
- }
-
- func removeAll() {
- lock.lock(); defer { lock.unlock() }
-
- cache?.removeAll()
- }
-
- // MARK: Storage
-
- func removeResumableData(for request: ImageRequest, pipeline: ImagePipeline) -> ResumableData? {
- lock.lock(); defer { lock.unlock() }
-
- guard let cache = cache,
- cache.totalCount > 0,
- let key = Key(request: request, pipeline: pipeline) else {
- return nil
- }
- return cache.removeValue(forKey: key)
- }
-
- func storeResumableData(_ data: ResumableData, for request: ImageRequest, pipeline: ImagePipeline) {
- lock.lock(); defer { lock.unlock() }
-
- guard let key = Key(request: request, pipeline: pipeline) else { return }
- cache?.set(data, forKey: key, cost: data.data.count)
- }
-
- private struct Key: Hashable {
- let pipelineId: UUID
- let url: String
-
- init?(request: ImageRequest, pipeline: ImagePipeline) {
- guard let imageId = request.imageId else {
- return nil
- }
- self.pipelineId = pipeline.id
- self.url = imageId
- }
- }
-}
diff --git a/Pods/Nuke/Sources/UI/FetchImage.swift b/Pods/Nuke/Sources/UI/FetchImage.swift
deleted file mode 100644
index 3226ff37b..000000000
--- a/Pods/Nuke/Sources/UI/FetchImage.swift
+++ /dev/null
@@ -1,234 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import SwiftUI
-import Combine
-
-/// An observable object that simplifies image loading in SwiftUI.
-@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
-public final class FetchImage: ObservableObject, Identifiable {
- /// Returns the current fetch result.
- @Published public private(set) var result: Result?
-
- /// Returns the fetched image.
- ///
- /// - note: In case pipeline has `isProgressiveDecodingEnabled` option enabled
- /// and the image being downloaded supports progressive decoding, the `image`
- /// might be updated multiple times during the download.
- public var image: PlatformImage? { imageContainer?.image }
-
- /// Returns the fetched image.
- ///
- /// - note: In case pipeline has `isProgressiveDecodingEnabled` option enabled
- /// and the image being downloaded supports progressive decoding, the `image`
- /// might be updated multiple times during the download.
- @Published public private(set) var imageContainer: ImageContainer?
-
- /// Returns `true` if the image is being loaded.
- @Published public private(set) var isLoading: Bool = false
-
- /// Animations to be used when displaying the loaded images. By default, `nil`.
- ///
- /// - note: Animation isn't used when image is available in memory cache.
- public var animation: Animation?
-
- /// The download progress.
- public struct Progress: Equatable {
- /// The number of bytes that the task has received.
- public let completed: Int64
-
- /// A best-guess upper bound on the number of bytes the client expects to send.
- public let total: Int64
- }
-
- /// The progress of the image download.
- @Published public private(set) var progress = Progress(completed: 0, total: 0)
-
- /// Updates the priority of the task, even if the task is already running.
- /// `nil` by default
- public var priority: ImageRequest.Priority? {
- didSet { priority.map { imageTask?.priority = $0 } }
- }
-
- /// Gets called when the request is started.
- public var onStart: ((_ task: ImageTask) -> Void)?
-
- /// Gets called when the request progress is updated.
- public var onProgress: ((_ response: ImageResponse?, _ completed: Int64, _ total: Int64) -> Void)?
-
- /// Gets called when the requests finished successfully.
- public var onSuccess: ((_ response: ImageResponse) -> Void)?
-
- /// Gets called when the requests fails.
- public var onFailure: ((_ response: Error) -> Void)?
-
- /// Gets called when the request is completed.
- public var onCompletion: ((_ result: Result) -> Void)?
-
- public var pipeline: ImagePipeline = .shared
-
- /// Image processors to be applied unless the processors are provided in the
- /// request. `[]` by default.
- public var processors: [ImageProcessing] = []
-
- private var imageTask: ImageTask?
-
- // publisher support
- private var lastResponse: ImageResponse?
- private var cancellable: AnyCancellable?
-
- deinit {
- cancel()
- }
-
- public init() {}
-
- // MARK: Load (ImageRequestConvertible)
-
- /// Loads an image with the given request.
- public func load(_ request: ImageRequestConvertible?) {
- assert(Thread.isMainThread, "Must be called from the main thread")
-
- reset()
-
- guard var request = request?.asImageRequest() else {
- handle(result: .failure(FetchImageError.sourceEmpty))
- return
- }
-
- if !processors.isEmpty && request.processors.isEmpty {
- request.processors = processors
- }
- if let priority = self.priority {
- request.priority = priority
- }
-
- // Quick synchronous memory cache lookup
- if let image = pipeline.cache[request] {
- if image.isPreview {
- imageContainer = image // Display progressive image
- } else {
- let response = ImageResponse(container: image, cacheType: .memory)
- handle(result: .success(response))
- return
- }
- }
-
- isLoading = true
- progress = Progress(completed: 0, total: 0)
-
- let task = pipeline.loadImage(
- with: request,
- progress: { [weak self] response, completed, total in
- guard let self = self else { return }
- self.progress = Progress(completed: completed, total: total)
- if let response = response {
- withAnimation(self.animation) {
- self.handle(preview: response)
- }
- }
- self.onProgress?(response, completed, total)
- },
- completion: { [weak self] result in
- guard let self = self else { return }
- withAnimation(self.animation) {
- self.handle(result: result.mapError { $0 })
- }
- }
- )
- imageTask = task
- onStart?(task)
- }
-
- private func handle(preview: ImageResponse) {
- // Display progressively decoded image
- self.imageContainer = preview.container
- }
-
- private func handle(result: Result) {
- isLoading = false
-
- if case .success(let response) = result {
- self.imageContainer = response.container
- }
- self.result = result
-
- imageTask = nil
- switch result {
- case .success(let response): onSuccess?(response)
- case .failure(let error): onFailure?(error)
- }
- onCompletion?(result)
- }
-
- // MARK: Load (Publisher)
-
- /// Loads an image with the given publisher.
- ///
- /// - warning: Some `FetchImage` features, such as progress reporting and
- /// dynamically changing the request priority, are not available when
- /// working with a publisher.
- public func load(_ publisher: P) where P.Output == ImageResponse {
- reset()
-
- // Not using `first()` because it should support progressive decoding
- isLoading = true
- cancellable = publisher.sink(receiveCompletion: { [weak self] completion in
- guard let self = self else { return }
- self.isLoading = false
- switch completion {
- case .finished:
- if let response = self.lastResponse {
- self.result = .success(response)
- } // else was cancelled, do nothing
- case .failure(let error):
- self.result = .failure(error)
- }
- }, receiveValue: { [weak self] response in
- guard let self = self else { return }
- self.lastResponse = response
- self.imageContainer = response.container
- })
- }
-
- // MARK: Cancel
-
- /// Marks the request as being cancelled. Continues to display a downloaded
- /// image.
- public func cancel() {
- // pipeline-based
- imageTask?.cancel() // Guarantees that no more callbacks are will be delivered
- imageTask = nil
-
- // publisher-based
- cancellable = nil
- }
-
- /// Resets the `FetchImage` instance by cancelling the request and removing
- /// all of the state including the loaded image.
- public func reset() {
- cancel()
-
- // Avoid publishing unchanged values
- if isLoading { isLoading = false }
- if imageContainer != nil { imageContainer = nil }
- if result != nil { result = nil }
- lastResponse = nil // publisher-only
- if progress != Progress(completed: 0, total: 0) { progress = Progress(completed: 0, total: 0) }
- }
-
- // MARK: View
-
- public var view: SwiftUI.Image? {
- #if os(macOS)
- return image.map(Image.init(nsImage:))
- #else
- return image.map(Image.init(uiImage:))
- #endif
- }
-}
-
-public enum FetchImageError: Swift.Error {
- case sourceEmpty
-}
diff --git a/Pods/Nuke/Sources/UI/ImageViewExtensions.swift b/Pods/Nuke/Sources/UI/ImageViewExtensions.swift
deleted file mode 100644
index cfef2fae6..000000000
--- a/Pods/Nuke/Sources/UI/ImageViewExtensions.swift
+++ /dev/null
@@ -1,619 +0,0 @@
-// The MIT License (MIT)
-//
-// Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean).
-
-import Foundation
-
-#if !os(macOS)
-import UIKit.UIImage
-import UIKit.UIColor
-/// Alias for `UIImage`.
-public typealias PlatformImage = UIImage
-#else
-import AppKit.NSImage
-/// Alias for `NSImage`.
-public typealias PlatformImage = NSImage
-#endif
-
-/// Displays images. Add the conformance to this protocol to your views to make
-/// them compatible with Nuke image loading extensions.
-///
-/// The protocol is defined as `@objc` to make it possible to override its
-/// methods in extensions (e.g. you can override `nuke_display(image:data:)` in
-/// `UIImageView` subclass like `Gifu.ImageView).
-///
-/// The protocol and its methods have prefixes to make sure they don't clash
-/// with other similar methods and protocol in Objective-C runtime.
-@objc public protocol Nuke_ImageDisplaying {
- /// Display a given image.
- @objc func nuke_display(image: PlatformImage?, data: Data?)
-
- #if os(macOS)
- @objc var layer: CALayer? { get }
- #endif
-}
-
-extension Nuke_ImageDisplaying {
- func display(_ container: ImageContainer) {
- nuke_display(image: container.image, data: container.data)
- }
-}
-
-#if os(macOS)
-public extension Nuke_ImageDisplaying {
- var layer: CALayer? { nil }
-}
-#endif
-
-#if os(iOS) || os(tvOS)
-import UIKit
-/// A `UIView` that implements `ImageDisplaying` protocol.
-public typealias ImageDisplayingView = UIView & Nuke_ImageDisplaying
-
-extension UIImageView: Nuke_ImageDisplaying {
- /// Displays an image.
- open func nuke_display(image: UIImage?, data: Data? = nil) {
- self.image = image
- }
-}
-#elseif os(macOS)
-import Cocoa
-/// An `NSObject` that implements `ImageDisplaying` and `Animating` protocols.
-/// Can support `NSView` and `NSCell`. The latter can return nil for layer.
-public typealias ImageDisplayingView = NSObject & Nuke_ImageDisplaying
-
-extension NSImageView: Nuke_ImageDisplaying {
- /// Displays an image.
- open func nuke_display(image: NSImage?, data: Data? = nil) {
- self.image = image
- }
-}
-#elseif os(watchOS)
-import WatchKit
-
-/// A `WKInterfaceObject` that implements `ImageDisplaying` protocol.
-public typealias ImageDisplayingView = WKInterfaceObject & Nuke_ImageDisplaying
-
-extension WKInterfaceImage: Nuke_ImageDisplaying {
- /// Displays an image.
- open func nuke_display(image: UIImage?, data: Data? = nil) {
- self.setImage(image)
- }
-}
-#endif
-
-// MARK: - ImageView Extensions
-
-/// Loads an image with the given request and displays it in the view.
-///
-/// See the complete method signature for more information.
-@discardableResult
-public func loadImage(
- with request: ImageRequestConvertible?,
- options: ImageLoadingOptions = ImageLoadingOptions.shared,
- into view: ImageDisplayingView,
- completion: @escaping (_ result: Result) -> Void
-) -> ImageTask? {
- loadImage(with: request, options: options, into: view, progress: nil, completion: completion)
-}
-
-/// Loads an image with the given request and displays it in the view.
-///
-/// Before loading a new image, the view is prepared for reuse by canceling any
-/// outstanding requests and removing a previously displayed image.
-///
-/// If the image is stored in the memory cache, it is displayed immediately with
-/// no animations. If not, the image is loaded using an image pipeline. When the
-/// image is loading, the `placeholder` is displayed. When the request
-/// completes the loaded image is displayed (or `failureImage` in case of an error)
-/// with the selected animation.
-///
-/// - parameter request: The image request. If `nil`, it's handled as a failure
-/// scenario.
-/// - parameter options: `ImageLoadingOptions.shared` by default.
-/// - parameter view: Nuke keeps a weak reference to the view. If the view is deallocated
-/// the associated request automatically gets canceled.
-/// - parameter progress: A closure to be called periodically on the main thread
-/// when the progress is updated. `nil` by default.
-/// - parameter completion: A closure to be called on the main thread when the
-/// request is finished. Gets called synchronously if the response was found in
-/// the memory cache. `nil` by default.
-/// - returns: An image task or `nil` if the image was found in the memory cache.
-@discardableResult
-public func loadImage(
- with request: ImageRequestConvertible?,
- options: ImageLoadingOptions = ImageLoadingOptions.shared,
- into view: ImageDisplayingView,
- progress: ((_ response: ImageResponse?, _ completed: Int64, _ total: Int64) -> Void)? = nil,
- completion: ((_ result: Result) -> Void)? = nil
-) -> ImageTask? {
- assert(Thread.isMainThread)
- let controller = ImageViewController.controller(for: view)
- return controller.loadImage(with: request?.asImageRequest(), options: options, progress: progress, completion: completion)
-}
-
-/// Cancels an outstanding request associated with the view.
-public func cancelRequest(for view: ImageDisplayingView) {
- assert(Thread.isMainThread)
- ImageViewController.controller(for: view).cancelOutstandingTask()
-}
-
-// MARK: - ImageLoadingOptions
-
-/// A set of options that control how the image is loaded and displayed.
-public struct ImageLoadingOptions {
- /// Shared options.
- public static var shared = ImageLoadingOptions()
-
- /// Placeholder to be displayed when the image is loading. `nil` by default.
- public var placeholder: PlatformImage?
-
- /// Image to be displayed when the request fails. `nil` by default.
- public var failureImage: PlatformImage?
-
- #if os(iOS) || os(tvOS) || os(macOS)
-
- /// The image transition animation performed when displaying a loaded image.
- /// Only runs when the image was not found in memory cache. `nil` by default.
- public var transition: Transition?
-
- /// The image transition animation performed when displaying a failure image.
- /// `nil` by default.
- public var failureImageTransition: Transition?
-
- /// If true, the requested image will always appear with transition, even
- /// when loaded from cache.
- public var alwaysTransition = false
-
- func transition(for response: ResponseType) -> Transition? {
- switch response {
- case .success: return transition
- case .failure: return failureImageTransition
- case .placeholder: return nil
- }
- }
-
- #endif
-
- /// If true, every time you request a new image for a view, the view will be
- /// automatically prepared for reuse: image will be set to `nil`, and animations
- /// will be removed. `true` by default.
- public var isPrepareForReuseEnabled = true
-
- /// If `true`, every progressively generated preview produced by the pipeline
- /// is going to be displayed. `true` by default.
- ///
- /// - note: To enable progressive decoding, see `ImagePipeline.Configuration`,
- /// `isProgressiveDecodingEnabled` option.
- public var isProgressiveRenderingEnabled = true
-
- /// Custom pipeline to be used. `nil` by default.
- public var pipeline: ImagePipeline?
-
- /// Image processors to be applied unless the processors are provided in the
- /// request. `[]` by default.
- public var processors: [ImageProcessing] = []
-
- #if os(iOS) || os(tvOS)
-
- /// Content modes to be used for each image type (placeholder, success,
- /// failure). `nil` by default (don't change content mode).
- public var contentModes: ContentModes?
-
- /// Custom content modes to be used for each image type (placeholder, success,
- /// failure).
- public struct ContentModes {
- /// Content mode to be used for the loaded image.
- public var success: UIView.ContentMode
- /// Content mode to be used when displaying a `failureImage`.
- public var failure: UIView.ContentMode
- /// Content mode to be used when displaying a `placeholder`.
- public var placeholder: UIView.ContentMode
-
- /// - parameter success: A content mode to be used with a loaded image.
- /// - parameter failure: A content mode to be used with a `failureImage`.
- /// - parameter placeholder: A content mode to be used with a `placeholder`.
- public init(success: UIView.ContentMode, failure: UIView.ContentMode, placeholder: UIView.ContentMode) {
- self.success = success; self.failure = failure; self.placeholder = placeholder
- }
- }
-
- func contentMode(for response: ResponseType) -> UIView.ContentMode? {
- switch response {
- case .success: return contentModes?.success
- case .placeholder: return contentModes?.placeholder
- case .failure: return contentModes?.failure
- }
- }
-
- /// Tint colors to be used for each image type (placeholder, success,
- /// failure). `nil` by default (don't change tint color or rendering mode).
- public var tintColors: TintColors?
-
- /// Custom tint color to be used for each image type (placeholder, success,
- /// failure).
- public struct TintColors {
- /// Tint color to be used for the loaded image.
- public var success: UIColor?
- /// Tint color to be used when displaying a `failureImage`.
- public var failure: UIColor?
- /// Tint color to be used when displaying a `placeholder`.
- public var placeholder: UIColor?
-
- /// - parameter success: A tint color to be used with a loaded image.
- /// - parameter failure: A tint color to be used with a `failureImage`.
- /// - parameter placeholder: A tint color to be used with a `placeholder`.
- public init(success: UIColor?, failure: UIColor?, placeholder: UIColor?) {
- self.success = success; self.failure = failure; self.placeholder = placeholder
- }
- }
-
- func tintColor(for response: ResponseType) -> UIColor? {
- switch response {
- case .success: return tintColors?.success
- case .placeholder: return tintColors?.placeholder
- case .failure: return tintColors?.failure
- }
- }
-
- #endif
-
- #if os(iOS) || os(tvOS)
-
- /// - parameter placeholder: Placeholder to be displayed when the image is
- /// loading . `nil` by default.
- /// - parameter transition: The image transition animation performed when
- /// displaying a loaded image. Only runs when the image was not found in
- /// memory cache. `nil` by default (no animations).
- /// - parameter failureImage: Image to be displayd when request fails.
- /// `nil` by default.
- /// - parameter failureImageTransition: The image transition animation
- /// performed when displaying a failure image. `nil` by default.
- /// - parameter contentModes: Content modes to be used for each image type
- /// (placeholder, success, failure). `nil` by default (don't change content mode).
- public init(placeholder: UIImage? = nil, transition: Transition? = nil, failureImage: UIImage? = nil, failureImageTransition: Transition? = nil, contentModes: ContentModes? = nil, tintColors: TintColors? = nil) {
- self.placeholder = placeholder
- self.transition = transition
- self.failureImage = failureImage
- self.failureImageTransition = failureImageTransition
- self.contentModes = contentModes
- self.tintColors = tintColors
- }
-
- #elseif os(macOS)
-
- public init(placeholder: NSImage? = nil, transition: Transition? = nil, failureImage: NSImage? = nil, failureImageTransition: Transition? = nil) {
- self.placeholder = placeholder
- self.transition = transition
- self.failureImage = failureImage
- self.failureImageTransition = failureImageTransition
- }
-
- #elseif os(watchOS)
-
- public init(placeholder: UIImage? = nil, failureImage: UIImage? = nil) {
- self.placeholder = placeholder
- self.failureImage = failureImage
- }
-
- #endif
-
- /// An animated image transition.
- public struct Transition {
- var style: Style
-
- #if os(iOS) || os(tvOS)
- enum Style { // internal representation
- case fadeIn(parameters: Parameters)
- case custom((ImageDisplayingView, UIImage) -> Void)
- }
-
- struct Parameters { // internal representation
- let duration: TimeInterval
- let options: UIView.AnimationOptions
- }
-
- /// Fade-in transition (cross-fade in case the image view is already
- /// displaying an image).
- public static func fadeIn(duration: TimeInterval, options: UIView.AnimationOptions = .allowUserInteraction) -> Transition {
- Transition(style: .fadeIn(parameters: Parameters(duration: duration, options: options)))
- }
-
- /// Custom transition. Only runs when the image was not found in memory cache.
- public static func custom(_ closure: @escaping (ImageDisplayingView, UIImage) -> Void) -> Transition {
- Transition(style: .custom(closure))
- }
- #elseif os(macOS)
- enum Style { // internal representation
- case fadeIn(parameters: Parameters)
- case custom((ImageDisplayingView, NSImage) -> Void)
- }
-
- struct Parameters { // internal representation
- let duration: TimeInterval
- }
-
- /// Fade-in transition.
- public static func fadeIn(duration: TimeInterval) -> Transition {
- Transition(style: .fadeIn(parameters: Parameters(duration: duration)))
- }
-
- /// Custom transition. Only runs when the image was not found in memory cache.
- public static func custom(_ closure: @escaping (ImageDisplayingView, NSImage) -> Void) -> Transition {
- Transition(style: .custom(closure))
- }
- #else
- enum Style {}
- #endif
- }
-
- public init() {}
-
- enum ResponseType {
- case success, failure, placeholder
- }
-}
-
-// MARK: - ImageViewController
-
-/// Manages image requests on behalf of an image view.
-///
-/// - note: With a few modifications this might become public at some point,
-/// however as it stands today `ImageViewController` is just a helper class,
-/// making it public wouldn't expose any additional functionality to the users.
-private final class ImageViewController {
- private weak var imageView: ImageDisplayingView?
- private var task: ImageTask?
- private var options: ImageLoadingOptions
-
- #if os(iOS) || os(tvOS)
- // Image view used for cross-fade transition between images with different
- // content modes.
- private lazy var transitionImageView = UIImageView()
- #endif
-
- // Automatically cancel the request when the view is deallocated.
- deinit {
- cancelOutstandingTask()
- }
-
- init(view: /* weak */ ImageDisplayingView) {
- self.imageView = view
- self.options = .shared
- }
-
- // MARK: - Associating Controller
-
- static var controllerAK = "ImageViewController.AssociatedKey"
-
- // Lazily create a controller for a given view and associate it with a view.
- static func controller(for view: ImageDisplayingView) -> ImageViewController {
- if let controller = objc_getAssociatedObject(view, &ImageViewController.controllerAK) as? ImageViewController {
- return controller
- }
- let controller = ImageViewController(view: view)
- objc_setAssociatedObject(view, &ImageViewController.controllerAK, controller, .OBJC_ASSOCIATION_RETAIN)
- return controller
- }
-
- // MARK: - Loading Images
-
- func loadImage(
- with request: ImageRequest?,
- options: ImageLoadingOptions,
- progress: ((_ response: ImageResponse?, _ completed: Int64, _ total: Int64) -> Void)? = nil,
- completion: ((_ result: Result) -> Void)? = nil
- ) -> ImageTask? {
- cancelOutstandingTask()
-
- guard let imageView = imageView else {
- return nil
- }
-
- self.options = options
-
- if options.isPrepareForReuseEnabled { // enabled by default
- #if os(iOS) || os(tvOS)
- imageView.layer.removeAllAnimations()
- #elseif os(macOS)
- let layer = (imageView as? NSView)?.layer ?? imageView.layer
- layer?.removeAllAnimations()
- #endif
- }
-
- // Handle a scenario where request is `nil` (in the same way as a failure)
- guard let unwrappedRequest = request else {
- if options.isPrepareForReuseEnabled {
- imageView.nuke_display(image: nil, data: nil)
- }
- let result: Result = .failure(.dataLoadingFailed(URLError(.unknown)))
- handle(result: result, isFromMemory: true)
- completion?(result)
- return nil
- }
-
- let pipeline = options.pipeline ?? ImagePipeline.shared
- var request = pipeline.configuration.inheritOptions(unwrappedRequest)
- if !options.processors.isEmpty && request.processors.isEmpty {
- request.processors = options.processors
- }
-
- // Quick synchronous memory cache lookup.
- if let image = pipeline.cache[request] {
- display(image, true, .success)
- if !image.isPreview { // Final image was downloaded
- completion?(.success(ImageResponse(container: image, cacheType: .memory)))
- return nil // No task to perform
- }
- }
-
- // Display a placeholder.
- if let placeholder = options.placeholder {
- display(ImageContainer(image: placeholder), true, .placeholder)
- } else if options.isPrepareForReuseEnabled {
- imageView.nuke_display(image: nil, data: nil) // Remove previously displayed images (if any)
- }
-
- task = pipeline.loadImage(with: request, queue: .main, progress: { [weak self] response, completedCount, totalCount in
- if let response = response, options.isProgressiveRenderingEnabled {
- self?.handle(partialImage: response)
- }
- progress?(response, completedCount, totalCount)
- }, completion: { [weak self] result in
- self?.handle(result: result, isFromMemory: false)
- completion?(result)
- })
- return task
- }
-
- func cancelOutstandingTask() {
- task?.cancel() // The pipeline guarantees no callbacks to be deliver after cancellation
- task = nil
- }
-
- // MARK: - Handling Responses
-
- private func handle(result: Result, isFromMemory: Bool) {
- switch result {
- case let .success(response):
- display(response.container, isFromMemory, .success)
- case .failure:
- if let failureImage = options.failureImage {
- display(ImageContainer(image: failureImage), isFromMemory, .failure)
- }
- }
- self.task = nil
- }
-
- private func handle(partialImage response: ImageResponse) {
- display(response.container, false, .success)
- }
-
- #if os(iOS) || os(tvOS) || os(macOS)
-
- private func display(_ image: ImageContainer, _ isFromMemory: Bool, _ response: ImageLoadingOptions.ResponseType) {
- guard let imageView = imageView else {
- return
- }
-
- var image = image
-
- #if os(iOS) || os(tvOS)
- if let tintColor = options.tintColor(for: response) {
- image = image.map { $0.withRenderingMode(.alwaysTemplate) } ?? image
- imageView.tintColor = tintColor
- }
- #endif
-
- if !isFromMemory || options.alwaysTransition, let transition = options.transition(for: response) {
- switch transition.style {
- case let .fadeIn(params):
- runFadeInTransition(image: image, params: params, response: response)
- case let .custom(closure):
- // The user is reponsible for both displaying an image and performing
- // animations.
- closure(imageView, image.image)
- }
- } else {
- imageView.display(image)
- }
-
- #if os(iOS) || os(tvOS)
- if let contentMode = options.contentMode(for: response) {
- imageView.contentMode = contentMode
- }
- #endif
- }
-
- #elseif os(watchOS)
-
- private func display(_ image: ImageContainer, _ isFromMemory: Bool, _ response: ImageLoadingOptions.ResponseType) {
- imageView?.display(image)
- }
-
- #endif
-}
-
-// MARK: - ImageViewController (Transitions)
-
-private extension ImageViewController {
- #if os(iOS) || os(tvOS)
-
- private func runFadeInTransition(image: ImageContainer, params: ImageLoadingOptions.Transition.Parameters, response: ImageLoadingOptions.ResponseType) {
- guard let imageView = imageView else {
- return
- }
-
- // Special case where it animates between content modes, only works
- // on imageView subclasses.
- if let contentMode = options.contentMode(for: response), imageView.contentMode != contentMode, let imageView = imageView as? UIImageView, imageView.image != nil {
- runCrossDissolveWithContentMode(imageView: imageView, image: image, params: params)
- } else {
- runSimpleFadeIn(image: image, params: params)
- }
- }
-
- private func runSimpleFadeIn(image: ImageContainer, params: ImageLoadingOptions.Transition.Parameters) {
- guard let imageView = imageView else {
- return
- }
-
- UIView.transition(
- with: imageView,
- duration: params.duration,
- options: params.options.union(.transitionCrossDissolve),
- animations: {
- imageView.nuke_display(image: image.image, data: image.data)
- },
- completion: nil
- )
- }
-
- /// Performs cross-dissolve animation alonside transition to a new content
- /// mode. This isn't natively supported feature and it requires a second
- /// image view. There might be better ways to implement it.
- private func runCrossDissolveWithContentMode(imageView: UIImageView, image: ImageContainer, params: ImageLoadingOptions.Transition.Parameters) {
- // Lazily create a transition view.
- let transitionView = self.transitionImageView
-
- // Create a transition view which mimics current view's contents.
- transitionView.image = imageView.image
- transitionView.contentMode = imageView.contentMode
- imageView.addSubview(transitionView)
- transitionView.frame = imageView.bounds
-
- // "Manual" cross-fade.
- transitionView.alpha = 1
- imageView.alpha = 0
- imageView.display(image) // Display new image in current view
-
- UIView.animate(
- withDuration: params.duration,
- delay: 0,
- options: params.options,
- animations: {
- transitionView.alpha = 0
- imageView.alpha = 1
- },
- completion: { isCompleted in
- if isCompleted {
- transitionView.removeFromSuperview()
- }
- }
- )
- }
-
- #elseif os(macOS)
-
- private func runFadeInTransition(image: ImageContainer, params: ImageLoadingOptions.Transition.Parameters, response: ImageLoadingOptions.ResponseType) {
- let animation = CABasicAnimation(keyPath: "opacity")
- animation.duration = params.duration
- animation.fromValue = 0
- animation.toValue = 1
- imageView?.layer?.add(animation, forKey: "imageTransition")
-
- imageView?.display(image)
- }
-
- #endif
-}
diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj
deleted file mode 100644
index d91394e21..000000000
--- a/Pods/Pods.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,1391 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 55;
- objects = {
-
-/* Begin PBXAggregateTarget section */
- ED77B4B88587C894E85C361023D67C53 /* Sparkle */ = {
- isa = PBXAggregateTarget;
- buildConfigurationList = 2C8D06A2289713323892B3638F08AC0B /* Build configuration list for PBXAggregateTarget "Sparkle" */;
- buildPhases = (
- );
- dependencies = (
- );
- name = Sparkle;
- };
-/* End PBXAggregateTarget section */
-
-/* Begin PBXBuildFile section */
- 01A6B167EF9613254D827A8F166A3B92 /* Pods-AltServer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D94974804CB5C504BDB24325333B8C93 /* Pods-AltServer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 0F9C7CD03E191996E9ECAB298736E293 /* Operation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A5900F6730E9C50872B3781126A12C /* Operation.swift */; };
- 135A92BC284C94D0B14100C76C1525A7 /* Nuke-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 14B9CA39D5605E1146D994F22ABB0DB2 /* Nuke-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 1859749D184594E6A0D0C62ECC43ECC8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F59C7DFDE264782C5E1282C1070FA2 /* Foundation.framework */; };
- 1E669692D6688C6C6A9286FDD7673FEE /* ImageDecoders+Default.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15A626DBAE45050D4613BF5E30BC5990 /* ImageDecoders+Default.swift */; };
- 1F359ADC8D26588C41E48E3099AB234D /* ImagePipeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077A5CB52D1F5B35419AE23CEAB9613A /* ImagePipeline.swift */; };
- 22403265D88CA4D322BFEE168DAE6083 /* FetchImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49A1ECB5E49C4BFD46A7E614FB549A57 /* FetchImage.swift */; };
- 26A2A90C8F25CB390ED972DD55779F86 /* ImageProcessors+Anonymous.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FAFDEE9E6FB25FA2F916FEE6CBC9C5C /* ImageProcessors+Anonymous.swift */; };
- 292CD657DCB176D05E64CA4E58E46500 /* ImageProcessors+GaussianBlur.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DD5DBE355033822E4F0CEA8EE0E769E /* ImageProcessors+GaussianBlur.swift */; };
- 2E53A61707C24CB86CE962F1C11EEF87 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C9E40548C22542ADFAAA72531A6E114 /* Security.framework */; };
- 345FFA76C3DBC9F7479FB2916BAEEF6C /* AssetType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B35FCF51E4BB2C0F6EE3CC3774C74379 /* AssetType.swift */; };
- 4A1EB33B700D5C7EF8F158682D5D7507 /* LinkedList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6262A51B0CEB6EEAD1EB1937EC6339E8 /* LinkedList.swift */; };
- 4B8C3F2FA4198FF2B75BC5051239828F /* ImageProcessors+Resize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C1EA7E081150138CDC5CDCB612578B0 /* ImageProcessors+Resize.swift */; };
- 4D69A01CA3C2347F8E5AB7A35C5FA3E9 /* DataLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77E6C28E32BA96B1552C923EBBE8B788 /* DataLoader.swift */; };
- 4E53CFC2BBA386B1EEDCB43A332AA93F /* Pods-AltStore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 455A33F3E94A4F92A995C497198894FC /* Pods-AltStore-dummy.m */; };
- 5097E719EBE656F8029A973049EE74E2 /* ImagePipelineDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 115FAC5247F31B33A099C53D3F0D4C75 /* ImagePipelineDelegate.swift */; };
- 5211B156C91D544BEB6B489A38E9CACC /* ImageProcessors+CoreImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C24A90C52E00ACFBD569D511677E0A /* ImageProcessors+CoreImage.swift */; };
- 5475063D51371DDEC3BEC84B4F909625 /* ImageEncoders+Default.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA03C0181C39DE365649BD4EEEC9E24B /* ImageEncoders+Default.swift */; };
- 59261981ACC065EE0939532B0F03D6A7 /* Allocations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B4F016682F90314E9C48B55AA43462F /* Allocations.swift */; };
- 610A713AE07C69A32DAF3469A9C22E56 /* OperationTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39918419D809BF27CDB6DF93220C4DB9 /* OperationTask.swift */; };
- 64508C96F11FE4F026C8CDA1353C8578 /* ImageDecompression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30442094572BDA121099416102908EFD /* ImageDecompression.swift */; };
- 65B5A64F496A9E1114CEFCE6D0538EA4 /* STPrivilegedTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE3AEECCEA5834DD3730602308ED017 /* STPrivilegedTask.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
- 69F0F5729F1FEF857CD35D91DE95777C /* TaskFetchOriginalImageData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9201ABBB03BD14C1DC31BD178D77D696 /* TaskFetchOriginalImageData.swift */; };
- 6D79581387296B702329C158FEE56CED /* ImageProcessors+RoundedCorners.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A8BF73AF80ECEF6C15C7C1CE7A0CD74 /* ImageProcessors+RoundedCorners.swift */; };
- 72129F0AD778C01CBA7E489935E9792E /* ImageDecoderRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3155D1BDF6B633FD73CDDD93596C7EEA /* ImageDecoderRegistry.swift */; };
- 77271721D4C157C6013B20E2607CED2B /* ImageEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9715346FB270F625BBEC0510DE2817D6 /* ImageEncoding.swift */; };
- 78A752DFE0300389E3A489C9AD442F83 /* TaskLoadImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDCAF3CD287C44D81286B441180501F3 /* TaskLoadImage.swift */; };
- 7988291F7523D2315E2D407B48FD01C7 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3906AF619183CDA65EAF7D54DF0EA3DB /* Cocoa.framework */; };
- 7B889C4EBFF71866133B0D4C9224C472 /* ImagePipelineTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE7BFFFA6709FB406D42CCFF26222A9E /* ImagePipelineTask.swift */; };
- 7C45C69F16BBBF8D6FD3927988D541EA /* ImageProcessingOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D73183C9F8A64A80F47B7D2454DF572 /* ImageProcessingOptions.swift */; };
- 7D956402F8F916B5E747392941C0043F /* ImageCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 048927222A9751ACD60635C3458BCDB9 /* ImageCache.swift */; };
- 89A0AD3548ADC0D4B22D0AA0F1412115 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3906AF619183CDA65EAF7D54DF0EA3DB /* Cocoa.framework */; };
- 8AB6E6E48A165BE1F325DD596FA92DD5 /* Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = F47D85BD38F92BB3036BC1B79271A644 /* Deprecated.swift */; };
- 8FEF8E98D6371CAEF2DD61B055F34704 /* ImagePipelineCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA1998550532A68DA9E2240EEDD27FD1 /* ImagePipelineCache.swift */; };
- 90857AB9533B7E301E7069A85DD7C638 /* ImageDecoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AE9DE057B09C26BC9801DEC710F7764 /* ImageDecoding.swift */; };
- 90D9CDB0809B217EF1558C26AF27F735 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBFD93821136F2BC3124CEC705D7A3AD /* Extensions.swift */; };
- 91B587FC3EFC5193FB3D0383786F4F71 /* TaskLoadData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7525E883AD6530939682FB6589E08D21 /* TaskLoadData.swift */; };
- 926F6C85A084E18CACC94AB9BF677C80 /* ImagePrefetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C54FD77428A47ABB665EC0A9DDC2C38 /* ImagePrefetcher.swift */; };
- 92A4E8B8C42232B424FBF77B1D969AA9 /* DataLoading.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4884E8F8FE2AFC3605CDD86DA581AE9 /* DataLoading.swift */; };
- 94124DD76145BAD633765ED3AAD7D5BB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F59C7DFDE264782C5E1282C1070FA2 /* Foundation.framework */; };
- 9B2C54D6D50DDA4A3496ABF1EC93FFFD /* ImageResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = F21D9525F17ED6E50EAE0FC5BAAB1518 /* ImageResponse.swift */; };
- 9D331DE50CCECA629E2F2847514B83C9 /* AsyncTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0503ACC607D7488F913EC7AE98211640 /* AsyncTask.swift */; };
- A8DA98DF2428321EB2820FEB7B36F84D /* Graphics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9243AC87AF4A443622097DE7AA65AA45 /* Graphics.swift */; };
- B010BACAE4A38E4E20001DA83D69B5EE /* ImageRequestKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = F133CB309C99920D51A8EBE9E33B9B9C /* ImageRequestKeys.swift */; };
- B380F8CFD3259B38FDB593D6D78D07C1 /* ImageDecoders+Video.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74BDC92883EB0DAE280260414782B989 /* ImageDecoders+Video.swift */; };
- B45C56C1A580A6CDD70F7068E20ED974 /* ResumableData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C58BCD14BCD5B9B6FBE061469DA8FEAB /* ResumableData.swift */; };
- B4C865347925FC687B7C09EFDAEEF774 /* Pods-AltServer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F7233C2E8F7C88DDDECEDD2BA0619AAD /* Pods-AltServer-dummy.m */; };
- B5CA4A471CE85699DAA8CC380B906861 /* AVDataAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0627639A73B68BD04190F8324E13966C /* AVDataAsset.swift */; };
- B804234256B52BE13E28F370B7DF47D6 /* ImagePublisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F2608AC3C977F37B91BAE4D0B5A75DE /* ImagePublisher.swift */; };
- BB823D4E1ADAD08D80148FDE8ADD1245 /* ImageViewExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8519310519DC7E4D03A95CDA3E192E30 /* ImageViewExtensions.swift */; };
- BD9B2E8C25A6E23828C2F86BF17E9C86 /* ImageTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CC160528DD53716C2C33D968DBD7F34 /* ImageTask.swift */; };
- BE4B2869B2F7F0E4B13C5DF61E605732 /* ImageCaching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AC88A5D6467CAA618024A19F714049F /* ImageCaching.swift */; };
- C046C4A790435059164887133AF4A5D2 /* ImageProcessing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4690CC66D7AA5E831EC6343F6D3DCC64 /* ImageProcessing.swift */; };
- C25934E55D6776A3B7C4ABB955A51C9F /* DataCaching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B5013FD7FE74BFD24E69768DDBEC709 /* DataCaching.swift */; };
- C2E512D4C7667977455DE6B2CC30B9EB /* Pods-AltStore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E34D86C3C3C13DC3691B25EF529D497B /* Pods-AltStore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- C4D87F0E6EEFB2E01D8A2544EF217BA7 /* ImageEncoders.swift in Sources */ = {isa = PBXBuildFile; fileRef = E748C9B1FDDBBDBDC35E10C2E274B133 /* ImageEncoders.swift */; };
- C535CE9BCA6F7D5E40C4A05CC82BAE02 /* TaskFetchDecodedImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6625BBB166387D983A44A9EAD30F5C2 /* TaskFetchDecodedImage.swift */; };
- C6B6590256A945EC6BDA9194161AF24E /* Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FC7DEE90AF3FF10A115E704CBF8B44A /* Combine.swift */; };
- C8031E7C88CC7C985F1B87201A74BE58 /* ImageProcessors+Circle.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6B8B99121CA82CEF6FBCAB7F388FD51 /* ImageProcessors+Circle.swift */; };
- CC3093550AAF1771F9754576E66588F3 /* ImageProcessors+Composition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1696B701CDF0166199A3E2153D338932 /* ImageProcessors+Composition.swift */; };
- CE5C326BD3A4B7A05D18DC9BB42E2E70 /* STPrivilegedTask-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB8421BC1450DB71E8F86028A650637 /* STPrivilegedTask-dummy.m */; };
- CF8637AD4EC69F469C1B65753DA6D023 /* RateLimiter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC871C4024FA5FAD5803729330D116FE /* RateLimiter.swift */; };
- E03FE88A1AF1AC4E22236E57E46EFCFB /* ImageDecoders+Empty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F001DE8F02424FC90CC0B519A461E80 /* ImageDecoders+Empty.swift */; };
- E7B6F44E85F16C74CE9010E4D4B53A2C /* ImageProcessors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 001DBA42E1CDAB8A4953E7027411E452 /* ImageProcessors.swift */; };
- EF662217257FA52C063BB15A6A0FA60F /* STPrivilegedTask-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 51D192C291759D282CBAB209E5EA2F0B /* STPrivilegedTask-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- EFDCDC6C85A1A251B764C3485FC5A27D /* ImageEncoders+ImageIO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 904C6D7680B4FB44E86600D9C856B7F1 /* ImageEncoders+ImageIO.swift */; };
- F0EC1A0504C1310654C9AFC316FA6A24 /* ImageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0584F534F55770C4B1932AE5A60A889 /* ImageRequest.swift */; };
- F155D0A2C3D2E7966375C0CA7924F21F /* STPrivilegedTask.h in Headers */ = {isa = PBXBuildFile; fileRef = E5733448474B378DB7DD996680703FE3 /* STPrivilegedTask.h */; settings = {ATTRIBUTES = (Public, ); }; };
- F3C8F263CE5BB4450AC7EB68DBB6A6BE /* TaskFetchWithPublisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = E16C3D192CF4A0C96A3C2E106C584EDE /* TaskFetchWithPublisher.swift */; };
- F76E1D382B82B281AE61E4D3CE2F0EBA /* Log.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D736093DA465070BCC76E75D773799 /* Log.swift */; };
- F77C64D1992BD6817CBBB9F609933A6F /* DataCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA7B60C9DD25D5C36E68E26C9594627B /* DataCache.swift */; };
- F7B957857C3A2A4919B5F522E90A505C /* ImagePipelineConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9779DA9C99B63B8BCB45498170322A4 /* ImagePipelineConfiguration.swift */; };
- FD3F6B06FEF412E7ADD06805C8257946 /* Nuke-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 15FA40BB3F915E4FE8B907303C081A24 /* Nuke-dummy.m */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- 4C169C83B74B1267EE838FC61980C9B2 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = ED77B4B88587C894E85C361023D67C53;
- remoteInfo = Sparkle;
- };
- 688A4C62F55E90EAFBA1D13601405131 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 05327B1DB6967DBAA19D1ED734FDBD96;
- remoteInfo = STPrivilegedTask;
- };
- E7BBB9DAF71F3967A3434F5FFE76642A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 062A64896E847A6749F58B6BA9A931B1;
- remoteInfo = Nuke;
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXFileReference section */
- 001DBA42E1CDAB8A4953E7027411E452 /* ImageProcessors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProcessors.swift; path = Sources/Core/Processing/ImageProcessors.swift; sourceTree = ""; };
- 048927222A9751ACD60635C3458BCDB9 /* ImageCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageCache.swift; path = Sources/Core/Caching/ImageCache.swift; sourceTree = ""; };
- 0493408C9193029723414F38318C7812 /* SUUpdater.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUUpdater.h; path = Sparkle.framework/Versions/B/Headers/SUUpdater.h; sourceTree = ""; };
- 0503ACC607D7488F913EC7AE98211640 /* AsyncTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncTask.swift; path = Sources/Core/Tasks/AsyncTask.swift; sourceTree = ""; };
- 05C24A90C52E00ACFBD569D511677E0A /* ImageProcessors+CoreImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageProcessors+CoreImage.swift"; path = "Sources/Core/Processing/ImageProcessors+CoreImage.swift"; sourceTree = ""; };
- 0627639A73B68BD04190F8324E13966C /* AVDataAsset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AVDataAsset.swift; path = Sources/Internal/AVDataAsset.swift; sourceTree = ""; };
- 077A5CB52D1F5B35419AE23CEAB9613A /* ImagePipeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePipeline.swift; path = Sources/Core/ImagePipeline.swift; sourceTree = ""; };
- 07BF7D484D5D3C090D9237BA0CB9FDF1 /* STPrivilegedTask.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = STPrivilegedTask.debug.xcconfig; sourceTree = ""; };
- 0BA5F5B0BFB87D4C783CE37888F48AFD /* SUAppcast.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUAppcast.h; path = Sparkle.framework/Versions/B/Headers/SUAppcast.h; sourceTree = ""; };
- 0F5E17C3698A510DA4CC9A9598B9E1CD /* Pods-AltStore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AltStore-Info.plist"; sourceTree = ""; };
- 0F90DFC3CD03D7D2C936DBE280467FCB /* Sparkle.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Sparkle.release.xcconfig; sourceTree = ""; };
- 115FAC5247F31B33A099C53D3F0D4C75 /* ImagePipelineDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePipelineDelegate.swift; path = Sources/Core/ImagePipelineDelegate.swift; sourceTree = ""; };
- 14B9CA39D5605E1146D994F22ABB0DB2 /* Nuke-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nuke-umbrella.h"; sourceTree = ""; };
- 15A626DBAE45050D4613BF5E30BC5990 /* ImageDecoders+Default.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageDecoders+Default.swift"; path = "Sources/Core/Decoding/ImageDecoders+Default.swift"; sourceTree = ""; };
- 15FA40BB3F915E4FE8B907303C081A24 /* Nuke-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Nuke-dummy.m"; sourceTree = ""; };
- 1696B701CDF0166199A3E2153D338932 /* ImageProcessors+Composition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageProcessors+Composition.swift"; path = "Sources/Core/Processing/ImageProcessors+Composition.swift"; sourceTree = ""; };
- 170520634F35D063DFA19C4CB7B4E3AF /* Pods-AltStore-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AltStore-acknowledgements.plist"; sourceTree = ""; };
- 1A8BF73AF80ECEF6C15C7C1CE7A0CD74 /* ImageProcessors+RoundedCorners.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageProcessors+RoundedCorners.swift"; path = "Sources/Core/Processing/ImageProcessors+RoundedCorners.swift"; sourceTree = ""; };
- 1E59991E0A3C0B98CD0DB840B9BDEFC6 /* SPUUpdateCheck.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUUpdateCheck.h; path = Sparkle.framework/Versions/B/Headers/SPUUpdateCheck.h; sourceTree = ""; };
- 1FAFDEE9E6FB25FA2F916FEE6CBC9C5C /* ImageProcessors+Anonymous.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageProcessors+Anonymous.swift"; path = "Sources/Core/Processing/ImageProcessors+Anonymous.swift"; sourceTree = ""; };
- 2734FA7884D09F415B10515FA9D40E1C /* SUStandardVersionComparator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUStandardVersionComparator.h; path = Sparkle.framework/Versions/B/Headers/SUStandardVersionComparator.h; sourceTree = ""; };
- 27CBDE0EA45C22F742B66F96BE6FB739 /* SUVersionDisplayProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUVersionDisplayProtocol.h; path = Sparkle.framework/Versions/B/Headers/SUVersionDisplayProtocol.h; sourceTree = ""; };
- 299C15E0A9DC9FA2D63DD227913CECEA /* Pods-AltStore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-AltStore.modulemap"; sourceTree = ""; };
- 2AE3AEECCEA5834DD3730602308ED017 /* STPrivilegedTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = STPrivilegedTask.m; sourceTree = ""; };
- 2CFEBE8E4FC4A8370DF638999AAFD93F /* Pods-AltServer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AltServer.debug.xcconfig"; sourceTree = ""; };
- 2DAD7D76FC007F48AE48F2FD15BF01BB /* Nuke */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Nuke; path = Nuke.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 2F2608AC3C977F37B91BAE4D0B5A75DE /* ImagePublisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePublisher.swift; path = Sources/Combine/ImagePublisher.swift; sourceTree = ""; };
- 2FA9E52AA5D2A531BA073303FDD7D4B1 /* Pods-AltStore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AltStore.debug.xcconfig"; sourceTree = ""; };
- 30442094572BDA121099416102908EFD /* ImageDecompression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDecompression.swift; path = Sources/Core/Processing/ImageDecompression.swift; sourceTree = ""; };
- 3155D1BDF6B633FD73CDDD93596C7EEA /* ImageDecoderRegistry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDecoderRegistry.swift; path = Sources/Core/Decoding/ImageDecoderRegistry.swift; sourceTree = ""; };
- 3302E68C62CF9BCC30D24F6B7885C31D /* Pods-AltServer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AltServer.release.xcconfig"; sourceTree = ""; };
- 3374B71E5CAD473C609C2D7D1C8D8404 /* SPUDownloadData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUDownloadData.h; path = Sparkle.framework/Versions/B/Headers/SPUDownloadData.h; sourceTree = ""; };
- 38E2911A9CCE3F38FC54DD6AE866CCFF /* Sparkle.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Sparkle.debug.xcconfig; sourceTree = ""; };
- 3906AF619183CDA65EAF7D54DF0EA3DB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.0.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; };
- 39918419D809BF27CDB6DF93220C4DB9 /* OperationTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OperationTask.swift; path = Sources/Core/Tasks/OperationTask.swift; sourceTree = ""; };
- 3DD5DBE355033822E4F0CEA8EE0E769E /* ImageProcessors+GaussianBlur.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageProcessors+GaussianBlur.swift"; path = "Sources/Core/Processing/ImageProcessors+GaussianBlur.swift"; sourceTree = ""; };
- 3E5CD7DD2C02399DEC763A9EC24114DC /* SPUStandardUpdaterController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUStandardUpdaterController.h; path = Sparkle.framework/Versions/B/Headers/SPUStandardUpdaterController.h; sourceTree = ""; };
- 3F857D324015D6A264BA834A081D5D40 /* Pods-AltStore-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-AltStore-frameworks.sh"; sourceTree = ""; };
- 429A2EBD34312877926E241E675800DB /* Pods-AltServer-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-AltServer-acknowledgements.markdown"; sourceTree = ""; };
- 455A33F3E94A4F92A995C497198894FC /* Pods-AltStore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AltStore-dummy.m"; sourceTree = ""; };
- 4690CC66D7AA5E831EC6343F6D3DCC64 /* ImageProcessing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProcessing.swift; path = Sources/Core/Processing/ImageProcessing.swift; sourceTree = ""; };
- 47A5900F6730E9C50872B3781126A12C /* Operation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operation.swift; path = Sources/Internal/Operation.swift; sourceTree = ""; };
- 47E9E447C37FAB50C0BC6D2A4BC1C43C /* SPUUpdater.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUUpdater.h; path = Sparkle.framework/Versions/B/Headers/SPUUpdater.h; sourceTree = ""; };
- 49A1ECB5E49C4BFD46A7E614FB549A57 /* FetchImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FetchImage.swift; path = Sources/UI/FetchImage.swift; sourceTree = ""; };
- 4CFAA8DBDB35B654FC90CEF15A44F19F /* SUAppcastItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUAppcastItem.h; path = Sparkle.framework/Versions/B/Headers/SUAppcastItem.h; sourceTree = ""; };
- 4FC7DEE90AF3FF10A115E704CBF8B44A /* Combine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Combine.swift; path = Sources/Internal/Combine.swift; sourceTree = ""; };
- 51D192C291759D282CBAB209E5EA2F0B /* STPrivilegedTask-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "STPrivilegedTask-umbrella.h"; sourceTree = ""; };
- 5203998D32EBDB210437CD9A55D43033 /* Pods-AltStore-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-AltStore-acknowledgements.markdown"; sourceTree = ""; };
- 555930A25269B6013B5953A44D4278F2 /* Nuke-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Nuke-Info.plist"; sourceTree = ""; };
- 5AE9DE057B09C26BC9801DEC710F7764 /* ImageDecoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDecoding.swift; path = Sources/Core/Decoding/ImageDecoding.swift; sourceTree = ""; };
- 5AF5415006B5365E53F7518348696EA1 /* Pods-AltServer-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AltServer-Info.plist"; sourceTree = ""; };
- 5B4F016682F90314E9C48B55AA43462F /* Allocations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Allocations.swift; path = Sources/Internal/Allocations.swift; sourceTree = ""; };
- 5CB8421BC1450DB71E8F86028A650637 /* STPrivilegedTask-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "STPrivilegedTask-dummy.m"; sourceTree = ""; };
- 5CC160528DD53716C2C33D968DBD7F34 /* ImageTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageTask.swift; path = Sources/Core/ImageTask.swift; sourceTree = ""; };
- 5DCFDEF8FB1C4F3F24A37E119FA46DCC /* Nuke.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Nuke.release.xcconfig; sourceTree = ""; };
- 6262A51B0CEB6EEAD1EB1937EC6339E8 /* LinkedList.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LinkedList.swift; path = Sources/Internal/LinkedList.swift; sourceTree = ""; };
- 65A2DE6402D0AE793EE6B7B93F767DF8 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Sparkle.framework; sourceTree = ""; };
- 676644EB1805E96CE47F7882733262B3 /* Pods-AltStore */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-AltStore"; path = Pods_AltStore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 690600F80116DBC7C67600145D4A498D /* Nuke-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nuke-prefix.pch"; sourceTree = ""; };
- 6B5013FD7FE74BFD24E69768DDBEC709 /* DataCaching.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataCaching.swift; path = Sources/Core/Caching/DataCaching.swift; sourceTree = ""; };
- 6F5E8F591864906F71EF4F4534AB3C4D /* SUUpdatePermissionResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUUpdatePermissionResponse.h; path = Sparkle.framework/Versions/B/Headers/SUUpdatePermissionResponse.h; sourceTree = ""; };
- 6FC794F0B95B5508E927982704BB4322 /* Pods-AltServer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-AltServer.modulemap"; sourceTree = ""; };
- 74B3B3738FC6F629E6556412B3C26F6E /* Nuke.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Nuke.debug.xcconfig; sourceTree = ""; };
- 74BDC92883EB0DAE280260414782B989 /* ImageDecoders+Video.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageDecoders+Video.swift"; path = "Sources/Core/Decoding/ImageDecoders+Video.swift"; sourceTree = ""; };
- 7525E883AD6530939682FB6589E08D21 /* TaskLoadData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaskLoadData.swift; path = Sources/Core/Tasks/TaskLoadData.swift; sourceTree = ""; };
- 77E6C28E32BA96B1552C923EBBE8B788 /* DataLoader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataLoader.swift; path = Sources/Core/Loading/DataLoader.swift; sourceTree = ""; };
- 7AC88A5D6467CAA618024A19F714049F /* ImageCaching.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageCaching.swift; path = Sources/Core/Caching/ImageCaching.swift; sourceTree = ""; };
- 7E3190F30F7BA4843B5FBBF915303049 /* STPrivilegedTask.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = STPrivilegedTask.release.xcconfig; sourceTree = ""; };
- 7EE269686CA3E6D66DED1A3CB90D9DDE /* SPUUpdaterSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUUpdaterSettings.h; path = Sparkle.framework/Versions/B/Headers/SPUUpdaterSettings.h; sourceTree = ""; };
- 84F59C7DFDE264782C5E1282C1070FA2 /* 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; };
- 8502324BF180DD84E35FD6277BD45C2D /* SPUUpdatePermissionRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUUpdatePermissionRequest.h; path = Sparkle.framework/Versions/B/Headers/SPUUpdatePermissionRequest.h; sourceTree = ""; };
- 8519310519DC7E4D03A95CDA3E192E30 /* ImageViewExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageViewExtensions.swift; path = Sources/UI/ImageViewExtensions.swift; sourceTree = ""; };
- 87F568BE66DBCFBD3302E7D976107605 /* SUExport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUExport.h; path = Sparkle.framework/Versions/B/Headers/SUExport.h; sourceTree = ""; };
- 8AD5A34AC95FEF64B48BC1CDCB4B2C73 /* SPUUpdaterDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUUpdaterDelegate.h; path = Sparkle.framework/Versions/B/Headers/SPUUpdaterDelegate.h; sourceTree = ""; };
- 8C1EA7E081150138CDC5CDCB612578B0 /* ImageProcessors+Resize.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageProcessors+Resize.swift"; path = "Sources/Core/Processing/ImageProcessors+Resize.swift"; sourceTree = ""; };
- 8C9E40548C22542ADFAAA72531A6E114 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.0.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; };
- 8D73183C9F8A64A80F47B7D2454DF572 /* ImageProcessingOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProcessingOptions.swift; path = Sources/Core/Processing/ImageProcessingOptions.swift; sourceTree = ""; };
- 8EBF5043034AFB3A6A8F28C373BF0EC0 /* Pods-AltServer */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-AltServer"; path = Pods_AltServer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 8F001DE8F02424FC90CC0B519A461E80 /* ImageDecoders+Empty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageDecoders+Empty.swift"; path = "Sources/Core/Decoding/ImageDecoders+Empty.swift"; sourceTree = ""; };
- 904C6D7680B4FB44E86600D9C856B7F1 /* ImageEncoders+ImageIO.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageEncoders+ImageIO.swift"; path = "Sources/Core/Encoding/ImageEncoders+ImageIO.swift"; sourceTree = ""; };
- 9201ABBB03BD14C1DC31BD178D77D696 /* TaskFetchOriginalImageData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaskFetchOriginalImageData.swift; path = Sources/Core/Tasks/TaskFetchOriginalImageData.swift; sourceTree = ""; };
- 9243AC87AF4A443622097DE7AA65AA45 /* Graphics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Graphics.swift; path = Sources/Internal/Graphics.swift; sourceTree = ""; };
- 92755758B3CAD1C359650CA1E4E47A1C /* SUUpdaterDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUUpdaterDelegate.h; path = Sparkle.framework/Versions/B/Headers/SUUpdaterDelegate.h; sourceTree = ""; };
- 95822BC0157F23AAC7424B8A8F2046D2 /* SPUStandardUserDriverDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUStandardUserDriverDelegate.h; path = Sparkle.framework/Versions/B/Headers/SPUStandardUserDriverDelegate.h; sourceTree = ""; };
- 96E44467A4E769DF17455773A36AA4D8 /* Nuke.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Nuke.modulemap; sourceTree = ""; };
- 9715346FB270F625BBEC0510DE2817D6 /* ImageEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageEncoding.swift; path = Sources/Core/Encoding/ImageEncoding.swift; sourceTree = ""; };
- 98E7C2AD247570C7C9A2E92DEDD3623E /* Pods-AltServer-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AltServer-acknowledgements.plist"; sourceTree = ""; };
- 9A098F5121A77C41F1AC5EA12B8490F8 /* STPrivilegedTask-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "STPrivilegedTask-Info.plist"; sourceTree = ""; };
- 9C54FD77428A47ABB665EC0A9DDC2C38 /* ImagePrefetcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePrefetcher.swift; path = Sources/Core/Prefetching/ImagePrefetcher.swift; sourceTree = ""; };
- 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
- AC871C4024FA5FAD5803729330D116FE /* RateLimiter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RateLimiter.swift; path = Sources/Internal/RateLimiter.swift; sourceTree = ""; };
- AD0AD8743C2E8E2755B450E24C6D43B5 /* SUVersionComparisonProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUVersionComparisonProtocol.h; path = Sparkle.framework/Versions/B/Headers/SUVersionComparisonProtocol.h; sourceTree = ""; };
- B35FCF51E4BB2C0F6EE3CC3774C74379 /* AssetType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssetType.swift; path = Sources/Core/Decoding/AssetType.swift; sourceTree = ""; };
- B6625BBB166387D983A44A9EAD30F5C2 /* TaskFetchDecodedImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaskFetchDecodedImage.swift; path = Sources/Core/Tasks/TaskFetchDecodedImage.swift; sourceTree = ""; };
- BA03C0181C39DE365649BD4EEEC9E24B /* ImageEncoders+Default.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageEncoders+Default.swift"; path = "Sources/Core/Encoding/ImageEncoders+Default.swift"; sourceTree = ""; };
- BDCAF3CD287C44D81286B441180501F3 /* TaskLoadImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaskLoadImage.swift; path = Sources/Core/Tasks/TaskLoadImage.swift; sourceTree = ""; };
- BF66776FB2E54BC51AAB718DC2240E7D /* SPUUserDriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUUserDriver.h; path = Sparkle.framework/Versions/B/Headers/SPUUserDriver.h; sourceTree = ""; };
- C0584F534F55770C4B1932AE5A60A889 /* ImageRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageRequest.swift; path = Sources/Core/ImageRequest.swift; sourceTree = ""; };
- C18EFBEC5A824622A7735FE1EEDCAF5E /* STPrivilegedTask-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "STPrivilegedTask-prefix.pch"; sourceTree = ""; };
- C58BCD14BCD5B9B6FBE061469DA8FEAB /* ResumableData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResumableData.swift; path = Sources/Internal/ResumableData.swift; sourceTree = ""; };
- C854FE6537D66030C0F0CA8D389A7EFE /* SPUUserUpdateState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUUserUpdateState.h; path = Sparkle.framework/Versions/B/Headers/SPUUserUpdateState.h; sourceTree = ""; };
- C9779DA9C99B63B8BCB45498170322A4 /* ImagePipelineConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePipelineConfiguration.swift; path = Sources/Core/ImagePipelineConfiguration.swift; sourceTree = ""; };
- CAA01E36D3B1C978341ADAFE236A63F9 /* Sparkle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Sparkle.h; path = Sparkle.framework/Versions/B/Headers/Sparkle.h; sourceTree = ""; };
- CBFD93821136F2BC3124CEC705D7A3AD /* Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Extensions.swift; path = Sources/Internal/Extensions.swift; sourceTree = ""; };
- CE7BFFFA6709FB406D42CCFF26222A9E /* ImagePipelineTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePipelineTask.swift; path = Sources/Core/Tasks/ImagePipelineTask.swift; sourceTree = ""; };
- D656286D635465965FE44E5A82D40264 /* STPrivilegedTask.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = STPrivilegedTask.modulemap; sourceTree = ""; };
- D7D736093DA465070BCC76E75D773799 /* Log.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Log.swift; path = Sources/Internal/Log.swift; sourceTree = ""; };
- D94974804CB5C504BDB24325333B8C93 /* Pods-AltServer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AltServer-umbrella.h"; sourceTree = ""; };
- D9EBFC45EE2826E15E03E517F2184329 /* Pods-AltStore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AltStore.release.xcconfig"; sourceTree = ""; };
- DA7B60C9DD25D5C36E68E26C9594627B /* DataCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataCache.swift; path = Sources/Core/Caching/DataCache.swift; sourceTree = ""; };
- E16C3D192CF4A0C96A3C2E106C584EDE /* TaskFetchWithPublisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaskFetchWithPublisher.swift; path = Sources/Core/Tasks/TaskFetchWithPublisher.swift; sourceTree = ""; };
- E34D86C3C3C13DC3691B25EF529D497B /* Pods-AltStore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AltStore-umbrella.h"; sourceTree = ""; };
- E5733448474B378DB7DD996680703FE3 /* STPrivilegedTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = STPrivilegedTask.h; sourceTree = ""; };
- E6B8B99121CA82CEF6FBCAB7F388FD51 /* ImageProcessors+Circle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageProcessors+Circle.swift"; path = "Sources/Core/Processing/ImageProcessors+Circle.swift"; sourceTree = ""; };
- E748C9B1FDDBBDBDC35E10C2E274B133 /* ImageEncoders.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageEncoders.swift; path = Sources/Core/Encoding/ImageEncoders.swift; sourceTree = ""; };
- E8B532DBFA4D3A0C230A3AC2BAE61DC0 /* Pods-AltServer-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-AltServer-frameworks.sh"; sourceTree = ""; };
- EA1998550532A68DA9E2240EEDD27FD1 /* ImagePipelineCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePipelineCache.swift; path = Sources/Core/Caching/ImagePipelineCache.swift; sourceTree = ""; };
- EA86DC5AB293ABD83CF112E4074DA108 /* SUErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUErrors.h; path = Sparkle.framework/Versions/B/Headers/SUErrors.h; sourceTree = ""; };
- ECB81C33948E641ABE3B268D296018CC /* STPrivilegedTask */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = STPrivilegedTask; path = STPrivilegedTask.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- F133CB309C99920D51A8EBE9E33B9B9C /* ImageRequestKeys.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageRequestKeys.swift; path = Sources/Internal/ImageRequestKeys.swift; sourceTree = ""; };
- F21D9525F17ED6E50EAE0FC5BAAB1518 /* ImageResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageResponse.swift; path = Sources/Core/ImageResponse.swift; sourceTree = ""; };
- F47D85BD38F92BB3036BC1B79271A644 /* Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deprecated.swift; path = Sources/Internal/Deprecated.swift; sourceTree = ""; };
- F4884E8F8FE2AFC3605CDD86DA581AE9 /* DataLoading.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataLoading.swift; path = Sources/Core/Loading/DataLoading.swift; sourceTree = ""; };
- F7233C2E8F7C88DDDECEDD2BA0619AAD /* Pods-AltServer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AltServer-dummy.m"; sourceTree = ""; };
- F78883DF4C8C0310686F3EB83D16CE39 /* SPUStandardUserDriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUStandardUserDriver.h; path = Sparkle.framework/Versions/B/Headers/SPUStandardUserDriver.h; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 456A82DE4D0D63E1E1037718FFB2FB59 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 89A0AD3548ADC0D4B22D0AA0F1412115 /* Cocoa.framework in Frameworks */,
- 2E53A61707C24CB86CE962F1C11EEF87 /* Security.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 5DBA3657BA0D069489B2D9338CEC245E /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 1859749D184594E6A0D0C62ECC43ECC8 /* Foundation.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 8C4EF355CA1A981A56FCFD1C94AEAEEC /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 94124DD76145BAD633765ED3AAD7D5BB /* Foundation.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- B4003AFCB9F522E788B96A187A008761 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 7988291F7523D2315E2D407B48FD01C7 /* Cocoa.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 133DBD716E97D9E847326C7CC5C5AF66 /* Pods-AltStore */ = {
- isa = PBXGroup;
- children = (
- 299C15E0A9DC9FA2D63DD227913CECEA /* Pods-AltStore.modulemap */,
- 5203998D32EBDB210437CD9A55D43033 /* Pods-AltStore-acknowledgements.markdown */,
- 170520634F35D063DFA19C4CB7B4E3AF /* Pods-AltStore-acknowledgements.plist */,
- 455A33F3E94A4F92A995C497198894FC /* Pods-AltStore-dummy.m */,
- 3F857D324015D6A264BA834A081D5D40 /* Pods-AltStore-frameworks.sh */,
- 0F5E17C3698A510DA4CC9A9598B9E1CD /* Pods-AltStore-Info.plist */,
- E34D86C3C3C13DC3691B25EF529D497B /* Pods-AltStore-umbrella.h */,
- 2FA9E52AA5D2A531BA073303FDD7D4B1 /* Pods-AltStore.debug.xcconfig */,
- D9EBFC45EE2826E15E03E517F2184329 /* Pods-AltStore.release.xcconfig */,
- );
- name = "Pods-AltStore";
- path = "Target Support Files/Pods-AltStore";
- sourceTree = "";
- };
- 2195395A96A2FA342846C8E0C9353C41 /* Support Files */ = {
- isa = PBXGroup;
- children = (
- 38E2911A9CCE3F38FC54DD6AE866CCFF /* Sparkle.debug.xcconfig */,
- 0F90DFC3CD03D7D2C936DBE280467FCB /* Sparkle.release.xcconfig */,
- );
- name = "Support Files";
- path = "../Target Support Files/Sparkle";
- sourceTree = "";
- };
- 288015F968D80FF4393BD756C71DE012 /* Nuke */ = {
- isa = PBXGroup;
- children = (
- 5B4F016682F90314E9C48B55AA43462F /* Allocations.swift */,
- B35FCF51E4BB2C0F6EE3CC3774C74379 /* AssetType.swift */,
- 0503ACC607D7488F913EC7AE98211640 /* AsyncTask.swift */,
- 0627639A73B68BD04190F8324E13966C /* AVDataAsset.swift */,
- 4FC7DEE90AF3FF10A115E704CBF8B44A /* Combine.swift */,
- DA7B60C9DD25D5C36E68E26C9594627B /* DataCache.swift */,
- 6B5013FD7FE74BFD24E69768DDBEC709 /* DataCaching.swift */,
- 77E6C28E32BA96B1552C923EBBE8B788 /* DataLoader.swift */,
- F4884E8F8FE2AFC3605CDD86DA581AE9 /* DataLoading.swift */,
- F47D85BD38F92BB3036BC1B79271A644 /* Deprecated.swift */,
- CBFD93821136F2BC3124CEC705D7A3AD /* Extensions.swift */,
- 49A1ECB5E49C4BFD46A7E614FB549A57 /* FetchImage.swift */,
- 9243AC87AF4A443622097DE7AA65AA45 /* Graphics.swift */,
- 048927222A9751ACD60635C3458BCDB9 /* ImageCache.swift */,
- 7AC88A5D6467CAA618024A19F714049F /* ImageCaching.swift */,
- 3155D1BDF6B633FD73CDDD93596C7EEA /* ImageDecoderRegistry.swift */,
- 15A626DBAE45050D4613BF5E30BC5990 /* ImageDecoders+Default.swift */,
- 8F001DE8F02424FC90CC0B519A461E80 /* ImageDecoders+Empty.swift */,
- 74BDC92883EB0DAE280260414782B989 /* ImageDecoders+Video.swift */,
- 5AE9DE057B09C26BC9801DEC710F7764 /* ImageDecoding.swift */,
- 30442094572BDA121099416102908EFD /* ImageDecompression.swift */,
- E748C9B1FDDBBDBDC35E10C2E274B133 /* ImageEncoders.swift */,
- BA03C0181C39DE365649BD4EEEC9E24B /* ImageEncoders+Default.swift */,
- 904C6D7680B4FB44E86600D9C856B7F1 /* ImageEncoders+ImageIO.swift */,
- 9715346FB270F625BBEC0510DE2817D6 /* ImageEncoding.swift */,
- 077A5CB52D1F5B35419AE23CEAB9613A /* ImagePipeline.swift */,
- EA1998550532A68DA9E2240EEDD27FD1 /* ImagePipelineCache.swift */,
- C9779DA9C99B63B8BCB45498170322A4 /* ImagePipelineConfiguration.swift */,
- 115FAC5247F31B33A099C53D3F0D4C75 /* ImagePipelineDelegate.swift */,
- CE7BFFFA6709FB406D42CCFF26222A9E /* ImagePipelineTask.swift */,
- 9C54FD77428A47ABB665EC0A9DDC2C38 /* ImagePrefetcher.swift */,
- 4690CC66D7AA5E831EC6343F6D3DCC64 /* ImageProcessing.swift */,
- 8D73183C9F8A64A80F47B7D2454DF572 /* ImageProcessingOptions.swift */,
- 001DBA42E1CDAB8A4953E7027411E452 /* ImageProcessors.swift */,
- 1FAFDEE9E6FB25FA2F916FEE6CBC9C5C /* ImageProcessors+Anonymous.swift */,
- E6B8B99121CA82CEF6FBCAB7F388FD51 /* ImageProcessors+Circle.swift */,
- 1696B701CDF0166199A3E2153D338932 /* ImageProcessors+Composition.swift */,
- 05C24A90C52E00ACFBD569D511677E0A /* ImageProcessors+CoreImage.swift */,
- 3DD5DBE355033822E4F0CEA8EE0E769E /* ImageProcessors+GaussianBlur.swift */,
- 8C1EA7E081150138CDC5CDCB612578B0 /* ImageProcessors+Resize.swift */,
- 1A8BF73AF80ECEF6C15C7C1CE7A0CD74 /* ImageProcessors+RoundedCorners.swift */,
- 2F2608AC3C977F37B91BAE4D0B5A75DE /* ImagePublisher.swift */,
- C0584F534F55770C4B1932AE5A60A889 /* ImageRequest.swift */,
- F133CB309C99920D51A8EBE9E33B9B9C /* ImageRequestKeys.swift */,
- F21D9525F17ED6E50EAE0FC5BAAB1518 /* ImageResponse.swift */,
- 5CC160528DD53716C2C33D968DBD7F34 /* ImageTask.swift */,
- 8519310519DC7E4D03A95CDA3E192E30 /* ImageViewExtensions.swift */,
- 6262A51B0CEB6EEAD1EB1937EC6339E8 /* LinkedList.swift */,
- D7D736093DA465070BCC76E75D773799 /* Log.swift */,
- 47A5900F6730E9C50872B3781126A12C /* Operation.swift */,
- 39918419D809BF27CDB6DF93220C4DB9 /* OperationTask.swift */,
- AC871C4024FA5FAD5803729330D116FE /* RateLimiter.swift */,
- C58BCD14BCD5B9B6FBE061469DA8FEAB /* ResumableData.swift */,
- B6625BBB166387D983A44A9EAD30F5C2 /* TaskFetchDecodedImage.swift */,
- 9201ABBB03BD14C1DC31BD178D77D696 /* TaskFetchOriginalImageData.swift */,
- E16C3D192CF4A0C96A3C2E106C584EDE /* TaskFetchWithPublisher.swift */,
- 7525E883AD6530939682FB6589E08D21 /* TaskLoadData.swift */,
- BDCAF3CD287C44D81286B441180501F3 /* TaskLoadImage.swift */,
- A5807A2B3F726B7F52EB8C619BC22D3B /* Support Files */,
- );
- name = Nuke;
- path = Nuke;
- sourceTree = "";
- };
- 35E00307DBDD1D8F30A56FC4AC48FB79 /* Products */ = {
- isa = PBXGroup;
- children = (
- 2DAD7D76FC007F48AE48F2FD15BF01BB /* Nuke */,
- 8EBF5043034AFB3A6A8F28C373BF0EC0 /* Pods-AltServer */,
- 676644EB1805E96CE47F7882733262B3 /* Pods-AltStore */,
- ECB81C33948E641ABE3B268D296018CC /* STPrivilegedTask */,
- );
- name = Products;
- sourceTree = "";
- };
- 3AF07EFAA8E1B15180A1BBDE8A339F10 /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- 65A2DE6402D0AE793EE6B7B93F767DF8 /* Sparkle.framework */,
- );
- name = Frameworks;
- sourceTree = "";
- };
- 87EAE04E134C1B7DB45C196EC6298054 /* iOS */ = {
- isa = PBXGroup;
- children = (
- 84F59C7DFDE264782C5E1282C1070FA2 /* Foundation.framework */,
- );
- name = iOS;
- sourceTree = "";
- };
- 91EBE7786D3158C9960763A47449395C /* Sparkle */ = {
- isa = PBXGroup;
- children = (
- CAA01E36D3B1C978341ADAFE236A63F9 /* Sparkle.h */,
- 3374B71E5CAD473C609C2D7D1C8D8404 /* SPUDownloadData.h */,
- 3E5CD7DD2C02399DEC763A9EC24114DC /* SPUStandardUpdaterController.h */,
- F78883DF4C8C0310686F3EB83D16CE39 /* SPUStandardUserDriver.h */,
- 95822BC0157F23AAC7424B8A8F2046D2 /* SPUStandardUserDriverDelegate.h */,
- 1E59991E0A3C0B98CD0DB840B9BDEFC6 /* SPUUpdateCheck.h */,
- 8502324BF180DD84E35FD6277BD45C2D /* SPUUpdatePermissionRequest.h */,
- 47E9E447C37FAB50C0BC6D2A4BC1C43C /* SPUUpdater.h */,
- 8AD5A34AC95FEF64B48BC1CDCB4B2C73 /* SPUUpdaterDelegate.h */,
- 7EE269686CA3E6D66DED1A3CB90D9DDE /* SPUUpdaterSettings.h */,
- BF66776FB2E54BC51AAB718DC2240E7D /* SPUUserDriver.h */,
- C854FE6537D66030C0F0CA8D389A7EFE /* SPUUserUpdateState.h */,
- 0BA5F5B0BFB87D4C783CE37888F48AFD /* SUAppcast.h */,
- 4CFAA8DBDB35B654FC90CEF15A44F19F /* SUAppcastItem.h */,
- EA86DC5AB293ABD83CF112E4074DA108 /* SUErrors.h */,
- 87F568BE66DBCFBD3302E7D976107605 /* SUExport.h */,
- 2734FA7884D09F415B10515FA9D40E1C /* SUStandardVersionComparator.h */,
- 6F5E8F591864906F71EF4F4534AB3C4D /* SUUpdatePermissionResponse.h */,
- 0493408C9193029723414F38318C7812 /* SUUpdater.h */,
- 92755758B3CAD1C359650CA1E4E47A1C /* SUUpdaterDelegate.h */,
- AD0AD8743C2E8E2755B450E24C6D43B5 /* SUVersionComparisonProtocol.h */,
- 27CBDE0EA45C22F742B66F96BE6FB739 /* SUVersionDisplayProtocol.h */,
- 3AF07EFAA8E1B15180A1BBDE8A339F10 /* Frameworks */,
- 2195395A96A2FA342846C8E0C9353C41 /* Support Files */,
- );
- name = Sparkle;
- path = Sparkle;
- sourceTree = "";
- };
- A5807A2B3F726B7F52EB8C619BC22D3B /* Support Files */ = {
- isa = PBXGroup;
- children = (
- 96E44467A4E769DF17455773A36AA4D8 /* Nuke.modulemap */,
- 15FA40BB3F915E4FE8B907303C081A24 /* Nuke-dummy.m */,
- 555930A25269B6013B5953A44D4278F2 /* Nuke-Info.plist */,
- 690600F80116DBC7C67600145D4A498D /* Nuke-prefix.pch */,
- 14B9CA39D5605E1146D994F22ABB0DB2 /* Nuke-umbrella.h */,
- 74B3B3738FC6F629E6556412B3C26F6E /* Nuke.debug.xcconfig */,
- 5DCFDEF8FB1C4F3F24A37E119FA46DCC /* Nuke.release.xcconfig */,
- );
- name = "Support Files";
- path = "../Target Support Files/Nuke";
- sourceTree = "";
- };
- AE4C5984A5D5612470F4D86DEA4C39FA /* Pods-AltServer */ = {
- isa = PBXGroup;
- children = (
- 6FC794F0B95B5508E927982704BB4322 /* Pods-AltServer.modulemap */,
- 429A2EBD34312877926E241E675800DB /* Pods-AltServer-acknowledgements.markdown */,
- 98E7C2AD247570C7C9A2E92DEDD3623E /* Pods-AltServer-acknowledgements.plist */,
- F7233C2E8F7C88DDDECEDD2BA0619AAD /* Pods-AltServer-dummy.m */,
- E8B532DBFA4D3A0C230A3AC2BAE61DC0 /* Pods-AltServer-frameworks.sh */,
- 5AF5415006B5365E53F7518348696EA1 /* Pods-AltServer-Info.plist */,
- D94974804CB5C504BDB24325333B8C93 /* Pods-AltServer-umbrella.h */,
- 2CFEBE8E4FC4A8370DF638999AAFD93F /* Pods-AltServer.debug.xcconfig */,
- 3302E68C62CF9BCC30D24F6B7885C31D /* Pods-AltServer.release.xcconfig */,
- );
- name = "Pods-AltServer";
- path = "Target Support Files/Pods-AltServer";
- sourceTree = "";
- };
- BEAF173CF7BAF5537488976CEC756DA3 /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- 87EAE04E134C1B7DB45C196EC6298054 /* iOS */,
- CF58262BB8484367209250D04A2EE21B /* OS X */,
- );
- name = Frameworks;
- sourceTree = "";
- };
- CF1408CF629C7361332E53B88F7BD30C = {
- isa = PBXGroup;
- children = (
- 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */,
- BEAF173CF7BAF5537488976CEC756DA3 /* Frameworks */,
- EAE91A4DBD9394DED9091B66AB11EC7F /* Pods */,
- 35E00307DBDD1D8F30A56FC4AC48FB79 /* Products */,
- DB3F905BDA837A2C76ED41F5F49087B7 /* Targets Support Files */,
- );
- sourceTree = "";
- };
- CF58262BB8484367209250D04A2EE21B /* OS X */ = {
- isa = PBXGroup;
- children = (
- 3906AF619183CDA65EAF7D54DF0EA3DB /* Cocoa.framework */,
- 8C9E40548C22542ADFAAA72531A6E114 /* Security.framework */,
- );
- name = "OS X";
- sourceTree = "";
- };
- DB3F905BDA837A2C76ED41F5F49087B7 /* Targets Support Files */ = {
- isa = PBXGroup;
- children = (
- AE4C5984A5D5612470F4D86DEA4C39FA /* Pods-AltServer */,
- 133DBD716E97D9E847326C7CC5C5AF66 /* Pods-AltStore */,
- );
- name = "Targets Support Files";
- sourceTree = "";
- };
- E87CAF0EBFC44AAB84A0592763B5D693 /* Support Files */ = {
- isa = PBXGroup;
- children = (
- D656286D635465965FE44E5A82D40264 /* STPrivilegedTask.modulemap */,
- 5CB8421BC1450DB71E8F86028A650637 /* STPrivilegedTask-dummy.m */,
- 9A098F5121A77C41F1AC5EA12B8490F8 /* STPrivilegedTask-Info.plist */,
- C18EFBEC5A824622A7735FE1EEDCAF5E /* STPrivilegedTask-prefix.pch */,
- 51D192C291759D282CBAB209E5EA2F0B /* STPrivilegedTask-umbrella.h */,
- 07BF7D484D5D3C090D9237BA0CB9FDF1 /* STPrivilegedTask.debug.xcconfig */,
- 7E3190F30F7BA4843B5FBBF915303049 /* STPrivilegedTask.release.xcconfig */,
- );
- name = "Support Files";
- path = "../Target Support Files/STPrivilegedTask";
- sourceTree = "";
- };
- EAE91A4DBD9394DED9091B66AB11EC7F /* Pods */ = {
- isa = PBXGroup;
- children = (
- 288015F968D80FF4393BD756C71DE012 /* Nuke */,
- 91EBE7786D3158C9960763A47449395C /* Sparkle */,
- F662F3A87901628E22E80778B7C2E422 /* STPrivilegedTask */,
- );
- name = Pods;
- sourceTree = "";
- };
- F662F3A87901628E22E80778B7C2E422 /* STPrivilegedTask */ = {
- isa = PBXGroup;
- children = (
- E5733448474B378DB7DD996680703FE3 /* STPrivilegedTask.h */,
- 2AE3AEECCEA5834DD3730602308ED017 /* STPrivilegedTask.m */,
- E87CAF0EBFC44AAB84A0592763B5D693 /* Support Files */,
- );
- name = STPrivilegedTask;
- path = STPrivilegedTask;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
- 188CA570E55AE01B8AD7CE1575B09A18 /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 01A6B167EF9613254D827A8F166A3B92 /* Pods-AltServer-umbrella.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3E19418017111482C59397AA6702A470 /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 135A92BC284C94D0B14100C76C1525A7 /* Nuke-umbrella.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 79DEC2CFBBEB89232066738A4FB189F1 /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- C2E512D4C7667977455DE6B2CC30B9EB /* Pods-AltStore-umbrella.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- C3766E6514BA7C5E5284BED4936AB1ED /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- F155D0A2C3D2E7966375C0CA7924F21F /* STPrivilegedTask.h in Headers */,
- EF662217257FA52C063BB15A6A0FA60F /* STPrivilegedTask-umbrella.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXNativeTarget section */
- 05327B1DB6967DBAA19D1ED734FDBD96 /* STPrivilegedTask */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = C47405FE8D46205AF373C7A6F9B2D4D2 /* Build configuration list for PBXNativeTarget "STPrivilegedTask" */;
- buildPhases = (
- C3766E6514BA7C5E5284BED4936AB1ED /* Headers */,
- BD1B17E0C28987C7C661898490FBF903 /* Sources */,
- 456A82DE4D0D63E1E1037718FFB2FB59 /* Frameworks */,
- 9C8AAED31893BD044B204B4B2C970AAA /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = STPrivilegedTask;
- productName = STPrivilegedTask;
- productReference = ECB81C33948E641ABE3B268D296018CC /* STPrivilegedTask */;
- productType = "com.apple.product-type.framework";
- };
- 062A64896E847A6749F58B6BA9A931B1 /* Nuke */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 0199127CC34CC71E5DAAC28A406BEC18 /* Build configuration list for PBXNativeTarget "Nuke" */;
- buildPhases = (
- 3E19418017111482C59397AA6702A470 /* Headers */,
- 36B4AEEBF70E8262DD0B3DBD6EA5DC21 /* Sources */,
- 5DBA3657BA0D069489B2D9338CEC245E /* Frameworks */,
- CB586C4C4EA97897A192E722C0BA97DA /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = Nuke;
- productName = Nuke;
- productReference = 2DAD7D76FC007F48AE48F2FD15BF01BB /* Nuke */;
- productType = "com.apple.product-type.framework";
- };
- 7083360F3F274C756CA77375F9D2A2BD /* Pods-AltStore */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = E3D92D28215D757E6D13D8E5D9B6BEA1 /* Build configuration list for PBXNativeTarget "Pods-AltStore" */;
- buildPhases = (
- 79DEC2CFBBEB89232066738A4FB189F1 /* Headers */,
- F744A80A6F86566B4C298F473AFC1D48 /* Sources */,
- 8C4EF355CA1A981A56FCFD1C94AEAEEC /* Frameworks */,
- EB79096CBF23A1C235505CD0DA3CC4F9 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- B3A44D9221B1766C44B7AF84F25785FD /* PBXTargetDependency */,
- );
- name = "Pods-AltStore";
- productName = Pods_AltStore;
- productReference = 676644EB1805E96CE47F7882733262B3 /* Pods-AltStore */;
- productType = "com.apple.product-type.framework";
- };
- 89B529DD288896C2EFC49575065F70FB /* Pods-AltServer */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 1922DC49ED081FCA80AEBA4A5D9270AB /* Build configuration list for PBXNativeTarget "Pods-AltServer" */;
- buildPhases = (
- 188CA570E55AE01B8AD7CE1575B09A18 /* Headers */,
- DFCDA7C7A710D3371BD2CDCB8366A4D0 /* Sources */,
- B4003AFCB9F522E788B96A187A008761 /* Frameworks */,
- F0A5D6C0C481C2FC6FCF89D0DDD295FD /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- A87E88A31D9A2BA8F5D2FFD1C14B9420 /* PBXTargetDependency */,
- 939CE288B4970BEF6FB04E76CCD6F50B /* PBXTargetDependency */,
- );
- name = "Pods-AltServer";
- productName = Pods_AltServer;
- productReference = 8EBF5043034AFB3A6A8F28C373BF0EC0 /* Pods-AltServer */;
- productType = "com.apple.product-type.framework";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- BFDFE7DC352907FC980B868725387E98 /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastSwiftUpdateCheck = 1600;
- LastUpgradeCheck = 1600;
- };
- buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */;
- compatibilityVersion = "Xcode 13.0";
- developmentRegion = en;
- hasScannedForEncodings = 0;
- knownRegions = (
- Base,
- en,
- );
- mainGroup = CF1408CF629C7361332E53B88F7BD30C;
- minimizedProjectReferenceProxies = 0;
- preferredProjectObjectVersion = 77;
- productRefGroup = 35E00307DBDD1D8F30A56FC4AC48FB79 /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 062A64896E847A6749F58B6BA9A931B1 /* Nuke */,
- 89B529DD288896C2EFC49575065F70FB /* Pods-AltServer */,
- 7083360F3F274C756CA77375F9D2A2BD /* Pods-AltStore */,
- ED77B4B88587C894E85C361023D67C53 /* Sparkle */,
- 05327B1DB6967DBAA19D1ED734FDBD96 /* STPrivilegedTask */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- 9C8AAED31893BD044B204B4B2C970AAA /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- CB586C4C4EA97897A192E722C0BA97DA /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- EB79096CBF23A1C235505CD0DA3CC4F9 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- F0A5D6C0C481C2FC6FCF89D0DDD295FD /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 36B4AEEBF70E8262DD0B3DBD6EA5DC21 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 59261981ACC065EE0939532B0F03D6A7 /* Allocations.swift in Sources */,
- 345FFA76C3DBC9F7479FB2916BAEEF6C /* AssetType.swift in Sources */,
- 9D331DE50CCECA629E2F2847514B83C9 /* AsyncTask.swift in Sources */,
- B5CA4A471CE85699DAA8CC380B906861 /* AVDataAsset.swift in Sources */,
- C6B6590256A945EC6BDA9194161AF24E /* Combine.swift in Sources */,
- F77C64D1992BD6817CBBB9F609933A6F /* DataCache.swift in Sources */,
- C25934E55D6776A3B7C4ABB955A51C9F /* DataCaching.swift in Sources */,
- 4D69A01CA3C2347F8E5AB7A35C5FA3E9 /* DataLoader.swift in Sources */,
- 92A4E8B8C42232B424FBF77B1D969AA9 /* DataLoading.swift in Sources */,
- 8AB6E6E48A165BE1F325DD596FA92DD5 /* Deprecated.swift in Sources */,
- 90D9CDB0809B217EF1558C26AF27F735 /* Extensions.swift in Sources */,
- 22403265D88CA4D322BFEE168DAE6083 /* FetchImage.swift in Sources */,
- A8DA98DF2428321EB2820FEB7B36F84D /* Graphics.swift in Sources */,
- 7D956402F8F916B5E747392941C0043F /* ImageCache.swift in Sources */,
- BE4B2869B2F7F0E4B13C5DF61E605732 /* ImageCaching.swift in Sources */,
- 72129F0AD778C01CBA7E489935E9792E /* ImageDecoderRegistry.swift in Sources */,
- 1E669692D6688C6C6A9286FDD7673FEE /* ImageDecoders+Default.swift in Sources */,
- E03FE88A1AF1AC4E22236E57E46EFCFB /* ImageDecoders+Empty.swift in Sources */,
- B380F8CFD3259B38FDB593D6D78D07C1 /* ImageDecoders+Video.swift in Sources */,
- 90857AB9533B7E301E7069A85DD7C638 /* ImageDecoding.swift in Sources */,
- 64508C96F11FE4F026C8CDA1353C8578 /* ImageDecompression.swift in Sources */,
- C4D87F0E6EEFB2E01D8A2544EF217BA7 /* ImageEncoders.swift in Sources */,
- 5475063D51371DDEC3BEC84B4F909625 /* ImageEncoders+Default.swift in Sources */,
- EFDCDC6C85A1A251B764C3485FC5A27D /* ImageEncoders+ImageIO.swift in Sources */,
- 77271721D4C157C6013B20E2607CED2B /* ImageEncoding.swift in Sources */,
- 1F359ADC8D26588C41E48E3099AB234D /* ImagePipeline.swift in Sources */,
- 8FEF8E98D6371CAEF2DD61B055F34704 /* ImagePipelineCache.swift in Sources */,
- F7B957857C3A2A4919B5F522E90A505C /* ImagePipelineConfiguration.swift in Sources */,
- 5097E719EBE656F8029A973049EE74E2 /* ImagePipelineDelegate.swift in Sources */,
- 7B889C4EBFF71866133B0D4C9224C472 /* ImagePipelineTask.swift in Sources */,
- 926F6C85A084E18CACC94AB9BF677C80 /* ImagePrefetcher.swift in Sources */,
- C046C4A790435059164887133AF4A5D2 /* ImageProcessing.swift in Sources */,
- 7C45C69F16BBBF8D6FD3927988D541EA /* ImageProcessingOptions.swift in Sources */,
- E7B6F44E85F16C74CE9010E4D4B53A2C /* ImageProcessors.swift in Sources */,
- 26A2A90C8F25CB390ED972DD55779F86 /* ImageProcessors+Anonymous.swift in Sources */,
- C8031E7C88CC7C985F1B87201A74BE58 /* ImageProcessors+Circle.swift in Sources */,
- CC3093550AAF1771F9754576E66588F3 /* ImageProcessors+Composition.swift in Sources */,
- 5211B156C91D544BEB6B489A38E9CACC /* ImageProcessors+CoreImage.swift in Sources */,
- 292CD657DCB176D05E64CA4E58E46500 /* ImageProcessors+GaussianBlur.swift in Sources */,
- 4B8C3F2FA4198FF2B75BC5051239828F /* ImageProcessors+Resize.swift in Sources */,
- 6D79581387296B702329C158FEE56CED /* ImageProcessors+RoundedCorners.swift in Sources */,
- B804234256B52BE13E28F370B7DF47D6 /* ImagePublisher.swift in Sources */,
- F0EC1A0504C1310654C9AFC316FA6A24 /* ImageRequest.swift in Sources */,
- B010BACAE4A38E4E20001DA83D69B5EE /* ImageRequestKeys.swift in Sources */,
- 9B2C54D6D50DDA4A3496ABF1EC93FFFD /* ImageResponse.swift in Sources */,
- BD9B2E8C25A6E23828C2F86BF17E9C86 /* ImageTask.swift in Sources */,
- BB823D4E1ADAD08D80148FDE8ADD1245 /* ImageViewExtensions.swift in Sources */,
- 4A1EB33B700D5C7EF8F158682D5D7507 /* LinkedList.swift in Sources */,
- F76E1D382B82B281AE61E4D3CE2F0EBA /* Log.swift in Sources */,
- FD3F6B06FEF412E7ADD06805C8257946 /* Nuke-dummy.m in Sources */,
- 0F9C7CD03E191996E9ECAB298736E293 /* Operation.swift in Sources */,
- 610A713AE07C69A32DAF3469A9C22E56 /* OperationTask.swift in Sources */,
- CF8637AD4EC69F469C1B65753DA6D023 /* RateLimiter.swift in Sources */,
- B45C56C1A580A6CDD70F7068E20ED974 /* ResumableData.swift in Sources */,
- C535CE9BCA6F7D5E40C4A05CC82BAE02 /* TaskFetchDecodedImage.swift in Sources */,
- 69F0F5729F1FEF857CD35D91DE95777C /* TaskFetchOriginalImageData.swift in Sources */,
- F3C8F263CE5BB4450AC7EB68DBB6A6BE /* TaskFetchWithPublisher.swift in Sources */,
- 91B587FC3EFC5193FB3D0383786F4F71 /* TaskLoadData.swift in Sources */,
- 78A752DFE0300389E3A489C9AD442F83 /* TaskLoadImage.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- BD1B17E0C28987C7C661898490FBF903 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 65B5A64F496A9E1114CEFCE6D0538EA4 /* STPrivilegedTask.m in Sources */,
- CE5C326BD3A4B7A05D18DC9BB42E2E70 /* STPrivilegedTask-dummy.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- DFCDA7C7A710D3371BD2CDCB8366A4D0 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- B4C865347925FC687B7C09EFDAEEF774 /* Pods-AltServer-dummy.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- F744A80A6F86566B4C298F473AFC1D48 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4E53CFC2BBA386B1EEDCB43A332AA93F /* Pods-AltStore-dummy.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
- 939CE288B4970BEF6FB04E76CCD6F50B /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- name = Sparkle;
- target = ED77B4B88587C894E85C361023D67C53 /* Sparkle */;
- targetProxy = 4C169C83B74B1267EE838FC61980C9B2 /* PBXContainerItemProxy */;
- };
- A87E88A31D9A2BA8F5D2FFD1C14B9420 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- name = STPrivilegedTask;
- target = 05327B1DB6967DBAA19D1ED734FDBD96 /* STPrivilegedTask */;
- targetProxy = 688A4C62F55E90EAFBA1D13601405131 /* PBXContainerItemProxy */;
- };
- B3A44D9221B1766C44B7AF84F25785FD /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- name = Nuke;
- target = 062A64896E847A6749F58B6BA9A931B1 /* Nuke */;
- targetProxy = E7BBB9DAF71F3967A3434F5FFE76642A /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
-/* Begin XCBuildConfiguration section */
- 0EE50850B82F2BA15B832A79A246F34E /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 74B3B3738FC6F629E6556412B3C26F6E /* Nuke.debug.xcconfig */;
- buildSettings = {
- 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/Nuke/Nuke-prefix.pch";
- GENERATE_INFOPLIST_FILE = NO;
- INFOPLIST_FILE = "Target Support Files/Nuke/Nuke-Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- MACOSX_DEPLOYMENT_TARGET = 11.0;
- MODULEMAP_FILE = "Target Support Files/Nuke/Nuke.modulemap";
- PRODUCT_MODULE_NAME = Nuke;
- PRODUCT_NAME = Nuke;
- SDKROOT = iphoneos;
- SKIP_INSTALL = YES;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
- SWIFT_INSTALL_OBJC_HEADER = YES;
- SWIFT_VERSION = 5.5;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Debug;
- };
- 2E68A1CAC2B58C150E0A38AD63E10F2A /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 5DCFDEF8FB1C4F3F24A37E119FA46DCC /* Nuke.release.xcconfig */;
- buildSettings = {
- 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/Nuke/Nuke-prefix.pch";
- GENERATE_INFOPLIST_FILE = NO;
- INFOPLIST_FILE = "Target Support Files/Nuke/Nuke-Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- MACOSX_DEPLOYMENT_TARGET = 11.0;
- MODULEMAP_FILE = "Target Support Files/Nuke/Nuke.modulemap";
- PRODUCT_MODULE_NAME = Nuke;
- PRODUCT_NAME = Nuke;
- 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;
- };
- 325C034DFEAA05BF7CA8253BB431229E /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 0F90DFC3CD03D7D2C936DBE280467FCB /* Sparkle.release.xcconfig */;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD_64_BIT)";
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
- CLANG_ENABLE_OBJC_WEAK = NO;
- COMBINE_HIDPI_IMAGES = YES;
- ENABLE_USER_SCRIPT_SANDBOXING = NO;
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/../Frameworks",
- );
- MACOSX_DEPLOYMENT_TARGET = 11.0;
- SDKROOT = macosx;
- };
- name = Release;
- };
- 3E7B804148F5A93E48474D8EBFA073A6 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 07BF7D484D5D3C090D9237BA0CB9FDF1 /* STPrivilegedTask.debug.xcconfig */;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD_64_BIT)";
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
- COMBINE_HIDPI_IMAGES = YES;
- 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/STPrivilegedTask/STPrivilegedTask-prefix.pch";
- GENERATE_INFOPLIST_FILE = NO;
- INFOPLIST_FILE = "Target Support Files/STPrivilegedTask/STPrivilegedTask-Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/../Frameworks",
- "@loader_path/Frameworks",
- );
- MACOSX_DEPLOYMENT_TARGET = 11.0;
- MODULEMAP_FILE = "Target Support Files/STPrivilegedTask/STPrivilegedTask.modulemap";
- PRODUCT_MODULE_NAME = STPrivilegedTask;
- PRODUCT_NAME = STPrivilegedTask;
- SDKROOT = macosx;
- SKIP_INSTALL = YES;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
- SWIFT_INSTALL_OBJC_HEADER = YES;
- SWIFT_VERSION = 5.0;
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Debug;
- };
- 3FD2A8D8022264A60B8325F2DDE08AF0 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_ENABLE_OBJC_WEAK = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = dwarf;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "POD_CONFIGURATION_DEBUG=1",
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- MACOSX_DEPLOYMENT_TARGET = 11;
- MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
- MTL_FAST_MATH = YES;
- ONLY_ACTIVE_ARCH = YES;
- PRODUCT_NAME = "$(TARGET_NAME)";
- STRIP_INSTALLED_PRODUCT = NO;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 5.0;
- SYMROOT = "${SRCROOT}/../build";
- };
- name = Debug;
- };
- 8AD9C17B57BD4A12889292805D2FC541 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 2CFEBE8E4FC4A8370DF638999AAFD93F /* Pods-AltServer.debug.xcconfig */;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
- ARCHS = "$(ARCHS_STANDARD_64_BIT)";
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
- COMBINE_HIDPI_IMAGES = YES;
- 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;
- INFOPLIST_FILE = "Target Support Files/Pods-AltServer/Pods-AltServer-Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/../Frameworks",
- "@loader_path/Frameworks",
- );
- MACH_O_TYPE = staticlib;
- MACOSX_DEPLOYMENT_TARGET = 11.0;
- MODULEMAP_FILE = "Target Support Files/Pods-AltServer/Pods-AltServer.modulemap";
- OTHER_LDFLAGS = "";
- OTHER_LIBTOOLFLAGS = "";
- PODS_ROOT = "$(SRCROOT)";
- PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
- PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
- SDKROOT = macosx;
- SKIP_INSTALL = YES;
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Debug;
- };
- 9CCE531BE58ACF0CC51FFC3EAD2C3D58 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 7E3190F30F7BA4843B5FBBF915303049 /* STPrivilegedTask.release.xcconfig */;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD_64_BIT)";
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
- COMBINE_HIDPI_IMAGES = YES;
- 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/STPrivilegedTask/STPrivilegedTask-prefix.pch";
- GENERATE_INFOPLIST_FILE = NO;
- INFOPLIST_FILE = "Target Support Files/STPrivilegedTask/STPrivilegedTask-Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/../Frameworks",
- "@loader_path/Frameworks",
- );
- MACOSX_DEPLOYMENT_TARGET = 11.0;
- MODULEMAP_FILE = "Target Support Files/STPrivilegedTask/STPrivilegedTask.modulemap";
- PRODUCT_MODULE_NAME = STPrivilegedTask;
- PRODUCT_NAME = STPrivilegedTask;
- SDKROOT = macosx;
- SKIP_INSTALL = YES;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
- SWIFT_INSTALL_OBJC_HEADER = YES;
- SWIFT_VERSION = 5.0;
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Release;
- };
- A72BC2EB21B073E4F3814CEBA825B6BB /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3302E68C62CF9BCC30D24F6B7885C31D /* Pods-AltServer.release.xcconfig */;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
- ARCHS = "$(ARCHS_STANDARD_64_BIT)";
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
- COMBINE_HIDPI_IMAGES = YES;
- 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;
- INFOPLIST_FILE = "Target Support Files/Pods-AltServer/Pods-AltServer-Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/../Frameworks",
- "@loader_path/Frameworks",
- );
- MACH_O_TYPE = staticlib;
- MACOSX_DEPLOYMENT_TARGET = 11.0;
- MODULEMAP_FILE = "Target Support Files/Pods-AltServer/Pods-AltServer.modulemap";
- OTHER_LDFLAGS = "";
- OTHER_LIBTOOLFLAGS = "";
- PODS_ROOT = "$(SRCROOT)";
- PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
- PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
- SDKROOT = macosx;
- SKIP_INSTALL = YES;
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Release;
- };
- BC0705CA9DCEB294F3F562DEF9A4F84D /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 38E2911A9CCE3F38FC54DD6AE866CCFF /* Sparkle.debug.xcconfig */;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD_64_BIT)";
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
- CLANG_ENABLE_OBJC_WEAK = NO;
- COMBINE_HIDPI_IMAGES = YES;
- ENABLE_USER_SCRIPT_SANDBOXING = NO;
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/../Frameworks",
- );
- MACOSX_DEPLOYMENT_TARGET = 11.0;
- SDKROOT = macosx;
- };
- name = Debug;
- };
- C46CABA9197260A7936CEF588DB225CD /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_ENABLE_OBJC_WEAK = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "POD_CONFIGURATION_RELEASE=1",
- "$(inherited)",
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- MACOSX_DEPLOYMENT_TARGET = 11;
- MTL_ENABLE_DEBUG_INFO = NO;
- MTL_FAST_MATH = YES;
- PRODUCT_NAME = "$(TARGET_NAME)";
- STRIP_INSTALLED_PRODUCT = NO;
- SWIFT_COMPILATION_MODE = wholemodule;
- SWIFT_OPTIMIZATION_LEVEL = "-O";
- SWIFT_VERSION = 5.0;
- SYMROOT = "${SRCROOT}/../build";
- };
- name = Release;
- };
- E09171BC3962DEAC1587D5486833D398 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = D9EBFC45EE2826E15E03E517F2184329 /* Pods-AltStore.release.xcconfig */;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
- 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;
- INFOPLIST_FILE = "Target Support Files/Pods-AltStore/Pods-AltStore-Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- MACH_O_TYPE = staticlib;
- MACOSX_DEPLOYMENT_TARGET = 11.0;
- MODULEMAP_FILE = "Target Support Files/Pods-AltStore/Pods-AltStore.modulemap";
- OTHER_LDFLAGS = "";
- OTHER_LIBTOOLFLAGS = "";
- PODS_ROOT = "$(SRCROOT)";
- PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
- PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
- SDKROOT = iphoneos;
- SKIP_INSTALL = YES;
- TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Release;
- };
- FD2C68AC413600F17CB273066F4900FD /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 2FA9E52AA5D2A531BA073303FDD7D4B1 /* Pods-AltStore.debug.xcconfig */;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
- 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;
- INFOPLIST_FILE = "Target Support Files/Pods-AltStore/Pods-AltStore-Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- MACH_O_TYPE = staticlib;
- MACOSX_DEPLOYMENT_TARGET = 11.0;
- MODULEMAP_FILE = "Target Support Files/Pods-AltStore/Pods-AltStore.modulemap";
- OTHER_LDFLAGS = "";
- OTHER_LIBTOOLFLAGS = "";
- PODS_ROOT = "$(SRCROOT)";
- PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
- PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
- SDKROOT = iphoneos;
- SKIP_INSTALL = YES;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Debug;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 0199127CC34CC71E5DAAC28A406BEC18 /* Build configuration list for PBXNativeTarget "Nuke" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 0EE50850B82F2BA15B832A79A246F34E /* Debug */,
- 2E68A1CAC2B58C150E0A38AD63E10F2A /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 1922DC49ED081FCA80AEBA4A5D9270AB /* Build configuration list for PBXNativeTarget "Pods-AltServer" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 8AD9C17B57BD4A12889292805D2FC541 /* Debug */,
- A72BC2EB21B073E4F3814CEBA825B6BB /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 2C8D06A2289713323892B3638F08AC0B /* Build configuration list for PBXAggregateTarget "Sparkle" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- BC0705CA9DCEB294F3F562DEF9A4F84D /* Debug */,
- 325C034DFEAA05BF7CA8253BB431229E /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3FD2A8D8022264A60B8325F2DDE08AF0 /* Debug */,
- C46CABA9197260A7936CEF588DB225CD /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- C47405FE8D46205AF373C7A6F9B2D4D2 /* Build configuration list for PBXNativeTarget "STPrivilegedTask" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3E7B804148F5A93E48474D8EBFA073A6 /* Debug */,
- 9CCE531BE58ACF0CC51FFC3EAD2C3D58 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- E3D92D28215D757E6D13D8E5D9B6BEA1 /* Build configuration list for PBXNativeTarget "Pods-AltStore" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- FD2C68AC413600F17CB273066F4900FD /* Debug */,
- E09171BC3962DEAC1587D5486833D398 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-}
diff --git a/Pods/Pods.xcodeproj/xcshareddata/xcschemes/AltSign.xcscheme b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/AltSign.xcscheme
deleted file mode 100644
index 3073e2a4b..000000000
--- a/Pods/Pods.xcodeproj/xcshareddata/xcschemes/AltSign.xcscheme
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-AltStore.xcscheme b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-AltStore.xcscheme
deleted file mode 100644
index 0ab4ad846..000000000
--- a/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-AltStore.xcscheme
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Pods/STPrivilegedTask/LICENSE b/Pods/STPrivilegedTask/LICENSE
deleted file mode 100644
index 73102b80f..000000000
--- a/Pods/STPrivilegedTask/LICENSE
+++ /dev/null
@@ -1,29 +0,0 @@
-BSD 3-Clause License
-
-Copyright (c) 2008-2021, Sveinbjorn Thordarson
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
-* Neither the name of the copyright holder nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Pods/STPrivilegedTask/README.md b/Pods/STPrivilegedTask/README.md
deleted file mode 100644
index b6c08ae31..000000000
--- a/Pods/STPrivilegedTask/README.md
+++ /dev/null
@@ -1,202 +0,0 @@
-# STPrivilegedTask - Objective-C class
-
-An NSTask-like wrapper class around [AuthorizationExecuteWithPrivileges()](https://developer.apple.com/library/mac/documentation/Security/Reference/authorization_ref/#//apple_ref/c/func/AuthorizationExecuteWithPrivileges)
-in the macOS Security API to run shell commands with root privileges.
-
-STPrivilegedTask was created a long time ago. It has been updated over the years to work with the latest
-versions of macOS and is available via [CocoaPods](https://cocoapods.org).
-
-## Examples
-
-### Create and launch task
-
-```objective-c
-// Create task
-STPrivilegedTask *privilegedTask = [STPrivilegedTask new];
-[privilegedTask setLaunchPath:@"/usr/bin/touch"];
-[privilegedTask setArguments:@[@"/etc/my_test_file"]];
-
-// Setting working directory is optional, defaults to /
-// NSString *path = [[NSBundle mainBundle] resourcePath];
-// [privilegedTask setCurrentDirectoryPath:path];
-
-// Launch it, user is prompted for password (blocking)
-OSStatus err = [privilegedTask launch];
-if (err == errAuthorizationSuccess) {
- NSLog(@"Task successfully launched");
-}
-else if (err == errAuthorizationCanceled) {
- NSLog(@"User cancelled");
-}
-else {
- NSLog(@"Something went wrong");
-}
-```
-See [Authorization.h](http://www.opensource.apple.com/source/libsecurity_authorization/libsecurity_authorization-36329/lib/Authorization.h)
-for a list of possible error codes.
-
-### Launch task one-liner
-
-```objective-c
-OSStatus err = [STPrivilegedTask launchedPrivilegedTaskWithLaunchPath:@"/bin/sh"
- arguments:@[@"/path/to/script.sh"]];
-
-
-```
-
-
-### Getting task output
-
-```objective-c
-// ... Launch task
-
-[privilegedTask waitUntilExit]; // This is blocking
-
-// Read output file handle for data
-NSData *outputData = [[privilegedTask outputFileHandle] readDataToEndOfFile];
-NSString *outputString = [[NSString alloc] initWithData:outputData encoding:NSUTF8StringEncoding];
-
-```
-
-### Getting output while task runs in background
-
-```objective-c
-
-// ... Launch task
-
-NSFileHandle *readHandle = [privilegedTask outputFileHandle];
-[[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(getOutputData:)
- name:NSFileHandleReadCompletionNotification
- object:readHandle];
-[readHandle readInBackgroundAndNotify];
-
-// ...
-
-- (void)getOutputData:(NSNotification *)aNotification {
- // Get data from notification
- NSData *data = [[aNotification userInfo] objectForKey:NSFileHandleNotificationDataItem];
-
- // Make sure there's actual data
- if ([data length]) {
- // Do something with the data
- NSString *outputString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
- NSLog(@"%@", outputString);
-
- // Go read more data in the background
- [[aNotification object] readInBackgroundAndNotify];
- } else {
- // Do something else
- }
-}
-```
-
-### Task termination
-
-You can observe STPrivilegedTaskDidTerminateNotification:
-
-```objective-c
-[[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(privilegedTaskFinished:)
- name:STPrivilegedTaskDidTerminateNotification
- object:nil];
-
-- (void)privilegedTaskFinished:(NSNotification *)aNotification {
- // Do something
-}
-```
-
-Or alternatively, set a termination handler:
-
-```objective-c
-privilegedTask.terminationHandler = ^(STPrivilegedTask *privilegedTask) {
- NSLog(@"Terminating task: %@", [privilegedTask description]);
-};
-```
-
-### Launch using external AuthorizationRef
-
-```objective-c
-// ... Create your own AuthorizationRef
-
-[STPrivilegedTask launchedPrivilegedTaskWithLaunchPath:@"/bin/sh"
- arguments:@"/path/to/script"
- currentDirectory:@"/"
- authorization:authRef]
-```
-
-### AuthorizationExecuteWithPrivileges() is deprecated
-
-[AuthorizationExecuteWithPrivileges()](https://developer.apple.com/library/mac/documentation/Security/Reference/authorization_ref/#//apple_ref/c/func/AuthorizationExecuteWithPrivileges)
-is deprecated as of macOS 10.7 but still remains available in macOS 12 "Monterey". If you want to be future-proof,
-here's how you check if STPrivilegedTask works in the running version of macOS:
-
-```objective-c
-OSStatus err = [privilegedTask launch];
-if (err == errAuthorizationFnNoLongerExists) {
- NSLog(@"AuthorizationExecuteWithPrivileges not available");
-}
-```
-
-If you need to check whether STPrivilegedTask works before you launch the task:
-
-```objective-c
-BOOL works = [STPrivilegedTask authorizationFunctionAvailable];
-```
-
-## Sample app
-
-A sample app which makes use of STPrivilegedTask is included in the project. This app runs the following script:
-
-```
-#!/bin/sh
-
-echo "/usr/bin/whoami:"
-whoami
-echo ""
-echo "Real User ID:"
-echo $UID \($USER\)
-echo ""
-echo "Effective User ID:"
-/usr/bin/id -u
-echo ""
-echo "Current working directory:"
-echo "$PWD"
-
-exit 5
-```
-
-It then presents the output of the script in a window, along with the exit code.
-
-
-
-
-## BSD License
-
-Copyright (c) 2008-2021 Sveinbjorn Thordarson <sveinbjorn@sveinbjorn.org>
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice, this
-list of conditions and the following disclaimer in the documentation and/or other
-materials provided with the distribution.
-
-3. Neither the name of the copyright holder nor the names of its contributors may
-be used to endorse or promote products derived from this software without specific
-prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
diff --git a/Pods/STPrivilegedTask/STPrivilegedTask.h b/Pods/STPrivilegedTask/STPrivilegedTask.h
deleted file mode 100755
index 66aebe692..000000000
--- a/Pods/STPrivilegedTask/STPrivilegedTask.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- STPrivilegedTask - NSTask-like wrapper around AuthorizationExecuteWithPrivileges
- Copyright (C) 2008-2021 Sveinbjorn Thordarson
-
- BSD License
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of the copyright holder nor that of any other
- contributors may be used to endorse or promote products
- derived from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import
-
-#define STPrivilegedTaskDidTerminateNotification @"STPrivilegedTaskDidTerminateNotification"
-
-// Defines error value for when AuthorizationExecuteWithPrivileges no longer exists
-// Rather than defining a new enum, we just create a global constant
-extern const OSStatus errAuthorizationFnNoLongerExists;
-
-@interface STPrivilegedTask : NSObject
-
-@property (copy) NSArray *arguments;
-@property (copy) NSString *currentDirectoryPath;
-@property (copy) NSString *launchPath;
-@property (assign) BOOL freeAuthorizationWhenDone;
-
-@property (readonly) NSFileHandle *outputFileHandle;
-@property (readonly) BOOL isRunning;
-@property (readonly) pid_t processIdentifier;
-@property (readonly) int terminationStatus;
-@property (readonly) AuthorizationRef authorization;
-
-@property (copy) void (^terminationHandler)(STPrivilegedTask *);
-
-+ (BOOL)authorizationFunctionAvailable;
-
-- (instancetype)initWithLaunchPath:(NSString *)path;
-- (instancetype)initWithLaunchPath:(NSString *)path arguments:(NSArray *)args;
-- (instancetype)initWithLaunchPath:(NSString *)path arguments:(NSArray *)args currentDirectory:(NSString *)cwd;
-
-+ (STPrivilegedTask *)launchedPrivilegedTaskWithLaunchPath:(NSString *)path;
-+ (STPrivilegedTask *)launchedPrivilegedTaskWithLaunchPath:(NSString *)path arguments:(NSArray *)args;
-+ (STPrivilegedTask *)launchedPrivilegedTaskWithLaunchPath:(NSString *)path arguments:(NSArray *)args currentDirectory:(NSString *)cwd;
-+ (STPrivilegedTask *)launchedPrivilegedTaskWithLaunchPath:(NSString *)path arguments:(NSArray *)args currentDirectory:(NSString *)cwd authorization:(AuthorizationRef)authorization;
-
-- (OSStatus)launch;
-- (OSStatus)launchWithAuthorization:(AuthorizationRef)authorization;
-- (void)terminate; // doesn't work
-- (void)waitUntilExit;
-
-@end
-
diff --git a/Pods/STPrivilegedTask/STPrivilegedTask.m b/Pods/STPrivilegedTask/STPrivilegedTask.m
deleted file mode 100755
index 3d2173fe4..000000000
--- a/Pods/STPrivilegedTask/STPrivilegedTask.m
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- STPrivilegedTask - NSTask-like wrapper around AuthorizationExecuteWithPrivileges
- Copyright (C) 2008-2021 Sveinbjorn Thordarson
-
- BSD License
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of the copyright holder nor that of any other
- contributors may be used to endorse or promote products
- derived from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#import "STPrivilegedTask.h"
-
-#import
-#import
-#import
-#import
-#import
-
-// New error code denoting that AuthorizationExecuteWithPrivileges no longer exists
-OSStatus const errAuthorizationFnNoLongerExists = -70001;
-
-// Create fn pointer to AuthorizationExecuteWithPrivileges
-// in case it doesn't exist in this version of macOS
-static OSStatus (*_AuthExecuteWithPrivsFn)(AuthorizationRef authorization, const char *pathToTool, AuthorizationFlags options,
- char * const *arguments, FILE **communicationsPipe) = NULL;
-
-
-@implementation STPrivilegedTask
-{
- NSTimer *_checkStatusTimer;
-}
-
-+ (void)initialize {
- // On 10.7, AuthorizationExecuteWithPrivileges is deprecated. We want
- // to still use it since there's no good alternative (without requiring
- // code signing). We'll look up the function through dyld and fail if
- // it is no longer accessible. If Apple removes the function entirely
- // this will fail gracefully. If they keep the function and throw some
- // sort of exception, this won't fail gracefully, but that's a risk
- // we'll have to take for now.
- // Pattern by Andy Kim from Potion Factory LLC
-#pragma GCC diagnostic ignored "-Wpedantic" // stop the pedantry!
-#pragma clang diagnostic push
- _AuthExecuteWithPrivsFn = dlsym(RTLD_DEFAULT, "AuthorizationExecuteWithPrivileges");
-#pragma clang diagnostic pop
-}
-
-- (instancetype)init {
- self = [super init];
- if (self) {
- _launchPath = nil;
- _arguments = nil;
- _freeAuthorizationWhenDone = YES;
- _isRunning = NO;
- _outputFileHandle = nil;
- _terminationHandler = nil;
- _authorization = nil;
- _currentDirectoryPath = [[NSFileManager defaultManager] currentDirectoryPath];
- }
- return self;
-}
-
-- (instancetype)initWithLaunchPath:(NSString *)path {
- self = [self init];
- if (self) {
- self.launchPath = path;
- }
- return self;
-}
-
-- (instancetype)initWithLaunchPath:(NSString *)path
- arguments:(NSArray *)args {
- self = [self initWithLaunchPath:path];
- if (self) {
- self.arguments = args;
- }
- return self;
-}
-
-- (instancetype)initWithLaunchPath:(NSString *)path
- arguments:(NSArray *)args
- currentDirectory:(NSString *)cwd {
- self = [self initWithLaunchPath:path arguments:args];
- if (self) {
- self.currentDirectoryPath = cwd;
- }
- return self;
-}
-
-- (void)dealloc
-{
- if (_freeAuthorizationWhenDone && _authorization != nil) {
- // free the auth ref
- AuthorizationFree(_authorization, kAuthorizationFlagDefaults);
- }
-}
-
-#pragma mark -
-
-+ (STPrivilegedTask *)launchedPrivilegedTaskWithLaunchPath:(NSString *)path {
- STPrivilegedTask *task = [[STPrivilegedTask alloc] initWithLaunchPath:path];
- [task launch];
- [task waitUntilExit];
- return task;
-}
-
-+ (STPrivilegedTask *)launchedPrivilegedTaskWithLaunchPath:(NSString *)path arguments:(NSArray *)args {
- STPrivilegedTask *task = [[STPrivilegedTask alloc] initWithLaunchPath:path arguments:args];
- [task launch];
- [task waitUntilExit];
- return task;
-}
-
-+ (STPrivilegedTask *)launchedPrivilegedTaskWithLaunchPath:(NSString *)path
- arguments:(NSArray *)args
- currentDirectory:(NSString *)cwd {
- STPrivilegedTask *task = [[STPrivilegedTask alloc] initWithLaunchPath:path arguments:args currentDirectory:cwd];
- [task launch];
- [task waitUntilExit];
- return task;
-}
-
-+ (STPrivilegedTask *)launchedPrivilegedTaskWithLaunchPath:(NSString *)path
- arguments:(NSArray *)args
- currentDirectory:(NSString *)cwd
- authorization:(AuthorizationRef)authorization {
- STPrivilegedTask *task = [[STPrivilegedTask alloc] initWithLaunchPath:path arguments:args currentDirectory:cwd];
- [task launchWithAuthorization:authorization];
- [task waitUntilExit];
- return task;
-}
-
-# pragma mark -
-
-// return 0 for success
-- (OSStatus)launch {
- if (_isRunning) {
- NSLog(@"Task already running: %@", [self description]);
- return 0;
- }
-
- if ([STPrivilegedTask authorizationFunctionAvailable] == NO) {
- NSLog(@"AuthorizationExecuteWithPrivileges() function not available on this system");
- return errAuthorizationFnNoLongerExists;
- }
-
- OSStatus err = noErr;
- const char *toolPath = [self.launchPath fileSystemRepresentation];
-
- AuthorizationRef authorizationRef;
- AuthorizationItem myItems = { kAuthorizationRightExecute, strlen(toolPath), &toolPath, 0 };
- AuthorizationRights myRights = { 1, &myItems };
- AuthorizationFlags flags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed | kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights;
-
- // Use Apple's Authentication Manager API to create an Authorization Reference
- err = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authorizationRef);
- if (err != errAuthorizationSuccess) {
- return err;
- }
-
- // Pre-authorize the privileged operation
- err = AuthorizationCopyRights(authorizationRef, &myRights, kAuthorizationEmptyEnvironment, flags, NULL);
- if (err != errAuthorizationSuccess) {
- return err;
- }
-
- // OK, at this point we have received authorization for the task so we launch it.
- err = [self launchWithAuthorization:authorizationRef];
-
- return err;
-}
-
-- (OSStatus)launchWithAuthorization:(AuthorizationRef)authorization
-{
- _authorization = authorization;
-
- if (_isRunning) {
- NSLog(@"Task already running: %@", [self description]);
- return 0;
- }
-
- if ([STPrivilegedTask authorizationFunctionAvailable] == NO) {
- NSLog(@"AuthorizationExecuteWithPrivileges() function not available on this system");
- return errAuthorizationFnNoLongerExists;
- }
-
- // Assuming the authorization is valid for the task.
- // Let's prepare to launch it.
- NSArray *arguments = self.arguments;
- NSUInteger numArgs = [arguments count];
- char *args[numArgs + 1];
- FILE *outputFile;
-
- const char *toolPath = [self.launchPath fileSystemRepresentation];
-
- // First, construct an array of C strings w. all the arguments from NSArray
- // This is the format required by AuthorizationExecuteWithPrivileges function
- for (int i = 0; i < numArgs; i++) {
- NSString *argString = arguments[i];
- const char *fsrep = [argString fileSystemRepresentation];
- NSUInteger stringLength = strlen(fsrep);
- args[i] = calloc((stringLength + 1), sizeof(char));
- snprintf(args[i], stringLength + 1, "%s", fsrep);
- }
- args[numArgs] = NULL;
-
- // Change to the specified current working directory
- // NB: This is process-wide and could interfere with the behaviour of concurrent tasks
- char *prevCwd = (char *)getcwd(nil, 0);
- chdir([self.currentDirectoryPath fileSystemRepresentation]);
-
- // Use Authorization Reference to execute script with privileges.
- // This is where the magic happens.
- OSStatus err = _AuthExecuteWithPrivsFn(authorization, toolPath, kAuthorizationFlagDefaults, args, &outputFile);
-
- // OK, now we're done executing, let's change back to old dir
- chdir(prevCwd);
-
- // Free the alloc'd argument strings
- for (int i = 0; i < numArgs; i++) {
- free(args[i]);
- }
-
- // We return err if execution failed
- if (err != errAuthorizationSuccess) {
- return err;
- } else {
- _isRunning = YES;
- }
-
- // Get file handle for the command output
- _outputFileHandle = [[NSFileHandle alloc] initWithFileDescriptor:fileno(outputFile) closeOnDealloc:YES];
- _processIdentifier = fcntl(fileno(outputFile), F_GETOWN, 0);
-
- // Start monitoring task
- _checkStatusTimer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(checkTaskStatus) userInfo:nil repeats:YES];
-
- return err;
-}
-
-- (void)terminate {
- // This doesn't work without a PID, and we can't get one. Stupid Security API.
-// int ret = kill(pid, SIGKILL);
-//
-// if (ret != 0) {
-// NSLog(@"Error %d", errno);
-// }
-}
-
-// Hang until task is done
-- (void)waitUntilExit {
- if (!_isRunning) {
- NSLog(@"Task %@ is not running", [super description]);
- return;
- }
-
- [_checkStatusTimer invalidate];
-
- int status;
- pid_t pid = 0;
- while ((pid = waitpid(_processIdentifier, &status, WNOHANG)) == 0) {
- // Do nothing
- }
- _isRunning = NO;
- _terminationStatus = WEXITSTATUS(status);
-}
-
-// Check if task has terminated
-- (void)checkTaskStatus {
- int status;
- pid_t pid = waitpid(_processIdentifier, &status, WNOHANG);
- if (pid != 0) {
- _isRunning = NO;
- _terminationStatus = WEXITSTATUS(status);
- [_checkStatusTimer invalidate];
- [[NSNotificationCenter defaultCenter] postNotificationName:STPrivilegedTaskDidTerminateNotification object:self];
- if (_terminationHandler) {
- _terminationHandler(self);
- }
- }
-}
-
-#pragma mark -
-
-+ (BOOL)authorizationFunctionAvailable {
- if (!_AuthExecuteWithPrivsFn) {
- // This version of macOS has finally removed this function.
- return NO;
- }
- return YES;
-}
-
-#pragma mark -
-
-// Nice description for debugging purposes
-- (NSString *)description {
- NSString *commandDescription = [NSString stringWithString:self.launchPath];
-
- for (NSString *arg in self.arguments) {
- commandDescription = [commandDescription stringByAppendingFormat:@" '%@'", arg];
- }
- [commandDescription stringByAppendingFormat:@" (CWD:%@)", self.currentDirectoryPath];
-
- return [[super description] stringByAppendingFormat:@" %@", commandDescription];
-}
-
-@end
diff --git a/Pods/Sparkle/Entitlements/Downloader.entitlements b/Pods/Sparkle/Entitlements/Downloader.entitlements
deleted file mode 100644
index ee95ab7e5..000000000
--- a/Pods/Sparkle/Entitlements/Downloader.entitlements
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
- com.apple.security.app-sandbox
-
- com.apple.security.network.client
-
-
-
diff --git a/Pods/Sparkle/LICENSE b/Pods/Sparkle/LICENSE
deleted file mode 100644
index 75e73f505..000000000
--- a/Pods/Sparkle/LICENSE
+++ /dev/null
@@ -1,134 +0,0 @@
-Copyright (c) 2006-2013 Andy Matuschak.
-Copyright (c) 2009-2013 Elgato Systems GmbH.
-Copyright (c) 2011-2014 Kornel Lesiński.
-Copyright (c) 2015-2017 Mayur Pawashe.
-Copyright (c) 2014 C.W. Betts.
-Copyright (c) 2014 Petroules Corporation.
-Copyright (c) 2014 Big Nerd Ranch.
-All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-=================
-EXTERNAL LICENSES
-=================
-
-bspatch.c and bsdiff.c, from bsdiff 4.3 :
-
-Copyright 2003-2005 Colin Percival
-All rights reserved
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted providing that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
-IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
---
-
-sais.c and sais.c, from sais-lite (2010/08/07) :
-
-The sais-lite copyright is as follows:
-
-Copyright (c) 2008-2010 Yuta Mori All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
---
-
-Portable C implementation of Ed25519, from https://github.com/orlp/ed25519
-
-Copyright (c) 2015 Orson Peters
-
-This software is provided 'as-is', without any express or implied warranty. In no event will the
-authors be held liable for any damages arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose, including commercial
-applications, and to alter it and redistribute it freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the
- original software. If you use this software in a product, an acknowledgment in the product
- documentation would be appreciated but is not required.
-
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as
- being the original software.
-
-3. This notice may not be removed or altered from any source distribution.
-
---
-
-SUSignatureVerifier.m:
-
-Copyright (c) 2011 Mark Hamlin.
-
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted providing that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
-IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
diff --git a/Pods/Sparkle/Sparkle.framework/Autoupdate b/Pods/Sparkle/Sparkle.framework/Autoupdate
deleted file mode 120000
index 1a4fc02ca..000000000
--- a/Pods/Sparkle/Sparkle.framework/Autoupdate
+++ /dev/null
@@ -1 +0,0 @@
-Versions/Current/Autoupdate
\ No newline at end of file
diff --git a/Pods/Sparkle/Sparkle.framework/Headers b/Pods/Sparkle/Sparkle.framework/Headers
deleted file mode 120000
index a177d2a6b..000000000
--- a/Pods/Sparkle/Sparkle.framework/Headers
+++ /dev/null
@@ -1 +0,0 @@
-Versions/Current/Headers
\ No newline at end of file
diff --git a/Pods/Sparkle/Sparkle.framework/Modules b/Pods/Sparkle/Sparkle.framework/Modules
deleted file mode 120000
index 5736f3186..000000000
--- a/Pods/Sparkle/Sparkle.framework/Modules
+++ /dev/null
@@ -1 +0,0 @@
-Versions/Current/Modules
\ No newline at end of file
diff --git a/Pods/Sparkle/Sparkle.framework/PrivateHeaders b/Pods/Sparkle/Sparkle.framework/PrivateHeaders
deleted file mode 120000
index d8e564526..000000000
--- a/Pods/Sparkle/Sparkle.framework/PrivateHeaders
+++ /dev/null
@@ -1 +0,0 @@
-Versions/Current/PrivateHeaders
\ No newline at end of file
diff --git a/Pods/Sparkle/Sparkle.framework/Resources b/Pods/Sparkle/Sparkle.framework/Resources
deleted file mode 120000
index 953ee36f3..000000000
--- a/Pods/Sparkle/Sparkle.framework/Resources
+++ /dev/null
@@ -1 +0,0 @@
-Versions/Current/Resources
\ No newline at end of file
diff --git a/Pods/Sparkle/Sparkle.framework/Sparkle b/Pods/Sparkle/Sparkle.framework/Sparkle
deleted file mode 120000
index b2c52731e..000000000
--- a/Pods/Sparkle/Sparkle.framework/Sparkle
+++ /dev/null
@@ -1 +0,0 @@
-Versions/Current/Sparkle
\ No newline at end of file
diff --git a/Pods/Sparkle/Sparkle.framework/Updater.app b/Pods/Sparkle/Sparkle.framework/Updater.app
deleted file mode 120000
index 18f322355..000000000
--- a/Pods/Sparkle/Sparkle.framework/Updater.app
+++ /dev/null
@@ -1 +0,0 @@
-Versions/Current/Updater.app
\ No newline at end of file
diff --git a/Pods/Sparkle/Sparkle.framework/Versions/B/Autoupdate b/Pods/Sparkle/Sparkle.framework/Versions/B/Autoupdate
deleted file mode 100755
index 219325315..000000000
Binary files a/Pods/Sparkle/Sparkle.framework/Versions/B/Autoupdate and /dev/null differ
diff --git a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUDownloadData.h b/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUDownloadData.h
deleted file mode 100644
index 680b39897..000000000
--- a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUDownloadData.h
+++ /dev/null
@@ -1,52 +0,0 @@
-//
-// SPUDownloadData.h
-// Sparkle
-//
-// Created by Mayur Pawashe on 8/10/16.
-// Copyright © 2016 Sparkle Project. All rights reserved.
-//
-
-#import
-
-#ifdef BUILDING_SPARKLE_DOWNLOADER_SERVICE
-// Ignore incorrect warning
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wquoted-include-in-framework-header"
-#import "SUExport.h"
-#pragma clang diagnostic pop
-#else
-#import
-#endif
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * A class for containing downloaded data along with some information about it.
- */
-SU_EXPORT @interface SPUDownloadData : NSObject
-
-/**
- * The raw data that was downloaded.
- */
-@property (nonatomic, readonly) NSData *data;
-
-/**
- * The URL that was fetched from.
- *
- * This may be different from the URL in the request if there were redirects involved.
- */
-@property (nonatomic, readonly, copy) NSURL *URL;
-
-/**
- * The IANA charset encoding name if available. Eg: "utf-8"
- */
-@property (nonatomic, readonly, nullable, copy) NSString *textEncodingName;
-
-/**
- * The MIME type if available. Eg: "text/plain"
- */
-@property (nonatomic, readonly, nullable, copy) NSString *MIMEType;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUStandardUpdaterController.h b/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUStandardUpdaterController.h
deleted file mode 100644
index a34100dc6..000000000
--- a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUStandardUpdaterController.h
+++ /dev/null
@@ -1,112 +0,0 @@
-//
-// SPUStandardUpdaterController.h
-// Sparkle
-//
-// Created by Mayur Pawashe on 2/28/16.
-// Copyright © 2016 Sparkle Project. All rights reserved.
-//
-
-#import
-#import
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class SPUUpdater;
-@class SPUStandardUserDriver;
-@class NSMenuItem;
-@protocol SPUUserDriver, SPUUpdaterDelegate, SPUStandardUserDriverDelegate;
-
-/**
- A controller class that instantiates a `SPUUpdater` and allows binding UI to its updater settings.
-
- This class can be instantiated in a nib or created programatically using `-initWithUpdaterDelegate:userDriverDelegate:` or `-initWithStartingUpdater:updaterDelegate:userDriverDelegate:`.
-
- The controller's updater targets the application's main bundle and uses Sparkle's standard user interface.
- Typically, this class is used by sticking it as a custom NSObject subclass in an Interface Builder nib (probably in MainMenu) but it works well programatically too.
-
- The controller creates an `SPUUpdater` instance using a `SPUStandardUserDriver` and allows hooking up the check for updates action and handling menu item validation.
- It also allows hooking up the updater's and user driver's delegates.
-
- If you need more control over what bundle you want to update, or you want to provide a custom user interface (via `SPUUserDriver`), please use `SPUUpdater` directly instead.
- */
-SU_EXPORT @interface SPUStandardUpdaterController : NSObject
-{
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wobjc-interface-ivars"
- /**
- * Interface builder outlet for the updater's delegate.
- */
- IBOutlet __weak id updaterDelegate;
-
- /**
- * Interface builder outlet for the user driver's delegate.
- */
- IBOutlet __weak id userDriverDelegate;
-#pragma clang diagnostic pop
-}
-
-/**
- Accessible property for the updater. Some properties on the updater can be binded via KVO
-
- When instantiated from a nib, don't perform update checks before the application has finished launching in a MainMenu nib (i.e applicationDidFinishLaunching:) or before the corresponding window/view controller has been loaded (i.e, windowDidLoad or viewDidLoad). The updater is not guaranteed to be started yet before these points.
- */
-@property (nonatomic, readonly) SPUUpdater *updater;
-
-/**
- Accessible property for the updater's user driver.
- */
-@property (nonatomic, readonly) SPUStandardUserDriver *userDriver;
-
-/**
- Create a new `SPUStandardUpdaterController` from a nib.
-
- You cannot call this initializer directly. You must instantiate a `SPUStandardUpdaterController` inside of a nib (typically the MainMenu nib) to use it.
-
- To create a `SPUStandardUpdaterController` programatically, use `-initWithUpdaterDelegate:userDriverDelegate:` or `-initWithStartingUpdater:updaterDelegate:userDriverDelegate:` instead.
- */
-- (instancetype)init NS_UNAVAILABLE;
-
-/**
- Create a new `SPUStandardUpdaterController` programmatically.
-
- The updater is started automatically. See `-startUpdater` for more information.
- */
-- (instancetype)initWithUpdaterDelegate:(nullable id)updaterDelegate userDriverDelegate:(nullable id)userDriverDelegate;
-
-/**
- Create a new `SPUStandardUpdaterController` programmatically allowing you to specify whether or not to start the updater immediately.
-
- You can specify whether or not you want to start the updater immediately.
- If you do not start the updater, you must invoke `-startUpdater` at a later time to start it.
- */
-- (instancetype)initWithStartingUpdater:(BOOL)startUpdater updaterDelegate:(nullable id)updaterDelegate userDriverDelegate:(nullable id)userDriverDelegate;
-
-/**
- Starts the updater if it has not already been started.
-
- You should only call this method yourself if you opted out of starting the updater on initialization.
- Hence, do not call this yourself if you are instantiating this controller from a nib.
-
- This invokes `-[SPUUpdater startUpdater:]`. If the application is misconfigured with Sparkle, an error is logged and an alert is shown to the user (after a few seconds) to contact the developer.
- If you want more control over this behavior, you can create your own `SPUUpdater` instead of using `SPUStandardUpdaterController`.
- */
-- (void)startUpdater;
-
-/**
- Explicitly checks for updates and displays a progress dialog while doing so.
-
- This method is meant for a main menu item.
- Connect any NSMenuItem to this action in Interface Builder or programmatically,
- and Sparkle will check for updates and report back its findings verbosely when it is invoked.
-
- When the target/action of the menu item is set to this controller and this method,
- this controller also handles enabling/disabling the menu item by checking
- `-[SPUUpdater canCheckForUpdates]`
-
- This action checks updates by invoking `-[SPUUpdater checkForUpdates]`
- */
-- (IBAction)checkForUpdates:(nullable id)sender;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUStandardUserDriver.h b/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUStandardUserDriver.h
deleted file mode 100644
index 36eda9075..000000000
--- a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUStandardUserDriver.h
+++ /dev/null
@@ -1,37 +0,0 @@
-//
-// SPUStandardUserDriver.h
-// Sparkle
-//
-// Created by Mayur Pawashe on 2/14/16.
-// Copyright © 2016 Sparkle Project. All rights reserved.
-//
-
-#import
-#import
-#import
-
-NS_ASSUME_NONNULL_BEGIN
-
-@protocol SPUStandardUserDriverDelegate;
-
-/**
- Sparkle's standard built-in user driver for updater interactions
- */
-SU_EXPORT @interface SPUStandardUserDriver : NSObject
-
-/**
- Initializes a Sparkle's standard user driver for user update interactions
-
- @param hostBundle The target bundle of the host that is being updated.
- @param delegate The optional delegate to this user driver.
- */
-- (instancetype)initWithHostBundle:(NSBundle *)hostBundle delegate:(nullable id)delegate;
-
-/**
- Use initWithHostBundle:delegate: instead.
- */
-- (instancetype)init NS_UNAVAILABLE;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUStandardUserDriverDelegate.h b/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUStandardUserDriverDelegate.h
deleted file mode 100644
index b111a4a83..000000000
--- a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUStandardUserDriverDelegate.h
+++ /dev/null
@@ -1,185 +0,0 @@
-//
-// SPUStandardUserDriverDelegate.h
-// Sparkle
-//
-// Created by Mayur Pawashe on 3/3/16.
-// Copyright © 2016 Sparkle Project. All rights reserved.
-//
-
-#import
-#import
-
-NS_ASSUME_NONNULL_BEGIN
-
-@protocol SUVersionDisplay;
-@class SUAppcastItem;
-@class SPUUserUpdateState;
-
-/**
- A protocol for Sparkle's standard user driver's delegate
-
- This includes methods related to UI interactions
- */
-SU_EXPORT @protocol SPUStandardUserDriverDelegate
-
-@optional
-
-/**
- Called before showing a modal alert window,
- to give the opportunity to hide attached windows that may get in the way.
- */
-- (void)standardUserDriverWillShowModalAlert;
-
-/**
- Called after showing a modal alert window,
- to give the opportunity to hide attached windows that may get in the way.
- */
-- (void)standardUserDriverDidShowModalAlert;
-
-/**
- Returns an object that formats version numbers for display to the user.
- If you don't implement this method or return @c nil, the standard version formatter will be used.
- */
-- (_Nullable id )standardUserDriverRequestsVersionDisplayer;
-
-/**
- Decides whether or not the standard user driver should provide an option to show full release notes to the user.
-
- When a user checks for new updates and no new update is found, Sparkle by default will offer to show the application's version history to the user
- by providing a "Version History" button in the no new update available alert.
-
- If this delegate method is implemented to return `NO`, then Sparkle will not provide an option to show full release notes to the user.
-
- @param item The appcast item corresponding to the latest version available.
- @return @c YES to allow Sparkle to show full release notes to the user, otherwise @c NO to disallow this.
- */
-- (BOOL)standardUserDriverShouldShowVersionHistoryForAppcastItem:(SUAppcastItem *)item;
-
-/**
- Handles showing the full release notes to the user.
-
- When a user checks for new updates and no new update is found, Sparkle will offer to show the application's version history to the user
- by providing a "Version History" button in the no new update available alert.
-
- If this delegate method is not implemented, Sparkle will instead offer to open the
- `fullReleaseNotesLink` (or `releaseNotesLink` if the former is unavailable) from the appcast's latest `item` in the user's web browser.
-
- If this delegate method is implemented, Sparkle will instead ask the delegate to show the full release notes to the user.
- A delegate may want to implement this method if they want to show in-app or offline release notes.
-
- @param item The appcast item corresponding to the latest version available.
- */
-- (void)standardUserDriverShowVersionHistoryForAppcastItem:(SUAppcastItem *)item;
-
-/**
- Specifies whether or not the download, extraction, and installing status windows allows to be minimized.
-
- By default, the status window showing the current status of the update (download, extraction, ready to install) is allowed to be minimized
- for regular application bundle updates.
-
- @return @c YES if the status window is allowed to be minimized (default behavior), otherwise @c NO.
- */
-- (BOOL)standardUserDriverAllowsMinimizableStatusWindow;
-
-/**
- Declares whether or not gentle scheduled update reminders are supported.
-
- The delegate may implement scheduled update reminders that are presented in a gentle manner by implementing one or both of:
- `-standardUserDriverWillHandleShowingUpdate:forUpdate:state:` and `-standardUserDriverShouldHandleShowingScheduledUpdate:andInImmediateFocus:`
-
- Visit https://sparkle-project.org/documentation/gentle-reminders for more information and examples.
-
- @return @c YES if gentle scheduled update reminders are implemented by standard user driver delegate, otherwise @c NO (default).
- */
-@property (nonatomic, readonly) BOOL supportsGentleScheduledUpdateReminders;
-
-/**
- Specifies if the standard user driver should handle showing a new scheduled update, or if its delegate should handle showing the update instead.
-
- If you implement this method and return @c NO the delegate is then responsible for showing the update,
- which must be implemented and done in `-standardUserDriverWillHandleShowingUpdate:forUpdate:state:`
- The motivation for the delegate being responsible for showing updates is to override Sparkle's default behavior
- and add gentle reminders for new updates.
-
- Returning @c YES is the default behavior and allows the standard user driver to handle showing the update.
-
- If the standard user driver handles showing the update, `immediateFocus` reflects whether or not it will show the update in immediate and utmost focus.
- The standard user driver may choose to show the update in immediate and utmost focus when the app was launched recently
- or the system has been idle for some time.
-
- If `immediateFocus` is @c NO the standard user driver may want to defer showing the update until the user comes back to the app.
- For background running applications, when `immediateFocus` is @c NO the standard user driver will always want to show
- the update alert immediately, but behind other running applications or behind the app's own windows if it's currently active.
-
- There should be no side effects made when implementing this method so you should just return @c YES or @c NO
- You will also want to implement `-standardUserDriverWillHandleShowingUpdate:forUpdate:state:` for adding additional update reminders.
-
- This method is not called for user-initiated update checks. The standard user driver always handles those.
-
- Visit https://sparkle-project.org/documentation/gentle-reminders for more information and examples.
-
- @param update The update the standard user driver should show.
- @param immediateFocus If @c immediateFocus is @c YES, then the standard user driver proposes to show the update in immediate and utmost focus. See discussion for more details.
-
- @return @c YES if the standard user should handle showing the scheduled update (default behavior), otherwise @c NO if the delegate handles showing it.
- */
-- (BOOL)standardUserDriverShouldHandleShowingScheduledUpdate:(SUAppcastItem *)update andInImmediateFocus:(BOOL)immediateFocus;
-
-/**
- Called before an update will be shown to the user.
-
- If the standard user driver handles showing the update, `handleShowingUpdate` will be `YES`.
- Please see `-standardUserDriverShouldHandleShowingScheduledUpdate:andInImmediateFocus:` for how the standard user driver
- may handle showing scheduled updates when `handleShowingUpdate` is `YES` and `state.userInitiated` is `NO`.
-
- If the delegate declared it handles showing the update by returning @c NO in `-standardUserDriverShouldHandleShowingScheduledUpdate:andInImmediateFocus:`
- then the delegate should handle showing update reminders in this method, or at some later point.
- In this case, `handleShowingUpdate` will be @c NO.
- To bring the update alert in focus, you may call `-[SPUStandardUpdaterController checkForUpdates:]` or `-[SPUUpdater checkForUpdates]`.
- You may want to show additional UI indicators in your application that will show this update in focus
- and want to dismiss additional UI indicators in `-standardUserDriverWillFinishUpdateSession` or `-standardUserDriverDidReceiveUserAttentionForUpdate:`
-
- If `state.userInitiated` is @c YES then the standard user driver always handles showing the new update and `handleShowingUpdate` will be @c YES.
- In this case, it may still be useful for the delegate to intercept this method right before a new update will be shown.
-
- This method is not called when bringing an update that has already been presented back in focus.
-
- Visit https://sparkle-project.org/documentation/gentle-reminders for more information and examples.
-
- @param handleShowingUpdate @c YES if the standard user driver handles showing the update, otherwise @c NO if the delegate handles showing the update.
- @param update The update that will be shown.
- @param state The user state of the update which includes if the update check was initiated by the user.
- */
-- (void)standardUserDriverWillHandleShowingUpdate:(BOOL)handleShowingUpdate forUpdate:(SUAppcastItem *)update state:(SPUUserUpdateState *)state;
-
-/**
- Called when a new update first receives attention from the user.
-
- This occurs either when the user first brings the update alert in utmost focus or when the user makes a choice to install an update or dismiss/skip it.
-
- This may be useful to intercept for dismissing custom attention-based UI indicators (e.g, user notifications) introduced when implementing
- `-standardUserDriverWillHandleShowingUpdate:forUpdate:state:`
-
- For custom UI indicators that need to still be on screen after the user has started to install an update, please see `-standardUserDriverWillFinishUpdateSession`.
-
- @param update The new update that the user gave attention to.
- */
-- (void)standardUserDriverDidReceiveUserAttentionForUpdate:(SUAppcastItem *)update;
-
-/**
- Called before the standard user driver session will finish its current update session.
-
- This may occur after the user has dismissed / skipped a new update or after an update error has occurred.
- For updaters updating external/other bundles, this may also be called after an update has been successfully installed.
-
- This may be useful to intercept for dismissing custom UI indicators introduced when implementing
- `-standardUserDriverWillHandleShowingUpdate:forUpdate:state:`
-
- For UI indicators that need to be dismissed when the user has given attention to a new update alert,
- please see `-standardUserDriverDidReceiveUserAttentionForUpdate:`
- */
-- (void)standardUserDriverWillFinishUpdateSession;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUUpdateCheck.h b/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUUpdateCheck.h
deleted file mode 100644
index 80a200196..000000000
--- a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUUpdateCheck.h
+++ /dev/null
@@ -1,33 +0,0 @@
-//
-// SPUUpdateCheck.h
-// SPUUpdateCheck
-//
-// Created by Mayur Pawashe on 8/28/21.
-// Copyright © 2021 Sparkle Project. All rights reserved.
-//
-
-#ifndef SPUUpdateCheck_h
-#define SPUUpdateCheck_h
-
-/**
- Describes the type of update check being performed.
-
- Each update check corresponds to an update check method on `SPUUpdater`.
- */
-typedef NS_ENUM(NSInteger, SPUUpdateCheck)
-{
- /**
- The user-initiated update check corresponding to `-[SPUUpdater checkForUpdates]`.
- */
- SPUUpdateCheckUpdates = 0,
- /**
- The background scheduled update check corresponding to `-[SPUUpdater checkForUpdatesInBackground]`.
- */
- SPUUpdateCheckUpdatesInBackground = 1,
- /**
- The informational probe update check corresponding to `-[SPUUpdater checkForUpdateInformation]`.
- */
- SPUUpdateCheckUpdateInformation = 2
-};
-
-#endif /* SPUUpdateCheck_h */
diff --git a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUUpdatePermissionRequest.h b/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUUpdatePermissionRequest.h
deleted file mode 100644
index 010e50bf1..000000000
--- a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUUpdatePermissionRequest.h
+++ /dev/null
@@ -1,33 +0,0 @@
-//
-// SPUUpdatePermissionRequest.h
-// Sparkle
-//
-// Created by Mayur Pawashe on 8/14/16.
-// Copyright © 2016 Sparkle Project. All rights reserved.
-//
-
-#import
-#import
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- This class represents information needed to make a permission request for checking updates.
- */
-SU_EXPORT @interface SPUUpdatePermissionRequest : NSObject
-
-/**
- Initializes a new update permission request instance.
-
- @param systemProfile The system profile information.
- */
-- (instancetype)initWithSystemProfile:(NSArray *> *)systemProfile;
-
-/**
- A read-only property for the user's system profile.
- */
-@property (nonatomic, readonly) NSArray *> *systemProfile;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUUpdater.h b/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUUpdater.h
deleted file mode 100644
index 17a649382..000000000
--- a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUUpdater.h
+++ /dev/null
@@ -1,312 +0,0 @@
-//
-// SPUUpdater.h
-// Sparkle
-//
-// Created by Andy Matuschak on 1/4/06.
-// Copyright 2006 Andy Matuschak. All rights reserved.
-//
-
-#import
-#import
-#import
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class SUAppcastItem, SUAppcast;
-
-@protocol SPUUpdaterDelegate;
-
-/**
- The main API in Sparkle for controlling the update mechanism.
-
- This class is used to configure the update parameters as well as manually and automatically schedule and control checks for updates.
-
- For convenience, you can create a standard or nib instantiable updater by using `SPUStandardUpdaterController`.
-
- Prefer to set initial properties in your bundle's Info.plist as described in [Customizing Sparkle](https://sparkle-project.org/documentation/customization/).
-
- Otherwise only if you need dynamic behavior for user settings should you set properties on the updater such as:
- - `automaticallyChecksForUpdates`
- - `updateCheckInterval`
- - `automaticallyDownloadsUpdates`
- - `feedURL`
-
- Please view the documentation on each of these properties for more detail if you are to configure them dynamically.
- */
-SU_EXPORT @interface SPUUpdater : NSObject
-
-/**
- Initializes a new `SPUUpdater` instance
-
- This creates an updater, but to start it and schedule update checks `-startUpdater:` needs to be invoked first.
-
- Related: See `SPUStandardUpdaterController` which wraps a `SPUUpdater` instance and is suitable for instantiating inside of nib files.
-
- @param hostBundle The bundle that should be targetted for updating.
- @param applicationBundle The application bundle that should be waited for termination and relaunched (unless overridden). Usually this can be the same as hostBundle. This may differ when updating a plug-in or other non-application bundle.
- @param userDriver The user driver that Sparkle uses for user update interaction.
- @param delegate The delegate for `SPUUpdater`.
- */
-- (instancetype)initWithHostBundle:(NSBundle *)hostBundle applicationBundle:(NSBundle *)applicationBundle userDriver:(id )userDriver delegate:(nullable id)delegate;
-
-/**
- Use `-initWithHostBundle:applicationBundle:userDriver:delegate:` or `SPUStandardUpdaterController` standard adapter instead.
-
- If you want to drop an updater into a nib, use `SPUStandardUpdaterController`.
- */
-- (instancetype)init NS_UNAVAILABLE;
-
-/**
- Starts the updater.
-
- This method first checks if Sparkle is configured properly. A valid feed URL should be set before this method is invoked.
-
- If the configuration is valid, an update cycle is started in the next main runloop cycle.
- During this cycle, a permission prompt may be brought up (if needed) for checking if the user wants automatic update checking.
- Otherwise if automatic update checks are enabled, a scheduled update alert may be brought up if enough time has elapsed since the last check.
- See `automaticallyChecksForUpdates` for more information.
-
- After starting the updater and before the next runloop cycle, one of `-checkForUpdates`, `-checkForUpdatesInBackground`, or `-checkForUpdateInformation` can be invoked.
- This may be useful if you want to check for updates immediately or without showing a potential permission prompt.
-
- If the updater cannot be started (i.e, due to a configuration issue in the application), you may want to fall back appropriately.
- For example, the standard updater controller (`SPUStandardUpdaterController`) alerts the user that the app is misconfigured and to contact the developer.
-
- This must be called on the main thread.
-
- @param error The error that is populated if this method fails. Pass NULL if not interested in the error information.
- @return YES if the updater started otherwise NO with a populated error
- */
-- (BOOL)startUpdater:(NSError * __autoreleasing *)error;
-
-/**
- Checks for updates, and displays progress while doing so if needed.
-
- This is meant for users initiating a new update check or checking the current update progress.
-
- If an update hasn't started, the user may be shown that a new check for updates is occurring.
- If an update has already been downloaded or begun installing from a previous session, the user may be presented to install that update.
- If the user is already being presented with an update, that update will be shown to the user in active focus.
-
- This will find updates that the user has previously opted into skipping.
-
- See `canCheckForUpdates` property which can determine when this method may be invoked.
- */
-- (void)checkForUpdates;
-
-/**
- Checks for updates, but does not show any UI unless an update is found.
-
- You usually do not need to call this method directly. If `automaticallyChecksForUpdates` is @c YES,
- Sparkle calls this method automatically according to its update schedule using the `updateCheckInterval`
- and the `lastUpdateCheckDate`. Therefore, you should typically only consider calling this method directly if you
- opt out of automatic update checks.
-
- This is meant for programmatically initating a check for updates in the background without the user initiating it.
- This check will not show UI if no new updates are found.
-
- If a new update is found, the updater's user driver may handle showing it at an appropriate (but not necessarily immediate) time.
- If you want control over when and how a new update is shown, please see https://sparkle-project.org/documentation/gentle-reminders/
-
- Note if automated updating is turned on, either a new update may be downloaded in the background to be installed silently,
- or an already downloaded update may be shown.
-
- This will not find updates that the user has opted into skipping.
-
- This method does not do anything if there is a `sessionInProgress`.
- */
-- (void)checkForUpdatesInBackground;
-
-/**
- Begins a "probing" check for updates which will not actually offer to
- update to that version.
-
- However, the delegate methods
- `-[SPUUpdaterDelegate updater:didFindValidUpdate:]` and
- `-[SPUUpdaterDelegate updaterDidNotFindUpdate:]` will be called,
- so you can use that information in your UI.
-
- `-[SPUUpdaterDelegate updater:didFinishUpdateCycleForUpdateCheck:error:]` will be called when
- this probing check is completed.
-
- Updates that have been skipped by the user will not be found.
-
- This method does not do anything if there is a `sessionInProgress`.
- */
-- (void)checkForUpdateInformation;
-
-/**
- A property indicating whether or not updates can be checked by the user.
-
- An update check can be made by the user when an update session isn't in progress, or when an update or its progress is being shown to the user.
- A user cannot check for updates when data (such as the feed or an update) is still being downloaded automatically in the background.
-
- This property is suitable to use for menu item validation for seeing if `-checkForUpdates` can be invoked.
-
- This property is also KVO-compliant.
-
- Note this property does not reflect whether or not an update session is in progress. Please see `sessionInProgress` property instead.
- */
-@property (nonatomic, readonly) BOOL canCheckForUpdates;
-
-/**
- A property indicating whether or not an update session is in progress.
-
- An update session is in progress when the appcast is being downloaded, an update is being downloaded,
- an update is being shown, update permission is being requested, or the installer is being started.
-
- An active session is when Sparkle's fired scheduler is running.
-
- Note an update session may not be running even though Sparkle's installer (ran as a separate process) may be running,
- or even though the update has been downloaded but the installation has been deferred. In both of these cases, a new update session
- may be activated with the update resumed at a later point (automatically or manually).
-
- See also:
- - `canCheckForUpdates` property which is more suited for menu item validation and deciding if the user can initiate update checks.
- - `-[SPUUpdaterDelegate updater:didFinishUpdateCycleForUpdateCheck:error:]` which lets the updater delegate know when an update cycle and session finishes.
- */
-@property (nonatomic, readonly) BOOL sessionInProgress;
-
-/**
- A property indicating whether or not to check for updates automatically.
-
- By default, Sparkle asks users on second launch for permission if they want automatic update checks enabled
- and sets this property based on their response. If `SUEnableAutomaticChecks` is set in the Info.plist,
- this permission request is not performed however.
-
- Setting this property will persist in the host bundle's user defaults.
- Hence developers shouldn't maintain an additional user default for this property.
- Only set this property if the user wants to change the default via a user settings option.
- Do not always set it on launch unless you want to ignore the user's preference.
- For testing environments, you can disable update checks by passing `-SUEnableAutomaticChecks NO`
- to your app's command line arguments instead of setting this property.
-
- The update schedule cycle will be reset in a short delay after the property's new value is set.
- This is to allow reverting this property without kicking off a schedule change immediately
- */
-@property (nonatomic) BOOL automaticallyChecksForUpdates;
-
-/**
- A property indicating the current automatic update check interval in seconds.
-
- Prefer to set SUScheduledCheckInterval directly in your Info.plist for setting the initial value.
-
- Setting this property will persist in the host bundle's user defaults.
- Hence developers shouldn't maintain an additional user default for this property.
- Only set this property if the user wants to change the default via a user settings option.
- Do not always set it on launch unless you want to ignore the user's preference.
-
- The update schedule cycle will be reset in a short delay after the property's new value is set.
- This is to allow reverting this property without kicking off a schedule change immediately
- */
-@property (nonatomic) NSTimeInterval updateCheckInterval;
-
-/**
- A property indicating whether or not updates can be automatically downloaded in the background.
-
- By default, updates are not automatically downloaded.
-
- Note that the developer can disallow automatic downloading of updates from being enabled (via `SUAllowsAutomaticUpdates` Info.plist key).
- In this case, this property will return NO regardless of how this property is set.
-
- Prefer to set SUAutomaticallyUpdate directly in your Info.plist for setting the initial value.
-
- Setting this property will persist in the host bundle's user defaults.
- Hence developers shouldn't maintain an additional user default for this property.
- Only set this property if the user wants to change the default via a user settings option.
- Do not always set it on launch unless you want to ignore the user's preference.
- */
-@property (nonatomic) BOOL automaticallyDownloadsUpdates;
-
-/**
- The URL of the appcast used to download update information.
-
- If the updater's delegate implements `-[SPUUpdaterDelegate feedURLStringForUpdater:]`, this will return that feed URL.
- Otherwise if the feed URL has been set before, the feed URL returned will be retrieved from the host bundle's user defaults.
- Otherwise the feed URL in the host bundle's Info.plist will be returned.
- If no feed URL can be retrieved, returns nil.
-
- For setting a primary feed URL, please set the `SUFeedURL` property in your Info.plist.
- For setting an alternative feed URL, please prefer `-[SPUUpdaterDelegate feedURLStringForUpdater:]` over `-setFeedURL:`
-
- This property must be called on the main thread; calls from background threads will return nil.
- */
-@property (nonatomic, readonly, nullable) NSURL *feedURL;
-
-/**
- Set the URL of the appcast used to download update information. Using this method is discouraged.
-
- Setting this property will persist in the host bundle's user defaults.
- To avoid this, you should consider implementing
- `-[SPUUpdaterDelegate feedURLStringForUpdater:]` instead of using this method.
-
- Passing nil will remove any feed URL that has been set in the host bundle's user defaults.
- If you do not need to alternate between multiple feeds, set the SUFeedURL in your Info.plist instead of invoking this method.
-
- For beta updates, you may consider migrating to `-[SPUUpdaterDelegate allowedChannelsForUpdater:]` in the future.
-
- This method must be called on the main thread; calls from background threads will have no effect.
- */
-- (void)setFeedURL:(nullable NSURL *)feedURL;
-
-/**
- The host bundle that is being updated.
- */
-@property (nonatomic, readonly) NSBundle *hostBundle;
-
-/**
- The user agent used when checking for updates.
-
- By default the user agent string returned is in the format:
- $(BundleDisplayName)/$(BundleDisplayVersion) Sparkle/$(SparkleDisplayVersion)
-
- BundleDisplayVersion is derived from the main application's Info.plist's CFBundleShortVersionString.
-
- Note if Sparkle is being used to update another application, the bundle information retrieved is from the main application performing the updating.
-
- This default implementation can be overrided.
- */
-@property (nonatomic, copy) NSString *userAgentString;
-
-/**
- The HTTP headers used when checking for updates, downloading release notes, and downloading updates.
-
- The keys of this dictionary are HTTP header fields and values are corresponding values.
- */
-@property (nonatomic, copy, nullable) NSDictionary *httpHeaders;
-
-/**
- A property indicating whether or not the user's system profile information is sent when checking for updates.
-
- Setting this property will persist in the host bundle's user defaults.
- */
-@property (nonatomic) BOOL sendsSystemProfile;
-
-/**
- The date of the last update check or nil if no check has been performed yet.
-
- For testing purposes, the last update check is stored in the `SULastCheckTime` key in the host bundle's user defaults.
- For example, `defaults delete my-bundle-id SULastCheckTime` can be invoked to clear the last update check time and test
- if update checks are automatically scheduled.
- */
-@property (nonatomic, readonly, copy, nullable) NSDate *lastUpdateCheckDate;
-
-/**
- Appropriately schedules or cancels the update checking timer according to the settings for the time interval and automatic checks.
-
- If you change the `updateCheckInterval` or `automaticallyChecksForUpdates` properties, the update cycle will be reset automatically after a short delay.
- The update cycle is also started automatically after the updater is started. In all these cases, this method should not be called directly.
-
- This call does not change the date of the next check, but only the internal timer.
- */
-- (void)resetUpdateCycle;
-
-
-/**
- The system profile information that is sent when checking for updates.
- */
-@property (nonatomic, readonly, copy) NSArray *> *systemProfileArray;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUUpdaterDelegate.h b/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUUpdaterDelegate.h
deleted file mode 100644
index a18e967f8..000000000
--- a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUUpdaterDelegate.h
+++ /dev/null
@@ -1,465 +0,0 @@
-//
-// SPUUpdaterDelegate.h
-// Sparkle
-//
-// Created by Mayur Pawashe on 8/12/16.
-// Copyright © 2016 Sparkle Project. All rights reserved.
-//
-
-#import
-#import
-#import
-#import
-
-@protocol SUVersionComparison;
-@class SPUUpdater, SUAppcast, SUAppcastItem, SPUUserUpdateState;
-
-NS_ASSUME_NONNULL_BEGIN
-
-// -----------------------------------------------------------------------------
-// SUUpdater Notifications for events that might be interesting to more than just the delegate
-// The updater will be the notification object
-// -----------------------------------------------------------------------------
-SU_EXPORT extern NSString *const SUUpdaterDidFinishLoadingAppCastNotification;
-SU_EXPORT extern NSString *const SUUpdaterDidFindValidUpdateNotification;
-SU_EXPORT extern NSString *const SUUpdaterDidNotFindUpdateNotification;
-SU_EXPORT extern NSString *const SUUpdaterWillRestartNotification;
-#define SUUpdaterWillRelaunchApplicationNotification SUUpdaterWillRestartNotification;
-#define SUUpdaterWillInstallUpdateNotification SUUpdaterWillRestartNotification;
-
-// Key for the SUAppcastItem object in the SUUpdaterDidFindValidUpdateNotification userInfo
-SU_EXPORT extern NSString *const SUUpdaterAppcastItemNotificationKey;
-// Key for the SUAppcast object in the SUUpdaterDidFinishLoadingAppCastNotification userInfo
-SU_EXPORT extern NSString *const SUUpdaterAppcastNotificationKey;
-
-// -----------------------------------------------------------------------------
-// System Profile Keys
-// -----------------------------------------------------------------------------
-
-SU_EXPORT extern NSString *const SUSystemProfilerApplicationNameKey;
-SU_EXPORT extern NSString *const SUSystemProfilerApplicationVersionKey;
-SU_EXPORT extern NSString *const SUSystemProfilerCPU64bitKey;
-SU_EXPORT extern NSString *const SUSystemProfilerCPUCountKey;
-SU_EXPORT extern NSString *const SUSystemProfilerCPUFrequencyKey;
-SU_EXPORT extern NSString *const SUSystemProfilerCPUTypeKey;
-SU_EXPORT extern NSString *const SUSystemProfilerCPUSubtypeKey;
-SU_EXPORT extern NSString *const SUSystemProfilerHardwareModelKey;
-SU_EXPORT extern NSString *const SUSystemProfilerMemoryKey;
-SU_EXPORT extern NSString *const SUSystemProfilerOperatingSystemVersionKey;
-SU_EXPORT extern NSString *const SUSystemProfilerPreferredLanguageKey;
-
-// -----------------------------------------------------------------------------
-// SPUUpdater Delegate:
-// -----------------------------------------------------------------------------
-
-/**
- Provides delegation methods to control the behavior of an `SPUUpdater` object.
- */
-@protocol SPUUpdaterDelegate
-@optional
-
-/**
- Returns whether to allow Sparkle to check for updates.
-
- For example, this may be used to prevent Sparkle from interrupting a setup assistant.
- Alternatively, you may want to consider starting the updater after eg: the setup assistant finishes.
-
- Note in Swift, this method returns Void and is marked with the throws keyword. If this method
- doesn't throw an error, the updater may perform an update check. Otherwise if an error is thrown (we recommend using an NSError),
- then the updater may not perform an update check.
-
- @param updater The updater instance.
- @param updateCheck The type of update check that will be performed if the updater is allowed to check for updates.
- @param error The populated error object if the updater may not perform a new update check. The @c NSLocalizedDescriptionKey user info key should be populated indicating a description of the error.
- @return @c YES if the updater is allowed to check for updates, otherwise @c NO
-*/
-- (BOOL)updater:(SPUUpdater *)updater mayPerformUpdateCheck:(SPUUpdateCheck)updateCheck error:(NSError * __autoreleasing *)error;
-
-/**
- Returns the set of Sparkle channels the updater is allowed to find new updates from.
-
- An appcast item can specify a channel the update is posted to. Without specifying a channel, the appcast item is posted to the default channel.
- For instance:
- ```
- -
- 2.0 Beta 1
- beta
-
- ```
-
- This example posts an update to the @c beta channel, so only updaters that are allowed to use the @c beta channel can find this update.
-
- If the @c element is not present, the update item is posted to the default channel and can be found by any updater.
-
- You can pick any name you'd like for the channel. The valid characters for channel names are letters, numbers, dashes, underscores, and periods.
-
- Note to use this feature, all app versions that your users may update from in your feed must use a version of Sparkle that supports this feature.
- This feature was added in Sparkle 2.
-
- @return The set of channel names the updater is allowed to find new updates in. An empty set is the default behavior,
- which means the updater will only look for updates in the default channel.
- */
-- (NSSet *)allowedChannelsForUpdater:(SPUUpdater *)updater;
-
-/**
- Returns a custom appcast URL used for checking for new updates.
-
- Override this to dynamically specify the feed URL.
-
- @param updater The updater instance.
- @return An appcast feed URL to check for new updates in, or @c nil for the default behavior and if you don't want to be delegated this task.
- */
-- (nullable NSString *)feedURLStringForUpdater:(SPUUpdater *)updater;
-
-/**
- Returns additional parameters to append to the appcast URL's query string.
-
- This is potentially based on whether or not Sparkle will also be sending along the system profile.
-
- @param updater The updater instance.
- @param sendingProfile Whether the system profile will also be sent.
-
- @return An array of dictionaries with keys: `key`, `value`, `displayKey`, `displayValue`, the latter two being specifically for display to the user.
- */
-- (NSArray *> *)feedParametersForUpdater:(SPUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile;
-
-/**
- Returns whether Sparkle should prompt the user about checking for new updates automatically.
-
- Use this to override the default behavior.
-
- @param updater The updater instance.
- @return @c YES if the updater should prompt for permission to check for new updates automatically, otherwise @c NO
- */
-- (BOOL)updaterShouldPromptForPermissionToCheckForUpdates:(SPUUpdater *)updater;
-
-/**
- Returns an allowed list of system profile keys to be appended to the appcast URL's query string.
-
- By default all keys will be included. This method allows overriding which keys should only be allowed.
-
- @param updater The updater instance.
-
- @return An array of system profile keys to include in the appcast URL's query string. Elements must be one of the `SUSystemProfiler*Key` constants. Return @c nil for the default behavior and if you don't want to be delegated this task.
- */
-- (nullable NSArray *)allowedSystemProfileKeysForUpdater:(SPUUpdater *)updater;
-
-/**
- Called after Sparkle has downloaded the appcast from the remote server.
-
- Implement this if you want to do some special handling with the appcast once it finishes loading.
-
- @param updater The updater instance.
- @param appcast The appcast that was downloaded from the remote server.
- */
-- (void)updater:(SPUUpdater *)updater didFinishLoadingAppcast:(SUAppcast *)appcast;
-
-/**
- Called when a new valid update is found by the update driver.
-
- @param updater The updater instance.
- @param item The appcast item corresponding to the update that is proposed to be installed.
- */
-- (void)updater:(SPUUpdater *)updater didFindValidUpdate:(SUAppcastItem *)item;
-
-/**
- Called when a valid new update is not found.
-
- There are various reasons a new update is unavailable and can't be installed.
-
- The userInfo dictionary on the error is populated with three keys:
- - `SPULatestAppcastItemFoundKey`: if available, this may provide the latest `SUAppcastItem` that was found. This will be @c nil if it's unavailable.
- - `SPUNoUpdateFoundReasonKey`: This will provide the `SPUNoUpdateFoundReason`.
- For example the reason could be because the latest version in the feed requires a newer OS version or could be because the user is already on the latest version.
- - `SPUNoUpdateFoundUserInitiatedKey`: A boolean that indicates if a new update was not found when the user intitiated an update check manually.
-
- @param updater The updater instance.
- @param error An error containing information on why a new valid update was not found
- */
-- (void)updaterDidNotFindUpdate:(SPUUpdater *)updater error:(NSError *)error;
-
-/**
- Called when a valid new update is not found.
-
- If more information is needed on why an update was not found, use `-[SPUUpdaterDelegate updaterDidNotFindUpdate:error:]` instead.
-
- @param updater The updater instance.
- */
-- (void)updaterDidNotFindUpdate:(SPUUpdater *)updater;
-
-/**
- Returns the item in the appcast corresponding to the update that should be installed.
-
- Please consider using or migrating to other supported features before adopting this method.
- Specifically:
- - If you want to filter out certain tagged updates (like beta updates), consider `-[SPUUpdaterDelegate allowedChannelsForUpdater:]` instead.
- - If you want to treat certain updates as informational-only, consider supplying @c with a set of affected versions users are updating from.
-
- If you're using special logic or extensions in your appcast, implement this to use your own logic for finding a valid update, if any, in the given appcast.
-
- Do not base your logic by filtering out items with a minimum or maximum OS version or minimum autoupdate version
- because Sparkle already has logic for determining whether or not those items should be filtered out.
-
- Also do not return a non-top level item from the appcast such as a delta item. Delta items will be ignored.
- Sparkle picks the delta item from your selection if the appropriate one is available.
-
- This method will not be invoked with an appcast that has zero items. Pick the best item from the appcast.
- If an item is available that has the same version as the application or bundle to update, do not pick an item that is worse than that version.
-
- This method may be called multiple times for different selections and filters. This method should be efficient.
-
- Return `+[SUAppcastItem emptyAppcastItem]` if no appcast item is valid.
-
- Return @c nil if you don't want to be delegated this task and want to let Sparkle handle picking the best valid update.
-
- @param appcast The appcast that was downloaded from the remote server.
- @param updater The updater instance.
- @return The best valid appcast item.
- */
-- (nullable SUAppcastItem *)bestValidUpdateInAppcast:(SUAppcast *)appcast forUpdater:(SPUUpdater *)updater;
-
-/**
- Returns whether or not the updater should proceed with the new chosen update from the appcast.
-
- By default, the updater will always proceed with the best selected update found in an appcast. Override this to override this behavior.
-
- If you return @c NO and populate the @c error, the user is not shown this @c updateItem nor is the update downloaded or installed.
-
- Note in Swift, this method returns Void and is marked with the throws keyword. If this method doesn't throw an error, the updater will proceed with the update.
- Otherwise if an error is thrown (we recommend using an NSError), then the will not proceed with the update.
-
- @param updater The updater instance.
- @param updateItem The selected update item to proceed with.
- @param updateCheck The type of update check that would be performed if proceeded.
- @param error An error object that must be populated by the delegate if the updater should not proceed with the update. The @c NSLocalizedDescriptionKey user info key should be populated indicating a description of the error.
- @return @c YES if the updater should proceed with @c updateItem, otherwise @c NO if the updater should not proceed with the update with an @c error populated.
- */
-- (BOOL)updater:(SPUUpdater *)updater shouldProceedWithUpdate:(SUAppcastItem *)updateItem updateCheck:(SPUUpdateCheck)updateCheck error:(NSError * __autoreleasing *)error;
-
-/**
- Called when a user makes a choice to install, dismiss, or skip an update.
-
- If the @c choice is `SPUUserUpdateChoiceDismiss` and @c state.stage is `SPUUserUpdateStageDownloaded` the downloaded update is kept
- around until the next time Sparkle reminds the user of the update.
-
- If the @c choice is `SPUUserUpdateChoiceDismiss` and @c state.stage is `SPUUserUpdateStageInstalling` the update is still set to install on application termination.
-
- If the @c choice is `SPUUserUpdateChoiceSkip` the user will not be reminded in the future for this update unless they initiate an update check themselves.
-
- If @c updateItem.isInformationOnlyUpdate is @c YES the @c choice cannot be `SPUUserUpdateChoiceInstall`.
-
- @param updater The updater instance.
- @param choice The choice (install, dismiss, or skip) the user made for this @c updateItem
- @param updateItem The appcast item corresponding to the update that the user made a choice on.
- @param state The current state for the update which includes if the update has already been downloaded or already installing.
- */
-- (void)updater:(SPUUpdater *)updater userDidMakeChoice:(SPUUserUpdateChoice)choice forUpdate:(SUAppcastItem *)updateItem state:(SPUUserUpdateState *)state;
-
-/**
- Returns whether the release notes (if available) should be downloaded after an update is found and shown.
-
- This is specifically for the @c element in the appcast item.
-
- @param updater The updater instance.
- @param updateItem The update item to download and show release notes from.
-
- @return @c YES to download and show the release notes if available, otherwise @c NO. The default behavior is @c YES.
- */
-- (BOOL)updater:(SPUUpdater *)updater shouldDownloadReleaseNotesForUpdate:(SUAppcastItem *)updateItem;
-
-/**
- Called immediately before downloading the specified update.
-
- @param updater The updater instance.
- @param item The appcast item corresponding to the update that is proposed to be downloaded.
- @param request The mutable URL request that will be used to download the update.
- */
-- (void)updater:(SPUUpdater *)updater willDownloadUpdate:(SUAppcastItem *)item withRequest:(NSMutableURLRequest *)request;
-
-/**
- Called immediately after succesfull download of the specified update.
-
- @param updater The SUUpdater instance.
- @param item The appcast item corresponding to the update that has been downloaded.
- */
-- (void)updater:(SPUUpdater *)updater didDownloadUpdate:(SUAppcastItem *)item;
-
-/**
- Called after the specified update failed to download.
-
- @param updater The updater instance.
- @param item The appcast item corresponding to the update that failed to download.
- @param error The error generated by the failed download.
- */
-- (void)updater:(SPUUpdater *)updater failedToDownloadUpdate:(SUAppcastItem *)item error:(NSError *)error;
-
-/**
- Called when the user cancels an update while it is being downloaded.
-
- @param updater The updater instance.
- */
-- (void)userDidCancelDownload:(SPUUpdater *)updater;
-
-/**
- Called immediately before extracting the specified downloaded update.
-
- @param updater The SUUpdater instance.
- @param item The appcast item corresponding to the update that is proposed to be extracted.
- */
-- (void)updater:(SPUUpdater *)updater willExtractUpdate:(SUAppcastItem *)item;
-
-/**
- Called immediately after extracting the specified downloaded update.
-
- @param updater The SUUpdater instance.
- @param item The appcast item corresponding to the update that has been extracted.
- */
-- (void)updater:(SPUUpdater *)updater didExtractUpdate:(SUAppcastItem *)item;
-
-/**
- Called immediately before installing the specified update.
-
- @param updater The updater instance.
- @param item The appcast item corresponding to the update that is proposed to be installed.
- */
-- (void)updater:(SPUUpdater *)updater willInstallUpdate:(SUAppcastItem *)item;
-
-/**
- Returns whether the relaunch should be delayed in order to perform other tasks.
-
- This is not called if the user didn't relaunch on the previous update,
- in that case it will immediately restart.
-
- This may also not be called if the application is not going to relaunch after it terminates.
-
- @param updater The updater instance.
- @param item The appcast item corresponding to the update that is proposed to be installed.
- @param installHandler The install handler that must be completed before continuing with the relaunch.
-
- @return @c YES to delay the relaunch until @c installHandler is invoked.
- */
-- (BOOL)updater:(SPUUpdater *)updater shouldPostponeRelaunchForUpdate:(SUAppcastItem *)item untilInvokingBlock:(void (^)(void))installHandler;
-
-/**
- Returns whether the application should be relaunched at all.
-
- Some apps **cannot** be relaunched under certain circumstances.
- This method can be used to explicitly prevent a relaunch.
-
- @param updater The updater instance.
- @return @c YES if the updater should be relaunched, otherwise @c NO if it shouldn't.
- */
-- (BOOL)updaterShouldRelaunchApplication:(SPUUpdater *)updater;
-
-/**
- Called immediately before relaunching.
-
- @param updater The updater instance.
- */
-- (void)updaterWillRelaunchApplication:(SPUUpdater *)updater;
-
-/**
- Returns an object that compares version numbers to determine their arithmetic relation to each other.
-
- This method allows you to provide a custom version comparator.
- If you don't implement this method or return @c nil,
- the standard version comparator will be used.
-
- Note that the standard version comparator may be used during installation for preventing a downgrade,
- even if you provide a custom comparator here.
-
- @param updater The updater instance.
- @return The custom version comparator or @c nil if you don't want to be delegated this task.
- */
-- (nullable id)versionComparatorForUpdater:(SPUUpdater *)updater;
-
-/**
- Called when a background update will be scheduled after a delay.
-
- Automatic update checks need to be enabled for this to trigger.
-
- @param delay The delay in seconds until the next scheduled update will occur. This is an approximation and may vary due to system state.
-
- @param updater The updater instance.
- */
-- (void)updater:(SPUUpdater *)updater willScheduleUpdateCheckAfterDelay:(NSTimeInterval)delay;
-
-/**
- Called when no update checks will be scheduled in the future.
-
- This may later change if automatic update checks become enabled.
-
- @param updater The updater instance.
- */
-- (void)updaterWillNotScheduleUpdateCheck:(SPUUpdater *)updater;
-
-/**
- Returns the decryption password (if any) which is used to extract the update archive DMG.
-
- Return @c nil if no password should be used.
-
- @param updater The updater instance.
- @return The password used for decrypting the archive, or @c nil if no password should be used.
- */
-- (nullable NSString *)decryptionPasswordForUpdater:(SPUUpdater *)updater;
-
-/**
- Called when an update is scheduled to be silently installed on quit after downloading the update automatically.
-
- If the updater is given responsibility, it can later remind the user an update is available if they have not terminated the application for a long time.
-
- Also if the updater is given responsibility and the update item is marked critical, the new update will be presented to the user immediately after.
-
- Even if the @c immediateInstallHandler is not invoked, the installer will attempt to install the update on termination.
-
- @param updater The updater instance.
- @param item The appcast item corresponding to the update that is proposed to be installed.
- @param immediateInstallHandler The install handler for the delegate to immediately install the update. No UI interaction will be shown and the application will be relaunched after installation. This handler can only be used if @c YES is returned and the delegate handles installing the update. For Sparkle 2.3 onwards, this handler can be invoked multiple times in case the application cancels the termination request.
- @return @c YES if the delegate will handle installing the update or @c NO if the updater should be given responsibility.
- */
-- (BOOL)updater:(SPUUpdater *)updater willInstallUpdateOnQuit:(SUAppcastItem *)item immediateInstallationBlock:(void (^)(void))immediateInstallHandler;
-
-/**
- Called after the update driver aborts due to an error.
-
- The update driver runs when checking for updates. This delegate method is called an error occurs during this process.
-
- Some special possible values of `error.code` are:
-
- - `SUNoUpdateError`: No new update was found.
- - `SUInstallationCanceledError`: The user canceled installing the update when requested for authorization.
-
- @param updater The updater instance.
- @param error The error that caused the update driver to abort.
- */
-- (void)updater:(SPUUpdater *)updater didAbortWithError:(NSError *)error;
-
-/**
- Called after the update driver finishes.
-
- The update driver runs when checking for updates. This delegate method is called when that check is finished.
-
- An update may be scheduled to be installed during the update cycle, or no updates may be found, or an available update may be dismissed or skipped (which is the same as no error).
-
- If the @c error is @c nil, no error has occurred.
-
- Some special possible values of `error.code` are:
-
- - `SUNoUpdateError`: No new update was found.
- - `SUInstallationCanceledError`: The user canceled installing the update when requested for authorization.
-
- @param updater The updater instance.
- @param updateCheck The type of update check was performed.
- @param error The error that caused the update driver to abort. This is @c nil if the update driver finished normally and there is no error.
- */
-- (void)updater:(SPUUpdater *)updater didFinishUpdateCycleForUpdateCheck:(SPUUpdateCheck)updateCheck error:(nullable NSError *)error;
-
-/* Deprecated methods */
-
-- (BOOL)updaterMayCheckForUpdates:(SPUUpdater *)updater __deprecated_msg("Please use -[SPUUpdaterDelegate updater:mayPerformUpdateCheck:error:] instead.");
-
-- (void)updater:(SPUUpdater *)updater userDidSkipThisVersion:(SUAppcastItem *)item __deprecated_msg("Please use -[SPUUpdaterDelegate updater:userDidMakeChoice:forUpdate:state:] instead.");
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUUpdaterSettings.h b/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUUpdaterSettings.h
deleted file mode 100644
index a480a42aa..000000000
--- a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUUpdaterSettings.h
+++ /dev/null
@@ -1,60 +0,0 @@
-//
-// SPUUpdaterSettings.h
-// Sparkle
-//
-// Created by Mayur Pawashe on 3/27/16.
-// Copyright © 2016 Sparkle Project. All rights reserved.
-//
-
-#import
-#import
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- This class can be used for reading certain updater settings.
-
- It retrieves the settings by first looking into the host's user defaults.
- If the setting is not found in there, then the host's Info.plist file is looked at.
- */
-SU_EXPORT @interface SPUUpdaterSettings : NSObject
-
-- (instancetype)initWithHostBundle:(NSBundle *)hostBundle;
-
-/**
- * Indicates whether or not automatic update checks are enabled.
- */
-@property (readonly, nonatomic) BOOL automaticallyChecksForUpdates;
-
-/**
- * The regular update check interval.
- */
-@property (readonly, nonatomic) NSTimeInterval updateCheckInterval;
-
-/**
- * Indicates whether or not automatically downloading updates is allowed to be turned on by the user.
- * If this value is nil, the developer has not explicitly specified this option.
- */
-@property (readonly, nonatomic, nullable) NSNumber *allowsAutomaticUpdatesOption;
-
-/**
- * Indicates whether or not automatically downloading updates is allowed to be turned on by the user.
- */
-@property (readonly, nonatomic) BOOL allowsAutomaticUpdates;
-
-/**
- * Indicates whether or not automatically downloading updates is enabled by the user or developer.
- *
- * Note this does not indicate whether or not automatic downloading of updates is allowable.
- * See `-allowsAutomaticUpdates` property for that.
- */
-@property (readonly, nonatomic) BOOL automaticallyDownloadsUpdates;
-
-/**
- * Indicates whether or not anonymous system profile information is sent when checking for updates.
- */
-@property (readonly, nonatomic) BOOL sendsSystemProfile;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUUserDriver.h b/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUUserDriver.h
deleted file mode 100644
index 22cc1670b..000000000
--- a/Pods/Sparkle/Sparkle.framework/Versions/B/Headers/SPUUserDriver.h
+++ /dev/null
@@ -1,287 +0,0 @@
-//
-// SPUUserDriver.h
-// Sparkle
-//
-// Created by Mayur Pawashe on 2/14/16.
-// Copyright © 2016 Sparkle Project. All rights reserved.
-//
-
-#import
-
-#import
-#import