在用于 React Native 集成的 Swift 框架中实现 `WKScriptMessageHandler` 时出错

问题描述 投票:0回答:1

我开发了一个 iOS Swift 框架 (

.framework
) 来处理 WebKit 功能,该框架旨在集成到 React Native 项目中。为了将我的 Swift 代码导出到 React Native,我使用了
RCT_EXTERN_MODULE
RCT_EXTERN_METHOD
。一切都很顺利,直到我添加了
WKScriptMessageHandler
的功能(用于从网页中运行的 JavaScript 接收消息)。

添加此后,当我尝试将 Swift 框架集成到另一个 iOS(React Native)项目中进行测试时,遇到以下错误:

**Can't find Protocol Declaration for WKScriptMessageHandler**

我确保在 Swift 代码中正确实现

WKScriptMessageHandler
协议,但错误出现在框架自动生成的
-swift.h
文件中:

@interface DWWebViewController : UIViewController <WKScriptMessageHandler>

**Type argument 'WKScriptMessage' must be a pointer (requires a '*')**

**Type arguments cannot be applied to non-parameterized class 'UIViewController'**

**Unknown class name 'WKScriptMessageHandler'; did you mean 'WKScriptMessage'?**

我尝试了各种方法,但我不知道如何解决这个问题。谁能提供有关如何在 Swift 框架中正确实现

WKScriptMessageHandler
并避免这些错误的指导吗?

任何帮助或见解将不胜感激!

ios xcode react-native frameworks webkit
1个回答
0
投票

经过几天的故障排除和尝试不同的方法,我终于找到了解决我自己问题的方法。

为了处理

WKScriptMessageHandler
,我使用了 Objective-C 类别,因为
WKScriptMessageHandler
与 Objective-C 不存在兼容性问题。通过将实现转移到 Objective-C,我避免了 Swift 到 Objective-C 的桥接问题。当手动将类添加到项目中时,这可以正常工作。

但是,将其打包到框架中会带来额外的挑战。我在框架中解决此问题所遵循的关键步骤是:

  1. WKScriptMessageHandler
    的Objective-C类别:我没有在Swift中直接处理
    WKScriptMessageHandler
    ,而是在Objective-C中实现了一个类别以确保兼容性,因为
    WKScriptMessageHandler
    在Objective-C中完全支持。

  2. 在 Swift 和 Objective-C 之间桥接: 我使用

    RCT_EXTERN_MODULE
    RCT_EXTERN_METHOD
    确保类别在 Swift 框架和 React Native 集成之间正确桥接。这可以避免自动生成的
    -swift.h
    文件以及对
    WKScriptMessageHandler
    的错误解释而出现的问题。

  3. 框架打包注意事项:将其打包到框架中时,请确保所有相关的 Objective-C 标头都正确公开并包含在框架的总括标头中。这确保了当框架集成到项目中时,可以访问该类别中的任何类或协议。

通过遵循这种方法,我能够成功打包框架,同时保持在 React Native 项目中处理

WKScriptMessageHandler
的完全兼容性。

我希望这可以帮助任何面临类似问题的人——这需要相当多的努力,但这个解决方案对我有用!

© www.soinside.com 2019 - 2024. All rights reserved.