我们维护了许多针对iOS 7的静态库,作为即将发布的iOS 8版本的一部分,能够支持核心数据和核心位置等部分新功能将会很有用。
是唯一可以选择生成两个版本的库,一个是针对iOS 7,另一个是针对iOS 8,或者是否可以在同一个库中同时支持这两个版本。
如果使用该库的应用程序定位到iOS 8,那么可以使用额外的功能,如果您的目标是iOS 7,那么您只需获得当前的功能就可以了。
答案 0 :(得分:0)
这是一种方法。我没有在图书馆内使用它,但我想不出为什么它不会在那里工作:
SEL registerUserNotificationSettings = NSSelectorFromString(@"registerUserNotificationSettings:");
// iOS 8 requires explicit permission from the user for local notifications
if ([application respondsToSelector:registerUserNotificationSettings]) {
//Extra hack for the bit settings since we're building with a SDK that doesn't have the symbols
#define REQUIRED_SETTINGS 7
Class settingsClass = NSClassFromString(@"UIUserNotificationSettings");
if (settingsClass) {
id settings = objc_msgSend(settingsClass, @selector(settingsForTypes:categories:), REQUIRED_SETTINGS, nil);
objc_msgSend(application, registerUserNotificationSettings, settings);
}
}
这是在代码部分内实现的,假设它是使用iOS 7 SDK构建的。 respondsToSelector:
本质上是iOS 8+运行时检查。
答案 1 :(得分:0)
我没有看到您可以自动执行此操作,因为在链接时,您不知道图像将运行的硬件。
您可以使用立面图案。当您意识到某个特定方法可以根据iOS进行不同的实现时,请创建两个版本,然后让该方法将该方法转发到适当的版本。
最简洁的方法是使用Objective C运行时方法。您需要从Apple获得目标c运行时指南。你想看的东西是方法调整,例如setImplementation。每次实例化一个接口对象时,都可以运行与os版本相关的方法并设置相应的实现。