mrd*_*650 3 backwards-compatibility ios
我用SDK 4.2构建了一个iPhone应用程序但是我知道也想让它与iOS 3.1.3兼容.
第一步是将部署目标设置为3.1.3.它在3.2模拟器上运行良好,但应用程序有时会崩溃,因为我使用的是一些早期SDK中没有的方法.
所以我的问题是,是否有一种直接的方法来找到我在项目中使用的有缺陷的方法/类,这些方法/类在3.1.3中不可用?(无需手动完成每个方法调用,并参考文档以获取SDK的可用性?)
谢谢.
更新:我已经在3.1.3上执行了应用程序并尝试手动测试每个执行路径,希望找到所有异常.这完成了一定程度的成功.但是,如果应用程序很大,该怎么办?并且有很多执行路径?这种情况必须有一些工具.任何想法都非常感激.
mur*_*rat 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
Run Code Online (Sandbox Code Playgroud)
然后,下次编译应用程序时,旧版本中不可用的方法(在本例中为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
Run Code Online (Sandbox Code Playgroud)
所以这些方法实际上都标有 __AVAILABILITY_INTERNAL__IPHONE_4_0相似的宏.通常,当您使用新SDK进行编译时,这些宏将替换为__AVAILABILITY_INTERNAL_WEAK_IMPORT,这不会产生任何警告.通过在我的前缀标题的答案开头添加行,您可以使用覆盖这些定义__AVAILABILITY_INTERNAL_DEPRECATED.因此,Xcode认为这些方法已被弃用并产生警告.
| 归档时间: |
|
| 查看次数: |
671 次 |
| 最近记录: |