ios之版本升级带来的问题

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,所以原来AppDelegatewindow属性自然也就跑到SceneDelegate里面去了。

这个SceneDelegateclass又被我们标注了只能iOS13可以用,也就是说iOS13以下版本的iPhone是不会执行整个SceneDelegateclass的代码的,所以在低版本中系统就找不到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两个方法

方法二:在SceneDelegatewillConnectToSession方法里进行根控制设置的时候也要添加相应的版本控制,需要注意的是,此处初始化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 进行自动化管理

  • 打开项目路径 - Build Setting > Build Options > Validate WorkSpace

  • Validate WorkSpace 设置为 true
    升级XCode12.3报错 Building for , but the linked and embedded framework was built for iOS + iOS Simulator_第1张图片

不建议使用,只能做暂时方案,万一哪天 Apple 不开心又把 Validate WorkSpace 逻辑改了呢?

3.2 Build System

  • 修改编译系统为以前的系统
  • 打开 Files > WorkSpace Setting > Build System
  • 设置 Build System 如下
    升级XCode12.3报错 Building for , but the linked and embedded framework was built for iOS + iOS Simulator_第2张图片

不建议使用,总不能一直使用以前的构建系统吧?以后 WWDC 推出新功能了,还是得用新系统,旁边苹果的 Deprecated 注释也说明了这点

3.使用 XCFramework

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于 iOS 版本升级可能导致的兼容问题,以下是一些常见的情况和解决方法: 1. 应用程序崩溃:在新版本的 iOS 中,某些旧版本的 API 可能已被废弃或修改。因此,您的应用程序可能无法正常运行或崩溃。解决方法是检查并更新您的代码,使用最新的 API。 2. UI 布局问题:新版本的 iOS 可能会引入新的 UI 布局规则或更改现有规则。这可能导致您的应用程序在新版本上的界面显示不正常。解决方法是重新检查和调整您的界面布局,以适应新的规则。 3. 不兼容的第三方库或框架:如果您的应用程序使用了第三方库或框架,这些库或框架可能需要进行更新以适应新版本的 iOS。您需要检查并更新这些依赖项,以确保它们与新版本的 iOS 兼容。 4. 功能变更或删除:苹果可能会在新版本中更改或删除某些功能。如果您的应用程序依赖于这些功能,您需要重新评估和调整您的代码。如果某些功能被删除,您可能需要寻找替代方案或重新设计您的应用程序。 5. 性能问题:新版本的 iOS 可能会引入性能优化或变更,这可能会影响您的应用程序的性能。您需要进行性能测试,并根据需要进行调整和优化。 总之,升级 iOS 版本需要谨慎处理,并仔细评估与您的应用程序相关的兼容性问题。在升级之前,建议您详细了解新版本的变更和发布说明,并进行必要的测试和适应性调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值