SSL连接从命令行运行单元测试时出现问题

bel*_*low 14 xcode xcodebuild ocunit ios jenkins

目标

我们的目标是在持续集成环境中执行我们的单元测试(Jenkins)

(我认为每个问题都必须说明一个人想要实现的目标.也许这个问题实际上可以通过一种非常不同的方式解决)

更新:更多关于"你为什么要这样做?"

首先,我们正在讨论具体的,自行开发的硬件.我希望持续集成测试告诉我是否有人在没有告诉所有开发人员的情况下改变了盒子的行为(是的,是的,我知道,这样的事情永远不会发生......)

其次,我们的一些(并非所有)连接使用默认无效的证书,因此我们有代码来检查证书的有效性(SecTrustEvaluate等).当然,理想情况下,我们的测试也会测试该代码.但这似乎太多了.

第三:嗯,如果我能得到真正的交易,为什么我要嘲笑任何东西?IDE没有问题,为什么要命令行.

如果我想要可预测性,我会YES在所有测试中返回;)(我已经看到人们这样做了).不,我想知道代码是否真正适用于我们的设备.这是某种变态的欲望吗?

到目前为止问题已解决

从命令行运行测试听起来非常简单,但是

xcodebuild -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO clean test
Run Code Online (Sandbox Code Playgroud)

导致一个丑陋的错误:

unsupported build action 'test'
Run Code Online (Sandbox Code Playgroud)

所以我在网上搜索了一篇关于从命令行运行OCUnit测试的文章.

我按照所有步骤操作,我可以从命令行运行我的测试,如下所示:

xcodebuild -scheme CITests -sdk iphonesimulator TEST_AFTER_BUILD=YES ONLY_ACTIVE_ARCH=NO clean build
Run Code Online (Sandbox Code Playgroud)

剩下的问题

但是,现在对SSL服务器的任何NSURLConnection都将失败,因为"此服务器的证书无效.".从命令行运行测试时,我听说过钥匙串问题,但这是真的吗?是否拒绝任何SSL连接?

重现

https://github.com/below/SSLTestDemo获取示例.打开它,然后使用Xcode自己的Test⌘U命令运行样本测试.测试应该成功.

现在在命令行上运行测试:

xcodebuild -scheme CITests -sdk iphonesimulator TEST_AFTER_BUILD=YES ONLY_ACTIVE_ARCH=NO clean build
Run Code Online (Sandbox Code Playgroud)

由于"此服务器的证书无效",测试失败.错误.

任何指针?

  • 我做错了吗?
  • 这是一个真正的错误吗?
  • 如果是这样,有工作吗?

任何输入都表示赞赏!

bel*_*low 2

好吧,当我们在 Jenkins 下测试时,我最终没有检查证书。

\n\n

因为在您的应用程序中阻止此类检查的代码是危险的 \xe2\x80\x94\xc2\xa0 毕竟,它可能不会在您发布 \xe2\x80\x94\xc2\xa0 之前被删除,您必须同时设置环境变量和激活它的编译器标志 \xe2\x80\xa6

\n\n

后记:

\n\n

苹果认为这是一个错误,rdar://problem/10406441

\n