运行时遇到错误(域 = LaunchServicesError,代码 = 0)[重复]
Posted
技术标签:
【中文标题】运行时遇到错误(域 = LaunchServicesError,代码 = 0)[重复]【英文标题】:An error was encountered while running (Domain = LaunchServicesError, Code = 0) [duplicate] 【发布时间】:2014-10-27 06:42:06 【问题描述】:尝试使用 Xcode 6 在 ios 模拟器中启动我的应用程序时收到错误 (Domain = LaunchServicesError, Code = 0)。我在 google 中寻找解决方案,但没有找到任何实用的解决方案。
这个错误是什么意思?
【问题讨论】:
重启模拟器解决了我的问题 【参考方案1】:您的项目是否包含小部件或扩展程序?如果是这样,问题可能是您的小部件/扩展的捆绑标识符。它应该与主要目标相同,附加一个句点和一个额外的字符串。比如:
主要目标:com.mycompany.myapp
小部件应该是:com.mycompany.myapp.widget
【讨论】:
这对我有用,谢谢! 这发生在我通过将其从目标依赖项中删除来“禁用”正在进行的 iOS 8 扩展之后。似乎这还不足以让 Xcode 开心。 太棒了!解决了这个! 非常感谢......这对我很有帮助......你知道如何完全访问自定义键盘......就像(swiftkey键盘,go键盘等) 是的,这也是我在 XCode7 中的解决方案。谢谢【参考方案2】:尝试将一些数字放入 [TARGETS]-[General]-[Identity]-[Version(or Build)],如果它们是空的。
它对我有用。
希望对你有帮助。
【讨论】:
【参考方案3】:我通过重置模拟器修复了它:
iOS 模拟器 > 重置内容和设置...
【讨论】:
这对我有用。谢谢 这适用于导致此错误的某些可能原因,但还有其他原因导致相同的错误消息无法通过重置来修复。 在iOS9中重置模拟器需要很长时间。在大多数情况下,您可能只需在模拟器中删除您的应用即可。【参考方案4】:此错误表示安装有问题。不幸的是,Xcode 实际上并没有打印错误消息的内容,这会让您更深入地了解,但是您可以查看 ~/Library/Logs/CoreSimulator/CoreSimulator.log 以查看其余的错误详细信息。模拟设备的系统日志(~/Library/Logs/CoreSimulator/[Device UDID]/system.log)中也会有更多关于该问题的信息;在错误发生时查找来自已安装的消息)。
造成这种情况的常见原因包括包缺少 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]
或从 iOS 模拟器菜单中选择 Erase Contents & Settings
。此特定问题已在其中一个 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,因为这将揭示潜在的问题。
【讨论】:
非常有帮助。谢谢! 这个错误可能是由多种原因引起的。这个答案给出了解决它的一般方法。谢谢。 转到模拟器应用程序 (OS X) 中的“iOS 模拟器”下拉菜单并选择“重置内容和设置...”...完成! @TNBtech 这只能解决一些可能的原因。如果重置设备对您有帮助,您可能会遇到此问题,因为您应用的 Info.plist 中的 CFBundleVersion 错误 太棒了,你拯救了我的一天。我浏览了 CoreSimulator.log,发现我的应用程序扩展不遵循应用程序的捆绑 ID。因此无法在模拟器上运行。非常感谢您的详细解释。【参考方案5】:如果您更改了捆绑包 ID,请确保在再次尝试构建之前进行干净的构建!看这里:How to Empty Caches and Clean All Targets Xcode 4
【讨论】:
【参考方案6】:所以这绝对是 .plist 问题。在我的情况下,它是空的 NSExtensionMainStoryboard
,删除此属性解决了问题
【讨论】:
还要检查 NSExtensionPrincipalClass【参考方案7】:在我的情况下,错误是因为我没有设置构建 ID。
设置这个,启动模拟器没有问题。
【讨论】:
【参考方案8】:对我来说,我刚刚清理了项目并且它工作了 -> 产品 -> 清理
【讨论】:
我在 Xcode 6.1.1 和 Xcode 6.2 beta 5 之间来回切换时发生了这个错误。清理修复了它。【参考方案9】:删除您的模拟器并重新生成一个。
它对我有用。
【讨论】:
【参考方案10】:“重置内容和设置”来自 iOS Simutalor 菜单选项并在 退出 后启动模拟器解决了我的问题。
【讨论】:
【参考方案11】:在重置模拟器并进行干净构建后,对我有用的另一件事是清除派生数据。为此:转到管理器单击项目单击删除派生数据按钮。在进行了一段时间的扩展并回到常规分支后,我发生了这种情况。希望这会有所帮助。
【讨论】:
【参考方案12】:这就是我遇到问题的原因:主应用程序和扩展程序的内部版本号不同(我已将主应用程序内部版本号增加到 1.0.1.03,但将扩展程序保留为 1.0.1.02)。
让它们匹配解决了我的问题。
【讨论】:
【参考方案13】:在 XCode 6 中
运行时遇到错误 (Domain = LaunchServicesError, 代码 = 0)
在进行了一些重大代码更改以适应 iPhone 6 屏幕后,我遇到了这个错误。在 Xcode 6 (iOS8) 中
我按照上面的选项,发现真正解决这个问题的唯一方法是执行以下操作:
删除了派生数据[转到窗口>>管理器>>(查找您的应用程序)单击派生数据旁边的删除]
产品 >> 清洁
在模拟器中重置内容和设置
将 Bundle 版本从 pList 中的 1.4 更改为 1.4.1
感谢您之前的所有回答,让我进入了这个阶段。它很有魅力!
【讨论】:
【参考方案14】:我也有这个错误。就我而言,日志~/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
感谢answer 查看我的应用程序 info.plist。缺少密钥CFBundleVersion
,所以我添加了它,现在一切正常!
【讨论】:
【参考方案15】:打开控制台应用程序并查看那里。就我而言,它确切地告诉了我该怎么做。我看到了:
ErrorDescription=WatchKit 2 应用扩展的 NSExtension.NSExtensionAttributes.WKAppBundleIdentifier 值与 WatchKit 应用的捆绑 ID 不匹配(找到“com.myCompany.MyApp.MyApp.watchkitapp”;预期为“com.myCompany.MyApp.watchkitapp”) .
所以,我去了每个 plist 并检查了与 BundleID 相关的所有项目。然后清理、重新启动等。
【讨论】:
你通过建议 CONSOLE 救了我的命【参考方案16】:我删除了 watch 应用的 .plist 文件中不应该存在的密钥。然后问题就消失了。
【讨论】:
哪个是“the”键?【参考方案17】:这对我有用: 在项目设置 -> 常规选项卡 -> 身份部分中,我将版本号从 2.0.2(三位)更改为 2.0(两位),然后我在模拟器中删除了应用程序并再次运行项目。之后不再出现错误。
【讨论】:
【参考方案18】:我在尝试构建 Apple 的 Lister Xcode 项目并在模拟器上运行时遇到此错误。
为我解决问题的要点是:
1) iOS App 和 iOS Extension 的 BundleID 必须不同 2) 我为这两个目标提供 iCloud 和 App Groups 3) 我使用 Xcode 的“Fix Issue”来修复问题
之后,我可以构建和运行应用程序而不会出现警告或错误。
日志文件中的线索是“... 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"
【讨论】:
【参考方案19】:我有一个应用程序设置为根据构建配置使用不同的捆绑包 ID。在创建我的 Apple Watch 扩展时,Xcode 使用我的 Release ID 生成了所有内容,因此我必须手动更改所有内容以进行调试。这是我必须更改的所有地方:
WatchKit Extension
's Build Settings -> Packaging -> Product Bundle Identifier
WatchKit Extension
的Info.plist -> NSExtension -> NSExtensionAttributes -> WKAppBundleIdentifier
(这需要使用与您的配套应用相同的前缀)
WatchKit App
's Info.plist -> WKCompanionAppBundleIdentifier
最后一个花了我一段时间,因为查看目标设置时WatchKit App
的信息没有显示为选项卡,我不得不直接转到Info.plist
文件本身。
【讨论】:
所有这些都是正确的,我仍然得到那个错误!!!!【参考方案20】:以上方法都不适合我,但这确实有效:
我只是删除了 IceCream.xcworkspace/xcuserdata/xcuserdatad 然后重置模拟器并再次运行应用程序。 (单独重置模拟器,对我不起作用。)
【讨论】:
感谢罗伯特·瓦斯瓦里的这篇文章! 男人!惊人的!!这对我来说很完美:)【参考方案21】:Jeremy 的精彩解释至少让我朝着正确的方向前进,但是尽管正确设置了所有捆绑标识符和版本,但错误仍然存在。然后我检查了Apple documentation,它显示WatchKit 扩展(在其复制捆绑资源阶段)复制了WatchKit 应用程序。这个 WatchKit 应用程序的命名与我的 iOS 应用程序完全相同,导致 Xcode 将两者混淆并读出错误的 plist,认为包标识符不正确。将 WatchKit 应用程序的 Product 重命名为不同的名称终于为我解决了。
【讨论】:
您好,即使 Apple 可能是一个可靠的链接,最好使用编辑链接按钮将链接的重要部分作为引用包含在您的答案中! 感谢ForceMagic,以后会注意的。我对在 *** 上发帖有点陌生。 没问题! SO 最酷的地方在于,它由社区自动管理,并且设计为每个帖子都可以改进:) 这就是为什么,您可以随时编辑自己的帖子并改进它!只需点击它下面的编辑链接按钮! ;)【参考方案22】:我的案例是关于框架编译的。我已经从 Target- Build Phases- Embedded Frameworks- 启用了“仅在安装时复制”选项。
【讨论】:
【参考方案23】:在InfoPlist.strings
本地化文件中设置了错误的应用版本。啊!
一个小时过去了!
【讨论】:
【参考方案24】:另一种可能的解决方案可以添加到所有其他解决方案中,这无疑会保持在我之上;)
我删除并随后恢复了保留源文件的 Today Extension 目标,但在尝试了所有解决方案后,我意识到它的目标中没有任何源或资源!如果您的详细启动服务错误找不到您编译的应用程序扩展文件,您也可能会遇到这种情况。
所以,长话短说,确保您的目标包含某些东西,以便在其中编译或捆绑。您可以通过在项目导航器(左侧)上选择相关文件并在文件检查器(右侧的第一个选项卡)中适当地设置复选标记来检查您的目标成员资格。
【讨论】:
【参考方案25】:我的日志中有以下内容...
<Error>: Error Domain=LaunchServicesError Code=0 "(null)" UserInfo=Error=ExecutableTwiddleFailed...
这是因为扩展项目中没有添加源文件。
【讨论】:
【参考方案26】:由于每个人都写了他们经历的事情以及他们如何解决他们的确切问题,这可能没有帮助。
问题是同一错误消息有不同的原因,解决它的正确方法是打开~/Library/Logs/CoreSimulator/CoreSimulator.log
并在那里查找最后一条消息。此消息为您提供了一个很好的线索,并让您走上了解决问题的正确道路(有时它是捆绑 ID,有时它是 Info.plist 中缺少的或额外的属性,但您总能得到一个很好的描述性线索)。
这是缩小问题范围并最终解决问题的方法。
祝你好运和 Xcode 的坚强。)
Z.
【讨论】:
这是我见过的第一个合乎逻辑且理性的方法... +100 感谢分享。只需跟踪日志,之后您需要谷歌搜索的内容就很明显了。 我找不到文件,你能解释一下它放在哪里或应该放在哪里。谢谢 当然。~
符号表示用户的主目录。因此,例如我的我们/Users/pallzoltan
。因此该文件位于/Users/pallzoltan/Library/Logs/CoreSimulator/CoreSimulator.log
。让我知道你是否找到它。 Z.
有史以来最超级的答案!! :)
是正确的答案【参考方案27】:
当没有可用的硬盘空间时,此错误出现在我的系统上。我在我的系统上释放了一些空间让它工作。
【讨论】:
【参考方案28】:我的问题是目标项目的包装扩展未设置。
要修复我必须去 target project -> build settings -> Packaging -> Wrapper Extension.
将此设置为“app”(无引号)
这解决了我的问题
【讨论】:
【参考方案29】:我也遇到了这个问题,原来我的 info.plist 之一被分配给了目标,特别是当它假设没有分配给目标时。实际上有一个 Xcode 设置建议警告,我点击并接受了更改。这解决了这个问题。
【讨论】:
【参考方案30】:TLDR:清除您的项目构建文件夹 - 您将摆脱这种痛苦。
(另外我将此作为 Apple 的错误记录,因为他们需要在 Xcode 中找到解决此问题的方法)
这些解决方案都不适合我 - 我的头撞到了几堵墙上。 我查看了 CoreSimulator 日志,我意识到它正在尝试构建一个我已删除的库。 我在任何地方都找不到对它的引用。
然后我看到另一个 SO Question 很遗憾我找不到参考,如果你:
-
按住选项键,然后 Product-> Clean 选项变为
Clean
Build Folder
按下它,享受让您的错误消失的乐趣
【讨论】:
这对我有用,它必须是“干净的构建文件夹”而不是普通的干净文件夹。注意:option 键是 windows 键盘上的 ALT 键。以上是关于运行时遇到错误(域 = LaunchServicesError,代码 = 0)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
squid+域环境 出现 当尝试取回该 URL 时遇到下面的错误 访问被拒绝。
在本地主机上运行两个 grails 应用程序时如何解决跨域错误
错误:使用 Next.js 应用程序部署到 Azure 时出现“需要域选项”