【问题标题】: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]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 2023-04-02
      • 2014-07-04
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      相关资源
      最近更新 更多