
macOS Sierra 发布有些天了, Swift 3 也是同期发布的。这几天手痒把 XCode 升级了,同时也将 iPic 适配 Swift 3 ;本打算 1 天搞完的,结果…哎,说多都是泪…
就是因为之前没觉得是多大的事,也就没好好的总结,随意写点感受,供大家娱乐。
Swift 官网有 关于 Swift 3.0 变化的介绍,其中列举了 100 多项变化。壮着胆子看了一遍,实在是水平有限,只是其中几项算是彻底搞懂,其他也就有个感觉。
此路不通。
于是,撸起袖子上,直接让 XCode 转换工程,升到 Swift 3
这一下,代码是炸了锅了。没有一个文件不修改,简直惨不忍睹;直接编译通过就更别想了。本来还想仔细看看所有变动,借机理解下 Swift 3 的变化。结果,看着看着,看着那似乎永远看不完的变化,放弃了。努力编译通过,提交了。
苦难就是从这里开始的。
忠告:后来的朋友,如果有时间的话,还是建议一个个变化看过去。不懂、或者需要较多时间消化的,建议先打个标记。等一遍快速看完后,再来一遍、一遍又一遍。总之,这是你理解 Swift 3 变化的最好时机,切记。
说回来,由于没有仔细看每一处变化,导致心里很慌:不知道哪有雷啊。虽然单元测试也努力跑通了,但就是跑通的太快了,反而更慌了。
『大体能跑通』,这其实是很不靠谱的。需要花费大量时间搞定的,可能是其中某一个细节问题。
我遇到的一个是: base64 编码。现象是 iPic 怎么都不能上传图片至 Flickr ,错误原因是生成的 Token 错误。可之前就是这么干的呀?最痛的地方在于, Flickr 生成 Token 是个巨复杂的过程(下图稍微感受下),其中每个步骤都可能出错,这就意味着每个步骤都要仔细过;偏偏之前偷懒这部分单元测试不全(哎…)于是,开始了漫长的调试。

最后的原因是,之前的 base64 相关的编码结果中,: 是被转义的,而新的代码(即被 XCode 转换、而我没仔细看的代码),貌似 : 没有被转义,导致 Token 无效(未严格验证原因,总之解决问题了…)
忠告:单元测试、自动化测试不能偷懒。 99.99% 的情况下,我们做不到测试驱动开发,但还是要在开发每个功能后、在对这个功能最熟悉的时候,补全单元测试、测试用例。
小技巧:在功能完成后,写单元测试其实还算简单。先把单元测试的架子搭好,正确值留白;然后直接运行,肯定会出错。关键, XCode 会给出正确值。这时,只要把 XCode 的值复制到正确值即可,相对还算轻松。
代码逻辑、架构什么的,越简单越好。
一方面,逻辑越简单,漏洞越少。进而,测试用例什么的都少。现在完整测试一遍 iPic 要吐半升血…
另一方面,简单容易理解啊。等过几个月再看当初的代码,理解上一定是吃力的。
感受:为了简单,可以放弃一个边缘 Case ;有些错误,就算知道也不一定改,因为改了会让整体变复杂、用户却不一定能得到好处,其实并不划算。
如果一种方案开发效率、运行效率高,但维护成本也高;另一种方案刚好相反,现在的我会选择后一种。宁愿低效也不愿背上沉重的维护成本。
这话说出去可能脸红,但总好过程序发布几个月后发现问题,而自己那时却没时间修复、或者已经看不懂以前的代码,要好。
虽然仔细的测试了、虽然没发现什么严重的问题,但还是不敢上架 macOS App Store ,还是自己多用几天,也扔出来让大伙拍拍砖:
哦,这事啊;
iPic 可以自动上传图片、保存 Markdown 链接,给你前所未有的插入体验(图片);支持微博、七牛、又拍、阿里云、 S3 、 Imgur 、 Flickr 等一票图床。总之各种爽,谁用谁知道。
具体看 图床神器 iPic 操作动画

|      1kevin335200      2016-10-08 02:13:57 +08:00 via Android 楼主不容易啊。 | 
|  |      2beimenjun PRO 大家统一下 Xcode 的大小写写法吧! (深夜报社: xcode Xcode XCode xCode XCODE ) | 
|  |      3zddewe      2016-10-08 02:30:11 +08:00 楼上 6 | 
|      4RqPS6rhmP3Nyn3Tm      2016-10-08 03:26:44 +08:00 via iPhone  1 @beimenjun xCoDe XcOdE | 
|  |      5msg7086      2016-10-08 07:20:12 +08:00 Why not TDD ? | 
|  |      6quietjosen OP @beimenjun 哦,一直都用文中的格式,看程序名确实是 Xcode … | 
|  |      7quietjosen OP @kevin335200 是啊,这坑,谁踩谁知道。 | 
|  |      8quietjosen OP @msg7086 你们做什么产品,全都用的 TDD ? | 
|  |      9zonghua      2016-10-08 08:02:26 +08:00 via iPhone 这升级比微软还厉害 | 
|  |      12angelface      2016-10-08 09:13:55 +08:00 确实很麻烦, 特别是有一些总是, build 是没总是的, 也跑得起来,但有一些代码会和预期的不一样,这种总是最麻烦了。 | 
|      13warDoggie      2016-10-08 09:15:09 +08:00 @quietjosen 但是你写成了 XCode 😂 | 
|  |      14darkjoker      2016-10-08 09:28:57 +08:00 有了这个图床神器我可以为第一会所作出贡献了 | 
|  |      16quietjosen OP @angelface 恩, Xcode 编译也是有奇怪的问题, Clean 后重编就可以,编译时间也比之前长了,浪费时间… | 
|  |      17quietjosen OP @warDoggie 我一直以来都是这么拼的,以后改吧。 | 
|  |      18quietjosen OP @darkjoker 😂 | 
|  |      19chztv      2016-10-08 10:27:45 +08:00 @quietjosen 进来支持一下楼主。最近一段时间没有时间写 Blog , iPic 用得有点少了,一直没时间体验新版本。 等忙完这一阵,再来体验楼主的新版。 | 
|  |      20helloSwift      2016-10-08 11:04:05 +08:00 via iPhone 厉害👍 | 
|  |      21quietjosen OP | 
|  |      22quietjosen OP @helloSwift 都是流水账而已…… | 
|  |      23araraloren      2016-10-08 13:05:55 +08:00 我觉得 yinwang 说的没错,这种不兼容本就反射出来 swift 设计的时候就没设计好 | 
|  |      24quietjosen OP @araraloren 我倒是能理解一点,毕竟设计语言的难度很大,关键还要兼容 OC 和已有的接口,包袱太重。 | 
|  |      25crayygy      2016-10-08 13:55:21 +08:00 Swift 的每一次版本升级都有可能会炸锅...... 关于单元测试,个人认为,多人协作项目尤其是大型项目一定得有,不然真的会💥,甚至 TDD 也是可行的,但是个人项目要一个个测试写下来也是挺不容易的...也得有耐心啊 Anyway , LZ 好样的~ 加油! (我也想努力学 iOS 和 Mac 开发 hhh | 
|  |      26quietjosen OP | 
|  |      27araraloren      2016-10-08 14:51:11 +08:00 @quietjosen  不过就看其中的是否需要++ -- 等自增操作符都是现在才决定的,很难让人觉得他们一开始花时间设计了这个语言 关于难度大,其实我觉得对于我可能是那样,我不希望的是对于他们(那些设计者)也这样 我只是纯吐槽~~ | 
|  |      28yangxin0      2016-10-08 15:16:48 +08:00 via iPhone 请教一下 swift 3 稳定了吗? | 
|  |      29quietjosen OP @araraloren 好吧,看在我被坑的份上,就不给他们开脱了… | 
|  |      30quietjosen OP @yangxin0 我这个级别,回答不了这种高层次的问题 :( | 
|  |      31xjbeta      2016-10-08 16:20:38 +08:00 对的  base64 是个小坑   我也踩了。。。 | 
|  |      32webfrogs      2016-10-08 16:23:40 +08:00 我是不信任这个自动转换工具的。 | 
|  |      33sutra      2016-10-08 17:06:08 +08:00 所以其实这是一个广告? | 
|  |      34quietjosen OP @xjbeta 看来不是我一个人 😂 | 
|  |      35quietjosen OP @webfrogs 可如果是手动转,会崩溃的… | 
|  |      36Sequencer      2016-10-08 22:17:46 +08:00 hhh 好幸苦,现在这个 iPic 的代码量大约多少行了? | 
|  |      37quietjosen OP @Sequencer 没统计;代码少,说明工作量小;代码多,说明优化能力差;代码行这事不靠谱 😆 | 
|  |      38Felldeadbird      2016-10-08 22:32:50 +08:00 明年又来一个 swift4 ,问你怕未?! | 
|  |      39quietjosen OP  1 @Felldeadbird 哎,我估计不会这么积极,抗到最后,等大家把坑都踩完了再升,嘿嘿~ | 
|  |      407sDream      2016-10-08 23:46:33 +08:00 我棱不棱顺路做个广告…… 学 Golang 的时候不知道用什么练手,我也写了个通用的私人图床,然而因为 Linux GUI 写起来还是麻烦所以我做了个 WebApp ,然后提供 API ,顺便写了个 CLI 用。 项目: https://github.com/7sDream/rikka Demo : http://7sdream-rikka-demo.daoapp.io/ (密码 rikka ,只是 Demo 没事会清空图片的,不要真的用) CLI 使用说明: https://github.com/7sDream/rikka/blob/master/rikkac/README.zh.md 也是插件架构,目前写完的插件有:直接储存,七牛云,又拍云,新浪微博,腾讯云 COS ,腾讯云 CI 插件也可以自己写啦……但是我懒了好久没写别的网站的插件了…… 提供 Docker Image ,部署起来很方便哟~我还写了几篇 wiki 图文教程…… (赶快跑 | 
|  |      41xjbeta      2016-10-09 09:11:34 +08:00 @quietjosen 话说 swift3 的 GCD 简直赞    精简掉了一大堆复杂东西    能把那本 OC 高级编程扔掉了 2333 | 
|  |      42quietjosen OP @xjbeta 还没接触这部分,期待… | 
|      43jackisnotspirate      2016-10-09 14:57:41 +08:00 via iPhone Swift 都这么大了,额,大公司面试还会纠住 oc runtime 那套问来问去 | 
|  |      44quietjosen OP @jackisnotspirate 我觉得个人和小团队更容易迁移,大公司包袱重,不那么容易切换。 | 
|      45milugt      2016-10-09 20:40:45 +08:00  1 已经订购了 thx. | 
|  |      46quietjosen OP @milugt 是吗?应该是我🙏你才对,麻烦在 App Store 好评留言吧,先谢 😄 | 
|      47urmyfaith      2016-10-10 16:29:57 +08:00 很久之前就是这样了. ``` The server gave an error during download: 404 Not Found. ``` 之前好歹有个有个版本可以用. 然后我今天把之前的低版本删除了. 然后取 app store 里已购项目去安装. 总是提示这个错误. 开不开代理都是. macOS 10.11.6 (15G1004) | 
|  |      48quietjosen OP | 
|      49urmyfaith      2016-10-10 19:33:00 +08:00 | 
|  |      50quietjosen OP @urmyfaith 确实,如果有发版本的需求,还是等版本稳定了再升比较稳妥。 先用上面说的 iPic 版本吧。 |