Petnow LogoPetnow
iOS SDK

시작하기

Petnow iOS SDK 설치 및 초기 설정 가이드.


개요

이 가이드는 Petnow iOS SDK를 프로젝트에 설치하고 초기 설정하는 방법을 단계별로 안내합니다.

사전 준비사항

시작하기 전에 다음을 준비해주세요:

  • iOS 16.0 이상을 타겟으로 하는 Xcode 프로젝트
  • Xcode 16.0 이상
  • Petnow API 키 (발급 받지 않았다면 support@petnow.io로 문의)

1단계: SDK 설치

Petnow iOS SDK는 AWS CodeArtifact를 통해 배포됩니다.

AWS CLI 설치

다음 링크에서 AWS CLI를 설치하세요: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

Petify Console에서 자격 증명 발급

Petify Console에서 AWS 자격 증명을 발급하고, 제공된 값으로 환경 변수를 설정하세요:

Petify Console – AWS CodeArtifact 자격 증명 화면

export AWS_ACCESS_KEY_ID=<Petify Console에서 제공>
export AWS_SECRET_ACCESS_KEY=<Petify Console에서 제공>
export AWS_DEFAULT_REGION=<Petify Console에서 제공>
export PETNOW_CODEARTIFACT_DOMAIN=<Petify Console에서 제공>
export PETNOW_AWS_ACCOUNT_ID=<Petify Console에서 제공>
export PETNOW_IOS_SDK_REPOSITORY=<Petify Console에서 제공>

Swift Package Manager (AWS CodeArtifact)

프로젝트 타입에 따라 하나를 선택하여 진행하세요:

옵션 A: Package.swift 프로젝트

Package.swift 파일이 있는 프로젝트에서는 다음 명령만 실행하면 됩니다:

  1. 프로젝트 루트 디렉토리로 이동:
cd /path/to/your-project  # Package.swift가 있는 디렉토리
  1. AWS CodeArtifact 로그인:
aws codeartifact login --tool swift \
  --domain $PETNOW_CODEARTIFACT_DOMAIN \
  --domain-owner $PETNOW_AWS_ACCOUNT_ID \
  --repository $PETNOW_IOS_SDK_REPOSITORY
  1. 성공 확인:
# 성공 시 출력:
Successfully configured credentials for codeartifact-DOMAIN-ACCOUNT_ID-REPOSITORY

# Registry 파일 확인:
cat ~/.swiftpm/configuration/registries.json

참고: 인증 토큰은 12시간 유효합니다. 만료 시 로그인 명령을 다시 실행하세요.

옵션 B: Xcode Workspace

Xcode에서 패키지 추가

SPM setup screenshot

  1. Xcode에서 프로젝트를 엽니다
  2. File > Add Packages... 선택
  3. 구성된 CodeArtifact 저장소에서 petnow.ui 패키지를 검색
  4. Add Package 클릭

중요: 패키지 이름을 입력 후 enter를 눌러야 합니다. 누르지 않으면 검색되지 않습니다.

설치 확인

패키지가 성공적으로 추가되면 프로젝트 네비게이터의 Package Dependencies 섹션에서 확인할 수 있습니다.

2단계: 프로젝트 설정

Info.plist 권한 추가

SDK가 카메라를 사용하려면 Info.plist에 권한 설명을 추가해야 합니다.

"Privacy - Camera Usage Description" 혹은 "NSCameraUsageDescription" 키를 추가하고, 카메라 사용 목적을 설명하는 문자열을 입력합니다.

Info.plist editing

필수 권한

<!-- 카메라 접근 권한 (필수) -->
<key>NSCameraUsageDescription</key>
<string>반려동물 탐지 및 식별을 위해 카메라 접근이 필요합니다.</string>

중요: 권한 설명이 없으면 카메라 접근 시 앱이 크래시됩니다.

모듈 임포트

import PetnowUI

3단계: 캡처 세션 생성

필수: 카메라 초기화 전에 반드시 서버에서 캡처 세션을 생성하고 captureSessionId를 받아와야 합니다.

// 서버에서 captureSessionId를 받아옵니다
// (서버는 Petnow Server API의 createCaptureSession을 호출)
let captureSessionId: UUID = await yourServerAPI.createCaptureSession(
    species: "DOG",
    purpose: "PET_PROFILE_REGISTRATION"
)

Server API: captureSessionId는 서버에서 Petnow Server API를 통해 생성합니다. 클라이언트에서 직접 생성하지 않습니다.

자세한 세션 개념은 UI 모듈 개요를 참고하세요.

4단계: 카메라 초기화

PetnowUI의 CameraViewModel을 사용하여 카메라를 초기화합니다. API 키와 환경 설정은 LicenseInfo를 통해 전달됩니다.

import SwiftUI
import PetnowUI

struct PetCameraView: View {
    @StateObject private var cameraViewModel: CameraViewModel
    private let captureSessionId: UUID  // 서버에서 받은 세션 ID
    
    init(captureSessionId: UUID) {
        self.captureSessionId = captureSessionId
        _cameraViewModel = StateObject(wrappedValue: CameraViewModel(
            species: .dog,                      // .dog 또는 .cat
            cameraPurpose: .forRegisterFromProfile  // 촬영 목적
        ))
    }
    
    var body: some View {
        CameraView(viewModel: cameraViewModel)
            .task {
                await initializeCamera()
            }
    }
    
    private func initializeCamera() async {
        do {
            try await cameraViewModel.initializeCamera(
                licenseInfo: LicenseInfo(
                    apiKey: "YOUR_API_KEY",
                    isDebugMode: false
                ),
                initialPosition: .back,
                captureSessionId: captureSessionId
            ) { result in
                // 촬영 결과 처리
                print("촬영 완료: \(result)")
            }
        } catch {
            print("카메라 초기화 실패: \(error)")
        }
    }
    
    private func isDebugBuild() -> Bool {
        #if DEBUG
        return true
        #else
        return false
        #endif
    }
}

LicenseInfo 파라미터

LicenseInfo는 API 키와 서버 환경을 설정합니다:

LicenseInfo(
    apiKey: "YOUR_API_KEY",  // Petnow API 키
    isDebugMode: false         // deprecated: 항상 false
)

isDebugMode는 deprecated되었습니다. 항상 false를 전달하세요.

5단계: 설치 확인

SDK가 올바르게 설치되었는지 확인하려면 앱을 빌드하고 실행하세요.

카메라 초기화가 성공하면 카메라 프리뷰가 표시됩니다. 실패 시 에러 메시지를 확인하세요:

do {
    try await cameraViewModel.initializeCamera(
        licenseInfo: LicenseInfo(apiKey: "YOUR_API_KEY", isDebugMode: false),
        initialPosition: .back,
        captureSessionId: captureSessionId
    ) { result in
        print("촬영 완료")
    }
    print("카메라 초기화 성공")
} catch {
    print("초기화 실패: \(error.localizedDescription)")
}

문제 해결

패키지를 찾을 수 없음 (Package Resolution Failed)

증상: Xcode에서 "package 'PetnowUI' not found" 또는 유사한 오류

해결 방법:

  1. Registry 설정 확인

    # Xcode Workspace 프로젝트
    cat YourApp.xcworkspace/xcshareddata/swiftpm/configuration/registries.json
    
    # Package.swift 프로젝트
    cat ~/.swiftpm/configuration/registries.json

    파일이 없거나 비어있다면 프로젝트 루트에서 다시 로그인:

    cd /path/to/YourApp  # .xcworkspace 파일이 있는 디렉토리
    aws codeartifact login --tool swift \
      --domain $PETNOW_CODEARTIFACT_DOMAIN \
      --domain-owner $PETNOW_AWS_ACCOUNT_ID \
      --repository $PETNOW_IOS_SDK_REPOSITORY
  2. 토큰 만료 확인

    • 토큰은 12시간 후 만료됩니다
    • aws codeartifact login 명령을 다시 실행하세요
  3. Xcode 캐시 삭제

    # SPM 캐시 삭제
    rm -rf ~/Library/Caches/org.swift.swiftpm
    rm -rf ~/Library/Developer/Xcode/DerivedData
    
    # Xcode 재시작 후 File > Packages > Reset Package Caches

Registry 설정 누락 (Xcode Workspace)

증상: 로그인했는데도 Xcode에서 패키지를 찾지 못함

원인: aws codeartifact login --tool swift~/.swiftpm/에만 설정을 저장하므로, Xcode Workspace는 이를 인식하지 못함

해결: 옵션 B의 Registry 설정 복사 과정을 수행하세요

# Xcode Workspace로 복사
mkdir -p YourApp.xcworkspace/xcshareddata/swiftpm/configuration
cp ~/.swiftpm/configuration/registries.json YourApp.xcworkspace/xcshareddata/swiftpm/configuration/

카메라 권한 오류

증상: 앱이 크래시하거나 권한 요청이 표시되지 않음
해결: Info.plist에 NSCameraUsageDescription 추가 확인

API 키 오류

증상: 카메라 초기화 시 인증 오류
해결: API 키가 올바른지 확인하고 Petnow 팀에 문의

다음 단계

설치와 설정이 완료되었습니다! 이제 SDK를 사용할 준비가 되었습니다.

지원

설치 중 문제가 발생하면 support@petnow.io로 문의해주세요.

On this page