🫠

チーム開発だから勝手にiosのバージョン変えられない。どうしよう。。

2024/07/24に公開

チーム開発で、flutterSDKのバージョンとpodのバージョンの互換性(+Firebaseのバージョンなどなど)が悪くなってしまったみたいで変えていいのか??と思ったが、PRする時に戻せばいい、らしい(笑)
ということで一連の流れをまとめました。

CocoaPodsエラーの原因と対策の流れ

以下に、エラーの原因とその対策の流れをまとめます。

エラーの原因

  1. ターゲットのプラットフォームが指定されていない:

    • CocoaPodsが自動的に最新のiOSバージョンを使用するため、バージョンの不一致が発生。
    • エラーメッセージ:
      [!] Automatically assigning platform `iOS` with version `15.0` on target `Runner` because no
      platform was specified. Please specify a platform for this target in your Podfile. See
      `https://guides.cocoapods.org/syntax/podfile.html#platform`.
      
  2. CocoaPodsのスペックリポジトリが古い:

    • 依存関係が解決できない。
    • エラーメッセージ:
      Error: CocoaPods's specs repository is too out-of-date to satisfy dependencies.
      To update the CocoaPods specs, run:
        pod repo update
      
  3. Firebaseライブラリのバージョンの不一致:

    • 異なるFirebaseライブラリ間で互換性の問題が発生し、依存関係が解決できない。

    • エラーメッセージ:

      [!] CocoaPods could not find compatible versions for pod "Firebase/Auth":
        In snapshot (Podfile.lock):
          Firebase/Auth (= 10.27.0)
      
        In Podfile:
          firebase_auth (from `.symlinks/plugins/firebase_auth/ios`) was resolved to 5.1.2, which depends on
            Firebase/Auth (= 10.28.0)
      
      [!] CocoaPods could not find compatible versions for pod "FirebaseFirestore":
        In snapshot (Podfile.lock):
          FirebaseFirestore (from `https://github.com/invertase/firestore-ios-sdk-frameworks.git`, tag `10.27.0`)
      
        In Podfile:
          FirebaseFirestore (from `https://github.com/invertase/firestore-ios-sdk-frameworks.git`, tag `10.27.0`)
      
          cloud_firestore (from `.symlinks/plugins/cloud_firestore/ios`) was resolved to 5.1.0, which depends on
            Firebase/Firestore (= 10.28.0) was resolved to 10.28.0, which depends on
              FirebaseFirestore (~> 10.28.0)
      
      [!] CocoaPods could not find compatible versions for pod "FirebaseCore":
        In Podfile:
          FirebaseFirestore (from `https://github.com/invertase/firestore-ios-sdk-frameworks.git`, tag `10.27.0`) was resolved to 10.27.0, which depends on
            FirebaseFirestoreBinary (= 10.27.0) was resolved to 10.27.0, which depends on
              FirebaseCore (= 10.27.0)
      
          firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`) was resolved to 11.2.0, which depends on
            Firebase/Analytics (= 10.28.0) was resolved to 10.28.0, which depends on
              Firebase/Core (= 10.28.0) was resolved to 10.28.0, which depends on
                FirebaseAnalytics (~> 10.28.0) was resolved to 10.28.0, which depends on
                  FirebaseCore (~> 10.0)
      
          firebase_core (from `.symlinks/plugins/firebase_core/ios`) was resolved to 3.2.0, which depends on
            Firebase/CoreOnly (= 10.28.0) was resolved to 10.28.0, which depends on
              FirebaseCore (= 10.28.0)
      

対策の流れ

  1. ターゲットのプラットフォームを指定する

    platform :ios, '15.0'
    
  2. CocoaPodsのリポジトリを更新

    pod repo update
    
  3. Podfileを編集してFirebaseライブラリのバージョンを統一する

    platform :ios, '15.0'
    
    target 'Runner' do
      use_frameworks!
      use_modular_headers!
    
      # Firebaseライブラリのバージョンを統一
      pod 'Firebase/Analytics', '10.28.0'
      pod 'Firebase/Auth', '10.28.0'
      pod 'Firebase/Firestore', '10.28.0'
      pod 'Firebase/Storage', '10.28.0'
      pod 'Firebase/Core', '10.28.0'
    
      pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => '10.28.0'
    
      flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
    end
    
    target 'RunnerTests' do
      inherit! :search_paths
    end
    
  4. Podfile.lockの削除

    rm Podfile.lock
    
  5. CocoaPodsのキャッシュをクリア

    pod cache clean --all
    
  6. Podのインストール

    pod install
    

実施手順の具体例

  1. プロジェクトのルートディレクトリに移動

    cd path_to_your_flutter_project/ios
    
  2. Podfile.lockの削除

    rm Podfile.lock
    
  3. CocoaPodsのキャッシュをクリア

    pod cache clean --all
    
  4. CocoaPodsのリポジトリを更新

    pod repo update
    
  5. Podfileの編集

    nano Podfile
    # 上記の内容で保存
    
  6. Podのインストール

    pod install
    
  7. 依存関係の確認

    flutter doctor
    
  8. アプリのビルド

    flutter run
    

これでエラーが解消され、依存関係の問題が解決されました。この記事を参考にして、同様の問題が発生した場合に対処してください。何か他に質問があればお知らせください。

Discussion