Skip to content

Commit 578ccee

Browse files
author
Christian Elies
committed
feat(): implemented support for macOS
1 parent fc139a9 commit 578ccee

12 files changed

+55
-34
lines changed

Sources/RemoteImage/private/Models/RemoteImageState.swift

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@
66
// Copyright © 2019 Christian Elies. All rights reserved.
77
//
88

9-
#if canImport(UIKit)
10-
import UIKit
9+
import Foundation
1110

1211
enum RemoteImageState: Hashable {
1312
case error(_ error: NSError)
14-
case image(_ image: UIImage)
13+
case image(_ image: UniversalImage)
1514
case loading
1615
}
1716

@@ -23,11 +22,10 @@ extension RemoteImageState {
2322
return error
2423
}
2524

26-
var image: UIImage? {
25+
var image: UniversalImage? {
2726
guard case let RemoteImageState.image(uiImage) = self else {
2827
return nil
2928
}
3029
return uiImage
3130
}
3231
}
33-
#endif

Sources/RemoteImage/private/Protocols/RemoteImageServiceProtocol.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// Created by Christian Elies on 15.12.19.
66
//
77

8-
#if canImport(UIKit)
98
import Combine
109

1110
protocol RemoteImageServiceProtocol where Self: ObservableObject {
@@ -15,4 +14,3 @@ protocol RemoteImageServiceProtocol where Self: ObservableObject {
1514
var state: RemoteImageState { get set }
1615
func fetchImage(ofType type: RemoteImageType)
1716
}
18-
#endif
Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
11
//
22
// DefaultRemoteImageCache.swift
3-
//
3+
// RemoteImage
44
//
55
// Created by Christian Elies on 14.12.19.
66
//
77

8-
#if canImport(UIKit)
9-
import UIKit
8+
import Foundation
109

1110
struct DefaultRemoteImageCache {
12-
let cache = NSCache<AnyObject, UIImage>()
11+
let cache = NSCache<AnyObject, UniversalImage>()
1312
}
1413

1514
extension DefaultRemoteImageCache: RemoteImageCache {
16-
func object(forKey key: AnyObject) -> UIImage? { cache.object(forKey: key) }
15+
func object(forKey key: AnyObject) -> UniversalImage? { cache.object(forKey: key) }
1716

18-
func setObject(_ object: UIImage, forKey key: AnyObject) { cache.setObject(object, forKey: key) }
17+
func setObject(_ object: UniversalImage, forKey key: AnyObject) { cache.setObject(object, forKey: key) }
1918

2019
func removeObject(forKey key: AnyObject) { cache.removeObject(forKey: key) }
2120

2221
func removeAllObjects() { cache.removeAllObjects() }
2322
}
24-
#endif

Sources/RemoteImage/private/Services/PhotoKitService.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
//
2+
// PhotoKitService.swift
3+
// RemoteImage
4+
//
5+
// Created by Christian Elies.
6+
//
7+
18
import Photos
29

310
protocol PhotoKitServiceProvider {

Sources/RemoteImage/private/Services/RemoteImageServiceDependencies.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//
22
// RemoteImageServiceDependencies.swift
3-
//
3+
// RemoteImage
44
//
55
// Created by Christian Elies on 29.10.19.
66
//

Sources/RemoteImage/public/Models/PhotoKitServiceError.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
//
2+
// PhotoKitServiceError.swift
3+
// RemoteImage
4+
//
5+
// Created by Christian Elies.
6+
//
7+
18
import Foundation
29

310
public enum PhotoKitServiceError: Error {

Sources/RemoteImage/public/Models/RemoteImageType.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//
22
// RemoteImageType.swift
3-
//
3+
// RemoteImage
44
//
55
// Created by Christian Elies on 29.10.19.
66
//
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//
2+
// UniversalImage.swift
3+
// RemoteImage
4+
//
5+
// Created by Christian Elies on 01.11.20.
6+
//
7+
8+
#if os(iOS)
9+
import UIKit
10+
11+
public typealias UniversalImage = UIImage
12+
13+
#elseif os(macOS)
14+
15+
import AppKit
16+
17+
public typealias UniversalImage = NSImage
18+
19+
#endif
Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
11
//
22
// RemoteImageCache.swift
3-
//
3+
// RemoteImage
44
//
55
// Created by Christian Elies on 14.12.19.
66
//
77

8-
#if canImport(UIKit)
9-
import UIKit
10-
118
public protocol RemoteImageCache {
12-
func object(forKey key: AnyObject) -> UIImage?
13-
func setObject(_ object: UIImage, forKey key: AnyObject)
9+
func object(forKey key: AnyObject) -> UniversalImage?
10+
func setObject(_ object: UniversalImage, forKey key: AnyObject)
1411
func removeObject(forKey key: AnyObject)
1512
func removeAllObjects()
1613
}
17-
#endif

Sources/RemoteImage/public/Services/RemoteImageService.swift

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@
66
// Copyright © 2019 Christian Elies. All rights reserved.
77
//
88

9-
#if canImport(UIKit)
109
import Combine
11-
import UIKit
10+
import Foundation
1211

1312
public typealias RemoteImageCacheKeyProvider = (RemoteImageType) -> AnyObject
1413

@@ -53,7 +52,7 @@ private extension RemoteImageService {
5352
let urlRequest = URLRequest(url: url)
5453

5554
cancellable = dependencies.remoteImageURLDataPublisher.dataPublisher(for: urlRequest)
56-
.map { UIImage(data: $0.data) }
55+
.map { UniversalImage(data: $0.data) }
5756
.receive(on: RunLoop.main)
5857
.sink(receiveCompletion: { [weak self] completion in
5958
guard let weakSelf = self else {
@@ -89,7 +88,7 @@ private extension RemoteImageService {
8988
dependencies.photoKitService.getPhotoData(localIdentifier: localIdentifier) { result in
9089
switch result {
9190
case .success(let data):
92-
if let image = UIImage(data: data) {
91+
if let image = UniversalImage(data: data) {
9392
Self.cache.setObject(image, forKey: cacheKey)
9493
self.state = .image(image)
9594
} else {
@@ -101,4 +100,3 @@ private extension RemoteImageService {
101100
}
102101
}
103102
}
104-
#endif
Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
11
//
22
// RemoteImageServiceFactory.swift
3-
//
3+
// RemoteImage
44
//
55
// Created by Christian Elies on 29.10.19.
66
//
77

8-
#if canImport(UIKit)
9-
import Foundation
10-
118
public final class RemoteImageServiceFactory {
129
public static func makeRemoteImageService() -> RemoteImageService {
1310
let dependencies = RemoteImageServiceDependencies()
1411
return RemoteImageService(dependencies: dependencies)
1512
}
1613
}
17-
#endif

Sources/RemoteImage/public/Views/RemoteImage.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
// Copyright © 2019 Christian Elies. All rights reserved.
77
//
88

9-
#if canImport(SwiftUI) && canImport(UIKit)
9+
#if canImport(SwiftUI)
1010
import Combine
1111
import SwiftUI
1212

@@ -25,7 +25,11 @@ public struct RemoteImage<ErrorView: View, ImageView: View, LoadingView: View>:
2525
case let .error(error):
2626
errorView(error)
2727
case let .image(uiImage):
28+
#if os(macOS)
29+
imageView(Image(nsImage: uiImage))
30+
#elseif os(iOS)
2831
imageView(Image(uiImage: uiImage))
32+
#endif
2933
}
3034
}
3135

0 commit comments

Comments
 (0)