반응형

잘 돌아가던 푸시가 iOS 14로 버전업 되면서 작동하지 않는 버그가 발생했다.

오류가 발생했는지 조차 파악이 안되는 아주 악질적인 버그로 

버그를 인지하게 된 경위는 다음과 같다.
내 앱은 카톡처럼 푸시가 왔을 때 카운팅을 해주지 않고 didFinishLaunchingWithOptions 에서 무조건 뱃지를 0으로 초기화 해주고 있었는데 iOS 14로 올라간 이후부터 뱃지가 계속 1로 표시되고 있음을 발견할 수 있었다.

소스를 돌려보니 충실히 application.applicationIconBadgeNumber = 0; 코드가 동작되고 있었지만 여전히 뱃지 카운트가 1로 표시되었다.

조금 더 살펴보니 푸시를 등록해주는 소스단에서 에러로 빠짐이 확인되었고

    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];

    center.delegate = self;

    [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge)

                          completionHandler:^(BOOL granted, NSError * _Nullable error) {

                            if( !error ) {

                                // required to get the app to do anything at all about push notifications

                                

                                dispatch_async(dispatch_get_main_queue(), ^{

                                  [[UIApplication sharedApplication] registerForRemoteNotifications];

                                });

                                

                                NSLog( @"Push registration success." );

                            } else {

                                NSLog( @"Push registration FAILED" );

                                NSLog( @"ERROR: %@ - %@", error.localizedFailureReason, error.localizedDescription );

                                NSLog( @"SUGGESTIONS: %@ - %@", error.localizedRecoveryOptions, error.localizedRecoverySuggestion );

                            }

    }];

반나절 가량 삽질한 끝에 원인을 알아내었다.
https://developer.apple.com/forums/thread/660648

 

ios14 "Notifications are not allow… | Apple Developer Forums

Hello. After the ios14 update, there was a problem that the application I distributed did not request notification permission. In ios 13.7 version, notification permission is normally requested, but the device that has updated ios 14 does not request notif

developer.apple.com

보다시피 앱 이름이 영어가 아니면 푸시토큰을 등록할수도 푸시를 허용할지도 물어보질 않는다.

iOS 13 상태에서 이미 푸시토큰을 등록해 사용해왔고 iOS 14로 업그레이드를 한 후에도 여전히 푸시가 잘 도착하였기에 상상도 못할 치명적인 버그였다.
정말 웃기는건 앱스토어에 올라가 있던 서비스 중인 앱을 다운받아도 마찬가지로 뱃지가 1로 표시된다란 점이다.

해결방법은 조금 간단하다.

먼저 Target > Build Settings > Packaging > Product Name을 영어로 바꿔준 후


Info.plist에서 Bundle Name을 $(PRODUCT_NAME)에서 원하는 한글이름으로 바꿔주면 푸시 등록 과정은 기존 iOS 13처럼 정상 처리가 가능하다.

진짜... 이런 악질적인 버그를 내고도 애플은 아무런 안내가 없으니 ㅡㅡ

반응형
Posted by Hippalus

댓글을 달아 주세요