用SDK 4.2开发的iPhone应用程序,需要与iOS 3.1.3向后兼容。

我已经用SDK 4.2构build了一个iPhone应用程序,但是我也知道要使它与iOS 3.1.3兼容。

第一步是将部署目标设置为3.1.3。 它运行良好的3.2模拟器,但应用程序崩溃有时,因为我使用了一些在这个早期的SDK中不可用的方法。

所以我的问题是,有没有一种简单的方法来find我在项目中使用的,在3.1.3中不可用的有问题的方法/类? (无需手动进行每个方法调用,并查阅有关SDK可用性的文档)

谢谢。

更新:我已经执行3.1.3的应用程序,并试图手动testing每个执行path,希望find所有exception。 这一切都取得了一定的成功。 但是,如果应用程序是巨大的呢? 有很多的执行path? 这个场景必须有一些工具。 任何想法都非常感激。

我有同样的问题,只是find了一个解决scheme。

您应该在您的前缀头部的开头添加以下定义:

#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使用macros__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0)标记头文件中方法的可用性。

由于您正在编译iOS, Availibility.h将应用Availibility.h的以下定义:

 #define __OSX_AVAILABLE_STARTING(_mac, _iphone) __AVAILABILITY_INTERNAL##_iphone 

所以方法实际上用__AVAILABILITY_INTERNAL__IPHONE_4_0和类似的macros标记。 通常,在使用新SDK进行编译时,这些macros将被replace为__AVAILABILITY_INTERNAL_WEAK_IMPORT ,而不会产生任何警告。 通过将我的答案开始处的行添加到您的前缀标题,您可以用__AVAILABILITY_INTERNAL_DEPRECATED覆盖这些定义。 因此,Xcode认为这些方法已被废弃,并产生警告。