Petnow LogoPetnow
마이그레이션

SDK v1.2.x에서 v1.3.0으로 마이그레이션

Petnow SDK v1.2.x에서 v1.3.0으로 업그레이드하는 방법을 안내합니다.

iOS 변경사항

1. initializeCamera() 호출 시 captureSessionId 전달 필요

v1.3.0부터 initializeCamera() 호출 시 서버에서 발급받은 captureSessionId를 전달해야 합니다.

// ❌ v1.2.x
try await cameraViewModel.initializeCamera(
    licenseInfo: licenseInfo,
    initialPosition: .back
) { result in
    // ...
}

// ✅ v1.3.0
let sessionId = try await createCaptureSessionFromServer() // 서버 API 호출
try await cameraViewModel.initializeCamera(
    licenseInfo: licenseInfo,
    initialPosition: .back,
    captureSessionId: sessionId 
) { result in
    // ...
}

Breaking Change

captureSessionId를 전달하지 않으면 컴파일 에러가 발생합니다. 반드시 서버의 POST /api/capture-sessions API를 호출하여 세션 ID를 생성한 후 전달하세요.


2. 초기화 상태 확인 방법 변경

v1.2.x: previewLayer로 초기화 확인

// ❌ v1.2.x
if cameraViewModel.previewLayer != nil {
    // 카메라가 초기화됨
    showCameraView()
}

v1.3.0: isInitialized 사용

// ✅ v1.3.0
if cameraViewModel.isInitialized {
    // 카메라가 초기화됨
    showCameraView()
}

변경 이유: previewLayer 프로퍼티가 제거되었습니다. 초기화 상태를 확인하려면 명시적인 isInitialized 프로퍼티를 사용하세요.

Breaking Change

CameraViewModel.previewLayer가 완전히 제거되었습니다. 초기화 여부 확인에만 사용했다면 isInitialized로 교체하세요.

Preview Layer가 실제로 필요한 경우 cameraViewModel.captureSession을 사용하여 직접 생성할 수 있습니다:

let previewLayer = AVCaptureVideoPreviewLayer(session: cameraViewModel.captureSession)

Android 변경사항

captureSessionId를 Fragment 생성 시 전달 필요

v1.3.0부터 PetnowCameraFragment를 생성할 때 서버에서 발급받은 captureSessionId를 arguments로 전달해야 합니다.

// ✅ v1.3.0
class MyCameraFragment : PetnowCameraFragment() {
    companion object {
        fun newInstance(captureSessionId: UUID) = MyCameraFragment().apply {
            arguments = Bundle().apply {
                putString(ARG_CAPTURE_SESSION_ID, captureSessionId.toString()) 
            }
        }
    }
}

// 사용
val sessionId = createCaptureSessionFromServer() // 서버 API 호출
val fragment = MyCameraFragment.newInstance(sessionId)

Breaking Change

captureSessionId를 전달하지 않으면 Fragment가 즉시 종료됩니다. 반드시 서버의 POST /api/capture-sessions API를 호출하여 세션 ID를 생성한 후 전달하세요.


마이그레이션 체크리스트

공통

  • 서버에서 POST /api/capture-sessions API를 구현하여 captureSessionId를 생성하도록 했는가?

iOS

  • initializeCamera() 호출 시 captureSessionId를 전달하도록 변경했는가?
  • previewLayer 사용 코드를 isInitialized로 변경했는가?

Android

  • Fragment 생성 시 captureSessionId를 arguments로 전달했는가?

문제 해결

Q. previewLayer를 사용하고 있었는데 어떻게 하나요?

A. captureSession으로부터 직접 생성하세요:

// v1.2.x
let previewLayer = cameraViewModel.previewLayer
view.layer.addSublayer(previewLayer)

// v1.3.0
let previewLayer = AVCaptureVideoPreviewLayer(session: cameraViewModel.captureSession)
previewLayer.videoGravity = .resizeAspectFill
previewLayer.frame = view.bounds
view.layer.addSublayer(previewLayer)

추가 정보

On this page