Skip to content

Commit cea89d3

Browse files
committed
feat: Update package structure
- Avoid system frameworks imports in Interface declarations
1 parent 59a2e0b commit cea89d3

File tree

7 files changed

+255
-215
lines changed

7 files changed

+255
-215
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
#if !os(watchOS)
2-
import AppTrackingTransparency
3-
#endif
4-
51
public struct IDFAPermissionsClient {
62
public init(
73
requestAuthorizationStatus: Operations.RequestAuthorizationStatus,
@@ -19,41 +15,61 @@ public struct IDFAPermissionsClient {
1915
}
2016

2117
extension IDFAPermissionsClient {
22-
public enum AuthorizationStatus: String, Equatable {
23-
case notDetermined = "Not Determined"
24-
case restricted = "Restricted"
25-
case denied = "Denied"
26-
case authorized = "Authorized"
27-
case unknown = "Unknown"
28-
case unavailableWithTrackingEnabled = "Unavailable: Tracking Enabled"
29-
case unavailableWithTrackingDisabled = "Unavailable: Tracking Disabled"
30-
31-
#if !os(watchOS)
32-
@available(iOS 14, macOS 11, tvOS 14, *)
33-
public init(_ status: ATTrackingManager.AuthorizationStatus) {
34-
switch status {
35-
case .notDetermined: self = .notDetermined
36-
case .authorized: self = .authorized
37-
case .restricted: self = .restricted
38-
case .denied: self = .denied
39-
@unknown default: self = .unknown
18+
public struct AuthorizationStatus: RawRepresentable, Equatable {
19+
public enum RawValue: Equatable {
20+
public enum TrackingManagerStatus: Int, Equatable {
21+
case notDetermined = 0
22+
case restricted = 1
23+
case denied = 2
24+
case authorized = 3
4025
}
26+
27+
case trackingManager(TrackingManagerStatus)
28+
case identifierManager(isTrackingEnabled: Bool)
29+
case unknown
4130
}
4231

43-
@available(iOS 14, macOS 11, *)
44-
public var status: ATTrackingManager.AuthorizationStatus? {
45-
switch self {
46-
case .notDetermined, .unknown: return .notDetermined
47-
case .authorized: return .authorized
48-
case .restricted: return .restricted
49-
case .denied: return .denied
50-
default: return .none
51-
}
32+
public var rawValue: RawValue
33+
34+
public init(rawValue: RawValue) {
35+
self.rawValue = rawValue
36+
}
37+
38+
public static var notDetermined: AuthorizationStatus {
39+
return .init(rawValue: .trackingManager(.notDetermined))
40+
}
41+
42+
public static var restricted: AuthorizationStatus {
43+
return .init(rawValue: .trackingManager(.restricted))
44+
}
45+
46+
public static var denied: AuthorizationStatus {
47+
return .init(rawValue: .trackingManager(.denied))
48+
}
49+
50+
public static var authorized: AuthorizationStatus {
51+
return .init(rawValue: .trackingManager(.authorized))
52+
}
53+
54+
public static var unknown: AuthorizationStatus {
55+
return .init(rawValue: .unknown)
56+
}
57+
58+
public static var unavailableWithTrackingEnabled: AuthorizationStatus {
59+
return .init(rawValue: .identifierManager(isTrackingEnabled: true))
60+
}
61+
62+
public static var unavailableWithTrackingDisabled: AuthorizationStatus {
63+
return .init(rawValue: .identifierManager(isTrackingEnabled: false))
5264
}
53-
#endif
5465

5566
public var isPermissive: Bool {
5667
self == .authorized || self == .unavailableWithTrackingEnabled
5768
}
5869
}
5970
}
71+
72+
public func ~=(
73+
rhs: IDFAPermissionsClient.AuthorizationStatus,
74+
lhs: IDFAPermissionsClient.AuthorizationStatus
75+
) -> Bool { return rhs == lhs }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#if !os(watchOS)
2+
import AppTrackingTransparency
3+
import IDFAPermissionsClient
4+
5+
extension IDFAPermissionsClient.AuthorizationStatus {
6+
@available(iOS 14, macOS 11, tvOS 14, *)
7+
public init(_ status: ATTrackingManager.AuthorizationStatus) {
8+
switch status {
9+
case .notDetermined: self = .notDetermined
10+
case .authorized: self = .authorized
11+
case .restricted: self = .restricted
12+
case .denied: self = .denied
13+
@unknown default: self = .unknown
14+
}
15+
}
16+
17+
@available(iOS 14, macOS 11, tvOS 14, *)
18+
public var status: ATTrackingManager.AuthorizationStatus? {
19+
switch self {
20+
case .notDetermined: return .notDetermined
21+
case .authorized: return .authorized
22+
case .restricted: return .restricted
23+
case .denied: return .denied
24+
default: return .none
25+
}
26+
}
27+
}
28+
#endif

Sources/NotificationsPermissionsClient/NotificationPermissionsClient.swift

-151
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,65 @@
1-
import Combine
2-
import Prelude
3-
4-
extension NotificationsPermissionsClient {
5-
public enum Operations {}
1+
public struct NotificationsPermissionsClient {
2+
public init(
3+
requestAuthorizationStatus: Operations.RequestAuthorizationStatus,
4+
requestAuthorization: Operations.RequestAuthorization,
5+
configureRemoteNotifications: Operations.ConfigureRemoteNotifications
6+
) {
7+
self.requestAuthorizationStatus = requestAuthorizationStatus
8+
self.requestAuthorization = requestAuthorization
9+
self.configureRemoteNotifications = configureRemoteNotifications
10+
}
11+
12+
public var requestAuthorizationStatus: Operations.RequestAuthorizationStatus
13+
public var requestAuthorization: Operations.RequestAuthorization
14+
public var configureRemoteNotifications: Operations.ConfigureRemoteNotifications
615
}
716

8-
extension NotificationsPermissionsClient.Operations {
9-
public struct RequestAuthorizationStatus: Function {
10-
public typealias Input = Void
11-
public typealias Output = AnyPublisher<NotificationsPermissionsClient.AuthorizationStatus, Never>
12-
13-
public init(_ call: @escaping Signature) {
14-
self.call = call
17+
extension NotificationsPermissionsClient {
18+
public struct AuthorizationOptions: OptionSet, Equatable {
19+
public var rawValue: UInt
20+
public init(rawValue: UInt) {
21+
self.rawValue = rawValue
1522
}
1623

17-
public let call: Signature
18-
}
19-
20-
public struct RequestAuthorization: Function {
21-
public typealias Input = NotificationsPermissionsClient.AuthorizationOptions
22-
public typealias Output = AnyPublisher<NotificationsPermissionsClient.AuthorizationStatus, Never>
24+
public static var badge: AuthorizationOptions { .init(rawValue: 1 << 0) }
2325

24-
public init(_ call: @escaping Signature) {
25-
self.call = call
26-
}
26+
public static var sound: AuthorizationOptions { .init(rawValue: 1 << 1) }
2727

28-
public let call: Signature
28+
public static var alert: AuthorizationOptions { .init(rawValue: 1 << 2) }
2929

30-
public func callAsFunction(options: Input) -> Output {
31-
return call(options)
32-
}
30+
public static var carPlay: AuthorizationOptions { .init(rawValue: 1 << 3) }
31+
32+
public static var criticalAlert: AuthorizationOptions { .init(rawValue: 1 << 4) }
33+
34+
public static var providesAppNotificationSettings: AuthorizationOptions { .init(rawValue: 1 << 5) }
35+
36+
public static var provisional: AuthorizationOptions { .init(rawValue: 1 << 6) }
37+
38+
#if os(iOS)
39+
public static var announcement: AuthorizationOptions { .init(rawValue: 1 << 7) }
40+
#endif
3341
}
3442

35-
public struct ConfigureRemoteNotifications: Function {
36-
public enum Input { case register, unregister }
37-
public typealias Output = Void
43+
public enum AuthorizationStatus: Equatable {
44+
case notDetermined
45+
case denied
46+
case authorized
47+
case provisional
3848

39-
public init(_ call: @escaping Signature) {
40-
self.call = call
41-
}
49+
#if os(iOS)
50+
@available(iOS 14.0, *)
51+
case ephemeral
52+
#endif
4253

43-
public let call: Signature
54+
case unknown
55+
56+
public var isPermissive: Bool {
57+
#if os(iOS)
58+
if #available(iOS 14.0, *) {
59+
if self == .ephemeral { return true }
60+
}
61+
#endif
62+
return self == .authorized || self == .provisional
63+
}
4464
}
4565
}

0 commit comments

Comments
 (0)