【问题标题】:Domain=NSCocoaErrorDomain Code=513 only when rename folder through UITests target for UI AutoamtionDomain=NSCocoaErrorDomain Code=513 仅当通过 UI 自动化的 UI 测试目标重命名文件夹时
【发布时间】:2026-01-23 00:40:01
【问题描述】:

我正在开发像 DropBox 和 Box 应用程序这样的产品,我需要使用自动化验证重命名/添加/删除 I/O 操作。

我正在使用 Xcode 中的 XCUITest 编写 UI 自动化测试用例。 因为我需要使用 I/O 操作来重命名文件/文件夹,但是在使用 moveItemAtPath 函数重命名文件夹时出现以下错误:

Error Domain=NSCocoaErrorDomain Code=513 "“Folder” couldn’t be moved because you don’t have permission to access “Folder1”." UserInfo={NSSourceFilePathErrorKey=*path, NSUserStringVariant=(
Move), NSDestinationFilePath=*destiPath, NSFilePath=*path, NSUnderlyingError=0x6000002507d0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}

在主目标中运行应用程序时它工作正常,在 UnitTest 目标中也可以正常工作,但在运行 UITest 自动化目标时无法正常工作。

注意:应用组也已启用。

感谢任何帮助!

【问题讨论】:

    标签: objective-c xcode cocoa ui-automation xcuitest


    【解决方案1】:

    试试下面的方法。我在引用苹果文档 - https://developer.apple.com/library/archive/documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html#//apple_ref/doc/uid/TP40011183-CH3-SW22

    场景 1: 您的应用需要能够保存扩展名与原始文件不同的文件。例如,当您在 TextEdit 中将图像粘贴到 RTF 文件中并保存时,TextEdit 会将文件的扩展名从 .rtf 更改为 .rtfd(并变成一个目录)。

    要处理这种情况,您必须使用 NSFileCoordinator 对象来协调对文件的访问。在重命名文件之前,调用 itemAtURL:willMoveToURL: 方法。重命名文件后,调用 itemAtURL:didMoveToURL: 方法

    场景 2: 您的应用需要能够打开或保存多个具有相同名称和不同扩展名的相关文件(例如,自动打开与电影文件同名的字幕文件,或允许 SQLite 日志文件)。

    要访问该辅助文件,请创建一个符合 NSFilePresenter 协议的类。该对象应提供主文件的 URL 作为其 primaryPresentedItemURL 属性,并应提供辅助文件的 URL 作为其presentedItemURL 属性。

    用户打开主文件后,你的文件展示器对象应该调用 NSFileCoordinator 类的 addFilePresenter: 类方法来注册自己。

    在这两种情况下,您都必须对应用程序的 Info.plist 文件进行少量更改。您的应用应该已经声明了一个文档类型 (CFBundleDocumentTypes) 数组,该数组声明了您的应用可以打开的文件类型。

    对于该数组中的每个文件类型字典,如果该文件类型应被视为潜在相关类型以用于打开和保存目的,请添加键 NSIsRelatedItemType 和布尔值 YES。

    要了解有关文件呈现器和文件协调器的更多信息,请阅读文件系统编程指南。

    【讨论】:

    • 我尝试使用 NSFileCoordinator 创建和更新文件/文件夹,但使用与 NSFileManager 相同的错误
    【解决方案2】:

    尝试更改您写入的文件夹,或者在您的情况下,我不知道您为什么要重命名该文件夹。如果您必须对您的文件夹做某事,那么可能将该文件夹放在 Documents、Temp 和 Cache 的这些位置之一中。很可能,您会想要写入 Documents 文件夹。

    在我看来,这就像一个代码设计错误。参考这个帖子NSFileManager creating folder (Cocoa error 513.)

    【讨论】:

    • 我正在开发像 DropBox 和 Box 应用程序这样的产品,我需要使用自动化验证重命名/添加/删除 I/O 操作,这就是我需要重命名文件夹/文件相关内容的原因。并且还在特定工作区(如“/User/DropBox/”)中执行该 i/o 操作,因此我无法使用 Documents、Temp 和 Cache 等位置。你在找我吗?
    • 这是在 iOS 还是 macOS 上运行?操作系统可能会将您的路径沙盒化。
    最近更新 更多