服务报价 | 域名主机 | 网络营销 | 软件工具| [加入收藏]
 热线电话: #
当前位置: 主页 > 开发教程 > ios开发教程 >

让Xcode给出比deployment target高的Api给出警告

时间:2016-01-19 20:31来源:未知 作者:最模板 点击:
上一次生产环境我们出现重大bug,因ApplePay上线,其中有一个宏文件我同事忘记加版本控制,测试也没测试(因为是小版本,applepay还未开放),导致线上一天崩溃近万次,多亏了jspat

上一次生产环境我们出现重大bug,因ApplePay上线,其中有一个宏文件我同事忘记加版本控制,测试也没测试(因为是小版本,applepay还未开放),导致线上一天崩溃近万次,多亏了jspatch,用热修复解决了此问题。那么问题来了,怎么让开发人员提前看到编译警告呢,以至于不犯这种低级错误。

解决

1.xcodebuild

这是我第一眼想到的方法,写shell脚本,用自动编译的形式检测。但是这个有很大的问题:
(1)Xcode7 现在支持的模拟器sdk是9.2版本,其他sdk需要我们自己在网上下载,一般都是从Xcode老版本中拷出来才行,可用xcodebuild -showsdks 查看支持的sdk,如下图


201601181.png


具体的xcodebuild使用介绍网上很多,我就不阐述了,刘伟的一篇文章写得很详细,可参考:xcodebuild 命令详解。
(2)其次是编译其他sdk的时间会很长(如果是大项目的话),写一个脚本编译也没多大优势。

2.更好的解决方法

更好的解决方式明显是让编译器直接给出警告!那么如何才能让编译器给出警告呢?


201601182.png


上面的图片引用自 Warn about new API Classes and Methods
对于Xcode中销毁的方法编译器直接给出警告,那么编译器是如何给出这些警告和错误信息的呢?
具体涉及deprecated,unavailable这些用法,可参考

[iOSSimulatorSDK] usr/include/Availability.h
[iOSSimulatorSDK] usr/include/AvailabilityInternal.h

我在stack overflow上搜到了一篇很受启发的文章:Is there a way for XCode to warn about new API calls?
其中好几个回答都很好,因此找到了开源项目MJGAvailability,
我修改了这个头文件,添加了ios7之后的api,但是最终在Xcode7上新建一个项目测试发现始终没有编译警告,但是对自定义标注的属性和方法都有警告,如下图


201601184.png

一开始我以为是把UIKit都系统控件是不是放在我自定义头文件之前了,后面过了很长时间才觉得应该Xcode中某些编译配置的问题,最终查到了是Enable Modules 和 Link Framwork automatically的原因,这是Xcode5之后提出的一门技术,具体可参考[iOS7中Objective-C和Foundation的新特性],最终我在Debug模式设置Enable Modules 和 Link Framework automatically为NO(可能会出现编译错误,因为自动连接取消,一些关联的库文件需要自己手动添加)


201601185.png

注意:由于我们重定义了系统宏,在release下不应该这样做,因为这样做可能会导致一些无法预知的问题,所以你可以在pch文件添加debug判断

(责任编辑:最模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容