Flutter-geolocator: 对于iOS,构建失败:找不到'geolocator / geolocator-Swift.h'文件

创建于 2018-06-26  ·  12评论  ·  资料来源: Baseflow/flutter-geolocator

运行flutter build ios --release:

===具有配置版本的PROJECT POD的内置目标firebase_messaging ===
/ Users / * * / development / flutter / .pub-cache / hosted / pub.dartlang.org / geolocator-0.0.1 / ios / Classes / GeolocatorPlugin.m:2:9:致命错误:'geolocator / geolocator-Swift .h'档案未找到

进口

我的医生输出:
医生摘要(要查看所有详细信息,请运行flutter doctor -v):
[✓] Flutter(在Mac OS X 10.13.3 17D102上为Channel dev,v0.5.5,语言环境为pt-PT)
[✗] Android工具链-为Android设备开发
无法找到Android SDK。
从以下位置安装Android Studio: https
首次启动时,它将帮助您安装Android SDK组件。
(或访问https://flutter.io/setup/#android-setup了解详细说明)。
如果Android SDK已安装到自定义位置,请将$ ANDROID_HOME设置到该位置。
[✓] iOS工具链-为iOS设备开发(Xcode 9.2)
[✗] Android Studio(未安装)
[!] VS代码(1.14.2版)
[!]已连接的设备
! 没有可用的设备

最有用的评论

@mvanbeusekom只是在一个干净的新创建的flutter应用程序中运行了一些测试-这是事实-当“ use_frameworks!”出现时! 不存在,构建将失败。

另外,只是将构建版本上传到了应用商店(仍然是Beta版),但一切进展顺利。
image

AFAIK,至少对我来说,问题已解决。

所有12条评论

@ manuelgomes2非常感谢您的帮助。

我们分析了该问题,并能够重现此问题,并正在努力进行修复(请参阅PR#18)

与Google联系后, @ manuelgomes2似乎当前使用由Objective-C(默认)使用Swift插件生成的Flutter应用程序存在问题。 另请参阅我收到的有关堆栈溢出问题的反馈。

现在的解决方法是生成您的应用以在iOS上使用Swift (例如,使用以下Flutter CLI命令flutter create -i swift my_app ,注意-i swift开关)。 但是,我必须警告您,这会在应用程序大小上产生大量开销。

同时,我们将致力于将插件从Swift转换为Objective-C,这样就不需要上述解决方法,并且也不会对应用程序的大小产生负面影响。

谢谢您的时间,但是“ flutter create -i swift my_app”不是解决方案-我从一开始就使用“ -i swift”创建了ios应用程序,但是问题仍然存在...

奇怪的是,当我在XCode中打开GeneratedPluginRegistrant.m时,您的插件会以与所有其他插件不同的颜色(紫色)出现,并且是唯一一个名称不以“ FLT”开头的插件-对不起,但是您知道为什么吗? 如果您在XCode中打开此文件,对您来说看起来是否一样?

谢谢你。

(注意,在屏幕截图中):
image

@mvanbeusekom另一个更新,我终于设法构建了该应用程序:在我的podfile上注释了以下行:
use_frameworks!
取消注释该行,然后使用您的插件编译应用程序。 现在该应用程序在启动时崩溃,但我将对此进行调查(此应用程序可能需要一些设置才能在ios上使用定位服务)
希望这可以帮助。

@mvanbeusekom只是在一个干净的新创建的flutter应用程序中运行了一些测试-这是事实-当“ use_frameworks!”出现时! 不存在,构建将失败。

另外,只是将构建版本上传到了应用商店(仍然是Beta版),但一切进展顺利。
image

AFAIK,至少对我来说,问题已解决。

@ manuelgomes2是个好消息,非常感谢您的反馈。

可以肯定的是,您的应用在启动时崩溃的可能原因与以下事实有关: Info.plist文件中缺少使用基于位置的服务的权限(添加权限的文档为在README.md文件中)。

经过一番谷歌搜索后,我发现以下线程可能会有所帮助(我还将其添加到我们的自述文件中): https :

你好!

看到此问题,我发现@ manuelgomes2最初使用的是firebase_messaginggeolocator ,而他遇到了问题。

后来,他创建了一个显然没有firebase_messaging的新鲜应用程序,并且能够构建它。

曼努埃尔(Manuel),您是否可以在同一个项目中将它们混合在一起?

目前,这是我的问题。 显然,使用Firebase插件时,不能将它们与使用Swift代码的另一插件结合使用,因为FB需要use_frameworks! 出来了,Swift代码插件需要use_frameworks! 将在! :-/

(我实际上希望这是错误的)

您提到的链接SO问题上的@ffeu遇到以下错误:

The “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported value for targets which use Swift. This setting can be set in the build settings editor.

对我来说,这似乎需要通过添加以下行来在Podfile指定Swift版本:

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

它应该是post_install块的一部分,如下所示:

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.1'
    end
  end
end

由于尚未测试,因此不确定是否可以使用,但值得一试。 请让我知道这可不可以帮你。

PS我也将以上内容作为对堆栈溢出的解答。

嗨,莫里斯,它成功了!! \ o /

我之前已经测试过,但仅使用“ 3.2”! 它适用于4.0和4.1。

非常感谢!

我使用所有3.2、4.0、4.1和4.2进行了测试,但是XCode仍然显示错误
'geolocator/geolocator-Swift.h' file not found 这是我文件中的代码

#import "GeolocatorPlugin.h"
#import <geolocator/geolocator-Swift.h> // this line causes error

<strong i="8">@implementation</strong> GeolocatorPlugin
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
  [SwiftGeolocatorPlugin registerWithRegistrar:registrar];
}
<strong i="9">@end</strong>

谁能指导我?

我认为这是您的Xcode版本。

检查此SO问题。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

prasant10050 picture prasant10050  ·  6评论

lqmminh picture lqmminh  ·  6评论

BigWillieStyle picture BigWillieStyle  ·  6评论

devalp-pro picture devalp-pro  ·  3评论

dark-chocolate picture dark-chocolate  ·  3评论