반응형
LinkedIn 개발자로 성장하면서 남긴 발자취들을 확인하실 수 있습니다.
Github WWDC Student Challenge 및 Cherish, Tiramisul 등 개발한 앱들의 코드를 확인하실 수 있습니다.
개인 앱 : Cherish 내 마음을 들여다보는 시간, 체리시는 디자이너와 PM과 함께 진행 중인 1인 개발 프로젝트입니다.
10년 후, 20년 후 나는 어떤 스토리 텔러가 되어 있을지 궁금하다. 내가 만약에 아직 조금 더 탐구하고 싶은 게 있고, 궁금한 게 있다면, 그게 설사 지금 당장의 내 인생에 도움이 안 되는 것 같더라도 경험해보자. 그 경험들을 온전히 즐기며 내 것으로 만들고, 내 일에 녹여내고... 그러다보면 그 점들이 모여 나란 사람을 그려내는 선이 될 테니까.

Recent Posts
Recent Comments
Total
관리 메뉴

꿈꾸는리버리

[앱 배포 리젝] Guideline 5.1.2 - Legal - Privacy - Data Use and Sharing 본문

오뚝이 개발자/iOS

[앱 배포 리젝] Guideline 5.1.2 - Legal - Privacy - Data Use and Sharing

rriver2 2024. 8. 2. 17:18
반응형

🔧 문제 상황

Guideline 5.1.2 - Legal - Privacy - Data Use and Sharing
The app privacy information provided in App Store Connect indicates the app collects data in order to track the user, including Device ID. However, the app does not use App Tracking Transparency to request the user's permission before tracking their activity.
Apps need to receive the user’s permission through the AppTrackingTransparency framework before collecting data used to track them. This requirement protects the privacy of users.
Next Steps
Here are three ways to resolve this issue:
1. If the app does not currently track, update the app privacy information in App Store Connect. You must have the Account Holder or Admin role to update app privacy information.
2. If this app does not track on the platform associated with this submission, but tracks on other platforms, notify App Review by replying to the rejection in App Store Connect.
3. If the app tracks users on all supported platforms, the app must use App Tracking Transparency to request permission before collecting data used to track. When resubmitting, indicate in the Review Notes where the permission request is located.
Note that if the app behaves differently in different countries or regions, you should provide a way for App Review to review these variations in the app submission. Additionally, these differences should be documented in the Review Notes section of App Store Connect.
Support
- Reply to this message in your preferred language if you need assistance. If you need additional support, use the Contact Us module.
- Consult with fellow developers and Apple engineers on the Apple Developer Forums.
- Help improve the review process or identify a need for clarity in our policies by suggesting guideline changes.
- Request a 30-minute online meeting with an App Review expert to discuss the guidelines and best practices for a smooth review process.

 

아니.. 전에는 잘만됐잖아 이 앱스토어야,,.,?

이쪽 코드는 수정한 적이 없는데,,, 왜,.,?

💬 고민 Point

1) 그냥 GA 빼버려...

https://rriver2.tistory.com/entry/%E3%84%B4%E3%85%81%E3%85%87%E3%85%81%E3%84%B4%E3%85%87%E3%84%B4

 

[Google Analytics 2 ] 앱 추적 허용

이전 포스팅 : [Google Analytics 1 ] SwiftUI/ GA 이게 뭐고 어떻게 사용하나요? [Google Analytics 1 ] SwiftUI/ GA 이게 뭐고 어떻게 사용하나요? ☺️Google Analytics란? 앱에 도착한 후 어떤 행동을 보이는지(방문

rriver2.tistory.com

 

일단 빠르게 배포를 해야하기도 했고 GA 말고 mixpanel로 변경하려고 했던 찰나여서 그냥 Data use Sharing 부분을 빼려고 했다. 근데 왜인걸..? 다 빼도 리젝이 됐다. 

그리고 문제가,, 코드에서 GA 관련 내용을 삭제하더라도 [앱이 수집하는 개인정보]에는 계속해서 NSUserTrackingUsageDescription가 포함되어 있다고 떴다.. 

 

아니 안 뜰텐데..? 왜 있지?? 하면서 리서치를 해보니까 이번에 올리는 빌드 기준이 아니라 앱 스토어에 올라가 있는 빌드 기준으로 NSUserTrackingUsageDescription를 판별한다고,,, 그러니까... 이번에 NSUserTrackingUsageDescription를 삭제한 빌드를 업데이트를 하고 나서 이 부분을 수정해야 한다고 이야기 하는 듯 했다.

여러분이 할 수 있는 일은, 제출하려는 버전이 승인되어 App Store에 출시되면 App Store Connect에서 새 버전을 만든 다음 앱이 추적되지 않는다는 것을 나타내기 위해 응답을 업데이트하는 것입니다.

 

 

Cannot remove App Privacy after re… | Apple Developer Forums

I ran into this issue today, May 31, 2022. Previously, my app used AdMob to show ads, so I had answered all the tracking questions and implemented the ATT permission request. But then I decided to remove AdMob. The new update had absolutely no tracking, bu

forums.developer.apple.com

 

2) Mixpanel 그냥 넣어버려...

이쯤되니까 드는 생각.. 이렇게 삽질을 할 바에 Mixpanel 넣고 새로 세팅을 해보자!!

그래서 mixpanel quike start 따라서 빠르게 시작했다 ㅋ

 

Install Mixpanel - Mixpanel Docs

 

docs.mixpanel.com

GA했을 때랑 거의 똑같아서 되게 쉽게 할 수 있었다!

 

[참고]

[Google Analytics 1 ] SwiftUI/ GA 이게 뭐고 어떻게 사용하나요?

[Google Analytics 2 ] 앱 추적 허용

 

그러다 알게된 진실,,,

iOS 15 버전 이하에서는 권한을 요청하는 코드를 보통 didFinishLaunghingWithOptions 에서 호출했는데, 지금은 호출되지 않았다. 그 이유는 ... 15 버전부터 IDFA 권한은 앱이 완전히 실행된 경우에만 호출할 수 있도록 변경되었다고....

🌟 문제 해결

이번에 계속 배포에서 문제가 생겼던 이유는 사용자에게 추적 허용을 요구하는 ATTrackingManager.requestTrackingAuthorization를 MyAppDelegate에서 호출했던 것이었다. 인터넷에 떠도는 코드들에서 DispatchQueue를 쓰길래 나도 그냥 썼는데, 공식문서를 보니까 iOS 15 버전 이후부터는 Application의 상태가 UIApplicationStateActive 일 때 API가 호출할 수 있도록 변경되었다고 되어있었다. 역시 남의 코드를 그냥 가져오는 건.. 조심 또 조심해야하나보다...

DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
            if #available(iOS 14, *) {
                ATTrackingManager.requestTrackingAuthorization { status in
                    switch status {
                    case .authorized:           // 허용됨
                        print("Authorized")
                    case .denied:               // 거부됨
                        print("Denied")
                    case .notDetermined:        // 결정되지 않음
                        print("Not Determined")
                    case .restricted:           // 제한됨
                        print("Restricted")
                    @unknown default:           // 알려지지 않음
                        print("Unknow")
                    }
                }
            }
}

 

[공홈의 내용]

 

requestTrackingAuthorization(completionHandler:) | Apple Developer Documentation

The request for user authorization to access app-related data.

developer.apple.com

 

그래서 ATTrackingManager.requestTrackingAuthorization를 어플 첫 실행 직후(didFinishLaunchingWithOptions)에서 didBecomeActive 에서 호출하거나, ViewController에서 호출하는 걸로 변경해야 한다. 애플 개발자 커뮤니티에서 didBecomeActive 호출로 변경하거나, didFinishLaunchingWithOptions 에서 1초 delay 주는 방법으로 많이 변경을 한 것 같은데 1초 딜레이를 주는 방법은 나처럼 될 수도 있으니 아직 위험한 것 같다.

 

 

그래도 며칠동안 삽질한 거 해결 완료!


느낀점

ㅎr.. 진짜 마지막 숨턱이 찰 때까지 개발 완료하고 배포했는데 계속 리젝을 당하니까 심적으로 너무 힘들었다. 가장 많이 들었던 생각은 이 고통을 함께 나눌 팀원이 없어서 너무 너무 너무 고독했다는 것...

1인앱 개발자의 숙명이라지만,,, 같이 문제를 해결하고 함께 문제를 헤쳐나가는 것에 대한 기쁨과 행복은 언제나 그리운 것 같다. 이런 이유에서라도 함께 하는 프로젝트를 하나는 만들어야겠다는 생각을 했다.

 

+) 남의 코드 가져올 때는 그 이유를 알고 가져오자 ✨✨✨✨✨✨

반응형
Comments