70

尝试使用 Xcode 6 在 iOS 模拟器中启动我的应用程序时收到错误 (Domain = LaunchServicesError, Code = 0)。我在 google 中寻找解决方案,但没有找到任何实用的方法。

这个错误是什么意思?

4

31 回答 31

120

此错误表明安装存在问题。不幸的是,Xcode 实际上并没有打印错误消息的内容,这会让您更深入地了解,但您可以查看 ~/Library/Logs/CoreSimulator/CoreSimulator.log 以查看其余的错误详细信息。模拟设备的系统日志(~/Library/Logs/CoreSimulator/[Device UDID]/system.log)中也会有更多关于该问题的信息;在错误发生时查找来自 installd 的消息)。

造成这种情况的常见原因包括捆绑包缺少 Info.plist、捆绑包的 Info.plist 中缺少键或 Info.plist 中某些键的值不被允许。

如果您的应用的 Info.plist 不包含有效的 CFBundleVersion 键/值对,则您的应用可能第一次安装正确但更新失败。许多用户似乎通过在每次安装后执行“重置内容和设置”来解决此问题,但最好通过在 Info.plist 中设置适当的 CFBundleVersion 来解决根本原因。我相信 iOS 8.2 现在在这种情况下在第一次安装时会正确返回错误,而不仅仅是在更新时,所以希望这个问题现在会更加明显。

在不支持硬链接的文件系统上拥有主目录的用户(例如:通过 AFP、SMB 或某些 NFS 服务器的网络主目录)也可能遇到与硬链接相关的问题。如果是这种情况,我建议您在本地 HFS+ 文件系统上创建一个用于模拟器开发的路径(例如:/var/simulator/[user])并从 ~/Library/Developer/CoreSimulator 创建一个指向该路径的符号链接。此特定问题已在其中一个 iOS 8.2 测试版中得到修复。

在另一种情况下,Build&Run 在第一次尝试时总是会成功,但随后的尝试有时会由于 Info.plist 的更改而失败(例如:因为某人的构建系统设置导致 CFBundleVersion 在每次迭代中都不同)。您通常可以通过删除已安装的应用程序(使用主屏幕上的长按或xcrun simctl uninstall [Device UDID] [app identifier])或将设备擦除回默认状态来恢复。要擦除设备,请xcrun simctl erase [Device UDID]从终端执行或Erase Contents & Settings从 iOS 模拟器菜单中选择。此特定问题已在其中一个 iOS 8.2 测试版中得到修复。

Xcode 6.2 用户正在发生此问题的较新实例。如果您的应用程序中捆绑了 WatchKit 应用程序扩展,它将无法安装到 iOS 8.2 之前的 iOS 模拟器运行时版本。作为一种解决方法,当您想使用 iOS 8.1 和更早的运行时进行测试时,您需要手动禁用应用程序扩展安装。

如果您需要更具体的帮助,请提供来自 CoreSimulator.log 的完整错误消息以及来自 installd 和 CoreSimulatorBridge 的任何消息,它们大约同时出现在 ~/Library/Logs/CoreSimulator/[Device UDID]/system.log 中这将揭示潜在的问题。

于 2014-09-30T20:47:08.303 回答
41

您的项目是否包含小部件或扩展程序?如果是这样,问题可能是您的小部件/扩展的捆绑标识符。它应该与主要目标相同,附加一个句点和一个额外的字符串。例如:

主要目标:com.mycompany.myapp

小部件应该是:com.mycompany.myapp.widget

于 2014-09-03T19:53:09.780 回答
40

我通过重置模拟器来修复它:

iOS 模拟器 > 重置内容和设置...

于 2014-09-29T16:36:36.433 回答
25

由于每个人都写了他们经历的事情以及他们如何解决他们确切问题,这可能没有帮助。

问题是相同的错误消息有不同的原因,解决它的正确方法是打开~/Library/Logs/CoreSimulator/CoreSimulator.log并在那里查找最后一条消息。此消息为您提供了一个很好的线索,并让您走上了解决问题的正确道路(有时它是捆绑 ID,有时它是 Info.plist 中缺少的或额外的属性,但您总能得到一个很好的描述性线索)。

这就是您缩小问题范围并最终解决问题的方法。

Xcode 祝你好运和强硬的神经。)

Z。

于 2015-12-21T11:13:23.480 回答
18

对我来说,我刚刚清理了项目并且它工作了 -> 产品 -> 清理

于 2014-11-22T14:20:26.620 回答
15

TLDR:清除您的项目构建文件夹 - 您将摆脱这种痛苦。

(另外我将其记录为 Apple 的错误,因为他们需要在 Xcode 中找到解决此问题的方法)

这些解决方案都不适合我——我把头撞在几堵墙上。
我查看了 CoreSimulator 日志,我意识到它正在尝试构建一个我已删除的库。我在任何地方都找不到对它的引用。

然后我通过另一个 SO Question 看到,不幸的是我找不到参考,如果你:

  1. 按住您的选项键,然后 Product-> Clean 选项变为Clean Build Folder
  2. 按下它,享受你的错误消失
于 2016-05-23T07:23:32.597 回答
12

iOS Simutalor菜单选项中的“重置内容和设置”并在退出后启动模拟器解决了我的问题。

重置内容和设置

于 2014-12-19T11:06:54.947 回答
9

在 XCode 6 中

运行时遇到错误(域 = LaunchServicesError,代码 = 0)

在进行了一些重大代码更改以适应 iPhone 6 屏幕后,我遇到了这个错误。在 Xcode 6 (iOS8)

我按照上面的选项,发现真正解决这个问题的唯一方法是执行以下操作:

  1. 删除了派生数据[转到窗口>>管理器>>(查找您的应用程序)单击派生数据旁边的删除]

  2. 产品 >> 清洁

  3. 重置模拟器中的内容和设置

  4. 将 Bundle 版本从 pList 中的 1.4 更改为 1.4.1

    感谢您之前所有让我进入这个阶段的答案。它很有魅力!

于 2015-01-12T02:04:54.280 回答
5

在我的情况下,错误是因为我没有设置构建 ID 造成的。

设置这个,启动模拟器没有问题。

于 2014-11-11T08:38:04.230 回答
3

这就是我遇到问题的原因:主应用程序和扩展程序的内部版本号不同(我已将主应用程序内部版本号增加到 1.0.1.03,但将扩展程序保留为 1.0.1.02)。

让它们匹配为我解决了这个问题。

于 2015-01-04T01:54:09.967 回答
3

在重置模拟器并进行干净构建后,另一件对我有用的尝试是清除派生数据。为此:转到管理器单击项目单击删除派生数据按钮。在进行了一段时间的扩展并回到常规分支后,我发生了这种情况。希望这可以帮助。

于 2014-12-31T22:42:41.197 回答
3

我有一个应用程序,它设置为根据构建配置使用不同的包 ID。在创建我的 Apple Watch 扩展时,Xcode 使用我的 Release ID 生成了所有内容,因此我必须手动修改所有内容以进行调试。这是我必须更改的所有地方:

  • WatchKit ExtensionBuild Settings -> Packaging -> Product Bundle Identifier
  • WatchKit Extension's Info.plist -> NSExtension -> NSExtensionAttributes -> WKAppBundleIdentifier(这需要使用与您的配套应用相同的前缀)
  • WatchKit AppInfo.plist -> WKCompanionAppBundleIdentifier

最后一个花了我一段时间,因为WatchKit App在查看目标设置时“信息”没有显示为选项卡,我不得不直接转到Info.plist文件本身。

于 2015-10-13T01:19:01.160 回答
3

我的案例是关于框架编译。我已经从 Target- Build Phases- Embedded Frameworks- 启用了“仅在安装时复制”选项在此处输入图像描述

于 2015-12-01T06:32:23.717 回答
3

打开控制台应用程序并查看那里。就我而言,它确切地告诉了我该怎么做。我看见:

ErrorDescription=WatchKit 2 应用扩展的 NSExtension.NSExtensionAttributes.WKAppBundleIdentifier 值与 WatchKit 应用的捆绑 ID 不匹配(找到“com.myCompany.MyApp.MyApp.watchkitapp”;预期为“com.myCompany.MyApp.watchkitapp”)。

因此,我去了每个 plist 并检查了与 BundleID 相关的所有项目。然后清理,重新启动等。

于 2015-09-17T08:37:58.020 回答
2

如果它们为空,请尝试将一些数字放入 [TARGETS]-[General]-[Identity]-[Version(or Build)]。

它对我有用。

我希望它会帮助你。

于 2014-09-26T08:53:29.400 回答
2

我也有这个错误。就我而言,日志~/Library/Logs/CoreSimulator/CoreSimulator.log是这样的:

Could not hardlink copy /Users/myUser/Library/Developer/CoreSimulator/Devices/60E569E7-6750-428A-A401-841BB081xxxx/data/Containers/Bundle/Application/70F24DDC-7954-46BF-B799-F807FD98yyyy/myApp.app to /Users/myUser/Library/Developer/CoreSimulator/Devices/60E569E7-6750-428A-A401-841BB081xxxx/data/Library/Caches/com.apple.mobile.installd.staging/temp.kOrJ9G/extracted/Payload/myApp.app with manifest /Users/myUser/Library/Developer/CoreSimulator/Devices/60E569E7-6750-428A-A401-841BB081xxxx/data/Library/Caches/com.apple.mobile.installd.staging/temp.kOrJ9G/extracted/com.apple.deltainstallcommands.com.mycompagny.myapp

感谢这个答案查看我的应用程序 info.plist。钥匙CFBundleVersion丢失了,所以我添加了它,现在一切正常!

于 2015-04-23T07:34:12.937 回答
2

iOS Simutalor 菜单选项中的“重置内容和设置”并在退出后启动模拟器解决了我的问题。

于 2016-07-04T09:50:01.773 回答
2

Jeremy 的精彩解释至少让我朝着正确的方向前进,但是尽管正确设置了所有捆绑标识符和版本,但错误仍然存​​在。然后我检查了Apple 文档,该文档显示 WatchKit 扩展(在其 Copy Bundle Resources 阶段)复制了 WatchKit 应用程序。这个 WatchKit 应用程序的命名与我的 iOS 应用程序完全相同,导致 Xcode 将两者混淆并读出错误的 plist,认为包标识符不正确。将 WatchKit 应用程序的 Product 重命名为不同的名称终于为我解决了。

于 2015-11-25T13:47:13.213 回答
2

以上都不适合我,但这确实:

我只是删除了 IceCream.xcworkspace/xcuserdata/xcuserdatad 然后重置模拟器并再次运行应用程序。(单独重置模拟器,对我不起作用。)

于 2015-11-05T10:57:20.120 回答
1

如果您更改了捆绑包 ID,请确保在再次尝试构建之前进行干净的构建!在此处查看如何:如何清空缓存和清理所有目标 Xcode 4

于 2014-10-25T02:16:47.340 回答
1

所以这绝对是 .plist 问题。在我的情况下它是空NSExtensionMainStoryboard的,删除这个属性解决了这个问题

于 2014-10-31T22:50:22.323 回答
1

我在尝试构建 Apple 的 Lister Xcode 项目并在模拟器上运行它时遇到了这个错误。

为我修复它的要点是:

1) iOS 应用程序的 BundleID 和 iOS 扩展程序必须不同 2) 我为两个目标提供 iCloud 和应用程序组 3) 我使用 Xcode 的“修复问题”来修复问题

之后,我可以构建和运行应用程序而不会出现警告或错误。

日志文件中的线索是“... LegacyErrorString=DuplicateIdentifier, FunctionName=-[MIInstallableBundle performPreflightWithError:], SourceFileLine=450, NSLocalizedDescription=父包与 / 处的子包具有相同的标识符 (com.ACMECompany.Lister) Users/stephen/Library/Developer/CoreSimulator/Devices/5329928B-946B-40A4-B666-EFD11B96D11F/data/Library/Caches/com.apple.mobile.installd.staging/temp.HQ5d9X/extracted/Lister.app/PlugIns/ Lister.appex"

于 2015-10-08T13:21:18.217 回答
1

InfoPlist.strings 在本地化文件中设置了错误的应用程序版本。啊!

一个小时过去了!

于 2015-12-02T09:02:55.240 回答
0

在此处输入图像描述

删除您的模拟器并重新生成一个。

这个对我有用。

于 2014-12-09T12:30:28.840 回答
0

另一种可能的解决方案可以添加到所有其他解决方案中,这无疑会保持在我之上;)

我删除并随后恢复了保留源文件的 Today Extension 目标,但在尝试了所有解决方案之后,我意识到它的目标中没有任何源或资源!如果您的详细启动服务错误找不到您编译的应用程序扩展文件,您也可能会遇到这种情况。

所以,长话短说,确保你的目标包含一些可以编译或捆绑的东西。您可以通过在项目导航器(左侧)上选择相关文件并在文件检查器(右侧的第一个选项卡)中适当地设置复选标记来检查您的目标成员资格。

于 2015-12-03T16:22:12.270 回答
0

我也有这个问题,原来我的 info.plist 之一被分配给目标,特别是当它假设被分配给无时。实际上有一个 Xcode 设置建议警告,我点击并接受了更改。这解决了这个问题。

于 2016-03-23T14:52:42.680 回答
0

这对我有用:在项目设置 -> 常规选项卡 -> 身份部分中,我将版本号从 2.0.2(三位)更改为 2.0(两位),然后我在模拟器中删除了应用程序并再次运行项目. 之后不再出现错误。

于 2015-09-29T18:05:57.973 回答
0

我的问题是目标项目的包装器扩展未设置。

要修复,我必须转到目标项目->构建设置->打包->包装器扩展

将此设置为“应用程序”(无引号)

这为我解决了问题

于 2016-02-18T15:55:22.193 回答
0

我的日志中有以下内容...

<Error>: Error Domain=LaunchServicesError Code=0 "(null)" UserInfo={Error=ExecutableTwiddleFailed...

这是因为扩展项目中没有添加源文件。

于 2015-12-13T00:15:50.320 回答
0

我删除了手表应用程序的.plist 文件中不应该存在的密钥。问题消失了。

于 2015-09-23T12:41:45.367 回答
0

当没有可用的硬盘空间时,此错误出现在我的系统上。我在我的系统上释放了一些空间让它工作。

于 2016-02-03T07:28:00.103 回答