在不破坏向后兼容性的前提下整合Newsstand

6
我正在研究将Newsstand集成到一个新的iOS应用程序中,想知道是否可以以一种方式进行此操作,使得该应用程序仍然可以在尚未迁移到iOS 5的设备上运行。
有人能否给我一些反馈,如何设计一个应用程序来处理这个问题?
我知道可以使用不同的目标和源文件集合来创建单个应用程序,但我更希望保持代码库尽可能统一,并动态地测试Newsstand功能。
1个回答

5
首先,您需要将应用程序与NewsstandKit框架进行弱链接,避免因缺少库而导致iOS版本小于5的设备崩溃。然后在运行时,需要避免调用NK方法并引用NK类,这显然在iOS版本小于5的情况下是不可用的。在这种情况下,您可以使用NSClassFromString()等obj-c运行时功能来动态检测这些功能的存在。建议您在这种情况下提供一个预编译器指令,以便在编译级别上隔离所有Newsstand内容。这样,您可以尝试使用SDK 4(如果有的话)进行编译,并查看编译器错误或警告。例如,如果您在Prefix.pch中添加了以下定义。

#define WILL_USE_NK

然后您可以这样括起所有 NK 引用:

#ifdef WILL_USE_NK
... your NK statements go here ...
#endif

稍后,当您使用SDK4编译应用程序时,请保留这个定义,这样您将拥有一个适用于iOS4设备的真正的SDK4编译版本(可供测试),并确保所有NK引用都没有被iOS4应用程序使用。然后,在分发应用程序之前,您必须#undef此定义并使用SDK5进行编译(当然要保持一些iOS 4.x作为最低目标)。

当然,这样做并不能保护您免受所有可能的错误的影响,但至少您已经隔离了NK引用。

至于应用程序业务逻辑的更好策略,这取决于您:这不是一项容易的任务,因为现在Newsstand负责许多方面,如后台下载等。此外,杂志模型现在分为您现有的模型和NKIssue功能,但所有这些都是实现细节,超出了这个特定问题的范围。


嗨Viggio,这是一个很棒的想法,谢谢。这使我能够保持我的代码统一,同时隔离可能会导致向后兼容性问题的部分。非常感谢! - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接