Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

[Bug]: iOS abort in geocoding_darwin Pigeon reply encoding after registrar deallocation

未关闭
#327 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
49/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
活跃
技术栈
dart, flutter, swift

调研方向

Read GeocodingLibrary.g.swift around line 609 and GeocodingDarwinPlugin.swift around lines 27–30, then trace the completion handlers for all three asynchronous geocoding methods. Start by checking how detach and pending replies interact; the issue describes a source-backed hypothesis but no deterministic reproducer. Done means completions remain safe across teardown while normal success and error replies still work when attached.

由索引模型根据 Issue 内容生成。

描述

Please check the following before submitting a new issue.
Please select affected platform(s)
  • Android
  • iOS
Steps to reproduce

We observed a native iOS crash during completion of an asynchronous geocoding request. A sanitized symbolicated stack is attached.

We do not yet have a deterministic reproducer. The app was in the background when the crash occurred; this does not establish that backgrounding caused engine teardown.

A suspected lifecycle sequence to investigate:

  1. Start a geocoding request and delay its completion.
  2. Detach the plugin from the Flutter engine.
  3. Deliver the pending completion.
  4. Check whether reply encoding accesses the released Pigeon registrar.

This sequence is a source-backed hypothesis, not a confirmed reproduction.

Expected results

Pending geocoding completions should remain safe across plugin/engine teardown. After detach, they should not encode or send replies through a released registrar or detached engine.

Normal success and error replies should continue working while attached.

Actual results

The process terminates with EXC_CRASH (SIGABRT).

Relevant stack:
swift::swift_abortRetainUnowned
swift_unownedRetainStrong
GeocodingLibraryPigeonInternalProxyApiCodecReaderWriter.writer(with:)
GeocodingLibrary.g.swift:609
FlutterStandardMessageCodec encode:
FlutterBasicMessageChannel ... reply
PigeonApiCLGeocoder.setUpMessageHandlers(...)
CLGeocoderProxyApiDelegate.geocodeAddressString(...) completion

The immediate failure is an expired Swift unowned reference during reply encoding.

Source inspection shows:

  • The codec reader/writer holds an unowned pigeonRegistrar.
  • detachFromEngine sets ignoreCallsToDart, tears down handlers, then releases proxyApiRegistrar.
  • Pending geocoding completion handlers invoke reply without checking registrar availability or detach state.

Relevant upstream source:
https://github.com/Baseflow/flutter-geocoding/blob/cd7c13c84de45291c21ed5930f3d0941706d302a/geocoding_darwin/darwin/geocoding_darwin/Sources/geocoding_darwin/Geocoding/GeocodingLibrary.g.swift#L608-L609

https://github.com/Baseflow/flutter-geocoding/blob/cd7c13c84de45291c21ed5930f3d0941706d302a/geocoding_darwin/darwin/geocoding_darwin/Sources/geocoding_darwin/GeocodingDarwinPlugin.swift#L27-L30

A possible fix is to guard pending completions against registrar release/detach and keep the registrar alive during reply encoding, with callback delivery serialized against teardown. All three asynchronous geocoding methods need equivalent handling.

The precise event that released the registrar in this incident remains unknown.

geocoding-sanitized-crash.txt

Code sample

The application retains a Geocoding instance and calls:

final geocoding = Geocoding();
final placemarks = await geocoding.placemarkFromCoordinates(
  latitude,
  longitude,
);

This usage alone is not a reproducer. The symbolicated stack names geocodeAddressString despite the application's reverse-geocoding call; that discrepancy remains unresolved.

Screenshots or video
Screenshots or video demonstration

[Upload media here]

Version

geocoding 5.0.0 geocoding_darwin 1.0.3 iOS, ARM64

Flutter Doctor output

Not available

主要语言
Dart
星标
153
派生
92
平均合并
7 天 21 小时
30 天内合并 PR
3

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

Baseflow/flutter-geocoding 的其他 Issue

查看 Baseflow/flutter-geocoding 的全部 Issue

相似的 Issue

更多 Dart Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。