更新flutter和Xcode后,Xcode 14.3中缺少`libarclite_iphoneos.a`文件。

回答 16 浏览 1.9万 2023-03-31

我有一个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

有什么解决方法吗? 谢谢您的宝贵时间。

Ahmed Hnewa 提问于2023-03-31
stackoverflow.com/questions/75574268/…的重复内容。Paul Beusterien 2023-04-03
在这里你可以找到解决这个问题的最佳方法:stackoverflow.com/a/75924853/7048924Edimar Martins 2023-04-05
这个问题现在应该在Flutter 3.7.10中得到解决:github.com/flutter/flutter/wiki/…Clifton Labrum 2023-04-06
我是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中被修复。无论哪种情况,都要删除你对Podfile所做的任何修改,然后运行flutter upgradeJenn 2023-04-12
16 个回答
#1楼
得票数 38
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改为你在文件顶部的版本。

J. Taiga 提问于2023-03-31
Damia Fuentes 修改于2023-04-06
我会尝试,但请你详细解释一下这里发生了什么?谢谢你的时间Ahmed Hnewa 2023-03-31
它解决了编译问题(我们使用11.0,因为它是我们的最低要求),建立了,但在归档时出现了ios/../../../IntermediateBuildFilesPath/UninstalledProducts/iphoneos/openssl_grpc.f ramework" failed: No such file or directory (2)的失败。Romk1n 2023-03-31
为什么在Xcode 14.3上没有这个问题呢?Ahmed Hnewa 2023-03-31
我尝试了这个方法,它起作用了,但我不确定这是否是一个好的解决方案,我不是一个原生的ios开发者,我只熟悉flutter和原生的android,所以你能向我们解释一下这是怎么回事吗? 问题是什么,为什么会发生,你是如何解决的? 非常感谢你的时间Ahmed Hnewa 2023-03-31
将13.0改为你在文件顶部的版本。例如,对我来说,它是13.7。Damia Fuentes 2023-04-06
#2楼 已采纳
得票数 13

编辑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等。

Ahmed Hnewa 提问于2023-04-02
Ahmed Hnewa 修改于2023-04-12
这个 Xcode 14.3 行为变化在 Flutter 3.7.11 中得到了解决,而不是 3.7.10 github.com/flutter/flutter/issues/124340Jenn 2023-04-12
谢谢你 - 我只想补充一点,我做了一个flutter升级,然后是arch -x86_64 pod安装(在M1上),这就是截至2023年4月17日所需要的一切。jwehrle 2023-04-18
#3楼
得票数 6

也面临着这个问题,并走上了同样的道路。

  1. 不幸的是,将部署目标升级到13.0只解决了应用程序的调试版本的问题。然后,你至少可以再次在模拟器中运行它。

  2. 由于 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}")"似乎有帮助。

Martin Joller 提问于2023-03-31
Martin Joller 修改于2023-03-31
我把我的测试iPhone更新到了16.4,但它与Xcode 14.2不兼容。Ahmed Hnewa 2023-03-31
你好,你能不能更详细地告诉我,用source="$(readlink "${source}")"代替source="$(readlink -f "${source}")"到底是什么意思,怎么改的?songhee24 2023-04-03
@songhee24 在你的项目中进入Pods -> Targets Support Files -> Pods-YourApp -> Pods-YourApp-frameworks 在该文件中搜索并替换,就像OP说的那样Pasosta 2023-04-04
归档应用程序的问题与原来的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
#4楼
得票数 6

该问题在后来的Flutter版本中得到解决,运行flutter upgrade,并重新初始化依赖关系。

flutter clean
flutter pub get
cd ios/
pod deintegrate
pod install
pod repo update
pod install

如果还不能解决这个错误,请按照下面提到的步骤进行操作。

确保你已经更新了pod文件,然后按照下面提到的步骤进行操作:

第1步

在我的案例中,我得到了一个FMDB文件的错误在此输入图片描述

第2步

使用下拉菜单(蓝色小箭头)更改受影响的 pod 上的 iOS 版本在此输入图片描述

第3步

更改 Target Pod 上的 Distribution 设置在此输入图片描述

在Xcode上再次重建你的应用程序,并重复这个过程,直到你解决所有库的问题。

Mashood .H 提问于2023-04-05
Mashood .H 修改于2023-04-19
这个变化将暂时起作用,但在下一次Flutter工具调用pod install时(如果你运行flutter clean,向你的pubspec添加一个新的插件,等等)将被覆盖。与其手动更新,不如运行flutter upgrade来获得Flutter 3.7.11中Xcode 14.3行为改变的解决方法github.com/flutter/flutter/issues/124340Jenn 2023-04-12
#5楼
得票数 5

最初报告的缺失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维护者会看一下。

Jenn 提问于2023-04-12
#6楼
得票数 2

正如我所看到的,问题来自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)。

Mochamad Nizwar Syafuan 提问于2023-04-06
Mochamad Nizwar Syafuan 修改于2023-04-06
我是修复这个问题的Flutter维护者。请不要像这个答案中描述的那样编辑你的Podfile。相反,请运行flutter upgrade以获得Flutter 3.7.11中Xcode 14.3行为改变的解决方法github.com/flutter/flutter/issues/124340Jenn 2023-04-12
#7楼
得票数 1

如果你已经更新到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"。

你应该可以开始工作了。

灵感来自于@黄昏之歌

emnzava 提问于2023-04-03
emnzava 修改于2023-04-03
嗨,你能不能解释一下这个变化对任何flutter开发者来说有什么作用? 为什么会发生这样的问题,我们在这里是为了了解我们在做什么,而不仅仅是解决问题,让它发挥作用,谢谢你的时间。Ahmed Hnewa 2023-04-04
#8楼
得票数 1

我的很多库都有这个问题,我通过改变库的最小部署量找到了解决办法。我通过将最小部署量从8.0更新到11.0,摆脱了构建错误。

talhagg 提问于2023-04-10
#9楼
得票数 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中更新部署目标。

Siyu 提问于2023-04-01
在ios项目中没有RECOMMENDED_MACOSX_DEPLOYMENT_TARGET,只有在mac os项目中,所以你建议手动升级它吗?Ahmed Hnewa 2023-04-02
@AhmedHnewa 对于iOS来说,你需要它的对应物,RECOMMENDED_IOS_DEPLOYMENT_TARGET或者手动将其设置为等值。检查你的pod文件,以及Xcode中的项目配置Siyu 2023-04-02
@Siyu 你能不能提供更多的信息,说明你是如何让这个东西在macOS上工作的,我目前正遇到这个问题,这是我能找到的唯一的参考资料。Jonas Smith 2023-04-03
@JonasSmith 在你所有的构建目标的项目设置中,将部署目标改为RECOMMENDED_MACOSX_DEPLOYMENT_TARGET。如果你使用软件包管理器,你可能也需要改变那里的相应设置。Siyu 2023-04-04
#10楼
得票数 0

我通过在我的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\'')
...
Chris 提问于2023-04-03
谢谢你,但你能解释一下你的这一改动吗?Ahmed Hnewa 2023-04-03
没问题,在你的podfile中寻找这一行post_install do |installer| 。在它下面加上我上面写的内容。并将IPHONEOS_DEPLOYMENT_TARGET替换为所需的版本,例如:13.0Chris 2023-04-04
你要确保你的所有pod都设置为14.0,然后加入推荐的解决方法,因为CocoaPods目前有一个bug。Chris 2023-04-04
#11楼
得票数 0

检查已安装的pod的iOS部署目标,它应该是最小的iOS 11.0。

Pod(选择一个pod) -> Build Setting -> Deployment -> iOS部署目标(最低11.0) 在此输入图片描述

Bandish Kumar 提问于2023-04-04
#12楼
得票数 0

当我把我的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
mehmetdelikaya 提问于2023-04-04
#13楼
得票数 0

我能够将我的项目构建到模拟器以及我自己的设备上,但无法将其归档推送到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中运行,那么希望这能解决这个问题。

karhoong 提问于2023-04-05
#14楼
得票数 0

这样做可以: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
Ashwini Rao 提问于2023-04-06
#15楼
得票数 0

对于cordova项目,在platform ios下的config.xml中添加以下一行

<platform name="ios">
<preference name="deployment-target" value="11.0" />
</platform>
Ali Exalter 提问于2023-04-12
#16楼
得票数 0

你可以按照下面的步骤来解决这个问题:

  1. 请确保你的机器上安装了flutter 3.7.10或以上的版本。
  2. 对于大多数人来说,只需做上述步骤,然后在删除podfilepodfile.lockpods目录和pubspec.lock文件后重建,就应该能解决这个问题。
  3. 如果它仍然没有为你修复,这可能是你可能有一些包的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

并重建。这应该可以解决这个问题。

Milan Agarwal 提问于2023-04-13
或者您可以将flutter升级到最新版本,它应该对大多数情况都有效。Ahmed Hnewa 2023-04-14
是的,这就是我在第2点中所说的。Milan Agarwal 2023-04-14