在OS3.x上运行时,IPhone OS4功能链接错误

时间:2010-07-05 09:09:51

标签: iphone

我已经在iPhone OS 3.0上使用IPhone base SDK 4.0编译了一个应用程序。此应用程序包含OS 4.0新功能:本地通知。

适用于OS 2的iPod 2G;然而,每次应用程序启动iPhone 1G OS 3.0时它都会崩溃。它似乎是运行时引用错误:

“dyld:未找到符号:_OBJC_CLASS _ $ _ UILocalNotification   参考自:/ var / mobile / Applications / 73A3FAB1-63AE-4A71-8C6B-932142A728FE / Tapatalk X.app/Tapatalk X   预计在:/System/Library/Frameworks/UIKit.framework/UIKit“

如果UIDit框架在SDK3.0和SDK之间有所不同SDK4.0,为什么编译时不报告?如何在此应用程序上应用本地通知功能,而应用程序仍可在运行OS3.0的设备上运行?谢谢。

3 个答案:

答案 0 :(得分:8)

This answer为我解决了这个问题:

  

该错误正在被触发,因为   你并没有弱化UIKit   框架。 UIKit框架   iPhone OS 3.2添加了   UISplitViewController,如果你链接   它正常应用程序   假设这些符号存在于3.0,   他们没有。

     

要弱化框架,找到你的   Xcode中的应用程序目标,检查   它,然后转到常规选项卡。在   该选项卡的底部应该是一个列表   框架,带有Type列。   从中更改UIKit的类型   要求弱和重建你的   应用。这应该照顾   运行时错误。

这对我来说似乎是安全的,因为UIKit总是会出现在我们正在瞄准的设备上。

答案 1 :(得分:1)

如果您使用4.0 SDK功能并且想要支持3.0设备,则需要在使用之前检查该功能是否存在。

如果您正在使用新课程(就像您一样),以下内容应该起作用:

Class localNotificationC = NSClassFromString(@"UILocalNotification");
if (localNotificationC) {
    UILocalNotification* localNotification = [[localNotificationC alloc] init];

    // do stuff

    [localNotification release];
}
else {
    // what to do with the 3.0 SDK
}

至于编译器没有告诉你的原因,你告诉编译器你使用的是4.0 SDK,那些类/方法适用于4.0。

答案 2 :(得分:0)

我发现这些信息非常有用。但是我的问题是如何在此更改后测试应用程序是否崩溃。

背景是我的iPad应用程序遇到了同样的问题。我将BaseSDK设置为4.3,部署目标为3.2。在3.2 iPad上进行临时配置和运行应用程序时,我从来没有遇到过这种崩溃,而且Apple也批准了它。但是用户报告称,当他们在iPad 3.2上下载后启动应用程序时,它会在显示主屏幕之前崩溃。

我在我的代码中使用了[UILocalNotifition alloc],我认为这可能是下面崩溃的结果: 例外类型:EXC_BREAKPOINT(SIGTRAP) 例外代码:0x00000001,0xe7ffdefe

我似乎已根据斯蒂芬的建议修改了上述陈述。 但是我真的不知道如何测试它。在3.2上提交之前测试应用程序时我也没有遇到任何崩溃,目前我也没有在启动时遇到任何崩溃。

在将更新推送到应用商店之前,我确实需要验证此修复程序。有人可以更多地了解如何测试这个吗?如果我可以使用我的应用程序的先前版本重现此崩溃将非常有用,并且在此修复之后与当前版本的情况不同。