我已经使用SDK 4.2构建了一个iPhone应用程序但是我知道也想让它与iOS 3.1.3兼容。
第一步是将部署目标设置为3.1.3。它在3.2模拟器上运行良好但是应用程序有时崩溃,因为我使用的是一些早期SDK中没有的方法。
所以我的问题是,有没有直接的方法来找到我在项目中使用的有缺陷的方法/类,这在3.1.3中是不可用的? (没有手动完成每个方法调用并咨询文档以获取SDK的可用性?)
感谢。
UPDATE:我已经在3.1.3上执行了应用程序,并试图手动测试每个执行路径,希望找到所有异常。这完成了一定程度的成功。但是,如果应用程序是巨大的呢?并且有很多执行路径?这种情况必须有一些工具。任何想法都非常感激。
答案 0 :(得分:12)
我遇到了同样的问题,只是找到了解决方案。
您应该在前缀标题的开头添加以下定义:
#import <Availability.h>
#define __AVAILABILITY_INTERNAL__IPHONE_3_2 __AVAILABILITY_INTERNAL_DEPRECATED
#define __AVAILABILITY_INTERNAL__IPHONE_4_0 __AVAILABILITY_INTERNAL_DEPRECATED
#define __AVAILABILITY_INTERNAL__IPHONE_4_1 __AVAILABILITY_INTERNAL_DEPRECATED
#define __AVAILABILITY_INTERNAL__IPHONE_4_2 __AVAILABILITY_INTERNAL_DEPRECATED
#define __AVAILABILITY_INTERNAL__IPHONE_4_3 __AVAILABILITY_INTERNAL_DEPRECATED
然后,下次编译应用程序时,旧版本中不可用的方法(在本例中为iOS 3.1)将被标记为已弃用,您将收到每个方法的警告。
如果您想收到错误,可以使用__AVAILABILITY_INTERNAL_UNAVAILABLE
代替__AVAILABILITY_INTERNAL_DEPRECATED
。
这些行重新定义了AvailabilityInternal.h中的实际定义,因此您应该在完成后从前缀标题中删除它们。
以下是它的工作原理:
Apple使用__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0)
等宏标记头文件中方法的可用性。
由于您正在为iOS编译,因此应用Availibility.h
中的以下定义:
#define __OSX_AVAILABLE_STARTING(_mac, _iphone) __AVAILABILITY_INTERNAL##_iphone
因此,这些方法实际上标有__AVAILABILITY_INTERNAL__IPHONE_4_0
和类似的宏。通常,当您使用新SDK进行编译时,这些宏将替换为__AVAILABILITY_INTERNAL_WEAK_IMPORT
,这不会产生任何警告。通过在我的前缀标题的答案开头添加行,您可以使用__AVAILABILITY_INTERNAL_DEPRECATED
覆盖这些定义。因此,Xcode认为这些方法已被弃用并产生警告。