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

Posted

技术标签:

【中文标题】XCode 4.5 iOS 6.0 模拟器和旋转问题【英文标题】:XCode 4.5 iOS 6.0 simulator and rotation issues 【发布时间】:2012-09-10 16:10:00 【问题描述】:

我为 ios 4.2 制作了应用程序,我在 XCode 4.3.3 中进行开发并使用 iPhone 5.1 模拟器对其进行测试,一切正常。最近我决定测试应用程序如何在 iOS 6.0 上运行。尝试此操作时,我面临两个问题:

    所以,我用 XCode 4.5 打开应用程序并在 iPhone 6.0 模拟器上运行它。我在启动应用程序时经常遇到问题。 XCode 只是说:在 iPhone 6.0 模拟器上运行完毕,停止按钮变灰(就像应用程序没有运行),iPhone 模拟器只是显示黑屏,没有任何反应。我必须 CMD+Q 它。这对我来说是巨大的问题,因为在多次失败后我设法成功地随机运行应用程序。

    最终,有时,应用程序运行没有问题,我看到模拟器正在运行我的应用程序。应用程序仅在横向模式下进行。但是当模拟器运行应用程序时,它会保持纵向模式,并以纵向模式显示专为横向屏幕设计的应用程序。我已将 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 卡在该操作上。

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

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

以及所有这些动作排列。简单地说,我总是看到这个问题。发生在我身上的最好的事情就是在这个组合中:

只打开 XCode 而不打开项目 -> 转到 Window -> Organizer -> [ProjectName] 并完全删除它 -> 退出 XCode -> 打开 iPhone 模拟器并重置设置 -> 退出 iPhone 模拟器 -> 重启 Mac -> 重新打开 XCode 并运行应用程序

有时在这种情况下模拟器设法立即运行我的应用程序,这很棒。但是在关闭模拟器并再次从 XCode 运行应用程序后(在这两个操作之间不做任何事情),XCode 再次卡在 Attaching to [AppName] 上,并且不会使用我的应用程序启动模拟器。

虽然模拟器不会从 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

【问题讨论】:

iOS 6 仍处于保密协议下,但请尝试阅读开发中心的 iOS 6.0 部分中的新增功能 iOS 6 autorotation in simulator varies from actual iOS 6 device的可能重复 @rckoenes:我的第二期描述(看起来)与您提供的链接上的问题相同的问题并感谢链接,但我的第一期绝对不是该链接中任何内容的重复。 @uerceg 你是对的,对此感到抱歉。我自己没有遇到过这个问题,你有什么警告吗? 所有警告看起来都很好,我在 XCode 4.3.3 中也有所有警告。只有这个比其他的更“陌生”:警告:输出文件的多个构建命令 /Users/username/Library/Developer/Xcode/DerivedData/ApplcationName/Build/Products/Debug-iphonesimulator/Application.app/some_icon.png跨度> 【参考方案1】:

就像我在编辑中所说的那样,我的第一个问题的解决方案是将 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;

【讨论】:

未设置 rootViewController 也会导致此问题。就像使用 [self.window addSubview:yourViewController.view]【参考方案2】:

完全删除 \Library\Application Support\iPhone Simulator 文件夹并从 XCode 运行模拟器对我有用。

现在我可以从 XCode 运行 iOS 6.0 模拟器了。

【讨论】:

以上是关于XCode 4.5 iOS 6.0 模拟器和旋转问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 4.5 上安装 iOS 4.3 模拟器?

对 iOS 5.0 和 iOS 6.0 使用 XCode 4.5 的困惑

单元测试目标不在Xcode 4.5上运行

IOS 6.0 xcode 4.5 编译错误#import 代码保存在类外的文件中

xcode 4.5 是不是支持 ios 4.3 模拟器或更早版本?

如何在 Xcode 6.0 Beta 中运行 iOS 7.1 模拟器?