尝试使用 Xcode 6 在 iOS 模拟器中启动我的应用程序时收到错误 (Domain = LaunchServicesError, Code = 0)。我在 google 中寻找解决方案,但没有找到任何实用的方法。
这个错误是什么意思?
尝试使用 Xcode 6 在 iOS 模拟器中启动我的应用程序时收到错误 (Domain = LaunchServicesError, Code = 0)。我在 google 中寻找解决方案,但没有找到任何实用的方法。
这个错误是什么意思?
此错误表明安装存在问题。不幸的是,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 中这将揭示潜在的问题。
您的项目是否包含小部件或扩展程序?如果是这样,问题可能是您的小部件/扩展的捆绑标识符。它应该与主要目标相同,附加一个句点和一个额外的字符串。例如:
主要目标:com.mycompany.myapp
小部件应该是:com.mycompany.myapp.widget
我通过重置模拟器来修复它:
iOS 模拟器 > 重置内容和设置...
由于每个人都写了他们经历的事情以及他们如何解决他们的确切问题,这可能没有帮助。
问题是相同的错误消息有不同的原因,解决它的正确方法是打开~/Library/Logs/CoreSimulator/CoreSimulator.log
并在那里查找最后一条消息。此消息为您提供了一个很好的线索,并让您走上了解决问题的正确道路(有时它是捆绑 ID,有时它是 Info.plist 中缺少的或额外的属性,但您总能得到一个很好的描述性线索)。
这就是您缩小问题范围并最终解决问题的方法。
Xcode 祝你好运和强硬的神经。)
Z。
对我来说,我刚刚清理了项目并且它工作了 -> 产品 -> 清理
TLDR:清除您的项目构建文件夹 - 您将摆脱这种痛苦。
(另外我将其记录为 Apple 的错误,因为他们需要在 Xcode 中找到解决此问题的方法)
这些解决方案都不适合我——我把头撞在几堵墙上。
我查看了 CoreSimulator 日志,我意识到它正在尝试构建一个我已删除的库。我在任何地方都找不到对它的引用。
然后我通过另一个 SO Question 看到,不幸的是我找不到参考,如果你:
Clean
Build Folder
iOS Simutalor菜单选项中的“重置内容和设置”并在退出后启动模拟器解决了我的问题。
在 XCode 6 中
运行时遇到错误(域 = LaunchServicesError,代码 = 0)
在进行了一些重大代码更改以适应 iPhone 6 屏幕后,我遇到了这个错误。在 Xcode 6 (iOS8)
我按照上面的选项,发现真正解决这个问题的唯一方法是执行以下操作:
删除了派生数据[转到窗口>>管理器>>(查找您的应用程序)单击派生数据旁边的删除]
产品 >> 清洁
重置模拟器中的内容和设置
将 Bundle 版本从 pList 中的 1.4 更改为 1.4.1
感谢您之前所有让我进入这个阶段的答案。它很有魅力!
在我的情况下,错误是因为我没有设置构建 ID 造成的。
设置这个,启动模拟器没有问题。
这就是我遇到问题的原因:主应用程序和扩展程序的内部版本号不同(我已将主应用程序内部版本号增加到 1.0.1.03,但将扩展程序保留为 1.0.1.02)。
让它们匹配为我解决了这个问题。
在重置模拟器并进行干净构建后,另一件对我有用的尝试是清除派生数据。为此:转到管理器单击项目单击删除派生数据按钮。在进行了一段时间的扩展并回到常规分支后,我发生了这种情况。希望这可以帮助。
我有一个应用程序,它设置为根据构建配置使用不同的包 ID。在创建我的 Apple Watch 扩展时,Xcode 使用我的 Release ID 生成了所有内容,因此我必须手动修改所有内容以进行调试。这是我必须更改的所有地方:
WatchKit Extension
的Build Settings -> Packaging -> Product Bundle Identifier
WatchKit Extension
's Info.plist -> NSExtension -> NSExtensionAttributes -> WKAppBundleIdentifier
(这需要使用与您的配套应用相同的前缀)WatchKit App
的Info.plist -> WKCompanionAppBundleIdentifier
最后一个花了我一段时间,因为WatchKit App
在查看目标设置时“信息”没有显示为选项卡,我不得不直接转到Info.plist
文件本身。
打开控制台应用程序并查看那里。就我而言,它确切地告诉了我该怎么做。我看见:
ErrorDescription=WatchKit 2 应用扩展的 NSExtension.NSExtensionAttributes.WKAppBundleIdentifier 值与 WatchKit 应用的捆绑 ID 不匹配(找到“com.myCompany.MyApp.MyApp.watchkitapp”;预期为“com.myCompany.MyApp.watchkitapp”)。
因此,我去了每个 plist 并检查了与 BundleID 相关的所有项目。然后清理,重新启动等。
如果它们为空,请尝试将一些数字放入 [TARGETS]-[General]-[Identity]-[Version(or Build)]。
它对我有用。
我希望它会帮助你。
我也有这个错误。就我而言,日志~/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
丢失了,所以我添加了它,现在一切正常!
iOS Simutalor 菜单选项中的“重置内容和设置”并在退出后启动模拟器解决了我的问题。
Jeremy 的精彩解释至少让我朝着正确的方向前进,但是尽管正确设置了所有捆绑标识符和版本,但错误仍然存在。然后我检查了Apple 文档,该文档显示 WatchKit 扩展(在其 Copy Bundle Resources 阶段)复制了 WatchKit 应用程序。这个 WatchKit 应用程序的命名与我的 iOS 应用程序完全相同,导致 Xcode 将两者混淆并读出错误的 plist,认为包标识符不正确。将 WatchKit 应用程序的 Product 重命名为不同的名称终于为我解决了。
以上都不适合我,但这确实:
我只是删除了 IceCream.xcworkspace/xcuserdata/xcuserdatad 然后重置模拟器并再次运行应用程序。(单独重置模拟器,对我不起作用。)
如果您更改了捆绑包 ID,请确保在再次尝试构建之前进行干净的构建!在此处查看如何:如何清空缓存和清理所有目标 Xcode 4
所以这绝对是 .plist 问题。在我的情况下它是空NSExtensionMainStoryboard
的,删除这个属性解决了这个问题
我在尝试构建 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"
InfoPlist.strings
在本地化文件中设置了错误的应用程序版本。啊!
一个小时过去了!
删除您的模拟器并重新生成一个。
这个对我有用。
另一种可能的解决方案可以添加到所有其他解决方案中,这无疑会保持在我之上;)
我删除并随后恢复了保留源文件的 Today Extension 目标,但在尝试了所有解决方案之后,我意识到它的目标中没有任何源或资源!如果您的详细启动服务错误找不到您编译的应用程序扩展文件,您也可能会遇到这种情况。
所以,长话短说,确保你的目标包含一些可以编译或捆绑的东西。您可以通过在项目导航器(左侧)上选择相关文件并在文件检查器(右侧的第一个选项卡)中适当地设置复选标记来检查您的目标成员资格。
我也有这个问题,原来我的 info.plist 之一被分配给目标,特别是当它假设被分配给无时。实际上有一个 Xcode 设置建议警告,我点击并接受了更改。这解决了这个问题。
这对我有用:在项目设置 -> 常规选项卡 -> 身份部分中,我将版本号从 2.0.2(三位)更改为 2.0(两位),然后我在模拟器中删除了应用程序并再次运行项目. 之后不再出现错误。
我的问题是目标项目的包装器扩展未设置。
要修复,我必须转到目标项目->构建设置->打包->包装器扩展。
将此设置为“应用程序”(无引号)
这为我解决了问题
我的日志中有以下内容...
<Error>: Error Domain=LaunchServicesError Code=0 "(null)" UserInfo={Error=ExecutableTwiddleFailed...
这是因为扩展项目中没有添加源文件。
我删除了手表应用程序的.plist 文件中不应该存在的密钥。问题消失了。
当没有可用的硬盘空间时,此错误出现在我的系统上。我在我的系统上释放了一些空间让它工作。