iPadのSwift Playgroundsで位置情報検索アプリを作る

iPadのSwift Playgroundsを使うと、ちゃんと動作するiOSアプリが開発できます。Swiftパッケージの追加にも対応しているので、ニフクラ mobile backendのSDKをインストール・利用できます。

今回はSwift SDKを使って位置情報検索アプリを作ってみます。MapKitを利用したアプリになります。

## 実際の手順

細かな手順は以下の記事を参考にしてください。

- [NCMBのSwift SDKを使って地図検索アプリを作る（その1：画面の仕様とSDKの初期化） - Qiita](https://qiita.com/goofmint/items/102ccc9d4242d18903b8)
- [NCMBのSwift SDKを使って地図検索アプリを作る（その2：位置情報をインポートする） - Qiita](https://qiita.com/goofmint/items/f114dbc1264e0face3e3)
- [NCMBのSwift SDKを使って地図検索アプリを作る（その3：位置情報検索を実装する） - Qiita](https://qiita.com/goofmint/items/b7d4bfec50a51de603d4)

## リポジトリ

iPadで一からコードを書いていくのは意外と大変です。外付けキーボードはほぼ必須ですし、長いコードを書いていくのは時間がかかります。ということで、この記事では以下のリポジトリにあるコンテンツを使っていきます。

[NCMBMania/swift\_map\_app](https://github.com/NCMBMania/swift_map_app)

Swift PlaygroundsではGitリポジトリから取り込むと言った機能はないので、GitHubリポジトリでファイルを閲覧してraw（ソースコード）を全体選択してコピー、Swift Playgroundsでファイルを新規作成して貼り付けると言った作業を繰り返します。

![03D73FF4-A1A8-416B-81CC-2C36C496AF17_1_101_o.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/b88cd98a-6e59-4637-f1ce-1d28455cd981.jpeg)


## リソースファイルの取り扱い

今回は駅の位置情報について `yamanote.json` というファイルを利用しています。このリソースファイルをSwift Playgroundsで新規作成する方法が見つかりませんでした。

そこでmacOS側でiCloud Drive上に保存して、Swift Playrgoundsでファイル選択する方法をとりました。Windowsでは試したことがないのですが、[Windows 用 iCloud](https://support.apple.com/ja-jp/HT204283)を使えば同じことができそうです。

![71ABD34A-31A4-4599-9FD0-631A353E15FB_1_102_o.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/784fa566-b6c2-d3fe-fd6a-20fd665ac597.jpeg)


または[iCloud Drive for Web](https://www.icloud.com/iclouddrive/)を使ってファイルアップロードする方法もあります。いずれにしてもiPadだけでJSONファイルをFileアプリに保存する方法が見つからなかったので、PCを経由する必要がありそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/1d8c159b-2b39-d962-b80a-afdafc99fb83.png)


## MapKitについて

Swift Playgroundsでは `import MapKit` と書けばすぐに使えます。XcodeのようにCapabilitiesで追加する必要はなさそうです。なお、今回は現在位置は使っていないので問題ありませんが、そうした情報を使う場合のセキュリティ設定はどうするかは不明です。

## NCMB Swift SDKの追加

Swift PlaygroundsでSwiftパッケージを選択します。

![3078816E-25A1-441E-B954-6C4400478DE3_1_102_o.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/05c48942-ffcf-81b2-b131-99b1fdeb5ea7.jpeg)


URLに `https://github.com/NIFCLOUD-mbaas/ncmb_swift` と記述します。これでNCMB Swift SDKが読み込まれますので、追加ボタンをタップします。

![C1AD93E6-3D74-4934-9B5F-06D3E5ACC078_1_102_o.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/7daed3ec-65f6-48a7-283e-29b6d4809594.jpeg)


## キーの書き換え

`ContentView.swift` に記載されているアプリケーションキー、クライアントキーをニフクラ mobile backendの管理画面で取得できるキーに書き換えてください。

```swift
struct ContentView: View {
    // Viewの初期化時に呼ばれるメソッド
    init() {
        // NCMBの初期化
        NCMB.initialize(applicationKey: "YOUR_APPLICATION_KEY", clientKey: "YOUR_CLIENT_KEY")
    }
```

これで準備完了です。

## プレビュー

以上の手順をすべて終えると、プレビューでアプリの動作を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/9e96b6a2-a82c-323d-9696-9dd3b01247e9.png)


駅情報のインポートも、地図をタップした際の動作も問題ありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/6847dc54-ef2c-b410-d7a0-05ffccdc39b3.png)


## まとめ

Swift Playgroundsを使えばWindowsを利用している方であってもiOSアプリを開発できます。MapKitも問題なく利用できるので、地図を使ったアプリ開発に使えそうです。

NCMBも利用できますので、ぜひアプリ開発に活かしてください。

[mBaaSでサーバー開発不要！ | ニフクラ mobile backend](https://mbaas.nifcloud.com/)