{"id":19322950,"url":"https://github.com/mrgaogang/rn-jsbridge-ios","last_synced_at":"2026-05-08T03:32:23.629Z","repository":{"id":38866284,"uuid":"279467627","full_name":"MrGaoGang/rn-jsbridge-ios","owner":"MrGaoGang","description":"A  rn jsbridge in iOS","archived":false,"fork":false,"pushed_at":"2023-01-06T11:27:45.000Z","size":1660,"stargazers_count":3,"open_issues_count":15,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-06T06:11:50.311Z","etag":null,"topics":["ios","jsbridge","react","react-native"],"latest_commit_sha":null,"homepage":"","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MrGaoGang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-07-14T03:05:56.000Z","updated_at":"2024-07-08T03:00:10.000Z","dependencies_parsed_at":"2023-02-05T23:46:43.042Z","dependency_job_id":null,"html_url":"https://github.com/MrGaoGang/rn-jsbridge-ios","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrGaoGang%2Frn-jsbridge-ios","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrGaoGang%2Frn-jsbridge-ios/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrGaoGang%2Frn-jsbridge-ios/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrGaoGang%2Frn-jsbridge-ios/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MrGaoGang","download_url":"https://codeload.github.com/MrGaoGang/rn-jsbridge-ios/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240427140,"owners_count":19799466,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ios","jsbridge","react","react-native"],"created_at":"2024-11-10T01:43:12.600Z","updated_at":"2026-05-08T03:32:18.598Z","avatar_url":"https://github.com/MrGaoGang.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rn-jsbridge-ios\n\n一个利用`RCTBridgeModule`实现`react-native`版本的`jsbridge`.\n\n## 如何使用\n\n1. **拷贝 ios-\u003e RNJSBridge 目录下的所有文件**\n\n2. **在项目启动/调用 bridge 之前 注册 jsbridge**\n\n`[[RNJSBridgeRegister shareInstance] registerJSBridge];`\n\n3. 在 RNJSBridge-\u003eJSBridge 目录下编写自己的 jsbridge。\n   ![](./imgs/bridge-folder.png)\n\n## 如何编写自定义 jsbrige\n\n首先要清楚整个 jsbridge 的格式如下:\n\n```bash\njsbridge://moduleName/methodName?params=value1\u0026params2\u0026value2\n```\n\n- `jsbridge` 是按照 `module` 划分的，意味着我们需要在一个模块下编写对应的 bridge\n\n- 自定义 `jsbridge`需要继承`JSBridgeCommonBase`\n\n- 在编写 `jsbridge` 时，实现对应的方法需要注意，方法名称必须为`evaluateJSBridge_你的方法名称`，且入参为一个`BridgeRequest`对象\n\n- 如果有需要回调，可以在方法中调用`evaluateJSCallback`执行回调\n\n上面讲述可能比较晦涩，下面拿一个具体的例子讲述; 假如我们要在`react-native`端使用\n\n```js\n// 第一个参数app为模块名称,第二个参数为方法名称\ncallWithCallback('app', 'getAppInfo', {}, (data) =\u003e {\n  this.setState({\n    msg: JSON.stringify(data),\n  });\n});\n// 或者\nJSBridge.app.getAppInfo((data) =\u003e {});\n```\n\n的方式调用 jsbridge 获取系统信息；那么我们 ios 端应该如下:\n\n1. 创建一个文件`JSBridgeAppPlugins`并继承`JSBridgeCommonBase`\n2. 实现`evaluateJSBridge_getAppInfo`方法\n   - 由于需要回调，我们可以在方法中调用`evaluateJSCallback`执行回调\n\n```java\n// 一个样例，获取App的信息，使用callback返回\n- (void)evaluateJSBridge_getAppInfo:(BridgeRequest *)request{\n  NSString *deviceName = [[UIDevice currentDevice] name];\n  NSString *sysVersion = [[UIDevice currentDevice] systemVersion];\n  NSString *deviceUUID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];\n  // 执行js回调\n  [self evaluateJSCallback:@{\n    @\"deviceName\":deviceName,\n    @\"sysVersion\":sysVersion,\n    @\"uuid\":deviceUUID\n  }withRequest:request];\n}\n\n```\n\n3. 在`RNJSBridgeRegister`注册自定义`JSBridgeAppPlugins`\n\n```java\n// 注意app必须和上面是有的module名称相同\njsBridgePlugins = [[NSMutableDictionary alloc] initWithDictionary: @{\n    @\"app\":[JSBridgeAppPlugins class]\n  }];\n```\n\n## 如何实现\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrgaogang%2Frn-jsbridge-ios","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrgaogang%2Frn-jsbridge-ios","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrgaogang%2Frn-jsbridge-ios/lists"}