- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Xcode 4 中创建了一个全新的 iOS 项目,并包含了单元测试。默认应用程序有 2 个目标,主应用程序和单元测试包。使用“产品 > 测试”(Command-U)构建应用程序,构建单元测试包,启动 iOS 模拟器并运行测试。现在我希望能够从命令行做同样的事情。命令行工具(xcodebuild)没有“测试”操作,但似乎我应该能够直接构建单元测试包目标,因为它取决于应用程序本身。但是,运行:
xcodebuild -target TestAppTests -sdk iphonesimulator4.3 -configuration Debug build
/Developer/Platforms/iPhoneSimulator.platform/Developer/Tools/Tools/RunPlatformUnitTests:95: warning: Skipping tests; the iPhoneSimulator platform does not currently support application-hosted tests (TEST_HOST set).
最佳答案
重要的提示
使用 Xcode 5.1(可能还有早期的 Xcode)test
是一个有效的构建 Action 。
我们能够使用 test 的构建操作和适当的 -destination
调用 xcodebuild 来替换下面的整个 hack。选项。 man xcodebuild
了解更多信息。
以下信息留作后人
我尝试破解 Apple 的脚本来运行单元测试,如
Running Xcode 4 unit tests from the command line
和
Xcode4: Running Application Tests From the Command Line in iOS
以及网络上许多类似的帖子。
但是,我遇到了这些解决方案的问题。我们的一些单元测试使用了 iOS 钥匙串(keychain),当在来自黑客 Apple 脚本的环境中运行时,这些调用因错误而失败(errSecNotAvailable
[-25291] 表示病态的好奇)。结果,测试总是失败......测试中的一个不受欢迎的功能。
根据我在网上其他地方找到的信息,我尝试了许多解决方案。例如,其中一些解决方案涉及尝试启动 iOS 模拟器的安全服务守护进程。在与这些斗争之后,我最好的选择似乎是在 iOS 模拟器中运行,充分利用模拟器环境。
我做了什么,然后得到了 iOS 模拟器启动工具 ios-sim .此命令行工具使用私有(private) Apple 框架从命令行启动 iOS 应用程序。然而,对我来说特别有用的是它允许我将环境变量和命令行参数传递给它正在启动的应用程序。
通过环境变量,我能够将单元测试包注入(inject)到我的应用程序中。通过命令行参数,我可以传递让应用程序运行单元测试并退出所需的“-SenTest All”。
我为我的单元测试包创建了一个方案(我称之为“CommandLineUnitTests”)并检查了构建部分中的“运行”操作,如上面的帖子中所述。
不过,我没有破解 Apple 的脚本,而是将脚本替换为使用 ios-sim 启动应用程序并设置环境以将我的单元测试包单独注入(inject)应用程序的脚本。
我的脚本是用比 BASH 脚本更熟悉的 Ruby 编写的。这是那个脚本:
if ENV['SL_RUN_UNIT_TESTS'] then
launcher_path = File.join(ENV['SRCROOT'], "Scripts", "ios-sim")
test_bundle_path= File.join(ENV['BUILT_PRODUCTS_DIR'], "#{ENV['PRODUCT_NAME']}.#{ENV['WRAPPER_EXTENSION']}")
environment = {
'DYLD_INSERT_LIBRARIES' => "/../../Library/PrivateFrameworks/IDEBundleInjection.framework/IDEBundleInjection",
'XCInjectBundle' => test_bundle_path,
'XCInjectBundleInto' => ENV["TEST_HOST"]
}
environment_args = environment.collect { |key, value| "--setenv #{key}=\"#{value}\""}.join(" ")
app_test_host = File.dirname(ENV["TEST_HOST"])
system("#{launcher_path} launch \"#{app_test_host}\" #{environment_args} --args -SenTest All #{test_bundle_path}")
else
puts "SL_RUN_UNIT_TESTS not set - Did not run unit tests!"
end
xcodebuild -sdk iphonesimulator -workspace iPhoneApp.xcworkspace/ -scheme "CommandLineUnitTests" clean build SL_RUN_UNIT_TESTS=YES
SL_RUN_UNIT_TESTS
环境变量,脚本在项目的源代码树中找到“启动器”(iOS-sim 可执行文件)。然后,它根据 Xcode 在环境变量中传递的build设置构建我的单元测试包的路径。
environment
中设置了这些变量在脚本中间散列,然后使用一些 ruby grunge 将它们加入到
ios-sim
的一系列命令行参数中。应用。
TEST_HOST
从环境作为我要启动的应用程序和
system
命令实际执行
ios-sim
传递应用程序、设置环境的命令参数和参数
-SenTest All
以及正在运行的应用程序的测试包路径。
关于Xcode 4 : Run tests from the command line (xcodebuild)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5403991/
回到 Xcode 9,有一个名为“Clean Build Folder...”(⌥⇧⌘K)的构建选项,它删除了构建文件夹中的所有文件,只留下没有内容的文件夹。从那时起,此行为被删除,菜单项的标题更改为
我正在尝试在 hudson 构建服务器上设置 clang 静态分析器,如果我遵循建议 in this blog post我有以下错误: cc1obj: error: unrecognized comm
我想通过命令行 (xcodebuild) 将命令行参数传递给我的 iOS 测试。我正在 XCode 上寻找与此设置等效的内容: 简单地将参数传递给 xcodebuild 是行不通的,例如: xcode
从今天早上开始,在我的 iMac(macOS High Sierra 版本 10.13.6)上,每当我打开 iTerm2 窗口(安装了 Oh My Zsh)时,我都会看到: 似乎它正在尝试运行 xco
我正在尝试将我的项目集成到 Travis CI 中,但我的构建失败并出现以下错误: 架构 i386 的 undefined symbol 和架构 x86_64 的 undefined symbol 我
我看到了this教程,我想知道使用 Make 设置目标进行构建和测试与使用 sh 脚本或事件单独的 Jenkin 作业进行构建和测试相比有什么优势?一般来说,我对 CI 和脚本编写很陌生,如果这是一个
我在任何地方都看不到这个文档——有没有想过我们如何使用 xcodebuild 为 Mac 的 UIKIt 构建项目(即 Catalyst)? 您可以指定“-sdk iphoneos”与“-sdk ip
我遇到了一个问题,即使用 XCode-GUI 存档操作构建的文件和使用命令行构建(xcodebuild 命令)创建的文件之间的 iOS 应用程序文件 (IPA) 的大小不同。尺寸很重要,因为我们从 A
我正在尝试使用以下设置运行 appium 脚本: Appium version : 1.6.4 Xcode : 8.3.2 Mac : 10.12.4 iPhone : 10.3.1 下面是我用来在
我正在尝试使用 Xcode 在 iPhone 6 模拟器上运行亚马逊应用。 应用正在 iPhone 模拟器中安装,但无法与其元素交互。 Appium 版本 - 1.7.2 Xcode 版本 9.2 平
我正在尝试在 iPhone 5S 真实设备上使用 Appium 启动 iOS 应用程序。这是我的设置 Appium version : Version 1.10.0 (1.10.0.20181230.
当我尝试使用 appium 桌面启动 session 时出现以下错误: 处理命令时发生未知的服务器端错误。原始错误:由于 xcodebuild 失败而无法启动 WebDriverAgent:“xcod
当我尝试使用 appium 桌面启动 session 时出现以下错误: 处理命令时发生未知的服务器端错误。原始错误:由于 xcodebuild 失败而无法启动 WebDriverAgent:“xcod
以下命令卡在我的 osx 上: xcodebuild -scheme myscheme clean archive -archivePath /tmp 此命令产生两个输出行,然后挂起: User d
我在持续集成服务器上的 bash 脚本中使用 xcodebuild。 我想知道脚本中的构建何时失败,因此我可以提前退出并将构建标记为失败。 xcodebuild 向控制台显示 BUILD FAILED
通常我使用 Xcode 使用企业构建来构建 ipa 文件: 这些使用 xcodebuild 的等效项是什么? 如何设置“exportOptions.plist”,尤其是关键标签? 最佳答案 我假设您使
xcodebuild 项目,我可以打开 Xcode UI 并构建项目。它也很好地对代码进行了签名。 与我尝试使用命令行工具 xcodebuild 构建相同。它给出了“代码证书错误” 这是使流程自动化所
无论如何要指定 xcodebuild 的输出文件(即 .app)放在哪里?默认情况下,它位于: /Users/myusername/Library/Developer/Xcode/DerivedDat
我有一个项目,需要生成两个可执行文件,一个是 64 位 (x64_86),另一个是 32 位 (i386);它们不能合并。 该项目包括链接到第三方框架。 在 XCode 中编译没有问题。 单独使用 x
我有一个古玩问题。 我有一个项目,我一直在使用 XCode IDE 构建它,并且它运行良好。现在我正在设置 Bamboo 来构建项目,因此我正在从命令行构建它。 问题是,如果我从 GIT 中检查我的代
我是一名优秀的程序员,十分优秀!