在C/C++/Objective-C中,您可以使用编译器预处理器定义宏.此外,您可以使用编译器预处理器包含/排除代码的某些部分.
#ifdef DEBUG
// Debug-only code
#endif
Run Code Online (Sandbox Code Playgroud)
Swift中有类似的解决方案吗?
我的unittest目标构建失败,出现以下错误:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_MCStore", referenced from:
objc-class-ref in MCStoreTests.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
基本信息:
我检查了什么:
Symbols Hidden by Default 没有Other Linker Flags 是-framework XCTestFramework Search Paths 是$(SDKROOT)/ Developer/Library/Frameworks $(继承)一些背景:
我有iOS应用程序,目标配置为运行unitTests.我在我的MacBook上运行构建自动化工具jenkins,它自动构建此应用程序并运行所有测试(使用命令行xcodebuild工具).
一切都运行良好的Xcode 4.这个构建自动化工具在不同的用户下运行,并运行所有这些测试.
我最近切换到Xcode 5,它开始失败,因为它无法启动模拟器.
问题
我有一个方案UnitTests配置为运行测试(逻辑测试).AI使用以下两种方法之一运行这些测试:
在Xcode中命令U.
或者命令行"/ usr/bin/xcodebuild -scheme UnitTests -sdk iphonesimulator -configuration Release clean build TEST_AFTER_BUILD = YES"
在这两种情况下,它都会尝试启动模拟器.但是,根据我的理解,它并不需要它.无论如何,它运行在顶级x86上,它看起来不像在Simulator上安装任何应用程序.
有没有办法摆脱这个讨厌的模拟器启动(因为它打破了我的构建自动化)?
更新1
似乎找到了非常相似的问题,但无法使其正常工作: 在Xcode 4中运行逻辑测试而不启动模拟器
更新2
我找到了非常相关和有趣的问题/答案:Apple CI/Xcode Service和Jenkins
我希望我的应用程序在UI测试模式下运行时运行特殊代码(例如重置其状态).我查看了从UI测试运行应用程序时设置的环境变量,并且没有任何明显的参数来区分正常运行的应用程序与UI测试中的应用程序.有没有办法找出来?
我不满意的两个解决方法是:
XCUIApplication.launchEnvironment一些变量,我稍后在应用程序中检查.这不好,因为您必须在setUp每个测试文件的方法中设置它.我尝试从方案设置中设置环境变量,但在运行UI测试测试时不会传播到应用程序本身.__XPC_DYLD_LIBRARY_PATH.这似乎非常hacky,可能现在只能工作,因为我们如何设置目标构建设置是巧合.