2

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

4

2 回答 2

1

在 Build Settings 中更改以下设置:

  1. 基础 SDK -> 最新的 iOS (iOS 5.0)
  2. iOS 部署目标 -> iOS 3.1
  3. 架构 -> 选择其他...并手动添加“armv6”
  4. 有效架构 -> 删除“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;
}

呃……抱歉……忘记了……

  1. 检查项目的 Info.plist,如果它有“Required device capabilities”项,则将该项从“armv7”更改为“armv6”。
于 2011-11-30T07:15:04.407 回答
0

为了使 XCode 4 为 iOS 3.1 编译并在 3G iPhone 上调试,我必须做很多事情:

  • 降级到 XCode 4.3.3。

    Xcode 4.5.2 将简单地拒绝连接到 iPhone 3G 进行调试。4.3.3 版本与 4.5.2 愉快地共存,它们甚至可以共享同一个项目文件,尽管将 armv7s 留在架构设置中会在 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 文件中,在“必需的设备功能”中,删除 armv7。

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

    deployment target to 3.1

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

    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 上运行和调试。

于 2013-01-28T09:20:59.070 回答