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
相关产品推荐
相关产品推荐

