diff --git a/Scripts/removePublicDeclarations.sh b/Scripts/removePublicDeclarations.sh index 5e68c3ea..609d96cc 100755 --- a/Scripts/removePublicDeclarations.sh +++ b/Scripts/removePublicDeclarations.sh @@ -29,13 +29,38 @@ do if [[ $directory == *"Nuke"* ]]; then replaceDeclaration 'var log' 'var nukeLog' $f replaceDeclaration 'log =' 'nukeLog =' $f + replaceDeclaration 'log: log' 'log: nukeLog' $f replaceDeclaration 'signpost(log' 'signpost(nukeLog' $f replaceDeclaration ' Cache(' ' NukeCache(' $f replaceDeclaration ' Cache<' ' NukeCache<' $f + replaceDeclaration ' Image?' ' NukeImage?' $f + replaceDeclaration ' Image(' ' NukeImage(' $f + replaceDeclaration 'struct Image:' 'struct NukeImage:' $f + replaceDeclaration 'extension Image {' 'extension NukeImage {' $f + replaceDeclaration 'Content == Image' 'Content == NukeImage' $f + replaceDeclaration ' VideoPlayerView' ' NukeVideoPlayerView' $f + replaceDeclaration 'typealias Color' 'typealias NukeColor' $f + replaceDeclaration 'extension Color' 'extension NukeColor' $f + replaceDeclaration 'AssetType' 'NukeAssetType' $f + replaceDeclaration 'typealias ImageRequest = Nuke.ImageRequest' '' $f + replaceDeclaration 'typealias ImageResponse = Nuke.ImageResponse' '' $f + replaceDeclaration 'typealias ImagePipeline = Nuke.ImagePipeline' '' $f + replaceDeclaration 'typealias ImageContainer = Nuke.ImageContainer' '' $f + replaceDeclaration 'open class ' '' $f + replaceDeclaration 'import Nuke' '' $f # Remove Cancellable interface duplicate if [[ $f == *"DataLoader"* && `head -10 $f` == *"protocol Cancellable"* ]]; then `sed -i '' -e '7,11d' $f` fi + + # Rename files + if [[ $f == *"Cache.swift"* ]]; then + new_f="${f/Cache.swift/NukeCache.swift}" + mv $f $new_f + elif [[ $f == *"VideoPlayerView.swift"* ]]; then + new_f="${f/VideoPlayerView.swift/NukeVideoPlayerView.swift}" + mv $f $new_f + fi fi done diff --git a/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelViewModel.swift b/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelViewModel.swift index fc468225..dbef511f 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelViewModel.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/ChatChannelViewModel.swift @@ -3,7 +3,6 @@ // import Combine -import Nuke import StreamChat import SwiftUI @@ -163,7 +162,7 @@ open class ChatChannelViewModel: ObservableObject, MessagesDataSource { @objc private func didReceiveMemoryWarning() { - Nuke.ImageCache.shared.removeAll() + ImageCache.shared.removeAll() messageCachingUtils.clearCache() } @@ -511,7 +510,7 @@ open class ChatChannelViewModel: ObservableObject, MessagesDataSource { messageCachingUtils.clearCache() if messageController == nil { utils.channelControllerFactory.clearCurrentController() - Nuke.ImageCache.shared.trim(toCost: utils.messageListConfig.cacheSizeOnChatDismiss) + ImageCache.shared.trim(toCost: utils.messageListConfig.cacheSizeOnChatDismiss) } } } diff --git a/Sources/StreamChatSwiftUI/ChatChannel/Gallery/ZoomableScrollView.swift b/Sources/StreamChatSwiftUI/ChatChannel/Gallery/ZoomableScrollView.swift index e7c64739..e3f764a4 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/Gallery/ZoomableScrollView.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/Gallery/ZoomableScrollView.swift @@ -89,14 +89,14 @@ private struct ZoomableScrollViewImpl: UIViewControllerRepresenta updateConstraintsCancellable = scrollView.publisher(for: \.bounds).map(\.size).removeDuplicates() .sink { [unowned self] _ in view.setNeedsUpdateConstraints() - } - doubleTapCancellable = doubleTap.sink { [unowned self] in handleDoubleTap() } + } as! any Cancellable // FIXME + doubleTapCancellable = doubleTap.sink { [unowned self] in handleDoubleTap() } as! any Cancellable // FIXME } func update(content: Content, doubleTap: AnyPublisher) { coordinator.hostingController.rootView = content scrollView.setNeedsUpdateConstraints() - doubleTapCancellable = doubleTap.sink { [unowned self] in handleDoubleTap() } + doubleTapCancellable = doubleTap.sink { [unowned self] in handleDoubleTap() } as! any Cancellable // FIXME } func handleDoubleTap() { diff --git a/Sources/StreamChatSwiftUI/ChatChannel/MessageList/GiphyAttachmentView.swift b/Sources/StreamChatSwiftUI/ChatChannel/MessageList/GiphyAttachmentView.swift index e2541f4a..01fb1c6b 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/MessageList/GiphyAttachmentView.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/MessageList/GiphyAttachmentView.swift @@ -2,8 +2,6 @@ // Copyright © 2023 Stream.io Inc. All rights reserved. // -import Nuke -import NukeUI import StreamChat import SwiftUI @@ -106,7 +104,7 @@ struct LazyGiphyView: View { var body: some View { LazyImage(imageURL: source) { state in if let imageContainer = state.imageContainer { - Image(imageContainer) + NukeImage(imageContainer) } else if state.error != nil { Color(.secondarySystemBackground) } else { diff --git a/Sources/StreamChatSwiftUI/ChatChannel/MessageList/ImageAttachmentView.swift b/Sources/StreamChatSwiftUI/ChatChannel/MessageList/ImageAttachmentView.swift index da4d40a6..7e200650 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/MessageList/ImageAttachmentView.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/MessageList/ImageAttachmentView.swift @@ -2,8 +2,6 @@ // Copyright © 2023 Stream.io Inc. All rights reserved. // -import Nuke -import NukeUI import StreamChat import SwiftUI diff --git a/Sources/StreamChatSwiftUI/ChatChannel/MessageList/LinkAttachmentView.swift b/Sources/StreamChatSwiftUI/ChatChannel/MessageList/LinkAttachmentView.swift index 33200af9..6cd13498 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/MessageList/LinkAttachmentView.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/MessageList/LinkAttachmentView.swift @@ -2,8 +2,6 @@ // Copyright © 2023 Stream.io Inc. All rights reserved. // -import Nuke -import NukeUI import StreamChat import SwiftUI diff --git a/Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageAvatarView.swift b/Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageAvatarView.swift index 1795f32e..5602a621 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageAvatarView.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageAvatarView.swift @@ -2,7 +2,6 @@ // Copyright © 2023 Stream.io Inc. All rights reserved. // -import NukeUI import StreamChat import SwiftUI diff --git a/Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageContainerView.swift b/Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageContainerView.swift index e6a4e413..f6d48838 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageContainerView.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageContainerView.swift @@ -3,8 +3,6 @@ // import AVKit -import Nuke -import NukeUI import StreamChat import SwiftUI diff --git a/Sources/StreamChatSwiftUI/ChatChannel/MessageList/QuotedMessageView.swift b/Sources/StreamChatSwiftUI/ChatChannel/MessageList/QuotedMessageView.swift index 679290bc..57baab42 100644 --- a/Sources/StreamChatSwiftUI/ChatChannel/MessageList/QuotedMessageView.swift +++ b/Sources/StreamChatSwiftUI/ChatChannel/MessageList/QuotedMessageView.swift @@ -2,8 +2,6 @@ // Copyright © 2023 Stream.io Inc. All rights reserved. // -import Nuke -import NukeUI import StreamChat import SwiftUI diff --git a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Caching/Cache.swift b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Caching/NukeCache.swift similarity index 100% rename from Sources/StreamChatSwiftUI/StreamNuke/Nuke/Caching/Cache.swift rename to Sources/StreamChatSwiftUI/StreamNuke/Nuke/Caching/NukeCache.swift diff --git a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Decoding/AssetType.swift b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Decoding/AssetType.swift index 1857a862..79800ae2 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Decoding/AssetType.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Decoding/AssetType.swift @@ -5,7 +5,7 @@ import Foundation /// A uniform type identifier (UTI). -struct AssetType: ExpressibleByStringLiteral, Hashable, Sendable { +struct NukeAssetType: ExpressibleByStringLiteral, Hashable, Sendable { let rawValue: String init(rawValue: String) { @@ -16,42 +16,42 @@ struct AssetType: ExpressibleByStringLiteral, Hashable, Sendable { self.rawValue = value } - static let png: AssetType = "public.png" - static let jpeg: AssetType = "public.jpeg" - static let gif: AssetType = "com.compuserve.gif" + static let png: NukeAssetType = "public.png" + static let jpeg: NukeAssetType = "public.jpeg" + static let gif: NukeAssetType = "com.compuserve.gif" /// HEIF (High Efficiency Image Format) by Apple. - static let heic: AssetType = "public.heic" + static let heic: NukeAssetType = "public.heic" /// WebP /// /// Native decoding support only available on the following platforms: macOS 11, /// iOS 14, watchOS 7, tvOS 14. - static let webp: AssetType = "public.webp" + static let webp: NukeAssetType = "public.webp" - static let mp4: AssetType = "public.mpeg4" + static let mp4: NukeAssetType = "public.mpeg4" /// The M4V file format is a video container format developed by Apple and /// is very similar to the MP4 format. The primary difference is that M4V /// files may optionally be protected by DRM copy protection. - static let m4v: AssetType = "public.m4v" + static let m4v: NukeAssetType = "public.m4v" - static let mov: AssetType = "public.mov" + static let mov: NukeAssetType = "public.mov" var isVideo: Bool { self == .mp4 || self == .m4v || self == .mov } } -extension AssetType { +extension NukeAssetType { /// Determines a type of the image based on the given data. init?(_ data: Data) { - guard let type = AssetType.make(data) else { + guard let type = NukeAssetType.make(data) else { return nil } self = type } - private static func make(_ data: Data) -> AssetType? { + private static func make(_ data: Data) -> NukeAssetType? { func _match(_ numbers: [UInt8?], offset: Int = 0) -> Bool { guard data.count >= numbers.count else { return false diff --git a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Decoding/ImageDecoders+Default.swift b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Decoding/ImageDecoders+Default.swift index ba77bdbd..cf19bebd 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Decoding/ImageDecoders+Default.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Decoding/ImageDecoders+Default.swift @@ -59,7 +59,7 @@ extension ImageDecoders { guard let image = makeImage() else { throw ImageDecodingError.unknown } - let type = AssetType(data) + let type = NukeAssetType(data) var container = ImageContainer(image: image) container.type = type if type == .gif { @@ -78,7 +78,7 @@ extension ImageDecoders { lock.lock() defer { lock.unlock() } - let assetType = AssetType(data) + let assetType = NukeAssetType(data) if assetType == .gif { // Special handling for GIF if !isPreviewForGIFGenerated, let image = ImageDecoders.Default._decode(data, scale: scale) { isPreviewForGIFGenerated = true @@ -99,7 +99,7 @@ extension ImageDecoders { } private func isProgressiveDecodingAllowed(for data: Data) -> Bool { - let assetType = AssetType(data) + let assetType = NukeAssetType(data) // Determined whether the image supports progressive decoding or not // (only proressive JPEG is allowed for now, but you can add support diff --git a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Decoding/ImageDecoders+Empty.swift b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Decoding/ImageDecoders+Empty.swift index b0feb218..b35e3b59 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Decoding/ImageDecoders+Empty.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Decoding/ImageDecoders+Empty.swift @@ -9,7 +9,7 @@ extension ImageDecoders { /// data to the image container. struct Empty: ImageDecoding, Sendable { let isProgressive: Bool - private let assetType: AssetType? + private let assetType: NukeAssetType? var isAsynchronous: Bool { false } @@ -20,7 +20,7 @@ extension ImageDecoders { /// `nil` by default. /// - isProgressive: If `false`, returns nil for every progressive /// scan. `false` by default. - init(assetType: AssetType? = nil, isProgressive: Bool = false) { + init(assetType: NukeAssetType? = nil, isProgressive: Bool = false) { self.assetType = assetType self.isProgressive = isProgressive } diff --git a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Decoding/ImageDecoders+Video.swift b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Decoding/ImageDecoders+Video.swift index eebe34ab..6529e1fc 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Decoding/ImageDecoders+Video.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Decoding/ImageDecoders+Video.swift @@ -10,13 +10,13 @@ import AVKit extension ImageDecoders { final class Video: ImageDecoding, @unchecked Sendable { private var didProducePreview = false - private let type: AssetType + private let type: NukeAssetType var isAsynchronous: Bool { true } private let lock = NSLock() init?(context: ImageDecodingContext) { - guard let type = AssetType(context.data), type.isVideo else { return nil } + guard let type = NukeAssetType(context.data), type.isVideo else { return nil } self.type = type } @@ -28,7 +28,7 @@ extension ImageDecoders { lock.lock() defer { lock.unlock() } - guard let type = AssetType(data), type.isVideo else { return nil } + guard let type = NukeAssetType(data), type.isVideo else { return nil } guard !didProducePreview else { return nil // We only need one preview } @@ -41,7 +41,7 @@ extension ImageDecoders { } } -private func makePreview(for data: Data, type: AssetType) -> PlatformImage? { +private func makePreview(for data: Data, type: NukeAssetType) -> PlatformImage? { let asset = AVDataAsset(data: data, type: type) let generator = AVAssetImageGenerator(asset: asset) guard let cgImage = try? generator.copyCGImage(at: CMTime(value: 0, timescale: 1), actualTime: nil) else { diff --git a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Encoding/ImageEncoders+Default.swift b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Encoding/ImageEncoders+Default.swift index 35f20536..520fe982 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Encoding/ImageEncoders+Default.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Encoding/ImageEncoders+Default.swift @@ -22,7 +22,7 @@ extension ImageEncoders { guard let cgImage = image.cgImage else { return nil } - let type: AssetType + let type: NukeAssetType if cgImage.isOpaque { if isHEIFPreferred && ImageEncoders.ImageIO.isSupported(type: .heic) { type = .heic diff --git a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Encoding/ImageEncoders+ImageIO.swift b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Encoding/ImageEncoders+ImageIO.swift index d140d2a8..0e944926 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Encoding/ImageEncoders+ImageIO.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Encoding/ImageEncoders+ImageIO.swift @@ -13,24 +13,24 @@ extension ImageEncoders { /// write most image file formats. This framework offers high efficiency, /// color management, and access to image metadata. struct ImageIO: ImageEncoding { - let type: AssetType + let type: NukeAssetType let compressionRatio: Float /// - parameter format: The output format. Make sure that the format is /// supported on the current hardware.s /// - parameter compressionRatio: 0.8 by default. - init(type: AssetType, compressionRatio: Float = 0.8) { + init(type: NukeAssetType, compressionRatio: Float = 0.8) { self.type = type self.compressionRatio = compressionRatio } private static let lock = NSLock() - private static var availability = [AssetType: Bool]() + private static var availability = [NukeAssetType: Bool]() /// Returns `true` if the encoding is available for the given format on /// the current hardware. Some of the most recent formats might not be /// available so its best to check before using them. - static func isSupported(type: AssetType) -> Bool { + static func isSupported(type: NukeAssetType) -> Bool { lock.lock() defer { lock.unlock() } if let isAvailable = availability[type] { diff --git a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Encoding/ImageEncoders.swift b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Encoding/ImageEncoders.swift index 397fd887..c65837ae 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Encoding/ImageEncoders.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Encoding/ImageEncoders.swift @@ -14,7 +14,7 @@ extension ImageEncoding where Self == ImageEncoders.Default { } extension ImageEncoding where Self == ImageEncoders.ImageIO { - static func imageIO(type: AssetType, compressionRatio: Float = 0.8) -> ImageEncoders.ImageIO { + static func imageIO(type: NukeAssetType, compressionRatio: Float = 0.8) -> ImageEncoders.ImageIO { ImageEncoders.ImageIO(type: type, compressionRatio: compressionRatio) } } diff --git a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/ImageContainer.swift b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/ImageContainer.swift index ada8b173..dabf7632 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/ImageContainer.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/ImageContainer.swift @@ -29,7 +29,7 @@ struct ImageContainer: @unchecked Sendable { #endif /// An image type. - var type: AssetType? + var type: NukeAssetType? /// Returns `true` if the image in the container is a preview of the image. var isPreview: Bool @@ -53,7 +53,7 @@ struct ImageContainer: @unchecked Sendable { var userInfo: [UserInfoKey: Any] /// Initializes the container with the given image. - init(image: PlatformImage, type: AssetType? = nil, isPreview: Bool = false, data: Data? = nil, userInfo: [UserInfoKey: Any] = [:]) { + init(image: PlatformImage, type: NukeAssetType? = nil, isPreview: Bool = false, data: Data? = nil, userInfo: [UserInfoKey: Any] = [:]) { self.image = image self.type = type self.isPreview = isPreview diff --git a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Internal/AVDataAsset.swift b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Internal/AVDataAsset.swift index 1a53d1b1..e575498c 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Internal/AVDataAsset.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Internal/AVDataAsset.swift @@ -7,7 +7,7 @@ import Foundation #if !os(watchOS) -private extension AssetType { +private extension NukeAssetType { var avFileType: AVFileType? { switch self { case .mp4: return .mp4 @@ -22,7 +22,7 @@ private extension AssetType { final class AVDataAsset: AVURLAsset { private let resourceLoaderDelegate: DataAssetResourceLoader - init(data: Data, type: AssetType?) { + init(data: Data, type: NukeAssetType?) { self.resourceLoaderDelegate = DataAssetResourceLoader( data: data, contentType: type?.avFileType?.rawValue ?? AVFileType.mp4.rawValue diff --git a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Internal/Graphics.swift b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Internal/Graphics.swift index 0acdcb7e..6133dff9 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Internal/Graphics.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Internal/Graphics.swift @@ -302,12 +302,12 @@ enum Screen { } #if os(macOS) -typealias Color = NSColor +typealias NukeColor = NSColor #else -typealias Color = UIColor +typealias NukeColor = UIColor #endif -extension Color { +extension NukeColor { /// 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)) diff --git a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Internal/Log.swift b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Internal/Log.swift index 98fa13ee..39d86899 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Internal/Log.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/Nuke/Internal/Log.swift @@ -8,15 +8,15 @@ import os func signpost(_ object: AnyObject, _ name: StaticString, _ type: OSSignpostType) { guard ImagePipeline.Configuration.isSignpostLoggingEnabled else { return } - let signpostId = OSSignpostID(log: log, object: object) - os_signpost(type, log: log, name: name, signpostID: signpostId) + let signpostId = OSSignpostID(log: nukeLog, object: object) + os_signpost(type, log: nukeLog, name: name, signpostID: signpostId) } func signpost(_ object: AnyObject, _ name: StaticString, _ type: OSSignpostType, _ message: @autoclosure () -> String) { guard ImagePipeline.Configuration.isSignpostLoggingEnabled else { return } - let signpostId = OSSignpostID(log: log, object: object) - os_signpost(type, log: log, name: name, signpostID: signpostId, "%{public}s", message()) + let signpostId = OSSignpostID(log: nukeLog, object: object) + os_signpost(type, log: nukeLog, name: name, signpostID: signpostId, "%{public}s", message()) } func signpost(_ name: StaticString, _ work: () throws -> T) rethrows -> T { @@ -26,15 +26,15 @@ func signpost(_ name: StaticString, _ work: () throws -> T) rethrows -> T { func signpost(_ name: StaticString, _ message: @autoclosure () -> String, _ work: () throws -> T) rethrows -> T { guard ImagePipeline.Configuration.isSignpostLoggingEnabled else { return try work() } - let signpostId = OSSignpostID(log: log) + let signpostId = OSSignpostID(log: nukeLog) let message = message() if !message.isEmpty { - os_signpost(.begin, log: log, name: name, signpostID: signpostId, "%{public}s", message) + os_signpost(.begin, log: nukeLog, name: name, signpostID: signpostId, "%{public}s", message) } else { - os_signpost(.begin, log: log, name: name, signpostID: signpostId) + os_signpost(.begin, log: nukeLog, name: name, signpostID: signpostId) } let result = try work() - os_signpost(.end, log: log, name: name, signpostID: signpostId) + os_signpost(.end, log: nukeLog, name: name, signpostID: signpostId) return result } diff --git a/Sources/StreamChatSwiftUI/StreamNuke/NukeExtensions/ImageLoadingOptions.swift b/Sources/StreamChatSwiftUI/StreamNuke/NukeExtensions/ImageLoadingOptions.swift index 8d1e8941..4baf1199 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/NukeExtensions/ImageLoadingOptions.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/NukeExtensions/ImageLoadingOptions.swift @@ -3,7 +3,7 @@ // Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean). import Foundation -import Nuke + #if !os(macOS) import UIKit.UIImage diff --git a/Sources/StreamChatSwiftUI/StreamNuke/NukeExtensions/ImageViewExtensions.swift b/Sources/StreamChatSwiftUI/StreamNuke/NukeExtensions/ImageViewExtensions.swift index bcd855ab..bc2c0865 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/NukeExtensions/ImageViewExtensions.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/NukeExtensions/ImageViewExtensions.swift @@ -3,7 +3,7 @@ // Copyright (c) 2015-2022 Alexander Grebenyuk (github.com/kean). import Foundation -import Nuke + #if !os(macOS) import UIKit.UIImage diff --git a/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/FetchImage.swift b/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/FetchImage.swift index 6975bb20..584e463c 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/FetchImage.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/FetchImage.swift @@ -4,7 +4,7 @@ import SwiftUI import Combine -import Nuke + /// An observable object that simplifies image loading in SwiftUI. @MainActor diff --git a/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/Image.swift b/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/Image.swift index a6cb1756..13330fcc 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/Image.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/Image.swift @@ -13,7 +13,7 @@ import UIKit #if os(macOS) /// Displays images. Supports animated images and video playback. @MainActor -struct Image: NSViewRepresentable { +struct NukeImage: NSViewRepresentable { let imageContainer: ImageContainer let onCreated: ((ImageView) -> Void)? var isAnimatedImageRenderingEnabled: Bool? @@ -43,7 +43,7 @@ struct Image: NSViewRepresentable { #elseif os(iOS) || os(tvOS) /// Displays images. Supports animated images and video playback. @MainActor -struct Image: UIViewRepresentable { +struct NukeImage: UIViewRepresentable { let imageContainer: ImageContainer let onCreated: ((ImageView) -> Void)? var isAnimatedImageRenderingEnabled: Bool? @@ -73,7 +73,7 @@ struct Image: UIViewRepresentable { #endif #if os(macOS) || os(iOS) || os(tvOS) -extension Image { +extension NukeImage { func updateImageView(_ imageView: ImageView) { if imageView.imageContainer?.image !== imageContainer.image { imageView.imageContainer = imageContainer diff --git a/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/ImageView.swift b/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/ImageView.swift index c6d6f503..5fa66e6b 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/ImageView.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/ImageView.swift @@ -3,7 +3,7 @@ // Copyright (c) 2015-2021 Alexander Grebenyuk (github.com/kean). import Foundation -import Nuke + #if !os(watchOS) @@ -60,7 +60,7 @@ class ImageView: _PlatformBaseView { #endif /// Returns an underlying video player view. - var videoPlayerView: VideoPlayerView { + var videoPlayerView: NukeVideoPlayerView { if let view = _videoPlayerView { return view } @@ -70,8 +70,8 @@ class ImageView: _PlatformBaseView { return view } - private func makeVideoPlayerView() -> VideoPlayerView { - let view = VideoPlayerView() + private func makeVideoPlayerView() -> NukeVideoPlayerView { + let view = NukeVideoPlayerView() #if os(macOS) view.videoGravity = .resizeAspect #else @@ -80,7 +80,7 @@ class ImageView: _PlatformBaseView { return view } - private var _videoPlayerView: VideoPlayerView? + private var _videoPlayerView: NukeVideoPlayerView? private(set) var customContentView: _PlatformBaseView? { get { _customContentView } diff --git a/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/Internal.swift b/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/Internal.swift index c7d0722d..75f804d1 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/Internal.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/Internal.swift @@ -13,7 +13,7 @@ import UIKit #endif import SwiftUI -import Nuke + #if os(macOS) typealias _PlatformBaseView = NSView diff --git a/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/LazyImage.swift b/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/LazyImage.swift index 6a8b21f9..37fb2c32 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/LazyImage.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/LazyImage.swift @@ -3,15 +3,9 @@ // Copyright (c) 2015-2021 Alexander Grebenyuk (github.com/kean). import Foundation -import Nuke import SwiftUI import Combine -typealias ImageRequest = Nuke.ImageRequest -typealias ImageResponse = Nuke.ImageResponse -typealias ImagePipeline = Nuke.ImagePipeline -typealias ImageContainer = Nuke.ImageContainer - private struct HashableRequest: Hashable { let request: ImageRequest @@ -70,7 +64,7 @@ struct LazyImage: View { /// - Parameters: /// - url: The image URL. /// - resizingMode: The displayed image resizing mode. - init(url: URL?, resizingMode: ImageResizingMode = .aspectFill) where Content == Image { + init(url: URL?, resizingMode: ImageResizingMode = .aspectFill) where Content == NukeImage { self.init(request: url.map { ImageRequest(url: $0) }, resizingMode: resizingMode) } @@ -79,14 +73,14 @@ struct LazyImage: View { /// - Parameters: /// - request: The image request. /// - resizingMode: The displayed image resizing mode. - init(request: ImageRequest?, resizingMode: ImageResizingMode = .aspectFill) where Content == Image { + init(request: ImageRequest?, resizingMode: ImageResizingMode = .aspectFill) where Content == NukeImage { self.request = request.map { HashableRequest(request: $0) } self.resizingMode = resizingMode } // Deprecated in Nuke 11.0 @available(*, deprecated, message: "Please use init(request:) or init(url).") - init(source: (any ImageRequestConvertible)?, resizingMode: ImageResizingMode = .aspectFill) where Content == Image { + init(source: (any ImageRequestConvertible)?, resizingMode: ImageResizingMode = .aspectFill) where Content == NukeImage { self.init(request: source?.asImageRequest(), resizingMode: resizingMode) } #else @@ -94,7 +88,7 @@ struct LazyImage: View { /// /// - Parameters: /// - url: The image URL. - init(url: URL?) where Content == Image { + init(url: URL?) where Content == NukeImage { self.init(request: url.map { ImageRequest(url: $0) }) } @@ -102,13 +96,13 @@ struct LazyImage: View { /// /// - Parameters: /// - request: The image request. - init(request: ImageRequest?) where Content == Image { + init(request: ImageRequest?) where Content == NukeImage { self.request = request.map { HashableRequest(request: $0) } } // Deprecated in Nuke 11.0 @available(*, deprecated, message: "Please use init(request:) or init(url).") - init(source: (any ImageRequestConvertible)?) where Content == Image { + init(source: (any ImageRequestConvertible)?) where Content == NukeImage { self.request = source.map { HashableRequest(request: $0.asImageRequest()) } } #endif @@ -269,7 +263,7 @@ struct LazyImage: View { model.view } #else - Image(imageContainer) { + NukeImage(imageContainer) { #if os(iOS) || os(tvOS) if let resizingMode = self.resizingMode { $0.resizingMode = resizingMode diff --git a/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/LazyImageState.swift b/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/LazyImageState.swift index ed0eee76..5f18710a 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/LazyImageState.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/LazyImageState.swift @@ -3,7 +3,7 @@ // Copyright (c) 2015-2021 Alexander Grebenyuk (github.com/kean). import Foundation -import Nuke + import SwiftUI import Combine @@ -22,13 +22,13 @@ struct LazyImageState { /// Returns an image view. @MainActor - var image: Image? { + var image: NukeImage? { #if os(macOS) - return imageContainer.map { Image($0) } + return imageContainer.map { NukeImage($0) } #elseif os(watchOS) - return imageContainer.map { Image(uiImage: $0.image) } + return imageContainer.map { NukeImage(uiImage: $0.image) } #else - return imageContainer.map { Image($0) } + return imageContainer.map { NukeImage($0) } #endif } diff --git a/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/LazyImageView.swift b/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/LazyImageView.swift index 1b184095..dcb178ff 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/LazyImageView.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/LazyImageView.swift @@ -3,7 +3,7 @@ // Copyright (c) 2015-2021 Alexander Grebenyuk (github.com/kean). import Foundation -import Nuke + #if !os(watchOS) diff --git a/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/VideoPlayerView.swift b/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/NukeVideoPlayerView.swift similarity index 98% rename from Sources/StreamChatSwiftUI/StreamNuke/NukeUI/VideoPlayerView.swift rename to Sources/StreamChatSwiftUI/StreamNuke/NukeUI/NukeVideoPlayerView.swift index 8f3f1513..f85a0f62 100644 --- a/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/VideoPlayerView.swift +++ b/Sources/StreamChatSwiftUI/StreamNuke/NukeUI/NukeVideoPlayerView.swift @@ -8,7 +8,7 @@ import Foundation #if !os(watchOS) @MainActor -final class VideoPlayerView: _PlatformBaseView { +final class NukeVideoPlayerView: _PlatformBaseView { // MARK: Configuration /// `.resizeAspectFill` by default. diff --git a/Sources/StreamChatSwiftUI/Utils/Common/NukeImageProcessor.swift b/Sources/StreamChatSwiftUI/Utils/Common/NukeImageProcessor.swift index ccadc069..c4747bdc 100644 --- a/Sources/StreamChatSwiftUI/Utils/Common/NukeImageProcessor.swift +++ b/Sources/StreamChatSwiftUI/Utils/Common/NukeImageProcessor.swift @@ -2,7 +2,6 @@ // Copyright © 2023 Stream.io Inc. All rights reserved. // -import Nuke import UIKit public protocol ImageProcessor { diff --git a/Sources/StreamChatSwiftUI/Utils/LazyImageExtensions.swift b/Sources/StreamChatSwiftUI/Utils/LazyImageExtensions.swift index d1d47bf5..f6462007 100644 --- a/Sources/StreamChatSwiftUI/Utils/LazyImageExtensions.swift +++ b/Sources/StreamChatSwiftUI/Utils/LazyImageExtensions.swift @@ -2,13 +2,11 @@ // Copyright © 2023 Stream.io Inc. All rights reserved. // -import Nuke -import NukeUI import SwiftUI extension LazyImage { - public init(imageURL: URL?) where Content == NukeUI.Image { + public init(imageURL: URL?) where Content == NukeImage { let imageCDN = InjectedValues[\.utils].imageCDN guard let imageURL = imageURL else { #if COCOAPODS diff --git a/Sources/StreamChatSwiftUI/Utils/NukeImageLoader.swift b/Sources/StreamChatSwiftUI/Utils/NukeImageLoader.swift index 80d09210..8e1ed454 100644 --- a/Sources/StreamChatSwiftUI/Utils/NukeImageLoader.swift +++ b/Sources/StreamChatSwiftUI/Utils/NukeImageLoader.swift @@ -2,13 +2,13 @@ // Copyright © 2023 Stream.io Inc. All rights reserved. // -import Nuke import StreamChat import UIKit /// The class which is resposible for loading images from URLs. /// Internally uses `Nuke`'s shared object of `ImagePipeline` to load the image. open class NukeImageLoader: ImageLoading { + public init() { // Public init. } @@ -16,7 +16,6 @@ open class NukeImageLoader: ImageLoading { open func loadImage( using urlRequest: URLRequest, cachingKey: String?, - priority: ImageRequest.Priority = .normal, completion: @escaping ((Result) -> Void) ) { var userInfo: [ImageRequest.UserInfoKey: Any]? @@ -60,7 +59,7 @@ open class NukeImageLoader: ImageLoading { group.enter() - loadImage(using: imageRequest, cachingKey: cachingKey, priority: .low) { result in + loadImage(using: imageRequest, cachingKey: cachingKey) { result in switch result { case let .success(image): images.append(image) diff --git a/StreamChatSwiftUI.xcodeproj/project.pbxproj b/StreamChatSwiftUI.xcodeproj/project.pbxproj index 6e0094ec..f452a691 100644 --- a/StreamChatSwiftUI.xcodeproj/project.pbxproj +++ b/StreamChatSwiftUI.xcodeproj/project.pbxproj @@ -31,7 +31,7 @@ 82D64BCD2AD7E5B700C5C79E /* ImageLoadingOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D64B6E2AD7E5B600C5C79E /* ImageLoadingOptions.swift */; }; 82D64BCE2AD7E5B700C5C79E /* ImageViewExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D64B6F2AD7E5B600C5C79E /* ImageViewExtensions.swift */; }; 82D64BCF2AD7E5B700C5C79E /* LazyImageState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D64B712AD7E5B600C5C79E /* LazyImageState.swift */; }; - 82D64BD02AD7E5B700C5C79E /* VideoPlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D64B722AD7E5B600C5C79E /* VideoPlayerView.swift */; }; + 82D64BD02AD7E5B700C5C79E /* NukeVideoPlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D64B722AD7E5B600C5C79E /* NukeVideoPlayerView.swift */; }; 82D64BD12AD7E5B700C5C79E /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D64B732AD7E5B600C5C79E /* Image.swift */; }; 82D64BD22AD7E5B700C5C79E /* FetchImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D64B742AD7E5B600C5C79E /* FetchImage.swift */; }; 82D64BD32AD7E5B700C5C79E /* FrameStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D64B772AD7E5B600C5C79E /* FrameStore.swift */; }; @@ -105,7 +105,7 @@ 82D64C172AD7E5B700C5C79E /* ImageResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D64BC62AD7E5B700C5C79E /* ImageResponse.swift */; }; 82D64C182AD7E5B700C5C79E /* ImageCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D64BC82AD7E5B700C5C79E /* ImageCache.swift */; }; 82D64C192AD7E5B700C5C79E /* DataCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D64BC92AD7E5B700C5C79E /* DataCache.swift */; }; - 82D64C1A2AD7E5B700C5C79E /* Cache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D64BCA2AD7E5B700C5C79E /* Cache.swift */; }; + 82D64C1A2AD7E5B700C5C79E /* NukeCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D64BCA2AD7E5B700C5C79E /* NukeCache.swift */; }; 82D64C1B2AD7E5B700C5C79E /* ImageCaching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D64BCB2AD7E5B700C5C79E /* ImageCaching.swift */; }; 82D64C1C2AD7E5B700C5C79E /* DataCaching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D64BCC2AD7E5B700C5C79E /* DataCaching.swift */; }; 8400A345282C05F60067D3A0 /* StreamChatWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8400A344282C05F60067D3A0 /* StreamChatWrapper.swift */; }; @@ -526,7 +526,7 @@ 82D64B6E2AD7E5B600C5C79E /* ImageLoadingOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageLoadingOptions.swift; sourceTree = ""; }; 82D64B6F2AD7E5B600C5C79E /* ImageViewExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageViewExtensions.swift; sourceTree = ""; }; 82D64B712AD7E5B600C5C79E /* LazyImageState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LazyImageState.swift; sourceTree = ""; }; - 82D64B722AD7E5B600C5C79E /* VideoPlayerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoPlayerView.swift; sourceTree = ""; }; + 82D64B722AD7E5B600C5C79E /* NukeVideoPlayerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NukeVideoPlayerView.swift; sourceTree = ""; }; 82D64B732AD7E5B600C5C79E /* Image.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Image.swift; sourceTree = ""; }; 82D64B742AD7E5B600C5C79E /* FetchImage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchImage.swift; sourceTree = ""; }; 82D64B772AD7E5B600C5C79E /* FrameStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FrameStore.swift; sourceTree = ""; }; @@ -600,7 +600,7 @@ 82D64BC62AD7E5B700C5C79E /* ImageResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageResponse.swift; sourceTree = ""; }; 82D64BC82AD7E5B700C5C79E /* ImageCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageCache.swift; sourceTree = ""; }; 82D64BC92AD7E5B700C5C79E /* DataCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataCache.swift; sourceTree = ""; }; - 82D64BCA2AD7E5B700C5C79E /* Cache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Cache.swift; sourceTree = ""; }; + 82D64BCA2AD7E5B700C5C79E /* NukeCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NukeCache.swift; sourceTree = ""; }; 82D64BCB2AD7E5B700C5C79E /* ImageCaching.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageCaching.swift; sourceTree = ""; }; 82D64BCC2AD7E5B700C5C79E /* DataCaching.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataCaching.swift; sourceTree = ""; }; 82E8D79C2902B949008A8F78 /* StreamChatSwiftUITestsApp.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = StreamChatSwiftUITestsApp.entitlements; sourceTree = ""; }; @@ -1043,7 +1043,7 @@ isa = PBXGroup; children = ( 82D64B712AD7E5B600C5C79E /* LazyImageState.swift */, - 82D64B722AD7E5B600C5C79E /* VideoPlayerView.swift */, + 82D64B722AD7E5B600C5C79E /* NukeVideoPlayerView.swift */, 82D64B732AD7E5B600C5C79E /* Image.swift */, 82D64B742AD7E5B600C5C79E /* FetchImage.swift */, 82D64B752AD7E5B600C5C79E /* Gifu */, @@ -1228,7 +1228,7 @@ children = ( 82D64BC82AD7E5B700C5C79E /* ImageCache.swift */, 82D64BC92AD7E5B700C5C79E /* DataCache.swift */, - 82D64BCA2AD7E5B700C5C79E /* Cache.swift */, + 82D64BCA2AD7E5B700C5C79E /* NukeCache.swift */, 82D64BCB2AD7E5B700C5C79E /* ImageCaching.swift */, 82D64BCC2AD7E5B700C5C79E /* DataCaching.swift */, ); @@ -2311,7 +2311,7 @@ 82D64C032AD7E5B700C5C79E /* RateLimiter.swift in Sources */, 82D64BEA2AD7E5B700C5C79E /* TaskFetchOriginalImageData.swift in Sources */, 82D64BDB2AD7E5B700C5C79E /* UIImageView.swift in Sources */, - 82D64BD02AD7E5B700C5C79E /* VideoPlayerView.swift in Sources */, + 82D64BD02AD7E5B700C5C79E /* NukeVideoPlayerView.swift in Sources */, 84AB7B262773619F00631A10 /* MentionUsersView.swift in Sources */, 8465FDA82746A95700AF091E /* ImageLoading.swift in Sources */, 8465FDBE2746A95700AF091E /* MoreChannelActionsView.swift in Sources */, @@ -2447,7 +2447,7 @@ 846608E5278C865200D3D7B3 /* TypingIndicatorPlacement.swift in Sources */, 82D64B6B2AD7E5AC00C5C79E /* NSImageView+SwiftyGif.swift in Sources */, 8465FDA72746A95700AF091E /* KeyboardHandling.swift in Sources */, - 82D64C1A2AD7E5B700C5C79E /* Cache.swift in Sources */, + 82D64C1A2AD7E5B700C5C79E /* NukeCache.swift in Sources */, 8465FDD72746A95800AF091E /* Appearance.swift in Sources */, 82D64BE22AD7E5B700C5C79E /* ImagePipeline.swift in Sources */, 82D64BF42AD7E5B700C5C79E /* ImageProcessors.swift in Sources */, diff --git a/StreamChatSwiftUITests/Tests/ChatChannel/LazyImageExtensions_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannel/LazyImageExtensions_Tests.swift index f3a770fd..0de0d519 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannel/LazyImageExtensions_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannel/LazyImageExtensions_Tests.swift @@ -2,7 +2,6 @@ // Copyright © 2023 Stream.io Inc. All rights reserved. // -import NukeUI import SnapshotTesting @testable import StreamChat @testable import StreamChatSwiftUI