-1

(noob to iOS) When I launch my app it shows the launch screen for a brief moment than it goes to a black screen. Apparently a lot of ppl have this error just cant find a fix that works for me

I ensured my storyboard was my main interface and tried to clean the project

I have only one view controller and one view

along with the app and scene delegate files

any suggestions ?

AppDelegate.swift:


@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {



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

    // MARK: UISceneSession Lifecycle

    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)
    }

    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.
    }


}

SceneDelegate.swift:



import UIKit
import SwiftUI

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?


    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
        // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
        // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).

        // Create the SwiftUI view that provides the window contents.
        let contentView = ButtonScreen()

        // Use a UIHostingController as window root view controller.
       if let windowScene = scene as? UIWindowScene {
                  let window = UIWindow(windowScene: windowScene)
                  window.rootViewController = contentView
                  self.window = window
                  window.makeKeyAndVisible()
              }
          }
    func sceneDidDisconnect(_ scene: UIScene) {
        // Called as the scene is being released by the system.
        // This occurs shortly after the scene enters the background, or when its session is discarded.
        // Release any resources associated with this scene that can be re-created the next time the scene connects.
        // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead).
    }

    func sceneDidBecomeActive(_ scene: UIScene) {
        // Called when the scene has moved from an inactive state to an active state.
        // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
    }

    func sceneWillResignActive(_ scene: UIScene) {
        // Called when the scene will move from an active state to an inactive state.
        // This may occur due to temporary interruptions (ex. an incoming phone call).
    }

    func sceneWillEnterForeground(_ scene: UIScene) {
        // Called as the scene transitions from the background to the foreground.
        // Use this method to undo the changes made on entering the background.
    }

    func sceneDidEnterBackground(_ scene: UIScene) {
        // Called as the scene transitions from the foreground to the background.
        // Use this method to save data, release shared resources, and store enough scene-specific state information
        // to restore the scene back to its current state.
    }


}

View Controller:

import MediaPlayer


class ButtonScreen: UIViewController {

    var musicPlayer = MPMusicPlayerController.applicationMusicPlayer
    
    override func viewDidLoad() {
        super.viewDidLoad()

  
    }
    
    @IBAction func stopButtonTapped(_ sender: UIButton) {
        musicPlayer.stop()
    }
    @IBAction func nextButtonTapped(_ sender: UIButton) {
        musicPlayer.skipToNextItem()
    }
    @IBAction func previousButtonTapped(_ sender: UIButton) {
        musicPlayer.skipToPreviousItem()
    }
    @IBAction func musicButtonTapped(_ sender: UIButton) {
        
        MPMediaLibrary.requestAuthorization {(status) in
            if status == .authorized{
                self.playArtist(artist: sender.currentTitle!)
            }
        }
        
        playArtist(artist: sender.currentTitle!)
    }
    
    func playArtist (artist: String){
        
        musicPlayer.stop();
        
        let query = MPMediaQuery()
        let predicate = MPMediaPropertyPredicate(value: artist, forProperty: MPMediaItemPropertyArtist)
        query.addFilterPredicate(predicate)
        musicPlayer.setQueue(with: query)
        musicPlayer.shuffleMode = .songs
        musicPlayer.play()
    }
    
}
BlooHunnits
  • 47
  • 1
  • 6
  • 1
    I don't know the exact reason, but you import SwiftUI in your SceneDelegate file when you don't need it and you don't import UIKit in your view controller file when you need it. And you are specifying ContentView in your SceneDelegate file as a starter. In other words, something doesn't add up. – El Tomato Jun 21 '20 at 23:48
  • 1
    Where did you configure content view I don’t see a loadView method or a view set in view didLoad si if you are using storyboard the you are setting the initial view controller in the wrong way you must do this let VC = UIStoryBoard(ñame:”main”,bundle:nil).instantiateViewController(withIdentifier:”vcidentifier”) as! ButtonSreen and then ser sat rootviewcontroller in your scene delegate . PD sorry about format I’m on safari for iOS – Yoel Jimenez del valle Jun 22 '20 at 00:02
  • still confused as far as syntax – BlooHunnits Jun 22 '20 at 00:52

1 Answers1

0

The problem here is that when you created your project, you declared that you wanted a SwiftUI project (in the User Interface popup menu). You don't. You want a Storyboard project — even if you do not in fact use the storyboard.

There is no SwiftUI anywhere in your project, and you are configuring your root view controller incorrectly for a SwiftUI project, which unfortunately is what your project is.

So your only option here is to start all over. Make a new project, and this time be really really careful about the project type.

enter image description here

matt
  • 515,959
  • 87
  • 875
  • 1,141
  • ahhhh config issue makes so much sense no wonder why the stock code was causing problems gonna try this later thx!! – BlooHunnits Jun 22 '20 at 21:42