【问题标题】:Accessing NSApplicationScriptsDirectory with NSFileManager in sandboxed app在沙盒应用程序中使用 NSFileManager 访问 NSApplicationScriptsDirectory
【发布时间】:2017-08-25 14:05:05
【问题描述】:

我在使用此代码访问应用程序脚本的默认文件夹时遇到了一些问题(我认为这是正确的做法):

NSError* error;
NSURL* scriptsFolderURL = [[NSFileManager defaultManager] URLForDirectory: NSApplicationScriptsDirectory inDomain: NSUserDomainMask appropriateForURL: nil create: YES error: &error];

NSLog(@"%@", scriptsFolderURL);
NSLog(@"%@", [error description]);

问题是两个 NSLog 调用 print (null),这意味着我什么也得不到。我做错了什么?

【问题讨论】:

  • 如果你只是NSLog( @"%@", error),你会得到什么错误?
  • 您确定在沙箱中运行吗?
  • 是的,我用活动监视器检查过
  • 检查您的Info.plist。我在这里尝试了几个测试,在沙箱内外,我仍然得到了一个很好的 URL,但这取决于 Info.plist 中的应用程序包标识符。如果我使用相同的代码编译并运行单元测试,它会导致与您得到的相同的失败模式 (nil,nil)。
  • 我只记得,因为这似乎是一个新的 API,它可能只有 10.8。它是。我正在运行 10.7。那...可能与问题有关,对吧?

标签: objective-c cocoa appstore-sandbox


【解决方案1】:

NSApplicationScriptsDirectory的注释如下:

// 调用应用程序的用户脚本文件夹的位置 (~/Library/Application Scripts/code-signing-id)

code-signing-id 提示您必须启用代码签名。启用代码签名后,您将收到正确的 URL。

【讨论】:

    【解决方案2】:

    只要你有一个有效的Info.plist 包含一个有效的应用程序包 ID 并且在 OS X 10.8 下运行,这应该可以正常工作。

    但是,我可以确认 API 返回 nil 并返回 nil 错误的情况并不少见,这有点超出 API 合同的范围。

    【讨论】:

    • 好吧,无论如何我都得拿到 10.8,所以这可能是个好时机......谢谢你的帮助
    • 奇数。我正在 10.8.2 上进行测试,但我遇到了问题 - 到处都是零。不过,我的应用程序没有沙盒化 - 这不是它工作的必要条件,是吗?
    • 好吧 - 事实证明这真的只适用于沙盒应用程序。这意味着对于我的混合应用程序,我将不得不使用不同的方式来运行我的脚本,而不是沙盒。叹息。
    猜你喜欢
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    相关资源
    最近更新 更多