【问题标题】:Compiling for iOS 3.1.3 with Xcode 4.2使用 Xcode 4.2 为 iOS 3.1.3 编译
【发布时间】:2011-11-30 06:57:58
【问题描述】:

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

【问题讨论】:

    标签: xcode4 compilation crash ios-3.x


    【解决方案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,如果它有“必需的设备功能”项,则将该项从“armv7”更改为“armv6”。

    【讨论】:

    • 谢谢...反正我得到这个错误。警告:所有应用程序都应包含 armv7 架构(当前 ARCHS = "armv6")。 iPhone/iPod Touch:应用程序可执行文件缺少所需的架构。必须至少存在以下架构之一:armv7 (-19033)
    • 抱歉,如果你想用 Xcode 4.2 为 iOS 3.1.3 创建一个新项目,我无法帮助你解决这个警告(或错误?),你可以按照我说的做。
    • 嗨,我有一个在 Iphone 3GS 或 4 上运行良好的应用程序。现在,我正在尝试在 Iphone 3G 上运行,但我做不到。我有一些问题,我想检查我是否正在为 Iphone 3 配置项目,以确保我的问题与此配置无关。我检查了我的 AppDelegate.m 并没有为您显示代码。是否必须添加该代码,或者只有我需要更改(如果存在)?感谢并为我糟糕的英语感到抱歉
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多