shigeki.takeguchi.log

アラフィフおじさんの技術日記

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

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を追加した方がナビゲーションバーやステータスバー、遷移など後々やりやすくなるのでその記述もする。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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

1
2
3
4
5
6
7
8
9
10
11
#import <UIKit/UIKit.h>

@class RootViewController;

@interface AppDelegate : UIResponder
<UIApplicationDelegate>

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

@end

AppDelegate.m

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#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世紀よりウェブ業界。気づいたらアラフィフ業界人です。
まだまだ現場で粘り強く作る側でいたいと思います。