在iOS模拟器上测试时出现错误:无法注册到引导服务器

我在模拟器上测试我的应用程序时,它在点击UIAlertView的一个按钮时崩溃了。我在那里停止调试,对代码做了一些更改,并重新构建应用程序。现在,当我运行应用程序时,我在控制台中得到这个错误

无法向引导服务器注册com.myApp.debug。Error:未知错误码。 这通常意味着该进程的另一个实例已经在运行或挂起在调试器中。程序接收到信号:" SIGABRT " .

.

我尝试从模拟器中删除应用程序,做一个干净的构建,但当我尝试运行应用程序时,我仍然得到这个错误。

我应该怎么做才能再次在模拟器上运行应用程序?

128901 次浏览

尝试退出并重新启动模拟器?如果“情况变得更糟”,你可以尝试重新启动:根据我的经验,这应该能解决问题。

我最近经常遇到这个问题。怎样才能防止这种情况发生呢?登出和登录修复了问题,但是..经常这样做很烦人。

编辑:

我刚找到原因。我在ApplicationWillTerminate方法中有一个bug。所以当我点击Xcode窗口上的停止按钮时,应用程序不能正确终止并开始挂起。

检查活动监视器,看看你的应用程序是否在列表中。如果可能,强制退出。

我只是遇到了这种情况:我只在我的设备上得到错误,而模拟器工作正常。我最终不得不重置我的设备,错误就消失了。

我得到了这个错误。我尝试重新启动模拟器和Xcode,但我的项目只会在清洁和构建后再次工作。不知道是什么引起的。

哦,我的天——我尝试了上面和其他帖子中列出的所有方法。重新安装Xcode,重启电脑,将所有丢失的文件复制到正确的文件夹中……最终,我备份了我的iphone,删除并恢复了它,它工作了!

我认为可能是由于我的iphone白色断开了连接,它正在运行性能工具捕捉漏洞。或者类似的事情。

啊,松了一口气。

重置iOS模拟器为我修复了这个错误。虽然这将删除模拟器中所有的应用程序,但它可以在无需重新启动机器的情况下修复问题。

你可以通过以下方法重置你的iOS模拟器:

1)进入“iOS模拟器”菜单,在主屏幕最左侧的Apple()徽标旁边。< br > 2)选择“Reset Content and Settings…”
3)阅读弹出的提示信息,如果你同意,点击“重置”,否则,点击“不重置”

修复后重新启动我的手机删除应用程序,然后重建它干净,再次运行。现在工作正常。

奇怪。

我有一个递归setter,它破坏了堆栈,杀死了我的应用程序,以至于我不得不启动我的iPad。这是可以通过修改代码来证明的。

你可以在函数或选项卡中分配变量。如果你的函数或标签被退出,它将被dealloc。 所以你必须声明它为成员变量或全局变量

我也有同样的问题,并通过以下方法解决了它

  • 从设备中删除应用程序,
  • 断开设备与Mac的连接,
  • 把设备关掉再打开,
  • 退出Xcode重新上线,
  • 戒烟工具,
  • 最后,再次进行清洁和构建。

我还做了一件事,因为Xcode配置为使用iOS 5.0,而我的项目使用iOS 4.3

  • 删除所有框架并重新添加它们。

状态:这个已经在最近的Mac OS 10.8和Xcode 4.4中被看到。

tl;博士:这可以在两种情况下发生:在设备上运行时和在模拟器上运行时。在设备上运行时,断开和重新连接设备似乎可以解决问题。

迈克·阿什建议

launchctl list|grep UIKitApplication|awk '{print $3}'|xargs launchctl remove

这并不总是有效的。事实上,这对我来说从来没用过,但在某些情况下显然有效。只是不知道是哪些情况。所以值得一试。

否则,唯一已知的解决方法是重新启动用户launchd。重启可以做到这一点,但有一个不那么激烈/更快的方法。您需要创建另一个管理用户,但只需这样做一次。当事情发生时,以你自己的身份退出,以那个用户的身份登录,并杀死属于你的主用户的启动,例如,

sudo kill -9 `ps aux | egrep 'user_id .*[0-9] /sbin/launchd' | awk '{print $2}'`

将你的主用户名替换为user_id。再次以正常用户身份登录将使您回到正常状态。有点痛苦,但总比完全重启要好。

细节:

在Lion/Xcode 4.2中,这种情况更加频繁。(就我个人而言,我从未见过这种组合。)

该错误似乎存在于launchd进程中,当调试器停止调试它而不杀死它时,它将应用程序进程作为子进程继承。这通常是应用程序变成僵尸的信号,在ps中进程状态为Z。

核心问题似乎是在launchd中实现的引导名称服务器。这(在我理解的范围内)将应用程序id映射到mach端口。当bug被触发时,应用程序会死亡,但不会从引导服务器的名称服务器映射中清除,因此,引导服务器拒绝允许该应用程序的另一个实例以相同的名称注册。

它被希望(见评论)强制启动wait()僵尸将解决问题,但它没有。这不是僵尸状态的核心问题(这就是为什么一些僵尸是良性的),但bootstrap名称服务器,没有已知的方法来清除这个杀死launchd。

看起来这个bug是由Xcode、gdb和用户launchd之间的一些不好的东西触发的。我只是在iphone模拟器中运行一个应用程序,让它在gdb中停止,然后执行一个构建并运行到ipad模拟器,从而重复了这个楔形操作。它似乎对切换模拟器(iOS 4.3/iOS 5, iPad/iPhone)很敏感。这种情况并不总是发生,但当我频繁切换模拟器时,这种情况就相当频繁了。

在你登录的时候杀死启动会搞砸你的会话。注销和重新登录不会终止用户启动;OS X保留了现有的进程。重启会解决问题,但这是痛苦的。上面的指令更快。

我已经向苹果提交了一个bug。rdar: / / 10330930

没有答案,但至少还有一个测试要做。打开Terminal,运行命令:"ps-Ael | grep Z"。如果你得到两个条目,一个是“(哐当)”,另一个是你的应用程序或公司名称,你就会被重启。

如果你是开发人员,输入一个简短的bug,告诉苹果重启是多么烦人,并提到他们可以将这个bug dup到“rdar://10401934”,就像我刚才输入的那样。

大卫

我遇到了@jyap提到的僵尸进程的问题。清除它们的唯一方法就是重启。然而,我注意到我的朋友在同一个项目中也会遇到同样的问题,但他们可以在不创建僵尸进程的情况下关闭模拟器。我完全卸载了Xcode并重新安装了它,虽然我仍然得到了错误,但它没有创建僵尸进程,所以我不必重新启动。

在此之前,我使用了这个非常丑陋的解决方案:更改应用程序ID并再次运行。你最终会在模拟器中看到应用程序的垃圾副本,但你可以推迟一段时间重新启动。

我发现我已经开始有这个问题的Lion + Xcode 4.2。我在Xcode 4.3中也遇到过这个问题。

我已经尝试了所有的建议,但没有一个是有效的,除了一个完全重启。

以下是判断是否需要快速重启的方法。

列出你所有的僵尸进程:

ps -el | grep 'Z'

如果你看到你的应用程序被列为僵尸进程,你需要重新启动你的机器。错误消息表示“这通常意味着此进程的另一个实例已经在运行或挂起在调试器中”。Xcode会检测这个你无法杀死的僵尸进程。解决这个问题的唯一方法就是重新启动系统。:(

编辑,20120823:我有一些更好的僵尸进程的知识,所以我想更新这个答案。当父进程没有在正在终止的子进程上调用wait()(等待进程改变状态)时,就会创建僵尸进程。你不能直接在僵尸进程上运行“kill”,但是如果你杀死了父进程,僵尸子进程将被“收割”并从进程表中删除。

我很久没有看到这个问题了,所以还没有检查这个场景中的父进程是什么。杀死父进程的替代方法是重新启动系统。:)

  1. 关闭模拟器
  2. 停止应用在xCode中运行。
  3. 打开活动监视器,用你的应用程序名称搜索一个过程运行
  4. 在活动监视器中终止此进程
  5. 重新构建您的项目,您应该已经设置好了

这个错误在我身上发生了很多次,几乎每次我在模拟器中测试应用程序时,都会迫使我重新启动。

如果你想完成一些工作,这里有一个变通方法:

  • 在project导航器中单击您的项目
  • 目标 -> 信息
  • 应用程序不在后台运行添加一个键,并设置为YES

这意味着当你在模拟器中按下home键或退出模拟器时,应用程序不会挂起。

不要忘记在发布之前更改这个设置!把它放在你的发行清单上:)

我的问题不需要重建或重新安装,在我的情况下,当试图在iPhone上运行应用程序时出现了错误。模拟器工作正常。

解决方案:删除应用程序的手机,做一个冷重启手机,现在一切都很好。

我一直得到这个错误,直到我不再相信“运行”对话框中的“停止”按钮。现在我总是在试图运行之前点击工具栏上的“停止”键,我还没有遇到任何僵尸进程。

的原因

在模拟器中运行您的应用程序之前,之前运行的应用程序已经完全停止。

修复

等待,直到您看到停止按钮再次激活,然后再次运行。

(我使用的是Xcode 4.2.1。当我升级到OS X Lion时,这个问题经常发生)。

备选解决方案:

  • 给你的应用一个新的标识符。如果它叫com.foobar。Myapp,命名为com.foobar。myapp01

你会丢失应用中的所有数据,因为就iPhone模拟器而言,它实际上是一个正在运行的新应用。这可能比重启更烦人,也可能不会——只是想把它添加到列表中。

如果在iPhone上测试时出现这种情况。重启电话。从我被告知的电话或模拟器仍然认为有一个应用程序运行的实例,所以当它最后一次运行时,它没有正确地终止做要么在你的代码错误或电话/模拟器只是想有一个呻吟。

我在iPhone 4上调试我的应用程序时遇到了这个错误。重新启动iPhone解决了我的问题。(关机后iPhone挂了……)

我的mac上没有任何僵尸进程,重新启动mac也没有解决问题。

也许这个bug可以在模拟器和实际设备上都体现出来??

如果您发现您的问题是由于僵尸进程:

ps -el | grep 'Z'
(如前面的注释https://stackoverflow.com/a/8104400/464289)并且只想立即修复问题,你可以这样做,而不需要重新启动或杀死任何东西。只需重命名项目目标可执行文件:

  1. 单击左侧窗格上的项目
  2. 在中间窗格中选择建立设置
  3. 在` 包装 `下,将` 产品名称 `从` $(TARGET_NAME)到$(TARGET_NAME).1 `更改

简单!

在Lion上使用Xcode 4.2.1对我来说发生了很多事情。更新到4.3.2,它不再发生了。很高兴他们修好了。

Mike Ash 发布解决方案(上帝保佑他!),不需要重启。运行:

launchctl list|grep UIKitApplication|awk '{print $3}'|xargs launchctl remove

上面的命令列出所有的启动作业,搜索一个 UIKitApplication的名字(这将是对应的作业 你的应用不恰当地停留),提取名称,和 告诉launchd取消这个作业

我认为这是由于在Xcode中按下停止按钮之前在iPhone上强制退出应用造成的。有时候当你在Xcode中按下停止按钮时,如果它挂起,就需要额外的时间来退出应用。但只要有耐心,大多数时候它最终会戒掉的。

重启设备,正常工作!: D

谢谢大家的建议。

在最糟糕的条件重置内容和设置的iOS模拟器,大部分时间在我的情况下,退出XCode与模拟器,总是工作为我与XCode4.6(经常挂起)

我曾经遇到过这样的问题,我是这样做的

  1. 从模拟器中删除应用程序。
  2. 删除派生的数据文件夹。
  3. 通过选择产品菜单-清洁,在项目中执行清洁操作
  4. 重置模拟器。
  5. Xcode辞职。
  6. 尝试运行项目现在,如果它的工作良好,否则转到步骤7
  7. 重复从1到5的所有步骤,然后重新启动计算机。

在大多数情况下,我让它在第6步运行,极端情况下,我不得不重新启动我的机器。

此错误过去常发生在旧版本的iOS模拟器中,因为另一个设备中正在关闭的作业的旧实例可能与新实例发生冲突。

iOS 6.0及以后版本应该不会遇到这样的问题,因为iOS 6.0引入了引导子集的使用,而iOS 7.0引入了专用引导服务器(launchd_sim)的使用,它与主机的引导服务器完全隔离。

如果从命令行运行测试,(使用xcodebuild test),确保运行模拟器匹配您期望在其上运行测试的设备。

您可能正在运行使用iPhone 5的命令行测试。如果您一直在XCode广告中运行iPhone 6,那么运行命令行测试,有时iPhone 6将保持运行状态,您需要手动选择iPhone 5设备,然后再次运行测试。