Swift PlaygroundsでXcode projectのコードを動かしてみよう
Swift Playgrounds
便利ですよね!
ビルドするよりも確認が早くて自分の書いたコードの動作を確認するのに非常に重宝しています。
自分が作っているアプリのコードを素早く確認して移植したいなと思い今回は
アプリ開発しているXcode Project
にSwift Playgrounds
を実行できる環境を用意した話をまとめたいと思います。
この時はCocoaPods
を使っていたのでCocoaPods
のmoduleを使えるようにするパターンも書いていきます。
(長くなったので別Qiitaで続編として投稿しようと思います。)
続編: http://qiita.com/bannzai/items/dafad16067e9c6e58ff7
New Xcode Project
まずは紹介用にXcode Project
をNew
します。
Single View Application
で ImportPlaygroundsという名前のプロジェクトを作りました。
ViewController
のコードを変えます。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "スターください → https://github.com/bannzai/"
label.sizeToFit()
view.addSubview(label)
label.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
label.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}
}
Simulatorで普通にRun
した画面表示した結果
このViewController
をPlaygrounds
上で動作させるかつ
同じXcode Project
内でPlayground
を実行できる環境を作っていきます
Swift Playgrounds
を追加して動かすところまで
流れは下記のようになります。
- .xcworkspaceを作る
- Swift Playgroundsを追加
- プロジェクトのFramework化
- Playgtoundで動かしてみる
では、順番に
1. .xcworkspaceを作る
CocoaPods
を使う場合はすでにできているものを
もしくはpod install
してできるxcworkspace
ファイルを使ってもらって構いません
CocoaPods
を使用しない人は下記のメニューから作れます
僕はCocoaPods
を使用するパターンで作っていくので合わせたい方は
pod init
してpod install
しましょう。
Xcode menu > File > Save as Workspace から作れます
そして、今後はこの.xcworkspace
を使って続けていきます。
2. Swift Playgroundsを追加
ここでcmd + n
or 右クリック > NewFile でplayground
ファイルを追加します。
右上にありますね。
playgourd
を選択したら保存場所を求められます
ここで注意して欲しいのがGroup
を1. .xcworkspaceを作るで作成したものにしてください。
無事作成したらPlayground
ファイルのアイコンが追加されていると思います
3. プロジェクトのFramework化
Playground
をプロジェクトに追加できました
しかし、この状態ではプロジェクトにあるViewController
を使用することはできません
下記のコードを書いてPlayground
で実行しましょう
Playground execution failed: error: Demo.playground:6:7: error: use of unresolved identifier 'ViewController'
というエラーが出ることが確認できると思います
import UIKit
print(ViewController.self)
これはViewController
が見つからないので表示されているエラーです
これを解決するためにここではImportPlaygrouns
プロジェクトをFramework化し、
Playground
からViewController
を呼び出せるようにします
Xcode menu > File > New Target から Cocoa Touch Framework
を選択します
Frameworkを作成します。
ここで不要なのでinclude unit tests
のチェックは外しています。
Build Targets
に先ほど作成したFrameworkが確認できます
ここまででFrameworkのターゲットの追加が完了しました。
次に目的であるViewController
をPlayground
から使えるようにします。
やることが3つあります。
まず、ViewController
が定義されているファイル、ここではViewController.swift
を開き、右ペインのTarget Membership
に先ほど追加したFrameworkのTargetにチェックを入れましょう。
次に、TargetをFrameworkを選択してビルドします。
最後にViewController
のアクセスコントロールをpublic or open
にしましょう。
Frameworkの外から参照するために必要です。
public class ViewController: UIViewController {
public override func viewDidLoad() {
super.viewDidLoad()
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "スターください → https://github.com/bannzai/"
label.sizeToFit()
view.addSubview(label)
label.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
label.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}
}
先ほどのコードからアクセスコントロールを変えただけです。
この状態でアプリとして書いていた前提であるViewController
のクラスをPlayground
から呼べるようになりました。
次は動作を確認していきましょう。
4. Playgtoundで動かしてみる
Playground
上でViewController
を参照できるか確認しましょう。
先ほどのPlayground
のコードに一行足します。
import UIKit
import ImportPlaygroundsFramework // この行を追加
print(ViewController.self) // ViewController
追加したimport文はFrameworkを使用するために必要です。
これでViewController
がprintできたことが確認できました。
そして今度はViewController
のUIをpreview機能でみてみましょう。
storyboard
を使っている場合は対象のstoryboardファイルをFrameworkのTarget Membership
に含めましょう。
ViewController.swift
ファイルの時と同様に右ペインにチェックボックスがあるので選択してください。
そして、Frameworkのビルドを行えばPlayground
から使う準備は完了です。
PlaygroundSupport
をimportして
PlaygroundPage.current.liveView
にViewController
のインスタンスを代入して、
Assistant Editor
をひらけばViewController
のUIが確認できます。
import UIKit
import ImportPlaygroundsFramework
import PlaygroundSupport
PlaygroundPage.current.liveView =
UIStoryboard(
name: "Main",
bundle: Bundle(for: ViewController.self)
)
.instantiateInitialViewController()
UIにおいても確認するときにはPlayground
はとても便利ですね!
ボタンの押下等のインタラクティブな操作もできるので簡単な動作確認もできそうです。
storyboard
よりも明確にどういう画面かわかります。
プロジェクトの新規画面の実装や既存画面の確認などにも使えて便利なのではないでしょうか
まとめ
CocoaPods
を使った場合の投稿は続編として次回投稿しようと思います。
CocoaPods
を使用した場合の記事になります: http://qiita.com/bannzai/items/dafad16067e9c6e58ff7
Swift Playgrounds
を使いiOSアプリのコードを実行する紹介をしました。
書いて確認するまでの時間も短縮でき、UIの視認性もstoryboard
よりも明確にわかる可能性を秘めていると思っています。
個人的にはこのTipsを多くの方に知ってもらってこれがいい、悪いといった意見を聞けたら一番嬉しいです。
おしまい\(^o^)/