使用 Xcode 4.2 为 iOS 3.1.3 编译

Posted

技术标签:

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

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

【问题讨论】:

【参考方案1】:

在 Build Settings 中更改以下设置:

    基础 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”。

【讨论】:

谢谢...反正我得到这个错误。警告:所有应用程序都应包含 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 上运行和调试了。

【讨论】:

以上是关于使用 Xcode 4.2 为 iOS 3.1.3 编译的主要内容,如果未能解决你的问题,请参考以下文章

iphone:使用 iOS 5 和 Xcode 4.2 提交应用程序? [关闭]

如何在 Xcode 4.0.2 中使用 iOS SDK 4.2

在 Xcode 4.2 上将 iOS 5 应用程序更新为通用?

iOS 项目将 Xcode 4.2 更新到 Xcode 4.5

如何在 Xcode 4.2 中包含低于 4.3 的 iOS SDK

使用 iOS 5.0 Beta 版本在 Xcode 4.2 中创建 IPA 文件