.app не имеет исполняемого пути после установки поверх старой сборки

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

Ср Авг 31 20:13:28 Неизвестный SpringBoard [1176]: Пакет "X" в /private/var/mobile/Applications/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX не имеет исполняемого файла дорожка. Проверьте файл Info.plist пакета.

Я проверил планшет приложения с помощью PhoneDisk, и исполняемый файл соответствовал имени приложения. Любые идеи?

Ответ 1

В моем случае я не обновлял CFBundleShortVersionString между версиями, которые я пытался загрузить. Как только я обновил версию с 1.1.9.1 до 1.1.9.2 и повторно загрузил сборку adhoc, она перестала сбой.

Я бы предположил, что Apple кэширует некоторую информацию в Info.plist для сборки adhoc, а набегать только на CFBundleVersion недостаточно, чтобы взорвать кеш.

Ответ 2

От "Core Foundation Keys": "CFBundleShortVersionString (String - iOS, Mac OS X) указывает номер версии выпуска пакета, который идентифицирует выпущенную итерацию приложения. Номер версии выпуска - это строка, состоящая из трех целых чисел, разделенных периодом. Первое целое представляет собой основные изменения к приложению, например, к версиям, которые реализуют новые функции или основные изменения. Второе целое обозначает версии, которые реализуют менее заметные функции. Третье целое представляет собой версии для обслуживания. Значение для этого ключа отличается от значения для "CFBundleVersion", которое идентифицирует итерацию (освобожденную или невыпущенную) приложения. Этот ключ можно локализовать, включив его в свои файлы InfoPlist.strings. "

CFBundleShortVersionString также не должен содержать никаких букв, допускаются только целые числа. Так что если у вас есть что-то вроде 1.2.5b1, приложение не запустится, странно с ошибкой, например: "... не имеет исполняемого пути...".

Ответ 3

Я столкнулся с этой конкретной ошибкой в ​​случае, когда наша обычная версия приложения была n.n.n, и в обновлении мы перешли к версии приложения, которая была n.n.n.n

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

Ответ 4

В Info.plist вы должны указать два ключа (CFBundleVersion и CFBundleShortVersionString).

CFBundleVersion (String - iOS, OS X) указывает номер версии сборки пакета, который идентифицирует итерацию (выпущенную или невыпущенную) пакета. Номер версии сборки должен быть строкой, состоящей из трех неотрицательных целых чисел, разделенных периодом, причем первое целое число больше нуля. Строка должна содержать только числовые символы (0-9) и период (.). Ведущие нули усекаются из каждого целого числа и будут игнорироваться (то есть 1.02.3 эквивалентно 1.2.3). Этот ключ не локализуется.

CFBundleShortVersionString указывает номер версии выпуска пакета, который идентифицирует выпущенную итерацию приложения.

Вы можете добавить CFBundleVersion на 1 каждый раз, когда вы создаете версию adhoc для своего теста или пользователя с той же версией выпуска (CFBundleShortVersionString)

Например: ваш CFBundleShortVersionString равен 1.2.3, ваш CFBundleVersion - 1000. Когда вы исправляете ошибку и создаете adhoc версию для тестирования, вы можете изменить CFBundleShortVersionString на 1001.