×

从iOS Basecam3探索混合应用开发的最佳实践

消耗积分:2 | 格式:rar | 大小:0.6 MB | 2017-09-27

分享资料个

  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 发送的消息。

  从iOSBasecam3探索混合应用开发的最佳实践

  以上是一个关于桥接的例子。我们使用桥接来隐藏一些在 web 上需要显示但在 Basecamp 界面中不需要的元素。由于我们给顶层导航控制器提供了一个标签条,所以我们需要隐藏 web 界面最下面的部分。同时,也不需要 web 的导航记录了因为我们已经有了一个导航控制器。最后,我们隐藏了 Web 的编辑/书签/动作菜单并且提供了一个原生版本的界面。

 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !