V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
quietjosen
V2EX  ›  程序员

我怂了,花了半个国庆假期为 iPic 适配 Swift 3,却不敢上架 macOS App Store…

  •  
  •   quietjosen ·
    atjason · 2016-10-08 00:05:44 +08:00 · 6735 次点击
    这是一个创建于 2975 天前的主题,其中的信息可能已经有所发展或是发生改变。

    macOS Sierra 发布有些天了, Swift 3 也是同期发布的。这几天手痒把 XCode 升级了,同时也将 iPic 适配 Swift 3 ;本打算 1 天搞完的,结果…哎,说多都是泪…

    就是因为之前没觉得是多大的事,也就没好好的总结,随意写点感受,供大家娱乐。

    Swift 3.0 Language Changes

    Swift 官网有 关于 Swift 3.0 变化的介绍,其中列举了 100 多项变化。壮着胆子看了一遍,实在是水平有限,只是其中几项算是彻底搞懂,其他也就有个感觉。

    此路不通。

    XCode 转换工程

    于是,撸起袖子上,直接让 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 ,还是自己多用几天,也扔出来让大伙拍拍砖:

    下载适配 Swift 3 的图床神器 iPic

    那个啥,啥是 iPic ?

    哦,这事啊;

    iPic 可以自动上传图片、保存 Markdown 链接,给你前所未有的插入体验(图片);支持微博、七牛、又拍、阿里云、 S3 、 Imgur 、 Flickr 等一票图床。总之各种爽,谁用谁知道。

    具体看 图床神器 iPic 操作动画

    50 条回复    2016-10-10 20:42:01 +08:00
    kevin335200
        1
    kevin335200  
       2016-10-08 02:13:57 +08:00 via Android
    楼主不容易啊。
    beimenjun
        2
    beimenjun  
       2016-10-08 02:25:55 +08:00
    大家统一下 Xcode 的大小写写法吧!

    (深夜报社: xcode Xcode XCode xCode XCODE )
    zddewe
        3
    zddewe  
       2016-10-08 02:30:11 +08:00
    楼上 6
    RqPS6rhmP3Nyn3Tm
        4
    RqPS6rhmP3Nyn3Tm  
       2016-10-08 03:26:44 +08:00 via iPhone   ❤️ 1
    @beimenjun xCoDe XcOdE
    msg7086
        5
    msg7086  
       2016-10-08 07:20:12 +08:00
    Why not TDD ?
    quietjosen
        6
    quietjosen  
    OP
       2016-10-08 07:56:30 +08:00
    @beimenjun 哦,一直都用文中的格式,看程序名确实是 Xcode …
    quietjosen
        7
    quietjosen  
    OP
       2016-10-08 07:57:03 +08:00
    @kevin335200 是啊,这坑,谁踩谁知道。
    quietjosen
        8
    quietjosen  
    OP
       2016-10-08 07:57:29 +08:00
    @msg7086 你们做什么产品,全都用的 TDD ?
    zonghua
        9
    zonghua  
       2016-10-08 08:02:26 +08:00 via iPhone
    这升级比微软还厉害
    Drshu
        10
    Drshu  
       2016-10-08 08:35:38 +08:00
    @beimenjun Xcode 啦~
    warDoggie
        11
    warDoggie  
       2016-10-08 09:13:43 +08:00
    @msg7086 在不知道到底要做出什么玩意儿的时候 TDD 就是灾难 😭
    angelface
        12
    angelface  
       2016-10-08 09:13:55 +08:00
    确实很麻烦, 特别是有一些总是, build 是没总是的, 也跑得起来,但有一些代码会和预期的不一样,这种总是最麻烦了。
    warDoggie
        13
    warDoggie  
       2016-10-08 09:15:09 +08:00
    @quietjosen 但是你写成了 XCode 😂
    darkjoker
        14
    darkjoker  
       2016-10-08 09:28:57 +08:00
    有了这个图床神器我可以为第一会所作出贡献了
    queuey
        15
    queuey  
       2016-10-08 09:40:00 +08:00
    @darkjoker 我屮艸芔茻,为何不是 1024
    quietjosen
        16
    quietjosen  
    OP
       2016-10-08 09:54:13 +08:00
    @angelface 恩, Xcode 编译也是有奇怪的问题, Clean 后重编就可以,编译时间也比之前长了,浪费时间…
    quietjosen
        17
    quietjosen  
    OP
       2016-10-08 09:54:36 +08:00
    @warDoggie 我一直以来都是这么拼的,以后改吧。
    quietjosen
        18
    quietjosen  
    OP
       2016-10-08 09:55:29 +08:00
    @darkjoker 😂
    chztv
        19
    chztv  
       2016-10-08 10:27:45 +08:00
    @quietjosen 进来支持一下楼主。最近一段时间没有时间写 Blog , iPic 用得有点少了,一直没时间体验新版本。
    等忙完这一阵,再来体验楼主的新版。
    helloSwift
        20
    helloSwift  
       2016-10-08 11:04:05 +08:00 via iPhone
    厉害👍
    quietjosen
        21
    quietjosen  
    OP
       2016-10-08 12:02:50 +08:00 via iPhone
    @chztv 哈哈,🙏支持

    这版功能上倒没大变,帮忙验证下有没有问题也是好的 😄
    quietjosen
        22
    quietjosen  
    OP
       2016-10-08 12:03:07 +08:00 via iPhone
    @helloSwift 都是流水账而已……
    araraloren
        23
    araraloren  
       2016-10-08 13:05:55 +08:00
    我觉得 yinwang 说的没错,这种不兼容本就反射出来 swift 设计的时候就没设计好
    quietjosen
        24
    quietjosen  
    OP
       2016-10-08 13:19:35 +08:00 via iPhone
    @araraloren 我倒是能理解一点,毕竟设计语言的难度很大,关键还要兼容 OC 和已有的接口,包袱太重。
    crayygy
        25
    crayygy  
       2016-10-08 13:55:21 +08:00
    Swift 的每一次版本升级都有可能会炸锅......

    关于单元测试,个人认为,多人协作项目尤其是大型项目一定得有,不然真的会💥,甚至 TDD 也是可行的,但是个人项目要一个个测试写下来也是挺不容易的...也得有耐心啊

    Anyway , LZ 好样的~ 加油!

    (我也想努力学 iOS 和 Mac 开发 hhh
    quietjosen
        26
    quietjosen  
    OP
       2016-10-08 14:40:15 +08:00
    @crayygy 单元测试我是必写的,至少心里踏实些。不过并没有 100% 覆盖,毕竟有些接口出问题的概率不大,而且也并不容易开放出去做黑盒测试。

    感谢支持,一起加油!
    araraloren
        27
    araraloren  
       2016-10-08 14:51:11 +08:00
    @quietjosen
    不过就看其中的是否需要++ -- 等自增操作符都是现在才决定的,很难让人觉得他们一开始花时间设计了这个语言
    关于难度大,其实我觉得对于我可能是那样,我不希望的是对于他们(那些设计者)也这样
    我只是纯吐槽~~
    yangxin0
        28
    yangxin0  
       2016-10-08 15:16:48 +08:00 via iPhone
    请教一下 swift 3 稳定了吗?
    quietjosen
        29
    quietjosen  
    OP
       2016-10-08 15:22:29 +08:00
    @araraloren 好吧,看在我被坑的份上,就不给他们开脱了…
    quietjosen
        30
    quietjosen  
    OP
       2016-10-08 15:22:57 +08:00
    @yangxin0 我这个级别,回答不了这种高层次的问题 :(
    xjbeta
        31
    xjbeta  
       2016-10-08 16:20:38 +08:00
    对的 base64 是个小坑 我也踩了。。。
    webfrogs
        32
    webfrogs  
       2016-10-08 16:23:40 +08:00
    我是不信任这个自动转换工具的。
    sutra
        33
    sutra  
       2016-10-08 17:06:08 +08:00
    所以其实这是一个广告?
    quietjosen
        34
    quietjosen  
    OP
       2016-10-08 17:56:16 +08:00
    @xjbeta 看来不是我一个人 😂
    quietjosen
        35
    quietjosen  
    OP
       2016-10-08 17:56:38 +08:00
    @webfrogs 可如果是手动转,会崩溃的…
    Sequencer
        36
    Sequencer  
       2016-10-08 22:17:46 +08:00
    hhh 好幸苦,现在这个 iPic 的代码量大约多少行了?
    quietjosen
        37
    quietjosen  
    OP
       2016-10-08 22:32:14 +08:00
    @Sequencer 没统计;代码少,说明工作量小;代码多,说明优化能力差;代码行这事不靠谱 😆
    Felldeadbird
        38
    Felldeadbird  
       2016-10-08 22:32:50 +08:00
    明年又来一个 swift4 ,问你怕未?!
    quietjosen
        39
    quietjosen  
    OP
       2016-10-08 22:49:44 +08:00   ❤️ 1
    @Felldeadbird 哎,我估计不会这么积极,抗到最后,等大家把坑都踩完了再升,嘿嘿~
    7sDream
        40
    7sDream  
       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 图文教程……

    (赶快跑
    xjbeta
        41
    xjbeta  
       2016-10-09 09:11:34 +08:00
    @quietjosen 话说 swift3 的 GCD 简直赞 精简掉了一大堆复杂东西 能把那本 OC 高级编程扔掉了 2333
    quietjosen
        42
    quietjosen  
    OP
       2016-10-09 11:57:01 +08:00
    @xjbeta 还没接触这部分,期待…
    jackisnotspirate
        43
    jackisnotspirate  
       2016-10-09 14:57:41 +08:00 via iPhone
    Swift 都这么大了,额,大公司面试还会纠住 oc runtime 那套问来问去
    quietjosen
        44
    quietjosen  
    OP
       2016-10-09 18:31:44 +08:00 via iPhone
    @jackisnotspirate 我觉得个人和小团队更容易迁移,大公司包袱重,不那么容易切换。
    milugt
        45
    milugt  
       2016-10-09 20:40:45 +08:00   ❤️ 1
    已经订购了 thx.
    quietjosen
        46
    quietjosen  
    OP
       2016-10-09 22:09:46 +08:00 via iPhone
    @milugt 是吗?应该是我🙏你才对,麻烦在 App Store 好评留言吧,先谢 😄
    urmyfaith
        47
    urmyfaith  
       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)
    quietjosen
        48
    quietjosen  
    OP
       2016-10-10 18:45:36 +08:00 via iPhone
    @urmyfaith 哎,我也是醉,先用文章中的链接下载 Swift 3 版本吧。

    话说,升 Sierra 不?
    urmyfaith
        49
    urmyfaith  
       2016-10-10 19:33:00 +08:00
    @quietjosen 暂时不想升.

    Sierra 就一个 Siri, 没有其他值得升的特性. = =

    等把项目发版了再来折腾系统这事...
    quietjosen
        50
    quietjosen  
    OP
       2016-10-10 20:42:01 +08:00 via iPhone
    @urmyfaith 确实,如果有发版本的需求,还是等版本稳定了再升比较稳妥。
    先用上面说的 iPic 版本吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2626 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 10:50 · PVG 18:50 · LAX 02:50 · JFK 05:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.