Xcode Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:]

本文介绍了一个iOS项目启动时报错的问题及其解决方案。错误出现在UIApplication的run方法中,原因是自定义了UIWindow却没有设置rootViewController。文章提供了正确的设置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

拷贝的一个项目运行报错:

2017-03-07 14:44:57.906 Zenithcp[54472:2455909] *** Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.5.2/UIApplication.m:3679

错误原因:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
	self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];//自定义了window,但是没有设置rootViewController
	[self.window makeKeyAndVisible];
	[self.window.rootViewController presentViewController:surfboard animated:NO completion:nil];
	return YES;
}
解决方式:设置window的rootViewController即可

UINavigationController *indexViewCr=[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"Nav"];
keyWindow.rootViewController = indexViewCr;

<think>好的,我现在需要帮助用户解决CMake在Xcode生成器不匹配的问题,以及处理CMakeCache.txt文件冲突。首先,用户遇到的错误信息是“CMake error Xcode 1.5 not supported generator mismatch Unix Makefiles vs Xcode remove CMakeCache.txt or use correct binary directory cmake qt ios build”。看起来问题涉及生成器不匹配,可能是用户之前使用了不同的生成器(如Unix Makefiles)而现在尝试使用Xcode,导致冲突。 首先,我应该回顾CMake生成器的基础知识。CMake生成器决定了构建系统,比如Unix Makefiles会生成Makefile,而Xcode生成器会生成Xcode项目。如果用户之前用了一个生成器,然后切换另一个,而没有清理缓存,CMakeCache.txt可能还保留旧的配置,导致不匹配。 接下来,用户提到需要处理CMakeCache.txt的冲突。通常,解决这类问题的方法是删除CMakeCache.txt和CMake生成的其它文件,然后重新运行CMake。这可以确保旧的配置不会干扰新的生成器设置。 另外,用户可能在构建Qt项目,并且针对iOS平台。这时候需要确认是否正确设置了工具链和生成器。Qt项目有时需要特定的配置,尤其是跨平台如iOS,可能需要指定工具链文件或者正确的CMake参数。 可能的解决步骤包括: 1. 清理构建目录,删除CMakeCache.txt和其他生成的文件。 2. 明确指定生成器为Xcode,使用命令行参数。 3. 确保Xcode版本与CMake兼容,特别是用户提到的Xcode 1.5可能是个旧版本,需要检查是否受支持。 4. 检查Qt的配置是否正确,特别是iOS构建可能需要额外的设置,比如工具链文件。 此外,用户可能混淆了生成器的选择,比如在命令行中应该使用-G "Xcode"来指定生成器。如果在之前构建时使用了不同的生成器,残留的文件会导致问题,所以清理是关键。 还需要注意CMake的版本是否支持所用的Xcode版本。例如,较新的CMake版本可能不支持旧版Xcode,或者反之。用户提到的错误信息中的“Xcode 1.5”可能是个笔误,因为Xcode的版本通常更大(如14或15),但如果是旧版,可能需要升级CMake或Xcode。 最后,如果用户在使用Qt的iOS构建,可能需要配置CMake时指定iOS工具链,这通常涉及设置CMAKE_SYSTEM_NAME、CMAKE_OSX_SYSROOT等变量。或者使用Qt提供的工具链文件。</think>### 分步解决方案 #### 1. **清理构建目录** CMake缓存冲突通常由残留的旧配置(如`CMakeCache.txt`)引起。彻底清除构建目录可避免生成器不匹配: ```bash rm -rf CMakeCache.txt CMakeFiles ``` 或手动删除整个构建目录后重新创建。 #### 2. **明确指定生成器** 在命令行中强制使用`Xcode`生成器: ```bash cmake -G "Xcode" [项目路径] -DCMAKE_PREFIX_PATH=[Qt安装路径] ``` 若需iOS支持,需额外指定工具链: ```bash cmake -G "Xcode" -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos [项目路径] ``` #### 3. **验证Xcode与CMake兼容性** - 检查CMake版本是否支持当前Xcode版本。例如: - CMake 3.25+支持Xcode 14+ -Xcode过旧(如用户提到的1.5可能是误写),需升级Xcode或降级CMake[^1] - 检查Xcode命令行工具是否安装: ```bash xcode-select --install ``` #### 4. **处理Qt iOS构建的特殊配置** Qt项目需指定iOS工具链和部署目标: ```bash cmake -G "Xcode" -DCMAKE_TOOLCHAIN_FILE=[Qt安装路径]/lib/cmake/Qt5/qt_toolchain.cmake -DCMAKE_OSX_DEPLOYMENT_TARGET=15.0 [项目路径] ``` #### 5. **强制重新生成缓存** 若问题仍存在,使用`--fresh`参数(CMake 3.24+): ```bash cmake --fresh -G "Xcode" [项目路径] ``` ### 关键命令示例 ```bash # 完整流程示例 mkdir build && cd build rm -rf * cmake -G "Xcode" -DCMAKE_PREFIX_PATH=/opt/Qt/6.5.0/ios -DCMAKE_SYSTEM_NAME=iOS .. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值