无法在 xCode 12 上以编程方式为较旧的 iOS 版本创建应用程序

Posted

技术标签:

【中文标题】无法在 xCode 12 上以编程方式为较旧的 iOS 版本创建应用程序【英文标题】:can't create an app programmatically for older iOS versions on xCode 12 【发布时间】:2021-11-26 16:04:36 【问题描述】:

我无法在 Xcode 12 上以编程方式为较旧的 ios 版本创建应用程序。 AppDelegate.swift 中有我的代码

    @main
    class AppDelegate: UIResponder, UIApplicationDelegate 

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool 
        
        // Set the window bounds
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.makeKeyAndVisible()

        window?.rootViewController = UINavigationController(rootViewController: ViewController())
        
        return true
    
  

这是我的 ViewController:

import UIKit

class ViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        view.backgroundColor = .white
    



我在互联网上寻找解决方案,但找不到。 我删除了 Main.storyboard 和 SceneDelegate.swift 文件。我删除 info.plist 文件中的键/值 main 。我将 Main.storyboard 删除到主界面中

【问题讨论】:

什么问题? 【参考方案1】:

不要删除 sceneDelegate 文件,这是一种不好的做法,appDelegate 将很快弃用... 如果您需要为使用 iOS 12 或更早版本的设备进行设置.. 尝试使用这个..

在场景委托中...

  func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) 

        guard let scene = (scene as? UIWindowScene) else  return 

        let floatVersion = (UIDevice.current.systemVersion as NSString).floatValue

        if floatVersion >= 13 
            window = UIWindow(windowScene: scene)
            window?.makeKeyAndVisible()
            
            let controller = YourController()
            let navigation = UINavigationController(rootViewController: controller)

            window?.rootViewController = navigation
        
    

并在 appDelegate 中使用它。仅适用于在 appDelegate 文件中使用 iOS 12 或更早版本的设备


var window: UIWindow?

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool 
        
        let floatVersion = (UIDevice.current.systemVersion as NSString).floatValue
        if floatVersion <= 12.5 
            window = UIWindow(frame: UIScreen.main.bounds)
            window?.makeKeyAndVisible()
            
// if you use a navigation... 
            let controller = YourController()
            let navigation = UINavigationController(rootViewController: controller)
            window?.rootViewController = navigation
         
      
        return true
    
 

尝试在验证中使用场景委托和 appDelegate 中的断点,使用 iOS 12 版本和 iOS 13 版本或最新版本的模拟器......并且会工作,但不要删除场景委托,查看 wwdc swift 新闻。

我在 2 年前遇到了同样的问题,我目前使用这个选项并且仍然可以为我工作,我希望这会有所帮助。

【讨论】:

感谢您的回答,但问题已通过其他方式解决。

以上是关于无法在 xCode 12 上以编程方式为较旧的 iOS 版本创建应用程序的主要内容,如果未能解决你的问题,请参考以下文章

我是不是将 Ansi OUTER JOIN 语法正确地转换为较旧的 Sybase (*=) 连接语法?

无法在 XCode 4.3.2 中打开较旧的 .xcodeproj 文件

在较旧的 iOS 模拟器上运行时 Xcode 10 测试失败 - “无法加载测试包......找不到合适的图像”

手动升级到 xcode iOS 7 布局?

在 android 4.0 上以编程方式设置 *** 连接

较旧的模拟器下载是不是会下载相应的sdk更改