苹果试图“杀死”Web技术

2019 年 11 月 12 日

苹果试图“杀死”Web技术

这家公司在自己的平台上为Web技术的使用设下重重障碍,希望开发者就此退缩。



用来构建 Web 的编程语言往往会在应用程序中找到自己的立足之地,这在很大程度上归功于对应的软件技术。这些软件允许开发人员在开发支持 Linux、Android、Windows 和 macOS 等操作系统产品时,“复用”他们为 Web 程序所编写的代码。


但是苹果并不喜欢这种 Web 技术的循环再利用方式,它希望 Mac App Store 中塞满你在其他任何地方都找不到的应用程序,不想让在各个平台上都能见到的应用充斥 App Store。


随着最近的政策更改开发人员向这家公司提交包含 Web 代码的应用程序也变得更愈发困难。


Mac App Store 已默默开始拒绝使用一款流行工具制作的应用程序:Electron 允许开发人员在基于 Web 代码的基础上开发运行在所有平台上的应用。App Store 中的一些最受欢迎的应用程序(例如 Slack、Spotify、Discord 和 WhatsApp 等)都属于这一类型。


Github上的相关讨论中,几位开发人员表示,他们使用 Electron 构建的应用程序被拒绝了——过去,这些应用还能通过审核——但现在,审核拒绝的同时还给出了说明:这些应用程序“试图隐藏私有 API 的使用”。


这里的“私有 API“指的是专为苹果公司内部使用而设计的 API,没有对第三方开发人员开放授权。人们通常不赞成使用私有 API 来构建面向公众的应用程序,因为时间一长这些 API 可能被更改或损坏,并且苹果公司禁止让它们的应用程序上架。


多年来,Electron 一直在使用这些私有 API,过去都没出什么问题。这些私有 API 允许开发人员做很多事情,例如大幅改善功耗


相比之下,使用苹果公司认可的工具实现类似的目标只会让用户体验变得更糟。在大多数情况下,苹果公司并没有为想要获得这些私有 API 所提供功能的开发人员提供切实可行的选择。


现在,除非 Electron 框架发布重大更改,否则使用 Electron 构建应用的数千名开发人员已经不太可能为应用发布更新了。


开发人员可以从自己的网站分发他们的应用程序,要求用户直接下载它们。但这意味着要放弃一些好处,诸如苹果公司在 Mac App Store 中提供的自动更新机制和 iCloud 同步之类的功能。


而且,这种直接面向消费者的方法也可能很快就被锁定了,因为苹果公司发布了充满争议的公证条款,根据这一条款,苹果可能会要求对这些第三方渠道发布的应用进行审查。


苹果公司在自己的平台上阻碍 Web 发展的做法由来已久。在 iOS 上,苹果公司不允许使用完全独立的第三方浏览器,要求所有应用在渲染基于 Web 的内容时,都必须使用他们的 Safari 浏览器。


尽管 App Store 中提供了 Chrome 和 Opera 之类的浏览器,但它们必须在后台使用苹果公司的 Safari 浏览器来渲染网页,不能使用自己的渲染引擎。这意味着苹果垄断了 iPhone 和 iPad 用户访问 Web 的方式


为了推动开发人员在 iOS 上构建原生应用程序(而不是使用 Web 技术),苹果公司出于自身利益,无视了其他浏览器实现的开放Web规范中的许多流行部分。


单独来看,苹果公司这些微妙的反竞争做法似乎并不怎么可怕,但它们连在一起形成了一项明确的战略。


例如,一种称为 WebRTC 的技术无需使用额外软件即可在 Web 浏览器中进行视频通话。它为 Google Meet 等工具提供了支持。但苹果公司实现这一规范的速度异常缓慢,还遗漏了一些关键功能。当开发者将这一技术嵌入到应用程序中时,它也无法正常工作。


苹果公司还阻碍了一种新兴的标准,即渐进式 Web 应用程序(PWA)——这项技术与 Electron 一样,允许开发人员为桌面和移动端构建效果类似原生的应用——苹果的做法是只实现该标准的一部分,结果让它与完整标准相距甚远,使开发者难以依靠。


如果用户能在 Chrome 或 Firefox 中启动 PWA 应用就不会出现这些问题,但是 iPhone 和 iPad 用户无法安装第三方浏览器,苹果公司也关闭了用户使用基于 PWA 技术的途径。


开发人员愿意使用诸如 Electron 和 PWA 之类的技术,是因为它们加快了跨平台更新的速度,并且无需使用一系列不同的代码库。


有人认为这样会产出质量较低的应用程序,但我认为不用它们的结果就是根本做不出这种跨平台应用,或者做出的应用程序更新缓慢,因为针对 Windows、Mac 和 Web 平台单独维护产品的做法既复杂又昂贵。


苹果公司最近推出了一个竞争性的框架,称为Catalyst,这一框架允许制作了 iPad 应用的开发人员将其快速引入 macOS——对专门面向苹果用户的开发人员来说,这是一款出色的工具,但对那些跨平台应用来说没什么意义。


单独来看,苹果公司这些微妙的反竞争做法似乎并没什么可怕的,但它们连在一起形成了一项明确的战略:给开发人员在苹果平台上使用基于 Web 技术构建应用的做法设下重重障碍,最终逼迫这些开发者退缩


既然 App Store 不接受使用 Electron 构建的应用程序,开发人员可能会找出创新方法来解决这个问题,但是苹果已经准备玩一场长期的猫鼠游戏,因为它计划未来进一步控制平台上可以运行哪些应用程序。


这些变化可能是以隐私或安全名义进行的。但现实情况是,当用户和开发人员都没有选择权时,这种名义就显得微不足道了,因为苹果公司控制了平台、浏览器引擎和分发渠道。


无论你对 Electron 应用程序的质量有何看法,选择权都是非常重要的。


苹果对其应用程序生态系统的控制是一种新型的垄断,对于立法者而言这是很难理解的,而且我们也难以反抗——因为当公司同时控制发行渠道和平台本身时,根本没有摆脱这些限制的方法。


作者介绍


Owen Williams 是一名开发人员,偶尔会写一些东西。他是 Medium 的专栏作者,试图挖掘技术背后的深层意义。


原文链接


Apple Is Trying to Kill Web Technology


2019 年 11 月 12 日 18:0310040

评论 4 条评论

发布
用户头像
与其组织不如引领
2019 年 11 月 24 日 23:25
回复
用户头像
别指望商业平台的拥有者会允许你无限侵蚀它自有的生态圈,让H5无限侵蚀进来的后果就是苹果的objectc和swift无人在用,你觉得苹果会容忍这个?脑袋清醒点,顺便说一句,不要觉得安卓那边的google就真的很宽容
2019 年 11 月 24 日 10:39
回复
用户头像
这可能就是小程序出现的原因了
2019 年 11 月 19 日 10:01
回复
小程序在iOS、Mac等苹果平台依然受到了很大等限制。
2019 年 11 月 19 日 11:06
回复
没有更多评论了
发现更多内容

Kafka的生产者优秀架构设计

奈学教育

kafka 分布式

MyBatis之启动分析(一)

ytao

mybatis Java 面试

分享一份阿里架构师 651 多个技术分支的脑图

奈学教育

大数据

如何更好的交谈(以英语为例)

七镜花园-董一凡

学习 生活

分布式事务 - 三种常见的解决方案

Java收录阁

分布式事务

一文让你快速上手 Mockito 单元测试框架

mghio

Java spring 单元测试 Mockito

科学提升认知方法之贝叶斯公式

奈学教育

贝叶斯公式

大话设计模式 | 0 面向对象基础

Puran

C# 设计模式

如何挑选一份工作

池建强

求职 找工作

OFD版式技术解析系列(一):开篇

华宇法律科技

女朋友跟我吐槽Java中ArrayList遍历时删除元素的各种姿势

NotFound9

Java 架构 面试 编程语言 后端

【译文】为什么说Rust是机器人技术的未来

袁承兴

rust 机器人 嵌入式

普通二本,毕业三年,北漂之后,我是怎么成为程序猿的。

why技术

个人成长 程序人生 随笔杂谈 北漂

产品的本质,知道却看不到

Neco.W

产品 产品经理 需求 产品开发

Mobaxterm (安装 、汉化、使用)入门教程

Geek_Offset

JAVA后端学习路线

敖丙

Java 学习 程序员 Java25周年

JDK 15 都发布了,可 Java 8 依然是最爱

古时的风筝

Java Java 25 周年 Java版本

GitHub上10个不可错过的另类有趣项目

码农神说

GitHub 程序员人生 开源项目

自定义 SpringBootStarter

lee

浅谈敏捷开发中的设计

czjczk

敏捷开发

CSS Tricks网站创始人作序推荐,这本书助你成为Web开发高手

图灵社区

CSS Web 开发 设计思维

读懂才会用 : 带你见识 Redis 的 zset

小眼睛聊技术

redis 学习 程序员 架构 redis6.0.0

一周信创舆情观察(5.25~5.31)

统小信uos

基础软件 操作系统 新基建

我的个人知识管理方法

lidaobing

个人成长 知识管理 PKM

SpringCloud-OpenFeign源码

云淡风轻

Spring Cloud

Sula - 可能是西湖区最好用的antd配置框架

开远

前端开发 antd sula 配置化开发 前端框架

原创 | TDD工具集:JUnit、AssertJ和Mockito (十六)编写测试-有条件执行测试

编程道与术

Java 编程 TDD 单元测试 JUnit

2020年6月3日 对象与类

瑞克与莫迪

计算机超全核心技术知识

cxuan

后端 计算机基础

JUC整理笔记五之梳理Varhandle(下)

JFound

Java

ArrayList浅析

章小传

Java collection 原理 ArrayList

苹果试图“杀死”Web技术-InfoQ