iOS 4.3.3上的GKNotificationBanner

时间:2012-07-27 21:56:05

标签: ios ios5 crash app-store

我在iOS 4.1+应用程序中使用框架GKAchievementNotification(https://github.com/typeoneerror/GKAchievementNotification)。此应用程序已获得Apple批准(位于应用程序商店),但似乎在iOS 4.3.3上崩溃。崩溃日志如下:

OS Version:      iPhone OS 4.3.3 (8J3)
Report Version:  104

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x00000001, 0xe7ffdefe
Crashed Thread:  0

Dyld Error Message:
  Symbol not found: _OBJC_CLASS_$_GKNotificationBanner
  Referenced from: /var/mobile/Applications/08289A0B-7AD3-4E37-B29F-A EDFE97B7ACA/PolarDefense.app/PolarDefense
  Expected in: /System/Library/Frameworks/GameKit.framework/GameKit
  in /var/mobile/Applications/08289A0B-7AD3-4E37-B29F-AEDFE97B7ACA/PolarDefense.app/PolarDefense
  Dyld Version: 191.3

似乎框架没有正确地丢弃它不支持的iOS版本的GKNotificationBanner(5.0之前的iOS)。

我假设错误在于以下代码,你认为它错了什么?

@implementation GKAchievementHandler(private)
- (void)displayNotification:(GKAchievementNotification *)notification {
 #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 50000
  if ([GKNotificationBanner class]) {
    [GKNotificationBanner showBannerWithTitle:notification.title 
                                      message:notification.message
                            completionHandler:^{
                                [self didHideAchievementNotification:notification];
                            }
     ];
  } else
 #endif
  {
    [_topView addSubview:notification];
    [notification animateIn];
  }
}
@end

GKNotificationBanner在更多地方被引用,但总是被#if __IPHONE_OS_VERSION_MAX_ALLOWED> = 50000

包围

那怎么会崩溃? (为什么只有在发布模式?)

部署目标是4.1。我现在读到只有4.2支持运行时检查是否存在类。这可能是问题吗?

2 个答案:

答案 0 :(得分:2)

#if语句将在编译时解析,而不是在运行时解析,并检查Base SDK版本而不是部署版本。由于您使用最新的iOS版本构建,因此无论运行哪个iOS版本,都将始终执行此代码。

您可以在运行时检查可用性,如:

id GKNotificationBannerClass = NSClassFromString(@"GKNotificationBanner");
if (GKNotificationBannerClass) {
....

答案 1 :(得分:0)

认为这可能与我有一个必要的链接到GameKit有关。将其更改为弱并将其提交到App Store(第三次)。