Flutter3.3打包iOS填坑记录

10,688 阅读3分钟

升级第三方库不可怕,可怕的是附送bug

有bug不可怕,可怕的是第一个吃螃蟹

第一个也不可怕,可怕的是大家都不分享

一、 升级Flutter3.3

太难得了,等了一个半月终于更新了,太期待能有新的性能提升,新的特性加入。使得能有更好的体验,更棒的开发效率。想要的有(1)Android Studio的自动完成,更加智能。(现在每次提示的,都不是我想要的)(2)页面的动画更加的流畅。(很多时间都是没有动画,感觉起来就是H5)(3)性能的优化。(More and More)

flutter3.3

第一时间更新到3.3.0,迫不及待的那种。开发(Android开发,然后适配下iOS),一切都是那么地Nice。当沾沾自喜没有附送新bug时,打包iOS提测却一直都是报错,报错的原因有了。但是这个错误好像是有提示,又好像没有。(打包2天才成功,所以值得我记录一下)

之后七天又发布了3.3.1,这个周期是正常合理了。可我有点不敢升级了。

二、 碰到了BUG

开始适配iOS的时候,build都是失败的,一直在报错。

1. 找不到FlutterPluginRegistrant

bug1

pod install都是正常的。为啥突然就找不到了FlutterPluginRegistrant,之前一直都是好的。在swift中 import FlutterPluginRegistrant也试了,在xx-Bridging-Header.h中添加#import "FlutterPluginRegistrant,h"也试了,都是报错的。

2. Flutter的Frameworks为空

找不到FlutterPluginRegistrant不可能吧。在Pods的Development Pods中找到FlutterPluginRegistant,在的。

bug2

那为啥找不到呢。 尝试着把import FlutterPluginRegistrant删除吧。看看会不会有啥报错。果然报错来了,找不到#import <Flutter/Flutter.h>。这真的是一环扣一环啊。在上图中,可以清晰的看到Flutter中的Frameworks空空如也。是不是这个问题啊,是吗?

3. 怀疑Flutter加了新特性

打开将 Flutter module 集成到 iOS 项目看看吧,不出意外的话,一定是Flutter整了个啥了。

Flutter3.3新

新增了

post_install do |installer|
  flutter_post_install(installer) if defined?(flutter_post_install)
end

大概率是这个原因了。将这句话,加入到Podfile的最下面,然后进行pod install

三. 逼近真相

1. 找不到targets

在这个报错前,有一些其他的错误。(这些应该是我环境导致的,升级ruby和cocoapods后消失)

targets

podhelper.rb中,找不到targets。这个看起来好眼熟啊。记得之前在添加IPHONEOS_DEPLOYMENT_TARGETEXCLUDED_ARCHS[sdk=iphonesimulator*时,也一样用到了。

post_install do |installer|
  flutter_post_install(installer) if defined?(flutter_post_install)
  
  installer.pod_target_subprojects.flat_map { |p| p.targets }.each do |target|
    target.build_configurations.each do |c|
      c.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
      c.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
    end
  end
end

那是不是可以如法炮制,干起来。

2. 修改podhelper.rb

找到报错的地方

podhelper.rb

installer.pods_project.targets.each do |target|替换为installer.pod_target_subprojects.flat_map { |p| p.targets }.each **do** |target|.

回到项目目录中,执行pod install。报错消失了。

3. 成功

一般就能正常debug和打包了。

如果碰到二般,那还是不行。那只能拿出杀手锏:

第一步. 清缓存

(1)shift + commond + k 清理builder文件。 (2)清理DerivedData文件夹。

第二步. 重装pod

Podfile.lockPods这2个文件删除。再执行一次pod install


成功了,又没完全成功。正常运行到手机上了,可看着Xcode红红的报错,真的是表示很遗憾,这个锅不背。

遗憾

四. 题外

开始怀疑是cocoapods不是最新版本,因为之前碰到过。也许是ruby不是最新版本呢。

最后通过升级ruby,重新安装cocoapods

sudo gem install  -n /usr/local/bin cocoapods

pod引起的问题消失。