是否可以使用XCode 3.2.3中的iPhone模拟器3.1?

时间:2010-06-25 16:43:51

标签: iphone ios-simulator ios4 xcode3.2

因为SDK 4中的模拟器3.2和4.0实际上并不适用于iPhone模拟(它总是出现在iPad上而根本没有响应),所以我最终安装了2个SDK,使用SDK 3.1.3 / Simulator 3.1模拟和SDK 4用于在OS 4上构建到iPhone 4.(更多细节here。)

我尝试使用SDK4-XCode 3.2.3中的旧模拟器3.1,例如通过将完整的“iPhoneSimulator.platform / Developer / SDKs / iPhoneSimulator3.1.3.sdk”目录复制到相应的XCode3.2.3目录中,并选择Simulator-3.1.3(确实出现在“Active Executable”列表中),但是它不能构建,超过30个错误,例如

  

未定义的符号:
  “_OBJC_CLASS _ $ _ NSURLConnection的”,   引自:         objc-class-ref-to-NSURLConnection in   GRACEViewController.o
  “_OBJC_CLASS _ $ _ NSString”,引用   从:         GRACEViewController.o中的objc-class-ref-to-NSString

有没有办法在使用XCode 3.2.3时使用模拟器3.1(而不是模拟器3.2或4.0)(必须在OS 4上构建iPhone)?

2 个答案:

答案 0 :(得分:3)

XCode 3.2.3确实做了iPhone模拟。您需要确保您的项目设置正确。我有以下设置,它适用于我:

  • 基本SDK: iPhone Device 4.0
  • 目标设备系列: iPhone
  • 部署目标: iPhone OS 3.0

有了这个,您应该可以选择在iPhone模拟器中运行项目。

答案 1 :(得分:0)

我发现通过完全保护任何OS3.2代码,我可以选择编译为3.1.3或3.2,只需在编译时更改Active SDK即可。 3.1.3将始终出现在iPhone模拟器中,3.2将始终出现在iPad模拟器中。

以下是完全受保护代码的示例:

    #ifdef UI_USER_INTERFACE_IDIOM
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// iPad Only Code Goes here
            [deviceType setString:@"ipad"];
        } else {
    #endif
// iPhone Only Code Goes Here
            [deviceType setString:@"iphone"];
    #ifdef UI_USER_INTERFACE_IDIOM
        }
    #endif