如何在iPod 3.1.3上运行通用应用程序(iPad和iphone 4.1)

时间:2010-10-08 10:05:34

标签: iphone ios4 universal-binary

我正在为iphone / ipad构建通用,我已经将部署目标设置为3.0。它可以在iPad 3.2和iphone 4.1上运行良好。但是,当我在iPod 3.1.3上构建并运行它时,运行时会自动选择iPad代码路径并告诉我它找不到UIP​​opOverController和UIMenuItem。在我的iPhone路径代码中,我没有使用类似的东西。

它构建成功,只有在尝试运行时才会出错,并且无法找到:

dyld: Symbol not found: _OBJC_CLASS_$_UIPopoverController
  Referenced from: /var/mobile/Applications/My_APP
  Expected in: /System/Library/Frameworks/UIKit.framework/UIKit

编辑

如果我删除所有iPad类并将App.info主nib包设置为仅限iphone。然后,它运作良好。我认为问题是它运行的是iPad代码。我不知道我的iPod或我的项目有什么问题

2 个答案:

答案 0 :(得分:2)

您需要为3.1.3上不存在的类进行运行时测试。你不能拥有像[UIPopoverControler alloc]这样的代码,你必须弱化框架。

查看这个问题的答案:

How should I approach building a Universal iOS app that will include iOS 4 features, even though the iPad doesn't yet run iOS 4?

(问题与你的不同,但根本问题是相同的。)

或者这篇文章:

http://cocoawithlove.com/2010/07/tips-tricks-for-conditional-ios3-ios32.html

答案 1 :(得分:1)

如果您只是想绕过编译时问题,因为该设备永远不会出现问题代码,那么您可以通过这种方式调用popover等类:

Class infopopclass = NSClassFromString(@"UIPopoverController");
if(infopopclass) {
    id infopop = [[infopopclass alloc] initWithContentViewController:myPopViewController];
    [infopop presentPopoverFromRect:CGRectMake(20, 70, 10, 10) inView:self.view permittedArrowDirections:4 animated:YES];
}