升级第三方库不可怕,可怕的是附送bug
有bug不可怕,可怕的是第一个吃螃蟹
第一个也不可怕,可怕的是大家都不分享
一、 升级Flutter3.3
太难得了,等了一个半月终于更新了,太期待能有新的性能提升,新的特性加入。使得能有更好的体验,更棒的开发效率。想要的有(1)Android Studio的自动完成,更加智能。(现在每次提示的,都不是我想要的)(2)页面的动画更加的流畅。(很多时间都是没有动画,感觉起来就是H5)(3)性能的优化。(More and More)
第一时间更新到3.3.0,迫不及待的那种。开发(Android开发,然后适配下iOS),一切都是那么地Nice。当沾沾自喜没有附送新bug时,打包iOS提测却一直都是报错,报错的原因有了。但是这个错误好像是有提示,又好像没有。(打包2天才成功,所以值得我记录一下)
之后七天又发布了3.3.1,这个周期是正常合理了。可我有点不敢升级了。
二、 碰到了BUG
开始适配iOS的时候,build都是失败的,一直在报错。
1. 找不到FlutterPluginRegistrant
pod install
都是正常的。为啥突然就找不到了FlutterPluginRegistrant
,之前一直都是好的。在swift中 import FlutterPluginRegistrant
也试了,在xx-Bridging-Header.h
中添加#import "FlutterPluginRegistrant,h"
也试了,都是报错的。
2. Flutter的Frameworks为空
找不到FlutterPluginRegistrant
不可能吧。在Pods的Development Pods中找到FlutterPluginRegistant,在的。
那为啥找不到呢。 尝试着把import FlutterPluginRegistrant
删除吧。看看会不会有啥报错。果然报错来了,找不到#import <Flutter/Flutter.h>
。这真的是一环扣一环啊。在上图中,可以清晰的看到Flutter
中的Frameworks
空空如也。是不是这个问题啊,是吗?
3. 怀疑Flutter加了新特性
打开将 Flutter module 集成到 iOS 项目看看吧,不出意外的话,一定是Flutter整了个啥了。
新增了
post_install do |installer|
flutter_post_install(installer) if defined?(flutter_post_install)
end
大概率是这个原因了。将这句话,加入到Podfile的最下面,然后进行pod install
。
三. 逼近真相
1. 找不到targets
在这个报错前,有一些其他的错误。(这些应该是我环境导致的,升级ruby和cocoapods后消失)
在podhelper.rb
中,找不到targets。这个看起来好眼熟啊。记得之前在添加IPHONEOS_DEPLOYMENT_TARGET
和EXCLUDED_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
找到报错的地方
将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.lock
和Pods
这2个文件删除。再执行一次pod install
。
成功了,又没完全成功。正常运行到手机上了,可看着Xcode红红的报错,真的是表示很遗憾,这个锅不背。
四. 题外
开始怀疑是cocoapods
不是最新版本,因为之前碰到过。也许是ruby
不是最新版本呢。
最后通过升级ruby,重新安装cocoapods
sudo gem install -n /usr/local/bin cocoapods
pod
引起的问题消失。