在静态库中支持多个版本的iOS
我们维护了许多针对iOS 7的静态库,作为即将发布的iOS 8的一部分,能够支持核心数据和核心位置等方面的一些新功能将是一件好事 是生成两个版本的库的唯一选项,一个针对iOS 7,一个针对iOS 8,或者是否有办法在同一个库中同时支持这两个版本在静态库中支持多个版本的iOS,ios,objective-c,static-libraries,ios8,ios-frameworks,Ios,Objective C,Static Libraries,Ios8,Ios Frameworks,我们维护了许多针对iOS 7的静态库,作为即将发布的iOS 8的一部分,能够支持核心数据和核心位置等方面的一些新功能将是一件好事 是生成两个版本的库的唯一选项,一个针对iOS 7,一个针对iOS 8,或者是否有办法在同一个库中同时支持这两个版本 如果使用库的应用程序的目标是iOS 8,那么额外的功能就可以使用,如果你的目标是iOS 7,那么你就可以获得当前的功能 这里有一种方法。我没有在图书馆里使用过它,但我想不出为什么它在那里不起作用: SEL registerUserNotification
如果使用库的应用程序的目标是iOS 8,那么额外的功能就可以使用,如果你的目标是iOS 7,那么你就可以获得当前的功能 这里有一种方法。我没有在图书馆里使用过它,但我想不出为什么它在那里不起作用:
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构建的。
响应选择器:
本质上是一个iOS 8+运行时检查。我看不出您可以自动执行此操作,因为在链接时,您不知道映像将在什么硬件上运行
您可以使用门面模式。当您意识到某个特定方法的实现可能会因iOS的不同而有所不同时,请创建两个版本,并让facade将该方法转发到相应的版本
最干净的方法是使用Objective C运行时方法。您需要从Apple获得objective c运行时指南。你想看的东西是方法转换,例如setImplementation。每次实例化接口对象时,都可以运行os版本相关的方法并设置适当的实现