从iOS Basecam3探索混合应用开发的最佳实践
Hybrid 的定义
首先,我们需要清楚理解什么是”hybrid”。这个词在很多不同的场合中被使用,但这对于我们而言几乎没有任何意义。在我们的开发中,我们所指的”混合”是具有大量 web 渲染内容的标准原生应用。我们没有使用通过 HTML/CSS 来模拟原生控件的框架,也没有使用将另一种编程语言编译成原生开发语言的框架,亦或者是通过一份代码库开发一个跨平台的 App 的框架。
对于我们而言,这意味着我们需要使用 Xcode+Swift,并且要遵守开发平台关于导航和展示的所有规范。在 App 中构建的内容大多由 UINavigationController、UIViewController、UITabViewController、UISplitViewController 等组成。在这些容器中,有很多内容是通过 UITableView 或 UICollectionView 组建的,当然了更多的是通过 WKWebView。
深入理解
在 iOS 版本的 Basecamp 3 App 中我们使用的全部是 Swift 3.1,并且通过最新版本的 Xcode 进行编译。我们只有很少的依赖,并且这些都是通过 Carthage 进行管理。Turbolinks 是我们能够使用混合架构的核心库。Turbolinks 不仅可以用在 Web 上,在 iOS 和 Android 的原生应用上也可以进行使用。此框架主要解决了原生应用和 Turbolinks.js 之间的通讯问题,并且允许开发者在多个界面间共享单个 WKWebView。
路由/导航
除了 Turbolinks,我们还需要许多其他的组建进行支持。在 iOS 应用中大多数都是通过 URL 进行的导航。一个 URL 可以有很多来源(web 链接、推送通知、来自另一个 App 的通用链接、本地跳转等),但是它们都要通过路由进行中转。路由需要清楚地知道对于一个给定的 URL 下一步操作是什么。如果 URL 是另一个域,应用还可能打开 Safari;如果是图像/视频,则需要展示一个媒体视图,又或者是在大多数情况下,应用都是创建一个新的控制器进行展示。大多数的控制器都需要被推入当前导航控制器的栈中,但是我们也支持通过模态的方式弹出一个视图(类似新的/编辑视图) 以及在合适的时候替换当前视图。
桥接
组成混合架构的最后一个组件是桥接(尽管我们有许多其他的组件,但它们都和混合模块没关系)。这是一个在 App 不同部分之间进行通讯的统称术语,比如原生-》web通讯(或web-》原生)。其中最核心的代码是一份嵌入到本地 App 的 Java 文件(用 Type 编写)并且通过 WKUser 注入到 web 视图中。这种桥接方式给原生代码提供了一个在不需要直接查询 DOM 和进行复杂 JS 操作的情况下与 web 视图进行通讯的 API。利用 WKMessageHandle,我们可以通过桥接来响应从 Web 发送的消息。
以上是一个关于桥接的例子。我们使用桥接来隐藏一些在 web 上需要显示但在 Basecamp 界面中不需要的元素。由于我们给顶层导航控制器提供了一个标签条,所以我们需要隐藏 web 界面最下面的部分。同时,也不需要 web 的导航记录了因为我们已经有了一个导航控制器。最后,我们隐藏了 Web 的编辑/书签/动作菜单并且提供了一个原生版本的界面。
非常好我支持^.^
(0) 0%
不好我反对
(0) 0%
下载地址
从iOS Basecam3探索混合应用开发的最佳实践下载
相关电子资料下载
- iOS17.1可能明天发布,iOS17.1主要修复哪些问题? 380
- 华为全新鸿蒙蓄势待发 仅支持鸿蒙内核和鸿蒙系统应用 719
- 苹果手机系统iOS 17遭用户质疑 731
- iPhone12辐射超标?苹果推送iOS 17.1解决此事 750
- 传华为囤积零部件 目标明年智能手机出货7000万部;消息称 MiOS 仅限国内,小米 28208
- 苹果推送iOS17.0.3,解决iPhone15Pro系列存在机身过热 216
- Testin云测兼容和真机服务平台中上线iPhone 15系列手机 208
- 利尔达推出搭载HooRiiOS的Matter模组 145
- 运放参数解析:输入偏置电流(Ibias)和失调电流(Ios) 128
- 昆仑太科发布支持国产飞腾腾锐D2000芯片的开源BIOS固件版本 448