在不破坏向后兼容性的情况下集成报亭

问题描述:

我在调查将Newsstand整合到新的iOS应用程序中,并且想知道我是否可以通过仍然允许应用程序在尚未迁移到iOS 5的设备上运行的方式执行此操作。在不破坏向后兼容性的情况下集成报亭

任何人都可以给我一些关于如何构建一个应用程序来处理这个问题的反馈?

我知道有可能让一个应用程序具有不同的目标和源文件集,但我希望尽可能保持代码库的统一性,并动态地测试报亭功能。

首先,它必须将您的应用程序弱连接到NewsstandKit框架。这可以避免由于缺少库而导致iOS版本为< 5的设备崩溃。

然后在运行时,您需要避免调用NK方法并引用NK类,这些类明显在iOS <中不可用5.在这种情况下,您可以使用NSClassFromString()或其他obj-c运行时功能的方法,动态检测这些功能的存在。

在这种情况下,我可以这样做的建议是提供一个预编译器指令,允许您在编译级别隔离所有报亭的内容。通过这种方式,您可以尝试使用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引用。

就应用程序业务逻辑的更好策略而言,这取决于您:这不是一件容易的事情,因为现在报亭需要处理很多方面的问题,如后台下载等。除了现在的模型和NKIssue特性之外,杂志模型现在分开了,但所有这些都是超出这个特定问题的实现细节。

+0

嗨维吉奥,这是一个好主意,谢谢。这使我可以保持我的代码统一,同时隔离可能导致向后兼容性问题的部分。非常感谢! – James