使用Xcode 4.2编译iOS 3.1.3

时间:2011-11-30 06:57:58

标签: xcode4 compilation crash ios-3.x

Xcode 4.2是否支持iOS 3.1.3的编译项目?我尝试编译一个我正在处理的项目,每次尝试在带有iOS 3.1.3的iPhone 3G上运行应用程序时,我都会遇到崩溃。我知道我正在运行的操作系统已经过时,但客户端要求应用程序应该在iOS 3.1.3上运行。任何想法我将如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

在构建设置中更改以下设置:

  1. Base SDK - >最新的iOS(iOS 5.0)
  2. iOS部署目标 - > iOS 3.1
  3. 架构 - >选择其他...并手动添加“armv6”
  4. 有效架构 - >删除“armv7”,只需离开“armv6”
  5. 在* 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;
    }
    
    呃....抱歉......忘了一个......

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

答案 1 :(得分:0)

以下是我需要做的一大堆事情,以便在3G iPhone上编译XCode 4并在3G上进行调试:

  • 降级到XCode 4.3.3。

    Xcode 4.5.2只是拒绝连接到iPhone 3G进行调试。 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下生成警告)

    Valid architecture -> armv6 armv7 armv7s
    
    Deployment target -> change to 3.1
    
  • 在plist文件的“Required device capabilies”中,删除armv7。

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

    deployment target to 3.1

  • 编辑您的Scheme以更改调试器

    In the Run section, debug, change debugger to GDB (instead of LLDB)

    In the Test section, debug, change debugger to GDB (instead of 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上运行和调试。