• 请不要在回答技术问题时复制粘贴 AI 生成的内容
quietjosen
V2EX  ›  程序员

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

  •  
  •   quietjosen ·
    atjason · Oct 8, 2016 · 7298 views
    This topic created in 3506 days ago, the information mentioned may be changed or developed.

    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 replies    2016-10-10 20:42:01 +08:00
    kevin335200
        1
    kevin335200  
       Oct 8, 2016 via Android
    楼主不容易啊。
    beimenjun
        2
    beimenjun  
    PRO
       Oct 8, 2016
    大家统一下 Xcode 的大小写写法吧!

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

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

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

    Anyway , LZ 好样的~ 加油!

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

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

    学 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  
       Oct 9, 2016
    @quietjosen 话说 swift3 的 GCD 简直赞 精简掉了一大堆复杂东西 能把那本 OC 高级编程扔掉了 2333
    quietjosen
        42
    quietjosen  
    OP
       Oct 9, 2016
    @xjbeta 还没接触这部分,期待…
    jackisnotspirate
        43
    jackisnotspirate  
       Oct 9, 2016 via iPhone
    Swift 都这么大了,额,大公司面试还会纠住 oc runtime 那套问来问去
    quietjosen
        44
    quietjosen  
    OP
       Oct 9, 2016 via iPhone
    @jackisnotspirate 我觉得个人和小团队更容易迁移,大公司包袱重,不那么容易切换。
    milugt
        45
    milugt  
       Oct 9, 2016   ❤️ 1
    已经订购了 thx.
    quietjosen
        46
    quietjosen  
    OP
       Oct 9, 2016 via iPhone
    @milugt 是吗?应该是我🙏你才对,麻烦在 App Store 好评留言吧,先谢 😄
    urmyfaith
        47
    urmyfaith  
       Oct 10, 2016
    很久之前就是这样了.

    ```
    The server gave an error during download: 404 Not Found.
    ```

    之前好歹有个有个版本可以用.

    然后我今天把之前的低版本删除了.

    然后取 app store 里已购项目去安装.
    总是提示这个错误.

    开不开代理都是.

    macOS 10.11.6 (15G1004)
    quietjosen
        48
    quietjosen  
    OP
       Oct 10, 2016 via iPhone
    @urmyfaith 哎,我也是醉,先用文章中的链接下载 Swift 3 版本吧。

    话说,升 Sierra 不?
    urmyfaith
        49
    urmyfaith  
       Oct 10, 2016
    @quietjosen 暂时不想升.

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

    等把项目发版了再来折腾系统这事...
    quietjosen
        50
    quietjosen  
    OP
       Oct 10, 2016 via iPhone
    @urmyfaith 确实,如果有发版本的需求,还是等版本稳定了再升比较稳妥。
    先用上面说的 iPic 版本吧。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2908 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 117ms · UTC 12:02 · PVG 20:02 · LAX 05:02 · JFK 08:02
    ♥ Do have faith in what you're doing.