Swift Playgrounds のアプリを Git で管理する

# 初めに

まず最初に **Xcode の Playground とは違います** のでmm
今回は **Swift Playgrounds** でアプリを開発する場合のお話です。



## Swift Playgrounds とは

2016年に登場した iPad 上で Swift を学習できるアプリです。

https://www.apple.com/jp/swift/playgrounds/


当初はテンプレートの教材を Swift で学習するだけでした。

現在はバージョンが`4.1`までリリースされており、iPad のみならず Mac 上でも動作し、**実際にリリースできるアプリが作成できる**までになりました。

## どんなことができるの？

iOSDC Japan 2022 で LT をしました！
資料をあげたので、見ていただけると少しは理解が深まるかと思いますmm

https://speakerdeck.com/hcrane/iosdc2022-ipadosdc-japan-2022

# Git での管理方法

少しクセがあるので、今回は記事として残しました。

## iCloud と併用しない場合

- Mac のみでしか開発しない
- 個人でしか開発しない

そういった方には特に特別なことは必要ありません。
好きなように自分のディレクトリで管理してください。笑

## iCloud と併用する場合

今回はこちらの説明が主になります。

Swift Playgrounds は `iCloud` で管理する前提のツールです。`iCloud` が使えることで、家では Mac で開発しつつ出先では iPad で開発できるなどのメリットがあります。

`iCloud` で共有できるため、通常は `Git` 管理を必要としないのですが、他者とプロジェクトを共有したいことはあるでしょう。その場合は、`iCloud` のために Apple アカウントを教えるわけにはいかないので、`Git` で管理することになります。

### Git ファイルの設置

#### 手順１

ローカルで `Git` 管理、または `GitHub` を使ってリモートで管理する場合、いずれも `Git` ファイルが必要なので、あらかじめ用意してください。

#### 手順２

以下は開く方法の例です。
Swift Playgrounds からプロジェクトのあるディレクトリを開きます。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175242/97147887-c203-088e-335a-8c3ae35d0b70.png)

そのままルートに設置しましょう。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175242/2790d246-58ec-a8fe-dbb3-2cb7a78c8e35.png)

あとは、Terminal でプロジェクトに移動して、`Git` の操作を実行してください。


### GitHub を使う場合の注意点

`GitHib` での管理方法には、いくつかの問題発生するので、それを記載しておきます。

#### - プロジェクトの Clone の仕方

実際のプロジェクトを例にしたいと思います。

https://github.com/crane-hiromu/PadOSDC_Japan_App

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175242/48ca8c00-acca-afdb-470a-2ea5ffe6cd6f.png)

`Git` を Swift Playgrounds のアプリ内部に設置したため、ディレクトリはこのような形になるでしょう。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175242/ea1aa96a-2456-0c26-9f97-fb33bd18fbf1.png)

これを他者に使ってもらう場合、clone の段階で１つのファイル（Swift Playgrounds のファイル）にする必要があります。なので、以下のように `.swiftpm` 拡張子をつけて clone をする必要があります。

example

```.bash
$ git clone https://github.com/crane-hiromu/PadOSDC_Japan_App PadOSDC.swiftpm
```

こうすることで、すぐに動作するアプリを clone することができます。
プロジェクトの Readme などに書いておくと良いでしょう。


#### - Package.resolved の扱い

`Package.resolved` は `Git` で管理しましょう。

Swift Playgrounds 4.1 のバグとして、`Package.resolved` がないと、Mac でプロジェクトを開く場合に**クラッシュする**からです。

もし、`Package.resolved` を管理したくない場合は、以下をすることで解決できます。

- iPad でアプリを起動する
- Xcode でアプリを起動する

いずれかを１度でも行うことで、内部的に `Package.resolved` が作られるため、以降は Mac の Swift Playgrounds でも開けるようになります。

#### - Terminal の挙動

Terminal からプロジェクトに入り、 `Git` の操作をするでしょう。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175242/45adc1fa-17a4-895e-4684-d3b81beca952.png)

その際、コマンドが一体効かなくなることがあります。
その場合は、一度ディレクトリを戻り、再度入り直すことで操作がし直せるようになります。


## iPad のみで完結させる場合

以下のようなツールを使うことで `Git` の操作が可能になります。

#### - a-shell

iPhone や iPad 上でコマンドやプログラムを実行できるターミナルアプリ

https://holzschu.github.io/a-Shell_iOS/

#### - Working Copy

iOS 用の強力な Git クライアントアプリ

https://workingcopyapp.com/

# 終わりに

Xcode の進化を見ると、いずれは Swift Playgrounds も `Git` に対応してほしいなとは思いつつ...
現状は `iCloud` もあるため、しばらくはないかなと思っています。


## リポジトリ


以下に導入したアプリがあるので、参考程度に見ていただけますと🙏

https://github.com/crane-hiromu/PadOSDC_Japan_App


## その他

関連記事はこちら

https://qiita.com/hcrane/items/4b287e9b9cddd0106572

https://qiita.com/hcrane/items/10d5d579ea7f9bc935e9

https://qiita.com/hcrane/items/7740c0718b6516b2393c