[SwiftUI] SignInWithAppleButton(애플로그인) - swift 5.0 & XCode 14.2

박준용·2023년 3월 11일
0

IOS[SwiftUI]

목록 보기
1/1
post-thumbnail

기존의 Sluv 애플리케이션의 문제점을 보완하기 위해 webView로 처리했던 로그인 부분을 native 코드로 변환하면서 적은 글입니다. SwiftUI를 처음 접해보는 초보자 입장에서 애플로그인을 진행하다보니 막히는 부분도 많았고 어떻게 진행하는지 어려움이 많아 정리하게 됐습니다.

Problem

유튜브와 구글링을 통해 코드를 짜고 시뮬레이터로 돌리는 순간 애플로그인 버튼도 뜨고 버튼을 누른 후 동작도 잘 됐습니다.

하지만, AppleId 와 비밀번호를 올바르게 입력했음에도 불구하고 입력창이 그대로 남아있고, 터미널에도 아무것도 뜨지 않는 문제가 발생했습니다. 비밀번호를 잘못 입력했을때는 입력창이 흔들리면서 비밀번호가 틀렸다는 표시가 났지만, 올바른 입력을 한 후에는 애플로그인 함수 내에서 에러를 출력하는 print문 조차 실행되지 않았고 아무런 동작도 하지 않아 무슨 문제인지 한참을 찾아봤습니다.

Solution

애플로그인을 진행하기 위해서는 Apple Developer Program에 가입해야한다.

였습니다......ㅎ😅

Apple Developer Program에 가입되어있는 계정으로 바꾸니 바로 성공....
다른 분들도 이와 같은 어이없는 실수 하시지 말라고 글 적어봅니다!
아래부터는 로그인을 구현한 방식을 처음부터 끝까지 정리하겠습니다.

How to implement

1. Capability 추가

Project Navigator -> 프로젝트 Target -> Signing & Capabilities 탭 클릭

Sign in with Appple 검색 및 클릭

2. Apple Developer Program 설정

로그인 후 인증서, 식별자 및 프로파일 탭에서 식별자 클릭

Identifiers에서 해당 프로젝트 클릭

하단 capabitilies에서 Sign In with Apple 추가

이러면 환경 설정은 끝!

3. Code 구현

import AuthenticationServices

struct ContentView: View {
    var body: some View {
        VStack {
        	AppleSigninButton()
        }
        .frame(height:UIScreen.main.bounds.height)
        .background(Color.white)
    
    }
    
}

struct AppleSigninButton : View{
    var body: some View{
        SignInWithAppleButton(
            onRequest: { request in
                request.requestedScopes = [.fullName, .email]
            },
            onCompletion: { result in
                switch result {
                case .success(let authResults):
                    print("Apple Login Successful")
                    switch authResults.credential{
                        case let appleIDCredential as ASAuthorizationAppleIDCredential:
                   		// 계정 정보 가져오기
                            let UserIdentifier = appleIDCredential.user
                            let fullName = appleIDCredential.fullName
                            let name =  (fullName?.familyName ?? "") + (fullName?.givenName ?? "")
                            let email = appleIDCredential.email
                            let IdentityToken = String(data: appleIDCredential.identityToken!, encoding: .utf8)
                            let AuthorizationCode = String(data: appleIDCredential.authorizationCode!, encoding: .utf8)
                    default:
                        break
                    }
                case .failure(let error):
                    print(error.localizedDescription)
                    print("error")
                }
            }
        )
        .frame(width : UIScreen.main.bounds.width * 0.9, height:50)
        .cornerRadius(5)
    }
}

profile
경험을 좋아하는 개발자 박준용입니다.

0개의 댓글