我正在构建一个与命令工具'unrar'捆绑在一起的Mac应用程序来解开一些文件。该应用程序是沙盒。
在xcode中,我将unrar命令工具复制到应用程序的Resourse文件夹(带有名为'exec'的子路径):
复制文件 目的地:资源 - 子路径:执行
在复制阶段之后,我执行运行脚本来设置权利和代码签名,如下所示:
运行脚本: Shell:/ bin / sh
LOCATION="${BUILT_PRODUCTS_DIR}"/"${CONTENTS_FOLDER_PATH}"
IDENTITY="3rd Party Mac Developer Application: CompanyName."
codesign -f -s "$IDENTITY" --entitlements"/<path>/unrar.entitlements" "$LOCATION"/Resources/exec/unrar
在应用程序本身中,我使用NSTask来执行unrar命令:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"unrar" ofType:@"" inDirectory:@"exec"];
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:filePath];
[task setArguments:[NSArray arrayWithObjects:@"e", rarfilepath,extractpath, nil]];
[_task launch];
unrar.entitlements包含:
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.inherit</key>
<true/>
运行应用程序时,一切正常,文件被解压缩。
但是......当我检查系统日志时,我看到以下消息:
secinitd [332]:unrar [94747]:无法获取主可执行文件包的根路径:/Applications/App.app/Contents/Resources/exec/unrar
当我没有运行上面的运行脚本时,消息确实消失了,但是没有为'unrar'命令工具设置权利并且Sandboxing失败。
我现在已经听了三天这个消息意味着什么以及如何解决它,但是我没有想法。
搜索google或stackoverflow也无济于事。
请有人帮我解决这个问题。
谢谢你, 安德烈。
(对不起所有文字,但我不允许发布图片。)
答案 0 :(得分:0)
我认为unrar可执行文件必须位于
中MySandboxApp.app/Contents/Helpers/unrar
Resources文件夹仅限于不可执行的内容。
答案 1 :(得分:0)
我一直将我的主要和辅助二进制可执行文件放在Contents/MacOS
中,但是Contents/Helpers
也一样。
这些文件夹专门包含Mach-O可执行二进制文件:
Folder Executable
_______________________________________________________________________
Contents Top content directory of the bundle
Contents/MacOS Helper apps and tools
Contents/Frameworks Frameworks, dylibs
Contents/PlugIns Plug-ins, both loadable and Extensions
Contents/XPCServices XPC services
Contents/Helpers Helper apps and tools
Contents/Library/Automator Automator actions
Contents/Library/Spotlight Spotlight importers
Contents/Library/LoginItems Installable login items
Contents/Library/LaunchServices Privileged helpers installed by ServiceManagement
其他文件夹,例如Contents/Resources
用于非二进制执行文件,例如脚本和数据文件。