не удается создать приложение программно для более старых версий iOS в xCode 12

#ios #swift #xcode #version

Вопрос:

Я не могу программно создать приложение для более старых версий iOS в Xcode 12. В 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
    }
  }
 

Вот мой контроллер просмотра:

 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. Я удаляю ключ/значение main в файле info.plist. И я удаляю Main.раскадровку в Основной интерфейс

Комментарии:

1. в чем проблема ?

Ответ №1:

не удаляйте файл sceneDelegate, это плохая практика, AppDelegate скоро устареет… если вам нужна настройка для устройств, используйте iOS 12 или более старые версии.. попробуйте использовать это..

в sceneDelegate…

   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.. только для устройств, использующих iOS 12 или старше внутри файла AppDelegate

 
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 или более поздними версиями… и это сработает, но не удаляйте sceneDelegate, ознакомьтесь с новостями wwdc swift.

У меня была такая же проблема 2 года назад, и я использую эту опцию в настоящее время и все еще работаю на себя, надеюсь, это поможет.

Комментарии:

1. Спасибо за ваш ответ, но проблема решена другим способом.