我尝试使用Xcode 6在iOS模拟器中启动我的应用程序时收到错误(Domain = LaunchServicesError,Code = 0)。我在谷歌寻找解决方案,但我没有找到任何实用的东西。
这个错误是什么意思?
答案 0 :(得分:119)
此错误表示安装存在问题。不幸的是,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测试版中修复。
在另一种情况下,构建和运行将始终在第一次尝试时成功,但后续尝试有时会因更改的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 App Extension,则无法安装到早于iOS 8.2的iOS Simulator运行时版本。作为解决方法,当您要使用iOS 8.1及更早版本的运行时进行测试时,您需要手动禁用应用程序扩展。
如果您需要更多具体帮助,请提供CoreSimulator.log中的全部错误消息以及〜/ Library / Logs / CoreSimulator / [Device UDID] / system中同时出现的来自installd和CoreSimulatorBridge的所有消息.log这将揭示潜在的问题。
答案 1 :(得分:41)
您的项目是否包含小部件或扩展程序?如果是这样,问题可能是您的小部件/扩展的包标识符。它应该与主目标相同,附加一个句点和一个额外的字符串。例如:
主要目标:com.mycompany.myapp
小工具应该是:com.mycompany.myapp.widget
答案 2 :(得分:39)
我通过重置模拟器来修复它:
iOS模拟器>重置内容和设置...
答案 3 :(得分:18)
对我来说,我刚刚清理了项目并且工作正常 - >产品 - >清洁
答案 4 :(得分:15)
TLDR:清除你的项目构建文件夹 - 你将免于这种痛苦。
(另外我将此记录为Apple的一个错误,因为他们需要找到一种方法来解决这个问题)
这些解决方案都不适合我 - 我把头撞在了几面墙上 我查看了CoreSimulator日志,我意识到它正在尝试构建一个我删除的库。 我无法在任何地方找到它的引用。
然后我通过另一个SO问题看到了,遗憾的是我无法参考,如果你:
Clean
Build Folder
答案 5 :(得分:12)
&#34;重置 iOS Simutalor 菜单选项中的内容和设置&#34; ,并在退出解决了我的问题后启动模拟器。< / p>
答案 6 :(得分:9)
在XCode 6中
运行时遇到错误(Domain = LaunchServicesError, 代码= 0)
在进行一些主要的代码更改以适应iPhone 6屏幕后,我遇到了这个错误。在Xcode 6(iOS8)中
我按照上面的选项找到了解决问题的唯一方法是执行以下操作:
从pList
中的1.4将Bundle Version更改为1.4.1感谢所有以前的答案让我进入这个阶段。它很有魅力!
答案 7 :(得分:5)
在我的情况下,错误是由于我没有设置构建ID。
设置此项,可以毫无问题地启动模拟器。
答案 8 :(得分:3)
我有一个应用程序设置为根据构建配置使用不同的捆绑ID。在创建Apple Watch扩展时,Xcode使用我的发行版ID生成了所有内容,因此我必须手动完成所有操作以进行调试。这是我必须改变它的所有地方:
WatchKit Extension
的{{1}} Build Settings -> Packaging -> Product Bundle Identifier
的{{1}}(这需要使用与您的随播应用相同的前缀)WatchKit Extension
的{{1}} 最后一个花了我一段时间,因为Info.plist -> NSExtension -> NSExtensionAttributes -> WKAppBundleIdentifier
的信息在查看目标设置时没有显示为标签,我必须直接转到WatchKit App
文件本身。 / p>
答案 9 :(得分:3)
打开控制台应用并查看。在我的情况下,它告诉我到底该做什么。我看到了:
ErrorDescription = WatchKit 2应用扩展程序的NSExtension.NSExtensionAttributes.WKAppBundleIdentifier值与WatchKit应用程序的软件包ID不匹配(找到&#34; com.myCompany.MyApp.MyApp.watchkitapp&#34 ;;预期&#34; com.myCompany.MyApp.watchkitapp&#34;)。
所以,我去了每个plist并检查了与BundleID相关的任何项目。然后清理,重新启动等
答案 10 :(得分:3)
这就是导致我这个问题的原因:主应用程序和扩展程序的内部版本号不同(我已将主应用程序内部版本号增加到1.0.1.03,但将扩展名保留为1.0.1.02)。
让它们匹配为我解决问题。
答案 11 :(得分:3)
另外一件事,在重置模拟器并进行干净的构建后,对我来说有用,就是清除派生数据。要执行此操作:转到管理器单击项目单击删除派生数据按钮。在延长一段时间后,我发生了这种情况,并回到常规分支。希望这会有所帮助。
答案 12 :(得分:2)
答案 13 :(得分:2)
Jeremy的重要解释至少让我朝着正确的方向前进,但尽管所有的包标识符和版本设置正确,但错误仍然存在。然后我检查了Apple documentation,它显示WatchKit扩展(在其Copy Bundle Resources阶段)复制了WatchKit应用程序。这个WatchKit应用程序的命名与我的iOS应用程序完全相同,导致Xcode混淆了两个并读出了错误的plist,认为bundle标识符不正确。将WatchKit应用程序的产品重命名为最终解决方案,最终为我解决了这个问题。
答案 14 :(得分:2)
&#34;重置内容和设置&#34;来自iOS Simutalor菜单选项和Quitting之后的启动模拟器解决了我的问题。
答案 15 :(得分:2)
以上都不适合我,但是这样做了:
我只是删除了IceCream.xcworkspace / xcuserdata / xcuserdatad,然后重置模拟器并再次运行应用程序。 (单独重置模拟器,对我来说不起作用。)
答案 16 :(得分:2)
尝试将一些数字放入[目标] - [一般] - [身份] - [版本(或构建)],如果它们是空的。
它对我有用。
我希望它会对你有所帮助。
答案 17 :(得分: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
感谢这个answer看看我的app info.plist。密钥CFBundleVersion
丢失了,所以我添加它,现在一切正常!
答案 18 :(得分:1)
在尝试构建Apple的Lister Xcode项目并在模拟器上运行时,我遇到了这个错误。
为我修复它的要点是:
1)iOS App和iOS Extension的BundleID必须不同 2)我为两个目标提供iCloud和App Groups 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“
答案 19 :(得分:1)
在InfoPlist.strings
本地化文件中设置了错误的应用版本。 Urgh!
一个小时过去了!
答案 20 :(得分:1)
所以它是definitelly .plist问题。在我的情况下,它是空的NSExtensionMainStoryboard
,删除此属性修复了问题
答案 21 :(得分:1)
如果您更改了捆绑包ID,请确保在尝试再次构建之前进行干净的构建!请看这里:How to Empty Caches and Clean All Targets Xcode 4
答案 22 :(得分:0)
这对我有用: 在项目设置中 - &gt;常规标签 - &gt;身份部分我将版本号从2.0.2(三位数)更改为2.0(两位数)然后我在模拟器中删除了应用程序并再次运行项目。之后再没有错误了。
答案 23 :(得分:0)
我删除了观看应用 .plist文件中的密钥,该文件不应该存在。问题就消失了。
答案 24 :(得分:0)
删除你的模拟器并重新生成一个。
它对我有用。
答案 25 :(得分:0)
另一种可能的解决方案,可以添加到所有其他无疑会超出我的范围内;)
我删除了&amp;后来恢复了今天扩展目标保留源文件,但在尝试了阳光下的每个解决方案后,我意识到它的目标中没有任何源或资源!如果您的详细启动服务错误无法找到已编译的应用扩展文件,您可能也会遇到此问题。
所以,长话短说,请确保您的目标包含某些内容以进行编译或捆绑。您可以通过在项目导航器(左侧)中选择相关文件并在文件检查器中选择相应的复选标记(右侧的第一个选项卡)来检查目标成员资格。
答案 26 :(得分:0)
我的日志中有以下内容......
<Error>: Error Domain=LaunchServicesError Code=0 "(null)" UserInfo={Error=ExecutableTwiddleFailed...
这是因为扩展项目中没有添加源文件。
答案 27 :(得分:0)
当没有可用的硬盘空间时,我的系统上出现此错误。我在系统上腾出了一些空间让它工作。
答案 28 :(得分:0)
我的问题是目标项目的包装器扩展未设置。
要修复我必须转到目标项目 - &gt; 构建设置 - &gt; 包装 - &gt; 包装器扩展。
将此设置为&#34; app&#34; (没有引号)
这解决了我的问题
答案 29 :(得分:0)
我也遇到了这个问题,结果发现我的一个info.plist被特别分配给目标时,假设它被分配给none。实际上有一个Xcode设置建议警告,我点击并接受了更改。这解决了这个问题。