[Flutter] flutter_twitterがiOS向けのビルドでエラーになった
FlutterでTwitterアカウントへのログインを実装する場合、flutter_twitter がよく使われているのかなと思います。
今回初めて使ってみたところ、想定外のエラーでiOS向けのビルドが失敗してちょっとだけハマったので、備忘録を兼ねて記事にしておきます。
エラー再現手順
公式のとおり pubspec.yaml
に flutter_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
においてプラットフォームが指定されていなかったので、iOS
の8.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 とかで教えていただけると嬉しいです😭
Discussion