xcode iOS 模拟器:无法硬链接复制。我的文件系统中的路径错误?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/27167020/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 06:15:57  来源:igfitidea点击:

iOS simulator: could not hardlink copy. Wrong path in my filesystem?

iosxcodeios-simulatorrobovm

提问by Don

I am using Xcode Version 6.1 (6A1052d)

我正在使用 Xcode 版本 6.1 (6A1052d)

I am trying to launch an app on the simulator.

我正在尝试在模拟器上启动一个应用程序。

The first time it always works fine. If I want to launch a second time, I have an error (see log below). Then in iOS simulator I "Reset Content and Settings" and I can launch again successfully.

第一次它总是工作正常。如果我想第二次启动,我有一个错误(见下面的日志)。然后在 iOS 模拟器中我“重置内容和设置”,我可以再次成功启动。

Given the error log, I think it must have something to do with a wrong path. The problem is I am bad with Mac filesystem and path linking, so your help would be much appreciated.

鉴于错误日志,我认为它一定与错误的路径有关。问题是我对 Mac 文件系统和路径链接很不满意,因此非常感谢您的帮助。

EDIT: Here is the info.plist.xml (generated by LibGDX if it matters)

编辑:这是 info.plist.xml(如果重要的话,由 LibGDX 生成)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>en</string>
    <key>CFBundleDisplayName</key>
    <string>${app.name}</string>
    <key>CFBundleExecutable</key>
    <string>${app.executable}</string>
    <key>CFBundleIdentifier</key>
    <string>${app.id}</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>${app.name}</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>${app.version}</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleVersion</key>
    <string>${app.build}</string>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>UIViewControllerBasedStatusBarAppearance</key>
    <false/>
    <key>UIStatusBarHidden</key>
    <true/>
    <key>UIDeviceFamily</key>
    <array>
        <integer>1</integer>
        <integer>2</integer>
    </array>
    <key>UIRequiredDeviceCapabilities</key>
    <array>
        <string>armv7</string>
        <string>opengles-2</string>
    </array>
    <key>UISupportedInterfaceOrientations</key>
    <array>
        <!-- <string>UIInterfaceOrientationPortrait</string> -->
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>CFBundleIcons</key>
    <dict>
        <key>CFBundlePrimaryIcon</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>Icon</string>
                <string>Icon-72</string>
            </array>
        </dict>
    </dict>
</dict>
</plist>

And my robovm.xml:

还有我的 robovm.xml:

app.version=1.0
app.id=<my package name>.IOSLauncher
app.mainclass=<my package name>.IOSLauncher
app.executable=IOSLauncher
app.build=1
app.name=<my app name>

I have tried to identify more precisely the error thanks to the advice of Jeremy, in the system.log inside the folder of my virtual device. The system.log has a lot of entries around the time of the crash, so I might have missed something... Anyway I have found these potentials errors:

由于 Jeremy 的建议,我试图更准确地识别错误,在我的虚拟设备文件夹内的 system.log 中。system.log 在崩溃时有很多条目,所以我可能错过了一些东西......无论如何我发现了这些潜在的错误:

Nov 28 09:03:44 As-MacBook-Pro installd[668]: 0x10e3d0000 createDictFromFile: open failed for /Users/<myname>/Library/Developer/CoreSimulator/Devices/D1C6E4CE-ABF3-4621-B811-913F1705CBE0/data/Containers/Bundle/Application/CA2B6D8C-1A62-4DA6-8433-AA4678D009E1/ManifestCache.plist : No such file or directory

Nov 28 09:03:44 As-MacBook-Pro installd[668]: 0x10e4d6000 writeDictToFile: ==== Successfully wrote Manifest cache to /Users/<myname>/Library/Developer/CoreSimulator/Devices/D1C6E4CE-ABF3-4621-B811-913F1705CBE0/data/Library/Caches/com.apple.mobile.installd.staging/temp.gCGKCY/extracted/ManifestCache.plist

Nov 28 09:03:44 As-MacBook-Pro installd[668]: 0x10e3d0000 validate_stream: Got manifest for version "1 1.0", but expected version "1 "

Nov 28 09:03:44 As-MacBook-Pro installd[668]: 0x10e3d0000 hardlink_copy_hierarchy: Failed to open manifest /Users/<myname>/Library/Developer/CoreSimulator/Devices/D1C6E4CE-ABF3-4621-B811-913F1705CBE0/data/Library/Caches/com.apple.mobile.installd.staging/temp.gCGKCY/extracted/com.apple.deltainstallcommands.<my app.id>

The original crash log from Eclipse console (device name folders are different as I have tested on multiple virtual devices, but the error is always the same)

来自 Eclipse 控制台的原始崩溃日志(设备名称文件夹不同,因为我在多个虚拟设备上测试过,但错误始终相同)

11/27/14 9:58:17 AM: [ERROR] Session could not be started: 
Error Domain=LaunchServicesError 
Code=0 "Unable to run app in Simulator" UserInfo=0x7fc8eb900d70 
{Error=PackagePatchFailed, ErrorDescription=Could not hardlink copy 
/Users/<myname>/Library/Developer/CoreSimulator/Devices/055A18BC-73B5-4EA6-A872-488FA69F4750/data/Containers/Bundle/Application/CCF8C472-C48F-41D7-8885-E83830256EE3/IOSLauncher.app 
to 
/Users/<myname>/Library/Developer/CoreSimulator/Devices/055A18BC-73B5-4EA6-A872-488FA69F4750/data/Library/Caches/com.apple.mobile.installd.staging/temp.TsGEn1/extracted/Payload/IOSLauncher.app 
with manifest 
/Users/<myname>/Library/Developer/CoreSimulator/Devices/055A18BC-73B5-4EA6-A872-488FA69F4750/data/Library/Caches/com.apple.mobile.installd.staging/temp.TsGEn1/extracted/com.apple.deltainstallcommands.<pathtomyappexec>, 
NSLocalizedFailureReason=An error was encountered while running 
(Domain = LaunchServicesError, Code = 0), 
NSUnderlyingError=0x7fc8ebb1a500 "The operation couldn't be completed. 
(LaunchServicesError error 0.)", 
NSLocalizedDescription=Unable to run app in Simulator}

采纳答案by ntherning

This is indeed triggered by the order of certain keys in your app's Info.plist file and what seems to be a bug in the iOS simulator's installdprocess. installdsometimes seems to be unable to read the CFBundleShortVersionStringand CFBundleVersionvalues. I've found that if RoboVM makes sure to always move those values first in the Info.plistit writes out we prevent the bug in installdfrom being triggered. We have now implemented this workaround in RoboVM (see issue #771) and it will be in the next nightly build (the 20150222 build) and in the next release.

这确实是由应用程序的 Info.plist 文件中某些键的顺序以及 iOS 模拟器installd进程中的错误触发的。installd有时似乎无法读取CFBundleShortVersionStringCFBundleVersion值。我发现,如果 RoboVM 确保始终首先在Info.plist它写出的值中移动这些值,我们就可以防止installd触发错误。我们现在已经在 RoboVM 中实现了这个解决方法(参见问题#771),它将在下一个夜间构建(20150222 构建)和下一个版本中。

Nightly builds of RoboVM can be downloaded from http://download.robovm.org. To install a nightly build of the Eclipse plugin you should use the update site

可以从http://download.robovm.org下载每晚构建的 RoboVM 。要安装 Eclipse 插件的夜间构建,您应该使用更新站点

http://download.robovm.org/nightlies/eclipse/site.xml

Nightly SNAPSHOT builds of the RoboVM Maven and Gradle plugins are pushed to Maven Central.

RoboVM Maven 和 Gradle 插件的夜间快照构建被推送到 Maven 中心。

回答by schmidt9

I faced this error while leaving Buildfield blank using only Versionon Generaltab. The error has gone after setting a build value and reinstalling the app.

我在仅使用“常规”选项卡上的“版本”将“构建”字段留空时遇到了此错误。设置构建值并重新安装应用程序后,错误消失了。

回答by Jeremy Huddleston Sequoia

I believe the issue is exacerbated if you change your app's Info.plist from one build to the next (such as revving CFBundleVersion or similar). If you do that, you should delete the app from the simulator between each launch (either via SpringBoard or using simctl) or just erase the sim device.

我相信如果您将应用程序的 Info.plist 从一个版本更改为下一个版本(例如 revving CFBundleVersion 或类似版本),问题会更加严重。如果你这样做,你应该在每次启动之间从模拟器中删除应用程序(通过 SpringBoard 或使用 simctl)或只是擦除 sim 设备。

This issue should be addressed in recent iOS Simulator 8.2 betas that are in Xcode 6.2 betas. I think it was addressed in either beta2 or beta3, but I can't recall for certain.

这个问题应该在最近的 iOS 模拟器 8.2 测试版中解决,这些测试版在 Xcode 6.2 测试版中。我认为它是在 beta2 或 beta3 中解决的,但我不记得了。

回答by rene

I encountered the same error using Xcode 8.2.1. Changing the order of items in the Info.plist did not help in my case. But it did lead me towards the solution. I had changed both CFBundleShortVersionString and CFBundleVersion from 3.0.0 to 3.0.1, BUT I HAD FORGOTTEN to also change to 3.0.1 in the localized and base InfoPlist.strings files. Doing that, fixed the problem.

我在使用 Xcode 8.2.1 时遇到了同样的错误。更改 Info.plist 中项目的顺序对我来说没有帮助。但它确实引导我走向解决方案。我已将 CFBundleShortVersionString 和 CFBundleVersion 从 3.0.0 更改为 3.0.1,但我忘记在本地化和基本 InfoPlist.strings 文件中也更改为 3.0.1。这样做,解决了问题。

回答by Naloiko Eugene

Find the InfoPlist.strings files. And check if the version of "CFBundleShortVersionString" = "1.1"; coincides with the version of your app in Info.plist

找到 InfoPlist.strings 文件。并检查“CFBundleShortVersionString”=“1.1”的版本;与您在 Info.plist 中的应用程序版本一致

InfoPlist.strings

InfoPlist.strings

回答by Debashish Dash

Option-1: 1.Goto "General Setting" by clicking on the project name on left side bar. 2.Change the Bundle Identifier name to "com.release.ABC" (ABC may be any other name. It's better to replace ABC with your APP Name) 3. Now run it and Enjoy.

选项1: 1.点击左侧栏的项目名称,进入“常规设置”。2.将 Bundle Identifier 名称更改为“com.release.ABC”(ABC 可以是任何其他名称。最好将 ABC 替换为您的 APP 名称) 3. 现在运行它并享受。

Option-2: 1.Open Simulator. 2.Remove all apps installed by user. 3.Run your App and Enjoy. N.B: It has a demerit that every time you clean the simulator and then after, you will able to load your app.

选项 2: 1. 打开模拟器。2.删除用户安装的所有应用程序。3.运行您的应用程序并享受。注意:它有一个缺点,即每次清洁模拟器后,您都可以加载您的应用程序。

回答by Dmitry Tokarev

This fixed it for me:

这为我修复了它:

SIMULATOR_NAME="iPad Air 2"
# Erase a device's contents and settings
xcrun simctl erase "${SIMULATOR_NAME}"

Thanks to https://encyclopediaofdaniel.com/blog/xcode-6-reset-simulators-from-the-command-line/for the explanation!

感谢https://encyclopediaofdaniel.com/blog/xcode-6-reset-simulators-from-the-command-line/的解释!

My env:xcode 8.3.1 iOS 10.3 (14E269) SIMULATOR_NAME="iPad Air 2"

我的环境:xcode 8.3.1 iOS 10.3 (14E269) SIMULATOR_NAME="iPad Air 2"

回答by Little Watchman

I had this issue too for a long time. I tried most of these solutions. I'm sure they worked for some people, but not for me...

我也有这个问题很长时间了。我尝试了大多数这些解决方案。我敢肯定它们对某些人有效,但对我无效...

Then I noticed if you go to Project Settings -> Build Phases -> Embed Frameworksthere is a flag for Copy only when installing... I ticked it. This problem went away.

然后我注意到如果你去Project Settings -> Build Phases -> Embed Frameworks那里只有在安装时复制的标志......我勾选了它。这个问题就迎刃而解了。

回答by Lars Behnke

I experienced this issue in a multi-target project. After duplicating a target I forgot to change the "Product Bundle Identifier". Once I changed this parameter into a unique value (see tab "Build Settings"), the error disappeared.

我在多目标项目中遇到过这个问题。复制目标后,我忘记更改“产品包标识符”。一旦我将此参数更改为唯一值(请参阅“构建设置”选项卡),错误就消失了。

EDIT

编辑

After changing the "Product Bundle Identifier" you must erase all content and settings from the simulator and clean your build folder in Xcode (Cmd+Shift+K).

更改“产品包标识符”后,您必须清除模拟器中的所有内容和设置,并清理 Xcode 中的构建文件夹(Cmd+Shift+K)。

I'm using Xcode 10.1.

我正在使用 Xcode 10.1。

回答by Dheeraj D

Select Project from Navigation window -> TARGET -> General -> Build or Version

Make sure both the field filled with some value.

确保两个字段都填充了一些值。