我有一个应用程序,它使用 FFMPEG 和 FFPROBE 对用户可以使用我的应用程序打开的视频执行一些任务。
对于非沙盒应用程序,一切正常,但是当我的应用程序在沙盒中运行时,FFPROBE 似乎无法启动。 控制台显示以下内容:
08.06.15 12:27:55,803 secinitd[281]: ffprobe[4049]: 注册请求失败: (0x11, 0x0) 容器对象初始化失败。 无法获取应用程序“/Users/Alex/.../ffprobe”的bundleid
此消息中提到的
ffprobe
的路径指向应用程序包中的 MacOS
目录(构建阶段将这两个二进制文件复制到可执行目录中)。
我进行了很多搜索,发现了一些有关权利的提示。当然,我的沙盒应用程序有其权利,并且在构建我的应用程序时,它会被签名(带有
--deep
签名标志)。它甚至通过了 App Store 的技术权利检查。
现在我陷入困境,想知道为什么我的应用程序无法启动 FFPROBE(和 FFMPEG)。
有人知道吗?
看来我找到了解决办法。我不知道所有这些步骤是否都是必要的,但这是我已经尝试过的以及似乎(!)有效的方法:
true
键 com.apple.security.inherit
和 com.apple.security.app-sandbox
plist
文件,并用合适的值填充了键CFBundleName
和CFBundleIdentifier
(我不知道这一步是否有必要)Run Script
构建阶段,它为每个使用的二进制文件执行 codesign -f -s "your certificate" --entitlements ./ffmpeg.entitlements ./Build/Intermediates/ArchiveIntermediates/App\ Store/InstallationBuildProductsLocation/Applications/<my app>/Contents/MacOS/ffmpeg
。这些步骤会在尝试将应用程序提交到 Mac App Store 时产生合适的权利,并导致正确使用嵌入式二进制文件(至少在我的开发 Mac 和一些同事的 Mac 上)。
嗨,Alex,我在 ffmpeg、ffprobe 和 ffplay 上遇到了同样的问题,但在存档并验证我的 MacOS 应用程序存档后,但我的错误是 应用程序沙箱未启用。以下可执行文件必须在权利属性列表中包含布尔值为 true 的“com.apple.security.app-sandbox”权利:[(“com.app.pkg/Payload/app.app/Contents/Resources/ffmpeg ”,“app.pkg/Payload/app.app/Contents/Resources/ffplay”,“com.app.pkg/Payload/app.app/Contents/Resources/ffprobe”)]