마이그레이션
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-sessionsAPI를 구현하여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)추가 정보
- iOS Changelog - iOS 전체 변경사항
- Android Changelog - Android 전체 변경사항