掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务

迁移至Swift 3

上周我花了几天的时间,把我的Swift代码迁移到了Swift 3上,包括我的开源项目和私人项目。总体来看,这次迁移的过程还算顺利,在刚刚完成迁移的时候,Xcode的迁移工具界面上显示了大量的变更和错误,在刚看到它们的那一刻,我还是感到了一些不知所措。 

开源项目迁移策略

在迁移开源库的是,我使用的是下面这样的策略:

  • 1 所有的普通开发恰好都在develop这个分支上
  • 2 develop上再创建一个swift2.3分支,然后运行Swift 2.3Xcode迁移工具
  • 3 swift2.3分支上创建一个swift3.0分支,然后运行Swift 3.0的迁移工具

如下图所示:

 o-----o develop (swift 2.2)

       \

        o-----o swift2.3

               \
                o-----o swift3.0

我的计划,是要让这些分支保持同步。也就是,swift2.3develop之前,swift3.0swift2.3之前。我的最终目标,是要在Xcode 8发布之后,将每一个分支上的变更汇总成一个commit,并将其提交给develop

                           merge 2.3           merge 3.0

o------o                    o                    o-----------o develop

        \                  /                    /

         o--- swift2.3 ---o                    /

                           \                  /

                            o--- swift3.0 ---o

develop上的每一次合并,都会让库的版本号进行升级。例如,加入库当前的版本号为v2.0那么Swift 2.3的合并,会让库的版本号变成v3.0

私人项目

在我的私人项目上,我采用的是直接升级到Swift 3.0的做法。我使用了 CocoaPods,因此我首先迁移了我的各种依赖。

截止到目前为止,我的这个项目的依赖只有我自己的库,因此在代码控制工作相对轻松。然而,如果你使用了第三方依赖,那么我推荐你和当前的维护者进行一些有关迁移的讨论。大多数主流的项目都在做着类似的事情,例如,AlamoFire就有swift2.3swift3.0的分支。在需要的时候,你可以自己对第三方库进行fork和迁移——然后提交一个pull request或是使用你的fork,之后等待维护者为你提供解决方案。

Xcode 8正式发布之前,你需要将你的pod指定给这些新的分支:

pod 'MyLibrary', :git => 'https://github.com/username/MyLibrary.git', :branch => ‘swift3.0'

在依赖和Podfile升级之后,你就可以运行pod update将每一个库都升级至Swift 3.0了。然后,你可以迁移你的主app。我建议你将所有迁移汇总成一个commit进行提交,从而维持迁移历史的简洁性。

Tips

  • 1 在进行代码前一之前,不要忘了做周密的测试。迁移会带来大量的变更,周密的测试能保证你不会出现错误。
  • 2 迁移的过程中,表面做任何不必要的代码重构工作。
  • 3 如果你现在还没有进行迁移,那就再稍微等一等,等待下一个beta的发布。我就犯了类似的错误,在beta 2期间进行了迁移,结果迁移之后的第二天,beta 3就发布了。导致我不得不再一次进行迁移工作。
  • 4 不要尝试一天之内就将所有东西都迁移过去。这是一个比较耗时的工作
  • 5 当你不确定如何妥善迁移代码的时候,你要去proposal status page这个页面寻找相应的解决方案。在Implemented for Swift 3这个版块,你能找到各种问题及其对策。

Bugs

的迁移工具还不够完善。有的时候它会出现迁移失败的情况。当这种事情发生的时候,你可以尝试重新运行工具,如果还是不能解决问题,你最好的做法还是手动进行变更。以下是我在迁移过程中所遇到的一些问题:

  •  XCTAssert*()内的一些expression没有迁移成功。
  •  closure内的一些expression没有迁移成功。
  •  一些情况下,waitForExpectations(timeout:)没有迁移成功。
  •  在一些特定的情况下,将NSIndexPath迁移至IndexPath时,会导致一些意外的结果,例如(indexPath as! NSIndexPath).section
  •  有的时候optional protocol方法无法迁移成功,并且产生难以发现的bug

总结

迁移Swift代码需要大量的时间。在迁移完成之后,你可能会看到大量的变更和错误,它们会让你感到不知所措。但是无论如何,最终你还是要进行迁移工作。在完成了所有工作之后,你会获得极大的成就感。

小程序.jpg

原文来自:SDK.cn

声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

  • 购物小票识别

    支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景

    支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景

  • 涉农贷款地址识别

    涉农贷款地址识别,支持对私和对公两种方式。输入地址的行政区划越完整,识别准确度越高。

    涉农贷款地址识别,支持对私和对公两种方式。输入地址的行政区划越完整,识别准确度越高。

  • 人脸四要素

    根据给定的手机号、姓名、身份证、人像图片核验是否一致

    根据给定的手机号、姓名、身份证、人像图片核验是否一致

  • 个人/企业涉诉查询

    通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。

    通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。

  • IP反查域名

    IP反查域名是通过IP查询相关联的域名信息的功能,它提供IP地址历史上绑定过的域名信息。

    IP反查域名是通过IP查询相关联的域名信息的功能,它提供IP地址历史上绑定过的域名信息。

0512-88869195
数 据 驱 动 未 来
Data Drives The Future