web-dev-qa-db-ja.com

ストーリーボードなしでXcodeで空のアプリケーションを作成する方法

Xcode6は、新しいプロジェクトを作成するときにEmpty Applicationテンプレートを削除しました。以前のバージョンのように、Xcode6以降で空のアプリケーション(ストーリーボードなし)を作成するにはどうすればよいですか?

138
Akhil K C

XCode6およびそれ以前のバージョンのように、空のアプリケーションを直接作成するためのXCode5以降のバージョンにはオプションがありません。ただし、次の手順に従ってStoryboardなしでアプリケーションを作成できます。

  1. Single View Applicationを作成します。
  2. Main.storyboardLaunchScreen.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;
    }
268
Akhil K C

簡単な方法は、XCode 5Empty ApplicationテンプレートをXCodeのテンプレートディレクトリにコピーすることです。

XCode 5Empty Applicationテンプレートを here からダウンロードし、解凍して/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Applicationディレクトリにコピーできます。

PSこのアプローチはSwiftでも機能します!

編集
以下のコメントで@harrisgが示唆しているように、上記のテンプレートを~/Library/Developer/Xcode/Templates/Project Templates/iOS/Application/フォルダーに配置して、Xcodeが更新されても使用できるようにすることができます。
そのようなディレクトリが存在しない場合は、次のディレクトリ構造を作成する必要があります:Templates/Project Templates/iOS/Application/ in ~/Library/Developer/Xcode/

この簡単なアプローチを使用すると、Empty ApplicationXCode 6を作成できます。 (下のスクリーンショットを添付)

Xcode Empty Application Template お役に立てれば!

32
S1LENT WARRIOR

さらにいくつかの手順を実行する必要があります。

  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 file name]」をプロジェクト設定に追加->ビルド設定-> Apple LLVM 6.0-言語-> "プレフィックスヘッダー"

  7. プロジェクト設定に「YES」を追加->ビルド設定-> Apple LLVM 6.0-言語->「プリコンパイルプレフィックスヘッダー」
  8. 「Image.xcassets」を開き、LaunchImageを追加します
  9. プロジェクトをビルドすると、デフォルトの起動イメージが見つからないという警告が表示されます。警告を押してデフォルトの追加を選択すると、「Default-568h @ 2x」ORが追加されます。 「Images.xcassets」からスプラッシュ画像を使用し、プロジェクト設定->ターゲット->一般->「画像ソースの起動」でアセットカタログを使用することを選択し、新しいカタログを作成します。既存の資産カタログとして。
  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;
    
17
Nikita

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
}
16
Nils Hott

あなたがする必要があるもう一つのステップがあります:

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

Xcode 6より前のXcodeバージョンで使用されていた元の空のアプリケーションテンプレートがあります。これをアップロードしました here

ダウンロードしてXcodeテンプレートディレクトリに手動で貼り付けるか、Xcodeのパッケージマネージャー Alcatraz を使用してインストールできます。 Xcode Empty Applicationを検索するだけです。

6
Isuru

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.Swiftself.window?.rootViewControllerとして使用できます。上記のコードでUIViewControllerを独自のViewControllerに置き換えるだけです。

5
Vakas

Main.storyboardファイルを削除する

これは単純に削除できます。

ProjectName-Info.plistファイルを更新

Main storyboard base file nameキーを削除します。

nibファイルを作成し、プロジェクトのView Controllerにリンクします

1. nibファイルを作成します(ファイル->新規->ファイル->表示)

2. File's Owner'sクラスを、プロジェクトのView Controllerが呼び出されるものに更新します

3. File's Owner'sviewアウトレットをnibファイルのviewオブジェクトにリンクします

アプリのデリゲートを更新する

1.プロジェクトのView Controllerのヘッダーファイルをインポートする

2. application: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;
}
4
Bhargav

Xcode 9.3.1およびSwift 4

  1. まず最初に削除が必要ですMain.storyboard in Project navigator メニュー。
  2. 行の削除よりメインストーリーボードファイルのベース名 in Info.plist .
  3. セルを削除するのを忘れないでくださいMain Interface(ちょうど削除 Main)in your Project Target-一般-展開情報
  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
    }
    
3
iAleksandr

XCode6 Betaを使用していますが、XCode5.x.xの空のテンプレートをXCode6 Betaに追加して、この問題の別の解決策を探しました。

このため、アプリケーションでXCode5.x.xを右クリックし、「パッケージコンテンツを表示」をクリックして、指定されたパスから「空のApplication.xctemplate」をコピーします。

目次/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/Application

ウィンドウを終了し、XCode6の指定されたパスを開きます

Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Application /

「空のApplication.xctemplate」をApplicationフォルダー内に貼り付けます。次に、新しいプロジェクトを終了して作成し、XCode6を再起動します。 「空のアプリケーション」オプションが表示されます。

新しい空のプロジェクトを作成すると、プロジェクトに自動的に追加された.pchファイル(XCode6に手動で追加する必要があります)

うまくいくことを願って

3
Gagan_iOS

他の人は、ストーリーボードを取り除く方法をすでに説明しているので、ここではそれをスキップします。これは、オプションのチェーン(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
DevAndArtist

はい、または以前のベータ版のいずれかを使用して作成し、その後最新バージョンを継続します。

1
P1kachu

Xcode用の独自のプロジェクトテンプレートを作成できます。リクエストには、このサイトでテンプレートを使用できます。

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

1
elprup

更新: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()
    }
}
0
Eric Wiener