You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Expo托管工作流下,如何编写插件在AppDelegate.m初始化SDK?

在Expo托管工作流中注入Sentiance SDK初始化代码到AppDelegate.m

1. 创建自定义Expo插件文件

在项目根目录新建plugins/withSentianceSDK.js文件,作为修改原生代码的插件入口。

2. 编写插件注入逻辑

将以下代码复制到withSentianceSDK.js中,代码会自动完成头文件导入和初始化代码的注入:

const { withAppDelegate } = require('@expo/config-plugins');

module.exports = function withSentianceSDK(config) {
  return withAppDelegate(config, (config) => {
    let appDelegateContent = config.modResults.contents;

    // 注入RNSentianceHelper头文件
    if (!appDelegateContent.includes('#import "RNSentianceHelper.h"')) {
      const importRegex = /#import.*AppDelegate.h/;
      appDelegateContent = appDelegateContent.replace(importRegex, `$&
#import "RNSentianceHelper.h"`);
    }

    // 在didFinishLaunchingWithOptions方法中插入SDK初始化代码
    const didFinishLaunchingRegex = /- \(BOOL\)application:(UIApplication \*)application didFinishLaunchingWithOptions:\(NSDictionary \*\)launchOptions\s*\{\s*([\s\S]*?)\s*return YES;/;
    if (didFinishLaunchingRegex.test(appDelegateContent)) {
      appDelegateContent = appDelegateContent.replace(
        didFinishLaunchingRegex,
        `- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    SENTInitializationResult *result = [[[RNSentianceHelper alloc] init] initializeSDKWithLaunchOptions:launchOptions];
$1
    return YES;`
      );
    }

    config.modResults.contents = appDelegateContent;
    return config;
  });
};

代码说明

  • withAppDelegate是Expo官方提供的API,专门用于修改iOS的AppDelegate文件
  • 先检查是否已导入RNSentianceHelper.h,未导入则自动添加在主头文件之后
  • 定位didFinishLaunchingWithOptions方法,将SDK初始化代码插入到方法开头,保留原有业务逻辑

3. 在项目配置中启用插件

打开app.json或app.config.js,在expo.plugins数组中添加自定义插件:

{
  "expo": {
    // ...其他项目配置
    "plugins": [
      "./plugins/withSentianceSDK.js"
    ]
  }
}

4. 测试插件

运行expo prebuild --platform ios预生成原生目录验证代码,或直接执行expo run:ios启动项目。Expo会自动将代码注入到生成的AppDelegate.m中。

验证结果

预生成完成后,打开ios/[你的项目名]/AppDelegate.m,应能看到:

  • 文件顶部存在#import "RNSentianceHelper.h"
  • didFinishLaunchingWithOptions方法内已添加SDK初始化代码

内容的提问来源于stack exchange,提问作者cyanbird

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 20:55:10