美文网首页
基于 Xcode 11 和 iOS 13 新建project

基于 Xcode 11 和 iOS 13 新建project

作者: 帅气的昵称擦 | 来源:发表于2020-07-07 14:18 被阅读0次

    Xcode11 新建project  新变化:SceneDelegate

    本篇文章基于 Xcode 11 和 iOS 13.

    这个版本开始新建的工程初始状况发生了一些改变, 新加了SceneDelegate.h /.m 文件,对应info.plist中加了 Application Scene Manifest 对应配置。即加了 SceneDelegate 场景的概念, 那么先简单了解一下这个新东西。

    iOS13中 Appdelegate的职责发现了改变:

    iOS13之前,Appdelegate的职责全权处理App生命周期和UI生命周期;

    iOS13之后,Appdelegate的职责是:

    1、处理 App 生命周期

    2、新的 Scene Session 生命周期

    那UI的生命周期呢?交给新增的Scene Delegate处理.

    iOS13之后,Appdelegate不再负责UI生命周期,所有UI生命周期交给SceneDelegate处理.

    因此初始化window方法需要改变:

    如果暂时不接触SceneDelegate。

    直接删除 SceneDelegate.h /.m 文件,以及对应info.plist中的 Application Scene Manifest 配置。

    在AppDelegate.h 中加上 @property (strong, nonatomic) UIWindow * window; 属性。就可以保持和之前版本一样的初始化方法。

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

        self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];

        [self.window setBackgroundColor:[UIColor whiteColor]];

        UIViewController * vc = [[UIViewController alloc]init];

        UINavigationController * nav = [[UINavigationController alloc] initWithRootViewController:vc];

        [self.window setRootViewController:nav];

        [self.window makeKeyAndVisible];

        return YES;

    }

    如果顺应SceneDelegate新概念而开发。

    那么不再在Appdelegate的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions进行初始化,转交给SceneDelegate的willConnectToSession:方法进行根控制器设置.

    - (void)scene:(UIScene*)scenewillConnectToSession:(UISceneSession*)sessionoptions:(UISceneConnectionOptions*)connectionOptions {

        UIWindowScene*windowScene = (UIWindowScene*)scene;

        self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

        [self.windowsetWindowScene:windowScene];

        [self.window setBackgroundColor:[UIColor whiteColor]];

        UIViewController *con = [[UIViewController alloc] init];

        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:con];

        [self.window setRootViewController:nav];

        [self.window makeKeyAndVisible];

    }

    之后我的常规操作是

    1.删除我不用的 Main.storyboard —- delete —— Move to Trash。

    2.点击工程名,就是最顶级目录

    右侧出现general选项卡

    将Deployment info组内的Main Interface设为空

    3.打开info.plist,删除 Main storyboard file base name选项。

    相关文章

      网友评论

          本文标题:基于 Xcode 11 和 iOS 13 新建project

          本文链接:https://www.haomeiwen.com/subject/ugmaqktx.html