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


370

当我单击UIAlertView的按钮时崩溃时,我正在模拟器上测试我的应用程序。我在那里停止调试,对代码进行了一些更改,然后再次构建了该应用程序。现在,当我运行应用程序时,我在控制台中收到此错误

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

我尝试从模拟器中删除该应用程序,进行了干净的构建,但是在尝试运行该应用程序时仍然出现此错误。

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


2
关于在设备上进行测试时如何处理的任何建议?我尝试重新启动设备Xcode。
iPadDeveloper2011 2011年

1
我还尝试删除设备上的应用程序,退出所有活动的应用程序(双击主屏幕,将手指按住应用程序图标,触摸“-”号),重新启动Xcode,然后注销并再次登录。到目前为止,没有任何效果。
iPadDeveloper2011 2011年

在XCode菜单中尝试“清空缓存”。这也有帮助。
lostInTransit

3
后来发现,对于每个遇到此问题的人来说,大多数情况下都是由于代码中的错误而发生的。查找一些需要花费大量执行时间或使应用程序陷入循环的代码。
lostInTransit

4
发生这种情况时,我只是杀死SimulatorBridge并退出模拟器。ps ax | grep SimulatorBridge
Elland 2012年

Answers:


162

尝试退出并重新启动模拟器?如果“更糟”,您可以随时尝试重新启动:以我的经验,这应该可以解决。


44
最终重启了系统!还是不知道是什么原因造成的!
lostInTransit

6
如下面的评论所述,您通常可以在“活动监视器”中看到挂起的进程并将其杀死。
mxcl 2010年

13
我讨厌重启:)退出挂起的进程对我有用:grep Simulator将显示您正在运行的应用程序,在我的情况下,这是MyApp.app被挂起。
BadPirate 2011年

12
重新启动并没有帮助
Pascal Klein

10
我经常在XCode 4.3中得到它。重新启动应用程序或退出模拟器无济于事。我必须重新启动计算机才能使其正常运行。
奥伊斯坦

242

状态:最近被视为Mac OS 10.8和Xcode 4.4。

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

Mike Ash建议

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

这并不总是有效。实际上,它对我从来没有用过,但在某些情况下显然可以使用。只是不知道哪种情况。因此,值得尝试。

否则,解决此问题的唯一已知方法是重新启动用户启动。重新启动可以做到这一点,但是没有那么激烈/快速的方法。您需要创建另一个管理员用户,但只需执行一次。当事情陷入困境时,以您自己的身份注销,以该用户身份登录,并杀死属于您的主要用户的启动项,例如,

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

将您的主要用户名替换为user_id。以普通用户的身份再次登录,使您回到理智的状态。有点痛苦,但要比完全重新启动少。

细节:

在Lion / Xcode 4.2中,这种情况开始经常发生。(就我个人而言,在组合之前我从未见过。)

该错误似乎已启动,该错误在调试器停止调试而不杀死它时以子代的形式继承应用程序进程。这通常是因为该应用成为僵尸而发出信号,进程状态为ps的Z。

核心问题似乎在启动中实现的引导程序名称服务器中。这(据我所知)将应用程序ID映射到马赫端口。触发错误后,应用程序死亡,但没有从引导程序服务器的名称服务器映射中清除,因此,引导程序服务器拒绝允许以相同名称注册该应用程序的另一个实例。

希望(见评论)强迫wait()僵尸发动能够解决问题,但不能解决问题。核心问题不是僵尸状态(这就是为什么某些僵尸是良性的),而是引导程序名称服务器,没有已知的方法可以消除这种启动的杀戮现象。

看起来该错误是由Xcode,gdb和用户启动之间的错误触发的。我只是通过在iphone模拟器中运行一个应用程序,使其停止在gdb中,然后进行构建并运行到ipad模拟器来重复执行该操作。它似乎对切换模拟器(iOS 4.3 / iOS 5,iPad / iPhone)敏感。当我频繁切换模拟器时,它不会一直发生,而是相当频繁地发生。

登录时启动的杀死操作会破坏会话。注销并重新登录不会杀死启动的用户;OS X使现有过程保持不变。重新启动将解决问题,但这很痛苦。上面的说明速度更快。

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


2
感谢您对新Lion / XCode4.2行为的详尽解释。调试两个单独的应用程序时,这种情况似乎更经常发生。
samkass 2011年

2
不只是狮子。自从使用XCode 4.2以来,仍然在这里使用Snow Leopard,并且多次看到此错误。(在发布iOS SDK 5.0之前,一直使用XCode3.x。)
Jonny

3
感谢您提供的信息...最近这对于我来说是非常疯狂的事情...在过去10分钟内两次。当我不得不不断重启时,Kinda很难获得可靠的工作流程。好了,关闭以重新启动计算机。
布莱德·高斯

1
@smparkes:实际上,它似乎比以前更频繁地发生。我只是更改了bundleID,然后一切又恢复了,但是当您使用要调试的CoreData逻辑时,这很烦人。我会承认,烦恼不如重启。
Mike A

2
4.3.1并刚刚发生了……太烦人了。对我而言,重新启动iPhone本身通常可以解决问题,而无需重新启动Mac。对于我来说,它在Snow Leopard下的XCode 4.2下发生了变位。
TheEye 2012年

70

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

我已经尝试了所有建议,但是除了完全重新启动之外,它们都没有起作用。

这是您确定是否需要快速重启的方法。

列出您所有的僵尸进程:

ps -el | grep 'Z'

如果您看到您的应用程序被列为“僵尸”进程,则需要重新启动计算机。错误消息指出“这通常意味着该进程的另一个实例已在运行或挂在调试器中”。好吧,Xcode正在检测您无法杀死的Zombie进程。然后修复它的唯一方法是重新引导系统。:(

编辑,20120823:我对僵尸进程有更好的了解,所以我想更新此答案。当父进程未在终止子进程上调用wait()(等待进程更改状态)时,将创建Zombie进程。您不能直接在Zombie进程上运行“ kill”,但如果您杀死父进程,则将“收获”并从进程表中删除该僵尸子进程。

我已经很长时间没有看到这个问题了,所以也没有检查过这种情况下的父进程。终止父进程的另一种方法是重新引导系统。:)


谢谢,我有3个程序的7个实例正在以僵尸程序运行。
ArtSabintsev

1
如上所述,重新启动就足够了,但不是必须的。另外,有时候周围的僵尸不会引起问题,因此以这种方式寻找僵尸并不是一种可靠的措施。唯一确定的标志是Xcode中的消息。
smparkes 2011年

您是否尝试过以root身份杀死这些僵尸进程?我重新启动后才想到要这样做。
Ryan H.

1
@smparkes,是的,基于讨论此错误消息的问题,这是显而易见的。
jyap 2012年

1
@HZC,是的,即使以root身份也无法杀死僵尸进程。
jyap 2012年

20

我只是发生这种情况:我仅在我的设备上收到错误,并且模拟器运行正常。我最终不得不重置设备,错误消失了。


1
同样在这里,重新启动设备,它消失了。模拟器运行良好
agente_secreto 2011年

15

我最近经常遇到这个问题。什么会阻止这种情况发生?注销并解决问题,但是..如此频繁地这样做很烦人。

编辑:

我才找到原因。我在ApplicationWillTerminate方法中有一个错误。因此,当我单击Xco​​de窗口上的停止按钮时,应用程序无法正确终止并开始挂起。

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


2
这为我解决了!ps aux | grep Simulator
Jason Prado 2010年

如果有帮助,我在启动泄漏性能工具时会产生此错误
IssamTP 2010年

14

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

ps -el | grep'Z'
(如先前的评论https://stackoverflow.com/a/8104400/464289),并且只想立即解决问题,您可以这样做,而无需重新启动或杀死任何东西。只需重命名您的项目目标可执行文件:

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

简单!


这对我不起作用,并且得到相同的错误:配给配置文件“ mataleao2”指定了与当前设置“ au.com.mataleao-1”不匹配的应用程序标识符“ au.com.mataleao”
sapatos

您是在模拟器上还是在iPhone上进行测试?
JRG 2012年

我仅在iphone上进行测试,而功能仅在手机上进行测试
sapatos 2012年

7

好吧,没有答案,但至少还要再做一次测试。打开终端并运行以下命令:“ ps-Ael | grep Z”。如果您得到两个条目,一个为((clang)),另一个为您的应用程序或公司名称,则说明已经准备就绪-重新启动。

如果您是开发人员,请输入一个简短的错误,并告诉Apple重新启动绝对令人讨厌,并提及他们可以将此错误复制到我刚刚输入的“ rdar:// 10401934”中。

大卫


5

重置iOS模拟器为我修复了该错误。尽管这将删除您在Simulator中拥有的所有应用程序,但可以解决此问题而无需重新启动计算机。

您可以通过执行以下操作来重置iOS模拟器:

1)转到主屏幕最左侧的Apple()徽标旁边的“ iOS Simulator”菜单。
2)选择“重置内容和设置...”。
3)阅读弹出消息,如果同意,请单击“重置”,否则,请单击“不重置”。


3
一点都不起作用,相反,您丢失了所有内容/应用程序/照片/联系人
奇怪的是,

1
@strange它是模拟器。无论如何,它不包含任何重要信息。:)
Evgen Bodunov 2012年

5
  1. 关闭模拟器
  2. 停止应用程序在xCode中运行。
  3. 打开活动监视器,然后搜索使用您的应用程序名称运行进程
  4. 在活动监视器中终止此过程
  5. 重建项目,一切准备就绪

即使使用“强制退出”,该过程似乎也不会在Activity Monitor中被杀死
Ferruccio 2012年

4

我在僵尸进程中遇到@jyap问题。清除它们的唯一方法是重新启动。但是,我注意到,我在同一个项目上工作的朋友会遇到同样的问题,但是可以杀死模拟器而无需创建僵尸进程。我完全卸载了Xcode并重新安装了它,尽管仍然出现错误,但它不会创建僵尸进程,因此不必重新启动。

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


4

几乎每次我在模拟器中测试应用程序时,我都会经常发生此错误,这迫使我重新启动。

如果您想完成一些工作,这是一种解决方法:

  • 在项目导航器中单击您的项目
  • 转到目标 -> 信息
  • 为“ 应用程序不在后台运行”添加密钥,并将其设置为YES

这意味着当您按下模拟器中的主页按钮或退出模拟器时,该应用程序不会挂起。

发行前别忘了更改此设置!把它放到你的发布清单上:)


1
这很危险,因为它会阻止您测试背景行为,直到您记得将其更改回去。
tc。

@tc:是的,我同意。但是,如果您每次运行iOS应用程序时都被迫重新启动(这正是我所拥有的),那么这可能仍然比替代方法更好。
克里斯·伯特·布朗

4

如果在iPhone上进行测试时发生这种情况。只需重启手机即可。从我得到的消息来看,电话或模拟器仍然认为该应用程序正在运行,因此在上次运行该应用程序时,它没有正确终止,这可能是因为代码错误或电话/模拟器只想拥有一个呻吟。


4

在iPhone 4上调试我的应用程序时出现此错误。硬重启iPhone解决了我的问题。(关闭iPhone的电源已挂起...)

我的Mac上没有任何僵尸进程,重新启动Mac并不能解决问题。

也许此错误可以同时在模拟器和实际设备上显示出来???



3

我刚遇到这个错误。我尝试重新启动模拟器和Xcode,但是我的项目只有在清理并构建后才能再次运行。不知道是什么原因造成的。


3

我有一个递归设置器,它遍历整个堆栈并杀死了我的应用程序,以至于我不得不启动iPad。可以通过代码中的修复来证明。


3

我有同样的问题,并通过执行以下操作解决了

  • 从设备中删除应用,
  • 断开设备与Mac的连接,
  • 关闭设备然后再打开,
  • 退出并重新启动Xcode,
  • 退出仪器
  • 最后,再次清理并构建。

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

  • 删除所有框架,然后再次添加它们。

问题是针对模拟器的。不适用于设备。
2012年

3

替代解决方法:

  • 给您的应用一个新的标识符。如果名为com.foobar.myapp,则将其称为com.foobar.myapp01

您丢失了该应用程序中的所有数据,因为就iPhone模拟器而言,它实际上是一个正在运行的新应用程序。这可能比重新启动更令人讨厌-只是想将其添加到列表中。


3

原因

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

修复

等待直到您看到“停止”按钮再次变为活动状态,然后再次运行。

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


刚刚再次遇到此错误。我尝试了一切,最后iPad重新启动修复了它。
5bars 2012年

2

通过删除应用程序后重新启动手机,然后将其重建干净并再次运行来解决。现在工作正常。

奇怪的。


2

对于我的问题,无需重建或重新安装,就我而言,尝试在iPhone上运行应用程序时出现错误。模拟器工作正常。

解决方案:删除手机上的应用程序,重新启动手机,现在一切正常。


2

在Lion上使用Xcode 4.2.1对我来说发生了很多事情。更新至4.3.2,现在不再发生。他们很高兴将其修复。


2

Mike Ash 发布了一个不需要重新启动的解决方案(上帝保佑他!)。赶紧跑:

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

上面的命令列出了所有已启动的作业,使用名称为UIKitApplication的作业搜索(将是与您的应用程序不适当粘贴的作业相对应),提取名称,并告诉launchd删除该作业。


我有很多机会对此进行测试(叹气)。有时它可以工作,有时我必须重新启动我的iPhone,甚至是我的Mac(上面的命令显示“找不到进程”)。
2012年

2

我认为这是由于在按下Xcode中的停止按钮之前在iPhone上强行退出了您的应用程序引起的。有时,当您按Xcode中的“停止”按钮时,如果挂起了应用程序,则需要花费额外的时间才能退出该应用程序。但是请耐心等待,它最终会在大多数时间退出。


1

您可以在函数或选项卡中分配变量。如果退出函数或选项卡,它将取消分配。因此,您必须声明它的成员变量或全局变量。


1

我一直都收到此错误,直到我不再信任“运行”对话框中的“停止”按钮。既然我总是在尝试运行之前先点击工具栏中的停止,我还没有遇到任何僵尸进程。


0

噢,我的-我尝试了上面和其他帖子中列出的所有内容。重新安装Xcode,重新启动计算机,将所有丢失的文件复制到正确的文件夹中...最终,我备份了iphone,将其擦除并恢复了,然后正常工作了!

我认为读入此内容及其周围的原因可能是断开与运行性能工具的iphone白色的连接,以发现泄漏。或类似的东西。

Aaaah,松了一口气。


0

在最坏的情况下,重置 iOS Simulater的内容和设置,就我而言,大多数情况下,与模拟器一起退出XCode总是对我有用,而XCode4.6经常会被挂起


0

我曾经遇到过这种问题,这就是我所做的

  1. 从模拟器中删除该应用。
  2. 删除派生数据文件夹。
  3. 通过选择产品菜单在项目中执行清理操作-清理
  4. 重置模拟器。
  5. 退出Xcode。
  6. 如果工作正常,请立即尝试运行该项目,否则转到步骤7
  7. 重复从1到5的所有步骤,然后重新启动计算机。

在大多数情况下,我需要在步骤6中运行它,在极端情况下,我必须重新启动计算机。


0

此错误曾经在旧版本的iOS Simulator中发生,因为在另一台已关闭的设备中作业的旧实例可能与新实例冲突。

iOS 6.0及更高版本不应遇到此类问题,因为iOS 6.0引入了引导程序子集的用法,而iOS 7.0引入了与主机的引导程序服务器完全隔离的专用引导程序服务器(launchd_sim)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.