找不到Flutter插件`geolocator-Swift.h`文件

Mau*_*kom 5 ios flutter flutter-plugin

我创建了一个小的Flutter插件,可以用来监视Flutter应用程序中的位置变化(来源:https://github.com/baseflowit/flutter-geolocator).在使用作为项目结构一部分的示例项目(由Flutter CLI生成)进行大量测试之后,我们决定发布该插件以使其可供全世界使用.

现在我们收到一些反馈,当您将在线Dart Packages repo中的软件包包含到Flutter App中时,iOS版本不会编译并返回以下异常:

/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
Run Code Online (Sandbox Code Playgroud)

在调试模式下运行Flutter App时会发生此错误,但在使用iOS包时也会发生此错误flutter build ios --release.

我有点迷失这个错误的地方,因为example作为Geolocator项目一部分的应用程序没有任何问题.我知道该geolocator/geolocator-Swift.h文件是自动生成的,所以对我而言,文件似乎不会在最终的Dart包中结束.要运行最终的Dart包,我运行以下命令:

flutter packages pub publish

这是输出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)
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

小智 8

您转到Ios / Podfile添加以下行:

use_frameworks! # required by Geolocator
Run Code Online (Sandbox Code Playgroud)

像下面

准备符号链接文件夹。我们使用符号链接来避免Podfile.lock引用开发人员计算机上的绝对路径。

use_frameworks! # required by Geolocator
system('rm -rf .symlinks')
system('mkdir -p .symlinks/plugins')
Run Code Online (Sandbox Code Playgroud)

在此之后添加

config.build_settings['SWIFT_VERSION'] = '4.2'
Run Code Online (Sandbox Code Playgroud)

如下所示:

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
Run Code Online (Sandbox Code Playgroud)


小智 6

由于插件是使用Swift编写的,因此消费的Flutter应用程序应该基于Swift项目模板:

$ flutter create -i swift my_app
Run Code Online (Sandbox Code Playgroud)

添加geolocator:到iOS pubspec.yaml并构建my_app适用于我使用最新的Flutter测试版.

[?] Flutter (Channel beta, v0.5.1, on Mac OS X 10.13.5 17F77, locale en-US)
Run Code Online (Sandbox Code Playgroud)

  • 如果您已经创建了应用程序而未指定`-i swift`参数,那么需要更改哪些才能使其运行? (13认同)