Before we all get used to the approach when in AppDelegate
we create UIWindow
and then set rootViewController
for this Window
. Sometimes when we needed to have a custom alert we can create a new UIWindow
that will be above.
Now Xcode automatically creates UIScene
and creates UIWindow
base on this scene. I would appreciate if somebody can explain in details how to use this scenes in real life and what is their major benefit from using just UIWindow
in AppDelegate
Because this article doesn't explain much
The documentation
You should read the App and Environment Article from Apple instead of
UIScene
documentation.Explaination
As it says about the scenes:
We had only one scene back then before iOS 13, So the only thing we need to run
ViewController
s simultaneously was multipleWindow
s on top of each other. But now, each application can have multiple instances running at the same time! Each scene has its own state and it might be in the foreground while others are in the background or are suspended, whileWindow
was completely depended on the application itself.Imagine we have 2 view controllers (consider there are no scenes) running on the left and right side of the device and then we need to show a banner. Using the old window method will show the banner on both of them! And if you need to pick one, you may end up finding the correct controller and presenting the banner on it, (I think all of us done this method before getting familiar with
UIWindow
)So apple introduced
Scene
, a container for each separate instance of the app. So you can manage each one separately and each of them acts like a separate app. It has its ownwindow
s andcontroller
s. But all of them are managed by a single object,UIApplication.shared
and it has adelegate
to handle general events (usually from outside of the app) and entire application life cycle.