Ответ 1
Я решил проблему, изменив оптимизацию быстрых компиляторов с fastest
до none
. Я не уверен, что это идеальное долгосрочное решение, но сборка больше не сбой.
Я создал приложение для быстрой и протестировал его с помощью устройств iPhone 6, iPhone 6 plus и iPhone 5 и всех симуляторов, предлагаемых в Xcode. Приложение работает нормально и не сбой при загрузке локально. (iOS 8)
Наконец я представил сборку для Testflight. Приложение последовательно сбой в том же месте после загрузки приложения через сборку Testflight.
Есть ли известная проблема, при которой загруженные сборки работают иначе, чем локально созданные сборки? И как я могу отладить проблему с помощью сборки Testflight?
Я решил проблему, изменив оптимизацию быстрых компиляторов с fastest
до none
. Я не уверен, что это идеальное долгосрочное решение, но сборка больше не сбой.
Я думаю, что это быстрый компилятор. Чтобы сначала проверить, перейдите в Изменить схему, затем измените настройку Создать конфигурацию на Снять на вкладке Выполнить, а затем установите строить локально. Вы узнаете, где именно сбой.
Это может быть проблема с Биткодом. Проверьте, поддерживают ли ваши сторонние библиотеки бит-код, а затем устанавливают только бит-код, чтобы ДА еще установить значение НЕТ.
На самом деле биткод является промежуточным представлением скомпилированной программы. Приложения, загружаемые в iTunes Connect, содержащие бит-код, будут скомпилированы и связаны в App Store.
В моем случае, изменение Legacy Build System на New Build System (для Xcode 10) решает мою проблему, когда сборка Testflight ведет себя по-другому. Может быть полезным для кого-то.
Если у кого-то еще есть одна и та же проблема, вот что мое исправление:
Наконец-то я получил проблему до цикла с инструкцией if, сродни этому -
while(condition)
{
if (check)
{
code!
}
//There was no code here
}
Обратите внимание, что в конце цикла нет кода (где есть комментарий). Как только я добавил случайный бит кода (в этом случае, увеличивая переменную для вывода), проблема остановлена.
while(condition)
{
if (check)
{
code!
}
i += 1;
output statement
}
Я думаю, что это должна быть ошибка компилятора, иначе мое "исправление" не должно быть исправлением. Но здесь это на случай, если это поможет кому-то еще!
Вместо i += 1;
в пустых циклах while.
Я сделал это в моем пустом, а Loop: RunLoop.current.run(until: Date(timeIntervalSinceNow: 1))
И теперь приложение TestFlight не бомбит!
Более короткое время может также работать, например: RunLoop.current.run(until: Date(timeIntervalSinceNow: 0.25))
На самом деле сборка релиза принимает файл разрешений, отличный от разрешения отладки сборки при отладке в локальной системе.
При загрузке сборки архива будут приняты настройки сборки релиза и файл разрешений релиза по умолчанию. Убедитесь, что все настройки выпуска правильно отредактированы в конфигурациях.
Я не видел никакой информации о переполнении стека с проблемой прав. Я потратил много времени.