-
-
Save douglashill/1bd6ba60b50315455ed2b2381bc355dc to your computer and use it in GitHub Desktop.
| // A minimal iOS app set up entirely in code using Objective-C rather than using a storyboard and UIApplicationSceneManifest in the Info.plist. | |
| // Last updated for iOS 18. | |
| // Swift version: https://gist.github.com/douglashill/b8125f7e2336b6a47461df0d4898f64d | |
| @import UIKit; | |
| @interface SceneDelegate : UIResponder <UIWindowSceneDelegate> | |
| @end | |
| @implementation SceneDelegate | |
| @synthesize window = _window; | |
| - (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions { | |
| self.window = [[UIWindow alloc] initWithWindowScene:(UIWindowScene *)scene]; | |
| self.window.rootViewController = [[UIViewController alloc] init]; | |
| [self.window makeKeyAndVisible]; | |
| } | |
| @end | |
| @interface AppDelegate: UIResponder <UIApplicationDelegate> | |
| @end | |
| @implementation AppDelegate | |
| - (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options { | |
| UISceneConfiguration *configuration = [[UISceneConfiguration alloc] initWithName:nil sessionRole:connectingSceneSession.role]; | |
| configuration.delegateClass = SceneDelegate.class; | |
| return configuration; | |
| } | |
| @end | |
| int main(int argc, char * argv[]) { | |
| return UIApplicationMain(argc, argv, nil, NSStringFromClass(AppDelegate.class)); | |
| } |
Good sample I would just change:
self.window.rootViewController = [[UIViewController alloc] init];to:
self.window.rootViewController = [[NameOfYourViewController alloc]init];Also don't forget to import #import "NameOfYourViewController.h"
Thanks for the sample.
With iOS17.5 I receive this warning:
BUG IN CLIENT OF UIKIT: Attempting to define a mismatched UISceneSessionRole! This will be an assert in future UIKit releases! Assigning a UISceneConfiguration with role "UISceneSessionRoleNone" for a UISceneSession with role "UIWindowSceneSessionRoleApplication".
UISceneConfiguration should be created like:
UISceneConfiguration *configuration = [[UISceneConfiguration alloc] initWithName:NULL sessionRole:UIWindowSceneSessionRoleApplication];
Thanks @OLFDB. Updated to use the role of the connectingSceneSession parameter.
Don't need the window property anymore. The window is retained by the scene in its windows property.
UIWindow *window = [[UIWindow alloc] initWithWindowScene:(UIWindowScene *)scene];
window.rootViewController = [[UIViewController alloc] init];
[window makeKeyAndVisible];
(And maybe fix the indentation of the two return statements while you're at it? :)
Hi @stianhoiland. Thanks for the suggestion, but running from Xcode 16.0 on an iOS 18.0 iPad simulator, I find keeping the window property is still necessary for the window to appear. I don’t see any issues with indentation in this file.
how were you able to enable the view control views ? , I am new to IOS development and i have been struggling to get the view controller views enabled :(