Flutter-geolocator: geolocator.getCurrentPositionは、IOSで位置を返すのに長い時間がかかります

作成日 2019年08月30日  ·  72コメント  ·  ソース: Baseflow/flutter-geolocator

getCurrentPositionはAndroidでは非常に正常に機能していますが、IOSでは実行に非常に時間がかかりました。 確認できますか? ありがとうございました
プラットホーム:

  • [x]:iphone:iOS
  • []:robot:Android
ios bug duplicate

最も参考になるコメント

@babaosoftwareご尽力いただきありがとうございます。 私は同じ問題をテストし、あなたがしたのと同じ結論に達しました。 私たちはこの問題に取り組み、この問題の解決策があれば投稿し続けます。

全てのコメント72件

同じ問題が発生しています。 これまでのところ速度低下の原因は見つかりませんでしたが、私の場合の一時的な回避策として最後の既知の位置を使用しています...

Info.plistに3つのキーがあるかどうかを確認します
NSLocationAlwaysUsageDescription
あなたの説明
NSLocationWhenInUseUsageDescription
あなたの説明
NSLocationAlwaysAndWhenInUseUsageDescription
あなたの説明

ここでも同じ問題があります。 geolocatorプラグインの4.0.3バージョンにダウングレードする必要がありました。 それ以降のすべてのバージョンは、iOSでの応答が非常に遅くなります。
はい、 @ paulobreim Info.plistに必要な文字列がすべてあります。そうしないと、まったく応答しません。

現在地を取得するためにLocationプラグインを使用しています。 AndroidとIOSの両方で正常に動作します。

@ hungtran2492私もLocationプラグインを使用しています。これよりはるかに高速です。

@StijnWoerkom閉鎖の理由は何ですか? これは、Flutterのメインロケーションライブラリで開発者の問題を引き起こしている正当なバグです。

@ollydixon私はこの問題を複数のIOSデバイスでテストし、問題はコードよりもデバイスにあると結論付けました。 問題を再度開くことはできますが、この問題で問題が発生することはありません。

@StijnWoerkomは、4人のユーザーでライブアプリのデモを行うのに役立ち、すべてのモバイルで低速でした。 (すべてのiOS)。 シミュレーターは正常に動作するので、私にとっては少し恥ずかしかったです。それは非常に遅いデバイス上でのみです。

別のライブラリを使用しましたが、問題ありませんでした(Flutterの場所)。

バージョン4.0.3は問題なく動作します。 私は実際に自分のアプリでそのバージョンにダウングレードしました。 したがって、それはライブラリ自体にあるものでなければなりません。 さまざまなiPhoneでテストしましたが、一貫性があるので、デバイスではないかと思います。

@ollydixonお返事ありがとうございます。 デモに失敗してすみません。 私は問題を再開し、これをさらに調査します。 使用していたバージョンを教えてください。

@StijnWoerkom心配は

4.0.3以降のバージョンには問題があります。 したがって、5.0.0で導入されたものでなければなりません。

@babaosoftware 5.0.0バージョンでは、IOSバージョンをSwiftからObjective-Cに変換し、最終的なバイナリのサイズを大幅に削減し、他のObjective-Cベースのプラグインとの互換性の問題を解決しました。

@StijnWoerkom私は変換の必要性を引き起こしたと言って、誰かがそれを調べ始めるかもしれない場所へのヒントを与えています。

昨日、問題はバージョン5.0.0から始まったとおっしゃっていました。 このバージョンで追加したすべての機能を調べて、問題の原因を特定しています。

問題が実際に存在する場合は、問題を特定する代わりの方法を提案します。
geolocator.getCurrentPosition関数のみを使用して小さなプログラムを作成でき、誰でもこのプログラムをテストして実行時間を測定できます。
どう思いますか?

@paulobreim私は今夜​​(米国東部時間)まさにそのことをするつもりでした。 結果が出たらすぐに投稿します。

私は次のテストを行いました:
アプリ:
import'package:flutter / Foundation.dart ';
import'package:geolocator / geolocator.dart ';
void main(){
DateTime start = DateTime.now();
getCurrentPosition()。then((pos){
DateTime end = DateTime.now();
debugPrint( "time span = $ {end.difference(start).inMilliseconds} ms");
});
}
未来getCurrentPosition()async {
戻り値awaitGeolocator()。getCurrentPosition();
}

pubspec.yamlで私は持っています
geolocator:^ 4.0.3#アップグレードしないでください-起動時の応答が非常に遅いです。
最初のテストのために、そして
ジオロケーター:^ 5.1.4
2番目のテスト用。
私はiPhone6Sを使ってテストしましたが、新しいデバイスを使う前もそうだったので、デバイスが違いを生むとは思いません。
バージョン4.0.3の最初のテストでは、約100ミリ秒の応答時間が示されました。
バージョン5.1.4の2番目のテスト。 約10秒の応答時間を示しました-つまり、ミリ秒ではなく秒です
そこに行きます。

Motorola Z2 PlayとiPhoneでテストしようとしていますが、以下のエラーが発生し、どうすればよいかわかりません。

デバッグモードでx86用にビルドされたAndroidSDKでlib / main.dartを起動しています...
Gradleを初期化しています...
依存関係の解決...
Gradleタスク 'assembleDebug'を実行しています...

失敗:ビルドは例外で失敗しました。

  • 何が悪かったのか:
    タスク ':app:preDebugBuild'の実行に失敗しました。
    > Androidの依存関係 'androidx。 core:core 'には、コンパイル(1.0.0)クラスパスとランタイム(1.0.2)クラスパスのバージョンが異なります。 DependencyResolutionを介して同じバージョンを手動で設定する必要があります

geolocatorとの関係がないことは知っていますが、修正するかどうかはわかりません。

'androidx。 core:core 'は、コンパイル(1.0.0)クラスパスとランタイム(1.0.2)クラスパスのバージョンが異なります。

これをチェックして:
https://github.com/flutter/flutter/issues/27254

これが私のAndroidのテストです。
フローティングアクションボタンを入れて10回押しました

最初のテストジオロケーター:^ 4.0.3
デバッグモードのMotoZ2Playでlib / main.dartを起動しています...
Gradleを初期化しています...
依存関係の解決...
Gradleタスク 'assembleDebug'を実行しています...
build / app / outputs / apk / debug /app-debug.apkをビルドしました。
ファイルをデバイスMotoZ2Playに同期しています...
I /フラッター(11197):タイムスパン= 1006ミリ秒
I /フラッター(11197):タイムスパン= 1626ミリ秒
I /フラッター(11197):タイムスパン= 965ミリ秒
I /フラッター(11197):タイムスパン= 6024 ms
I /フラッター(11197):タイムスパン= 991 ms
I /フラッター(11197):タイムスパン= 971 ms
I /フラッター(11197):タイムスパン= 6022ミリ秒
I / zygote(11197):部分的なコードキャッシュ収集を行う、コード= 62KB、データ= 51KB
I / zygote(11197):コードキャッシュ収集後、コード= 62KB、データ= 51KB
I / zygote(11197):コードキャッシュ容量を256KBに増やします
I /フラッター(11197):タイムスパン= 7866 ms
I /フラッター(11197):タイムスパン= 940ミリ秒
I /フラッター(11197):タイムスパン= 6091 ms

2番目のテストジオロケーター:^ 5.1.4
デバッグモードのMotoZ2Playでlib / main.dartを起動しています...
Gradleを初期化しています...
依存関係の解決...
Gradleタスク 'assembleDebug'を実行しています...
build / app / outputs / apk / debug /app-debug.apkをビルドしました。
ファイルをデバイスMotoZ2Playに同期しています...
I /フラッター(11471):タイムスパン= 1043 ms
I /フラッター(11471):タイムスパン= 5927ミリ秒
I /フラッター(11471):タイムスパン= 8876ミリ秒
I /フラッター(11471):タイムスパン= 1052 ms
I /フラッター(11471):タイムスパン= 5987ミリ秒
I /フラッター(11471):タイムスパン= 6316ミリ秒
I /フラッター(11471):タイムスパン= 5948ミリ秒
I / zygote(11471):部分的なコードキャッシュ収集を行う、コード= 62KB、データ= 50KB
I / zygote(11471):コードキャッシュ収集後、コード= 62KB、データ= 50KB
I / zygote(11471):コードキャッシュ容量を256KBに増やします
I /フラッター(11471):タイムスパン= 934ミリ秒
I /フラッター(11471):タイムスパン= 6012 ms
I /フラッター(11471):タイムスパン= 954ミリ秒

3番目のテストジオロケーター:^ 5.1.4
(ジオロケーターでボタンを10回押すのを待つWHITOUT
デバッグモードのMotoZ2Playでlib / main.dartを起動しています...
Gradleを初期化しています...
依存関係の解決...
Gradleタスク 'assembleDebug'を実行しています...
build / app / outputs / apk / debug /app-debug.apkをビルドしました。
build / app / outputs / apk /app.apkをインストールしています...
ファイルをデバイスMotoZ2Playに同期しています...
I /フラッター(16122):タイムスパン= 1020ミリ秒
I /フラッター(16122):タイムスパン= 159 ms
I /フラッター(16122):タイムスパン= 584ミリ秒
I /フラッター(16122):タイムスパン= 544ミリ秒
I /フラッター(16122):タイムスパン= 99 ms
I /フラッター(16122):タイムスパン= 536ミリ秒
I /フラッター(16122):タイムスパン= 82ミリ秒
I / zygote(16122):部分的なコードキャッシュ収集を行う、コード= 62KB、データ= 50KB
I / zygote(16122):コードキャッシュ収集後、コード= 62KB、データ= 50KB
I / zygote(16122):コードキャッシュ容量を256KBに増やします
I /フラッター(16122):タイムスパン= 504ミリ秒
I /フラッター(16122):タイムスパン= 1381ミリ秒
I /フラッター(16122):タイムスパン= 946ミリ秒

私はAndroidで問題を自分でチェックしませんでしたが、タイトルが示すように、この問題はiOSで開かれました。 それにもかかわらず、あなたのテストはかなり一貫性のない結果を示しており、ジオロケーターの呼び出しを待たずに3番目のテストが何をするのかわかりません。 たぶん、アプリのコードを投稿することでそれが明らかになるでしょう。
いずれにせよ、私は今のところライブラリのバージョン4.0.3を使用しています。 実のところ、私はつい最近、アップルストアでアプリをリリースしました。 あなたはそれをチェックしたいかもしれません
http://apps.apple.com/us/app/apple-store/id1469322424

これがIOS12.4.4 iPhone6の私のテストです

最初のテストジオロケーター:^ 4.0.3
デバッグモードでiPhonePCBでlib / main.dartを起動しています...
開発者IDを使用したデバイス展開用のiOSアプリへの署名:「iPhone開発者:Paulo Breim(Y34R2HBJ59)」
ポッドインストールを実行しています...
Xcodeビルドを実行しています...
Xcodeのビルドが完了しました。 23,7秒
インストールと起動...
ファイルをデバイスiPhonePCBに同期しています...
フラッター:タイムスパン= 230 ms
フラッター:タイムスパン= 92 ms
フラッター:タイムスパン= 74 ms
フラッター:タイムスパン= 80 ms
フラッター:タイムスパン= 95 ms
フラッター:タイムスパン= 87 ms
フラッター:タイムスパン= 199 ms
フラッター:タイムスパン= 58ミリ秒
フラッター:タイムスパン= 73ミリ秒
フラッター:タイムスパン= 70 ms

2番目のテストジオロケーター:^ 5.1.4
デバッグモードでiPhonePCBでlib / main.dartを起動しています...
開発者IDを使用したデバイス展開用のiOSアプリへの署名:「iPhone開発者:Paulo Breim(Y34R2HBJ59)」
ポッドインストールを実行しています...
Xcodeビルドを実行しています...
Xcodeのビルドが完了しました。 22,6秒
インストールと起動...
ファイルをデバイスのiPhonePCBに同期しています...
フラッター:タイムスパン= 12383ミリ秒
フラッター:タイムスパン= 10033ミリ秒
フラッター:タイムスパン= 10027ミリ秒
フラッター:タイムスパン= 10026ミリ秒
フラッター:タイムスパン= 10031ミリ秒
フラッター:タイムスパン= 10029ミリ秒
フラッター:タイムスパン= 10032ミリ秒
フラッター:タイムスパン= 10032ミリ秒
フラッター:タイムスパン= 10028ミリ秒
フラッター:タイムスパン= 10029ミリ秒

babaosoftware、さらにテストが必要な場合はお知らせください

@paulobreimあなたの努力に感謝します。 どうやら私たちがずっと言ってきたことを確認し、結果は一貫しています。 5.0.0以降のバージョンのgeolocatorライブラリでは、iOSプラットフォームでgetCurrentPositionを呼び出すと、許容できない応答時間が約10秒になります。
Androidでの結果には一貫性がありませんが、応答時間が8秒を超えるものもあり、これも気になります。
@StijnWoerkomライブラリのアップグレードに何か問題があり、分離して修正するためにある程度の努力が必要であるという十分な証拠があると思います。

@babaosoftwareご尽力いただきありがとうございます。 私は同じ問題をテストし、あなたがしたのと同じ結論に達しました。 私たちはこの問題に取り組み、この問題の解決策があれば投稿し続けます。

最新バージョンのGeoLocatorを搭載したiOS13.1.3 iPhoneXRでも同じことが起こります。 現在位置を取得するのに8〜10秒かかります

iOSでgetPositionが遅い(たとえば、位置情報を取得するのに10秒以上かかる)のに問題がある場合は、前のスレッドで前述したように、この代替パッケージを使用できます。

https://github.com/Lyokone/flutterlocation

AndroidとiOSの両方で非常に高速に位置情報をロードします。 (<1秒)。

最新バージョンを使用しても同じラグが発生します。 バージョン4.0.3に固執することに関する問題/欠点はありますか?

@cieloに同意しリンク]をテストしましたが、速度の違いは明らかです。 ただし、このパッケージはより多くの機能を提供し、遅延のこのバグが修正されることを願っています(私にとっては一貫性がありません)。

私はまだこの遅さを経験していることを付け加えたいと思います。 エミュレーターでは正常に動作しますが、Physical Iphone 8Plusデバイスでは10秒以上かかります。

事実上、バージョン4.0.3はうまく機能します。 バージョン5.2.0の物理iOSデバイスでの私の経験は、解決の問題を4.0.3に下げることにより、デバイスの場所を見つけるのに非常に遅れました。

こんにちは、私はAndroidでこの問題を抱えています

私のコードはと同じくらい簡単です。 Position position = await _geoLocator.getCurrentPosition();

Google Pixel3Aを使用しています

私も :(
^ 5.1.5を使用しています
getCurrentPosition()は、AndroidとIOSの両方で非常に遅い

私も
^ 5.3.0を使用するiam
IOS 12.4 Iphone5s。

iOS13.4ベータ版iPhoneXRでも同じ問題があります
すべてのAndroidOSデバイスで正常に動作します。

同じ問題が引き続き発生しますが、仮想デバイスでは正常に機能しますが、物理デバイスでは10秒の遅延が発生します

私のiPhone7、iOS13.4で同じ問題が発生しています

iPhone7とiPhoneX、IOS13で同じ問題

こんにちは、実際のiPhone Xデバイス、iOS13で同じ問題が発生します

この問題のため、起動時間は10秒以上でしたが、4.0.3の動作に戻ります

ここでも同じですが、iPhone 5s iOS12.4です。

iPhone 6s iOS13.4でも

私もこの問題を経験しています。 iPhone 6s iOS 13.4

物理デバイス、iPhone 8 iOS13.4でも同じ問題が発生します。 getLastKnownLocationは正常に機能します。

+1

ここでも、iPhoneXsとiOS13.3で^5.3.1 Geolocatorのバージョンを使用しています。 私はそれを4.0.3ダウングレードしました、そしてそれは非常に速いです! 🚀

同じゆっくりとした結果で、IOSシミュレーターではそれは魅力のように機能します、そして私は実際の電話で試してみました、すべての異なるアドレスで約10秒かかります、私はいくつかの家を歩き回りました、そして最初はいつも遅いです、再試行するとそれはロードされます速い。

4.0.3も試しましたが、正常に動作していますが、4.0.3から^ 5.3.1まで多くの修正があります。 メインブランチでこれを修正する計画はありますか?

4.0.3は5.3.1ほど正確ではないことに気づきました

私もこれと同じ問題を抱えていました。 4.0.3にダウングレードすると、問題が解決しました。 それはiosシミュレーターではうまく機能しましたが、私の物理的なiosデバイス(iPhone SE 2nd Gen)では時代遅れになりました。

この問題はどのようにしてより多くの注目を集めていませんか? 確かに、これは本番レベルのプラグインを壊す問題です。 v4.0.3以降のライブ環境では使用できません。

ここでも、iPhone8を再現します。
5.3.1の実際のハードウェアでは、最初の取得は20秒以上です。
同じハードウェア、同じ場所、最初の取得は4.0.3で約2秒です。

同じゆっくりとした結果で、IOSシミュレーターではそれは魅力のように機能します、そして私は実際の電話で試してみました、すべての異なるアドレスで約10秒かかります、私はいくつかの家を歩き回りました、そして最初はいつも遅いです、再試行するとそれはロードされます速い。

ガイ私はシミュレーターとデバイスiOS(iPhone 6s-8)で最高の結果を得るために4.0.3バージョンを使用しました

同じ問題があり、バージョンをバックダウンする必要があり、すでにAndroidxにアップグレードしているため、4.0.3への移行は簡単ではありませんでした。 代わりに、フラッターロケーションプラグインをはるかに高速に使用しました。

他の人が言っているのと同様に、物理的なiOSデバイスでは最大10秒(ほぼドット)の遅延が見られますが、シミュレーターでは遅延は見られません。 この速度低下は、チーム全体の複数のデバイスで見られました。

新しいバージョンの修正を実装する意図はありますか?

精度を変えてみませんか? これは私のために働いた:
Geolocator()。getCurrentPosition(desiredAccuracy:LocationAccuracy.medium)を待つ

Geolocator()。getCurrentPosition(desiredAccuracy:LocationAccuracy.medium)を待つ
私のために働いた。

私は5.3.2+ 2にいて、このプラグインはロケーションプラグインよりもはるかに遅いことに気づきました。 ここでの推奨に基づいて、4.0.3にダウングレードし、速度が大幅に向上しました。

また、上記と同じ問題がありました。MacのSimulator v11.5で実行すると、これを書いている時点で、最新のGeoLocation v ^ 5.3.2 +2でも以下の修正が機能します。

Simulator IOSデバイスの場所は、デフォルトでは設定されていないため、例外が発生します。これは、上部のメニューバーをクリックして設定できます。

機能->場所->オプションを選択

また、実際のiOSデバイスでのパフォーマンスのため、4.03にダウングレードする必要がありました。

ここでも同じですが、非常に遅いです。

バージョン5.3.1を使用しても同じ問題が発生しました。
iPhone、iPadのほぼすべてのバージョンで場所を取得するのに約10秒かかりました。
LocationAccuracyを(最良から中程度に)変更すると、問題が解決するようです。

ここでも同じで、6S以降の複数のiPhoneでテストされています。バージョン5.3.2-位置を取得するのに5〜10秒かかります

ここでも同じiPhone8は場所を特定するのに5秒かかります

たぶん私の解決策はテキストに隠されていました:
LocationAccuracyを(最高から中程度に)変更したとき、遅延を1秒未満に短縮すると、応答が瞬時になることがありました(少なくともテストしたすべてのマシンで)。
「good」のLocationAccuracyは十分ではなかったことに注意してください。

iPhoneSEで現在の位置を取得するのに最大100秒(秒)かかります。 1秒もかからず、次に100までかかることもあります。Locationパッケージも使用しようとしましたが、同じ問題が解決しませんでした。 使用している別のパッケージが上位バージョンに依存しているため、4.0.4にダウングレードできません。 :(

これらの問題を解決する新しいリリースに懸命に取り組んでいます。 進捗状況の詳細については、第430号も参照してください。

最近、geolocatorを使用してこの問題が発生しました:^ 5.3.1
修正するには、geolocatorにアップグレードしました:^ 5.3.2 + 2
セットする :
compileSdkVersion 28

そして最終的にしました
フラッターアップグレード

それで問題は解決したようです。

Geolocator()。getCurrentPosition(desiredAccuracy:LocationAccuracy.medium)を待つ
私のために働いた。

Geolocator()クラスは、^ 6.0.0の最新リリースで非推奨になりました。PlaceMarkerとplaceFromCoordinateをどのように使用するのですか?

@mannnish、ジオコーディング機能は、と呼ばれる独自の(専用)プラグインに移動されているジオコーディング

@mannnish、ジオコーディング機能は、と呼ばれる独自の(専用)プラグインに移動されているジオコーディング

働いてくれてありがとう

最新バージョンに更新し、問題を修正しました👍👍👍

最新バージョンに更新し、問題を修正しました👍👍👍

確かに、 ^6.1.14にアップグレードすることも私を助けました。

最新バージョンに更新し、問題を修正しました👍👍👍

確かに、 ^6.1.14にアップグレードすることも私を助けました。

それは私のために働いていません.................私が従う必要がある手順を教えてください

最新バージョンに更新し、問題を修正しました👍👍👍

確かに、 ^6.1.14にアップグレードすることも私を助けました。

それは私のために働いていません.................私が従う必要がある手順を教えてください

うーん、pubspec.yamlを更新したばかりですが、pubpec.lockも削除する必要があるかもしれません。

今、再び遅い笑(少なくともウェブ上では)

このページは役に立ちましたか?
0 / 5 - 0 評価