一次关于 Swift 在 iOS 生态圈里的现状调研

本文是 SketchK 的一篇数据调研笔记,能够帮助你们看清当前国内 iOS 开发形式。文章末尾处有一个开放性投票,欢迎你们积极参与html

Swift 的发展历程

概述

经过官网的 Document Revision History[1]Xcode Release Notes[2] 梳理了一下 Swift 的发展历程和重大事件。git

Swift 版本 Xcode 版本 发布时间 重大事件
Swift 1.0 ~ 1.2 6.x 2014 语⾔发布
Swift 2.0 ~ 2.2.1 7.x 2015 对协议,泛型能力进一步扩展,开始支持 Linux,随后出现了以 Swift 语言为核心的后端框架 Perfect,Vapor,Kitura
Swift 3.0 ~ 3.3.1 8.x 2016 发布了 Swift Package Manager,同时以 GCD,Core Graphics 为表明的基础库 API 风格发生了大幅度转变,摆脱了 Objective-C 时代的烙印
Swift 4.0 ~ 4.1.3 9.x 2017 在总体的语法,使用和理念上基本定型,提出了 Codable 协议,同时 Xcode 的 Swift Syntax Mirgration 的最低版本固定为 4
Swift 4.2 ~ 4.2.4 10.x 2018 Swift 社区从邮件列表转向论坛,语言小幅升级,主要是功能完善,性能提高,同年 Swift for TensorFlow 发布并开源
Swift 5.0 ~ 5.0.3 10.2.x 2019 ABI 稳定,iOS 12 开始内置 Swift 运行时
Swift 5.1 ~ 5.2 11.x 2020 新增 Property Wrapper ,Opaque Type 等新的语法功能,同年 WWDC 上,Apple 发布了 SwiftUI,Combine,Catalyst 等 Swift 语言的专属 SDK
Swift 5.3

质量和性能加强,增长对 Windows 和其余 Linux 发行版的支持。

结合着本身的 Swift 学习经历,不难发现:程序员

在 Swift 4 以前,因为语言总体还没定型,确实存在着发一个新版本,学一门新语言的状况,但在 Swift 4 以后,Swift 变化变得收敛了许多,不过也出现了入门容易,精通难的状况,毕竟光 Swift 的语法糖数量就快遇上了 C++ 了。github

语言排行榜

Swift 语言从诞生之日开始,就一直存在各类各样的争议:一方面的焦点在于 Swift 的应用领域仍是集中在 Apple 生态下,让人以为不够大气,毕竟新时代的语言就是要全能,另外一方面的焦点就是 Swift 语言的变化太快,每一个版本都是是全新的感受,这让开发者意识到,东西虽好,但代码仍是要一个个的本身改的。web

不过随着时间的推移,Swift 在后端,人工智能,物联网上的解决方案和应用场景不断出现,它已经远远不在是一个只能在 Apple 生态下运行的语言,关于这个很是推荐看看 Onevcat 在 GMTC 2019 上的分享:在分歧中发展——2019,咱们能用 Swift 作什么[3]编程

ABI 在 Swift 5.0 的时候也终于稳定了,虽然 ABI 稳定是使用 binary 发布框架的必要非充分条件,但都 ABI 了,module stability 也不会太远了,这些信号都让开发者的信心不断加强。swift

为了验证这一点,咱们也能够从编程语言排行榜 TIOBE[4]PYPL[5] 里看出一些端倪。后端

下图为 TIOBE 2020 年 四月排行榜,Swift 的排名在 11 名,Objective-C 的排名在 17 名,份额差距在 0.6% 左右:xcode

TIOBE 2020 年 四月排行榜

下图为 PYPL 2020 年 四月排行榜,Swift 的排名在 9 名,Objective-C 的排名在 8 名,份额差距在 0.17% 左右:浏览器

PYPL 2020 年 四月排行榜

不论哪一种排名,咱们应该均可以得出这样一个结论:相比于 Objective-C 的降低趋势,Swift 的将来会更让人期待。

社区活跃度

观察一个编程语言活跃度的最好地方就是 Github,经过 Pull Requests ,Issues,Pushes,Stars 的状况,咱们就能够大体了解到它的状况。

刚好 Githut[6] 提供了这样的能力,经过观察 2020 年第一季度的数据,咱们能够清楚的观察到 Swift ,Objective-C 等语言在社区的活跃度。

总体趋势图

下面四张图的 Y 轴分别表明了 Pull Requests ,Issues,Pushes,Stars 的数量,蓝色的线表明 Objective-C ,浅橙色的线表明 Swift,深橙色的线表明 Kotlin。

Pull Requests
Issues
Pushes
Stars

咱们能够发现,从 2016 年开始,Swift 的数据已经超过了 Objective-C,如今有一种取而代之的快速发展趋势,这说明社区中更多的开发者习惯把精力放在 Swift 上,而不是放在 Objective-C 上。

这就给相应的开发者一个提醒,若是你坚持使用 Objective-C,那么你可能会面临一个风险,你所依赖的第三方开发库,他们的原做者颇有可能已经不肯意去维护他们了。

同时,咱们也能够发现 Swift 和 Kotlin 做为端上的新语言,它们的发展趋势是稳步上升的,这表明它们在社区是受欢迎的,那这也意味着掌握这些新技术会更容易与其余程序员进行交流和沟通,至于将来能不能彻底取代现有语言的份额,还须要时间来证实。

个体状况对比

若是关注过一些 iOS 相关的 Newsletters,咱们应该均可以感觉到,相比于 Swift 的第三方开源库,同类型的 Objective-C 开源库明显处于劣势,不管是新增数量,仍是活跃度;甚至有些 Objective-C 的库已经被开发者废弃,转而使用 Swift 重构。

下面是两种语言的两个常见方向的第三方开源库的数据对比,咱们明显能够看出 Objective-C 项目的活力在降低,甚至出现了 2 年没有更新的状态。

名称 Massonry SnapKit Pop Hero
语言 Objective-C Swift Objective-C Swift
Stars 17.7K 16.3K 19.8K 18.3K
Opening issue 108 64 44 167
Opening Pull Request 19 16 14 14
Latest Commit 2017.09 2019.11 2018.10.12 2020.04.26
Latest release 2017.09 2019.08 2018.10.12 2019.10.29

对于那些还在持续更新的 Objective-C 库,它的更新频率又是什么样子的呢?咱们拿 AFNetworking 和 Alamofire 作一个比对:

AFNetworking 版本 时间点 间隔时间 Alamofire 版本 时间点 间隔时间
4.0.1 2020.04.21 1 个月 5.1.0 2020.04.05 0.5 个月
4.0.0 2020.03.31 12 个月 5.0.5 2020.03.24 0.2 个月
2.7.0 2019.02.13 7 个月 5.0.4 2020.03.16 0.1 个月
3.2.1 2018.05.05 5 个月 5.0.3 2020.03.15 0.5 个月
3.2.0 2017.12.16 25 个月 5.0.2 2020.02.24 0.1 个月
2.6.3 2015.11.11
5.0.1 2020.02.23

虽然 AFNetworking 还在更新,但其更新的周期实在是让人摸不着头脑,相比于 Alamofire 稳定的更新频率,你到底愿意用哪一个呢?

举个实际的例子,好比你们都是作 HTTP 请求的,3.0 协议已经发出,从社区的反馈来看,将来的开发者更愿意把精力放在 Swift 上面,如今 SSL Certificate Verify 的验证,是能够把证书链从上至下所有验证一遍,这在 Alamofire 里已经支持的很是好,而 AFNetworking 在此领域目前是缺失的。

这就有可能在将来的某个时间点,工程所依赖的,第三方的,不可替换的,核心的开发框架有严重的问题或者功能缺失时,项目的进度会受影响,做为开发者会陷入进退两难的情况。

Apple 的 SDK

在 Apple 的 Apple Developer Documentation 列表[7] 中,咱们发现共有 196 个条目,其中 Swift 独占的 SDK 共计 10 个,Objective-C 独占的 SDK 共计 14 个。

维度 个数 SDK 名称
Swift 独占 10 Swift(Swift Standard Library),Combine,SwiftUI,RealityKit,CareKit,Create ML(Create ML, Create MLUI),Playground Support,PlaygroundBluetooth,Apple CryptoKit,Swift Packages(Swift Package Manager)
Objective-C 独占 14 QTKit (macOS 专属),Professional Video Applications(FxPlug,macOS 专属),xcselect (macOS 专属),DarwinNotify,DriverKit(macOS 专属),EndpointSecurity(macOS 专属),HIDDriverKit(macOS 专属),IOUSBHost(macOS 专属),Kernel(macOS 专属),NetworkingDriverKit(硬件驱动相关),PCIDriverKit(硬件驱动相关),SerialDriverKit(硬件驱动相关),USBDriverKit(硬件驱动相关),USBSerialDriverKit(硬件驱动相关)

虽然乍一看 Objective-C 独占的 SDK 较多,但这些 SDK 主要是面向 macOS 和硬件驱动方向的,对 iOS 开发自己没有任何影响。

而 Swift 独占的 SDK 就彻底不同了, Apple 这些年主推的技术方向,例如 AR,AI,Health,SwiftUI,Combine 等一系列 SDK 都只有 Swift 的版本了,这无疑在暗示开发者:来吧,用就用 Swift 吧!

Swift 在国内外 iOS 客户端的使用现状

说了这么多,Swift 在 iOS 生态里到底用的怎么样?最直接的办法就是看看它在 Apple Store 里的占有率,这里咱们会考察 2019 和 2020 年的状况。

2019 年

很庆幸,这部分工做,淘宝团队已经作过了!

相关的内容在 从探索到落地,手淘引入 Swift “历险记” 2019 一文中已经披露,这里借用它们原话:

咱们经过爬虫分析国内外 APP Store 排行榜 Top 1000 的 APP,经过文件扫描分析获得结论。

  • 国内使用 Swift 的 APP 约占比 22%,美区使用 Swift 的 APP 约占比 78%,其中美区剩余没有使用 Swift 的 APP 大部分来自中国地区本地化的产品,如抖音,快手等,能够得出一个结论,国内仍是小众的 Swift,在国外已是现状。
  • Github/Stack Over Flow 社区等 Objective-C 开源库和问题提问已经基本停滞,将来咱们在落地新技术,Objective-C 可能已是最坏的打算,加之 WWDC 17 年以来,苹果再也不提供 Objective-C 的示例,组内同窗也屡次碰见 Objective-C Bug 去社区提问,毫无热度的状况。
  • 苹果在 WWDC19 年发布了 4 个 Pure Swift 框架,没法简单的被 Objective-C 混编。

将来咱们极有可能由于苹果的强制推动风格和社区文化的落后产生技术踏空,没法迅速响应业务,甚至没法招聘到会使用 Objective-C 的工程师。

IMAGE

经过了解,淘宝的数据来源是七麦数据提供的,日期为 2019 年 02 月 19 日,国内排行榜传送门 2019 版[8]国外排行榜传送门 2019 版[9]

2020 年

如今回到 2020 年,Swift 在国内外的应用状况又发生了什么变化呢?

为了获得这个问题的答案,我也打算对国内外免费榜里的 APP 进行扫描,先不说 1000 个 ipa 的下载工做量有多大,256G 的硬盘估计也装不下这么多 APP,索性就弄前 102 名吧!

原本是想作前 100 的,只是由于当时下载国内 ipa 的时候多下载了 2 个,索性本着样本越多越接近真实状况的道理就把国外的数据量也放到了 102 个,并无什么特别缘由。

扫描的原理借鉴了 如何检测 iOS 应用程序是否使用 Swift?[10]便可,这里要感谢一下好基友 @ForelaxX[11] 制做了这个脚本工具。

App 排行榜的数据来源是七麦数据提供的,日期为 2020 年 4 月 27 日,国内排行榜传送门 2020 版[12]国外排行榜传送门 2020 版[13]

经过扫描这 102 个 App,最终发现国内的 Swift 占比为 30.4%(31/102),国外的 Swift 占比 82.3%(84/102),相比于 2019 年的数据,国内的 Swift 应用增加了 10% 左右,国外的 Swift 应用增加了 5% 左右。

IMAGE

下图是结合 2019 年和 2020 年的百分比趋势变化图

IMAGE

下面是扫描的详细结果:

国内 App 版本 是否使用 Swift 国外 App 名称 是否使用 Swift
拼多多 NO Zoom NO
腾讯会议 NO TikTok NO
钉钉 NO Houseparty YES
我的所得税 NO Youtube NO
剪映 YES Instagram YES
交管 12123 NO Facebook NO
抖音 NO Messenger NO
微信 YES Amazon NO
微视 YES Cash App YES
支付宝 NO DoorDash YES
QQ NO American Idol YES
快手极速版 NO Netflix YES
手机淘宝 YES Snapchat YES
淘宝特价版 NO PREQUEL YES
企业微信 NO Gmail YES
快手 NO Wish YES
和平营地 NO Hulu YES
QQ 音乐 NO Disney+ YES
百度 YES Shop YES
闲鱼 NO Pinterest NO
网易云音乐 NO Amazon Prime Video YES
腾讯视频 NO PayPal YES
高德地图 NO Spotify YES
酷狗音乐 NO Google Duo YES
小红书 YES Discord YES
美团 NO Venmo YES
京东 NO Wayfair YES
夸克 NO Walmart YES
哔哩哔哩 NO Twitter YES
瑞幸咖啡 YES WhatsApp YES
爱奇艺 NO Twitch YES
BOSS 直聘 NO SHEIN YES
云闪付 NO Google Chrome NO
百度网盘 YES Roku YES
中国建设银行 NO intoLive YES
阿里巴巴 NO Nike YES
WPS Office NO PicsArt YES
58 同城 NO Google YES
Keep YES Calm YES
微博 NO eBay YES
闽政通 YES Norton Secure YES
QQ 浏览器 NO Airtime YES
中国工商银行 YES YEE YES
美图秀秀 YES Omegle YES
安居客 NO Google Driver YES
七猫小说 YES Tinder YES
贝壳找房 NO Target YES
农行掌上银行 NO Google Map NO
京东金融 NO OfferUp YES
轻颜相机 YES Grubhub YES
番茄小说 NO Google Photos YES
FaceApp YES Yubo YES
得物 YES Google Classroom YES
优酷视频 NO YOLO YES
秘乐短视频 YES Pandora YES
网上国网 NO Fonts YES
哈罗出行 NO Uber Eats YES
中国银行手机银行 YES Mercari YES
好省 YES Reddit YES
喜马拉雅 NO SoundCloud YES
WIFI 万能钥匙 NO Hangouts Meet YES
扫描全能王 NO Google Docs NO
UC 浏览器 NO Instacart YES
驾考宝典 NO Fitness Coach YES
天眼查 NO PictureThis NO
人人视频 NO Xbox YES
QQ 邮箱 NO Tubi YES
淘宝直播 NO VideoToLive YES
西瓜视频 NO Amazon Photos YES
最珠海 NO Zillow YES
办事通 NO Robinhood YES
知乎 YES Hangouts YES
搜狗输入法 NO News Break YES
菜鸟裹裹 NO Enlight Video NO
招商银行 NO Youtube Music YES
苏宁易购 NO letgo YES
美团外卖 NO InShot NO
学习强国 NO Fetch Rewards YES
饿了么 NO Splice YES
全民 K 歌 NO Postmates YES
今日头条 NO ESPN YES
识货 YES Duolingo YES
懂车帝 YES Quibi YES
全球骑士特购 NO Amazon Music YES
Facetune2 YES Audible YES
中国联通 YES Microsoft Outlook YES
平安好车主 NO Esty YES
腾讯新闻 NO SONIC Drive-in YES
醒图 YES Funimate Video YES
酷狗铃声 NO Telegram YES
百度地图 NO Instacart Shopper YES
探探 YES AliExpress Shopping NO
多闪 NO YouTube Studio NO
中国移动 NO Miscorsoft Teams YES
做业帮 NO PlayStation NO
邮政手机银行 NO Bumble YES
Zoom NO Messenger Kis NO
滴滴 YES Facetune2 YES
智联招聘 YES Hoop YES
虎牙直播 NO TextNow YES
芒果 TV YES Vinkle YES
百度贴吧 YES McDonald's YES

经过这组数据,咱们能够分析出不少有意思的东西

首先,BAT 三巨头的门户 APP 都已经具有了 Swift 混编的能力,例如百度系的百度主 App,百度网盘,百度贴吧,阿里系的手淘,芒果视频,腾讯系的微信,微视

其次,国内的独角兽巨头们[14],彷佛也作好了迎接 Swift 的准备,例如字节跳动(剪映,飞书),滴滴出行,自如,网易,小红书,获得,瑞幸咖啡,猿题库,英语流利说等。

最后,一个有意思的现象是,我发现国外 Top 102 的 ipa 总大小为 10G,而国内 Top 102 的 ipa 总大小将近 24G,不知道这是否是用 Swift 编写代码为包大小带来的正向收益,仍是咱们 ”CMD+C 和 CMD+V“ 的代码复用机制形成的。

总结与展望

作完这个调研,能得出什么结论呢?

  1. 综合 Swift 的发展历史,语言排名,社区活跃度等因素来看,Swift 的发展是处于上升趋势的,可能相比于一些明星语言和明星技术热点,它的表现不是那么突出,但总趋势上升是不能否认的,这一样适用于 Objective-C 的总趋势降低。
  2. Apple 应该会继续增长 Swift 语言在其生态圈的重要性并进行相应的战略部署,即便 Swift 语言还没彻底达到 Module Stability,但从推出的 Swift 独占 SDK 已经看出了他们的想法。
  3. 国内外各个互联网厂商在转向 Swift 的道路上已经走起来了,即便国内的占比还落后于国外,但总的趋势和涨幅势头已经十分明显了,以 BAT 为首的大部分互联网公司已经完成了 Swift 的混编工做,尤为是它们旗下的明星 App 已经接入了 Swift。

拿着这些结论来看看你们平日里对 Swift 的印象,咱们又发现了哪些不同的地方呢?

虽然国内 iOS 圈里常有人说”Swift 无用“,”Swift 火不了“,”咱们不须要用 Swift 开发“,但冷静的分析下来,国内的各大厂商真的抛弃 Swift 了么?

经过这份真实的数据,我想答案很明显,它们都没有放弃 Swift,并且都在积极的作准备,这就很像嘴上说着不要不要,但身体却出卖了本身。

国外的 Swift 氛围不用多说,你们都已经能够看出谁会是 iOS 端上将来的主角。这里咱们就说说国内的状况:

咱们都知道,淘系的主 App ---- 手机淘宝在今年完成了 Swift 混编能力的建设,这意味着什么?对于淘系 App 来讲,这么庞大,复杂的工程都已经具有了混编的能力,那么阿里旗下的其他 App 转型将再也不有什么逾越不了的鸿沟。

号称 App 工厂的字节跳动,在很早就尝试了 Swift 的混编开发,早期还限定在一些小型的项目,如今它们已经具有了中大型项目的 Swift 混编能力,这一点能够在它们的海外明星应用 Helo 上的获得验证,目前这款 App 在字节跳动内部的排名已经跻身到前 5 名了,另外从一些渠道得知,它们的明星应用 - 今日头条也将在近期开展 Swfit 混编能力的建设。

而国内那些还在高速发展的公司,例如美团,京东,拼多多,快手等公司,在 Swift 上的探索还显得比较落后,可能还停留在一些小型内部应用或者 B 端的应用上,甚至也有可能彻底没有开展过相关的工做。

这么看来,国内厂商的 Swift 格局已经十分清晰,大致会呈现三个梯队

第一梯队:以 BAT 为表明的顶端团队已经解决了复杂的,巨型的,历史包袱重的工程项目如何使用 Swift 的问题,对他们而言,将来的问题就是怎么将 Swift 用到真正的业务代码上了,玩的好,玩的溜的将是它们要关注的问题了。

第二梯队:以字节跳动,网易为表明的一些公司,已经解决了部分 Swift 混编的问题,对于其内部工程复杂度最高,历史包袱最重的 App 尚未实现混编的能力,例如字节跳动的 Helo 和抖音,网易的网易公开课和网易云音乐,这些公司在近期面临的问题可能会是如何解决混编。

第三梯队:以美团,京东为表明的一些公司,在这方面尚未开展相应的工做或者开展的还比较少,他们目前可能更关注的仍是在解决自身业务发展的问题,例如动态化,中台建设,容器化等方面的技术积累与战略部署。

无论怎么看,Swift 在国内的发展既不是彻底停滞,也不是无人问津,只是真正玩的人比较“低调”而已,但该来的必定会来。

不知道看完这篇文章,你认为 Swift 在国内的发展会是什么样子呢?

参考资料

[1]

Document Revision History: https://docs.swift.org/swift-book/RevisionHistory/RevisionHistory.html

[2]

Xcode Release Notes: https://developer.apple.com/documentation/xcode_release_notes

[3]

在分歧中发展——2019,咱们能用 Swift 作什么: https://gmtc.infoq.cn/2019/beijing/presentation/1802

[4]

TIOBE: https://www.tiobe.com/tiobe-index/

[5]

PYPL: http://pypl.github.io/PYPL.html

[6]

Githut: https://madnight.github.io/githut/#/stars/2020/1

[7]

Apple Developer Documentation列表: https://developer.apple.com/documentation

[8]

国内排行榜传送门2019版: https://www.qimai.cn/rank/index/brand/free/device/iphone/country/cn/genre/5000/date/2019-02-19

[9]

国外排行榜传送门2019 版: https://www.qimai.cn/rank/index/brand/free/device/iphone/country/us/genre/5000/date/2019-02-19

[10]

如何检测 iOS 应用程序是否使用 Swift?: https://mp.weixin.qq.com/s/vF_oOWFLimlyRi4mZpgpeQ

[11]

@ForelaxX: https://github.com/ForelaxX

[12]

国内排行榜传送门2020版: https://www.qimai.cn/rank/index/brand/all/device/iphone/country/cn/genre/5000/date/2020-04-27

[13]

国外排行榜传送门2020版: https://www.qimai.cn/rank/index/brand/all/genre/5000/device/iphone/country/us/date/2020-04-27

[14]

独角兽巨头们: http://www.199it.com/archives/864570.html




往期推荐

一次让刷新控件好玩起来的尝试

《从一到无穷大》中的程序思惟

立志欲坚不欲锐 - 2019 年小结



本文分享自微信公众号 - 一瓜技术(tech_gua)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索