Flutter plugin `geolocator-Swift.h` file not found

我与影子孤独终老i 提交于 2020-06-24 12:33:08

问题


I have created a small Flutter plugin which can be used to monitor location changes in you Flutter application (source: https://github.com/baseflowit/flutter-geolocator). After extensive testing using the example project that is part of the project structure (as generated by the Flutter CLI) we decided to publish the plugin to make it available to the world.

Now we received some feedback that when you include the package from the online Dart Packages repo into your Flutter App, the iOS version doesn't compile and returns the following exception:

/Users/maurits/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/geolocator-0.0.2/ios/Classes/GeolocatorPlugin.m:2:9:
fatal error: 'geolocator/geolocator-Swift.h' file not found

This error occurs when running the Flutter App in debug mode, but also when making a iOS package using flutter build ios --release.

I am a bit lost where this error comes from since the example app that is part of the Geolocator project works without any problems. I know the geolocator/geolocator-Swift.h file is autogenerated, so to me it looks like that the file doesn't end up in the final Dart Package. To run the final Dart Package I ran the following command:

flutter packages pub publish

Here is the output of flutter doctor -v:

[✓] Flutter (Channel beta, v0.5.1, on Mac OS X 10.13.5 17F77, locale en-NL)
    • Flutter version 0.5.1 at /Users/maurits/Developer/flutter
    • Framework revision c7ea3ca377 (4 weeks ago), 2018-05-29 21:07:33 +0200
    • Engine revision 1ed25ca7b7
    • Dart version 2.0.0-dev.58.0.flutter-f981f09760

[✓] Android toolchain - develop for Android devices (Android SDK 28.0.0)
    • Android SDK at /Users/maurits/Library/Android/sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.0
    • ANDROID_HOME = /Users/maurits/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b01)
    • All Android licenses accepted.

[✓] iOS toolchain - develop for iOS devices (Xcode 9.4.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 9.4.1, Build version 9F2000
    • ios-deploy 1.9.2
    • CocoaPods version 1.5.3

[✓] Android Studio (version 3.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 25.0.1
    • Dart plugin version 173.4700
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b01)

[!] VS Code (version 1.24.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension not installed; install from
      https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter

[✓] Connected devices (1 available)
    • iPhone X • 69C349CF-81E1-47E8-B35A-A149D885CE43 • ios • iOS 11.4 (simulator)

Any help would be greatly appreciated.


回答1:


Since the plugin is written using Swift, the consuming Flutter app should be based on the Swift project template:

$ flutter create -i swift my_app

Adding geolocator: to the pubspec.yaml and building my_app for iOS then works for me using the latest Flutter beta.

[✓] Flutter (Channel beta, v0.5.1, on Mac OS X 10.13.5 17F77, locale en-US)



回答2:


you go to Ios/Podfile add the following line:

use_frameworks! # required by Geolocator

Like the following

Prepare symlinks folder. We use symlinks to avoid having Podfile.lock referring to absolute paths on developers' machines.

use_frameworks! # required by Geolocator
system('rm -rf .symlinks')
system('mkdir -p .symlinks/plugins')

After this add

config.build_settings['SWIFT_VERSION'] = '4.2'

Like the following:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
      config.build_settings['SWIFT_VERSION'] = '4.2' # added this
    end
  end
end


来源:https://stackoverflow.com/questions/51056579/flutter-plugin-geolocator-swift-h-file-not-found

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!