💻

[Flutter] flutter_twitterがiOS向けのビルドでエラーになった

2020/07/09に公開

FlutterでTwitterアカウントへのログインを実装する場合、flutter_twitter がよく使われているのかなと思います。

今回初めて使ってみたところ、想定外のエラーでiOS向けのビルドが失敗してちょっとだけハマったので、備忘録を兼ねて記事にしておきます。

エラー再現手順

公式のとおり pubspec.yamlflutter_twitter: ^1.1.3 を追加して、 flutter pub get して、 flutter run を実行するなどしてiOS向けにビルドしようとすると、エラーが発生します。

エラー内容

エラーの全文は以下のような内容です。

$ flutter run
Launching lib/main.dart on iPhone SE (2nd generation) in debug mode...
Running pod install...                                              2.2s
CocoaPods' output:
↳
      Preparing

    Analyzing dependencies

    Inspecting targets to integrate
      Using `ARCHS` setting to build architectures of target `Pods-Runner`: (``)

    Fetching external sources
    -> Fetching podspec for `Flutter` from `Flutter`
    -> Fetching podspec for `flutter_twitter` from `.symlinks/plugins/flutter_twitter/ios`

    Resolving dependencies of `Podfile`
      CDN: trunk Relative path: CocoaPods-version.yml exists! Returning local because checking is only perfomed in repo update
    [!] CocoaPods could not find compatible versions for pod "flutter_twitter":
      In Podfile:
        flutter_twitter (from `.symlinks/plugins/flutter_twitter/ios`)

    Specs satisfying the `flutter_twitter (from `.symlinks/plugins/flutter_twitter/ios`)` dependency were found, but they required a higher minimum deployment target.

    /path/to/gem/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:328:in `raise_error_unless_state'
    /path/to/gem/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:310:in `block in unwind_for_conflict'
    /path/to/gem/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:308:in `tap'
    /path/to/gem/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:308:in `unwind_for_conflict'
    /path/to/gem/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:684:in `attempt_to_activate'
    /path/to/gem/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:254:in `process_topmost_state'
    /path/to/gem/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:182:in `resolve'
    /path/to/gem/gems/molinillo-0.6.6/lib/molinillo/resolver.rb:43:in `resolve'
    /path/to/gem/gems/cocoapods-1.9.3/lib/cocoapods/resolver.rb:94:in `resolve'
    /path/to/gem/gems/cocoapods-1.9.3/lib/cocoapods/installer/analyzer.rb:1065:in `block in resolve_dependencies'
    /path/to/gem/gems/cocoapods-1.9.3/lib/cocoapods/user_interface.rb:64:in `section'
    /path/to/gem/gems/cocoapods-1.9.3/lib/cocoapods/installer/analyzer.rb:1063:in `resolve_dependencies'
    /path/to/gem/gems/cocoapods-1.9.3/lib/cocoapods/installer/analyzer.rb:124:in `analyze'
    /path/to/gem/gems/cocoapods-1.9.3/lib/cocoapods/installer.rb:410:in `analyze'
    /path/to/gem/gems/cocoapods-1.9.3/lib/cocoapods/installer.rb:235:in `block in resolve_dependencies'
    /path/to/gem/gems/cocoapods-1.9.3/lib/cocoapods/user_interface.rb:64:in `section'
    /path/to/gem/gems/cocoapods-1.9.3/lib/cocoapods/installer.rb:234:in `resolve_dependencies'
    /path/to/gem/gems/cocoapods-1.9.3/lib/cocoapods/installer.rb:156:in `install!'
    /path/to/gem/gems/cocoapods-1.9.3/lib/cocoapods/command/install.rb:52:in `run'
    /path/to/gem/gems/claide-1.0.3/lib/claide/command.rb:334:in `run'
    /path/to/gem/gems/cocoapods-1.9.3/lib/cocoapods/command.rb:52:in `run'
    /path/to/gem/gems/cocoapods-1.9.3/bin/pod:55:in `<top (required)>'
    /path/to/gem/bin/pod:23:in `load'
    /path/to/gem/bin/pod:23:in `<main>'

Error output from CocoaPods:
↳
    /path/to/gem/gems/cocoapods-core-1.9.3/lib/cocoapods-core/cdn_source.rb:342: warning: URI.escape is obsolete

    [!] Automatically assigning platform `iOS` with version `8.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`.

Error running pod install
Error launching application on iPhone SE (2nd generation).

重要なところだけ抜き出すと、

    [!] CocoaPods could not find compatible versions for pod "flutter_twitter":
      In Podfile:
        flutter_twitter (from `.symlinks/plugins/flutter_twitter/ios`)

    Specs satisfying the `flutter_twitter (from `.symlinks/plugins/flutter_twitter/ios`)` dependency were found, but they required a higher minimum deployment target.
    [!] Automatically assigning platform `iOS` with version `8.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`.

この辺りでしょう。

解決方法

先ほどのエラーを読んでみると、

  • CocoaPodsで、 flutter_twitter というpodについて互換性を満たすバージョンが見つからなかった
  • flutter_twitter 自体は見つかったけど、より高い minimum deployment target を要求しているためインストールできなかった
  • ちなみに、対象の Runner においてプラットフォームが指定されていなかったので、 iOS8.0 を自動で適用してある。必要なら Podfile でプラットフォームを指定してね

的なことが書かれています。

エラーメッセージをググると このissue が見つかりますが、その中で このコメント

So I was looking at the code and they ask for a minimun deployment target of iOS 10.1...
If you set the target to 10.1 it works fine!

と言っていて、どうやら flutter_twitter がiOSの10.1以上に依存したコードを持っているので、 Podfile でプラットフォームを指定しないとデフォルトでi0S 8.0が設定されてしまって依存が解決できないということのようです。

というわけで、 ios/Runner/Podfile の2行目をコメントインして 10.1 を指定してあげることで解決します。

  # Uncomment this line to define a global platform for your project
- # platform :ios, '9.0'
+ platform :ios, '10.1'
$ flutter run
Launching lib/main.dart on iPhone SE (2nd generation) in debug mode...
Running pod install...                                              2.4s
Running Xcode build...
 └─Compiling, linking and signing...                        14.1s
Xcode build done.                                           25.1s
Syncing files to device iPhone SE (2nd generation)...              126ms

Flutter run key commands.
r Hot reload. 🔥🔥🔥
R Hot restart.
h Repeat this help message.
d Detach (terminate "flutter run" but leave application running).
c Clear the screen
q Quit (terminate the application on the device).
An Observatory debugger and profiler on iPhone SE (2nd generation) is available at: http://127.0.0.1:53114/GjSvrha2iU0=/

このとおり、無事解決できました🙌

ちなみに、軽くコードを追ってみたのですが、iOS開発歴たった数日の自分では力及ばず、具体的にどの箇所がiOS 10.1に依存しているコードなのか分かりませんでした😓が、プラットフォームのバージョンを変えて何度か実験してみたところ、確かに 10.0 ではエラーになるけど 10.1 なら大丈夫だったので、 10.1 以上に依存しているということのようです。

詳しい方いらっしゃいましたらぜひ DM とかで教えていただけると嬉しいです😭

GitHubで編集を提案

Discussion