Swift2.3迁移到Swift3.0

迁移并使用动态库

一个Swift2.3项目迁移到Swift3.0, 并且使用use_framworks!全部第三方库升级到动态库.

一共花费了将近2个星期解决遇到的问题, 非常多的坑!

公司有十几个的公共库被导入, 而这些库的#importpodspec.json使用不规范,导致迁移动态库遇到很多问题.

#import

动态库: 引用并其他库的头文件时, 必须使用 #import, 而不能使用 #import"UIImageView+WebCache.h"
静态库: 静态库使用2种均不会报错, 而动态库必须使用第一种.

podspec.json

podspec.json: 由podspec ruby生成json文件, CocoaPods根据这个文件,管理和配置第三方库的代码和依赖.

动态库: 你的库依赖什么第三方库, podspec中dependencies字段, 必须的填写你所依赖库的名字, 否则编译会报错xxx file not found,

静态库: 即使你不写依赖, 编译仍然可以找到文件

Redundant confromance of 'xxx' to protocol 'xxx'

当使用一个OC的动态库时候, 无论你是在Bridge.h 使用 @import XXKit; 还是在.swift文件里使用 import XXKit. OC库里面的Category将会作用全局.

BlocksKit里有很多Category, 并且在.h公开了一些协议.

//UIActionSheet+BlocksKit.h
@interface UIActionSheet (BlocksKit) 

///-----------------------------------
/// @name Creating action sheets
///-----------------------------------

@end

那么你只要导入了他的框架, 那么他会默认给所有继承UIActionSheet的子类统统添加上UIActionSheetDelegate协议.

最好的办法就是将协议放在 .m文件, 然后作为私有协议使用.
如果这要公开出来, 那么也不要使用系统的协议, 你可以自己声明一些自己写的协议, 否则Swift在动态库使用的时候, 会默认給所有的class添加这个协议.
按规范写呀!

swift error in module info from this module will be unavailable in the debugger

当我整理完全部项目的时候, 调试窗口的变量统统不可以视。
网上说是Bridge.h文件导入库用了import<>,应该全部换成import""或者@import。


但是我尝试之后都不能解决问题, 于是版本回滚到早前的版本查找问题.
后来在AppDelegate 注释了一个我公司的一个库, 然后在Bridge.h文件 @import AuditManageKit;, 然后就可以正常调试了. 这有可能是Xcode编译器的Bug也可以是代码不规范导致的.

原因我猜测:
其它同事写的OC文件, 被他导入到 Bridge.h文件内, 成为了全局导入的文件, 那么在import kit可能会造成重复引用. 但Swift Compiled 居然不报错, 这简直坑死人了, 折腾一天才解决这个问题.

重要的事情再说一次, 写代码一定要规范.

你可能感兴趣的:(Swift2.3迁移到Swift3.0)