स्टोरीबोर्ड के बिना Xcode में एक खाली एप्लिकेशन कैसे बनाएं


146

Xcode6Empty Applicationनया प्रोजेक्ट बनाते समय टेम्पलेट को हटा दिया गया है । हम Xcode6पूर्व संस्करणों की तरह कैसे और ऊपर (बिना स्टोरीबोर्ड के) एक खाली एप्लिकेशन बना सकते हैं ?


3
codefromabove.com/2014/09/… , इसके लिए एक बहुत अच्छा ट्यूटोरियल
अनुराग भाकुनी

इसे पढ़ें: xcodenoobies.blogspot.my/2015/10/…
GeneCode

: IOS9 और Xcode 7 के साथ तारीख ट्यूटोरियल के लिए ऊपर medium.com/frozen-fire-studios/...
रयान Poolos

जवाबों:


270

XCode6सीधे XCode5और पहले के रूप में एक खाली एप्लिकेशन बनाने के लिए और इसके बाद के संस्करण में कोई विकल्प नहीं है । लेकिन फिर भी हम Storyboardइन चरणों का पालन किए बिना एक एप्लिकेशन बना सकते हैं :

  1. एक बनाएँ Single View Application
  2. निकालें Main.storyboardऔर LaunchScreen.xibउन्हें चुनें (राइट-क्लिक करें, और उन्हें प्रोजेक्ट से हटाने के लिए चुनें, या उन्हें पूरी तरह से हटा दें)।
  3. फ़ाइल में "मुख्य स्टोरीबोर्ड फ़ाइल आधार नाम" और "स्क्रीन इंटरफ़ेस फ़ाइल आधार नाम लॉन्च करें" प्रविष्टियां निकालें Info.plist
  4. AppDelegate.m खोलें, और ApplicationDidFinishLaunchingWithOptions को संपादित करें ताकि यह इस तरह दिखाई दे:

स्विफ्ट 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
    }

स्विफ्ट 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
    }

उद्देश्य सी:

    - (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प्रविष्टि को पसंद है। इसके बिना, ऐप पूरे स्क्रीन आकार को बड़े iPhones पर नहीं लेगा, जो कि बदसूरत है।
tboyce12

2
मैं खुद स्टोरीबोर्ड रखना पसंद करता हूं। यह विभिन्न सामान बनाने के लिए सुविधाजनक है, लेकिन मुझे स्टोरीबोर्ड पर भरोसा किए बिना प्रारंभिक सेटअप करने की आवश्यकता है।
माजिद

शायद Xcode 7 में एक बग मैं प्रोजेक्ट जानकारी सेटिंग्स स्क्रीन से Main.storyboard को हटाने में सक्षम नहीं था। मैंने @Silentwarrior द्वारा बताए गए Xcode 5 खाली एप्लिकेशन टेम्पलेट का उपयोग किया।
GoodSp33d

3
जब तक आप मैन्युअल रूप से एक रूट ViewController स्थापित नहीं करते हैं, तब तक यह उत्तर XCode7 में एक रनटाइम त्रुटि उत्पन्न करता है: 'NSInternalInconsistencyException', कारण: 'एप्लिकेशन विंडो को एप्लिकेशन लॉन्च के अंत में रूट व्यू कंट्रोलर होने की उम्मीद है'

11
कृपया इस कोड को भी जोड़ें: self.window.rootViewController = [[ViewController आवंटन] init]; अपने AppDelegate.m में didFinishLaunchingWithOptions विधि के तहत। या फिर आपको निम्नलिखित त्रुटि मिलेगी: 'एप्लीकेशन लॉन्च के अंत में एप्लिकेशन विंडो के रूट व्यू कंट्रोलर होने की उम्मीद है'
रिजवान अहमद

32

एक साधारण दृष्टिकोण कॉपी करने के लिए किया जाएगा XCode 5के Empty Applicationटेम्पलेट के लिए XCodeकी टेम्पलेट्स निर्देशिका।

आप डाउनलोड कर सकते हैं XCode 5's Empty Applicationसे टेम्पलेट यहां यह unzip, तो और पर प्रतिलिपि /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Applicationनिर्देशिका।

पुनश्च यह दृष्टिकोण तेजी के साथ काम करता है!


नीचे दिए गए टिप्पणी में @harrisg द्वारा सुझाए अनुसार संपादित करें , आप उपर्युक्त टेम्पलेट को ~/Library/Developer/Xcode/Templates/Project Templates/iOS/Application/फ़ोल्डर में रख सकते हैं ताकि यह उपलब्ध हो सके भले ही Xcode अपडेट हो जाए।
और अगर ऐसी कोई निर्देशिका मौजूद है, तो आप इस निर्देशिका संरचना बनाने के लिए हो सकता है: Templates/Project Templates/iOS/Application/में~/Library/Developer/Xcode/

इस सरल दृष्टिकोण का उपयोग कर मैं एक बनाने में सक्षम हूँ Empty Applicationमें XCode 6। (नीचे स्क्रीनशॉट संलग्न है)

Xcode खाली एप्लीकेशन टेम्प्लेट उम्मीद है की यह मदद करेगा!


धन्यवाद। नोट के रूप में आपको Xcode अपडेट के बाद इस टेम्पलेट को बदलना होगा।
elliotrock

1
यदि आप इसे ~ / लाइब्रेरी / डेवलपर / Xcode / टेम्प्लेट / प्रोजेक्ट टेम्प्लेट / iOS / एप्लिकेशन / में
डालते हैं,

@harrisg इस निर्देशिका को Yosemite में नहीं मिला। क्या आप इसकी उपस्थिति की पुष्टि कर सकते हैं? धन्यवाद
S1LENT योद्धा

1
यह दृष्टिकोण Xcode 7.1 के साथ काम करता है, हालाँकि LaunchScreen.storyboard ऐसा बनाया गया है जो कुछ नहीं चाहते हैं। मैंने इसका उपयोग करना समाप्त कर दिया क्योंकि यह मेरे मैन्युअल रूप से बनाए गए विचारों के साथ हस्तक्षेप नहीं करता है।
बिट्सैंड

1
फ़ाइल को निर्देशिका में अनज़िप करने के लिए याद रखें, कॉपी करना पर्याप्त नहीं है।
बलबन मारियो

17

कुछ और कदम हैं जो आपको करने की आवश्यकता है:

  1. एक उपसर्ग फ़ाइल जोड़ने के लिए। (यदि तुम्हें इसकी आवश्यकता है)
  2. एक डिफ़ॉल्ट लॉन्च छवि जोड़ने के लिए, अन्यथा iPhone 5 पर ऐप का आकार 320x480 होगा।

तो यहाँ एक पूर्ण ट्यूटोरियल है:

  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 - भाषा -> "Precompile Prev Header"
  8. "Image.xcassets" खोलें और LaunchImage जोड़ें
  9. प्रोजेक्ट का निर्माण करें, फिर गुम डिफ़ॉल्ट लॉन्च छवि के बारे में एक चेतावनी होगी, बस चेतावनी को दबाएं और डिफ़ॉल्ट को जोड़ने के लिए चयन करें, इससे "डिफ़ॉल्ट -568 ह @ 2x" या जुड़ जाएगा - यदि आप "छवियों से छप छवियों का उपयोग करना चाहते हैं" .xcassets ", प्रोजेक्ट सेटिंग पर जाएं -> TARGETS -> जनरल ->" लॉन्च इमेज सोर्स "में एसेट कैटलॉग का उपयोग करने का चयन करें, यह एक नया निर्माण करेगा, आप तब चुन सकते हैं, जिसे मौजूदा से एसेट कैटलॉग के रूप में उपयोग करना है। ।
  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

अखिल उत्तर पूरी तरह से सही है। स्विफ्ट का उपयोग करने वाले लोगों के लिए, यह इस तरह होगा:

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 और स्विफ्ट 4

  1. सबसे पहले आपको Project नेविगेटर मेनू में 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
    }

Xcode 11.2.1 और स्विफ्ट 5

  1. सबसे पहले आपको Project नेविगेटर मेनू में Main.storyboard को हटाने की आवश्यकता है ।
  2. फिर Info.plist में पंक्ति मुख्य स्टोरीबोर्ड फ़ाइल आधार नाम हटाएं ।
  3. और अपने प्रोजेक्ट लक्ष्य - सामान्य - परिनियोजन जानकारी में सेल मुख्य इंटरफ़ेस (केवल मुख्य हटाएं ) को हटाना न भूलें ।
  4. यह कदम महत्वपूर्ण है और यह Xcode और Swift के पिछले संस्करणों में नहीं था। में Info.plist पर जाएँ: आवेदन दृश्य प्रकटदृश्य विन्यासआवेदन सत्र भूमिकाआइटम 0 और यहां हटा Storyboard.name पंक्ति।
  5. इसके बाद स्टेप्स सीनडेलेगेट पर जाएं और फंक्शन सीन में अगला लिखें:

    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) मुख्य स्टोरीबोर्ड फ़ाइल का आधार नाम प्लिस्ट फ़ाइल में निकालें

//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)। ऐसा क्यों है?
एसकर्राउथ

9

अपडेट: स्विफ्ट 5 और आईओएस 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 से "मुख्य स्टोरीबोर्ड फ़ाइल आधार नाम" को भी हटाना होगा, अन्यथा आपको त्रुटि मिलेगी "" मेन 'नामक स्टोरीबोर्ड नहीं मिल सका
ज़ियाद हिलाल

6

मेरे पास मूल खाली एप्लिकेशन टेम्प्लेट है जो Xcode 6 से पहले Xcode संस्करणों में उपयोग किया गया था । मैंने इसे यहां अपलोड किया है

आप इसे डाउनलोड कर सकते हैं और इसे Xcode टेम्प्लेट डायरेक्टरी में मैन्युअल रूप से पेस्ट कर सकते हैं या Xcode, Alcatraz के लिए पैकेज मैनेजर का उपयोग करके इसे इंस्टॉल कर सकते हैं । बस Xcode खाली आवेदन के लिए खोज ।


5

Main.storyboard फ़ाइल निकालें

यह बस हटाया जा सकता है।

ProjectName-Info.plist फ़ाइल को अपडेट करें

हटाए Main storyboard base file nameकुंजी ।

एक नीब फ़ाइल बनाएँ और प्रोजेक्ट के दृश्य नियंत्रक से लिंक करें

1. एक निब फ़ाइल बनाएँ (फ़ाइल -> नया -> फ़ाइल -> देखें)

2.Update करें File's Owner's परियोजना के दृश्य नियंत्रक को जो भी कहा जाता है, उसे वर्ग में शामिल करें

3. करने के लिए File's Owner's viewआउटलेट पी लोview निब फ़ाइल में ऑब्जेक्ट

एप्लिकेशन प्रतिनिधि को अपडेट करें

1.Import है परियोजना नियंत्रक देखें हेडर फ़ाइल

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()

आप अपना स्वयं का कस्टम व्यूकंट्रोलर लिख सकते हैं और उसमें AppDelegate.swiftअपने रूप में उपयोग कर सकते हैं self.window?.rootViewController, बस ऊपर दिए गए कोड में अपने स्वयं के ViewController के साथ UIViewController बदलें।


1
Xcode 9.1 & Swift 4 का उपयोग करना अगर मैं बस स्टोरीबोर्ड फ़ाइल को मैन्युअल रूप से संबंधित संदर्भ को हटाए बिना हटा देता हूं। तो मुझे एक त्रुटि मिलती है "बंडल में 'मेन' ​​नामक स्टोरीबोर्ड नहीं मिल सका। लगता है कि मुझे संदर्भ को मैन्युअल रूप से निकालना होगा।
मोरपंखी

3

मैं XCode6 बीटा का उपयोग कर रहा हूं और मैंने XCode5.xx से XCode6 बीटा में खाली टेम्पलेट जोड़कर इस समस्या का एक और समाधान खोजा।

इसके लिए XCode5.xx पर राइट क्लिक करें एप्लिकेशन में 'पैकेज सामग्री दिखाएं' पर क्लिक करें और दिए गए पथ पर 'खाली Application.xctemplate' कॉपी करें।

सामग्री / डेवलपर / प्लेटफार्म / iPhoneOS.platform / डेवलपर / पुस्तकालय / Xcode / टेम्पलेट्स / परियोजना टेम्पलेट्स / आवेदन

अब विंडो को छोड़ दें और XCode6 के लिए खुले दिए गए रास्ते को छोड़ दें

सामग्री / डेवलपर / प्लेटफार्म / iPhoneOS.platform / डेवलपर / पुस्तकालय / Xcode / टेम्पलेट्स / परियोजना टेम्पलेट / iOS / आवेदन /

एप्लिकेशन फ़ोल्डर के अंदर 'खाली Application.xctemplate' पेस्ट करें। अब XCode6 को फिर से शुरू करके और नई परियोजना बनाएं। आपको will खाली आवेदन ’का विकल्प मिलेगा।

अब जब मैं नया Empty Project बना रहा हूँ, तो एक .pch फ़ाइल अपने आप प्रोजेक्ट में जुड़ जाती है (जिसे हमें XCode6 में मैन्युअल रूप से जोड़ना होगा)

आशा है कि यह काम करेगा


1

हां, या इसे बनाने के लिए पिछले बीटा में से किसी एक का उपयोग करें, और बाद के नवीनतम संस्करण पर जारी रखें।


1

आप Xcode के लिए अपना खुद का प्रोजेक्ट टेम्पलेट बना सकते हैं। आपके अनुरोध के लिए, आप इस साइट पर टेम्पलेट का उपयोग कर सकते हैं:

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


1

दूसरों ने पहले ही समझाया है कि स्टोरीबोर्ड से कैसे छुटकारा पाया जाए, इसलिए मैं उस एक को यहां छोड़ दूंगा। यह वह है जिसे मैं अपने कोड में कम वैकल्पिक चैनिंग के साथ करना पसंद करता हूं (स्विफ्ट 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 द्वारा नियंत्रित किया जाता है और जब आप एक नया प्रोजेक्ट बनाते हैं, तो यह UISceneDeleg.m और UISceneDelegate.h को ऑटो-जनरेट करेगा। पुराने दिनों में वापस जाने से पहले हमें UISceneDelegate की आदत डालें। निम्नलिखित कदम मदद कर सकते हैं:

  1. प्लिस्ट में एप्लिकेशन सीन मेनिफेस्ट को हटाएं।

  2. अनुप्रयोग दृश्य मैनिफेस्ट को हटा दें। और अनुप्रयोग दृश्य मेनिफेस्ट

  3. #pragma मार्क के तहत कोड हटाएं - APPdelegate.m में UISceneSession lifecycle

  4. @property (मजबूत, गैर-परमाणु) UIWindow * विंडो जोड़ें; APPdelegate.h में

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.