IOS旧版本检查

时间:2016-01-26 10:23:09

标签: ios objective-c apple-watch

我正在开发IOS和AppleWatch应用程序。这些应用程序在一个应用程我的应用程序最小IOS版本是IOS 6.0。但最小的AppleWatch代码IOS版本是IOS 9.0。我在IOS 6设备中测试了此代码,但此代码块运行。我想不在IOS 6中运行此代码块。我想在IOS 9.0中运行。请帮忙。

.h 
#import <Foundation/Foundation.h>
#if defined(__IPHONE_9_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0
#import <WatchConnectivity/WatchConnectivity.h>
#endif

#if defined(__IPHONE_9_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0
@interface WatchConnectivityManager : NSObject<WCSessionDelegate>{
#else
@interface WatchConnectivityManager : NSObject{
#endif

}

@property(nonatomic, assign) BOOL oneTimeSaved;

+(WatchConnectivityManager*)getInstance;

-(void)sharedDefaultsDataSave:(NSString*)params;
@end
.m

- (id) init
{
    if (self = [super init]) {

        #if defined(__IPHONE_9_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0
        //This code run IOS 9.0
        if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0") && NSClassFromString(@"WCSession")!=nil && [WCSession isSupported]) {
            WCSession *session = [WCSession defaultSession];
            session.delegate = self;
            [session activateSession];

        }

        #endif

    }
    /* finally return the object */

    return self;
}

1 个答案:

答案 0 :(得分:1)

<强>更新 对于标题,您确实需要预处理程序指令(或考虑切换到swift并使用@available

我认为你使用了错误的指令:

#import <Foundation/Foundation.h>
#if defined(__IPHONE_9_0) && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_9_0
#import <WatchConnectivity/WatchConnectivity.h>
#endif

#if defined(__IPHONE_9_0) && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_9_0
@interface WatchConnectivityManager : NSObject<WCSessionDelegate>{
#else
@interface WatchConnectivityManager : NSObject{
#endif
}

请注意,我将__IPHONE_OS_VERSION_MAX_ALLOWED替换为__IPHONE_OS_VERSION_MIN_REQUIRED

在这种情况下不要使用预处理程序指令,它可能会出错并混淆编译器

- (id) init
{
    if (self = [super init]) {
        if (NSClassFromString(@"WCSession") && [WCSession isSupported]) { // [WCSession class] in iOS
            WCSession *session = [WCSession defaultSession];
            session.delegate = self;
            [session activateSession];
        }
    }
    return self;
}

当WCSession可用时,将确保仅调用if块,这是我认为你想要的并且是向下兼容的