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 : 探索有趣的新事物。
最後,感謝你的關注!