使用xcode 11新建项目的处理

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

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

 

使用xcode 11新建项目的处理_第1张图片

 

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

 

使用xcode 11新建项目的处理_第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,图中红色部分。

使用xcode 11新建项目的处理_第3张图片

 

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

使用xcode 11新建项目的处理_第4张图片

 

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

 

使用xcode 11新建项目的处理_第5张图片

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

 

使用xcode 11新建项目的处理_第6张图片

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

使用xcode 11新建项目的处理_第7张图片

 

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

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

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

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

你可能感兴趣的:(ios,xcode,iOS,13系统)