掌握聚合最新动态了解行业最新趋势
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