如何在没有Storyboard的Xcode中创建一个空应用程序

时间:2014-09-11 09:02:20

标签: ios xcode storyboard xcode6

Xcode6在创建新项目时删除了Empty Application模板。我们如何在Xcode6及更高版本中创建一个空的应用程序(没有Storyboard),就像在早期版本中一样?

15 个答案:

答案 0 :(得分:269)

XCode6及以上版本中没有选项可直接创建空XCode5及更早版本的空应用程序。但是,我们仍然可以通过以下步骤创建没有Storyboard的应用程序:

  1. 创建Single View Application
  2. 删除Main.storyboardLaunchScreen.xib(选择它们,右键单击,然后选择其中之一 从项目中删除它们,或完全删除它们。)
  3. 删除“主故事板文件基本名称”和“启动屏幕界面” 文件基名“Info.plist文件中的条目。
  4. 打开AppDelegate.m,编辑applicationDidFinishLaunchingWithOptions,使其如下所示:
  5. Swift 3及以上:

        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
        {
            self.window = UIWindow(frame: UIScreen.main.bounds)
            self.window?.backgroundColor = UIColor.white
            self.window?.makeKeyAndVisible()
            return true
        }
    

    Swift 2.x:

        func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
        {
            self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
            self.window?.backgroundColor = UIColor.whiteColor()
            self.window?.makeKeyAndVisible()
            return true
        }
    

    目标-C:

        - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
        {
            self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
            // Override point for customization after application launch.
            self.window.rootViewController = [[ViewController alloc] init];
            self.window.backgroundColor = [UIColor whiteColor];
            [self.window makeKeyAndVisible];
            return YES;
        }
    

答案 1 :(得分:32)

一种简单的方法是将XCode 5的{​​{1}}模板复制到Empty Application的模板目录。

您可以从here下载XCode的{​​{1}}模板,然后将其解压缩并复制到XCode 5目录。

P.S这种方法也适用于swift!

修改
正如@harrisg在下面的评论中所建议的那样,您可以将上述模板放在Empty Application文件夹中,这样即使Xcode得到更新,它也可以使用。
如果没有这样的目录,那么您可能必须创建此目录结构:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Application中的~/Library/Developer/Xcode/Templates/Project Templates/iOS/Application/

使用这种简单的方法,我可以在Templates/Project Templates/iOS/Application/中创建~/Library/Developer/Xcode/。 (下面的截图)

Xcode Empty Application Template 希望这有帮助!

答案 2 :(得分:17)

您还需要执行以下几个步骤:

  1. 添加前缀文件。 (如果你需要的话)
  2. 要添加默认启动图片,否则iPhone 5上的应用尺寸将为320x480。
  3. 所以这是一个完整的教程:

    1. 删除Main.storyboard文件
    2. 删除LaunchScreen.xib文件
    3. 删除Info.plist中的“主要故事板文件基本名称”属性
    4. 删除Info.plist中的“启动屏幕界面文件基本名称”属性
    5. 将“[app name] -Prefix.pch”文件添加到包含内容的支持文件中:

      #import <Availability.h>
      
      #ifndef __IPHONE_3_0
      #warning "This project uses features only available in iOS SDK 3.0 and later."
      #endif
      
      #ifdef __OBJC__
      #import <UIKit/UIKit.h>
      #import <Foundation/Foundation.h>
      #endif
      
    6. 将“$ SRCROOT / $ PROJECT_NAME / [pch文件名]”添加到项目设置 - &gt;构建设置 - &gt; Apple LLVM 6.0 - 语言 - &gt; “前缀标题”

    7. 为项目设置添加“是” - &gt;构建设置 - &gt; Apple LLVM 6.0 - 语言 - &gt; “预编译前缀标题”
    8. 打开“Image.xcassets”并添加LaunchImage
    9. 构建项目,然后会出现关于缺少默认启动图像的警告,只需按下警告并选择添加默认值, 这将添加“Default-568h @ 2x” 或者 - 如果要使用“Images.xcassets”中的初始图像,请转到项目设置 - &gt;目标 - &gt;一般 - &gt;在“启动图像源”中选择使用资产目录,它将创建一个新的,然后可以选择,从现有的资产目录中使用。
    10. 实施application:didFinishLaunchingWithOptions:方法:

      self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
      //Override point for customization after application launch.
      self.window.backgroundColor = [UIColor whiteColor];
      [self.window makeKeyAndVisible];
      
      return YES;
      

答案 3 :(得分:16)

Akhils的回答是完全正确的。对于我们这些使用Swift的人来说,就像这样:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    self.window?.backgroundColor = UIColor.whiteColor()
    self.window?.makeKeyAndVisible()
    return true
}

答案 4 :(得分:10)

还有一个步骤需要做:

1)删除plist文件中的主故事板文件基本名称

//AppDelegate.h


@property (strong, nonatomic) UIViewController *viewController;
@property (strong, nonatomic) UINavigationController *nav;

//AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {`enter code here`
    // Override point for customization after application launch.

    CGRect screenBounds = [[UIScreen mainScreen] bounds];

    UIWindow *window = [[UIWindow alloc] initWithFrame:screenBounds];


    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];



    self.viewController = [[UIViewController alloc] initWithNibName:@"ViewController" bundle:nil];

    self.nav = [[UINavigationController alloc] initWithRootViewController:self.viewController];

    [window setRootViewController:  self.nav];

    [window makeKeyAndVisible];

    [self setWindow:window];

    return YES;
}

答案 5 :(得分:6)

我有原始的空应用程序模板,该模板在Xcode 6之前的Xcode版本中使用。我上传了它here

您可以手动下载并将其粘贴到Xcode模板目录中,也可以使用Xcode的包管理器Alcatraz进行安装。只需搜索 Xcode Empty Application

答案 6 :(得分:5)

适用于Xcode 8Swift 3 只需删除.storyboard文件,它就会自动从.plist中删除相应的引用,并在AppDelegate.swift中添加以下代码。

    let initialViewController = UIViewController()
    initialViewController.view.backgroundColor = .white
    window = UIWindow(frame: UIScreen.main.bounds)
    window?.rootViewController = initialViewController
    window?.makeKeyAndVisible()

您可以编写自己的自定义ViewCountroller,并在AppDelegate.swift中使用self.window?.rootViewController,只需在上面的代码中用自己的ViewController替换UIViewController。

答案 7 :(得分:4)

删除Main.storyboard文件

这可以简单地删除。

更新ProjectName-Info.plist文件

删除Main storyboard base file name键。

创建一个nib文件并链接到项目的视图控制器

1.创建一个nib文件(文件 - &gt;新建 - &gt;文件 - &gt;查看)

2.将File's Owner's类更新为项目视图  控制器被称为

3.将File's Owner's view出口链接到nib文件中的view对象

更新应用代理

1.导入项目的视图控制器的头文件

2.更新应用程序:didFinishLaunchingWithOptions:方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    MyViewController *viewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
    self.window.rootViewController = viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

答案 8 :(得分:3)

我正在使用XCode6 Beta&amp;我通过将XCode5.x.x中的空模板添加到XCode6 Beta来搜索此问题的另一个解决方案。

右键单击“应用程序”中的“XCode5.x.x”,然后单击“显示包内容”#39;并复制&#39; Empty Application.xctemplate&#39;从给定的路径

目录/开发人员/平台/ iPhoneOS.platform / Developer / Library / Xcode / Templates / Project Templates / Application

现在退出Window&amp;打开XCode6的给定路径

目录/开发人员/平台/ iPhoneOS.platform / Developer / Library / Xcode / Templates / Project Templates / iOS / Application /

粘贴&#39;空Application.xctemplate&#39;在Application文件夹中。现在通过退出&amp;重新启动XCode6创建新项目。你会得到空应用程序&#39;选项。

现在,当我创建新的Empty项目时,项目中自动添加.pch文件(我们必须在XCode6中手动添加)

希望它能运作

答案 9 :(得分:2)

Xcode 9.3.1 Swift 4

  1. 首先,您需要在 项目导航器 菜单中删除 Main.storyboard
  2. Info.plist 中删除行 主要故事板文件基本名称
  3. 并且不要忘记删除中的 主界面 (只需删除 项目目标 - 常规 - 部署信息
  4. 完成此步骤后,转到 AppDelegate.swift ,然后在函数 didFinishLaunchingWithOptions 中编写下一步:

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
    
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.makeKeyAndVisible()
        window?.rootViewController = UINavigationController(rootViewController: ViewController())
    
        return true
    }
    

答案 10 :(得分:1)

是的,或者只是使用之前的Beta之一来创建它,然后继续使用最新版本。

答案 11 :(得分:1)

您可以为Xcode创建自己的项目模板。根据您的要求,您可以在此网站上使用模板:

https://github.com/elprup/xcode7-project-template

答案 12 :(得分:1)

其他人已经解释了如何摆脱故事板,所以我会在这里跳过那个。这是我更喜欢在我的代码中使用较少的可选链接(用Swift 3.1编写):

func application(_ application: UIApplication,
                 didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    let window = UIWindow(frame: UIScreen.main.bounds)
    window.backgroundColor = .white
    window.rootViewController = MyRootViewController()
    window.makeKeyAndVisible()
    self.window = window

    return true
}

答案 13 :(得分:0)

更新:Swift 5和iOS 13:

  1. 创建单视图应用程序。
  2. 删除Main.storyboard(右键单击并删除)。
  3. 删除Info.plist文件中的“主故事板文件库名称”条目。
  4. 打开SceneDelegate.swift,然后从以下位置更改func scene
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).
    guard let _ = (scene as? UIWindowScene) else { return }
}

 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).x

    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = ViewController()
        self.window = window
        window.makeKeyAndVisible()
    }
}

答案 14 :(得分:0)

在Xcode 11和ios 13上更新。设置完所有内容但仍然看到黑屏后,这是因为生命周期由UISceneDelegate处理,并且当您创建新项目时,它将自动生成UISceneDelegate.m和UISceneDelegate 。H。回到过去,我们习惯了UISceneDelegate。以下步骤可能会有所帮助:

  1. 在plist中删除应用程序场景清单。

  2. 删除Application Scene Manifest.h和Application Scene Manifest.m

  3. 删除#pragma标记下的代码-APPdelegate.m中的UISceneSession生命周期

  4. 添加@属性(强,非原子)UIWindow *窗口;在APPdelegate.h