Storyboardを使用しないSwiftでアプリを準備する。

ios-app log objective-c swift xcode

Posted on 2015-03-10


ObjCで作っていたiOSアプリをSwiftで作り直そうとしたらXcode 6からEmpty Applicationのテンプレートがなくなっていた。 なのでSingle View ApplicationのテンプレートをベースにStoryboardを使用しないアプリを作っていく。

スクリーンショット 2015-03-04 23.54.36

「Create a new Xcode project」を選び、テンプレートを選択する画面で「iOS」→「Application」で「Single View Application」を選ぶ。

スクリーンショット 2015-03-04 23.54.49

Product Nameは任意の名前を入力し、Languageは「Swift」を選び、次の画面で保存先を選んで保存。

スクリーンショット 2015-03-04 23.55.23

Project、General画面でMain Interfaceの値から「Main」を消す。これはMain.storyboardを起動時に読み込まないようにしている。

スクリーンショット 2015-03-04 23.55.58

不要になったMain.storyboardを削除する。参照だけではなくゴミ箱へ移動させてしまう。

スクリーンショット 2015-03-04 23.56.42

以前のXcodeであったEmpty Applicationから作成したアプリのようになる。

ViewController.swiftを追加。またUINavigationControllerのrootViewControllerにViewControllerを追加した方がナビゲーションバーやステータスバー、遷移など後々やりやすくなるのでその記述もする。

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

  var window: UIWindow?
  var navigationController: UINavigationController?

  func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) ->; Bool {
    window = UIWindow(frame: UIScreen.mainScreen().bounds)
    window!.makeKeyAndVisible()
    var viewController: ViewController? = ViewController()
    navigationController = UINavigationController(rootViewController: viewController!)
    window!.rootViewController = navigationController
    return true
  }

  func applicationWillResignActive(application: UIApplication) {
  }

  func applicationDidEnterBackground(application: UIApplication) {
  }

  func applicationWillEnterForeground(application: UIApplication) {
  }

  func applicationDidBecomeActive(application: UIApplication) {
  }

  func applicationWillTerminate(application: UIApplication) {
  }
}

Objective-Cの時にはこんな記述だった。 AppDelegate.h

#import <UIKit/UIKit.h>

@class RootViewController;

@interface AppDelegate : UIResponder
<UIApplicationDelegate>

@property( strong, nonatomic )UIWindow *window;
@property( strong, nonatomic )RootViewController *viewController;

@end

AppDelegate.m

#import "AppDelegate.h"
#import "ViewController.h"

@interface AppDelegate ()
@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
  self.viewController = [[ViewController alloc] init];
  UINavigationController *naviController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
  self.window.rootViewController = naviController;
  [self.window makeKeyAndVisible];
  return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application
{
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
}

- (void)applicationWillTerminate:(UIApplication *)application
{
}

@end

shigeki.takeguchi

渋谷の某ソーシャルゲームの会社でフロントエンドエンジニアとして働いてます。20世紀よりウェブ業界。気づいたらアラフィフ業界人です。
まだまだ現場で粘り強く作る側でいたいと思います。

By year

  1. 2017 (11)
  2. 2016 (23)
  3. 2015 (13)
  4. 2013 (15)
  5. 2012 (21)
  6. 2011 (34)

© 2012 shigeki.takeguchi