2

我正在将新 API 用于应用内应用商店产品视图。我知道它应该只适用于 IOS 6 及更高版本,但是,我的应用程序适用于 ios 5 及更高版本。现在,当您点击将您带到商店的按钮时,该应用程序将变得柠檬并冻结您!

SKStoreProductViewController

我将如何测试此设备是否能够执行此功能?或者如果这是 ios 6 及更高版本?

我正在寻找类似于“应用内邮件”的东西,它有一个名为的方法CanSendMail,有这样的方法SKStore吗?

此外

我将框架弱链接为Option.

更新

我尝试使用它但仍然无法正常工作!没有任何日志:(

if (error) {
        NSLog(@"Error %@ with User Info %@.", error, [error userInfo]);


    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                    message:@"Your device doesn't support In-App Product View"
                                                   delegate:nil
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles:nil];
    [alert show];


    } else {
        // Present Store Product View Controller
        [self presentViewController:storeProductViewController animated:YES completion:nil];
    }
}];

}
4

2 回答 2

2

测试类在运行时是否可用的一般方法是使用NSClassFromString. 所以,你可以这样做:

Class cls = NSClassFromString(@"SKStoreProductViewController");
if (cls)
{
    // The device is iOS 6.0 or higher, so it's safe to use this class
    SKStoreProductViewController *viewController = [[cls alloc] init];
    ...
}
else
{
    // The device is pre-iOS 6.0; show an error message or have some other
    // reasonable fallback behavior
}

如果您使用的框架在您定位的最低 iOS 版本中不可用,那么您还必须确保对框架进行弱链接。正如@rmaddy 指出的那样,您应该查看SDK 兼容性指南以获取完整的血腥细节。

于 2013-04-17T04:38:05.577 回答
1

我发现这个效果最好:

#define SYSTEM_VERSION_EQUAL_TO(v)                  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v)              ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)

if (SYSTEM_VERSION_LESS_THAN(@"6.0")) {

// iOS Version 5.1 and older    

}

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) {

// iOS Version 6.0 and later    

}

将您的商店产品视图代码复制到 6.0 之后的版本,并将您的后备代码复制到 5.1 和更早版本。

我从这里学到了这一点。祝你好运!!

于 2013-04-20T23:23:35.327 回答