macOS
AppKit / SwiftUI 应用可以使用 Objective-C 或 Swift,已有原生程序也可以继续使用 C/C++。Apple SDK 与 iOS 共用一套包装接口,macOS Framework 可以同时包含 Apple Silicon 和 Intel 架构。
架构选择、CPU / CoreML 构建及命令行检查见 macOS 构建。Objective-C 与 Swift 接入提供完整的文件检测代码和资源管理说明。
选择 SDK 包
| App | Frameworks |
|---|---|
| Objective-C / Objective-C++ | InspireFace.framework 或 InspireFace.xcframework。 |
| Swift | 同一次构建的 InspireFace 与 InspireFaceSwift。 |
| 已有 C/C++ 程序 | 继续使用原始头文件和库,或使用核心 Framework 中的 C 头文件。 |
如果已发布的下载包尚未包含新接口,使用当前源码构建。CPU 与 CoreML 选择其中一套;两者模块名相同,不能同时链接到一个应用。
组合包可以包含 arm64 和 x86_64,单架构构建则只包含指定架构。通过 sdk-manifest.json 或单架构的 sdk-info.json 确认架构和最低系统版本。macOS deployment target 可以配置,并不是包装接口固定要求某个系统版本。
在 Xcode 中链接与嵌入
macOS 的 InspireFace.framework 和 InspireFaceSwift.framework 是动态库。将所需的 XCFramework 或 macOS Framework 加入 App Target,选择 Embed & Sign。手动复制时保留 Versions/ 目录结构。CPU 推理依赖已链接进核心 Framework。
| Setting | 配置 |
|---|---|
| Framework Search Paths | 直接使用 Framework 时,填写 macOS Framework 所在目录。 |
| Runpath Search Paths | 标准 macOS App Bundle 包含 @executable_path/../Frameworks。 |
| Other Linker Flags | 保留 $(inherited);Apple Framework 接入也可使用 -ObjC。 |
| App architecture | 与 SDK 架构匹配;通用应用需要两个架构切片。 |
| Deployment target | 不低于各个选用切片记录的最低版本。 |
同一个可执行文件不要同时链接原始 libInspireFace 与核心 Framework。命令行工具需要在部署目录放置 Framework 并配置相应的 @rpath,不要让最终程序依赖本机 SDK 构建缓存中的路径。
模型文件与沙盒
随 App 分发模型时,将 Pikachu 加入 Copy Bundle Resources,通过 Bundle.main.path(forResource:ofType:) 或 NSBundle 获取路径。需要更新的模型可复制或下载到应用的 Application Support 目录,再启动 SDK。命令行工具可以通过参数接收模型的绝对路径。
沙盒应用读取用户选择的图片时,通过文档或文件选择流程获得访问权限;如果使用了 security-scoped access,保持访问到 SDK 完成文件读取为止。模型加载和检测放在工作队列,将复制后的坐标传回主队列绘制。
完整检测函数可直接用于 macOS,只使用 Foundation 和 SDK 模块,不需要 UIKit 或自定义 Swift 桥接层。
摄像头与像素输入
AVFoundation 视频回调传入 CMSampleBuffer,通过 CMSampleBufferGetImageBuffer 取得图像。像素缓冲区示例接受紧密排列的 BGRA、RGBA、灰度,以及连续存储的 NV12。摄像头带行填充时,可使用完整 BGRA 行复制函数。
在 Info 设置中添加 NSCameraUsageDescription。开启 App Sandbox 的应用还需启用 Camera 能力,打开采集设备前先请求用户授权。
每路视频使用一个串行分析队列和一个跟踪会话,限制待处理帧数量,不要将借用的人脸指针传到另一个任务或队列。图像坐标到 AppKit 显示坐标需要单独变换,也要考虑视图的 flipped 状态。
CoreML 与运行诊断
评估 Apple 加速时,使用 CoreML 构建及配套的 Apple 模型包。Intel 与 Apple Silicon 的硬件能力不同,选择 Neural Engine 模式并不代表 Intel Mac 具有这类硬件。模式设置见 CoreML 运行模式。
记录性能时同时记录 SDK 版本、架构、模型包和后端。IFDiagnostics / InspireFaceDiagnostics 可查询版本与组件信息,API 使用示例提供具体写法。除了验证 Framework 编译,还应在各个支持架构上运行最终签名的应用。
