Симулятор iOS: не удалось скопировать жесткую ссылку. Неверный путь в моей файловой системе?

Я использую Xcode версии 6.1 (6A1052d)

Я пытаюсь запустить приложение на симуляторе.

С первого раза всегда работает нормально. Если я хочу запустить второй раз, у меня возникает ошибка (см. лог ниже). Затем в симуляторе iOS я «Сброс содержимого и настроек» и снова могу успешно запустить.

Учитывая журнал ошибок, я думаю, что это должно быть как-то связано с неправильным путем. Проблема в том, что я плохо разбираюсь в файловой системе Mac и связывании путей, поэтому ваша помощь будет очень признательна.

EDIT: вот файл 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>

И мой 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>

Я попытался более точно определить ошибку благодаря совету Джереми в файле 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>

Исходный журнал сбоев из консоли 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}

person Don    schedule 27.11.2014    source источник
comment
Пожалуйста, включите больше информации. В частности, посмотрите в ~/Library/Logs/CoreSimulator/055A18BC-73B5-4EA6-A872-488FA69F4750/system.log дополнительные сообщения об ошибках, которые могут описывать, что происходит не так, чтобы вызвать это. Ищите сообщения от installd примерно во время вашей ошибки.   -  person Jeremy Huddleston Sequoia    schedule 27.11.2014
comment
возможный дубликат Во время работы произошла ошибка (домен = LaunchServicesError, код = 0)   -  person Jeremy Huddleston Sequoia    schedule 27.11.2014
comment
Здравствуйте @JeremyHuddlestonSequoia и спасибо за ваш ответ. Я прочитал ваш ответ в другом вопросе, он действительно близок к моей проблеме. Однако я не мог дать более подробную информацию о моей ошибке в этом вопросе, поэтому я отредактировал свой вопрос здесь. Возможно, я нашел возможные источники ошибок, надеюсь, я выбрал правильные строки (лог очень длинный, даже в момент падения)   -  person Don    schedule 28.11.2014
comment
Это похоже на проблему, с которой некоторые люди сталкивались при установке поверх существующей установки. Попробуйте удалить существующее приложение или просто стереть устройство до состояния по умолчанию.   -  person Jeremy Huddleston Sequoia    schedule 28.11.2014
comment
Звучит хорошо, как я могу стереть устройство до состояния по умолчанию или удалить существующее приложение на виртуальном устройстве? Я использую функцию сброса содержимого и настроек Xcode, которая работает хорошо, но только один раз, так как второй запуск снова вызывает ошибку.   -  person Don    schedule 28.11.2014
comment
Да, именно так вы можете стереть устройство до состояния по умолчанию. Вы также можете просто удалить приложение, как на реальном устройстве (длительное нажатие на главном экране, затем нажмите x) или использовать simctl, как описано в другом посте.   -  person Jeremy Huddleston Sequoia    schedule 28.11.2014
comment
Привет, Джереми, спасибо, что уделил мне время. Это работает, когда я стираю приложение на виртуальном устройстве или использую функцию «Сброс содержимого и настроек», проблема в том, что мне приходится делать это при каждом запуске. Итак, я думаю, мой первоначальный вопрос заключался в том, как решить эту проблему, чтобы избежать ее?   -  person Don    schedule 01.12.2014
comment
Есть ли у вас допустимая версия CFBundleVersion в Info.plist вашего приложения? Можете ли вы прикрепить Info.plist?   -  person Jeremy Huddleston Sequoia    schedule 01.12.2014
comment
Привет @JeremyHuddlestonSequoia, я приложил info.plist   -  person Don    schedule 03.12.2014


Ответы (13)


Это действительно вызвано порядком определенных ключей в файле Info.plist вашего приложения и тем, что кажется ошибкой в ​​​​процессе installd симулятора iOS. Иногда кажется, что installd не может прочитать значения CFBundleShortVersionString и CFBundleVersion. Я обнаружил, что если RoboVM обязательно всегда сначала перемещает эти значения в Info.plist, он записывает, мы предотвращаем запуск ошибки в installd. Мы реализовали этот обходной путь в RoboVM (см. issue #771), и он будет следующая ночная сборка (сборка 20150222) и в следующем выпуске.

Ночные сборки RoboVM можно загрузить с сайта http://download.robovm.org. Чтобы установить ночную сборку плагина Eclipse, вы должны использовать сайт обновлений

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

Ночные сборки SNAPSHOT плагинов RoboVM Maven и Gradle отправляются в Maven Central.

person ntherning    schedule 21.02.2015
comment
Здравствуйте @ntherning, спасибо за ваш ответ. Итак, если я правильно понимаю, я должен вручную переместить CFBundleShortVersionString и CFBundleVersion в порядке info.plist и проверить? - person Don; 22.02.2015
comment
Да, попробуйте это. Переместите эти два ключа (и их значения, конечно) в начало файла Info.plist.xml. Однако, начиная со следующего выпуска RoboVM, вам не нужно этого делать. Кроме того, вам следует в последний раз выполнить сброс содержимого и настроек, чтобы избавиться от уже установленных плохих приложений. - person ntherning; 22.02.2015
comment
Это работает отлично. Спасибо @ntherning. Какое большое удовольствие иметь возможность просто пересобирать симулятор вместо того, чтобы каждый раз сбрасывать его. Производительность повышена до 3 уровня :) - person Don; 23.02.2015

Я столкнулся с этой ошибкой, оставив поле Сборка пустым, используя только Версия на вкладке Общие. Ошибка исчезла после установки значения сборки и переустановки приложения.

person schmidt9    schedule 30.10.2015
comment
нужно удалить и запустить заново - person preetam; 08.12.2016
comment
Я столкнулся с этой ошибкой для Xcode 9, и этот ответ сработал для меня! - person dev; 14.10.2017
comment
У меня была $(CURRENT_PROJECT_VERSION) для версии Bundle. - person cahn; 28.04.2020

Я считаю, что проблема усугубляется, если вы меняете Info.plist своего приложения от одной сборки к другой (например, обновляя CFBundleVersion или подобное). Если вы это сделаете, вам следует удалять приложение из симулятора между каждым запуском (через SpringBoard или с помощью simctl) или просто стирать сим-устройство.

Эта проблема должна быть решена в последних бета-версиях iOS Simulator 8.2, которые находятся в бета-версиях Xcode 6.2. Я думаю, что это было решено либо в бета-версии 2, либо в бета-версии 3, но я не могу точно вспомнить.

person Jeremy Huddleston Sequoia    schedule 26.01.2015
comment
У меня был скрипт для увеличения номера сборки в plist. Но я случайно выполнил скрипт после этапа компиляции... спасибо - person Little Watchman; 10.10.2020

Найдите файлы InfoPlist.strings. И проверьте версию "CFBundleShortVersionString" = "1.1"; совпадает с версией вашего приложения в Info.plist

InfoPlist.strings

person Naloiko Eugene    schedule 14.05.2017
comment
Ты спас мне жизнь!!!! Это ответ, который я искал очень долго!! Спасибо! - person tleveque; 18.09.2018
comment
мне пришлось отключить InfoPlist.strings - person Peter Lapisu; 25.09.2020

Я столкнулся с той же ошибкой, используя Xcode 8.2.1. Изменение порядка элементов в Info.plist в моем случае не помогло. Но это привело меня к решению. Я изменил и CFBundleShortVersionString, и CFBundleVersion с 3.0.0 на 3.0.1, НО Я ЗАБЫЛ также изменить на 3.0.1 в локализованных и базовых файлах InfoPlist.strings. Сделав это, устранил проблему.

person rene    schedule 09.01.2017

Вариант 1: 1. Перейдите к «Общим настройкам», щелкнув имя проекта на левой боковой панели. 2. Измените имя идентификатора пакета на «com.release.ABC» (ABC может быть любым другим именем. Лучше заменить ABC именем вашего приложения) 3. Теперь запустите его и наслаждайтесь.

Вариант-2: 1.Открыть Симулятор. 2.Удалите все приложения, установленные пользователем. 3. Запустите приложение и наслаждайтесь. NB: У него есть недостаток: каждый раз, когда вы очищаете симулятор, а затем после этого, вы сможете загрузить свое приложение.

person Debashish Dash    schedule 07.09.2017

Это исправило это для меня:

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

Благодаря https://encyclopediaofdaniel.com/blog/xcode-6-reset-simulators-from-the-command-line/ за объяснение!

Моя среда: xcode 8.3.1 iOS 10.3 (14E269) SIMULATOR_NAME="iPad Air 2"

person Dmitry Tokarev    schedule 12.09.2017

У меня тоже давно была эта проблема. Я пробовал большинство из этих решений. Я уверен, что они работали для некоторых людей, но не для меня...

Затем я заметил, что если перейти к Project Settings -> Build Phases -> Embed Frameworks, есть флажок Копировать только при установке... Я поставил галочку. Эта проблема ушла.

person Little Watchman    schedule 15.02.2019

Я столкнулся с этой проблемой в многоцелевом проекте. После дублирования цели я забыл изменить «Идентификатор набора продуктов». Как только я изменил этот параметр на уникальное значение (см. вкладку «Настройки сборки»), ошибка исчезла.

ИЗМЕНИТЬ

После изменения «Идентификатора пакета продукта» вы должны удалить все содержимое и настройки из симулятора и очистить папку сборки в Xcode (Cmd+Shift+K).

Я использую Xcode 10.1.

person Lars Behnke    schedule 13.01.2019

В моем случае это был файл, который не был включен в приложение, в котором был эмулятор. Просто удалите приложение эмулятора, очистите, перекомпилируйте и запустите его. При добавлении файла убедитесь, что установлен флажок Копировать элементы при необходимости.

person JxDarkAngel    schedule 14.07.2020

Это случилось со мной, когда я дублировал цель и забыл добавить новую цель в файл pods.

Итак, мое исправление заключалось в редактировании подфайла, чтобы он также включал новую цель, и запуске «установки пода».

person Henrik    schedule 15.01.2021

В нашем случае проблема заключалась в использовании шведского символа Å в названии продукта. Вместо этого пришлось использовать пользовательскую настройку для отображаемого имени, затем удалить приложение из симулятора и, возможно, также папку чистой сборки.

person MarkusEkblad    schedule 02.03.2021

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

Убедитесь, что оба поля заполнены некоторым значением.

person Dheeraj D    schedule 10.04.2019