ios 使用xcode11新建项目

1.使用scenedelegate(iOS 13以下黑屏)

xcode更新到11后,新建工程里面多了好多东西,除了原有的AppDelegate外,又新加了一个SceneDelegate,看了一下官方文档,说是iPadOS用来做多窗口支持的,这时候如果你还像之前的一样,在APPdelegate里写self.window的方法的话,运行程序,直接崩溃了,因为新版本的xcode的APPdelegate.h里面已经没有了window这个属性,如下图所示:

ios 使用xcode11新建项目_第1张图片

iOS13之前,Appdelegate会处理App生命周期和UI生命周期,但iOS 13之后,Appdelegate不在处理UI生命周期了,只负责处理 App 生命周期和新的 Scene Session 生命周期。而UI的生命周期就由Scene Delegate处理了。所以我们写self.window时就要放到scenedelegate里。如下:

ios 使用xcode11新建项目_第2张图片

代码如下:

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions  API_AVAILABLE(ios(13.0)){

    UIWindowScene *windowScene = (UIWindowScene *)scene;

    self.window = [[UIWindow alloc] initWithWindowScene:windowScene];

    self.window.frame = windowScene.coordinateSpace.bounds;

    ViewController *control = [[ViewController alloc]init];

    self.window.rootViewController = control;

[self.window makeKeyAndVisible];

}

这样就可以使用scenedelegate了。但使用了scenedelegate后,在iOS 13以下的手机运行会黑屏。如果你的程序只在iOS 13手机上运行,不适配iOS 13以下的设备,那么就到这里结束了。

2.如果要适配iOS 13以下的设备,需要把相关的scenedelegate都删掉才行。操作步骤如下:

1.删除info文件里关于scenedelegate里的配置信息:删除Application Scene Manifest,图中红色部分。

ios 使用xcode11新建项目_第3张图片

2.在APPdelegate.h文件增加window属性,

ios 使用xcode11新建项目_第4张图片

然后在APPdelegate.m里删除新加的scene方法。

ios 使用xcode11新建项目_第5张图片

添加之前的APPdelegate生命周期的方法,如进入前台后台等等,这些方法在xcode11以下的版本里有,你可以从以前的项目复制过来。

ios 使用xcode11新建项目_第6张图片

3.最后删除scenedelegate的2个文件

ios 使用xcode11新建项目_第7张图片

至此,运行的项目就可以在iOS 13以下的设备运行了。同样iOS 13的设备也可以用。

参考链接:http://zhk1024.com/archives/112/

https://www.jianshu.com/p/801de3beee22

http://www.pianshen.com/article/3604706981/

你可能感兴趣的:(ios 使用xcode11新建项目)