集成
创建引擎返回 nil
- 确认已设置
licenseToken或appId+appKey。两者都有时以 token 为准。 - 绑定 Mac Bundle ID(命令行工具:进程名)。
- 在线授权需要 App Sandbox 的 Outgoing Connections,并能访问
/facebetter/v2/auth。 - 在
createEngineWithConfig:之前打开日志,关注事件1/101。 - CocoaPods:
pod 'Facebetter', '2.0.0'。打开.xcworkspace。
编译找不到头文件或类
- 导入
#import <Facebetter/FBBeautyEffectEngine.h>。 - 手动
.framework:Embed & Sign。 - Xcode 15+ CocoaPods 沙盒:将
ENABLE_USER_SCRIPT_SANDBOXING设为 No。
运行时链接 / dyld 错误
- 架构:x86_64 与 arm64。
- 部署目标 macOS 10.15+。
授权
licenseToken 与 appId / appKey
licenseToken 非空时,SDK 在本地校验 token / {token} JSON / .lic。否则走在线授权。详见 授权与许可。
事件 1 或 101
授权或初始化失败。检查 Bundle ID、沙盒网络、token 是否过期以及日志。
美颜
效果太弱或太强
- 美肤 / 美妆 / 滤镜:
[0.0, 1.0]。 - 美型:通过
setReshape:intensity:使用[-1.0, 1.0]。 - 美体:通过
setBodyReshape:intensity:使用[0.0, 1.0]。先登记resource_body.fbd。 - 强度为
0即关闭该项。 - 仅皮肤区域:
setBeautySkinOnly:。
滤镜、贴纸、虚拟背景
传.fbd 路径或字节。沙盒应用必须能读该路径。
处理
processImage: 返回 nil
帧无效、初始化失败,或 externalContext = YES 但当前没有 GL 上下文。
帧类型
将imageFrame.type 设为 FBFrameTypeImage(0)或 FBFrameTypeVideo(1)。没有处理模式参数。
格式转换
使用convert::
NSImage
相机
AVCaptureVideoDataOutput→CVPixelBuffer。createWithNV12:...或createWithBGRA:...。type = FBFrameTypeVideo,可选setMirror:@"horizontal"。- 在 AppKit / OpenGL 视图中显示
[output data]或[output texture]。
性能
- 实时用
FBFrameTypeVideo;关注getStats。 - 一个引擎、串行队列。
- 窗口最小化时暂停采集。
日志
版本
- macOS 10.15+,x86_64 + arm64。
- CocoaPods:
pod 'Facebetter', '2.0.0'。 - Universal Binary:确认 xcframework 含两个切片(
lipo -info)。
沙盒与 App Store
- 在线授权需要出站网络。
- 相机需要
NSCameraUsageDescription。 - 用户选择的文件使用 security-scoped bookmark。
- 不要使用私有 API;实时视频不要在主线程跑引擎。

