Я совершенно новичок во Flutter.
Мне предоставили проект, который был разработан несколькими месяцами ранее (декабрь 2020 г.) на Visual Studio Code с Flutter и Dart, чтобы развернуть его в App Store.
Хотелось бы отметить, что на тот момент проект работал очень хорошо, и тестовая версия была даже развернута на iPhone.
Мне нужно убедиться, что оно работает локально, а затем я собираюсь развернуть его в App Store.
Итак, я открыл исходный код проекта в своем Visual Studio Code. Я пытался скомпилировать его, но это не сработало. Я не знаю, когда вы открываете исходный код проекта; есть определенные настройки.
Я не уверен, что при открытии исходного кода проекта необходимо выполнить какие-либо конкретные настройки, но после просмотра форума я понял, что ошибка, должно быть, возникла в самой последней версии моего Flutter, и это это не та версия, под которой было разработано приложение.
Поэтому я следовал инструкциям, полученным из этого решения в Сборка Flutter iOS не удалась, ошибка файлов модуля: Podfile устарел и Ошибка Flutter: неверный файл `Podfile`: нет неявного преобразование нуля в строку. Я просмотрел обсуждения, но не могу решить проблему и снова создать свои подфайлы. За исключением того, что теперь эта ошибка генерируется во время компиляции:
Запуск lib/main.dart на iPhone 8 в режиме отладки... Запуск установки модуля... 1674 мс Вывод CocoaPods: ↳ Подготовка Анализ зависимостей Проверка целей для интеграции [!] Не удалось найти цель с именем `Runner` в проекте `Runner.xcodeproj`, сделал найдите `dev` и `prod`. Как это исправить?
Мой предыдущий файл модуля был
# Раскомментируйте эту строку, чтобы определить глобальную платформу для вашего проекта # платформа: iOS, '9.0' # Аналитика CocoaPods синхронно отправляет сетевую статистику, влияющую на задержку сборки флаттера. ENV['COCOAPODS_DISABLE_STATS'] = 'истина' проект 'Бегун', { 'Отладка' => :отладка, 'Профиль' => :релиз, 'Выпуск' => :выпуск, } def parse_KV_file(файл, разделитель='=') file_abs_path = File.expand_path(файл) если !File.exists? file_abs_path возвращаться []; конец сгенерированные_ключевые_значения = {} skip_line_start_symbols = ["#", "/"] File.foreach(file_abs_path) do |line| следующий, если Skip_line_start_symbols.any? { |символ| линия =~ /^\s*#{символ}/ } плагин = line.split(шаблон=разделитель) если плагин.длина == 2 имя пода = плагин[0].strip() путь = плагин[1].strip() podpath = File.expand_path("#{path}", file_abs_path) сгенерированные_ключевые_значения[имя_пода] = путь к поду еще выводит "Неверная спецификация плагина: #{line}" конец конец сгенерированные_ключевые_значения конец цель «Бегущий» сделать # Модуль флаттера copy_flutter_dir = File.join(__dir__, 'Flutter') copy_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') copy_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') если только File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) # Скопируйте Flutter.framework и Flutter.podspec во Flutter/, чтобы иметь возможность ссылаться на них, если внутренний скрипт xcode еще не запущен. # Этот сценарий скопирует правильную версию отладки/профиля/выпуска платформы на основе выбранной в данный момент конфигурации Xcode. # CocoaPods не будет встраивать инфраструктуру при установке модуля (до того, как будут сгенерированы какие-либо фазы сборки), если dylib не существует. сгенерированный_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') если только File.exist?(generated_xcode_build_settings_path) поднять «Generated.xcconfig должен существовать. Если вы запускаете установку модуля вручную, убедитесь, что сначала выполняется flutter pub get» конец сгенерированный_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) кэшированный_framework_dir = сгенерированный_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; если только File.exist?(copied_framework_path) FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copy_flutter_dir) конец если только File.exist?(copied_podspec_path) FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copy_flutter_dir) конец конец # Сохраняйте путь к модулю относительным, чтобы его можно было проверить в Podfile.lock. под 'Flutter', :path => 'Flutter' # Модули плагинов # Подготовьте папку с символическими ссылками. Мы используем символические ссылки, чтобы избежать Podfile.lock. # обращение к абсолютным путям на машинах разработчиков. система('rm -rf.symlinks') система('mkdir -p .symlinks/plugins') plugin_pods = parse_KV_file('../.flutter-plugins') плагин_pods.each do |имя, путь| символическая ссылка = File.join('.symlinks', 'плагины', имя) File.symlink(путь, символическая ссылка) имя модуля, :path => File.join(symlink, 'ios') конец конец целевой «прод» сделать # Модуль флаттера copy_flutter_dir = File.join(__dir__, 'Flutter') copy_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') copy_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') если только File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) # Скопируйте Flutter.framework и Flutter.podspec во Flutter/, чтобы иметь возможность ссылаться на них, если внутренний скрипт xcode еще не запущен. # Этот сценарий скопирует правильную версию отладки/профиля/выпуска платформы на основе выбранной в данный момент конфигурации Xcode. # CocoaPods не будет встраивать инфраструктуру при установке модуля (до того, как будут сгенерированы какие-либо фазы сборки), если dylib не существует. сгенерированный_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') если только File.exist?(generated_xcode_build_settings_path) поднять «Generated.xcconfig должен существовать. Если вы запускаете установку модуля вручную, убедитесь, что сначала выполняется flutter pub get» конец сгенерированный_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) кэшированный_framework_dir = сгенерированный_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; если только File.exist?(copied_framework_path) FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copy_flutter_dir) конец если только File.exist?(copied_podspec_path) FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copy_flutter_dir) конец конец # Сохраняйте путь к модулю относительным, чтобы его можно было проверить в Podfile.lock. под 'Flutter', :path => 'Flutter' # Модули плагинов # Подготовьте папку с символическими ссылками. Мы используем символические ссылки, чтобы избежать Podfile.lock. # обращение к абсолютным путям на машинах разработчиков. система('rm -rf.symlinks') система('mkdir -p .symlinks/plugins') plugin_pods = parse_KV_file('../.flutter-plugins') плагин_pods.each do |имя, путь| символическая ссылка = File.join('.symlinks', 'плагины', имя) File.symlink(путь, символическая ссылка) имя модуля, :path => File.join(symlink, 'ios') конец конец # Не позволяйте Cocoapods встраивать вторую структуру Flutter и вызывать ошибки в новой системе сборки Xcode. установить! 'cocoapods', :disable_input_output_paths => true post_install сделать |установщик| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['ENABLE_BITCODE'] = 'НЕТ' конец конец конец И новый созданный выглядит так:
# Раскомментируйте эту строку, чтобы определить глобальную платформу для вашего проекта # платформа: iOS, '9.0' # Аналитика CocoaPods синхронно отправляет сетевую статистику, влияющую на задержку сборки флаттера. ENV['COCOAPODS_DISABLE_STATS'] = 'истина' проект 'Бегун', { 'Отладка' => :отладка, 'Профиль' => :релиз, 'Выпуск' => :выпуск, } защита flutter_root сгенерированный_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) если только File.exist?(generated_xcode_build_settings_path) поднять «#{generated_xcode_build_settings_path} должен существовать. Если вы запускаете установку модуля вручную, убедитесь, что сначала выполняется flutter pub get» конец File.foreach(generated_xcode_build_settings_path) do |line| совпадения = line.match(/FLUTTER_ROOT\=(.*)/) вернуть совпадения[1].strip, если совпадения конец поднять «FLUTTER_ROOT не найден в #{generated_xcode_build_settings_path}. Попробуйте удалить Generated.xcconfig, затем запустите flutter pub get" конец требуется File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) flutter_ios_podfile_setup цель «Бегущий» сделать flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) конец post_install сделать |установщик| installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings (цель) конец конец И вообще, когда я запускаю flutter Doctor, я получаю:
Сводка доктора (чтобы увидеть все подробности, запустите flutter Doctor -v): [✓] Flutter (стабильная версия канала, 2.0.6, на macOS 11.2.3 20D91 darwin-x64, локаль en-GB) [✓] Набор инструментов Android — разработка для устройств Android (Android SDK версии 30.0.3) [✓] Xcode — разработка для iOS и macOS [✓] Chrome — разработка для Интернета [✓] Android Studio (версия 4.1) [✓] VS Code (версия 1.55.2) [✓] Подключенное устройство (доступно 2) • Проблем не обнаружено! И на самом деле открытие моего проекта в Xcode дает мне следующее:
