Skip to content

Align iOS bridge result handling with Android#188

Merged
dos1in merged 2 commits intodidi:mainfrom
EchoTechFE:pr/upstream-ios-bridge-result-handling
Apr 7, 2026
Merged

Align iOS bridge result handling with Android#188
dos1in merged 2 commits intodidi:mainfrom
EchoTechFE:pr/upstream-ios-bridge-result-handling

Conversation

@lbb00
Copy link
Copy Markdown
Contributor

@lbb00 lbb00 commented Mar 30, 2026

对齐 iOS 侧 bridge 调用在同步/异步返回语义上的处理方式,使其更接近 Android 当前的实现,并修复 createInnerAudioContext 这类需要同步返回对象的 custom API 在 iOS 上无法正常返回的问题。

@lbb00
Copy link
Copy Markdown
Contributor Author

lbb00 commented Mar 31, 2026

本次修改

  1. 新增显式结果类型
    新增 dimina/iOS/dimina/DiminaKit/Service/DMPSyncResult.swift,引入:
  • DMPSyncResult
  • DMPAsyncResult
  • DMPNoneResult

用于在 iOS bridge 层显式表达同步返回、异步返回和无返回值三种语义。

  1. 统一 bridge 返回值归一化
    在 dimina/iOS/dimina/DiminaKit/Container/DMPContainer.swift 中,将 callBridgeMethod 的返回从裸 Any 收敛为 DMPAPIResult,并新增统一归一化逻辑:
  • DMPMap / DMPBridgeParam / 基础类型统一归为 DMPSyncResult
  • nil 根据场景归为 DMPAsyncResult 或 DMPNoneResult
  1. 更新 DMPEngineInvoke 的处理逻辑
    在 dimina/iOS/dimina/DiminaKit/Service/DMPEngineInvoke.swift 中补充:
  • DMPSyncResult 直接转换为 JSValue 返回给 JS
  • DMPAsyncResult / DMPNoneResult 返回 null
  • 保留原有 DMPMap / DMPBridgeParam 兼容路径
  1. 修正 DMPBridgeParam 类型判定
    在 dimina/iOS/dimina/DiminaKit/Service/DMPBridgeParam.swift 中修复两点:
  • Bool 优先识别为 .boolean,避免被 NSNumber 误判为数字
  • isAsync 从“对象参数即异步”调整为“对象中显式带 callback id(success/fail/complete)才视为异步”,避免普通对象参数的同步 API 被误判

lbb00 added 2 commits April 4, 2026 03:31
…andlers

Align iOS bridge result handling with Android's explicit result type pattern.
Each handler now returns DMPSyncResult, DMPAsyncResult, or DMPNoneResult
instead of Any?, removing runtime type guessing in normalizeBridgeResult.
@lbb00 lbb00 force-pushed the pr/upstream-ios-bridge-result-handling branch from 8fd0db3 to e5b0db6 Compare April 3, 2026 19:33
@dos1in dos1in merged commit 0556cc1 into didi:main Apr 7, 2026
lbb00 added a commit to EchoTechFE/dimina that referenced this pull request Apr 7, 2026
* Align iOS bridge result handling with Android

* refactor(ios): use explicit DMPAPIResult return type for all bridge handlers

Align iOS bridge result handling with Android's explicit result type pattern.
Each handler now returns DMPSyncResult, DMPAsyncResult, or DMPNoneResult
instead of Any?, removing runtime type guessing in normalizeBridgeResult.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants