XCTestTarget - 升级到Xcode 8.2后[[NSFileManager defaultManager] currentDirectoryPath]返回/ private / tmp

时间:2016-12-19 11:00:16

标签: ios objective-c xcode8 macos-sierra

从OS X 10.10.2和Xcode 6.2 [[NSFileManager defaultManager] currentDirectoryPath]升级到macOS sierra 10.12.2和Xcode 8.2后,返回/private/tmp而不是项目目录。在Xcode 6.2中,它返回项目目录。是否有需要手动设置的设置?

问题仅出在测试目标上,我创建了一个示例项目和输出

NSLog(@"currentDirectoryPath is %@",[[NSFileManager defaultManager] currentDirectoryPath]);是实际目标的工作目录,但对于测试目标,它始终为/private/tmp

1 个答案:

答案 0 :(得分:0)

使用currentDirectoryPath()不是你最好的选择(使用Xcode8)。在测试类中,您应该使用:

CHARACTER(LEN=1000) :: sLine
INTEGER :: nbValues
CHARACTER(LEN=2) :: sNbValues
...
READ(LU, '(A)') sLine
nbValues = LEN_TRIM(sLine) / 10 ! If format is like '(F10.x)'
WRITE(sNbValues, '(I2)') nbValues
READ(sLine, '('//TRIM(sNbValues)//'(F10.3))') MyArray(1:nbValues)

[[NSBundle bundleForClass:[self class]] bundlePath];

这将返回指向bundle的安装位置的NSString / NSURL。对于模拟器构建,路径如下:

  • 逻辑测试目标: $ BUILT_PRODUCTS_DIR / $ FULL_PRODUCT_NAME
  • 应用测试目标: $ BUILT_PRODUCTS_DIR / $ FULL_PRODUCT_NAME / PlugIns / $ TEST_TARGET_PRODUCT_NAME.xctest

了解这一点,您可以从测试包加载资源,例如通过

[[NSBundle bundleForClass:[self class]] bundleURL];