可可沙盒应用程序:Spawn FFMPEG

Posted

技术标签:

【中文标题】可可沙盒应用程序:Spawn FFMPEG【英文标题】:Cocoa Sandbox App: Spawn FFMPEG 【发布时间】:2015-06-08 13:54:23 【问题描述】:

我有一个应用程序,它使用 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)。

有人知道吗?

【问题讨论】:

是的,这些子流程也需要权利。如果我没记错的话,它们是作为签名过程的一部分嵌入的。从 Apple 自己那里找到有关这方面的官方文档应该没有问题。 是的。当我尝试将我的应用程序提交到 App Store 时,会显示所有权利(即使是两个二进制文件的权利)。所以这似乎(!)不是问题,因为如果权利错误,提交到应用商店将不起作用。 参见this(以及后续内容),其中指出Info.plist 还需要嵌入到生成的可执行文件中。 当我正确理解这篇文章时,TO 想要签署他自己的二进制文件(命令行工具)。我需要的是一种执行第三方命令行工具(不是我开发的)的方法。我添加了一个plist 文件并设置了链接器标志-sectcreate __TEXT __info_plist ffprobe.plist,但没有任何变化。问题仍然存在。 【参考方案1】:

看来我找到了解决办法。我不知道是否所有这些步骤都是必要的,但这是我尝试过的并且似乎(!)有效的方法:

    我添加了一个权利文件,其中包含 true 的密钥 com.apple.security.inheritcom.apple.security.app-sandbox 我为每个使用的二进制文件添加了一个plist 文件,并用合适的值填充了CFBundleNameCFBundleIdentifier 键(我不知道这一步是否必要) 我添加了一个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 上)。

【讨论】:

以上是关于可可沙盒应用程序:Spawn FFMPEG的主要内容,如果未能解决你的问题,请参考以下文章

从沙盒可可应用程序向最前面的应用程序发送击键

重新编译没有沙箱的旧可可应用程序

如何将预编译的二进制文件与电子捆绑在一起

mac 开发FFmpeg入门

使用管道字符 |与 child_process spawn

如何卸载 mac ffmpeg