Rexxar iOS
Rexxar是一个面向移动的混合开发框架。 现在支持安卓和iOS平台。 Rexxar-iOS是Rexxar在iOS系统上的客户端实现。
Rexxar允许使用包括javascript、css和html在内的传统前端技术开发移动APP。 要在Rexxar客户端实现Rexxar容器,Web端不需要使用任何技术。 当前的Rexxar前端实现Rexxar Web和Rexxar Container随两个平台的实现Rexxar-iOS和Rexxar-Android项目提供的Demo都使用React。 但是,您可以选择自己的前端框架,然后在Rexxar Container中进行开发。
Rexxar-iOS当前支持iOS 7或更高版本。
Rexxar简介
Rexxar有三个库。
rexxar web:https://github.com/douban/rexxar-web。
rexxar Android:https://github.com/douban/rexxar-Android。
rexxar IOs:https://github.com/douban/rexxar-IOs。
安装
Cocoapods的安装
CocoaPods是Objective-c和Swift的依赖管理工具。 可以使用以下命令安装CocoaPods :
$ gem install cocoapods
Podfile
目标'目标名称' do
pod 'Rexxar ', git=' https://github.com/douban/rexxar-IOs.git ',commit='0.2.1'
结束
然后,运行以下命令:
$ pod install
使用
可以看到Demo的例子。 了解Rexxar的使用方法。 Demo给出了完美的例子。
在Demo中使用github的原始文件服务提供了对简单路由表文件routes.json、demo.html和相关javascript资源的访问服务。 您的在线服务当然需要一个真正的生产环境来应对更大的路由表文件以及对javascript、css和html资源文件的访问。 可以使用任何服务端框架。 Rexxar没有向服务端框架提出要求。 RXRConfig提供路由表文件地址的配置接口。 下一节介绍配置方法。
配置RXRConfig
配置路由表文件api :
rxrconfig.setroutesmapurl (ns URL (string : ' https://raw.github user content.com/douban/rexxxar-web/master/exax
Rexxar使用url来标识页面。 通过指定相应的url,可以创建相应的RXRViewController。 路由表提供与每个url对应的html资源的下载地址。 Demo的路由表如下。
{
' items': [{
' remote _ file ' : ' https://raw.github user content.com/douban/rexxar-web/master/example/dist/rexxxar/dememe
' deploy_time': 'Sun,09 Oct 2016 07:43:47 GMT ',
' uri ' : ' douban ://douban.com/rexxar _ demo [/]? * '
()、
' partial_items': [{
' remote _ file ' : ' https://raw.github user content.com/douban/rexxar-web/master/example/dist/rexxxar/dememe
' deploy_time': 'Sun,09 Oct 2016 07:43:47 GMT ',
' uri ' : ' douban ://partial.douban.com/rexxar _ demo/_.* '
()、
' deploy_time': 'Sun,09 Oct 2016 07:43:47 GMT ',
}
设置预设资源文件路径
rxrconfig.setroutesresourcepath (rexxar ) )。
使用Rexxar时,路由表和资源文件通常会预配置在APP应用程序包中。 这将减少用户下载,并缩短首次打开页面的时间。 如果没有互联网,如果没有数据请求,也可以访问页面。
这都有利于用户体验。注意,如果设置了预置资源文件路径,即意味着在应用包内预置一份资源文件。这个文件夹需要是 folder references 类型,即在 Xcode 中呈现为蓝色文件夹图标。创建方法是将文件夹拖入 Xcode 项目,选择 Create folder references 选项。
设置缓存路径
RXRConfig.setRoutesCachePath("com.douban.RexxarDemo.rexxar")
缓存文件夹存在的目的也是减少资源文件的下载次数,加快打开页面的速度。使得用户可以得到近似原生页面的页面加载体验。
缓存资源文件一般会出现在 Rexxar 部署了一次路由表的更新之后。这也是 Rexxar 支持热部署的方法:路由表控制资源文件的更新。一般可以让应用定期访问路由表。比如,在开启应用时,或者关闭应用时更新路由表。更新路由表的方法如下:
RXRViewController.updateRouteFiles(completion: nil)
如果,新的路由表中出现了 html 文件的更新,或者出现了新的 url。也就是说这些文件并不存在于预置资源文件夹中,Rexxar Container 就会在下载完路由表之后,主动下载新资源,并将新资源储存在缓存文件夹中。
预置资源文件和缓存文件关系
正常程序逻辑下,预置资源文件夹存在的资源,就不会再去服务器下载,也就不会有缓存的资源文件。
在进入一个 RXRViewController 时,会读取资源文件。在读取时,Rexxar Container 先读取缓存文件,如果存在就使用缓存文件。如果缓存文件不存在,就读取预置资源文件。如果,预置资源文件也不存在。RXRViewController 会尝试更新一次路由表,下载路由表中新出现的资源,并再次尝试读取缓存资源文件。如果仍然不存在,就会出现页面错误。
读取顺序如下:
缓存文件夹中读取 html 文件;
预置资源文件夹中读取 html 文件;
重新下载路由表 Routes.json,遍历路由表将新的 html 文件下载到缓存文件夹。再次尝试从缓存文件夹读取 html 文件;
以上三步中,任何一步读取成功就停止,并返回读取的结果。如果,三步都完成了仍没有找到文件,就会出现页面错误。
有了预置资源文件和缓存文件的双重保证,一般用户打开 Rexxar 页面时都不会临时向服务器请求资源文件。这大大提升了用户打开页面的体验。
使用 RXRViewController
你可以直接使用RXRViewController作为你的混合开发客户端容器。或者你也可以继承RXRViewController,在RXRViewController基础上实现你自己的客户端容器。在 Demo 中,创建了FullRXRViewController,它继承于RXRViewController。
为了初始化 RXRViewController,你只需要一个 url。在路由表文件 api 提供的路由表中可以找到这个 url。这个 url 标识了该页面所需使用的资源文件的位置。Rexxar Container 会通过 url 在路由表中寻找对应的 javascript,css,html 资源文件。
let controller = RXRViewController(URI: uri)
let titleWidget = RXRNavTitleWidget()
let alertDialogWidget = RXRAlertDialogWidget()
controller.activities = [titleWidget, alertDialogWidget]
navigationController?.pushViewController(controller, animated: true)
Rexxar 的公开接口
Rexxar Container
RXRConfig
RXRViewController
Widget
RXRWidget
RXRNavTitleWidget
RXRAlertDialogWidget
RXRPullRefreshWidget
ContainerAPI
RXRNSURLProtocol
RXRContainerInterceptor
RXRContainerAPI
Decorator
RXRRequestInterceptor
RXRDecorator
RXRRequestDecorator
Util
NSURL+Rexxar
NSDictionary+RXRMultipleItem