手机 App 开发学习日记

从我起心动念开始想要学习 iOS 软件开发到今天为止,已经有差不多四周了。

想要学习手机软件开发的一个原因是我们公司有一个 oa 系统,但是呢,我们现在已经不想使用企业微信,作为扫码登录的一个工具也不想使用企业微信,作为这个系统的消息通道,但是企业微信其实在这方面是非常好用的以至于,那我们并没有合适的替代品,于是我就想到为什么不干脆自己开发一个最简单的 oa 系统的客户端软件呢?

但是其实现在我们公司已经没有养着 iOS 4 团队了,只有一个安卓的开发团队还不是我所在的部门,于是我这个想法并没有相应的开发资源来进行支撑,我就想干脆我自己做算了,我用我的业余时间来开发一个软件给公司的同事们用难道不好吗?

因为我已经连续多年使用苹果手机了,所以呢,我只想学习 iOS 开发对安卓开发没有一点兴趣,另外最近跨平台的开发技术非常的热门,但是拿我也提不起什么性质来,我只是想学习一下苹果手机的开发。

正好呢,最近苹果手机的开发体系发布了一个叫做 SwiftUI 的开发技术框架,于是我就想到嗯嗯,了解一下,没想到一看 SwiftUI 的嗯嗯介绍视频发现嗯这个开发框架非常的友好非常的简洁,而且也十分具有表现力。

于是,我下定决心想要真的学会使用 SwiftUI 去开发一个苹果手机的软件嗯,我的不少朋友都告诉我,SwiftUI 并不是一个特别好的选择应该是在开发到比较高深的功能的时候会遇到很大的阻力,主要是在很多细节的设定上应该是不够灵活的一个框架,但是我想我使用的功能,应该是非常简单的几个功能,我的目标是非常明确的,我只想做这样几个功能:第一,可以进行登录;第二,可以进行扫码登录;第三,可以进行消息,推送;第四,甚至可以实现二次验证登录的这个验证码。至于其他更加复杂的功能,比如说聊天啊,这些都不想实现那么如何在一个 App 里实现 O A 的其他全部功能的当然最简单使用一个 web view 由来嵌入网页的形式。

不过对于我这样一个从来没有学习过苹果手机软件开发的人来说做这样的工作,实在还是太困难了嗯,虽然我懂得开发的基本原理,但是我发现我如果想要完成,我给自己设定的任务,还要学习非常非常多的东西,然后嗯我作为一个资深的程序员,仍然是不能把握住很多重要的东西,因为我以前是一个 web 开发。现在我需要学习的东西,相当于是一个额客户端,软件的开发在性质上差距是非常大的。

今天晚上,我熬到了凌晨 3:00 仍然还无法产生睡意,根本原因就在于我用了一晚上的时间在搜索关于 SwiftUI 相关的开发技术资料,我搜索这些技术资料的根本原因是在于我想要解答,我对 SwiftUI 开发过程中嗯几个疑难的问题。

比如第一个问题就是说一个苹果手机软件,一旦启动了,以后第一个界面会进入到哪里,这个是怎么确定的呢,其实网上嗯,关于这样基本的内容是非常难以搜索到的,因为你如果说关键词是属于 UI 的话,都是在介绍界面怎么布局动画,怎么怎么呈现各种空间如何去设置它?

但是我现在想学的是关于如何构建一个软件基本的流程,而这可能是很古老的 iOS 软件开发的教程里面会提及的内容,但是他涉及到的知识又不是使用 SwiftUI 很有可能是使用最早的 objective c 或者说是 uikit 之类的技术框架。

另外,我想实现一个功能就是嗯用户的登录用户登录以后呢,应该跳转到一个软件的正式界面,但是在用户登录之前是不能直接进入到用户的正式见面了,于是我就想到这其实就相当于是两个完全不同的怎么说呢,就是场景吧,登录是一个场景,正式使用一个软件又是一个场景。如果我们没有登录的话,会应该会被登录界面给挡在外面无法进入到软件的正式操作空间,就这样一个简单的功能,到底应该如何去实现了所有介绍 SwiftUI 的教程视频教程也好文字教程也好都没有提及这个问题。

还有一个我想知道问题,比如说我应该用怎样的布局模式去安排我自己想要的功能,这个也是非常困难的,其实他属于苹果的这种基本交互规范的一个范畴的问题嗯,我按照现在自己的理解参考了企业微信的界面设计,我觉得就应该使用 tabbed view 来实现这个这个界面的布局。但是这个在各种各样的教程里也是没有说的教程,一般只会说,什么样的空间怎样使用,但没有说在什么样的场景下,应该使用什么样的控件。

再有一个问题,就是说我如何,使我的苹果手机软件与互联网上面的各种操作进行有机的结合,比如说我检查一个客户有没有登录到这个手机软件上,那么显然是要通过联网去向服务器确认的,然后我如果手机软件开着,从服务器不断地收到嗯推送过来的消息这个是怎样去实现了市场连接到服务器嗯,然后是服务器推送过来,还是说嗯,是不断地去轮询服务器那样的话大量的客户端软件会不会使服务器造成拥塞,甚至拒绝服务。

随着我对 SwiftUI 表面现象的理解的深入,然后发现更多困扰,我的问题在于如何非常普通的去构建一个苹果手机软件,而不是仅仅使用一个界面开发的框架,我缺乏的是手机客户端软件构建的基本原理的知识。

然而,现在对我来说非常困难,是我根本就不知道从什么样的资料,或者从哪里可以更容易补充到这些客户的软件构建软原理层面基本的知识,互联网上提供的大量的知识都是一种浮于表面性的知识,或者是尝鲜性质的知识,并没有深入到带另一个学习者,逐步深入到一个真正的客观世界的软件的开发过程中。

于是,我就萌生了记录,整个这个过程的一个想法,因为对我来说我是从一个饿一个资深的 web 开发程序员嗯转岗到这个客户端开发程序员,然后从零开始想要构建一个在客观世界中真实有用的,有业务逻辑的苹果手机软件的这样一个场景,那么,如果我能够精细的记录下,我整个过程中的想法,以及我碰的壁以及我找到的学习的路径和方向,那么别人从阅读我的经历的过程中,应该能够得到很多的启发,甚至嗯,从此走上一个正确的道路。

iOS 开发学习,对我来说,最难的并不是语言语法的学习,也不是类库的学习。对我来说,最难的地方,在于资料是零星琐碎而且不成系统的。整个 iOS 开发发展速度太快了。我记得我三周前,第一次打开 Xcode 生成的 Hello World 程序和现在打开再生成的就已经不同了,一些模板文件消失,可见短短三周时间,很多东西已经更新并更换了。

这就导致了一个问题,你能找到的所有的电子书都是过时的。网上找到的关于 SwiftUI 的教程,你照着做一个例子的话,跑不通是大概率的。哪怕是三个月前刚刚出品的视频也是不能避免此点。甚至视频教程里用到的一些类,在你实践的时候,并不存在。

这就导致了,你几乎没有什么东西可以用来直接跟着学习和实践。而真正能找到的学习材料里面,用到了一些基本原理,可能是上一代开发模式里就已经确认的,也可能是上上代就已经确认的,在最新的材料里面,就默认读者已经知道前几代就已经确立了没变的那些原理了,并不会专门去讲解。这就给理解制造了极大的困难。

目前,我找到了一个比较好的能够跟着操作的,就是苹果官方开发网站的 SwiftUI 教程。我已经照着学习了几天了,每天往前做一两个例子,总好过一点也没有前进的好,至少在所有的官方例子实践一遍之前,我还没有卡住过。这是唯一不改一字就可以照着操作的学习资料了。

在学习 SwiftUI Tutorials 的时候,我发现,鼓吹的 Preview 功能,经常有不正常的时候,比如我明明按照例子,什么都写对了,但是就是无法预览,预览的内容始终停留在代码更改之前的样子。我重新 Build 后,仍然解决不了,我不能确认是否代码编写正确。这时候,我如果关掉 Xcode,重新启动后,预览竟然又正常了。重启大法好,对 IDE 都有效。

跟一个五六年前就开始做 iOS 朋友请教一些 Xcode 的用法,他说,SwiftUI 性价比不高,学这个不如学习 Flutter 或者 React,理由是前向兼容性差。估计,他觉得,我作为一个业余选手,如果用不多的时间来学习的话,选择 SwiftUI,可能不太合算吧。至少他们这样职业的开发者,是不会考虑使用 SwiftUI 的,因为可能不兼容老版本的各种设备或者各种系统。

– 至此大概放弃了 –