본문 바로가기
IOS - Swift

[iOS/Swift] 애플로그인

by 게게겍 2023. 2. 27.

개발자 계정 필수!

Xcode에서 앱을 엽니다.

Apple Developer 사이트에서 앱 번들 ID를 만듭니다.

  1. 제일 아래에 Account 에서 “Certificates, Identifiers & Profiles” 를 클릭합니다.
  2. "Identifiers" 섹션으로 이동합니다.
  3. "+" 버튼을 클릭하여 새로운 식별자를 생성합니다.
  4. "App IDs" 카테고리를 선택합니다.
  5. "App ID Description" 필드에 앱을 설명하는 이름을 입력합니다.
  6. "Explicit App ID" 옵션을 선택합니다.
  7. "Bundle ID" 필드에 앱의 번들 ID를 입력합니다. 번들 ID는 com.companyname.appname과 같은 형식으로 작성됩니다. 이 때, companyname은 개발자 회사의 이름 또는 개인 이름을, appname은 앱 이름을 나타냅니다.
  8. "App Services" 섹션에서 앱이 사용할 서비스를 선택합니다.
  9. "Continue" 버튼을 클릭하고, 요약 정보를 확인한 후 "Register" 버튼을 클릭합니다.

Apple Developer 사이트에서 앱 ID를 만듭니다.

Bundle ID 만들때와 1~3번 동일합니다.

  1. "Services IDs" 카테고리를 선택합니다.
  2. "Description" 필드에 서비스 ID를 설명하는 이름을 입력합니다.
  3. "Identifier" 필드에 서비스 ID를 입력합니다. 이 때, com.companyname.servicename과 같은 형식으로 작성됩니다.
  4. "Continue" 버튼을 클릭하고, 요약 정보를 확인한 후 "Register" 버튼을 클릭합니다.

Xcode에서 개발자 인증서와 개인 키를 만듭니다.

"Xcode" 메뉴에서 "Preferences” → Account → Manage Certificates → + 버튼을 눌러 새 인증서 작성 → OS App Development"을 선택하고, 요청된 정보를 입력한 후 "Continue"를 클릭합니다.→ 개발자 인증서가 생성되면, "Download" 버튼을 클릭하여 인증서를 다운로드

Xcode에서 App ID를 생성합니다.

"Project Navigator"에서 앱을 선택 → "General" 탭을 클릭 → "Bundle Identifier" 필드에 앱의 번들 ID입력 → "Team"을 선택하고, Apple Developer 계정을 선택합니다.

Xcode에서 서비스 ID를 생성합니다.

"Project Navigator"에서 앱을 선택하고, "Capabilities" 탭을 클릭합니다. → "Sign in with Apple" 옵션을 활성

Xcode에서 Sign-in with Apple 기능을 추가합니다.

  1. Apple Developer 계정과 연결된 Xcode 프로젝트를 엽니다.
  2. "Capabilities" 탭을 선택합니다.
  3. "Sign in with Apple" 옵션을 활성화합니다.
  4. "Add an existing signing key" 또는 "Create a new key"를 선택합니다.
  5. "Enable as a primary App ID"를 선택합니다.
  6. "Save" 버튼을 클릭합니다.
  7. Xcode 프로젝트를 다시 빌드합니다.

앱에서 Sign-in with Apple 버튼을 만듭니다.

import UIKit
import AuthenticationServices

class ViewController: UIViewController {
    
    
    @IBOutlet weak var signInView: UIView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        addButton()
    }

    func addButton() {
        let button = ASAuthorizationAppleIDButton(authorizationButtonType: .signIn, authorizationButtonStyle: .black)
        button.addTarget(self, action: #selector(loginHandler), for: .touchUpInside)
        signInView.addSubview(button)
    }

    @objc func loginHandler() {
        let request = ASAuthorizationAppleIDProvider().createRequest()
        request.requestedScopes = [.fullName, .email]
        let controller = ASAuthorizationController(authorizationRequests: [request])
        controller.delegate = self
        controller.presentationContextProvider = self as? ASAuthorizationControllerPresentationContextProviding
        controller.performRequests()
    }
}

extension ViewController : ASAuthorizationControllerDelegate  {
    func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
        if let credential = authorization.credential as? ASAuthorizationAppleIDCredential {
            let user = credential.user
            print("👨‍🍳 \\(user)")
            if let email = credential.email {
                print("✉️ \\(email)")
            }
        }
    }
    
    func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
        print("error \\(error)")
    }
}