好久之前跟新到Xcode11,跟新完成后打开以前老项目并未有什么太大变化,也就没有在意,今天新建一个项目,创建完成后,发现多了个SceneDelegate的.m和.h文件,这是什么鬼?它有什么用呢?...新创建项目目录 AppDelegate和SceneDelegate是iPadOS带来的新的多窗口支持的结果,并且有效地将应用程序委托的工作分成两部分。...原来在iOS13中,AppDelegate的文件结构发生了变化: iOS13以前:AppDelegate处理App生命周期和UI生命周期; iOS13以后:处理 App 生命周期和新的 Scene...Session 生命周期,在AppDelegate.h文件中没有了window属性,而是在SceneDelegate中,可见AppDelegate不管理window而是交给SceneDelegate。...管理window的方式适配: 打开info.plist文件,删除Application Scene Manifest选项。
Xcode11之后新创建的工程会多出两个文件SceneDelegate.那么我们如何让它变回之前的那样的工程呢. 一....OC 版本 1.先直接删除SceneDelegate.h/.m文件 2.在AppDelegate.h添加@property (strong, nonatomic) UIWindow * window;属性...3.在AppDelegate.m文件中移除UIScene代理 * 移除之前 * 移除之后 4.最后在info.plist文件中移除Application Scene Manifest....Swift 版 1.先直接删除SceneDelegate.swift文件 2.修改AppDelegate.swift文件:注释或删除UISceneSession的生命周期函数,最终代码如下: 3.最后在...info.plist文件中移除Application Scene Manifest.
Xcode 11发布之后,新建iOS项目工程时,会有很多变化,最大的变化是多了文件SceneDelegate,此时如果希望通过纯代码设置界面,流程与以往会有一些不一样,本文简单介绍一下。...Main Interface中的Main,同时需要删除info.plist中的如下代码 UISceneStoryboardFile Main 项目文件变化...AppDelegate.swift文件负责App的启动与终止,并负责与SceneDelegate交接。...SceneDelegate.swift文件负责管理应用程序的生命周期。...删除内容.png 3.AppDelegate.swift中代码写成和Xcode11之前的样子 var window: UIWindow?
不需要多窗口(multiple windows) 删除掉info.plist中Application Scene Manifest选项,同时,注释SceneDelegate文件中所有代码,SceneDelegate...文件删不删除都可以。...SwiftUI项目info.plist文件中Application Scene Manifest项配置如下: 默认配置中没有设置“Storyboard Name”这一项。...但是如果要配置支持多个窗口,则需要将Enable Multiple Windows设置为YES。 AppDelegate类,和上边iOS新建项目AppDelegate一样。...AppDelegate和Manifest的默认配置,他们没有涉及storyboard的任何东西。
引用了framework中的两个文件 原因之三:extern引用不存在的全局变量而报错 开发中,我们很有可能用到全局变量,比如在delegate.m文件中定义了一个int 型全局变量globalVar,...在ViewController.m文件中通过extern int globalVar; 而引用A.m文件的这个全局变量。...#import "AppDelegate.h" @interface AppDelegate () @end @implementation AppDelegate int globalVar;...原因:因为extern int globalVariate并没有定义名为globalVariate的变量,而是引用了一个名字叫做globalVariate的全局变量。...原因之四:Compile Sources中没有添加对应的.m文件而报错 有时候,我们项目中并没有以静态库的形式引用第三方库,而是直接使用的三方源码。也有可能出现相同的错误。
选择模版没有出错并且它能正常工作 2. 一个好的编译开端:尽管这是一个空窗口项目 3....这是因为你并没有将MasterViewController 添加到主窗口(main window),这一步,需要在AppDelegate中进行。...为了使用view Controller, 就要让App Delegate 知道它的存在,因此你需要做第一步就是在AppDelegate.m中导入view controller的头文件 1.10 在AppDelegate.m...这时我们最好编译运行一下项目工程,以确保我们做的这些操作都没什么问题,虽然窗口里table View仍然是空的,这是因为我们并没有把数据模型和UI连接在一起。...AppDelegate.m文件 运行程序,确保上面我们做的设置没有错误。为了能够显示需要的Bug 列表,我们要让table view 从模型中获取数据。
__text表示编译后的程序执行语句,__data表示已初始化的全局变量和局部静态变量,__bss表示未初始化的全局变量和局部静态变量,__cstring表示代码里的字符串常量。...[ 3] -[AppDelegate applicationWillEnterForeground:] 0x100004A18 0x0000004C [ 3] -[AppDelegate...1、 代码级别优化 查找无用selector,以往C++在链接时,没有被用到的类和方法是不会编进可执行文件里。...但 Objctive-C 不同,由于它的动态性,它可以通过类名和方法名获取这个类和方法进行调用,所以编译器会把项目里所有OC源文件编进可执行文件里,哪怕该类和方法没有被使用到。...IMSDK Demo 测试结果,静态库改用动态库后,结论如下 1、IMSDKCoreKit 动态库能和静态库的插件混用,业务可以根据情况自由选择动态库更新; 2、安装包大小会对应增加,因为动态库 SDK 没有编译到应用可执行二进制文件里
也就说,没有UIWindow,就看不见任何UI界面 1.1 手工创建一个UIWindow - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions...所以需要在AppDelegate.h里面创建一个强引用的属性,定义window。然后赋值。...storyboard中的创建过程 先执行Main函数,执行UIApplicationMain(),根据其第三个和第四个参数创建Application 创建代理,并且把代理设置给application 根据项目配置文件...四大对象之间的关系 1.UIApplication :delegate属性 2.AppDelegate :window属性 3.UIWindow :rootViewController属性 4.UIViewController...:view属性 第一个创建的对象是UIApplication UIApplication绑定一个AppDelegate对象 AppDelegate对象中有一个window属性(UIWindow)
上启动黑屏翻车问题分析(一) 昨天我们说了旧的项目在iOS 13下完全启动之后黑屏的问题,然后紧跟问题通过UI图层分析方式一步步的分析基本找到了问题的根源---iPadOS的底层以及操作思路转变啦 单窗口时代...咱们暂且吧单窗口的iOS定义为旧时代,也就是之前的iOS应用默认的情况下基于单一窗口模式开发的(如下图),而作为开发人员也是十分的享受这种内置的开发模版 ?...新的时代--支持多窗口模式 在升级到iOS 13之后系统开始支持多窗口这个尤其是在iPadOS上尤为显著,这样你可以同时的在一个设备屏幕上同时享受到至少两个App的视图内容… AppDelegate....m文件 #import "SceneDelegate.h" #import "LoginViewController.h" @interface SceneDelegate() @end @implementation...AppDelegate app.window = window } }
编译 窗口顶部菜单 Build--> Build Hap(s)/APP(s)-->Build APP(s)。...但我们有很多项目不是从头开始,部分新增内容需要使用 add-on方式,这里以 Android 为例 添加到现有工程 接上面 窗口顶部菜单 Build--> Build Hap(s)/APP(s)-->Build...会同时构建 Android 和 iOS 产物 之后,对应资源文件已经复制到对相应文件夹了。...集成 libs 下面的 jar 包和so 文件复制到 Android 工程中,注意arkui-x 的 Android 工程中指定了存放 so 文件的文件夹就是 libs,复制到 Android 工程中的时候别整错了...到这里也没有需要继续下去的东西,就先入土吧,上面这个问题有答案了再挖出来继续。
运行应用,点击状态栏图标显示popover后,用鼠标点击应用窗口外的其他地方,这时你会发现popover会自动隐藏起来了,这样的效果与之前的相比,要更合适操作一些。...活动监视器显示demo运行正常 这是由于我们之前使用的xib文件加载window,系统为我们默认做了一些其他方面的事,比如再加载window之前,创建应用对象,设置应用代理,配置窗口设置等,那系统是在哪里做的这些事情呢...,根本没有调用这个方法,也就是所我们删除了main.storyboard文件后,系统不再自动的为我们设置应用的delegate,需要我们自己手动在main.m中进行设置。...main.m文件实现代码 1.6 因为我们去除了window,因此ViewController对我们来说已经没有价值了,我们只需要把之前在ViewController中写的代码,放置到AppDelegate.m...AppDelegate.m文件 如果你在这中间的步骤没有错误,那么再次运行工程,你会发现状态栏的上图标又出现了,并且我们之前实现的功能也都可以正常响应了^_^ 整个工程的代码,可以从这里下载StatusBarDemoApp
第一步、创建 .itmsp 其实就是一个文件夹 第二步、在.itmsp 中创建 *.metadata 文件 其实是一个 xml文件。...XML 文件内容 <?xml version="1.0" encoding="UTF-8"?...GAMENAME=${GAMENAME##*\=} popd popd fi if [ -z $APPID ]; then echo $GAMENAME echo "这个游戏没有找到..." >> UploadResult.txt echo "这个游戏没有找到appId!!!...所以以上我用的 xcrun 带的工具 Xcode 11 里面的 altool --upload-app -f ipa的存放路径 -t 平台(ios) -u 开发者账号 -p 开发者账号对应的密码 在xcode11
image.png //项目创建成功后,在项目文件夹中将自动生成一个拥 有.xcdatamodelId扩展名的文件,该文件可以使用图形化的方式编辑数据 模型,在该文件中包含了Entities、Properties...在项目名称文件夹上点击鼠标右键,然后选择菜单 中的【New File……】命令。...在弹出的文件模板选择窗口中,依次选择 【Core Data>NSManagedObject subclass】选项,创建一个 NSManagedObject的子类 image.png //然后点击...AppDelegate 11 let managedObjectContext = appDelegate.managedObjectContext 12 13 let entity:NSEntityDescription...AppDelegate 9 let managedObjectContext = appDelegate.managedObjectContext 10 11 let entity:NSEntityDescription
UINavigationController其实并没有 rootViewController这个属性!也就没有自带的setter方法。...如果没有专门设置过keyWindow的hiden为NO,而且也没有其它非隐藏的UIWindow,那么APP会黑屏。...Xcode查看窗口栈 四. UIWindow常见操作方法总结 1....获取AppDelegate单例的window属性 专门获取AppDelegate.m文件中的window属性,不包含其它其定义的window [[[UIApplication sharedApplication...] delegate] window] 拓展一下,获取AppDelegate单例的方法为 + (AppDelegate *)sharedDelegate { return (AppDelegate
翻译解释: 在iOS 13(及以后版本)上,SceneDelegate将负责AppDelegate的某些功能。 最重要的是,window(窗口)的概念已被scene(场景)的概念所代替。...Info.plist文件中提供了”Application Scene Manifest“配置项,用于配置App的场景,包括它们的场景配置名,delegate类名和storyboard入口 那不需要SceneDelegate...另外一种则是根据系统版本判断兼容 方法一:删除SceneDelegate 把AppDelegate中UISceneSession Lifecycle的两个代理方法删除,添加window属性,在application...:didFinishLaunchingWithOptions:方法中初始化window,设置根视图 删除SceneDelegate文件 选中target,切换到info,删除Application Scene...Manifest这行 /// AppDelegate.Swift import UIKit @main class AppDelegate: UIResponder, UIApplicationDelegate
首先在plist文件中指定Main xib file basename节点为MyMainViewController,然后在AppDelegate对象的didFinishLaunchingOptions...对比此项目与系统模板创建的项目,发现是在MyMainViewController中缺少了与AppDelegate对象的关联,于是在MyMainViewController.xib视图中添加了一个Object...对象,设置类型为AppDelegate,同时新增一个window对象,设置类型为UIApplication对象,将Window对象与AppDelegate的window对象属性做关联,再将Window对象的...应用程序启动的时候所显示的窗口。...window addSubview:viewController.view] 表示 XXXXXXViewController.xib 、[window makeKeyAndVisible] 是显示该窗口
一些用户界面的自定义信息(窗口的位置,顺序,偏好等等)。...在ios开发中,你简单最糟心的项目是什么,肯定有人会说要多糟心有多糟心,曾经我也见到过很糟心的项目,没有采用任何框架,编译都好几分钟的那种。...Dtabase:这个文件夹下主要放的是数据库相关的业务文件; Models: 这个文件夹下主要放的是业务数据实体(数据模型); View:这个文件夹下主要放的是UI窗口组件和UI 公共组件; Config...这个文件夹下主要放的是一些系统常用的工具类,例如:获取时间工具类,文件大小等; Supporting Files :这个文件夹下主要放的是系统生成的文件,比如:AppDelegate文件、info.plist...AppDelegate AppDelegate文件只存放AppDelegate的h和m文件,也可以放入其他跟AppDelegate有关的文件,比如我们写了一个AppDelegate+Router的Category
(page) { // 添加一个对象 return autoreleaseFullPage(obj, page); } else { // 如果没有...func task() { /// 在任务外加一层 autoreleasepool autoreleasepool { } } } main.m文件中的它...在 Xcode11 之前,是将整个应用程序运行放在 @autoreleasepool 内,由于 RunLoop 的存在,理论上这里的@autoreleasepool有点像摆设,根本没有发挥出作用。...argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate...appDelegateClassName = NSStringFromClass([AppDelegate class]); } return UIApplicationMain(argc
与传统的 nib 文件不同,故事板文件有以下优点: 1、通过一个故事板文件,你能对所有的窗口以及它们之间的关系一目了然。...因为所有的窗口设计在一个故事板文件中,你会更容易把握每次改动带给每个窗口的变化。 2、在故事板中可以描述各个窗口之间的转换。这种转换叫做 segue(连接)。...那么,在没有 MainWindow.xib 文件的情况下,故事板是怎样被加载到app中的呢? ...但现在什么都没有。 秘密都位于 Info.plist 文件。...但我们并没有配置它,因此会有这个警告。 模板 cells 是一种很酷的故事板特性。它远胜于原来的nib 文件。
创建窗口 2.加载main.storyboard,并且加载main.storyboard指定的控制器 3.把新创建的控制器,作为窗口的根控制器,让窗口显示出来 1、手动创建窗口步骤 1.自己加载程序启动...在 AppDelegate ?...Paste_Image.png 举例:如果需要看到键盘,必须把键盘添加到一个View上面去 首先了解什么是窗口:键盘、状态栏是窗口 窗口层级关系: // 窗口是有层级关系 // UIWindowLevelNormal...Paste_Image.png 3、控制器的创建(Xid) /* 通过xib创建控制器的view 1.一定要描述xib的文件拥有者是控制器,也就是说这个xib是用来描述控制器 */ 1.通过File...Paste_Image.png 在AppDelegate中加载: ? Paste_Image.png 这里创建出来是箭头指向的控制器的View ?
领取专属 10元无门槛券
手把手带您无忧上云