Не удается запустить приложение на симуляторе после установки Xcode 11 - ошибка CFBundleVersion

Вчера я скачал бета-версию Xcode 11. После этого я открыл свой проект и попытался запустить с новым Xcode. К сожалению, произошла ошибка с сообщением:


Failed to install the requested application
Domain: NSPOSIXErrorDomain
Code: 22
Failure Reason: The application CFBundleVersion is invalid.
Recovery Suggestion: Ensure your bundle contains a CFBundleVersion with a valid semantic version number.
--

Я закрыл бета-версию и попытался запустить снова с последней стабильной версией Xcode (10.2.1), но возникла та же ошибка. Я должен упомянуть, что до того, как попытаться запустить проект с Xocde 11, он без проблем работал на Xcode 10. Ничего не изменилось до и после запуска с бета-кодом Xcode.

Что я уже пробовал:

  • Я удалил бета-версию Xcode 11
  • Я очистил свой проект и вытащил его из последней ветки
  • Я полностью удалил Xcode 10 из:
~/Library/Caches/com.apple.dt.Xcode
~/Library/Developer
~/Library/MobileDevice
~/Library/Preferences/com.apple.dt.Xcode.plist
/Library/Preferences/com.apple.dt.Xcode.plist
/System/Library/Receipts/com.apple.pkg.XcodeExtensionSupport.bom
/System/Library/Receipts/com.apple.pkg.XcodeExtensionSupport.plist
/System/Library/Receipts/com.apple.pkg.XcodeSystemResources.bom
/System/Library/Receipts/com.apple.pkg.XcodeSystemResources.plist
  • А потом установил свежую стабильную версию 10.2.1

Я могу запустить другие проекты, которые не были протестированы с Xcode 11 без каких-либо проблем.

Моя последняя идея - просто переустановить macOS, но я бы не хотел этого делать.

Изменение: я забыл упомянуть, что приложение работает на физическом iPhone XS.

Ответ 1

Здесь много неверной информации, поэтому я хотел дать авторитетный ответ.

Проблема здесь в том, что новая версия CoreSimulator.framework с бета-версией Xcode 11 выполняет проверку CFBundleVersion, чего не делали предыдущие версии. Эти проверки действительны, и они представляют проблему в вашем приложении, но есть также ошибка в том, как проверки были выполнены в Xcode 11 Beta 1, которая усугубляет проблему.

Во-первых, исправьте CFBundleVersion в вашем Info.plist. Он должен состоять только из цифр и не более двух периодов (т.е. ##. [. ## [. ##]], например: 12.4.2).

Во-вторых, после исправления CFBundleVersion вам необходимо killall -9 CoreSimulatorBridge потому что, к сожалению, старое значение кэшируется в CoreSimulatorBridge, не позволяя ему распознать новое значение. Эта часть была ошибкой, и она была исправлена в Xcode 11 Beta 2.

Ответ 2

Со мной тоже случилось, почти весь день потраченный на поиски возможных причин.

Шаги, которые окончательно решили проблему и позволили мне установить на симуляторе:

  1. Выйдите из Xcode и iOS Simulator
  2. Удалите /Library/Developer (тот, что из корня), или переименуйте его, если вы хотите сохранить резервную копию
  3. Перезапустите Xcode, согласитесь с установкой инструментов командной строки
  4. Продолжайте работать там, где вы остались :)

Помимо шагов, упомянутых в вопросе (полная деинсталляция Xcode 11, полная деинсталляция Xcode 10 и последующая переустановка после этого), я также пытался клонировать проект в другом месте, проходя через все возможные места для получения производных данных, устанавливая другие среды выполнения симулятора и пробуя те, Ни один из них не сработал, к счастью, приложение журнала консоли показало путь для процесса, который отклонил пакет приложения, это был один из двоичных файлов, установленных Xcode в /Library/Developer/PrivateFrameworks/CoreSimulator.framework.

Похоже, Xcode 11 установил более новую версию фреймворков, а Xcode 10 не перезаписывал их. Удаление всей папки /Library/Developer вызвало установку инструментов командной строки, что в конечном итоге вернуло время выполнения симулятора, которое правильно работало в Xcode 10.

Вы должны любить бета-версии :)

Ответ 3

У меня такая же проблема. Я нахожу, что примечания к выпуску бета-версии Xcode 11 объясняли это.

Bundles without a CFBundleVersion are invalid and cant be properly installed on 
devices or simulators. CoreSimulator now checks and rejects such bundles earlier in
the process with a clearer error message. (49892531)

И эта ссылка является форматом CFBundleVersion.

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

Ответ 4

Сочетание Sgeven.Zheng и Cristik ответов.

ПРИЧИНА

При установке Xcode11 Beta устанавливается новая версия CoreSimulator.framework со следующим обновлением:

https://developer.apple.com/documentation/xcode_release_notes/xcode_11_beta_release_notes

"Пакеты без CFBundleVersion недействительны и не могут быть правильно устанавливается на устройства или тренажеры. CoreSimulator теперь проверяет и отклоняет такие пакеты ранее в процессе с более ясной ошибкой сообщение. (49892531) "

Следующее не решит проблему:

  • Удаление Xcode11 Beta
  • Удаление и переустановка Xcode 10

Это связано с тем, что CoreSimulator.framework установлен в /Library/Developer/PrivateFrameworks/CoreSimulator.framework, который находится за пределами пакета Xcode.app. При повторной установке xcode10 обнаруживает, что установленная на данный момент версия CoreSimulator.framework новее, чем установила xcode10, поэтому оставляет все как есть.

КРАТКОСРОЧНОЕ ИСПРАВЛЕНИЕ

  1. Удалить xcode11
  2. Установите Xcode 10 (не нужно переустанавливать, если он уже установлен)
  3. Удалить /Library/Developer/PrivateFrameworks/CoreSimulator.framework
  4. Запустите Xcode 10 и согласитесь установить инструменты командной строки

ДОЛГОСРОЧНОЕ ИСПРАВЛЕНИЕ

Поскольку это не "настоящая" ошибка, а предполагаемое поведение Xcode11, в конечном итоге необходимо будет предпринять шаги, чтобы гарантировать, что приложения всегда создаются с допустимым CFBundleVersion.

Ответ 5

Это новая функция в Xcode11.

В примечании к выпуску сказано:

Пакеты без CFBundleVersion недействительны и не могут быть правильно установлены на устройствах или симуляторах. CoreSimulator теперь проверяет и отклоняет такие пакеты ранее в процессе с более ясным сообщением об ошибке. (49892531)

Вы можете:

  1. Отредактируйте свой CFBundleVersion по стилю этой ССЫЛКИ
  2. Сбросьте свой Xcode и симулятор
  3. Запустите снова, вы увидите, что снова работает

Когда вы запустите приложение в симуляторе успеха, вы можете снова изменить свой CFBundleVersion, вы обнаружите, что он все еще может работать XD

Ответ 6

Добавляя к этому, я заметил, что если ваш CFBundleVersion не указывает на:

This key is a machine-readable string composed of one to three period-separated integers, such as 10.14.1. The string can only contain numeric characters (0-9) and periods. это не будет основываться на симуляторе

ссылка на сайт

Ответ 7

В моем случае это была версия симулятора /coresimulator для 11 бета по сравнению с версией для 10.1 → Убить и позволить Xcode снова открыть симулятор, что решило проблему.

Ответ 8

Я столкнулся с этой же проблемой.

Я не дошел до того, чтобы попробовать некоторые другие опции, представленные здесь, но я смог вернуться к сборке для симулятора, просто удалив каталог /DerivedData.

Если вы не знаете, где его найти, просто сделайте это: Xcode → Preferences → Locations и выберите стрелку рядом с путем для производных данных

Ответ 9

Как сказал Итан Ван, это новая функция в Xcode 11 CoreSimulator. Я попробовал несколько вещей, в то числе очистки сборки, полностью удалить Xcode 11 (и связанные с ним файлы/кэш/файлы имитатор), переустановкой Xcode 10.2.1 и такого, но что сработало для меня была замена Simulator.app в ‎⁨Applications⁩/⁨Xcode⁩ /Contents⁩/⁨Developer⁩/⁨Applications⁩ с предыдущими версиями симулятора приложений.

Это, вероятно, ошибка, и, возможно, скоро будет лучшее решение, но это сработало для меня как краткосрочное решение. Не пытайтесь переустановить macOS, просто загрузите предыдущую версию Simulator и замените файл Simulator.app во время работы Xcode 10.2.1.

Ответ 10

В моем случае поле "Версия сборки" на моей цели было пустым, я изменил его на 1, и приложение смогло установить.

Ответ 11

В моем случае поле Build Version было пустым. Я добавил ценность там, но все равно это не сработало. Я попробовал команду killall -9 CoreSimulatorBridge, и это тоже не помогло. Наконец, когда я проверил XML файл info.plist (Открыть как → Исходный код), ключ CFBundleVersion отсутствовал, а версия была отображена в info.plist через CFBundleShortVersionString.

Я только что добавил ключ CFBundleVersion, как указано ниже в info.plist, и это сработало.

<key>CFBundleVersion</key> <string>$(MARKETING_VERSION)</string>

Я надеюсь, что это помогает кому-то еще.