在我的应用程序的单元测试中,我创建了一个文档范围的NSURL
书签。这些测试在我的机器上一直可以正常工作(现在仍然可以),但现在在 Xcode Server bot 上运行时失败了。我没有对单元测试包进行代码设计。
- (void)testBookmarks
{
// Create testing directory
NSFileManager *fm = [NSFileManager defaultManager];
NSString *sourceDir = [fm currentDirectoryPath];
NSString *testingDir = [sourceDir stringByAppendingPathComponent:@"~testing dir"];
if ([fm fileExistsAtPath:testingDir]) {
[fm removeItemAtPath:testingDir error:NULL];
}
[fm createDirectoryAtPath:testingDir
withIntermediateDirectories:NO
attributes:nil
error:NULL];
// Create file to create bookmark to
NSString *bookmarkedFilePath = [testingDir stringByAppendingPathComponent:@"fileToBookmark.txt"];
[fm createFileAtPath:bookmarkedFilePath
contents:nil
attributes:nil];
NSURL *originalURL = [NSURL fileURLWithPath:bookmarkedFilePath];
// Create file to create bookmark relative to
NSString *relativeFilePath = [testingDir stringByAppendingPathComponent:@"relativeToFile.txt"];
[fm createFileAtPath:relativeFilePath
contents:nil
attributes:nil];
// Create a document-scoped bookmark
NSError *docScopedError = nil;
NSURL *relativeToURL = [NSURL fileURLWithPath:relativeFilePath];
NSData *bookmark = [originalURL bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
includingResourceValuesForKeys:nil
relativeToURL:relativeToURL
error:&docScopedError];
// Assert everything went well
XCTAssertNil(docScopedError, @"Error while creating document-scoped bookmark from URL:\n%@\nrelative to: %@",
originalURL, relativeToURL);
XCTAssertNotNil(bookmark, @"No bookmark created to URL:\n%@\nrelative to: %@",
originalURL, relativeToURL);
}
两个断言都失败了,并且记录的消息验证两个 URL 都不为零,并且我能够验证两个文件确实存在于磁盘上。它们都包含在 Git 结帐目录中,该帐户具有完全访问权限。relativeToUrl
指向在测试之前创建的文件。
生产的NSError
有以下信息:
“错误域=NSCocoaErrorDomain Code=256 “无法打开文件。”(安全策略不允许的项目 URL)UserInfo=0x10691c6d0 {NSDebugDescription=安全策略不允许的项目 URL}”
它可能指的是什么安全策略,我将如何更新它?同样,所有这些在我的本地开发机器上都可以正常工作。
更新
我创建了一个演示项目,并将其推送到GitHub。随意创建您自己的 Xcode Bot,从那里拉出,看看您是否可以重现。我能够使用干净的 OS X、Xcode 和服务器安装进行重现。