更新flutter和Xcode后,Xcode 14.3中缺少`libarclite_iphoneos.a`文件。
我有一个flutter项目,我试图运行iOS版本,但在我将flutter和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)
Podfile:
# 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:
pod deintegrate
rm Podfile.lock
rm -rf Pods
然后更新软件库和安装pod,我仍然得到同样的错误,我应该重新安装xcode吗?
Flutter packages:
firebase_core: ^2.8.0
firebase_crashlytics: ^3.0.17
firebase_analytics: ^10.1.6
firebase_messaging: ^14.3.0
有什么解决方法吗? 谢谢您的宝贵时间。
libarclite_iphoneos
在Flutter 3.7.11 github.com/flutter/flutter/issues/124340中被修复。另一个不相关的问题是存档失败,这个问题在github.com/flutter/flutter/issues/123890中被跟踪,并在Flutter 3.7.10中被修复。无论哪种情况,都要删除你对Podfile所做的任何修改,然后运行flutter upgrade
。
- Jenn 2023-04-12
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/Pod文件。将13.0改为你在文件顶部的版本。
ios/../../../IntermediateBuildFilesPath/UninstalledProducts/iphoneos/openssl_grpc.f ramework" failed: No such file or directory (2)
的失败。
- Romk1n 2023-03-31
编辑2:
试着更新flutter,因为这个问题应该在3.7.11中得到解决。
flutter upgrade
我修复了这个问题,尽管我不确定这是否是一个好的解决方案,运行以下内容:
flutter clean
flutter pub get
cd ios/
pod deintegrate
pod install
pod repo update
pod install (again)
只要在Xcode中打开flutter项目中的ios项目,在文件夹(文件)选项卡中进入Pods,进入目标,进入导致问题的目标(我猜是pod,一个依赖关系),在我的例子中FMDB和App auth,将两者的最小部署从当前版本(在我的例子中是9.0)到13.0,并尝试再次运行该应用程序,在Xcode中构建并运行它,或使用flutter运行所选的ios设备,问题应该消失。
然而,有时当你在flutter中清理项目时(使用flutter clean
),它将重置这些更改,或者当你删除pods和deintegrate 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
如果你是来自未来,你可能想尝试升级软件包和cocapods、flutter等。
也面临着这个问题,并走上了同样的道路。
不幸的是,将部署目标升级到13.0只解决了应用程序的调试版本的问题。然后,你至少可以再次在模拟器中运行它。
由于 CocoaPods (从 xCode 14.2 升级到 14.3 PhaseScriptExecution 失败,退出代码非零)。 不幸的是,目前(唯一的?)解决方案似乎正在降级到 14.2,同时等待 CocoaPods 方面的修复(https://github.com/CocoaPods/CocoaPods/issues/11808#issuecomment-1481244508)
Update 这个问题似乎已经被发现并修复了(https://github.com/CocoaPods/CocoaPods/pull/11828),但还没有被合并--希望这将很快发生。同时,将.framework.sh文件中的source="$(readlink "${source}")"替换为source="$(readlink -f "${source}")"似乎有帮助。
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中可用。
- Jenn 2023-04-12
该问题在后来的Flutter版本中得到解决,运行flutter upgrade
,并重新初始化依赖关系。
flutter clean
flutter pub get
cd ios/
pod deintegrate
pod install
pod repo update
pod install
如果还不能解决这个错误,请按照下面提到的步骤进行操作。
确保你已经更新了pod文件,然后按照下面提到的步骤进行操作:
第1步
第2步
使用下拉菜单(蓝色小箭头)更改受影响的 pod 上的 iOS 版本 。
第3步
更改 Target Pod 上的 Distribution 设置
在Xcode上再次重建你的应用程序,并重复这个过程,直到你解决所有库的问题。
pod install
时(如果你运行flutter clean
,向你的pubspec添加一个新的插件,等等)将被覆盖。与其手动更新,不如运行flutter upgrade
来获得Flutter 3.7.11中Xcode 14.3行为改变的解决方法github.com/flutter/flutter/issues/124340。
- Jenn 2023-04-12
最初报告的缺失libarclite_iphoneos.a
编译失败是在当Flutter插件有一个最小iOS版本<9.0的依赖关系(CocoaPods pod)时引起。似乎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维护者会看一下。
正如我所看到的,问题来自Flutter的插件部署目标仍然是8.0,这可以通过Xcode手动更新到更高的版本来解决,如果你想自动更新,你可以在post_install的ios/Podfile里面放上这些代码。
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
之后,在ios文件夹中运行pod install
...
该代码将覆盖每一个仍在8.0的pod的部署目标到11.0,通过这种逻辑,你将不会打扰任何可能需要特定部署目标的插件(肯定高于8.0)。
flutter upgrade
以获得Flutter 3.7.11中Xcode 14.3行为改变的解决方法github.com/flutter/flutter/issues/124340。
- Jenn 2023-04-12
如果你已经更新到xcode 14.3及以上版本。请执行以下操作:
打开文件project.pbxproj (ios/Pods/Pods.xcodeproj/project.pbxproj),确保"IPHONEOS_DEPLOYMENT_TARGET"被设置为11.0或更高。
要在 podfile 中进行永久更改,请按如下方式添加目标部署:-
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"。
你应该可以开始工作了。
灵感来自于@黄昏之歌
我的很多库都有这个问题,我通过改变库的最小部署量找到了解决办法。我通过将最小部署量从8.0更新到11.0,摆脱了构建错误。
提供我的那份想法。
我正在为MacOS构建,Xcode抱怨的文件是libarclite_macosx
。因此,类似的情况。
解决方案是将部署目标改为RECOMMENDED_MACOSX_DEPLOYMENT_TARGET
,目前Xcode 14.3的部署目标相当于MacOS 10.13。
这从本质上消除了对该不必要文件的依赖,因为
the app’s deployment target is modern enough that it can rely on ARC being built in to the system. Indeed, that’s always the case with Xcode 14, where it’s minimum supported deployment target is iOS 11
参考资料:https://developer.apple.com/forums/thread/725300。
对于你的情况,我相信这意味着要在Xcode和podfile中更新部署目标。
RECOMMENDED_IOS_DEPLOYMENT_TARGET
或者手动将其设置为等值。检查你的pod文件,以及Xcode中的项目配置
- Siyu 2023-04-02
RECOMMENDED_MACOSX_DEPLOYMENT_TARGET
。如果你使用软件包管理器,你可能也需要改变那里的相应设置。
- Siyu 2023-04-04
我通过在我的pod文件的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
- Chris 2023-04-04
当我把我的Xcode更新到14.3时,我也遇到了同样的问题。
我已经找到了一个快速的解决方法,那就是更新我所安装的pod的iOS部署目标。我将目标低于11的pods的iOS部署目标设置为11。这就像一个魅力,但如果你重新安装你的pod,你将需要再次做这个改变,因为pod将按其默认部署目标安装。
然后我把安装脚本放到了我的Podfile中,如下图。然后我在命令行上运行pod安装命令来反映这些变化。注意,我首先设置了部署目标11,但我得到了错误,因为我的一些pod至少需要13,所以我把它改为13,因为这将影响你所有的pod。
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的一个bug,而且没有改变最低要求或其他Podfile的修改方法,我通过使用14.2解决了这个问题,暂时忽略了14.3
我的Xcode是从AppStore安装的,这是最慢的方法,我使用了一个Xcode版本管理器,我从这里找到了https://betterprogramming.pub/easily-swith-between-xcode-versions-b36f9f685979。
长话短说,这里是我采取的一些步骤的片段。
第1步:安装Xcode管理器并安装Xcode 14.2 (它会要求你的AppleID凭证)
gem install xcode-install
xcversion install 14.2
xcversion select 14.2
第2步:从你的MacOS应用程序文件夹中打开Xcode-14.2.app
第3步:如果你的项目之前在Xcode 14.2中运行,那么希望这能解决这个问题。
这样做可以:https://dev.to/curtlycritchlow/how-to-fix-missing-file-libarcliteiphonesosaxcode-143-4hki。
这将需要在你运行pod安装后,每次都要进行
或者你可以简单地在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
对于cordova项目,在platform ios下的config.xml中添加以下一行
<platform name="ios">
<preference name="deployment-target" value="11.0" />
</platform>
你可以按照下面的步骤来解决这个问题:
- 请确保你的机器上安装了flutter
3.7.10
或以上的版本。 - 对于大多数人来说,只需做上述步骤,然后在删除
podfile
、podfile.lock
、pods
目录和pubspec.lock
文件后重建,就应该能解决这个问题。 - 如果它仍然没有为你修复,这可能是你可能有一些包的iOS部署目标设置为10或以下的原因。要解决这个问题,请到
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
并重建。这应该可以解决这个问题。