iOS开发:如何在iPhone3.2模拟器上运行我的iPhone4.2应用程序?

iOS开发:如何在iPhone3.2模拟器上运行我的iPhone4.2应用程序?,iphone,xcode,ipad,ios,Iphone,Xcode,Ipad,Ios,我正在潜入iOS开发,我正在构建一个支持iOS 3.2到4.2版本的简单应用程序。我已经在4.2模拟器上的最新版本Xcode中对其进行了相当好的测试,但我还想模拟它在iOS 3.2设备上运行。在阅读了一些关于这方面的教程之后,我设法下载并安装了旧版本的xcode以及旧版本的3.2 SDK,但是当我在旧版本的xcode中构建项目时,由于旧版本的xcode不支持的所有iOS 4.2功能,我收到了大量错误。我弱链接所有4.2框架,但仍然会出错。如何让我的4.2应用程序在这个旧版本的Xcode中成功构建

我正在潜入iOS开发,我正在构建一个支持iOS 3.2到4.2版本的简单应用程序。我已经在4.2模拟器上的最新版本Xcode中对其进行了相当好的测试,但我还想模拟它在iOS 3.2设备上运行。在阅读了一些关于这方面的教程之后,我设法下载并安装了旧版本的xcode以及旧版本的3.2 SDK,但是当我在旧版本的xcode中构建项目时,由于旧版本的xcode不支持的所有iOS 4.2功能,我收到了大量错误。我弱链接所有4.2框架,但仍然会出错。如何让我的4.2应用程序在这个旧版本的Xcode中成功构建,并在3.2 iPhone模拟器中运行


非常感谢你的智慧

您是否选择了将基本SDK设置为3.0或其他版本的选项?因为这样您也可以在旧操作系统上运行iOS 4.2中提供的新API

干杯

您需要在引用仅存在于4.2上的功能的任何行周围添加ifdef\uu IPHONE\u 4\u 2…endif。这样,3.2编译器将构建您的应用程序,就好像这些行不存在一样

您需要非常小心地构造这些语句,以便它们完全反映在3.2上运行内置的for-4.2构建时将被禁用的代码位,否则就没有什么意义了

这将在不包含任何4.2功能的情况下构建你的应用程序,因此它实际上不是测试你的弱链接等是否正确,它只是测试回退3.2代码的工作方式

它可能会对你不知道3.2中不存在的特性/方法提出一些警告。确保添加了适当的回退代码


顺便说一句,众所周知,苹果拒绝基本SDK为3.2的iPhone应用程序。如果返回4.0之前的版本,则至少需要支持3.1.3。我认为正确的方法如下: 1.如果您是为4.2版开发,那么您必须安装Xcode 4.2版。 2.在设备4.0和3.2操作系统上构建应用程序时,选择基本SDK到4.2,并将目标设备部署到您想要支持的最低版本,例如3.2。这将使您的代码与较低版本兼容,并且您的应用程序将在较低版本上加载

此外,要在较低版本中支持新的API,您可以访问以下链接:


我希望这对您有所帮助

您可以在最新的Xcode中同时运行3.2和4.x模拟器,当然不能同时运行!。您必须将基本SDK设置为4.2,将iOS部署目标设置为3.2。现在,您可以从项目窗口左上角的概览弹出菜单中选择3.2模拟器或更高版本。您还可以通过硬件->版本菜单项在iOS模拟器应用程序中选择模拟器版本。

关于第二个问题,在iOS模拟器中的3.2版iPhone中实际运行模拟器:我一直在努力解决这个问题-Xcode 4.0.2,将部署目标设置为iOS 3.2,将项目设置为仅iPhone,但当我尝试在3.2版的iOS模拟器中运行时,模拟器会演变成iPad模拟器,即使在我选择版本号之前它一直作为iPhone模拟器运行

这让我沮丧了一段时间。但我读了这篇文章,它很有道理:

iPhone从未运行过3.2;这是一个只发布iPad的版本。因此,即使iOS模拟器中的Hardware>Version菜单列出了3.2 7W367A,该设置可能只是为了与Hardware>Device>iPad兼容。当模拟器将我切换到iPad模拟器时,它正在执行这一规则。这完全有道理


因此,我需要一个3.1.3或更老的模拟器,才能像在3.x代iPhone上运行一样运行我的应用程序。这在我的Xcode 4版本中是不可用的,所以我现在对此无能为力,除了在我的机器上安装旧的Xcode版本之外,这对我来说是有意义的。

谢谢,再见。我看不到3.0或其他任何设置。3.0是我的壁橱设置。你可以在项目设置->构建->基本SDK部分看到。哇,真的吗?我必须手动模拟代码的结构?那太可怕了,我可没搞错。无论如何,谢谢你!谢谢,斯内哈尔,尽管我觉得你不明白我的问题。我了解如何配置xcode项目以支持多版本的操作系统,这一部分非常简单。我陷入困境的地方实际上是让我的应用程序在旧版本的模拟器上运行。据我所知,我需要下载带有3.2模拟器的旧版本Xcode,我确实下载了,但当我尝试构建代码以便它可以在3.2模拟器上运行时,我会收到大量编译错误,因为3.2 SDK不理解4.2代码。这就是我的问题所在,也是我目前所处的位置。编译器是否会给出类似于……的错误,操作系统版本4.0不支持这种方法。你遵守了上面的规定了吗 墨水