Cocoa 沙盒应用程序:Spawn FFMPEG

问题描述 投票:0回答:2

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

有人知道吗?

objective-c cocoa nstask mac-app-store appstore-sandbox
2个回答
0
投票

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

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


0
投票

嗨,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”)]

© www.soinside.com 2019 - 2024. All rights reserved.