为什么可以';t葫芦在模拟器中与我的iOS应用程序交互?

为什么可以';t葫芦在模拟器中与我的iOS应用程序交互?,ios,ios-simulator,calabash,calabash-ios,Ios,Ios Simulator,Calabash,Calabash Ios,我正在将葫芦集成到一个大型项目中。我有葫芦在测试应用程序中工作,所以我知道我的安装和环境设置正确。我正在使用辅助功能标签和.feature文件点击按钮并在字段中键入文本。它工作得很好 然而,我的“真实”项目要大得多,复杂得多。尽管配置与我的测试应用程序相同(请参见下面的统计数据),但当我在真实应用程序上运行一个简单的.feature文件时,我会得到不稳定的结果:大约80%的情况下,它甚至在通过.feature文件的“给定”行之前就挂断了,最终会出现以下消息: Retrying.. HTTPCli

我正在将葫芦集成到一个大型项目中。我有葫芦在测试应用程序中工作,所以我知道我的安装和环境设置正确。我正在使用辅助功能标签和.feature文件点击按钮并在字段中键入文本。它工作得很好

然而,我的“真实”项目要大得多,复杂得多。尽管配置与我的测试应用程序相同(请参见下面的统计数据),但当我在真实应用程序上运行一个简单的.feature文件时,我会得到不稳定的结果:大约80%的情况下,它甚至在通过.feature文件的“给定”行之前就挂断了,最终会出现以下消息:

Retrying.. HTTPClient::ReceiveTimeoutError: (execution expired)
我注意到,在这些情况下,当我尝试使用鼠标与应用程序交互时,应用程序完全没有响应。它似乎已经冻结了。还有一个UIAlertView应该出现,但从来没有出现过。请注意,当我从XCode(相同的“-cal”目标)启动模拟器时,它从未冻结。我可以和它互动,UIAlert出现,一切正常

另外20%的情况下,它会使我的.feature文件更深入一点——它会有效地通过“给定”行,也可能通过其他行,只要它们不涉及与屏幕的交互。任何点击或键入命令都会导致它挂起,并最终超时,并显示与上述相同的“执行已过期”消息

经过大量调查,我已经消除了这个应用程序和我的测试应用程序的环境/配置之间可能存在的任何差异,并确定我的应用程序中一定有葫芦真的不喜欢的东西!不幸的是,我对葫芦太不熟悉了,不知道从哪里开始找。任何帮助都将不胜感激

葫芦团队要求的诊断:

> xcode-select --print-path
/Applications/Xcode.app/Contents/Developer
> xcodebuild -version
Xcode 6.1
Build version 6A1052d
> calabash-ios version
0.11.3
> calabash.framework/Resources/version
0.11.3
irb(main):006:0> server_version
{
                    "app_version" => "0.10",
                        "outcome" => "SUCCESS",
                         "app_id" => "<redacted>",
           "simulator_device" => "iPhone",
                        "version" => "0.11.3",
                       "app_name" => "<redacted>",
    "iphone_app_emulated_on_ipad" => false,
                          "4inch" => true,
                            "git" => {
        "remote_origin" => "git@github.com:calabash/calabash-ios-server.git",
               "branch" => "master",
             "revision" => "40c6245"
    },
          "screen_dimensions" => {
         "scale" => 2,
         "width" => 640,
        "sample" => 1,
        "height" => 1136
    },
                    "iOS_version" => "8.1",
                         "system" => "x86_64",
                      "simulator" => ""
}
>xcode选择--打印路径
/Applications/Xcode.app/Contents/Developer
>xcodebuild-版本
Xcode 6.1
生成版本6A1052d
>葫芦ios版
0.11.3
>calabash.framework/Resources/version
0.11.3
irb(主):006:0>服务器版本
{
“应用程序版本”=>“0.10”,
“结果”=>“成功”,
“应用程序id=>”,
“模拟器_设备”=>“iPhone”,
“版本”=>“0.11.3”,
“应用程序名称”=>“”,
“iphone\u应用程序\u在ipad上模拟\u”=>错误,
“4英寸”=>正确,
“git”=>{
“远程_原点”=>“git@github.com:calabash/calabash ios server.git“,
“分支”=>“主节点”,
“修订版”=>“40c6245”
},
“屏幕尺寸”=>{
“比例”=>2,
“宽度”=>640,
“样本”=>1,
“高度”=>1136
},
“iOS_版本”=>“8.1”,
“系统”=>“x86_64”,
“模拟器”=>“”
}

您能否使用calabash ios控制台成功启动模拟器

尝试编辑并使用此命令运行已生成的cal目标

DEBUG=1 DEVICE_TARGET='iPhone 5s (7.1 Simulator)' SDK_VERSION=7.1 PLATFORM=iphone cucumber -v --format html --out iphone.html $BASE_PATH/your-app/features/TESTCASE.feature

你试过把葫芦升级到.13吗?您是否添加了CFNetwork框架

您是否添加了-force_load“$(SRCROOT)/calabash.framework/calabash”-lstdc++

对不起,没有信息,这是我能想到的全部吗?如果你已经解决了这个问题。你能把它关上吗

还有一个UIAlertView应该出现,但从来没有出现过。请注意,当我从XCode(相同的“-cal”目标)启动模拟器时,它从未冻结。我可以和它互动,UIAlert出现,一切正常

另外20%的情况下,它会使我的.feature文件更深入一点——它会有效地通过“给定”行,也可能通过其他行,只要它们不涉及与屏幕的交互。任何点击或键入命令都会导致它挂起,并最终超时,并显示与上述相同的“执行已过期”消息

葫芦试图自动解除隐私警报。目前,无法选择退出此行为()

我认为现在的情况是UIAlertView出现在instruments可以控制你的应用程序之前。有关此主题和解决方案的详细讨论可在wiki页面上找到


简单地说,您需要延迟UIAlertView的出现。

对应用程序的进程进行一次spindump,查看其线程的运行情况。需要了解有关运行测试所用代码行的更多详细信息吗?您是否使用build命令构建应用程序?还是使用xcode生成?你有几个模拟器吗?如果有,你选择一个吗?你的应用程序名称在中间包含空格吗?我知道这个帖子是旧的,但是,如果你的应用程序在XCOUNT控制台中记录很多,那么它就会冻结。这是苹果公司引入的一个bug。您可以在此处阅读相关内容:。自Xcode 5.1以来,SDK\u版本变量已被弃用。这种平台的使用是非标准的。通常,平台变量用于跨平台测试,可以是
ios
android