Подпись флаттера недопустима при попытке на устройстве iOS

11

TL; DR

РЕДАКТИРОВАТЬ 2020-05-06 : Мое приложение корректно устанавливается с iOS 13.4, но через некоторое время приложение вылетает при запуске, и мне приходится переустанавливать его. Я не знаю почему. Может быть, после обновлений iOS?

Также см. Ответ ниже: https://stackoverflow.com/a/60013390/1121497

Полный вопрос

Я пытаюсь запустить новое приложение Flutter (пример приложения, созданного flutter create) на устройстве iOS (iPhone XS). Xcode удается установить его, но затем он вылетает с этим сообщением:

dyld: Library not loaded: @rpath/Flutter.framework/Flutter
  Referenced from: /private/var/containers/Bundle/Application/BA807438-FA5B-4021-B37D-FC437B2C80CA/Runner.app/Runner
  Reason: no suitable image found.  Did find:
    /private/var/containers/Bundle/Application/BA807438-FA5B-4021-B37D-FC437B2C80CA/Runner.app/Frameworks/Flutter.framework/Flutter: code signature invalid for '/private/var/containers/Bundle/Application/BA807438-FA5B-4021-B37D-FC437B2C80CA/Runner.app/Frameworks/Flutter.framework/Flutter'

Если я пытаюсь flutter run, приложение также открывается и вылетает. И команда продолжает ждать вечно:

$ flutter run
Launching lib/main.dart on Ferran Maylinch’s iPhone in debug mode...

Automatically signing iOS for device deployment using specified development team in Xcode project: 25D86TPBWG
Running Xcode build...                                                  

 ├─Assembling Flutter resources...                           4.3s
 └─Compiling, linking and signing...                        13.3s
Xcode build done.                                           21.0s
Installing and launching...                                             
(This is taking an unexpectedly long time.)

В Xcode я настроил команду (личная команда), и сертификат подписи (сертификат Apple Development) выглядит нормально, потому что я могу установить проект Hello world Swift на свое устройство.

Примечание. Я не плачу с учетной записью Apple Developer Program . Это абсолютно необходимо для запуска приложений Flutter на устройствах iOS?

Я следовал инструкциям macOS и flutter doctorсказал, что у меня есть все, что нужно для iOS:

[] Flutter (Channel stable, v1.12.13+hotfix.5, on Mac OS X 10.15.2 19C57, locale en-ES)

[!] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    ! Some Android licenses not accepted.  To resolve this, run: flutter doctor --android-licenses
[] Xcode - develop for iOS and macOS (Xcode 11.3)
[!] Android Studio (version 3.5)Flutter plugin not installed; this adds Flutter specific functionality.Dart plugin not installed; this adds Dart specific functionality.
[] IntelliJ IDEA Ultimate Edition (version 2019.3.1)
[!] VS Code (version 1.41.1)Flutter extension not installed; install from
      https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter
[] Connected device (1 available)

! Doctor found issues in 3 categories.

Как вы можете видеть, я использовал стабильный канал, чтобы избавиться от проблем с бета-каналом, но я обычно работаю в бета-канале, чтобы создать флаттер для веб (который работает нормально).

В симуляторе iOS приложение тоже отлично работает.

Недавно я заметил, что у меня нет файла ios/Podfile. Я нашел этот пост, говорящий об этом. Я не знаю, важно ли это в моем случае, но я пытался вручную добавить этот Podfile . Во всяком случае, я получаю ту же ошибку подписи.

Разочарованный этим, я переключился на NativeScript на данный момент.

Ферран Майлинч
источник
Вы пытаетесь запустить его на реальном устройстве в режиме отладки или выпуска?
Sunkuu7
@SlahLayouni Это было в режиме отладки. Я пробовал режим Release, и он не работает с той же ошибкой.
Ферран Майлинч
Попробуйте сначала создать релиз, а затем запустить его из xcode как релиз. flutter build ios --release
Sunkuu7
1) Вы пробовали iOS Simulator 2) Вы развернули / запустили «Hello World» в Swift / Xcode на вашем устройстве iPhone? Персональный сертификат должен быть хорош для развертывания на вашем телефоне.
Моррисон Чанг
1
Вы можете проверить stackoverflow.com/a/58948346/7183675 и github.com/flutter/flutter/issues/16507#issuecomment-380790165 ? Интересные предложения также здесь: github.com/flutter/flutter/issues/39962#issuecomment-532558471 и github.com/flutter/flutter/issues/41147#issuecomment-534783565
Адам Тухольски,

Ответы:

8

РЕДАКТИРОВАТЬ: это исправлено в iOS 13.4, который был выпущен 24 марта.

Это регрессия iOS 13.3.1, не связанная с Flutter. Мне удалось воспроизвести сбой без какого-либо кода Flutter или CocoaPods, создав новый проект Xcode, добавив целевой объект фреймворка и выбрав профиль обеспечения Personal Team.

См. Выпуск GitHub: https://github.com/flutter/flutter/issues/49504#issuecomment-581554697 .

Эта ошибка не должна влиять на профили подготовки группы разработчиков или приложения, которые уже подписаны и распространены в App Store.

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

Дженн
источник
Большое спасибо! Я надеюсь, что это исправлено как можно скорее!
Ферран Майлинч
Так это на уровне iOS? Я также сталкиваюсь с этой проблемой на iPhone с версией iOS 13.3.1
Adromil Balais
Да, это проблема в iOS 13.3.1 и более поздних версиях, в которых отказываются от подписанных фреймворков для профиля Personal Team. Это не относится к Флаттеру. Ссылки в комментарии GitHub ссылаются на другие проекты, и я легко смог воспроизвести его с совершенно новым фреймворком в XCode без вложения Flutter.
Дженн
Я только что попробовал сейчас с iOS 13.4, и это работает! Я мог запустить свое приложение Flutter на реальном iPhone из Xcode, а также из IntelliJ IDEA. Я думаю, что это будет работать и из командной строки.
Ферран Майлинч
4

Насколько я вижу, это проблема совместимости Flutter с iOS 13.3.1. В моем случае мое приложение отлично работает на iPhone XR с iOS 13.3, но вылетает при запуске на другом iPhone XR с iOS 13.3.1. Невозможно протестировать в симуляторе, так как это приложение для камеры, но оно работает как на физических устройствах Android, так и на эмуляторах Android.

Новобранец
источник
Вы правы. Только что протестировал с моим iPad с 13.3. Мой телефон не работает с 13.3.1. Собираюсь обновить до бета 2 и попробовать :-)
Кен Хуэй
13.3.1 Публичная бета 2 имеет ту же проблему.
Кен Хуэй
3
  1. Вы согласны с лицензионным соглашением XCode? если нет, попробуйте sudo xcodebuild -license.
  2. Ваши стручки обновлены? если нет, перейдите к папке Ios в проекте флаттера в вашем терминале и типа , pod installтоpod update

Если это не сработает, перейдите в папку ios вашего проекта флаттера и откройте Runner.xcworkspace, дважды нажав на него. Это должно выглядеть так:

введите описание изображения здесь

Когда xcode откроется, нажмите на Runner в левом верхнем углу.

введите описание изображения здесь

Затем перейдите в раздел «Подписание и возможности» и в раскрывающемся списке «Команда» выберите поле. Если ничего не существует, создайте учетную запись.

введите описание изображения здесь

Затем в «Идентификаторе пакета» должно отображаться имя пакета вашего приложения. Добавьте .app в конце. Например, если его com.example.yourapp, сделайте его com.example.yourapp.app и нажмите enter.

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

Юдхиштхир Сингх
источник
У меня нет подфайла. Я смотрю на этот пост stackoverflow.com/questions/51599686/…
Ferran Maylinch
Установите cocoapods на свой компьютер и запустите команды pod в вашем каталоге ios.
Юдхиштхир Сингх
У меня есть Cocoapods. Какие команды pod я должен использовать?
Ферран Майлинч
установка pod и затем обновление pod
Юдхиштхир Сингх
Я внес изменения в свой ответ, пожалуйста, посмотрите.
Юдхиштхир Сингх
1

Можете ли вы следовать за шагом один за другим

flutter channel master
flutter upgrade
flutter clean
flutter build ios
Dev
источник
Я попробовал это. Также на бета-канале.
Ферран Майлинч
Ошибка связана с возможностями подписи, ветка флаттера не имеет к этому никакого отношения.
Юдхиштхир Сингх
1

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

Все, что я хочу, это предоставить более подробную информацию OP и другим участникам здесь. Так что у меня все как указано в ОП.

Вот что я попробовал:

  1. Podfile не создается (даже после запуска на Simulator и т. Д.), И поэтому я попытался включить его из примера приложения Flutter от Flutter Github.

    • Очистил каталог iOS
    • Добавлен подфайл
    • Побежал под обновлением.
    • Исправлены предупреждения (при условии отладки Pod конфигурации и выпуска к Xcode)
    • Добавлен FLUTTER_ROOT в пользовательские настройки (так как отсутствовал), и я получаю ошибку Xcode-backend.sh (точно не помню, извините)
    • построен

Итак, эти шаги производят: эта ошибка на симуляторе. Те же ошибки подписи что и без Pod на физическом устройстве

  • Удалил все сертификаты из Keychain Access и восстановил их через Xcode.

    Результат: ничего не изменилось

  • Удалены Xcode, Pod и настройки связанные с ним. Удалены сертификаты. Восстановил все после перезагрузки (свежая установка)

    Результат: опять же, ни сборка с модулем, ни без предоставленных ошибок

  • Я обновил Flutter до dev-канала (1.14.1) и восстановил проект, используя flutter create .

    Реран строит. С капсулами и без. Еще такой же

  • Также я попытался изменить подпись с Apple Developer на iOS Developer для всех целей (включая Pod)

    В этом у меня есть некоторые ошибки, потому что я даже пытался подписать Pods-Runner (была небольшая надежда). Но в целом ничего нового.

  • Когда я запускаю устройство на iOS 13.3.1 Beta, я обновил Target до 13.2 (максимум доступен прямо сейчас?).

    нет

  • Я включил сборку macOS и собрал приложение для Mac

    Он работает с отступом, все в порядке.

Подводить итоги:

  • Эта проблема не зависит от проекта Pod / Non-Pod.
  • Ничего не изменилось в отношении этой проблемы между последней стабильной флаттер и последней разработкой (как написано в посте)
  • Эта ошибка не исправлена ​​переустановкой XCode и не связана с сертификатами Цепочки для ключей
  • Проблема появляется только при сборке только для физического устройства iOS (iPhone X в моем случае). Симулятор (без Pod) работает хорошо.

Btw. Все работало на MacBook Pro 13 с установленной Catalina 10.15.3 и Xcode 11.3.1.

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

Снова. Прошу прощения, если я сделал что-то не так, опубликовав это, но я не хотел дублировать этот вопрос или предлагать OP отредактировать, поскольку этот пост довольно длинный.

Эмин Гулиев
источник
Большое спасибо за этот ответ. Это не решение, но это очень полезно. Очевидно, что с Флаттером что-то не так. Похоже, Google не знает точно, что ожидает Apple, или Apple не заинтересована в том, чтобы позволить Flutter работать гладко ... :)
Ferran Maylinch
Кстати, вчера я попробовал Flutter на другом Mac, с Мохаве (у меня есть Каталина), и я получил ту же ошибку.
Ферран Мэйлинч
Скорее всего, это связано с CodeSign или Flutter. Мы должны открыть вопрос github.com/flutter/flutter/issues
Эмин Гулиев
Да. Хорошая идея. Дайте мне знать, если вы это сделаете, или я могу сделать это сам.
Ферран Мэйлинч
0

Попробуйте переключиться на стабильный канал через flutter channel stable, выполнить, flutter upgradeа затем перейти к проекту приложения и запуститьflutter run

Джоеле Паннетто
источник
К сожалению, я получаю ту же ошибку. Я даже создал новое приложение флаттера после перехода на стабильный канал. Я обновил свой вопрос, чтобы показать, что теперь я на стабильном канале.
Ферран Майлинч
Я также добавил вывод прогона флаттера.
Ферран Майлинч
0

Просто для запуска приложения в режиме отладки не требуется какой-либо платной учетной записи Apple. 1) Откройте xCode для этого проекта, выберите устройство и запустите его.

Откройте XCode этого проекта и проверьте параметры сборки, так как путь FLUTTER_ROOT указан правильно, если нет, создайте корень флаттера и укажите путь.

баладжи кс
источник
У меня есть правильный FLUTTER_ROOT. Это не проблема ... :(
Ферран Мэйлинч
0

Откройте Xcode и нажмите Product -> Cleanили ( CMD- Shift- K). Если это не сработало, попробуйте следующее: https://macpaw.com/how-to/clear-xcode-cache

Если это также не работает, пожалуйста, дайте мне знать.

Blasanka
источник
Не работает Я понял, что у меня нет Podfile, поэтому я проверяю это: stackoverflow.com/questions/51599686/…
Ferran Maylinch
0

Вы проверили эту ссылку, которая может дать вам желаемый вывод https://github.com/flutter/flutter/issues/16507 . дайте мне знать, если это работает, может быть, это проблема подписания, этот пост даст вам представление о том, что происходит не так. Спасибо

Сахар Ачарья
источник
У меня нет Podfile, поэтому я проверяю это: stackoverflow.com/questions/51599686/… Во всяком случае, я не знаю, какой Podfile мне нужен. Я создал один, но я все еще получаю ту же ошибку. Так что, возможно, мне не нужен Podfile, или, в любом случае, проблема в другом.
Ферран Майлинч
0

Хорошо, у меня есть время, чтобы создать ответ:

Основываясь на ответе Subaharan Vel , вопрос: папки Flutter Podfile и Pods не созданы в каталоге ios, а ответ предполагает, что сборка для симулятора iOS может создать подфайл в неправильном месте (он должен создаваться автоматически непосредственно в каталоге iOS. Поэтому, вероятно, ваш Podfile существует где-то там. Попробуйте найти его или просто удалите весь каталог ios, очистите проект и заново создайте его. Также убедитесь, что это не так. Создание Podfile для добавления модулей iOS перед добавлением любых плагинов Flutter никогда не подключает модули плагинов в существующий подфайл .

Удачи, надеюсь это тебе поможет

Адам Тухольски
источник
Там нет Podfileнигде. Я бегу find . -name Podfileи ничего не получаю. Я удалил iosкаталог, но теперь, как я могу восстановить его? Если я бегу, flutter build iosя получаю ошибку Application not configured for iOS.
Ферран Мэйлинч
@Ferran Maylinch Просто повторите все шаги из Surbahan Vel (первая ссылка) - он удалил каталог ios, и он был воссоздан после очистки проекта. При необходимости добавьте подфайл вручную (из stackoverflow.com/a/53492243/7183675 , удалите ненужные оттуда модули , также проверьте второй комментарий под этим ответом). В крайнем случае - может помочь, если вы добавите хотя бы один пакет в pubspec, чтобы заставить Flutter автоматически создавать Podfile. Даже если этот пакет на самом деле не используется
Адам Тухольски
0

Не идеальное решение, но следующее сработало для меня.

  1. Обновите ваше устройство до iOS 13.4 beta.
  2. Выполнить пробежку
  3. Сборка должна быть успешной.
  4. Появится сообщение « Возможно, ваша версия XCode устарела для вашей версии iOS» .
  5. Приложение будет установлено на устройстве. Примечание. Приложение не запустится автоматически после завершения процесса.
  6. Нажмите на значок установленного приложения на вашем устройстве, чтобы запустить приложение.

Хотя вы ничего не увидите в окне отладки, так как процесс завершается после выдачи ошибки. Это не идеальное решение, но определенно обходной путь, пока мы не получим следующее обновление Xcode. 

Дхрува Фулсундар
источник