วิธีสร้างแอปพลิเคชั่นที่ว่างเปล่าใน Xcode ที่ไม่มีสตอรี่บอร์ด


146

Xcode6ได้ลบEmpty Applicationแม่แบบเมื่อสร้างโครงการใหม่ เราจะสร้างแอปพลิเคชั่นที่ว่างเปล่า (ไม่มีสตอรี่บอร์ด) Xcode6ขึ้นไปเช่นในเวอร์ชันก่อนหน้าได้อย่างไร


3
codefromabove.com/2014/09/…บทแนะนำที่ดีมากสำหรับเรื่องนี้
Anurag Bhakuni

อ่านสิ่งนี้: xcodenoobies.blogspot.my/2015/10/…
GeneCode

กวดวิชาที่ทันสมัยพร้อม iOS9 และ Xcode 7: medium.com/frozen-fire-studios/ …
Ryan Poolos

คำตอบ:


270

ไม่มีตัวเลือกในXCode6และรุ่นที่สูงกว่าสำหรับการสร้างแอปพลิเคชันที่ว่างเปล่าเช่นเดียวกับในXCode5และก่อนหน้านี้โดยตรง แต่เรายังสามารถสร้างแอปพลิเคชันโดยไม่ต้องStoryboardทำตามขั้นตอนเหล่านี้:

  1. Single View Applicationสร้าง
  2. ลบMain.storyboardและLaunchScreen.xib(เลือกพวกเขาคลิกขวาและเลือกที่จะลบออกจากโครงการหรือลบออกอย่างสมบูรณ์)
  3. ลบรายการ "ชื่อไฟล์ฐานหลักกระดานเรื่องราว" และ "เปิดใช้ชื่อฐานไฟล์ส่วนต่อประสานหน้าจอ" ใน Info.plistไฟล์
  4. เปิด 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;
    }

22
ฉันชอบที่จะเก็บLaunchScreen.xibและInfo.plistรายการที่เกี่ยวข้อง หากไม่มีมันแอปจะไม่ใช้ขนาดหน้าจอทั้งหมดใน iPhone ขนาดใหญ่ซึ่งน่าเกลียด
tboyce12

2
ฉันชอบเก็บกระดานเรื่องราวไว้ด้วยตัวเอง สะดวกในการสร้างสิ่งต่าง ๆ แต่ฉันต้องทำการตั้งค่าเริ่มต้นโดยไม่ต้องอาศัยกระดานเรื่องราว
Mazyod

อาจเป็นข้อผิดพลาดใน Xcode 7 ฉันไม่สามารถลบ Main.storyboard เลยจากหน้าจอการตั้งค่าข้อมูลโครงการ ฉันใช้เทมเพลตแอปพลิเคชั่น Xcode 5 ที่กล่าวถึงโดย @Silentwarrior
GoodSp33d

3
คำตอบนี้สร้างข้อผิดพลาดรันไทม์ใน XCode7: 'NSInternalInconsistencyException' ด้วยตนเองเว้นแต่: เหตุผลที่: 'แอปพลิเคชัน windows คาดว่าจะมีตัวควบคุมมุมมองรูทเมื่อสิ้นสุดการเปิดตัวแอปพลิเคชัน'

11
โปรดเพิ่มรหัสนี้ด้วย: self.window.rootViewController = [[ViewController alloc] init]; ใน AppDelegate.m ของคุณภายใต้วิธี didFinishLaunchingWithOptions มิฉะนั้นคุณจะได้รับข้อผิดพลาดต่อไปนี้: 'หน้าต่างแอปพลิเคชันคาดว่าจะมีตัวควบคุมรูทวิวในตอนท้ายของการเปิดตัวแอปพลิเคชัน'
Rizwan Ahmed

32

วิธีการง่ายๆที่จะคัดลอกXCode 5's Empty Applicationแม่แบบXCodeของแม่แบบไดเรกทอรี

คุณสามารถดาวน์โหลดXCode 5's Empty Applicationแม่แบบจากที่นี่แล้วเปิดเครื่องรูดมันและคัดลอกไปยัง/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Applicationไดเรกทอรี

PS วิธีนี้ใช้ได้กับรวดเร็วเช่นกัน!

แก้ไข
ตามที่แนะนำโดย @harrisg ในความคิดเห็นด้านล่างคุณสามารถวางแม่แบบที่กล่าวถึงข้างต้นใน~/Library/Developer/Xcode/Templates/Project Templates/iOS/Application/โฟลเดอร์เพื่อให้สามารถใช้งานได้แม้ว่า Xcode จะได้รับการปรับปรุง
และถ้าไม่มีไดเรกทอรีปัจจุบันเช่นนั้นคุณอาจต้องสร้างโครงสร้างไดเรกทอรีนี้Templates/Project Templates/iOS/Application/ใน~/Library/Developer/Xcode/

โดยใช้วิธีการแบบนี้ผมสามารถที่จะสร้างในEmpty Application XCode 6(ภาพหน้าจอที่แนบมาด้านล่าง)

เทมเพลต Xcode Empty Application หวังว่านี่จะช่วยได้!


ขอบคุณ ในฐานะโน้ตคุณจะต้องแทนที่แม่แบบนี้หลังจากอัปเดต Xcode
elliotrock

1
หากคุณใส่ไว้ใน ~ / Library / Developer / Xcode / Templates / Project Templates / iOS / Application / มันจะไม่ถูกแทนที่ในแต่ละครั้งการอัปเดต Xcode
harrisg

@harrisg ไม่พบไดเรกทอรีนี้ในโยเซมิตี คุณยืนยันการมีอยู่ของมันได้หรือไม่? ขอบคุณ
S1LENT WARRIOR

1
วิธีนี้ใช้ได้กับ Xcode 7.1 แต่ LaunchScreen.storyboard นั้นถูกสร้างขึ้นซึ่งบางตัวอาจไม่ต้องการ ฉันลงเอยด้วยการใช้งานเนื่องจากไม่รบกวนการดูที่สร้างขึ้นด้วยตนเอง
bitsand

1
จำไว้ว่าให้คลายซิปไฟล์ลงในไดเรกทอรีคัดลอกไม่เพียงพอ
Balaban Mario

17

มีอีกไม่กี่ขั้นตอนที่คุณต้องทำ:

  1. เพื่อเพิ่มไฟล์คำนำหน้า (ถ้าคุณต้องการ)
  2. ในการเพิ่มภาพเปิดตัวเริ่มต้นมิฉะนั้นขนาดแอพจะเป็น 320x480 ใน iPhone 5

ดังนั้นนี่คือการสอนแบบเต็ม:

  1. ลบไฟล์ Main.storyboard
  2. ลบไฟล์ LaunchScreen.xib
  3. ลบคุณสมบัติ "ชื่อไฟล์ฐานกระดานเรื่องราวหลัก" ใน Info.plist
  4. ลบคุณสมบัติ "เปิดใช้งานชื่อฐานไฟล์ส่วนต่อประสานหน้าจอ" ใน Info.plist
  5. เพิ่มไฟล์ "[ชื่อแอพ] -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]" ในการตั้งค่าโครงการ -> การตั้งค่าการสร้าง -> Apple LLVM 6.0 - ภาษา -> "คำนำหน้าส่วนหัว"

  7. เพิ่ม "YES" ไปยังการตั้งค่าโครงการ -> การตั้งค่าการสร้าง -> Apple LLVM 6.0 - ภาษา -> "ส่วนหัวของคำนำหน้าพรีคอมไพล์"
  8. เปิด "Image.xcassets" และเพิ่ม LaunchImage
  9. สร้างโครงการจากนั้นจะมีคำเตือนเกี่ยวกับภาพเริ่มต้นที่หายไปเพียงกดที่คำเตือนและเลือกที่จะเพิ่มค่าเริ่มต้นนี้จะเพิ่ม "Default-568h @ 2x" หรือ - หากคุณต้องการใช้ภาพสแปลจาก "รูปภาพ" .xcassets "ไปที่การตั้งค่าโครงการ -> เป้าหมาย -> ทั่วไป -> ใน" Launch Images Source "เลือกที่จะใช้แคตตาล็อกสินทรัพย์มันจะสร้างขึ้นมาใหม่คุณสามารถเลือกซึ่งจะใช้เป็นแคตตาล็อกสินทรัพย์จากที่มีอยู่ .
  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;

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
}

12

Xcode 9.3.1และSwift 4

  1. ก่อนอื่นคุณต้องลบMain.storyboardในเมนูProject navigator
  2. แล้วแถวลบหลักชื่อไฟล์ฐานกระดานในInfo.plist
  3. และอย่าลืมมือถือลบอินเตอร์เฟซหลัก (เพียง แต่เอาหลัก ) ของคุณใน เป้าหมายของโครงการ - ทั่วไป - ข้อมูลการปรับใช้
  4. หลังจากขั้นตอนนั้นไปที่AppDelegate.swiftและในฟังก์ชั่นก็ทำการFinishLaunchingWithOptions แล้วเขียนสิ่งต่อไปนี้:

    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
    }

Xcode 11.2.1และSwift 5

  1. ก่อนอื่นคุณต้องลบMain.storyboardในเมนูProject navigator
  2. แล้วแถวลบหลักชื่อไฟล์ฐานกระดานในInfo.plist
  3. และอย่าลืมลบเซลล์ส่วนติดต่อหลัก (เพียงลบหลัก ) ในเป้าหมายโครงการของคุณ- ทั่วไป - ข้อมูลการปรับใช้ข้อมูลการปรับใช้
  4. ขั้นตอนนี้สำคัญและไม่ได้อยู่ใน Xcode และ Swift เวอร์ชันก่อนหน้า ในInfo.plistไปที่: แอปพลิเคชั่นฉากภาพ →การกำหนดค่าฉากบทบาทเซสชันแอปพลิเคชันรายการ 0และลบที่นี่Storyboard.nameแถวชื่อ
  5. หลังจากขั้นตอนที่ไปSceneDelegateและฟังก์ชั่นในฉากเขียนต่อไปนี้:

    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 windowScene = (scene as? UIWindowScene) else { return }
    
        window = UIWindow(frame: windowScene.coordinateSpace.bounds)
        window?.windowScene = windowScene
        window?.rootViewController = ViewController()
        window?.makeKeyAndVisible()
    }

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

2
มีปัญหาขอบเขต UIScreen.mainScreen (). ขอบเขตกำลังพิมพ์ออกมา: (0.0,0.0,320.0,480.0) ทำไมถึงเป็นอย่างนั้น?
Esqarrouth

9

อัปเดต: 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()
    }
}

2
คุณต้องลบ "ชื่อฐานไฟล์หลักของกระดานเรื่องราว" จาก Info.plist มิฉะนั้นคุณจะได้รับข้อผิดพลาด "ไม่พบกระดานเรื่องราวชื่อ 'หลัก'"
Ziad Hilal

6

ฉันมีแม่แบบของโปรแกรมประยุกต์เดิมที่ว่างเปล่าซึ่งถูกใช้ในรุ่น Xcode ก่อนที่จะ Xcode 6. ผมได้อัพโหลดมันนี่

คุณสามารถดาวน์โหลดและวางไว้ในไดเรกทอรีแม่แบบ Xcode ด้วยตนเองหรือติดตั้งโดยใช้ผู้จัดการแพคเกจสำหรับ Xcode, Alcatraz เพียงแค่ค้นหาXcode แอพลิเคชันที่ว่างเปล่า


5

ลบไฟล์ Main.storyboard

สิ่งนี้สามารถลบได้

อัพเดตไฟล์ ProjectName-Info.plist

ลบ Main storyboard base file nameคีย์

สร้างไฟล์ปลายปากกาและเชื่อมโยงไปยังตัวควบคุมมุมมองของโครงการ

1. สร้างไฟล์ปลายปากกา (ไฟล์ -> ใหม่ -> ไฟล์ -> ดู)

2. อัปเดต File's Owner'sคลาสเป็นสิ่งที่เรียกว่าตัวควบคุมมุมมองของโครงการ

3. เชื่อมโยงFile's Owner's viewทางออกกับ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;
}

5

สำหรับและXcode 8 Swift 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เพียงแค่แทนที่ UIViewController ด้วย ViewController ของคุณเองในรหัสข้างต้น


1
การใช้ Xcode 9.1 และ Swift 4 ถ้าฉันเพียงแค่ลบไฟล์สตอรีบอร์ดโดยไม่ลบการอ้างอิงที่เกี่ยวข้องออกจาก. plist ด้วยตนเองฉันได้รับข้อผิดพลาด "ไม่พบสตอรี่บอร์ดชื่อ 'หลัก' ในชุดข้อมูล" ดูเหมือนว่าฉันจะต้องลบการอ้างอิงด้วยตนเอง
peacetype

3

ฉันใช้ XCode6 Beta & ฉันค้นหาวิธีแก้ไขปัญหาอื่นโดยเพิ่มเทมเพลตเปล่าจาก XCode5.xx ไปยัง XCode6 Beta

สำหรับการคลิกขวาบน XCode5.xx ในแอปพลิเคชันคลิก 'แสดงเนื้อหาแพ็คเกจ' และคัดลอก 'Empty Application.xctemplate' จากเส้นทางที่กำหนด

เนื้อหา / ผู้พัฒนา / แพลตฟอร์ม / iPhoneOS.platform / ผู้พัฒนา / ห้องสมุด / Xcode / แม่แบบ / แม่แบบโครงการ / แอปพลิเคชัน

ตอนนี้ออกจากหน้าต่างและเปิดเส้นทางที่กำหนดสำหรับ XCode6

เนื้อหา / ผู้พัฒนา / แพลตฟอร์ม / iPhoneOS.platform / ผู้พัฒนา / ห้องสมุด / Xcode / แม่แบบ / แม่แบบโครงการ / iOS / แอปพลิเคชัน /

วาง 'Empty Application.xctemplate' ในโฟลเดอร์ Application ตอนนี้รีสตาร์ท XCode6 โดยการออกและสร้างโครงการใหม่ คุณจะได้รับตัวเลือก 'แอปพลิเคชันที่ว่างเปล่า'

ตอนนี้เมื่อฉันกำลังสร้างโครงการใหม่ที่ว่างเปล่าไฟล์. pch เพิ่มโดยอัตโนมัติในโครงการ (ซึ่งเราจะต้องเพิ่มด้วยตนเองใน XCode6)

หวังว่ามันจะทำงาน


1

ใช่หรือเพียงแค่ใช้หนึ่งในเบต้าก่อนหน้านี้เพื่อสร้างมันขึ้นมาและดำเนินการกับเวอร์ชันล่าสุดหลังจากนั้น



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
}

1

อัปเดตใน Xcode 11 และ ios 13 หลังจากคุณตั้งค่าทุกอย่างแล้ว แต่ยังเห็นหน้าจอสีดำนั่นเป็นเพราะ UISceneDelegate จัดการวงจรชีวิตและเมื่อคุณสร้างโครงการใหม่มันจะสร้าง UISceneDelegate.m และ UISceneDelegate.h โดยอัตโนมัติ เพื่อย้อนกลับไปสู่อดีตก่อนที่เราจะคุ้นเคยกับ UISceneDelegate ขั้นตอนต่อไปนี้อาจช่วยได้:

  1. ลบ Application Scene Manifest ด้วย Plist

  2. ลบ Application Scene Manifest.h และ Application Scene Manifest.m

  3. ลบรหัสภายใต้เครื่องหมาย #pragma - UISceneSession lifecycle ใน APPdelegate.m

  4. เพิ่ม @property (strong, nonatomic) หน้าต่าง UIWindow *; ใน APPdelegate.h

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.