У меня есть проект флаттера, я пытаюсь запустить версию для iOS, но получаю сообщение об ошибке после обновления флаттера и Xcode до последней версии, я использую плагин ядра firebase
ошибка:
Could not build the precompiled application for the device.
Error (Xcode): File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a
Error (Xcode): Linker command failed with exit code 1 (use -v to see invocation)
Подфайл:
# Uncomment this line to define a global platform for your project
# platform :ios, '12.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}
def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
unless File.exist?(generated_xcode_build_settings_path)
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end
File.foreach(generated_xcode_build_settings_path) do |line|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
return matches[1].strip if matches
end
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
flutter_ios_podfile_setup
target 'Runner' do
use_frameworks!
use_modular_headers!
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
end
Я также попытался установить все установленные модули:
pod deintegrate
rm Podfile.lock
rm -rf Pods
а затем обновить репозитории и установить модули, и я все равно получаю ту же ошибку, должен ли я переустановить xcode?
Флаттер-пакеты:
firebase_core: ^2.8.0
firebase_crashlytics: ^3.0.17
firebase_analytics: ^10.1.6
firebase_messaging: ^14.3.0
Любое обходное решение для этого? и спасибо за ваше время
Здесь вы можете найти лучший способ решить эту проблему: stackoverflow.com/a/75924853/7048924
Теперь эта проблема должна быть исправлена в Flutter 3.7.10
: github.com/flutter/flutter/wiki/…
Я сопровождающий Flutter, который исправил обе проблемы, которые путают в этих ответах SO, обе вызваны изменениями поведения в Xcode 14.3. Первоначально заявленное отсутствующее libarclite_iphoneos
было исправлено во Flutter 3.7.11 github.com/flutter/flutter/issues/124340 . Другая не связанная с этим проблема — сбой архивации, который был отслежен на github.com/flutter/flutter/issues/123890 и исправлен во Flutter 3.7.10. В любом случае удалите все изменения, которые вы внесли в свой подфайл, и запустите flutter upgrade
.
Так почему бы не закрыть его @PaulBeusterien?
Отвечает ли это на ваш вопрос? Отсутствует файл libarclite_iphoneos.a (Xcode 14.3)
post_install do |installer|
installer.generated_projects.each do |project|
project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
end
end
end
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
end
Попробуйте обновить файл ios/Podfile. Измените 13.0 на версию, которая у вас есть в верхней части файла.
Я попробую, но не могли бы вы подробно объяснить, что здесь происходит? Спасибо за ваше время
это решает проблему компиляции (мы используем 11.0, так как это наше минимальное требование), сборка, но затем происходит сбой в архиве с ios/../../../IntermediateBuildFilesPath/UninstalledProducts/iphoneos/openssl_grpc.f ramework" failed: No such file or directory (2)
Почему этот воск не выдает Xcode 14.3?
Я попробовал это, и это работает, но я не уверен, что это хорошее решение, я не являюсь родным разработчиком iOS, и я знаком только с флаттером и родным Android, так что вы можете объяснить нам, что происходит на? в чем проблема, почему это происходит и как вы ее решили? Большое спасибо за уделенное время
Измените 13.0 на версию, которая у вас есть в верхней части файла. Например, у меня это было 13,7.
Я сопровождающий Flutter, который исправил эту проблему. Пожалуйста, не редактируйте свой подфайл, как описано в этом ответе. Вместо этого запустите flutter upgrade
, чтобы получить обходной путь к изменению поведения Xcode 14.3 во Flutter 3.7.11 github.com/flutter/flutter/issues/124340.
Столкнулся с этой проблемой и пошел по тому же пути.
Обновление цели развертывания до 13.0, к сожалению, решает проблему только для отладочной версии приложения. Тогда вы, по крайней мере, сможете снова запустить его в симуляторе.
Архивация приложения (например, сборка ipa для отправки в магазин) по-прежнему не будет работать с Xcode 14.3 на данный момент из-за CocoaPods (Обновление с xCode 14.2 до 14.3 PhaseScriptExecution не удалось с ненулевым кодом выхода). К сожалению, (единственное?) решение на данный момент, похоже, понижается до 14.2, ожидая исправления со стороны CocoaPods (https://github.com/CocoaPods/CocoaPods/issues/11808#issuecomment-1481244508)
Обновлять Проблема вроде бы найдена и исправлена (https://github.com/CocoaPods/CocoaPods/pull/11828), но еще не объединена — надеюсь, это произойдет в ближайшее время. Тем временем замена source="$(readlink "${source}")" на source="$(readlink -f "${source}")" в файлах ...framework.sh, похоже, помогает.
Я обновил тестовый iPhone до версии 16.4, и он не совместим с Xcode 14.2.
здравствуйте, подскажите пожалуйста подробнее что означает замена source = "$(readlink "${source}")" на source = "$(readlink -f "${source}")" где это изменить и как ? и как это можно сделать?
@songhee24 в вашем проекте перейдите в Pods -> Targets Support Files -> Pods-YourApp -> Pods-YourApp-frameworks в этом файле, найдите и замените, как говорит OP
Проблемы с архивированием приложения не связаны с исходным libarclite_iphoneos
(что должно быть исправлено в версии 3.7.11). Это произошло из-за изменения поведения Xcode 14.3, которое сломало скрипт CocoaPods github.com/CocoaPods/CocoaPods/issues/11808 . Во Flutter есть обходной путь, отслеживаемый на github.com/flutter/flutter/issues/123890 и доступный во Flutter 3.7.10.
Предоставление моей доли мыслей.
Я строю для MacOS, и Xcode жаловался на файл libarclite_macosx
. Так похожий сценарий.
Решение состоит в том, чтобы изменить цель развертывания на RECOMMENDED_MACOSX_DEPLOYMENT_TARGET
, что в настоящее время эквивалентно MacOS 10.13 для Xcode 14.3.
Это по существу устраняет зависимость этого ненужного файла, потому что
цель развертывания приложения достаточно современна, чтобы можно было полагаться на встроенный в систему ARC. Действительно, это всегда так с Xcode 14, где минимальная поддерживаемая цель развертывания — iOS 11.
Ссылка: https://developer.apple.com/forums/thread/725300
В вашем случае, я считаю, это означает обновить цель развертывания в Xcode и podfile.
В проекте ios нет RECOMMENDED_MACOSX_DEPLOYMENT_TARGET, только в проекте mac os, поэтому вы предлагаете обновить его вручную? вроде 13 или 14? потому что я сделал для файла pod и проекта и цели бегуна до 14, и я все еще получаю ту же ошибку
@AhmedHnewa Для iOS вам понадобится аналог iOS, RECOMMENDED_IOS_DEPLOYMENT_TARGET
или вручную установите его эквивалентное значение. Проверьте файл модуля, а также конфигурацию проекта в Xcode.
@Siyu, не могли бы вы дать больше информации о том, что вы сделали, чтобы это заработало для macOS, в настоящее время я сталкиваюсь с этой проблемой, и это единственная ссылка на нее, которую я могу найти.
@JonasSmith Измените цель развертывания на RECOMMENDED_MACOSX_DEPLOYMENT_TARGET
в настройках проекта для всех ваших целей сборки. Если вы используете менеджер пакетов, вам также может понадобиться изменить соответствующие настройки.
Редактировать 4
если вы обновите свои флаттеры, какао-бобы и плагины флаттера, но проблема не исчезнет, Действительно простое и эффективное решение — отредактировать ваш подфайл.
platform :ios, '14.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}
def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
unless File.exist?(generated_xcode_build_settings_path)
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end
File.foreach(generated_xcode_build_settings_path) do |line|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
return matches[1].strip if matches
end
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
flutter_ios_podfile_setup
target 'Runner' do
use_frameworks!
use_modular_headers!
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
target 'RunnerTests' do
inherit! :search_paths
end
end
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
if Gem::Version.new(config.build_settings['IPHONEOS_DEPLOYMENT_TARGET']) < Gem::Version.new('11.0')
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
end
end
flutter_additional_ios_build_settings(target)
end
end
Изменения, которые я сделал, заключаются в том, чтобы определить версию платформы ios как минимум 14 и убедиться, что все модули имеют минимальную версию 11, в противном случае проигнорируйте ее, изменения относятся ко второй строке и post_install
Редактировать 3:
Проблема возвращается снова во флаттере 3.10 с некоторыми пакетами, поэтому, пожалуйста, используйте способ, который я показываю ниже
Редактировать 2:
Попробуйте обновить флаттер, так как проблема должна быть исправлена в 3.7.11.
flutter upgrade
Я исправил проблему, хотя я не уверен, что это хорошее решение, выполните следующее:
flutter clean
flutter pub get
cd ios/
pod deintegrate
pod install
pod repo update
pod install (again)
Просто откройте проект ios внутри проекта флаттера в Xcode, перейдите к модулям на вкладке папок (файлов), перейдите к целям, перейдите к целям (это модуль, я думаю, одна зависимость), который вызывает проблему, в моем случае FMDB и App auth, обновите минимальные развертывания для обоих с текущей версии (в моем случае 9.0) до 13.0 и попробуйте снова запустить приложение, создав его и запустив в Xcode или используя флаттер-запуск с выбранным устройством ios, и проблема должна уйти
однако иногда, когда вы очищаете проект во флаттере (используя flutter clean
), он сбрасывает эти изменения, или когда вы удаляете модули и деинтегрируете Cocapods и переустанавливаете приложение, все изменения будут возвращены к значениям по умолчанию, это не совсем эффективное решение, но, по крайней мере, вы можете запустить приложение
и если проблема все еще существует, снова обновите минимальное развертывание для цели pods и запустите приложение с помощью Xcode, если у вас все еще есть проблема, попробуйте другие ответы или вы можете попробовать обновить cocapods с помощью
sudo gem install cocoapods
если ваш Mac-машина Apple Silicon (m1, m2), вам также нужно запустить
sudo gem uninstall ffi && sudo gem install ffi -- --enable-libffi-alloc
В официальной документации сказано, что
Обновлено: эта идея решения пришла ко мне, и все благодаря @Siyu
Если вы из будущего, вы можете попробовать обновить пакеты и кокаподы, флаттер и т. д.
Это изменение поведения Xcode 14.3 было устранено во Flutter 3.7.11, а не 3.7.10 github.com/flutter/flutter/issues/124340.
Спасибо за это - я просто хочу добавить, что я сделал обновление флаттера, затем установил модуль arch -x86_64 (на M1), и это все, что было необходимо по состоянию на 17 апреля 2023 г.
Я исправил это, добавив следующее в раздел post_install
моего файла модуля (замените цель развертывания на требуемую):
installer.generated_projects.each do |project|
project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '14.0'
end
end
end
# Check out: https://github.com/flutter/flutter/issues/123852
# Workaround for Xcode 14.3:
system('sed -i \'\' \'44s/readlink/readlink -f/\' \'Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\'')
...
Спасибо, но можете ли вы объяснить, что вы сделали с этим изменением?
Нет проблем, ищите эту строку в своем подфайле post_install do |installer|
. Под этим добавить то, что я поставил выше. И замените IPHONEOS_DEPLOYMENT_TARGET
на нужную версию. например 13,0
Вы убедитесь, что все ваши модули настроены на 14.0, а затем добавляете рекомендуемый обходной путь, поскольку на данный момент в CocoaPods есть ошибка.
Если вы обновились до xcode 14.3 и выше. Сделайте следующее:
Откройте файл project.pbxproj (ios/Pods/Pods.xcodeproj/project.pbxproj) и убедитесь, что для параметра «IPHONEOS_DEPLOYMENT_TARGET» установлено значение 11.0 или выше.
Чтобы сделать изменения постоянными, добавьте целевое развертывание в подфайл следующим образом:
platform :ios, '12.0' # set IPHONEOS_DEPLOYMENT_TARGET for the pods project
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
end
end
end
Затем запустите "flutter pub get".
Тебе должно быть хорошо идти.
Вдохновлено @dawnsong
Привет, не могли бы вы объяснить, что это изменение делает в терминах, понятных любому разработчику флаттера? почему проблема все равно возникает, мы здесь, чтобы понять, что мы делаем, а не просто решить проблемы и заставить их работать, спасибо за ваше время.
Проверьте цель развертывания iOS для установленного модуля, это должна быть как минимум iOS 11.0.
Модуль (выберите модуль) -> Настройка сборки -> Развертывание -> Цель развертывания iOS (минимум 11.0)
У меня была такая же проблема, когда я обновил свой Xcode до 14.3.
Я нашел быстрый обходной путь, обновив iOS Deployment Target моих установленных модулей. Я установил цель развертывания iOS на 11 для модулей, которые нацелены ниже 11. Это работает как шарм, но если вы переустановите свои модули, вам нужно будет снова сделать это изменение, поскольку модули будут установлены с их целями развертывания по умолчанию.
Затем я поместил скрипт установки в свой подфайл, как показано ниже. Затем я запускаю команду установки модуля в командной строке, чтобы отразить изменения. Примечание. Сначала я установил цель развертывания 11, но получил ошибку, потому что некоторым из моих модулей требуется как минимум 13, поэтому я изменил его на 13, потому что это повлияет на все ваши модули.
target 'YourApp' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for YourApp
pod ...
pod ...
post_install do |installer|
installer.generated_projects.each do |project|
project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
end
end
end
end
end
Я могу встроить свой проект в эмулятор, а также в свое собственное устройство, но не могу заархивировать его для отправки в AppStore. Зная, что это ошибка в Xcode 14.3, и ни одно из минимальных требований к изменению или другой метод модификации Podfile, я решил ее, используя 14.2, и пока игнорирую 14.3.
Установив свой Xcode из AppStore, самый медленный метод из всех, я использовал менеджер версий Xcode, который я нашел здесь https://betterprogramming.pub/easyly-swith-between-xcode-versions-b36f9f685979
Короче говоря, вот некоторые фрагменты шагов, которые я предпринял
Шаг 1: Установите диспетчер Xcode и установите Xcode 14.2 (он запросит ваши учетные данные AppleID)
gem install xcode-install
xcversion install 14.2
xcversion select 14.2
Шаг 2: Откройте Xcode-14.2.app из папки приложений MacOS.
Шаг 3: Если ваш проект работал в Xcode 14.2 раньше, надеюсь, это исправит его.
Обновление: проблема решена в более поздних версиях Flutter. бегать
flutter upgrade
и повторная инициализация зависимостей
flutter clean
flutter pub get
cd ios/
pod deintegrate
pod install
pod repo update
pod install
если это не устранит ошибку, выполните шаги, указанные ниже.
Убедитесь, что вы обновили файлы модуля, после чего выполните шаги, указанные ниже:
Шаг 1
Отследить проблему, связанную с библиотекой здесь, в моем случае я получил ошибку для файла FMDB
Шаг 2
Измените версию iOS в соответствующем модуле с помощью раскрывающегося меню (маленькая синяя стрелка).
Шаг 3
Изменить настройку распространения в целевом модуле
Снова перестройте свое приложение в Xcode. и повторяйте процесс, пока не решить все проблемы с библиотекой
Это изменение будет работать временно, но будет перезаписано при следующем вызове pod install
инструментом Flutter (если вы запустите flutter clean
, добавьте новый плагин в свою спецификацию и т. д.). Вместо обновления вручную запустите flutter upgrade
, чтобы получить обходной путь изменения поведения Xcode 14.3 во Flutter 3.7.11 github.com/flutter/flutter/issues/124340.
У меня проблема в 3.10.0 и это работает
У меня не работало во Flutter 3.10.0, но кажется, что проблема была исправлена во Flutter 3.10.1, по крайней мере, для меня! github.com/flutter/flutter/issues/124529
да, я упомянул, что в верхней части ответа это разрешено в более новых версиях
Это работает: https://dev.to/curtlycritchlow/how-to-fix-missing-file-libarcliteiphonesosaxcode-143-4hki
что нужно будет делать каждый раз после запуска pod install
или вы можете просто добавить это в конец Podfile
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
config.build_settings['ENABLE_BITCODE'] = 'NO'
end
end
end
Как я видел, проблема исходила из цели развертывания плагинов Flutter, которая все еще находится на уровне 8.0, что решается путем ручного обновления ее до более высокой версии с помощью Xcode, если вы хотите сделать это автоматически, вы можете поместить эти коды в ios /Подфайл в post_install
installer.generated_projects.each do |project|
project.targets.each do |target|
target.build_configurations.each do |config|
if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] == '8.0'
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
end
end
end
end
так это будет выглядеть так
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
# Here is the code I provide above ==================
installer.generated_projects.each do |project|
project.targets.each do |target|
target.build_configurations.each do |config|
if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] == '8.0'
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
end
end
end
end
#Here is the end ===================================
end
после этого запустите pod install
в папке ios...
Что он делает? Код переопределит цель развертывания каждого модуля, которая все еще находится на уровне 8.0, на 11.0, по этой логике вы не будете беспокоить какие-либо плагины, которым может потребоваться конкретная цель развертывания (которая наверняка выше 8.0).
Я сопровождающий Flutter, который исправил эту проблему. Пожалуйста, не редактируйте свой подфайл, как описано в этом ответе. Вместо этого запустите flutter upgrade
, чтобы получить обходной путь к изменению поведения Xcode 14.3 во Flutter 3.7.11 github.com/flutter/flutter/issues/124340.
Эй, я согласен, НО я обновился до флаттера 3.7.12, и проблема не решается для меня.
У меня была эта проблема со многими моими библиотеками, и я нашел решение, изменив минимальное развертывание библиотек. Я избавился от ошибки сборки, обновив минимальные развертывания с 8.0 до 11.0.
Для проектов Cordova добавьте следующую строку в config.xml под платформой ios.
<platform name = "ios">
<preference name = "deployment-target" value = "11.0" />
</platform>
Первоначально сообщаемая отсутствующая ошибка компиляции libarclite_iphoneos.a
вызвана тем, что плагины Flutter имеют зависимость (модуль CocoaPods) с минимальной версией iOS <9.0.0. Кажется, Xcode 14.3 удалил библиотеку из своей цепочки инструментов, необходимой для создания этих более низких версий. Flutter 3.7.11 имеет обходной путь как для iOS, так и для macOS.
Подробнее в https://github.com/flutter/flutter/issues/124340.
Другая (не связанная с этим) проблема, обсуждаемая в этих ответах, — это невозможность заархивировать приложение iOS или macOS. Это произошло из-за другого изменения поведения Xcode 14.3, которое сломало скрипт CocoaPods https://github.com/CocoaPods/CocoaPods/issues/11808 . Во Flutter есть обходной путь, отслеживаемый в https://github.com/flutter/flutter/issues/123890 и доступный в Flutter 3.7.10.
Если вы видите какую-либо проблему, запустите flutter upgrade
, чтобы получить последнюю версию Flutter с этими исправлениями. Если вы все еще видите проблемы, отправьте новую проблему на GitHub, и я или другой сопровождающий Flutter посмотрю.
Вы можете выполнить следующие шаги, чтобы исправить это:
3.7.10
или выше.podfile
, podfile.lock
, pods
и файла pubspec.lock
должно исправить это.podfile
и замените приведенный ниже код.post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
end
с кодом
post_install do |installer|
installer.generated_projects.each do |project|
project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
end
end
end
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
end
и восстановить. Это должно исправить это наверняка.
Или вы можете обновить флаттер до последней версии, и он должен работать в большинстве случаев.
Да, это то, что я сказал в пункте № 2
Я нашел это решение на форуме разработчиков Apple, похоже, оно связано с новой версией XCode (14.3), в которой используется относительный путь для модулей фреймворка.
(в моем случае APPNAME — RUNNER)
Найдите файл Pods-APPNAME-frameworks.sh в ios/Pods/Target Support Files/Pods-APPNAME/Pods-APPNAME-frameworks.sh:
Заменять:
if [ -L "${source}" ]; then
echo "Symlinked..."
source = "$(readlink "${source}")"
fi
с:
if [ -L "${source}" ]; then
echo "Symlinked..."
source = "$(readlink -f "${source}")"
fi
Обратите внимание, что был добавлен -f.
cd /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/
sudo mkdir arc
cd arc
sudo git clone https://github.com/kamyarelyasi/Libarclite-Files.git .
sudo chmod +x *
Это сработало для меня.
Дубликат stackoverflow.com/questions/75574268/…