【问题标题】:XCTestTarget - After upgrading to Xcode 8.2 [[NSFileManager defaultManager] currentDirectoryPath] returns /private/tmpXCTestTarget - 升级到 Xcode 8.2 [[NSFileManager defaultManager] currentDirectoryPath] 后返回 /private/tmp
【发布时间】:2017-05-04 10:03:32
【问题描述】:
从 OS X 10.10.2 和 Xcode 6.2 升级到 macOS sierra 10.12.2 和 Xcode 8.2 后,[[NSFileManager defaultManager] currentDirectoryPath] 返回 /private/tmp 而不是项目目录。在 Xcode 6.2 中,它返回项目目录。有什么需要手动设置的吗?
问题仅在于测试目标,我创建了一个示例项目和输出
NSLog(@"currentDirectoryPath is %@",[[NSFileManager defaultManager] currentDirectoryPath]); 是实际目标的工作目录,但对于测试目标,它始终是 /private/tmp。
【问题讨论】:
标签:
ios
objective-c
xcode8
macos-sierra
【解决方案1】:
使用 currentDirectoryPath() 不是您最好的选择(使用 Xcode8)。在你的测试类中你应该使用:
[[NSBundle bundleForClass:[self class]] bundlePath];
或
[[NSBundle bundleForClass:[self class]] bundleURL];
这将返回一个指向捆绑包安装位置的 NSString / NSURL。对于模拟器构建,路径如下:
- 逻辑测试目标:$BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME
- 应用程序测试目标:$BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME/PlugIns/$TEST_TARGET_PRODUCT_NAME.xctest
了解这一点后,您可以从测试包中加载资源,例如通过
[[NSBundle bundleForClass:[self class]] pathForResource:[filename stringByDeletingPathExtension] ofType:[filename pathExtension]]