无法注册到引导服务器

113

我刚刚在程序中更改了一些代码,然后出现了这个错误:

无法使用引导服务器注册 com.yourcompany.XXX。 错误:未知的错误代码。

这通常意味着该进程的另一个实例已经在运行或被卡在调试器中。程序收到信号:“SIGABRT”。

我尝试将程序恢复到一个正常工作的版本,重新启动、清空缓存并构建之前甚至可以工作的版本,但问题仍未解决。

任何帮助都将不胜感激。


完成了以上所有步骤后,我执行了一个单独的程序,而且那个程序运行正常...??? - MadProfit
我在使用工具后不久遇到了这个问题。我想知道它是否有关联。 - Sam
1
这个问题经常发生在我身上,几乎总是发生在我强制取消安装过程之前,在应用程序中调用didFinishLaunching...之前。自几年前以来,我尽量不要在达到那个点之前中断安装,因为这经常会导致上述问题。Xcode从3升级到4以及最新的iOS版本或新的调试器在这里并没有什么区别。 - Jonny
21个回答

116

我能够通过拔掉iPad电源,关机重启,清除所有XCode缓存和目标,并进行清理构建来解决此问题。

我正在运行XCode 3.5.4和iOS 4.2.1

更新:在运行Xcode 4.3和iOS5时遇到了同样的问题-只需对设备进行电源循环即可。


2
在我尝试了其他所有方法之后,重新启动设备是最终解决问题的方法。 - noodl_es
只有在重新启动设备后,我的iPhone 4才能正常工作(与noodl_es相同)。我们可以假设“引导服务器”是设备上的某个东西,因此解决与其相关的问题的“简单”方法就是重新启动设备吗? - Jonny
6
@Sam - 是的,我认为有一些不太合适的进程没有被很好地清理掉。至于MadProfit,我希望能成为他第一个被接受的答案的可疑荣誉 :) - Rayfleck

26

您可能希望kill所有的Simulator进程,这也可能会导致此错误。

这里有一行代码可以杀死它们:

kill -9 `ps ax | grep Simulator | grep -v grep | awk '{print $1}'` 

或者更加简洁,就像@brianegge在评论中提到的:

killall -9 Simulator

我逐字逐句地将这行代码粘贴到终端中,但它无法运行。 - barfoon
2
@barfoon出现了什么错误?使用的是哪个操作系统?如果您没有运行模拟器,您将会收到kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec] - Pål Brattberg
@barfoon - 可能是因为您没有任何模拟器进程。如果您评估“kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]”,则不会得到任何结果,因此“kill -9 {empty}”会返回错误:kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]。 - Aneil Mallavarapu
一个更短的命令是 killall -9 Simulator - brianegge
1
你也可以尝试使用“活动监视器”来结束你想要终止的所有进程,它们都可以在那里看到。只需在 Spotlight 中键入“活动监视器”。希望这有所帮助。 - iphonic
请注意,如果您有任何其他与模拟器名称无关的进程,这些进程也将被终止。 - Michael Mior

15

我的解决方案是重启iPad,等一会儿再试一次。


14
如果你在使用模拟器时遇到问题,可以查看这个帖子:测试模拟器时遇到奇怪的错误
你可能会对这个测试感兴趣,因为它会尽快告诉你是否必须立即重新启动:
打开终端并运行此命令:ps -Ael | grep Z。如果你得到两个条目,一个是“(clang)”另一个则是你的应用程序或公司名称,那么你需要重新启动。
如果你是开发人员,请输入一个简短的 bug 报告,并告诉苹果,不得不重新启动是多么的麻烦,同时提及他们可以将此 bug 重复到 "rdar://10401934"。

11

我遇到了同样的问题,在Xcode上运行iPhone应用程序时。我收到的消息与上面的相同:

无法在引导服务器上注册xxx.com.company.appname。这通常意味着此进程的另一个实例已经在运行或者挂在调试器中。

我尝试了许多方法来解决问题,按照以下顺序进行,但都没有成功:

  • 在iPhone上强制退出应用程序
  • 强制退出并删除iPhone上的应用程序
  • 打开和关闭项目
  • 清理项目
  • 重新启动XCode

最终,我重新启动了iPhone,问题消失了,这让我认为问题的根源是Xcode无法或不会杀死的挂起进程。如果我能够精确地复制我的调试会话期间所做的事情,并得到这种奇怪状态,我会在这里添加另一个说明。


5

我向苹果提交了一个错误报告: https://bugreport.apple.com/cgi-bin/WebObjects/RadarWeb.woa/19/wo/WBbbbyopNFW8FFUuNSbk0w/10.66

如果您无法访问,请告诉我。

摘要: XCode调试器未释放引导服务器端口

复现步骤: 在Xcode 4.2 Build 4D5163b上的Lion 10.7.2中模拟iPhone iOS5应用程序时,崩溃有时会导致无法启动调试器。相反,Xcode会产生以下错误:

Couldn't register com.MyApp.MyApp with the bootstrap server. Error: unknown error code. This generally means that another instance of this process was already running or is hung in the debugger.Program received signal: “SIGABRT”.

预期结果: 在崩溃后应能够启动调试器。

实际结果: 无法启动调试器。我发现使模拟器重新工作的唯一方法是重新启动Mac OS。 回归: 备注: 很多人都遇到了这个问题: iPhone-在模拟器上测试时出现奇怪的错误 无法注册引导程序服务器 Xcode IPHONE中的引导程序服务器错误 https://discussions.apple.com/message/10416765?messageID=10416765 退出XCode和模拟器(并确保ps -Al | egrep "Xcode|Simulator"不返回任何内容)对于解决问题没有帮助。
运行“launchtl bslist | grep MyApp”会显示com.MyApp仍然注册到引导程序服务器:
$ launchctl bslist | grep MyApp
A  com.MyApp.MyApp.UIKit.migserver
A  com.MyApp.MyApp

我编写了一些代码来查找端口并使其无效,但这也失败了:
NSMachBootstrapServer *bsserver = [NSMachBootstrapServer sharedInstance];
NSMachPort *port = (NSMachPort *)[bsserver portForName:@"com.MyApp.MyApp"];
[port removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:<#(NSString *)#>
NSLog(@"port = %@",port);   
NSLog(@"port.isValid=%d",[port isValid]);
[port invalidate];
NSLog(@"port.isValid=%d",[port isValid]);       

4

我遇到了与Xcode 4相同的问题。解决方案是更改方案设置。 运行设置为调试模式, 测试设置为调试模式, 分析设置为调试模式, 归档设置为发布模式。


有趣的解决方法。我在 iPad 模拟器上遇到了这个烦人的问题。我将设备目标更改为真实设备,关闭了 iPad 模拟器,然后重新在模拟器上运行应用程序,结果它奏效了。 - Thomas Desert

2

重新启动电脑解决了我的问题。这个错误是我将新的iPod Touch连接到我的Mac并同时在模拟器上运行项目时发生的。


2
最简单的方法是更改目标名称, 记得在重启后将其改回。

这确实是最简单的方法。无需重新启动。谢谢! - pgpb.padilla

2
总之,有时候使用“kill -9 (进程ID)”命令会有帮助;有时候(如上所述),使用“launchctl list | grep UIKitApplication | grep“(你的应用程序名称/标识符)”| awk '{print $3}' | xargs launchctl remove”命令也可以解决问题。但如果是“僵尸”进程,则只有重新启动才能解决问题。一个临时解决方案是将标识符(IOS应用程序目标,摘要选项卡)更改为其他内容(例如“com.mycompany1.myapp”而不是“com.mycompany.myapp”),但请记得在重新启动前和提交之前将其改回来。(当然,这将在模拟器上创建另一个应用程序,但我想那不是你最大的问题...)不幸的是,“通向伟大的道路并不容易”...;-)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接