首页 文章

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

提问于
浏览
137

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

13 回答

  • 6

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

    • 创建 Single View Application .

    • 删除 Main.storyboardLaunchScreen.xib (选择它们,右键单击,然后选择从项目中删除它们,或者完全删除它们) .

    • 删除 Info.plist 文件中的"Main storyboard file base name"和"Launch screen interface file base name"条目 .

    • 打开AppDelegate.m,编辑applicationDidFinishLaunchingWithOptions,使其如下所示:

    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
        }
    

    Objective-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;
        }
    
  • 4

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

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

    目录/开发人员/平台/ iPhoneOS.platform /开发人员/库/ Xcode /模板/项目模板/应用程序

    现在退出Window并打开XCode6的给定路径

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

    在Application文件夹中粘贴'Empty Application.xctemplate' . 现在通过退出并创建新项目来重启XCode6 . 您将获得“空应用程序”选项 .

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

    希望它会奏效

  • 5

    一个简单的方法是将 XCode 5Empty Application 模板复制到 XCode 的模板目录 .

    您可以从here下载 XCode 5Empty Application 模板,然后解压缩并复制到 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Application 目录 .

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

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

    使用这种简单的方法,我可以在 XCode 6 中创建一个 Empty Application . (下面的截图)

    Xcode Empty Application Template
    希望这有帮助!

  • 16

    还有一些步骤需要做:

    • 添加前缀文件 . (如果你需要的话)

    • 要添加默认启动图像,否则iPhone 5上的应用程序大小将为320x480 .

    所以这是一个完整的教程:

    • 删除Main.storyboard文件

    • 删除LaunchScreen.xib文件

    • 删除Info.plist中的"Main storyboard file base name"属性

    • 删除Info.plist中的"Launch screen interface file base name"属性

    • 将“[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
    
    • 将“$ SRCROOT / $ PROJECT_NAME / [pch文件名]”添加到项目设置 - >构建设置 - > Apple LLVM 6.0 - 语言 - >“前缀 Headers ”

    • 将"YES"添加到项目设置 - >构建设置 - > Apple LLVM 6.0 - 语言 - > "Precompile Prefix Header"

    • 打开"Image.xcassets"并添加LaunchImage

    • 构建项目,然后会有关于缺少默认启动图像的警告,只需按下警告并选择添加默认值,这将添加"Default-568h@2x"或 - 如果要使用来自"Images.xcassets"的启动图像,请转到项目设置 - >目标 - >常规 - >在"Launch Images Source"中选择使用资产目录,它会创建一个新的,然后可以选择,从现有的资产目录中使用 .

    • 实现 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;
    
  • 2

    阿基尔斯的回答是完全正确的 . 对于我们这些使用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
    }
    
  • 265

    还有一个步骤需要做:

    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;
    }
    
  • 3

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

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

  • 1

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

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

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

  • 1

    Remove the Main.storyboard file

    这可以简单地删除 .

    Update the ProjectName-Info.plist file

    删除 Main storyboard base file name 键 .

    Create a nib file and link to the project’s view controller

    1.创建一个nib文件(文件 - >新建 - >文件 - >查看)

    2.将 File's Owner's 类更新为调用项目视图控制器的任何内容

    3.将 File's Owner's view 插座连接到nib文件中的 view 对象

    Update the app delegate

    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;
    }
    
  • 1

    Xcode 9.3.1Swift 4

    • 首先,您需要在 Project navigator 菜单中删除 Main.storyboard .

    • 比删除 Info.plist 中的行 Main storyboard file base name .

    • 并且不要忘记删除单元格 Main Interface (只需删除 MainProject Target - General - Deployment Info

    • 之后的步骤转到 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
    }
    
  • 32

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

  • 17

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

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

  • 10

    其他人已经解释了如何摆脱故事板,所以我会在这里跳过那个 . 这是我喜欢在我的代码中使用较少的可选链接(用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
    }
    

相关问题