Deployment target versions 問題(Flutter)

Steven_唐
Aug 24, 2022

最近寫Flutter遇到一個奇怪的問題,有天打開AndroidStudio 開始執行專案出現好幾行Deployment target的問題,使得專案無法開啟。

此時想起這麼一段話,遇到任何問題都先執行flutter clean就對了。嗯…大部分情況下都挺有用的,但這次完全行不通。接著Google找到了這麼一個解法(好像也只有這個):

post_install do |installer|  installer.pods_project.targets.each do |target|    target.build_configurations.each do |config|    if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < 9.0config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0'       end    end  end end

結果反而出現其他更麻煩的錯誤(有試著解了一次然後又回到原地QQ)

為了解決這奇怪的問題花了兩天的時間終於研究出來了!!剛好同事也遇到這問題,因此剛好也解救了同事XD

首先這問題是出現在執行iOS模擬器發生,雖然Android也有看過類似的狀況,不過並不像在iOS一樣在沒有動任何設定的情況下就突然直接給你這些報錯,而且Android這種狀況只要解一次就解決了,iOS則是可能某天又有某個套件又給你報這錯誤QQ。(尤其是在pubspec.yaml執行pub get後較容易發生)

為什麼出現這問題?

目前研究下來的結論是Flutter有些套件到了Xcode之後需要有個媒介來執行,這媒介就是CocoaPods,Flutter會依功能將套件對應到CocoaPods相同功能或相似功能的套件,所以一個Flutter套件到了CocoaPods上可能會轉成2~4個,接著透過這些套件發揮出原本的功能。

那麼要如何解決呢?

通常出現這狀況快的話十分鐘內解掉,慢的話(當天運氣比較差X)可能要半天,遇到這問題我通常會先進行下面流程。

  1. 執行flutter clean。
  2. 刪除flutter專案底下iOS資料夾內的Podfile & Podfile.lock。
  3. 在pubspec.yaml執行pub get,執行完畢後重新生成Podfile檔案,點擊Podfile檔將iOS版本前的井字號刪除掉並將版號改成10.0以上(目前大部分看別人的專案大部分都是設為iOS 10.0)
  4. 執行pod install
# Uncomment this line to define a global platform for your project
platform :ios, '10.0'

大部分運氣比較好到這邊應該就可以順利執行專案了,如果不行那麼就進行下一個步驟吧~

升級套件版本

可以到pub.dev搜尋查看目前裝的套件較新的版本(不見得要最新版本),也可以在Changelog查看每個版本改了哪些東西。

也有看到另一種做法是降低套件版本。

第一次遇到這問題時,當時專案的Flutter版本為2.5.3,後來有升級2.10.5。不是很確定這是否也是造成報錯的原因之一,專案Flutter版本如果較低或許也可以升級看看。

先來看看Flutter專案安裝的套件:

Runner上的套件:

可以發現有些套件名稱到了 Runner沒什麼改變(如Firebase),因此看到該名稱套件報錯就知道升級該套件版本就可以了。這裡建議把這些套件先全部升級然後重新執行一次專案,這樣方便查看還有哪些套件是還會報錯的。

重新執行一次報錯後(如果有)應該會看到一些不太懂它是做什麼的套件,舉例來說像是BoringSSL-GRPC,我們可以透過Cocoapods查看這套件的功能與介紹。

看起來跟Google Firebase有相關

最後是透過刪去法發現該套件與cloud_firestore有關,將cloud_firestore註解掉後另外兩個報錯的套件gRPC-core、gRPC-c+也消失了。

基本上透過Cocoapods提供的資訊可以迅速地知道是哪個套件需要升級或變動。

FMDB & OrderedSet 報錯

解決其他報錯後就剩下這兩個鬼東西怎麼找怎麼解就是解不掉,卡在這超級久的QQ。最後發現直接在Pods裏修改版本號就好了。

有在這裡嘗試過修改其他報錯套件的版本號,但是會報錯。

直接修改它!!

目前這個版本號是 iOS8.0,然而專案是可以正常啟動的(哪天它心情不好就要調整了)

目前每次到這個步驟調整完後專案都可以正常執行了。

結尾

以上是碰到Deployment target versions報錯自己研究出來的解法,不見得是最好的解法 or 正確的解法。老實說還不是對Flutter與 CocoaPods之間的關係很瞭解,或許是有某些設定沒做好或等等原因導致這問題出現。總之,研究Flutter的路還有很長一段要走~

--

--