在没有沙箱的情况下重新编译旧的可可应用

时间:2018-07-07 06:23:28

标签: xcode cocoa sandbox code-signing

我有几个可可应用程序是私下分发的,并且不使用应用程序商店。至少一年没有碰过它们。我需要做些改变。它们不能与Apple的沙箱正常工作。我试图关闭Xcode(9.4.1)中的沙箱功能,但是缺少权利文件似乎被解释为沙箱功能。我注意到命令行应用程序还没有这个问题(尚未)。如何恢复旧的行为?过去,我对应用程序进行了签名以最大程度地减少用户的困惑,因此,如果可能,我想继续对应用程序进行签名。

更新:我创建了一个仅调用NSOpenPanel()的简单应用,就像这样-

@IBAction func browseFile(sender: AnyObject) {

        let dialog = NSOpenPanel()

        dialog.title                   = "Choose a .pdf file"
        dialog.showsResizeIndicator    = true
        dialog.showsHiddenFiles        = false
        dialog.canChooseDirectories    = true
        dialog.canCreateDirectories    = false
        dialog.allowsMultipleSelection = false
        dialog.allowedFileTypes        = ["pdf"]

        if (dialog.runModal() == NSApplication.ModalResponse.OK) {
            let result = dialog.url // Pathname of the file

我尝试在Xcode 8和Xcode 9下进行构建。似乎签名过程中的某些内容已更改。如果启用沙箱并提供适当的权利,则该应用程序运行时不会出错。否则,出现以下错误:

Faild to get owner UUID for url: file:///Users/david/Public error: Error

请注意,这是一个包含以下内容的权利文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.app-sandbox</key>
    <false/>
</dict>
</plist>

此外,我不清楚“大卫”来自何处。

1 个答案:

答案 0 :(得分:1)

显然,根据Apple技术支持,这是NSOpenPanel中的错误。当前,他们无法解释错误消息的内容,也不能解释为什么仅在关闭沙箱时才会发生错误消息。我向Apple提交了错误报告。