XCode 4.5 iOS 6.0模拟器和旋转问题

12
我有一个适用于iOS 4.2的应用程序,我在XCode 4.3.3中进行开发并使用iPhone 5.1模拟器进行测试,一切正常。最近,我决定测试应用程序在iOS 6.0上的运行情况。尝试时,我面临两个问题:
  1. 因此,我使用XCode 4.5打开应用程序,并在iPhone 6.0模拟器上运行它。我经常遇到启动应用程序的问题。XCode只是说:已完成在iPhone 6.0模拟器上的运行,停止按钮灰掉了(就像应用程序没有运行),iPhone模拟器只显示黑屏,什么也不会发生。我必须CMD+Q退出。对我来说,这是一个巨大的问题,因为我成功地运行应用程序之后,随机失败了很多次。
  2. 最终,有时候应用程序可以无问题地运行,我看到仿真器正在运行我的应用程序。应用程序仅以横向模式制作。但是当模拟器运行应用程序时,它保持纵向模式,并以纵向模式显示为横向屏幕设计的应用程序。我已将Supported Interface Orientations设置为两种横向变体,并在Application-Info.plist中列出了这两种横向方向。
有人知道发生了什么以及可能的解决方案吗?
提前感谢您。

[编辑 #1:添加了所有输出控制台消息]

问题1的控制台消息(现在持续出现)如下:

error: failed to attach to process ID 0

[编辑#2:解决第一个问题有所进展]

好的,奇怪的事情正在发生。为了消除编辑#1中的错误,我做的第一件事是:

在XCode中转到:Product -> Edit Scheme -> Run [AppName].app -> Debugger,并将其从LLDB更改为GDB

之后,编辑#1中的错误消失了,但是出现了新问题。现在运行应用程序后,我在XCode中得到状态消息:Attaching to [AppName],并且XCode卡在该操作上。

如果有人给我答案,我想说我尝试了以下列表中的所有内容:

  • 转到窗口 ->组织者 ->派生数据 ->删除
  • 转到窗口 ->组织者 ->[ProjectName]并完全删除它,然后重新打开它
  • 重置iPhone模拟器设置
  • 重置iPhone模拟器+清除构建+退出模拟器+运行项目
  • 退出XCode +重启Mac +重新打开XCode并再次运行应用程序

涉及各种不同的操作排列组合。简单而言,我总是遇到这个问题。对我来说最有效的方法是进行以下组合:

仅打开XCode而不打开项目 -> 转到“窗口” -> “组织器” -> [项目名称] 并将其彻底删除 -> 退出 XCode -> 打开iPhone模拟器并重置设置 -> 退出 iPhone 模拟器 -> 重新启动Mac电脑 -> 重新打开XCode并运行应用程序

有时在这种情况下,模拟器能够立即运行我的应用程序,这非常好。但是,在关闭模拟器并再次从XCode运行应用程序(在这两个操作之间什么都没有做)后,XCode再次卡在附加到[应用程序名称]上,无法启动带有我的应用程序的模拟器。

尽管模拟器无法从XCode启动我的应用程序,但该应用程序本身已存储在模拟器中,如果我单独运行模拟器并手动启动我的应用程序,应用程序可以启动,但会出现我在问题描述中提到的第二个问题-布局问题。


[编辑#3:XCode版本信息]

我忘记提及我的XCode版本:Xcode版本4.5(4G144l)


[编辑#4:“解决方案”]

我找到了“解决方案”(我说“解决方案”,因为我在当前XCode版本中没有找到解决方案)。

我刚刚下载了XCode版本4.5(4G182),并正常运行我的应用程序(没有将调试器更改为GDB),除了布局问题之外,一切都正常工作,这显然是由于iOS 6.0相对于iOS 5所做的一些更改。我想这实际上就是解决方案,因为我最初使用的XCode版本不会被使用,因为它是某些beta版本之一。

因此,第一个问题已经解决,但仍未能解决布局问题。


[编辑 #5:最终解决方案]

好的,第二个问题已经解决。关于我的第二个问题的所有信息,请查看此链接上的答案:http://yusinto.blogspot.de/2012/08/ios-6-auto-rotate-and-orientation.html


1
iOS 6仍然受NDA保护,但请尝试阅读开发者中心中的iOS 6.0新功能部分。 - wattson12
可能是重复的问题:iOS 6模拟器中的自动旋转与实际iOS 6设备不同 - rckoenes
@uerceg,你是正确的,对此我感到抱歉。我自己没有遇到过这个问题,你有任何警告吗? - rckoenes
@Legolas,感谢你的提示,我也尝试了那个方法,并在我的第二次编辑中提到了你的解决方法。请查看更新后的问题,如果你有任何建议,那就太好了。再次感谢你的提示。 - uerceg
请查看我在此处给出的答案:http://stackoverflow.com/questions/13448192/ios6-rotation-problems/13448914#13448914 - Krish Allamraju
显示剩余3条评论
2个回答

8

正如我在我的编辑中所说的那样,解决我第一个问题的方法是将XCode更新到版本4.5(4G182)。解决我第二个问题的方法是替换已弃用的iOS 5方法:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

iOS 6引入了2种新方法:

- (NSUInteger)supportedInterfaceOrientations
- (BOOL)shouldAutorotate

之后,应用程序就可以正常工作了。

[编辑 #1:添加支持iOS 5和iOS 6的仅横屏应用程序的工作示例]

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.
    self.viewController = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible];

    return YES;
}

MainViewController.m

#pragma mark - Orientation support

- (BOOL)shouldAutorotate {

    return YES;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight) || (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}

- (NSUInteger)supportedInterfaceOrientations {

    return UIInterfaceOrientationMaskLandscape;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {

    return UIInterfaceOrientationLandscapeLeft;
}

1
不设置rootViewController也可能导致这个问题。就像使用[self.window addSubview:yourViewController.view]一样。 - codeburn

2
删除\Library\Application Support\iPhone Simulator文件夹后,从XCode启动模拟器对我有效。现在我可以从XCode运行iOS 6.0模拟器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接