Jupyo's Daily Story
iOS 13버전 SNS Login 대응 방법 본문
Xcode 11 이상 버전부터는 프로젝트 생성 시 SceneDelegate 라는 파일이 함께 추가 된다.
SceneDelegate 에 관한 자세한 내용은 일단은 Zedd 님의 블로그에서 확인 할 수 있다.
https://zeddios.tistory.com/811
지금까지는 AppDelegate 에서 앱 접근 관련 내용을 모두 관리했지만,
iOS 13 버전 이상은 Multiple Windows를 사용함으로써 SceneDelegate 에서 관리하게 되었다.
iOS 13 미만 버전 처리 방법
* 카카오톡 로그인 기준
이 경우에는 지금까지와 동일한 방법으로 처리해주면 된다.
그럼, iOS 13 버전을 지원하면 위 작업이 필요없는가?
그것은 아니다.
물론 Deployment Target 이 iOS 13 이상 버전이라면 위의 작업은 필요없지만, 보통 앱들은 여러 버전을 사용자들에게 지원하기 위해 iOS 13 이하 버전을 지원하고 있다.
iOS 13 미만 버전을 사용하고 있는 사용자들을 위해 분기처리를 통해 위와 같은 작업을 처리 해줘야 해당 버전에서도 정상적으로 작동한다.
iOS 13 이상 대응 방법 첫번째 - SceneDelegate 삭제
프로젝트 생성 시 추가 된 SceneDelegate 파일을 삭제한다.
하지만 파일만 삭제한다고 해서 AppDelegate 에서 모두 관리하는 것은 아니다.
info.plist에는 여전히 SceneDelegate가 남아 있기 때문에 해당 부분을 삭제 해줘야 AppDelegate에서 관리가 가능하다.
삭제 후 앱을 실행해보자
아마 문제 없이 실행은 되지만 검은 화면만 표시 될 것이다.
이유는 SceneDelegate 가 생긴 뒤로 UIWindow가 기본적으로 SceneDelegate 쪽으로 옮겨져 갔기 때문이다.
// AppDelegate에 추가
var window: UIWindow?
다시 실행 해보면 화면이 잘 나오는 것을 확인 할 수 있다.
그 후에 위의 iOS 13 미만 처리 방법과 동일하게 작업해주면 SNS 로그인이 정상적으로 작동하게 된다.
iOS 13 이상 대응 방법 두번째 - SceneDelegate에서 처리
SceneDelegate를 처음 만나보니 생소하고 어렵게 느껴지는 것은 당연한 일이다.
하지만 AppDelegate와 같은 기능들을 가지고 있고, SNS 로그인을 처리하던 부분인 application:openURL 함수도 가지고 있다
아래와 같이 처리하면 정상적으로 작동 된다.
참고로 네이버 로그인의 경우 AppDelegate와 SceneDelegate 처리 방식이 조금 다르다
// AppDelegate.swift
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
if url.scheme == kServiceAppUrlScheme {
NaverThirdPartyLoginConnection.getSharedInstance()?.application(app, open: url, options: options)
}
}
// SceneDelegate.swift
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
...
if url.scheme == kServiceAppUrlScheme {
NaverThirdPartyLoginConnection.getSharedInstance()?.receiveAccessToken(url)
}
}
'Swift' 카테고리의 다른 글
PictureInPicture (0) | 2020.10.21 |
---|---|
Array vs NSArray, NSMutableArray (0) | 2020.01.22 |
클래스 (Class) (0) | 2020.01.02 |
구조체 (Struct) (0) | 2019.12.30 |
주석 작성법 (0) | 2019.12.29 |