Xcode4 使用Xcode 4.2编译iOS 3.1.3

Xcode4 使用Xcode 4.2编译iOS 3.1.3,xcode4,compilation,crash,ios-3.x,Xcode4,Compilation,Crash,Ios 3.x,Xcode 4.2是否支持为iOS 3.1.3编译项目?我试着编译一个我目前正在做的项目,每次我试着在iOS 3.1.3的iPhone3G上运行这个应用程序时都会遇到崩溃。我知道我正在运行的操作系统已经过时了,但是客户端要求应用程序应该在iOS 3.1.3上运行。有没有办法解决这个问题?内置设置更改以下设置: 基本SDK->最新的iOS(iOS 5.0) iOS部署目标->iOS 3.1 架构->选择其他。。。并手动添加“armv6” 有效架构->删除“armv7”,只需离开“armv6” 在*

Xcode 4.2是否支持为iOS 3.1.3编译项目?我试着编译一个我目前正在做的项目,每次我试着在iOS 3.1.3的iPhone3G上运行这个应用程序时都会遇到崩溃。我知道我正在运行的操作系统已经过时了,但是客户端要求应用程序应该在iOS 3.1.3上运行。有没有办法解决这个问题?

内置设置更改以下设置:

  • 基本SDK->最新的iOS(iOS 5.0)
  • iOS部署目标->iOS 3.1
  • 架构->选择其他。。。并手动添加“armv6”
  • 有效架构->删除“armv7”,只需离开“armv6”
  • 在*AppDelegate.m中

    - (bool)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    
    {
        self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];
        // Override point for customization after application launch.
        self.viewController = [[[MyHudDemoViewController alloc] initWithNibName:@"MyHudDemoViewController" bundle:nil] autorelease];
    
        // NOTE THIS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        // iOS 3.1 don't support the following statement.
        //self.window.rootViewController = self.viewController;
        [self.window addSubview:self.viewController.view];
    
        [self.window makeKeyAndVisible];
        return YES;
    }
    
    呃……对不起。。。忘了一个

  • 检查项目的Info.plist,如果它具有“必需的设备功能”项,则将该项从“armv7”更改为“armv6”

  • 为了让XCode 4在iOS 3.1上编译并在3G iPhone上调试,我需要做很多事情:

    • 降级到XCode 4.3.3

      Xcode 4.5.2将拒绝连接到iPhone3G进行调试。4.3.3版本与4.5.2版本愉快地共存,它们甚至可以共享相同的项目文件,尽管将ARMV7保留在架构设置中会在4.3.3中生成无害的警告。见下文

    • 更改项目设置

      Architecture -> go to "others", remove the line, put armv6 armv7 
      
      (您也可以在上面的一行中添加armv7s,以便使用4.5.2编译相同的项目,但它将在4.3.3下生成警告)

    • 在plist文件的“所需设备功能”中,卸下armv7

    • 更改目标设置(单击左窗格中的目标)

      部署目标为3.1

    • 编辑您的方案以更改调试器

      在Run部分的debug中,将调试器更改为GDB(而不是LLDB)

      在测试部分的debug中,将调试器更改为GDB(而不是LLDB)

    • 更改将使iOS 3.1应用程序崩溃的自动生成代码

      在AppDelegate中“didFinishLaunchingWithOptions”,而不是此行

      self.window.rootViewController=self.viewController

      把这个密码

      if ([self.window respondsToSelector:@selector(setRootViewController:)])
      self.window.rootViewController = self.viewController;
      else
      [self.window addSubview:self.viewController.view];
      
      然后,您应该能够在3G iPhone上运行和调试


    谢谢。。。无论如何,我得到了这个错误。警告:所有应用程序都应包括armv7体系结构(当前ARCHS=“armv6”)。iPhone/iPod Touch:应用程序可执行文件缺少所需的体系结构。必须至少存在以下体系结构之一:armv7(-19033)抱歉,我无法帮助您解决此警告(或错误?)如果您想使用Xcode 4.2为iOS 3.1.3创建一个新项目,您可以按照我说的做。您好,我有一个应用程序在Iphone 3GS或4上正常工作。现在,我正在尝试在iPhone3G上工作,但我做不到。我有一些问题,我想检查我是否正在为iPhone3配置ok项目,以确保我的问题与此配置无关。我检查了我的AppDelegate.m,没有为您显示代码。是否必须添加该代码,或者只有我需要更改(如果存在)?谢谢,对不起,我的英语很差
    if ([self.window respondsToSelector:@selector(setRootViewController:)])
    self.window.rootViewController = self.viewController;
    else
    [self.window addSubview:self.viewController.view];