Hello 各位朋友很久不见😂,很久没有更新公众号了,为何没有更新,是由于我最近一段时间都在写 iOS 应用,终于在前几天完成了本身的第一个 iOS 产品的开发工做,大概在明年一月初的时候这个 App 会上线,一款很是有意思的应用,大家能够期待一下。git
正好经过此次尝试开发 iOS 的机会,写一篇文章分享一下开发 iOS 的体验,若是你和我同样以前是一名 Android 工程师,那么但愿个人经历能够帮到你。程序员
正如标题所说:Android 工程师开发 iOS 是怎样的体验?这篇文章我会为你们对比我在 Android 和 iOS 两端不一样的开发体验。github
目前主流的 iOS 应用都在使用 Swift 开发,Swift 已经发展到 Swift5,关于语言的话,极力推荐直接使用 Swift 做为开发语言,至于 OC,如今谁还用 OC 啊?若是在前两年做为 iOS 开发者可能会常常为 Swift 而头疼,由于 Swift 每一次的大版本更新,API 都会有很大的改动,升级起来很痛苦。个人 iOS 开发最先使用的是 Swift4,印象中升级 Swift5 的时候几乎没有大的改动,目前 API 已经趋向稳定,因此若是你想要尝试 iOS 开发的话,Swift 是首选开发语言。编程
一样,Android 也经历了开发语言的切换,在 17 年的时候我就从 Java 切换到了 Kotlin 来开发 Android,还记得当时在写 Kotlin 的时候,遇到不会写的代码都是问隔壁的 iOS 同事,由于 Kotlin 和 Swift 语法真的很像,若是你有 Kotlin 的开发经历的话,那么你应该能够无障碍的读懂 Swift 代码。bash
因此做为 Android 工程师,得益于 Kotlin,语言不会成为你尝试开发 iOS 的阻碍。而且不管是哪一种语言,都是一样的编程范式,一样的数据结构,同是面向对象编程,类似的架构模式,不一样的只是 API,API 的问题最好解决了,查文档就好了呗。markdown
对于我我的来讲,在开发 iOS 的时候,并无去专门去花时间学习 Swift,由于真的和 Kotlin 太像了,几乎无成本迁移。网络
若是从灵活简洁的角度给 Kotlin 和 Swift 来打分的话:Koltin 我给 9 分或更高,而 Swift 最多只能到 8 分。也多是我学艺不精,在经常写 Swift 的代码的时候,我都在想若是是 Kotlin 这段代码可能会写的更爽一点,例以下面这个空判断,你们能够感觉一下 Swift 和 Kotlin 的区别:数据结构
// Swift let user: User? = User(id: "1", name: "2") if let user = user { print(user) } 复制代码
val user: User? = User(id = "1", name = "2") user?.also { print(it) } 复制代码
虽然几乎同样简洁,可是我是用 Kotlin 一个 ?写下来有种一鼓作气的感受,而 Swift 要写一个 if 一个 let ,诸如此类的小细节还有不少,写多了就会感叹仍是 Kotlin 爽啊。架构
在语言方面我更喜欢 Kotlin。工具
iOS 使用 Xcode 做为官方 IDE 最新版本是 11.3,Android 使用 Android Studio 做为官方 IDE,最新稳定版 3.5.3,最新预览版是 4.0,4.0 有了众多的更新和升级,若是你想了解 4.0 最新进展,能够看我以前发的这篇文章:Android Studio 4.0 最新进展。
咱们先说正常的使用体验,写代码的时候,不得不说 Xcode 真的常常会抽风,高亮时不时就没有了,点击详情查看 API 定义的时候,常常出现一个大大的问号,提示找不到, 变量跳转不够智能,常常会点击跳转到另外一个相同变量名的类中,而并非这个变量真正所处的位置,我曾经遇到一个很蛋疼的问题,Xcode 没法对修改的代码编译生效,只能从新安装,真的是让人头大。
同时若是你用 Xcode 写 SwiftUI 有一个很致命的 bug,就是报错信息会提示在错误行,这样致使我在排查错误的时候很痛苦。
相反对比 Xcode,Android Studio 的开发体验真的是很棒,多是基于 IntelliJ 。jetbrains 系列的 IDE 都很棒,很稳定很强大,至少我是用 Android Studio 有种很舒服的感受,也多是因为个人先入为主,不过据我以前的了解,Xcode 抽风是 iOS 开发人员公认的问题,常常听到他们吐槽。
咱们再聊聊第三方依赖,从 Android Studio 诞生起就使用 Gradle 来依赖第三方库,在 AS 2.0 以前第三方依赖最大的阻碍就是网络问题,经常因为网络太差而没法完成编译。Xcode 最多见的是使用 Pod 来安装依赖,Pod 是一个第三方的依赖平台,在 18 年 Xcode 推出了本身的第三方依赖工具,Swift Package Manager,直接经过 Github 拉代码,比 Pod 方便了很多。就第三方依赖来讲,两者相差不大。
因为 iOS 彻底闭源,因此在开发的时候遇到一些问题,有时不知道从何下手,报错的时候直接抛出一个栈地址,看得我一脸懵。Android 是开源的,因此咱们在调试的时候,能够一步步 debug 到源码里面,在解决 bug 上面方便很多。
在 IDE 方面我更喜欢 Android Studio。
今年的 Google I/O 和 Apple WWDC 不约而同的推出了声明式 UI 组件,SwiftUI 和 JetPack Compose,以前写过一篇文章:JetPack Compose 最新进展,感兴趣的同窗能够看一下。
个人新产品大部分都是使用 SwiftUI 完成,部分使用 UIKit。使用过以后,声明式 UI 真的很方便,并且 SwiftUI 和 JetPack Compose 以及 Flutter UI ,在语法上面也很是类似,有些人抱怨声明式 UI 代码写起来嵌套太多,很乱,我我的以为这根本不是一个问题,抽象和组合是一个程序员最基本须要具有的职业素质,写以前仔细思考一个如何设计代码,很大程度上就能避免嵌套臃肿的问题。
声明式 UI 最大的便捷之处,就是所写即所得。极大的减小了代码量,以前若是写一个复杂界面须要一天时间,那么使用声明式 UI 会节省你一半的时间。
虽然我很喜欢声明式 UI,但写了这么久的 SwiftUI 它目前的缺陷也很明显,SwiftUI 并无彻底实现原有 UIKit 的所有功能,若是 SwiftUI 无法实现,就须要自定义一个 UIKit 的 Warpper,但这并不能彻底解决问题,SwiftUI 与 UIKit 混用目前仍有一些不可预见的 bug。
同时 SwiftUI 刚刚推出,不少最佳实践都没有,大部分人都在踩坑的阶段,bug 不少,并且是没法解决的 bug,我在 Github 上面开一个叫:SwiftUIBug 的库,来记录目前为止我使用 SwiftUI 遇到的 bug,并提供解决方法,避免别人继续踩坑,有兴趣的朋友能够持续关注一些。
说了这么多,怎么都在说 SwiftUI 呀?JetPack Compose 怎么样呢?
嗯.... 这么说吧,SwiftUI 的文档至少还有好几页,而 JetPack Compose 只有寥寥的一页,并且我体验了官方放出的 demo,如今的完成度,别说生产环境了,就连 demo 都有不少 bug,至少在生产环境使用 SwiftUI 写一些简单的页面仍是没问题的。
因此个人观点是,iOS 开发中若是是简单的页面能够用 SwiftUI 实现,复杂的就用 UIKit 吧,毕竟万一 SwiftUI 不支持,那绝对会坑死你。而 JetPack Compose,咱们至少要等正式版出来看看完成度怎么样,如今一切尚早。
对了 SwiftUI 最低支持 iOS 13,因此想要使用的同窗谨慎考虑,而 JetPack Compose 没有这个限制,自 AndroidX 出现,Android 已经在规避 API 更新随着 Android 版本的发布而更新,而采起独立的第三方库来使用。
在声明式 UI 方面我给 SwiftUI 打 Call。
这方面我是站 iOS 的,我认为 iOS 仍然是目前最好用的系统,不管是从 App 体验仍是生态方面。关于体验来讲,iOS 给人的感受是值得信赖的,举个例子,对于不少 UI 的细节,iOS 支持的很好,而 Android 永远给人一种半成品的感受。
Android 上面的卡顿是一个很常见的问题,即便你时刻当心翼翼的写代码,仍然会有卡顿的问题产生,而 iOS 真的只要不是太糙的代码,几乎不会有卡顿发生。
若是你细心观察,一样的 App iOS 端的体验必定要比 Android 端要好的,这和开发者的能力无关,系统差异就在这里体现了。不能否认 iOS 有不少优秀的应用,很是棒的交互和体验,在以前我翻遍了整个 Google play 想找出一个能够媲美 iOS 同样优秀体验的应用,不过惋惜没有,就连一样在 Android iOS 双平台都上线的 Apple Music 二者之间的差距都相差很多。
就最近几年的发展,iOS Android 两边一直在互相借鉴,功能趋向一致。iOS 的 API 设计一致都是很具备前瞻性的,而 Android 因为碎片化那几年,真的是留下了很多坑,Android 开发者真的是太痛苦了。据我我的感受,iOS 的 API 很是成熟,开发起来要比 Android 总体速度快不少,不少效果以及需求,iOS 自身都有很好的解决方案,咱们只要专一需求就好。而 Android 不少就像是以前说的半成品,什么都要本身去研究半天,iOS 分分钟就能撸出个原型,Android 还须要苦逼的作技术调研。就那阴影和毛玻璃来讲,Android 也能作,可是效果就差不少。
iOS UIKit 中使用 AutoLayout 来布局,写起来虽然有些繁琐,可是 API 很统一,全部 UI 之间的布局均可以使用约束来绑定关系,相反 Android,拥有众多 Layout,不一样的 Layout 拥有不一样的 API,还好以后紧跟 iOS 推出了 constraintlayout,方便了不少,若是你尚未使用 constraintlayout 那真的是落后了,别说学不动,这个必须学。
Android 给个人感受就是 Google 给你扔了一堆组件库,至于怎么用好,效果怎么样,可能他们都不清楚,须要开发者本身去踩坑。
而 iOS 除了提供给你组件库以外,还严格制定了规范,并推荐你该怎么作,同时不须要很高的学习成本,固然这也得益于 iOS 闭源的特性,虽然没有 Android 那么自由,可是却能保障你应用的质量。
虽然 Android 是目前全球占有率最高的移动操做系统,但软件的质量和生态真的还距离 iOS 有很大的差距。以上就是我最近开发 iOS 的感觉,彻底出自个人主观感觉,有不一样意见能够留言分享,以后的推送中除了有关 Android 、 Kotlin 的相关以外也会继续分享其余我所感兴趣的事物,就是这个公众号的 slogan : 探索有趣的新事物。
最后,感谢你的关注!