Swift 2021 生态调研报告
共 17388字,需浏览 35分钟
·
2021-07-17 01:36
回顾 2020
在去年的《一次关于 Swift 在 iOS 生态圈里的现状调研》一文中, 我们分析了整个大环境的现状,在文章发表后得到了大家的广泛关注,时隔一年,我们再来看看有什么变化吧?
Swift 语言
版本变化
首先从去年的 5.2 版本,到现在即将发布 5.4 版本,Swift 经历了 2 个小的版本变化,分别是 5.3 和 5.4
其中 5.3 版本给出了以下几个语言特性:
SE-0276[1]:catch 语句在捕获 error 的时候,可以更加灵活自由,例如一次捕获多个 error 或者对 error 的值进行绑定。 SE-0279[2]:支持多个尾随闭包,这个特性主要是为 SwiftUI 准备的。 SE-0266[3]:enum 支持 comparable 协议,并根据顺序自行决定大小 SE-0269[4]:在某些场景下可以避免 self 关键字的声明 SE-0281[5]:通过 @main
关键字定位程序入口SE-0267[6]:在函数的泛型和扩展中就可以使用包含 where
关键字的语句SE-0280[7]:protocol witness 匹配模型在枚举值中的加强 SE-0277[8]:新增 Float16 的数据类型 SE-0268[9]:didSet 方法优化和语义更新 首先在 SE-0271[10] 中,Swift Package Manager 在资源文件的支持上有了进一步的提升,同时,在 SE-0278[11] 中,SPM 对本地化资源的支持也有了改进,而且在 SE-0272[12] 中,SPM 终于支持了二进制形式的组件。在 SE-0273[13],SPM 允许我们对特定的 target 进行特殊的依赖配置。
其中在未来的 5.4 版本又新增了以下几个语言特性:
SE-0287[14]:提升了隐式成员表达式的类型推断能力。 SE-0284[15]:在函数中可以定义多个可变参数。 SE-0289[16]:在 5.1 就公布的 Function Builder 功能正式命名为 Result Builder,并在原先的基础上进行了完善。 SR-10069[17]:嵌套函数支持重载 SE-0294[18]:新增 executable 类型的 target,使得 SE-0281[19] 新增的特性更易于使用。 property wrapper 除了可以作为属性外,还可以在函数里作为本地变量。
On the road to Swift 6
在 2021 年的 1 月,Swift 社区的 Ted Kremenek[20],他的另一个身份是 Manager of the Languages and Runtime Team @Apple,在 swift.org forum[21] 公布了一则名为《On the road to Swift 6》[22]的文章
在这篇文章里,提到了一些对 Swift 6 的规划,从大方向来说,Ted 提了三点:
加速整个 Swift 软件生态的发展:包含兼容更多的开发平台,简化软件的安装部署和大力发展各类工具库。 打造极致的开发体验:包括更快的构建速度,更好用的调试工具,更灵敏的代码补全和更丰富的诊断信息。 结合开发者的反馈进一步发展语言特性:包括完善 API 的设计,拓展其在底层系统,服务器和机器学习方面的应用场景,同时对某些主流的语言特性提供支持,例如并发特性和内存相关的特性。
同时 Swift 的核心团队也发生了一些变化,Saleem Abdulrasool[23] 和 Tom Doron[24] 作为新成员加入到核心团队,而 [Dave Abrahams] 则退出了核心团队。
这里稍微提一下的,Tom 是 SwiftNIO 的核心开发,同时在 SSWG(Swift Server Work Group) 项目中也是主要的发起者,而 Saleem 是 Swift to Windows 的核心发起者,这两个变动结合着最开始的三个大方向,可以看出整个核心团队是言行一致的。
另外关于 Swift 6 的公布时间,Ted 的原话是这样的:
Instead of announcing a specific timeline for “Swift 6”, the plan is for the community to be a part of seeing these efforts progress, with focused efforts and goals, and we release Swift 6 when those efforts culminate.
所以这样看来,Swift 6 还是有一段时间才能与我们见面,毕竟人家说了 when those efforts culminate!
那反过来看,Swift 5 还将会是近期使用的主要版本。(PS:希望今年的 WWDC 21 不要被打脸)
技术社区
语言排行榜
同样我们来看一看编程语言排行榜 TIOBE[25] 和 PYPL[26] 的情况,在 TIOBE 的排行榜中,Swift 在今年的排名是第 15 名,而 Objective-C 已经彻底排在了 20 名之外了。
而在 PYPL 的排行榜中,Swift 和 Objective-C 的热度还是较为接近的。
从社区的语言排行榜来看,虽然乍一看,感觉还是 Swift 和 Objective-C 共存的大环境,但其实背后也反映出,Swift 已经被大部分开发者所接受了。
社区活跃度
同样通过 GitHut 2.0[27] 这个工具对 GitHub 进行分析。
下面四张图的 Y 轴分别代表了 Pull Requests ,Pushes,Stars,Issues 的数量,蓝色的线代表 Objective-C ,浅橙色的线代表 Swift。
可以发现,在 Pull Request 方面,Swift 占比约 0.595%,而 Objective-C 占比约 0.335%
同时 Push 方面,Swift 占比约 0.476%,而 Objective-C 占比约 0.310%
在 Stars 方面,Swift 占比约 2.107%,而 Objective-C 占比约 1.067%
在 Issue 方面,Swift 占比约 0.767%,而 Objective-C 占比约 0.607%
总的来看,在 GitHub 的大环境中,社区中的开发者还是持续看好 Swift,也相对更加活跃,尤其在 Star 这项指标上可以明显看出,它高出了 Objective-C 近一倍!
商用 SDK 的技术选型
在今年我们还发现了一些有意思的现象,不少商用 SDK 也开始了 Swift 的迁移。
例如国外的 Nordic Semiconductor[28] 公司,它是北欧的一个半导体公司,主营蓝牙芯片,在业界属于领先地位,不少使用它家芯片的团队会涉及到固件升级问题,无线的升级方案需要进行固件传输、校验、升级管理等动作,而这些动作都得使用它们家提供的 SDK 来完成。
在 Nordic Semiconductor 的 GitHub 页面[29]上,我们可以看到目前提供的商用 SDK 中,iOS 端只有 Swift 版本[30],而 Android 端只有 Java 版本[31]。
同时像 Google 的 Firebase 在其 RoadMap[32] 里也明确指出了将更加关注 Swift 的使用体验并开始了部分改造。
相信不久的将来,会有越来越多的厂商加入到 Swift 的社区中,除了 Swift 是未来
这样人人都懂的道理以外,这两年新增的特性,例如 ABI 稳定,Module 稳定,以及 SPM 对 binary 组件的支持,都会导致厂商的态度改变,尤其是那些需要使用非源码形式发布组件的厂商,毕竟这些特性从根本上解决他们面临的工程问题。
Apple 生态
SDK 能力
同样,我们继续分析了 Apple Developer Documentation[33] 下的 239 个 主题,发现今年的 Swift 独占和 Objective-C 独占的 SDK 情况如下
维度 | 个数 | SDK 名称 |
---|---|---|
Swift 独占 | 13 | Swift(Swift Standard Library),Combine,SwiftUI,RealityKit,CareKit,Create ML(Create ML, Create MLUI),Playground Support,PlaygroundBluetooth,Apple CryptoKit,Swift Packages(Swift Package Manager),Developer Tools Support,System,WidgetKit |
Objective-C 独占 | 12 | DarwinNotify,DriverKit(macOS 专属),EndpointSecurity(macOS 专属),HIDDriverKit(macOS 专属),Kernel(macOS 专属),NetworkingDriverKit(硬件驱动相关),PCIDriverKit(硬件驱动相关),SerialDriverKit(硬件驱动相关),USBDriverKit(硬件驱动相关),USBSerialDriverKit(硬件驱动相关),xcselect (macOS 专属),SCSIControllerDriverKit |
在 Swift 独占方面,新增了 3 个 SDK,分别是 Developer Tools Support,System,WidgetKit,其中 System[34] 是个用于进行底层文件操作(low-level file operation)的库,似乎这也是 Apple 的首个用 Swift 编写的系统底层库(PS:如果说的不对,还请各位读者指正);另外一个想说的重点就是 WidgetKit[35],这也是首次 Apple 在推广系统新特性的时候强制要求开发者必须使用 Swift 技术,这个策略我认为还是十分高明的,它为 Swift 技术的推广和应用找到了新的出路。
同时 Objective-C 独占方面,新增了一个 SCSIControllerDriverKit[36],但相比于去年,Professional Video Applications[37] 和 IOUSBHost[38] 两个 Objective-C 独有的 SDK 被改造成了 Swift 和 Objective-C 都可以使用的情况,而 QTKit 被彻底废弃了。
至此,我们发现了,Swift 独占库的数量首次大于了 Objective-C 的独占库,是不是很有意思!
原生 App 分析
国外的开发者 Timac[39] 在其文章《Apple’s use of Swift and SwiftUI in iOS 14》[40]里对 iOS14 中的 Swift 和 SwiftUI 的使用情况进行了分析。
iOS 14.0 包含了 291 个使用 Swift 技术的二进制文件(PS: 还有一个统计口径是 351 个,不过这里面有很多程序对 Swift 的使用很初级,所以 Timac 就将其排除了),这个数量比 iOS 13 多了一倍以上,另外 Swift UI 也在 iOS 14 上被广泛使用,目前已经有 43 个了,其中去年新增的翻译应用是完全使用 Swift 和 SwiftUI 编写的 App。
iOS 中不同编程语言的发展
Timac 在其文章《Evolution of the programming languages from iPhone OS 1.0 to iOS 14》[41]给出了很多有意思的结论。
首先,在 iOS 14 中,总共有 4173 个二进制文件,具体的列表可以参考 iOS 14.0 (18A373) 统计[42],其中:
88% 使用 Objective-C 17% 使用 C++ 8% 使用 Swift 8% 全部使用 C 1% 使用 SwiftUI
下面的图是 iPhone OS 1.0 到 iOS 14.0 中,各个二进制文件的情况,注意这里的二进制文件可以包含多个语言,所以下表的总数可能会大于二进制的总数,例如 iOS 14.0 里 44 + 351 + 337 + 708 + 3667 > 4173
从这个视角来看,也可以得出几个有意思的结论:
首先,iOS 的每个版本都变得更加复杂 Swift 的使用在不断增多,而且至少目前来看,Swift 的使用已经超过了 C Objective-C 的增长还是比较稳定的 C++ 的增长比较缓慢,或者说相当缓慢 C 的增加几乎没有变化
如果上面的图看起来不明显,我们可以通过这个图来看趋势。
当然上面的分析是基于数量来进行的,那么如果我们从体积上进行分析,也就是二进制大小的角度来看,又会得出怎样的结论呢?
Timac 在其文章《Comparing iPhone OS 1.0 with iOS 14 using tree maps》[43]里,也给出了一些自己的解读。
下面是 Timac 根据相关的数据和脚本绘制出来的 iOS 14 的 tree map(矩形式树状结构绘图法)[44]
其中 Preinstalled Assets 和 Linguistic Data 是与机器学习相关的预置资源 Health 相关的内容在 iOS 14 的占比不算小,可以看出其重视程度 在 iOS 3.1 之后,提供了 dyld shared cache 技术,红色区域就是支持这个特性的 framework。
当然,Timac 对这个结果又进行了更细致的划分,它的结果如下
这里我们从二进制的大小,或者代码量的多少来考察某个系统功能的重要性,我们可以明显的看到,Apple 的人工智能推动了设备上的机器学习,如图像和视频中的物体检测、语言分析、声音分类和文本识别等技术。
所以如果未来想继续在 iOS 上开发的话,机器学习可能会是一个必备的基础知识了(PS:如果你开发过 IntentConfiguration[45] 类型的小组件,我想你大概就明白我在说什么了)。
国内外客户端的使用现状
数据样本
去年我们分析了国内外 App 使用 Swift 的情况,今年我们继续走起。
扫描的原理借鉴了《如何检测 iOS 应用程序是否使用 Swift?》[46],这是我和好基友 OneeMe[47] 一起编写的。
App 排行榜的数据来源是 七麦数据[48] 提供的,日期为 2021 年 3 月 21 日,国内免费应用 Top 100 榜单[49] 和 国外免费应用 Top 100 榜单[50]
下面是扫描的结果:
序号 | 国内 App 版本 | 是否使用 Swift | 国外 App 名称 | 是否使用 Swift |
---|---|---|---|---|
01 | 搜狗输入法 | NO | YES | |
02 | 百度地图 | YES | Uber | YES |
03 | 招商银行 | YES | Fontise | YES |
04 | 优酷 | YES | Prime Video | YES |
05 | QQ 浏览器 | NO | Nike | YES |
06 | QQ 音乐 | YES | Dasher | YES |
07 | 肯德基 | YES | Capital One | YES |
08 | 抖音极速版 | NO | PayPal | YES |
09 | 中国建设银行 | YES | Twitch | YES |
10 | 饿了么 | NO | Telegram | YES |
11 | 携程旅行 | YES | Translate | YES |
12 | 闲鱼 | NO | TV Remote | YES |
13 | 汽车之家 | NO | Life360 | YES |
14 | WiFi 万能钥匙 | YES | Google Photos | YES |
15 | 微视 | YES | Walgreens | YES |
16 | 菜鸟 | YES | YES | |
17 | 高德地图 | NO | Vrbo | YES |
18 | 知乎 | YES | Chase | YES |
19 | 手机营业厅 | YES | Starbucks | YES |
20 | 国家反诈中心 | NO | Pandora | YES |
21 | 58 同城 | YES | Google Docs | NO |
22 | 淘宝特价版 | NO | Waze | YES |
23 | UC 浏览器 | NO | Credit Karma | YES |
24 | 小红书 | YES | MM Live | YES |
25 | 微博 | NO | YES | |
26 | 芒果 TV | NO | Amazon Alexa | YES |
27 | 天眼查 | NO | Snapchat | YES |
28 | 驾考宝典 | NO | Coinbase | YES |
29 | 探探 | YES | Xbox | YES |
30 | 个人所得税 | NO | ClassDojo | YES |
31 | 腾讯地图 | NO | Walmart | YES |
32 | SOUL | YES | Google Maps | NO |
33 | 美柚 | YES | PicsArt | YES |
34 | 轻颜相机 | YES | Chrome | NO |
35 | BOSS 直聘 | NO | Hulu | YES |
36 | 快手极速版 | YES | Outlook | YES |
37 | 作业帮 | YES | Disney+ | YES |
38 | 美图秀秀 | YES | CapCut | YES |
39 | Chrome | NO | Booking.com | YES |
40 | 迅雷 | YES | YES | |
41 | 贝壳找房 | YES | Zelle | YES |
42 | WPS Office | YES | Messenger | NO |
43 | 百度网盘 | YES | SHEIN | YES |
44 | 美团外卖 | NO | Google Duo | YES |
45 | 番茄小说 | NO | Zoom | NO |
46 | 中国工商银行 | YES | Roku | YES |
47 | 快手 | YES | Target | YES |
48 | 美颜相机 | YES | YES | |
49 | 七猫小说 | YES | Grubhub | YES |
50 | 滴滴出行 | YES | Postmates | YES |
51 | 微信 | YES | PS App | YES |
52 | 韩剧 TV | YES | Tinder | YES |
53 | 酷狗音乐 | NO | Hopper | YES |
54 | 唯品会 | YES | Shazam | YES |
55 | 爱奇艺 | YES | Itsme | YES |
56 | 哔哩哔哩 | YES | Bird | YES |
57 | 阿里巴巴 | NO | Uber Eats | YES |
58 | 京东金融 | NO | Netflix | YES |
59 | 醒图 | YES | Domino's | YES |
60 | 网易云音乐 | YES | Arch-US | YES |
61 | 支付宝 | YES | DoorDash | YES |
62 | 转转 | YES | Fetch Rewards | YES |
63 | 叮咚买菜 | YES | CBS Sports | YES |
64 | 今日头条 | YES | Shop | YES |
65 | 邮储银行 | NO | Spotify | YES |
66 | 懂车帝 | YES | TikTok | YES |
67 | 夸克 | YES | Lyft | YES |
68 | 美团 | NO | SoundCloud | YES |
69 | 喜马拉雅 | YES | WOMBO | YES |
70 | 得物(毒) | YES | Zillow | YES |
71 | 中国农业银行 | NO | TextNow | YES |
72 | QQ 邮箱 | YES | HBO Max | YES |
73 | 钉钉 | NO | Discord | YES |
74 | 百度 | YES | Amazon Music | YES |
75 | Top Widgets | YES | YES | |
76 | Keep | YES | Google Drive | YES |
77 | 全民 K 歌 | NO | Airbnb | YES |
78 | 哈罗出行 | NO | Tubi | YES |
79 | 中国银行 | YES | Etsy | YES |
80 | Days Matter | YES | IRL | YES |
81 | 新氧医美 | NO | Yelp | YES |
82 | 安居客 | YES | Peacock | YES |
83 | 企业微信 | NO | YouTube Music | YES |
84 | 中国移动 | YES | Venmo | YES |
85 | 手机淘宝 | YES | ESPN | YES |
86 | 云闪付 | NO | IRS2Go | NO |
87 | NO | Ring | YES | |
88 | 交管 12123 | NO | Wish | YES |
89 | 拼多多 | YES | ESPN | YES |
90 | 京东 | YES | Gmail | YES |
91 | 好看视频 | YES | Amazon | NO |
92 | 铁路 12306 | NO | Robinhood | YES |
93 | 大麦 | YES | YouTube | NO |
94 | 大众点评 | NO | YES | |
95 | 酷狗铃声 | NO | OfferUp | YES |
96 | 抖音 | NO | Musi | NO |
97 | 剪映 | YES | Widgetsmith | YES |
98 | 货拉拉 | NO | eBay | YES |
99 | 腾讯会议 | NO | Chick-fil-A | YES |
100 | 腾讯视频 | NO | Cash App | YES |
在 GitHub 上,其实还有一份统计数据 Snake List[51],是 Flexih[52] 统计的,除了 Swift 技术外,还统计了 Weex,React Native,Flutter 等技术的情况,大家可以作为参考。
2021 年
在国外 Top 100 的免费应用中,Swift 混编占比 91%。
在国内 Top 100 的免费应用中,Swift 混编占比 59%。
在之前的文章中,《一次关于 Swift 在 iOS 生态圈里的现状调研》,我们也整理过一些数据。
在 2019 年,国内的 Swift 混编应用占比为 22%,国外的 Swift 混编应用占比 78%, 在 2020 年,国内的 Swift 混编应用占比为 30.4%,国外的 Swift 混编应用占比 82.3%。
如果将近几年的数据连着看,Swift 在国内外的变化趋势如下图所示:
数据解读
纯看数据的话:
在国内,Swift 混编占比达 59%,较去年的 30%,又增长了 29%,整体占比也已经过半了! 在国外,Swift 混编占比 91%,较去年的 82.3%,又增长 9%,纯 Objective-C 的应用也只有个位数占比了。
那么我们再分析一些数据背后的内容:
从表面看,除了去年提到的 BAT 之外,今日头条,快手,滴滴,支付宝,京东,拼多多等一众应用也都在今年完成了 Swift 的初体验,比较有意思的是美团系的应用(美团,大众点评,美团外卖)目前似乎还没有任何动静。 虽然国内的 Swift 混编占比变高,但我个人认为,这并代表国内大部分公司要开始转型 Swift 技术了,这样的变化,主要是因为去年 Apple 新增的 Widget 技术导致的,因为想开发 Widget 必须使用 Swift 相关的技术,而上面提到的各个应用,大多都提供了相应的小组件。 如果历史有可以借鉴的地方,那么 2021 年的国内 Swift 占比(59%)与 2019 年的国外占比(78%)还算比较接近,至少不像去年(30% 和 82.3%)的差距那么大,那么按照这个趋势发展的话,我们是否可以预言在未来的 3-5 年内,国内的 Swift 混编应用占比也将达到 90% 左右?
PS:在写这篇文档的时候,发现微博也支持小组件了,所以估计上面的这个数据又得增加 1% 了。
总结与展望
在做完了今年的调研后,我们能得出什么结论呢?
虽然看起来现阶段的 Swift 还是在一个积累的过程,但随着 WidgetKit 这个标志性的 SDK 诞生,我相信这个发展阶段会从积累阶段慢慢转向发展期,毕竟现在 ABI 稳定了,Module 稳定了,对二进制组件的支持也有了,还有 Swift 语言本身的版本变化也逐渐稳定了,这些都给与了 Swift 很好的支持。 Swift 的发展方向绝不只是为了 Apple 生态体系内的那点事儿,这个从社区的规划也好,从 Timac 的那几篇分析文章也好,我们都可以看出它在多元发展上的决心,Swift 真的很想破圈。 国内的 Swift 发展被去年的 iOS 14 新特性给盘活了,WidgetKit 功不可没,虽然还不能给出大部分公司都将转型的结论,但至少绝大部分互联网的头部公司已经兼容了 Swift 的开发,这是一个好的开始,相信在可见的未来,Apple 的转型决心必然会让国内的公司会更加重视这方面工作的重要性。
在最后,我来说说这一年的一些其他见闻:
虽然不久前 Google 归档了 Swift for TensorFlow[53] 项目,让很多人看衰 Swift 在机器学习或者人工智能方面的发展,但其实我觉得是有点没必要,Swift 在这方面的发展其实并不依赖 Google,Apple 自己在这方面就很有建树,如果感兴趣应该看看 Machine Learning Research at Apple[54] 这个网站,这才代表 Apple 和 Swift 在机器学习方面的真实水平。
另外,虽然还是能在某些技术群里看到 "Swift 无用","Swift 火不了","我们不需要用 Swift 开发" 的字眼,但这样的数量相比于前几年而言,真的越来越少了。
另外据我所知,字节跳动的抖音团队会在 2021 年的 Q2 季度全部迁移成 Swift 技术栈,这个迁移不仅是上层的业务变动,似乎也包括了底层的基础库,这意味着他们在不远的未来将会统一使用 Swift 进行开发;同时,我也听说了快手团队正在大力发展 Swift 方面的建设。
虽然这只是国内诸多公司的个例,但我相信随着这些头部大厂的加入,Swift 成为原生开发的主流趋势会在国内越来越明显,当然不得不承认,跨端技术在国内也有着极大的市场份额,所以估计未来作为 iOS 端上的程序员,可能要具备 Objective-C,Swift,JavaScript/TypeScript 和 Flutter 的语言技术栈。
好了,今年的调研报告就到此结束了,我们明年见!
参考文档
SketchK - 一次关于 Swift 在 iOS 生态圈里的现状调研 Paul Hudson - Hacking with Swift - What’s new in Swift 5.3?[55] Paul Hudson - Hacking with Swift - What’s new in Swift 5.4?[56] Swift.org forum - On the road to Swift 6[57] TIOBE[58] PYPL[59] GitHut 2.0[60] Apple - Apple Developer Documentation[61] Timac - Comparing iPhone OS 1.0 with iOS 14 using tree maps[62] Timac - Evolution of the programming languages from iPhone OS 1.0 to iOS 14[63] Timac - Apple’s use of Swift and SwiftUI in iOS 14[64] Timac - 如何检测 iOS 应用程序是否使用 Swift? OneeMe - Swift App Analyzer[65] Flexih - Snake List[66] Apple - Machine Learning Research at Apple[67]
参考资料
SE-0276: https://github.com/apple/swift-evolution/blob/master/proposals/0276-multi-pattern-catch-clauses.md
[2]SE-0279: https://github.com/apple/swift-evolution/blob/master/proposals/0279-multiple-trailing-closures.md
[3]SE-0266: https://github.com/apple/swift-evolution/blob/master/proposals/0266-synthesized-comparable-for-enumerations.md
[4]SE-0269: https://github.com/apple/swift-evolution/blob/master/proposals/0269-implicit-self-explicit-capture.md
[5]SE-0281: https://github.com/apple/swift-evolution/blob/master/proposals/0281-main-attribute.md
[6]SE-0267: https://github.com/apple/swift-evolution/blob/master/proposals/0267-where-on-contextually-generic.md
[7]SE-0280: https://github.com/apple/swift-evolution/blob/master/proposals/0280-enum-cases-as-protocol-witnesses.md
[8]SE-0277: https://github.com/apple/swift-evolution/blob/master/proposals/0277-float16.md
[9]SE-0268: https://github.com/apple/swift-evolution/blob/master/proposals/0268-didset-semantics.md
[10]SE-0271: https://github.com/apple/swift-evolution/blob/master/proposals/0271-package-manager-resources.md
[11]SE-0278: https://github.com/apple/swift-evolution/blob/master/proposals/0278-package-manager-localized-resources.md
[12]SE-0272: https://github.com/apple/swift-evolution/blob/master/proposals/0272-swiftpm-binary-dependencies.md
[13]SE-0273: https://github.com/apple/swift-evolution/blob/master/proposals/0273-swiftpm-conditional-target-dependencies.md
[14]SE-0287: https://github.com/apple/swift-evolution/blob/main/proposals/0287-implicit-member-chains.md
[15]SE-0284: https://github.com/apple/swift-evolution/blob/main/proposals/0284-multiple-variadic-parameters.md
[16]SE-0289: https://github.com/apple/swift-evolution/blob/main/proposals/0289-result-builders.md
[17]SR-10069: https://bugs.swift.org/browse/SR-10069
[18]SE-0294: https://github.com/apple/swift-evolution/blob/main/proposals/0294-package-executable-targets.md
[19]SE-0281: https://github.com/apple/swift-evolution/blob/master/proposals/0281-main-attribute.md
[20]Ted Kremenek: https://twitter.com/tkremenek?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor
[21]swift.org forum: https://forums.swift.org/categories
[22]On the road to Swift 6: https://forums.swift.org/t/on-the-road-to-swift-6/32862
[23]Saleem Abdulrasool: https://github.com/compnerd
[24]Tom Doron: https://github.com/tomerd
[25]TIOBE: https://www.tiobe.com/tiobe-index/
[26]PYPL: https://pypl.github.io/PYPL.html
[27]GitHut 2.0: https://madnight.github.io/githut/#/pull_requests/2021/1
[28]Nordic Semiconductor: https://www.nordicsemi.com/
[29]GitHub 页面: https://github.com/NordicSemiconductor
[30]Swift 版本: https://github.com/NordicSemiconductor/IOS-Pods-DFU-Library
[31]Java 版本: https://github.com/NordicSemiconductor/Android-DFU-Library
[32]RoadMap: https://github.com/firebase/firebase-ios-sdk/blob/master/ROADMAP.md
[33]Apple Developer Documentation: https://developer.apple.com/documentation/technologies
[34]System: https://developer.apple.com/documentation/System
[35]WidgetKit: https://developer.apple.com/documentation/WidgetKit
[36]SCSIControllerDriverKit: https://developer.apple.com/documentation/scsicontrollerdriverkit
[37]Professional Video Applications: https://developer.apple.com/documentation/professional_video_applications
[38]IOUSBHost: https://developer.apple.com/documentation/iousbhost
[39]Timac: https://github.com/Timac
[40]Apple’s use of Swift and SwiftUI in iOS 14: https://blog.timac.org/2020/0927-state-of-swift-ios14/
[41]Evolution of the programming languages from iPhone OS 1.0 to iOS 14: https://blog.timac.org/2020/1019-evolution-of-the-programming-languages-from-iphone-os-to-ios-14/
[42]iOS 14.0 (18A373) 统计: https://blog.timac.org/2020/1019-evolution-of-the-programming-languages-from-iphone-os-to-ios-14/iOS14.txt
[43]Comparing iPhone OS 1.0 with iOS 14 using tree maps: https://blog.timac.org/2020/1122-comparing-iphone-os-with-ios-14-using-tree-maps/
[44]矩形式树状结构绘图法: https://www.wikiwand.com/zh/%E7%9F%A9%E5%BD%A2%E5%BC%8F%E6%A0%91%E7%8A%B6%E7%BB%93%E6%9E%84%E7%BB%98%E5%9B%BE%E6%B3%95
[45]IntentConfiguration: https://developer.apple.com/documentation/widgetkit/intentconfiguration
[46]如何检测 iOS 应用程序是否使用 Swift?: https://mp.weixin.qq.com/s/vF_oOWFLimlyRi4mZpgpeQ
[47]OneeMe: https://github.com/OneeMe
[48]七麦数据: https://www.qimai.cn/
[49]国内免费应用 Top 100 榜单: https://www.qimai.cn/rank/index/brand/free/device/iphone/country/cn/genre/5000/date/2021-03-21
[50]国外免费应用 Top 100 榜单: https://www.qimai.cn/rank/index/brand/free/device/iphone/country/us/genre/5000/date/2021-03-21
[51]Snake List: https://github.com/flexih/SnakeList
[52]Flexih: https://github.com/flexih
[53]Swift for TensorFlow: https://github.com/tensorflow/swift
[54]Machine Learning Research at Apple: https://machinelearning.apple.com/
[55]Paul Hudson - Hacking with Swift - What’s new in Swift 5.3?: https://www.hackingwithswift.com/articles/218/whats-new-in-swift-5-3
[56]Paul Hudson - Hacking with Swift - What’s new in Swift 5.4?: https://www.hackingwithswift.com/articles/228/whats-new-in-swift-5-4
[57]Swift.org forum - On the road to Swift 6: https://forums.swift.org/t/on-the-road-to-swift-6/32862
[58]TIOBE: https://www.tiobe.com/tiobe-index/
[59]PYPL: https://pypl.github.io/PYPL.html
[60]GitHut 2.0: https://madnight.github.io/githut/#/pull_requests/2021/1
[61]Apple - Apple Developer Documentation: https://developer.apple.com/documentation/technologies
[62]Timac - Comparing iPhone OS 1.0 with iOS 14 using tree maps: https://blog.timac.org/2020/1122-comparing-iphone-os-with-ios-14-using-tree-maps/
[63]Timac - Evolution of the programming languages from iPhone OS 1.0 to iOS 14: https://blog.timac.org/2020/1019-evolution-of-the-programming-languages-from-iphone-os-to-ios-14/
[64]Timac - Apple’s use of Swift and SwiftUI in iOS 14: https://blog.timac.org/2020/0927-state-of-swift-ios14/
[65]OneeMe - Swift App Analyzer: https://github.com/ZRTransmitter/SwiftAppAnalyzer
[66]Flexih - Snake List: https://github.com/flexih/SnakeList
[67]Apple - Machine Learning Research at Apple: https://machinelearning.apple.com/