1. iOS13后,Prensent方式弹出页面时,默认的模式变为了UIModalPresentationAutomatic
,这样的方式也挺好的,动画也好看,自带关闭,只要下拉就关闭页面了。修改nextvc.modalPresentationStyle = UIModalPresentationFullScreen;就和以前一样了。https://www.jianshu.com/p/df0098eb9b31
MetalTestvcViewController *nextvc=[[MetalTestvcViewController alloc]init];
nextvc.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentViewController:nextvc animated:NO completion:nil];
2. 升级到Xcode12之后,当使用模拟器运行时报出了, building for iOS Simulator, but linking in object file built for free standing, for architecture x86_64;
解决方法:Target——Build Settings最下面有个VALID_ARCHS,这个VALID_ARCHS在xcode12中已经淘汰了,但有些cocoapod集成进来的三方库还是有这个key;升级Xcode12之后 苹果废除了 32位应用,而有些sdk还是32位,所以报这个错。
3. iOS13后 iOS 运行报错The app delegate must implement the window property if it wants to use a main storyboard
原因:在iOS13中,AppDelegate
把iOS13之前的那些管理整个App生命周期等的任务都委托给了SceneDelegate
,所以原来AppDelegate
的window
属性自然也就跑到SceneDelegate
里面去了。
这个SceneDelegate
class又被我们标注了只能iOS13可以用,也就是说iOS13以下版本的iPhone是不会执行整个SceneDelegate
class的代码的,所以在低版本中系统就找不到window
属性。https://www.jianshu.com/p/1b6ac9b47eb2
解决:swift中:
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow? //加上这一句话
}
在oc中:
//这句话,添加到图中的位置即可。
@synthesize window = _window;
4.ios13启动app黑屏;
SceneDelegate
是为了优化启动和实现iPad多任务处理功能(在ipad上同时打开多个窗口)做出的改动,将原本在AppDelegate
里的生命周期相关方法和window
分离出来。
iOS13以前
:AppDelegate管理App的生命周期和UI生命周期;iOS13以后
:AppDelegate管理App的生命周期和新增的UISceneSession生命周期,新增SceneDelegate
文件来管理UI生命周期和window
;
关于解决有两种情况:
方法一:不开发iPadOS多窗口App
1)将新增的SceneDelegate文件
删除
2)删除info.plist
文件中Application Scene Manifest
选项
3)在AppDelegate
中新增window属性
,在didFinishLaunchingWithOptions
方法中跟往常一样进行相应根控制设置及处理,并删除新增的UISceneSession
两个方法
方法二:在SceneDelegate
中willConnectToSession
方法里进行根控制设置的时候也要添加相应的版本控制,需要注意的是,此处初始化window的时候需要用WindowScene进行初始化
,否则黑屏加载不出视图。
@available(iOS 13.0, *)
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
/*ios13之后走的是这里
在SceneDelegate中willConnectToSession方法里进行根控制设置的时候也要添加相应的版本控制,需要注意的是,此处初始化window的时候需要用WindowScene进行初始化,否则黑屏加载不出视图。
*/
//方法一
guard let _ = (scene as? UIWindowScene) else { return }
let window=UIWindow(windowScene: scene as! UIWindowScene)
window.rootViewController = LYBTabBarVC.init()
self.window=window
window.makeKeyAndVisible()
//方法二
if let windowSence = scene as? UIWindowScene {
self.window = UIWindow(windowScene: windowSence)
let tabvc = LYBTabBarVC.init()
self.window?.rootViewController = tabvc
self.window?.makeKeyAndVisible()
}
}
在Appdelegate中:
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
//ios13之前走的是这里
let window = UIWindow(frame: UIScreen.main.bounds)
window.rootViewController = LYBTabBarVC.init()
self.window?.backgroundColor=UIColor.white
self.window = window
window.makeKeyAndVisible()
return true
}
5. ios13中创建项目(不使用SceneDelegate)步骤:
1)删除SceneDelegate.swift
2)删除 Main.storyboard,不使用storyboard布局,打开info.plist,删除Main storyboard file base name和Application Scene Manifest选项。
3)删除appdelegate 中关于scene的2个代理
4)appdelegate中添加根导航
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let window = UIWindow(frame: UIScreen.main.bounds)
window.rootViewController = LYBTabBarVC.init()
self.window?.backgroundColor=UIColor.white
self.window = window
window.makeKeyAndVisible()
return true
}
问题:/xxxx/xxx.xcodeproj Building for iOS, but the linked and embedded framework ‘xxx.framework’ was built for iOS + iOS Simulator.
原因:
WWDC 2019
推出XCFramework
启,其实 XCode 11 开始就会有这个问题,但在XCode 11
上一直是 warning 也就没太注意XCode12.3
开始,针对类似于iOS + iOS Simulator
这种多平台的包,强制使用XCFramework
架构,否则error
( 好坑啊 )
解决:https://www.it610.com/article/1343957131203784704.htm
- 这里提供三套方案,前两套比较简单,修改主项目配置即可;第三套是
Apple
建议的方法,也就是重新打包framework
为XCFramework
3.1 Validate WorkSpace
-
启用
Validate WorkSpace
,让XCode
对frameworks
进行自动化管理
不建议使用,只能做暂时方案,万一哪天
Apple
不开心又把Validate WorkSpace
逻辑改了呢?
3.2 Build System
不建议使用,总不能一直使用以前的构建系统吧?以后
WWDC
推出新功能了,还是得用新系统,旁边苹果的Deprecated
注释也说明了这点
3.使用 XCFramework