SDK 의존성 추가
방법 A: CocoaPods (권장)
Xcode 15+ 컴파일 오류Xcode 15 이상을 사용하면 Sandbox: rsync.samba deny(1) 오류가 발생할 수 있습니다. 원인은 User Script Sandboxing입니다.해결 방법:
- Xcode에서 Project를 선택합니다.
- Build Settings를 엽니다.
ENABLE_USER_SCRIPT_SANDBOXING을 검색합니다.
- 값을
Yes에서 **No**로 변경합니다.
방법 B: 수동 프레임워크
다운로드에서 SDK를 받아 Facebetter.framework를 프로젝트에 복사하고, Embed & Sign으로 동적 라이브러리를 임베드합니다.
앱이 카메라에서 캡처할 때만 Info.plist에 카메라 권한을 추가하세요.
가져오기
로그 구성
로깅은 기본적으로 꺼져 있습니다. 엔진을 만들기 전에 setLogConfig:를 호출하세요.
엔진 생성
iOS Bundle ID를 바인딩한 뒤 licenseToken 또는 appId + appKey를 전달합니다. AppID 및 AppKey 받기와 인증 및 라이선스를 참고하세요.
우선순위: licenseToken이 비어 있지 않으면(라이선스 토큰 문자열, {token} JSON 또는 .lic 내용) SDK가 로컬에서 검증합니다. 그렇지 않으면 appId + appKey로 /facebetter/v2/auth를 사용합니다.
createEngineWithConfig:는 인스턴스를 반환하며 싱글톤이 아닙니다.
피부 뷰티
강도는 보통 [0.0, 1.0]입니다. 스타일 열거형: 파라미터 열거형.
피부만
활성화하면 스무딩 / 화이트닝 / 로지니스가 감지된 피부에만 적용됩니다.
얼굴 리셰이프
setReshape:intensity: 범위는 **[-1.0, 1.0]**입니다. 0은 꺼짐입니다. 파라미터: FBReshape_FaceThin … FBReshape_BrowThickness(0–25). 의미: 파라미터 열거형.
바디 리셰이프
setBodyReshape:intensity: 범위는 **[0.0, 1.0]**입니다. 0은 꺼짐입니다. 먼저 addResourcePack:으로 resource_body.fbd를 등록하세요. 파라미터: FBBodyReshape_BodySlim … FBBodyReshape_TorsoLong(0–8). 파라미터 열거형과 선택 리소스 팩을 참고하세요.
메이크업
강도, 형태, 색상은 별도 호출입니다. 전체 프리셋: 파라미터 열거형.
가상 배경
인물 세그멘테이션이 기본 마스크입니다. 블러 레벨은 [0.0, 1.0]이며 0은 블러를 지웁니다. 이미지 경로는 비어 있지 않은 png/jpg여야 합니다.
크로마키
크로마키는 마스크만 바꿉니다. 채우기는 여전히 블러 또는 대체 이미지입니다.
필터와 스티커
.fbd 파일 경로 또는 메모리 바이트를 전달합니다. 변경은 다음 processImage:에서 적용됩니다.
3D 스티커는 선택 resource_3d.fbd 팩이 필요합니다(프레임워크에 없음). 선택 리소스 팩을 참고하세요.
콜백과 통계
이미지 처리
FBImageFrame은 I420, NV12, NV21, RGB, RGBA, BGR, BGRA, 파일, 텍스처, UIImage를 지원합니다.
type을 설정한 뒤 processImage:를 호출합니다(추가 모드 인자는 없음). 출력은 입력 형식을 유지합니다.
FBFrameTypeVideo는 라이브 스트림용이고, FBFrameTypeImage는 정지 이미지용입니다.
회전 / 미러 / 변환 / 저장:
YUV 평면: dataY, dataU, dataV, dataUV 및 strideY / strideU / strideV / strideUV.
외부 텍스처
OpenGL ES 스레드에서 엔진을 만들고 externalContext = YES를 설정하세요. 입력과 출력 텍스처는 해당 컨텍스트를 공유해야 합니다.
권장 텍스처 파라미터: GL_LINEAR, GL_CLAMP_TO_EDGE. 엔진은 입력 텍스처를 삭제하지 않습니다. 출력 텍스처는 SDK가 소유합니다.
TRTC / Agora / LiveKit: 서드파티 연동.
라이프사이클
세션 동안 strong 참조를 유지하세요. 뷰 컨트롤러가 사라지면 엔진을 nil로 둡니다. 화면을 떠날 때 캡처 세션을 일시 중지하여 processImage: 호출을 멈추세요.
관련 문서