আইসিএস 13 এক্সকোড 11 ব্ল্যাক স্ক্রিনে সিনিডলিগেট যোগ করার পরেও এবং তথ্য.পালিস্ট আপডেট করার পরে


10

আমি বর্তমানে এক্সকোড ১১, টার্গেট আইওএস ১৩.০ (অ্যাপ্লিকেশনটি আইওএস 12.1 থেকে 12.4 পর্যন্ত নীচের সমস্ত সংস্করণে ভাল কাজ করে) এর সাথে একটি ফাঁকা স্ক্রিন পাচ্ছি, আমি আমার অ্যাপ্লিকেশনটি 12.1 এর উপরে আইওএস ব্যবহারকারীদের জন্য কাজ করতে চাই এবং 13.0 বর্তমানে ফাঁকা স্ক্রিন পেয়েও আমার বিদ্যমান প্রকল্পে এবং নীচে SceneDelegate যুক্ত করুন AppManifest

অ্যাপ ম্যানিফেস্ট ফাইল যুক্ত করা হচ্ছে

import UIKit
    import SwiftUI

    @available(iOS 13.0, *)
    class SceneDelegate: UIResponder, UIWindowSceneDelegate {

        var window: UIWindow?

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

            //guard let _ = (scene as? UIWindowScene) else { return }

            let user  = UserDefaults.standard.object(forKey: "defaultsuserid")

            let userSelfIdent  = UserDefaults.standard.object(forKey: "userinitialident")

            if let windowScene = scene as? UIWindowScene {

                let internalWindow = UIWindow(windowScene: windowScene)

                if (user != nil && userSelfIdent != nil){
                     let mainstoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
                     let newViewcontroller:UIViewController = mainstoryboard.instantiateViewController(withIdentifier: "swrevealviewcontroller") as! SWRevealViewController
                        internalWindow.rootViewController = newViewcontroller
                        self.window = internalWindow
                        internalWindow.makeKeyAndVisible()
                }else {

                    guard let _ = (scene as? UIWindowScene) else { return }
                }
            }
        }

নিম্নলিখিতটি আমার অ্যাপডেলিগেট যা প্রথমে ডাকা হচ্ছে এবং didFinishLaunchWithOptionsপদ্ধতিটি সম্পাদন করছে । আমি জানতে চাই যে কেবলমাত্র আমার টার্গেট আইওএস 13.0 এর চেয়ে কম হলে এবং 13.0 এর পরে আমার রুটভিউ কনট্রোলারটি আরম্ভ করার জন্য সিনডেলিগেট পদ্ধতিতে কল করুন কীভাবে আমি এই পদ্ধতিটি কল করতে পারি?

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    @available(iOS 13.0, *)
    func application(_ application: UIApplication,
                     configurationForConnecting connectingSceneSession: UISceneSession,
                     options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }

    @available(iOS 13.0, *)
    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {

    }



    @available(iOS 13.0, *)
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

        guard let _ = (scene as? UIWindowScene) else { return }

        if (user != nil && userSelfIdent != nil){

              let mainstoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
              let newViewcontroller:UIViewController = mainstoryboard.instantiateViewController(withIdentifier: "swrevealviewcontroller") as! SWRevealViewController
                self.window?.rootViewController = newViewcontroller
        }
    }

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        Thread.sleep(forTimeInterval: 3.0)

        UINavigationBar.appearance().barTintColor = UIColor(red:0.08, green:0.23, blue:0.62, alpha:1.0)

        if (user != nil && userSelfIdent != nil){

              let mainstoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
              let newViewcontroller:UIViewController = mainstoryboard.instantiateViewController(withIdentifier: "swrevealviewcontroller") as! SWRevealViewController
                self.window?.rootViewController = newViewcontroller
        }

        return true
    }

    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

        let defaultUserID = UserDefaults.standard.string(forKey: "defaultUserID")


    }

    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

        switch (application.applicationState) {
        case UIApplicationState.active:
            do something

        case UIApplicationState.background, UIApplicationState.inactive:

            let mainstoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
            let newViewcontroller = mainstoryboard.instantiateViewController(withIdentifier: "swrevealviewcontroller") as! SWRevealViewController
            self.window?.rootViewController = newViewcontroller            
        }
    }

উত্তর:


28

আপনার এখানে বেশ কয়েকটি সমস্যা রয়েছে। অ্যাপ লাইফাইসাইকেলের সাথে সম্পর্কিত ডকুমেন্টেশনগুলি পড়া গুরুত্বপূর্ণ, যা আইওএস 13 এর অধীনে কী বলা হয় এবং আইওএস 12 এর অধীনে কী বলা হয় তা সম্পর্কিত।

আপনি আমার সিঙ্গল ভিউ অ্যাপ্লিকেশন টেমপ্লেটটি দেখতে চান যা iOS 12 এবং 13 সমর্থন করে।

আপনার কোডটি দেখে এখানে সমস্যার সংক্ষিপ্তসার দেওয়া হল:

AppDelegate:

  • অ্যাপ্লিকেশনটি আইওএস 12 বা তারও বেশি আগে চলমান থাকলে আপনার কেবলমাত্র মূল উইন্ডো এবং রুট ভিউ নিয়ন্ত্রণকারী সেটআপ করা উচিত। রানটাইমের সময় আপনার এটি পরীক্ষা করা দরকার।
  • func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)পদ্ধতি বিশিষ্ট অ্যাপ্লিকেশান প্রতিনিধি মধ্যে হওয়া উচিত নয়।
  • সরাসরি সম্পর্কিত নয় তবে অ্যাপ স্টার্টআপে কখনই ঘুমোবেন না। Thread.sleep(forTimeInterval: 3.0)লাইনটি সরান । ব্যবহারকারীরা আপনার অ্যাপ্লিকেশনটি ব্যবহার করতে চান, প্রয়োজনের চেয়ে আর লঞ্চ স্ক্রিনের দিকে তাকাতে হবে না। এবং অ্যাপ্লিকেশন প্রবর্তনে মূল থ্রেডটি ব্লক করা আপনার অ্যাপ্লিকেশনটিকে হত্যা করতে পারে।

SceneDelegate:

  • এটি বেশিরভাগ ক্ষেত্রে সূক্ষ্ম তবে guard let _ = (scene as? UIWindowScene) else { return }লাইনটির কোনও কারণ নেই , বিশেষত এটি যেহেতু এটি if letইতিমধ্যে সেই চেকটির মধ্যে রয়েছে।
  • আপনি SwiftUI ব্যবহার করছেন বলে মনে হয় না তাই এই আমদানিটি সরিয়ে দিন।

আমি আপনার অ্যাপের প্রতিনিধিটিকে আরও এরকম হতে আপডেট করব:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool {
        UINavigationBar.appearance().barTintColor = UIColor(red:0.08, green:0.23, blue:0.62, alpha:1.0)

        if #available(iOS 13.0, *) {
            // In iOS 13 setup is done in SceneDelegate
        } else {
            let window = UIWindow(frame: UIScreen.main.bounds)
            self.window = window

            if (user != nil && userSelfIdent != nil){
                let mainstoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
                let newViewcontroller:UIViewController = mainstoryboard.instantiateViewController(withIdentifier: "swrevealviewcontroller") as! SWRevealViewController
                window.rootViewController = newViewcontroller
            }
        }

        return true
    }

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        if #available(iOS 13.0, *) {
            // In iOS 13 setup is done in SceneDelegate
        } else {
            self.window?.makeKeyAndVisible()
        }

        return true
    }

    func applicationWillResignActive(_ application: UIApplication) {
        // Not called under iOS 13 - See SceneDelegate sceneWillResignActive
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        // Not called under iOS 13 - See SceneDelegate sceneDidEnterBackground
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        // Not called under iOS 13 - See SceneDelegate sceneWillEnterForeground
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        // Not called under iOS 13 - See SceneDelegate sceneDidBecomeActive
    }

    // MARK: UISceneSession Lifecycle

    @available(iOS 13.0, *)
    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        // Called when a new scene session is being created.
        // Use this method to select a configuration to create the new scene with.
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }

    @available(iOS 13.0, *)
    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
        // Called when the user discards a scene session.
        // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
        // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
    }
}

আপনার দৃশ্যের প্রতিনিধি এর মতো হতে পারে:

@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = (scene as? UIWindowScene) else { return }

        let window = UIWindow(windowScene: windowScene)
        self.window = window

        if (user != nil && userSelfIdent != nil){
            let mainstoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
            let newViewcontroller:UIViewController = mainstoryboard.instantiateViewController(withIdentifier: "swrevealviewcontroller") as! SWRevealViewController
            window.rootViewController = newViewcontroller
            window.makeKeyAndVisible()
        }
    }

    func sceneDidDisconnect(_ scene: UIScene) {
        // Called as the scene is being released by the system.
    }

    func sceneDidBecomeActive(_ scene: UIScene) {
        // Not called under iOS 12 - See AppDelegate applicationDidBecomeActive
    }

    func sceneWillResignActive(_ scene: UIScene) {
        // Not called under iOS 12 - See AppDelegate applicationWillResignActive
    }

    func sceneWillEnterForeground(_ scene: UIScene) {
        // Not called under iOS 12 - See AppDelegate applicationWillEnterForeground
    }

    func sceneDidEnterBackground(_ scene: UIScene) {
        // Not called under iOS 12 - See AppDelegate applicationDidEnterBackground
    }
}

1
আপনাকে অনেক ধন্যবাদ rmaddy। সত্যিই আপনার সময় এবং উত্তর প্রশংসা। দুর্ভাগ্যক্রমে, পূর্বোক্ত পরিবর্তনগুলি করার পরেও আমি একটি ফাঁকা স্ক্রিন
পেয়েছি

রানটাইমে আপনার কোডটিতে আসলে কী ঘটে? ডিবাগার দিয়ে যেতে। willConnectToদৃশ্যের প্রতিনিধি পদ্ধতিতে ব্রেকপয়েন্ট দিয়ে শুরু করুন এবং ধাপে ধাপে যান। এটি আপনার প্রত্যাশা মতো করে?
rmaddy

কিছুই হয় না আমি কনসোলে কোনও ত্রুটি বার্তা পাচ্ছি না তা নিশ্চিত না কি হচ্ছে তবে আমার সিমুলেটরটি ফাঁকা হয়ে যায় ... imgur.com/a/kip57Fg
ক্রিস রাদুহস্ট ২২ শে

হয় willConnectToবলা হয়? তাহলে কি হয়? এটি কি রুট ভিউ কন্ট্রোলার তৈরি এবং সেট করার বিন্দু পায় না? আবার ডিবাগার দিয়ে কোডটি সরিয়ে নিন। শুধু কনসোল আউটপুট উপর নির্ভর করবেন না।
rmaddy

হ্যাঁ এটিকে বলা হয় এবং `window.rootViewController = newViewcontroller window.makeKeyAndVisible () 'এটিও কার্যকর হয়েছে তবে আমি আইওএস 11-13.0 সিমুলেটারে একটি ফাঁকা স্ক্রিন দেখতে পাচ্ছি তবে আমি যখন লক্ষ্যটিতে যাই এবং 13.0 এর পরিবর্তে 12.1 এ পরিবর্তন করি অ্যাপটি ভাল কাজ করে works
ক্রিস রদুহস্টে

12

সুতরাং একটি আইওএস 13 এবং নিম্ন সংস্করণে উঠার পদক্ষেপগুলি

1) আইওএস 12 এ স্থাপনার লক্ষ্য পরিবর্তন করুন।

2) অ্যাপ্লিকেশনটির পদ্ধতিগুলি আইওএস 12 বিকাশের জন্য তাদের কী হওয়া উচিত তা প্রতিস্থাপন করুন। এটি যুক্ত করুন:

   var window: UIWindow?

3) SceneDelegate সরান।

4) আপনার তথ্য.পালিস্টে অ্যাপ্লিকেশন সিন ম্যানিফেস্ট সরান Remove

এটি আইওএস 13 এবং নিম্ন আইওএস সংস্করণ উভয় ক্ষেত্রেই কাজ করবে


এটি সেরা উত্তর হতে হবে!
সুইফটি কোডগুলি

সেরা উত্তর ....
সুব্রত মন্ডল

1

আমি এই সমস্যার সাথে আটকে ছিলাম এবং অবশেষে আমি স্টোরিবোর্ড থেকে অনুসন্ধানডিসপ্লে কন্ট্রোলার উল্লেখগুলি সরিয়ে সমাধান করেছি।

<searchDisplayController id="pWz-So-g6H">
                    <connections>
                        <outlet property="delegate" destination="Yci-sd-Mof" id="fjs-ah-jLs"/>
                        <outlet property="searchContentsController" destination="Yci-sd-Mof" id="gQN-1r-gti"/>
                        <outlet property="searchResultsDataSource" destination="Yci-sd-Mof" id="2Jf-lh-Ute"/>
                        <outlet property="searchResultsDelegate" destination="Yci-sd-Mof" id="Hap-SA-f02"/>
                    </connections>
                </searchDisplayController>

2
আইওএস ১৩-এর জন্য এক্সকোড ১৩ দিয়ে অ্যাপ্লিকেশন তৈরির পরে আমার একইরকম সমস্যা হয়েছিল My এটি কেবল টেস্টফ্লাইট থেকে ইনস্টল করার সময়। সিমুলেটারে বা তার দিয়ে অ্যাপ্লিকেশন শুরু করা (স্কিম ডিবাগ এবং রিলিজ) জরিমানা শুরু হয়েছিল। এছাড়াও আইওএস 12: মোটেও ইস্যু। করছেন: 'গ্রেপ -আর-আই' অনুসন্ধানডিসপ্লে কন্ট্রোলার 'মেইন.স্টোরবোর্ডে অনুরূপ পাঠ্য দেখিয়েছে। টেক্সট-এডিটর সহ এই লাইনগুলি সরিয়ে এবং এক্সকোড 13 এ সংশোধন করার পরে, অ্যাপ্লিকেশনটি এখন টেস্টফ্লাইট থেকে ইনস্টল করা আইওএস 13 এ সূক্ষ্ম শুরু হয়! ধন্যবাদ @ এরিক মার্টিনেজ
রড

আমি মূল স্টোরবোর্ডের জন্য উত্সটি খুলেছি এবং এই অনুসন্ধানডিসপ্লে কন্ট্রোলার আর নেই
টিমম্যান

1

আমার যখন একইরকম সমস্যা হয়েছিল তখন এটি Xcode 11.0 ব্যবহার করে উত্পন্ন সিঙ্গল-অ্যাপ্লিকেশন টেমপ্লেটের কারণে ছিল যা এক্সকোড 11.2 দিয়ে নির্মিত অ্যাপ্লিকেশনটির জন্য প্রয়োজনীয় নয়।

সুতরাং আমি সবেমাত্র এক্সকোড ১১.২ এর সাথে একটি নতুন সিঙ্গেল-পৃষ্ঠা-অ্যাপ তৈরি করেছি এবং উত্সাহিত দৃশ্যাংশটি আমার পুরানো প্রকল্পে অনুলিপি করেছি যা Xcode 11.0 ব্যবহার করে তৈরি করা হয়েছিল।

এর পরে, ফাঁকা স্ক্রিনটি আমার ইন্টারফেসে আরও একবার দৃশ্যমান হয়েছিল।

পরিবর্তন


0

সহজেই এই পদক্ষেপগুলি পতন করুন

1-) দৃশ্যের প্রতিনিধি ফাইল সরান

2-) AppDelegate.swift এ কোডের নীচে যুক্ত করুন

    class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        return true
    }
   }

3-) আপনার .plist ফাইল থেকে অ্যাপ্লিকেশন দৃশ্য ম্যানিফেস্ট লাইন সরান এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.