본문 바로가기

iOS/Tip

[iOS 14] RemoteNotifications 등록 실패 처리 (with FCM) 안녕하세요! 오랜만에 찾아뵙게 되었습니다. 한동안 글을 너무 올리지 못한거 같아 개인적으로 너무 안타깝네요. 최근에 iOS14가 나오면서 몇가지 이슈가 발생하고 있어서 현업에서도 대응하느라 시간가는 줄 모르겠네요. 그래서 오늘은 iOS14에서 발생하는 RemoteNotifications 등록 실패 처리 이슈와 처리방법에 대해 공유드리고자 합니다. 문제점 FCM을 사용하기 위해 Remote Notification을 AppDelegate에서 등록해주게 됩니다. 등록을 위해 AppDelegate에서 registerForRemoteNotifications를 호출하고 나면 등록이 실패하고 Delegate에서 제공하는 함수를 통해 error를 리턴해주게 되는데 디버깅을 해보면 해당 error값이 비어있는 상태로 제..
[iOS 13] AppDelegate, SceneDelegate에서 RootViewController 설정하기 안녕하세요. 요즘 오늘의지출 앱을 만드느라 정신이 없네요 ㅎㅎ; 저는 항상 RootViewController를 소스로 지정해서 사용하고 있는데요 오늘의지출 앱을 만들면서 겪었던 난해한 부분과 해결법을 공유하고자 합니다. Xcode 11.0 부터 새로운 프로젝트를 생성시 AppDelegate와 SceneDelegate가 생성되는데요 기존처럼 AppDelegate에서 RootViewController를 설정했더니 iOS13 기기에서 테스트하니 Crash가 나더군요.. 열심히 삽질한 결과 iOS13 이전과 이후의 방식이 다르다는걸 찾았습니다. iOS13 이전의 버전은 기존과 같이 AppDelegate에 있는 didFinishLaunching에서 처리해주시면 됩니다. // // AppDelegate.swift ..
[iOS13] StatusBar Crash 이슈 해결하기 안녕하세요. 제가 진행중인 프로젝트는 특정 페이지에서 StatusBar의 색상을 다르게 설정하고 있습니다. 그런데 iOS13 기기에서 테스트하니 Crash가 나더군요.. (iOS13 기기에 빌드시 에러 로그로 해당 클래스로 접근해야한다고 가이드합니다만... 쩝) iOS12까지는 해당 프로퍼티로 접근이 가능했습니다만 iOS13부터는 사용할 수 없습니다. iOS12까지의 StatusBar 접근방법 // UIApplication에서 StatusBar를 키값("statusBar")으로 찾아온다. guard let statusBar = UIApplication.shared.value(forKeyPath: "statusBar") as? UIView else { return } // StatusBar의 Backgro..
[iOS13] Fabric, Crashlytics Crash 이슈 해결하기 안녕하세요. 드디어 iOS13이 정식 릴리즈 되었습니다. 많은 개발자 분들이 iOS13 버전을 대응하느라 바쁘실텐데 (저 포함.. ㅠ) iOS13과 Crashlytics의 충돌이 발생했습니다. 하하하하하ㅏ하ㅏㅏ 다행이 빠르게 이슈 처리를 할 수 있었는데요. (쫄려 죽는줄 알았습니다) 원인과 해결 과정은 다음과 같습니다. 원인 발생한 에러 로그는 다음과 같습니다. objc[2474]: Class CLSUserDefaults is implemented in both /System/Library/Frameworks/ClassKit.framework/ClassKit (0x1e89424c8) and "프로젝트경로". One of the two will be used. Which one is undefined. 분..
Alamofire를 동기화(Synchronize)로 사용해보자 Alamofire 란?Swift로 작성된 비동기(Asynchronize) HTTP 통신 라이브러리 입니다. iOS 개발하시는 분들이면 한번쯤은 사용하셨을꺼라 생각되고 사용하지 않은 분들도 들어본적은 있을것이라 생각됩니다. 작성 시점에서 star 개수는 3만개가 넘을 정도로 유명한 오픈소스 라이브러리입니다. Alamofire github에서 더 많은 내용을 확인할 수 있습니다. 동기 vs 비동기동기(Synchronize)는 주어진 업무를 차례대로 처리하고 하나의 업무가 완료되기 전까지는 다음 업무로 넘어가지 않는 방식입니다. 이전 업무가 완료되기까지 대기하는 시간때문에 효율은 떨어지지만 업무의 순서가 보장이되고 업무가 병렬로 발생하지 않으므로 구성이 단순합니다. 비동기(Asynchronize)는 주어진 업..