Не удается запустить приложение на симуляторе после установки Xcode 11 - ошибка CFBundleVersion - PullRequest
33 голосов
/ 04 июня 2019

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


Failed to install the requested application
Domain: NSPOSIXErrorDomain
Code: 22
Failure Reason: The application's 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.

Ответы [ 8 ]

29 голосов
/ 11 июня 2019

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

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

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

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

11 голосов
/ 06 июня 2019

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

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

  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.

Тебе должны понравиться бета-версии:)

7 голосов
/ 05 июня 2019

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

Bundles without a CFBundleVersion are invalid and can’t 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 на правильный формат, приложение работает правильно.

6 голосов
/ 09 июня 2019

Объединение ответов 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, поэтому оставляет ее как есть.

SHORT-TERM FIX

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

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

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

2 голосов
/ 05 июня 2019

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

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

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

Вы можете:

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

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

1 голос
/ 11 июня 2019

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

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

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

1 голос
/ 06 июня 2019

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

1 голос
/ 06 июня 2019

Добавляя к этому, я заметил, что если ваш 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., он не будет опираться на симулятор

link

...