HNBURLRouter 0.0.6

HNBURLRouter 0.0.6

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新版本2018年6月

chengkang 维护。



  • 作者
  • chengkang

HNBURLRouter

  • URLRouter 解决项目中 vc 之间相互引用的问题。
  • jspatch 的替代方案,使用 h5 页面取代有bug的 native 页面。
  • 远程调用,支持 app 外调用,如浏览器,其他 app,内部使用本地调用实现

解决问题

  • 1 项目中控制器的数量过多时,vc 之间跳转通常需要 import 很多其他 vc 的头文件,会导致代码耦合且繁琐。
	import "WeatherViewController.h"
	WeatherViewController *vc = [WeatherViewController new];
	[self.navigationController pushViewController:vc animated:YES];
  • 2 在快速迭代过程中,即使在测试过程中非常仔细,也无法保证线上的产品没有 bug。之前可以使用 jspatch 方式来进行热修复,但是自 2017 年 3 月份后,苹果不再允许使用 JSPatch 应用上线 AppStore。除了使用类似于 Facebook 的 RN 这样的 js 方案来解决外,原生无法做到热修复。

  • 3 项目要求 app 首页主菜单的四个按钮需要动态配置,原生的做法不易实现。

原理

  • 1 app 的所有页面都包含导航控制器,可以直接通过 HNBURLRouter 提供的 push 方法或 model 方法打开目的 vc,目的 vc 通过注册的字符串绑定、运行时获取。这种方法解除了 import 头文件的依赖,但如果 VC 需要指定参数,那么在通过 Router 打开 VC 的时候,参数的格式不明确,字典应该是什么样子?需要查看相关的 VC。为了解决这个问题,便有了第二点。finish

  • 2 基于 Router 提供一个中介者,为每个 VC 提供打开方式。例如:使用 [Mediator orderDeatilViewControllerWithId:orderID] 方法,内部使用 URLRouter 获取具体的 VC 并赋参,参数可以是普通类型,也可以是复杂类型,也可以是非常规类型。这样就解决了 casatwy 提出的 传params容易晕头 的问题 iOS应用架构谈 组件化方案 finish

  • 3 为了解决线上的 bug,可以使用 webView 替换 native vc 的方法来修改线上 bug。具体做法是在 Mediator 打开一个具体的控制器时,检查本地字典中需要打开的控制器是否需要被替换,本地字典可以在 app 启动时获取。todo

  • 4 远程调用

  • 通过浏览器或其他 app 内置的 h5 打开。finish

  • 项目内配置:在 app 内动态配置某个原生页面的按钮点击事件,可以使该页面动态按钮(相应页面由服务端配置)绑定到该页面接口返回的 url 中,以实现按钮的动态化:使用远程调用的方式实现按钮动态化 finish