Xcode 4.2 是否支持为 iOS 3.1.3 编译项目?我尝试编译一个我目前正在处理的项目,每次尝试在装有 iOS 3.1.3 的 iPhone 3G 上运行该应用程序时,我都会遇到崩溃。我知道我运行的操作系统已经过时了,但是客户端要求应用程序应该在 iOS 3.1.3 上运行。任何想法我将如何解决这个问题?
2 回答
在 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,如果它有“Required device capabilities”项,则将该项从“armv7”更改为“armv6”。
为了使 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 上运行和调试。