Skip to content

Commit

Permalink
Merge pull request #181 from JORDYMA-Link/chore/#180
Browse files Browse the repository at this point in the history
[1.1.0][CHORE] AppTrackingTransparency 심사 이슈 수정
  • Loading branch information
kimkyuchul authored Feb 6, 2025
2 parents f365972 + d21f95f commit 8f75f4e
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 14 deletions.
6 changes: 1 addition & 5 deletions Projects/App/Sources/AppDelegateFeature.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ struct AppDelegateFeature {
@Dependency(\.userDefaultsClient) private var userDefault
@Dependency(\.socialLogin) private var socialLogin
@Dependency(\.userNotificationClient) private var userNotificationClient
@Dependency(ATTrackingManagerClient.self) private var attrackingManagerClient
@Dependency(GoogleMobileAdsClient.self) private var googleMobileAdsClient

var body: some ReducerOf<Self> {
Expand Down Expand Up @@ -85,10 +84,7 @@ struct AppDelegateFeature {
}

case .setUpGoogleAds:
return .run { send in
await attrackingManagerClient.requestTrackingAuthorization()
await googleMobileAdsClient.start()
}
return .run { send in await googleMobileAdsClient.start() }

case .setUserNotificationCenterDelegate:
return .run { send in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import DependenciesMacros

@DependencyClient
public struct ATTrackingManagerClient {
public var trackingAuthorizationStatus: @Sendable () -> ATTrackingManager.AuthorizationStatus = { .notDetermined }
public var requestTrackingAuthorization: @Sendable () async -> Void
}

Expand All @@ -22,6 +23,9 @@ extension ATTrackingManagerClient: DependencyKey {
private static func live() -> ATTrackingManagerClient {

return ATTrackingManagerClient(
trackingAuthorizationStatus: {
return ATTrackingManager.trackingAuthorizationStatus
},
requestTrackingAuthorization: { @MainActor in
return await withCheckedContinuation { continuation in
ATTrackingManager.requestTrackingAuthorization { _ in
Expand Down
25 changes: 25 additions & 0 deletions Projects/Feature/Scene/Root/RootFeature.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,13 @@ public struct RootFeature {
case onAppear
case onOpenURL(URL)

// MARK: App LifeCycle
case background
case inactive
case active

// MARK: Inner Business Action
case requestATTrackingAuthorization

// MARK: Inner SetState Action
case changeScreen(State)
Expand All @@ -45,6 +51,7 @@ public struct RootFeature {
case mainTab(BKTabFeature.Action)
}

@Dependency(ATTrackingManagerClient.self) private var attrackingManagerClient
@Dependency(\.socialLogin) private var socialLogin

public var body: some ReducerOf<Self> {
Expand All @@ -57,6 +64,24 @@ public struct RootFeature {
socialLogin.handleKakaoUrl(url)
return .none

case .background:
return .none

case .inactive:
return .none

case .active:
return .run { send in
await send(.requestATTrackingAuthorization)
}

case .requestATTrackingAuthorization:
return .run { send in
if attrackingManagerClient.trackingAuthorizationStatus() == .notDetermined {
await attrackingManagerClient.requestTrackingAuthorization()
}
}

case let .changeScreen(newState):
state = newState
return .none
Expand Down
19 changes: 14 additions & 5 deletions Projects/Feature/Scene/Root/RootView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import ComposableArchitecture

public struct RootView: View {
private let store: StoreOf<RootFeature>
@Environment(\.scenePhase) private var scenePhase

public init(store: StoreOf<RootFeature>) {
self.store = store
Expand Down Expand Up @@ -49,12 +50,20 @@ public struct RootView: View {
.onReceive(NotificationCenter.default.publisher(for: .tokenExpired)) { _ in
store.send(.changeScreen(.login()))
}
.animation(.easeInOut(duration: 0.5), value: store.state)
.task {
await store
.send(.onAppear)
.finish()
.onChange(of: scenePhase) { newValue in
switch newValue {
case .background:
store.send(.background)
case .inactive:
store.send(.inactive)
case .active:
store.send(.active)
@unknown default:
assertionFailure("Unknown scene phase")
}
}
.animation(.easeInOut(duration: 0.5), value: store.state)
.task { await store.send(.onAppear).finish() }
}
}
}
7 changes: 3 additions & 4 deletions Projects/Feature/Scene/TabBar/BKTabFeature.swift
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ public struct BKTabFeature {

case delegate(Delegate)


case path(StackAction<Path.State, Path.Action>)
case storageBox(StorageBoxFeature.Action)
case home(HomeFeature.Action)
Expand All @@ -77,8 +76,8 @@ public struct BKTabFeature {
case unsavedSummaryAlertPresented(Int)
}

@Dependency(\.linkClient) private var linkClient
@Dependency(AnalyticsClient.self) private var analyticsClient
@Dependency(\.linkClient) private var linkClient
@Dependency(\.alertClient) private var alertClient
@Dependency(\.userDefaultsClient) private var userDefaultsClient

Expand All @@ -98,15 +97,15 @@ public struct BKTabFeature {
return .none

case .onViewDidLoad:
return .send(.handleUnsavedSummary)
return .run { send in await send(.handleUnsavedSummary) }

/// - 탭바 중앙 CIrcle 버튼 눌렀을 때
case .roundedTabIconTapped:
roundedTabIconTappedLog()

state.path.append(.SaveLink(SaveLinkFeature.State()))
return .none

case .handleUnsavedSummary:
guard userDefaultsClient.integer(.latestUnsavedSummaryFeedId, -1) > 0 else {
return .none
Expand Down

0 comments on commit 8f75f4e

Please sign in to comment.