LoginSignup
6
4

More than 5 years have passed since last update.

Framework ProjectをPlaygroundで動作確認する方法

Last updated at Posted at 2018-05-23

前説

OSS内にPlaygroundが含まれている場合、そのPlaygroundを弄って動作を確認することは容易です。しかし、Playgroundは、含まれていないけどPlayground上で動作を軽く確認したい!

軽く確認するためにTest Project作ってPodsやCarthageでOSS引っ張ってくるのはしんどいということ…ありませんか?

もしくは、オリジナルの神Frameworkを作ったから、Playground上で動作確認したい…そういうことありませんか?

そういった軽く動きをPlayground上で確認する方法をご紹介します。

材料

  • Playgroundで動作確認したいFramework Project (例 Alamofireや神Framework等)
  • Xcode (Xcode 8系以降ならほぼ同じ手順で可能なはずです。)

今回は、下記環境を使って説明していきます。

  • Almofire 4.7.2
  • Xcode 9.3

1. Workspaceを作る

既にFramework Projectの方で*.xcworkspace(画像赤い点線) が用意されている場合、それが使えるので次のステップへ。

スクリーンショット 2018-05-23 23.05.32.png

WorkspaceがないProjectは、Workspaceを作ります

  1. Workspaceを作りたいFramework Projectを開く
  2. MenuからFile>Save As Workspace...を選択 スクリーンショット 2018-05-23 23.11.03.png
  3. Workspaceを保存する スクリーンショット 2018-05-23 23.12.08.png

2. Playgroundを作り、Workspaceに追加する

Playgroundを作り、Workspaceに追加してProject上で参照できるようにします。

  1. *.xcworkspaceをXcodeで開く
  2. MenuからFile>New>Playground...を選択 スクリーンショット 2018-05-23 23.13.58.png
  3. Playgroundを保存する スクリーンショット 2018-05-23 23.14.27.png
  4. 開いているWorkspaceに対してMenuからFile>Add Files to "Project Name"...を選択 スクリーンショット 2018-05-23 23.14.49.png
  5. 「2.」「3.」で作成したPlaygroundを選択 スクリーンショット 2018-05-23 23.15.14.png

3. Framework Projectをbuildと動作確認

今回Playground上で実行させるコードは下記で、簡単に説明すると英語のwikipediaからJSONで情報を取ってくる内容になっています。

実行コード
import Alamofire

print("=== start ===")
// url
var url = "https://en.wikipedia.org/w/api.php"

// parameters
var parameters: Parameters = [
    "action" : "query",
    "format" : "json",
    "titles" : "oryzae"
]

Alamofire.request(url, method: .get, parameters: parameters)
    .responseJSON { response in
        print(response)
}

print("=== end ===")

しかし、この時点ではまだ下記のようにerrorが出て、Framework Projectで実装されたコードをPlayground上で実行できません。

スクリーンショット 2018-05-24 0.39.14.png

Playground上でimportできるようにFrameworkを作成

  1. 任意のSimulatorを選択してbuild
    Generic iOS Deviceの場合、build errorになるので必ずSimulatorを選ぶこと
  2. buildによりFrameworkが作成され、Playgroundでimport&実行が可能に

スクリーンショット 2018-05-24 0.15.04.png

EX. Playgroundで非同期処理も実行

Playgroundでerrorが表示されていないので、Alamofireも実行されている!やったね✌️…と、よくみるとAlamofireのresponse内のprintがログに表示されていない。

実はPlaygroundは、上から順に同期処理を行い、最後の行に到達したら処理を終了するため、非同期処理は実行されない。

非同期処理も行わせるためには、下記の// 追加と書いた部分をPlaygroundに追加する必要がある。

実行コード
import Alamofire
import PlaygroundSupport // 追加

// 非同期処理を実行させる
PlaygroundPage.current.needsIndefiniteExecution = true // 追加

print("=== start ===")
// url
var url = "https://en.wikipedia.org/w/api.php"

// parameters
var parameters: Parameters = [
    "action" : "query",
    "format" : "json",
    "titles" : "oryzae"
]

Alamofire.request(url, method: .get, parameters: parameters)
    .responseJSON { response in
        print(response)
}

print("=== end ===")

PlaygroundPage.current.needsIndefiniteExecutionは、名前の通り非同期処理の実行が必要かどうかを持つPropertyである。default値はfalseなので意図的にtrueにしてやる必要がある。

これで、非同期処理含めFrameworkの処理をPlaygroundで実行出来たーやったね👍

スクリーンショット 2018-05-24 0.16.33.png

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4