-
-
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)); | |
} |
Thanks
works for me. except view controller views are all disabled. this problem ONLY occurs on iOS 13.
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 :(
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.
👋 Got it working. It seems you need to assign any window reference to its own property for it to show up in the view hierarchy.