「http://」のAPIを実行できるようにする(Swift Playgrounds)

## はじめに

[この記事](https://qiita.com/uhooi/items/25a60846f7ec033eb9f5) でAPIコール処理を実装したのですが、以下のエラーが発生してしまいました。

```
Error: Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." UserInfo={NSLocalizedDescription=The resource could not be loaded because the App Transport Security policy requires the use of a secure connection., NSErrorFailingURLStringKey=http://zipcloud.ibsnet.co.jp/api/search?zipcode=2790031, NSErrorFailingURLKey=http://zipcloud.ibsnet.co.jp/api/search?zipcode=2790031, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX>.<1>"
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX>.<1>, NSUnderlyingError=XxXXXXXXXXXXXX {Error Domain=kCFErrorDomainCFNetwork Code=-1022 "(null)"}}
```

[この記事](https://qiita.com/uhooi/items/68939999c2c31e5f5557) と同様の原因なので、Swift PlaygroundsでHTTP通信を許可する設定を紹介します。

## 環境

- OS：macOS Ventura 13.4.1
- Swift：5.8

## 解決策

解決策を紹介します。

### HTTP通信を許可するドメインを指定する

HTTP通信を許可するドメインを指定します。

左ペインから「App設定」をクリックします。
![スクリーンショット_2023-08-13_22_01_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/f3448b6c-f153-a0f0-071a-61ff9bf81b45.png)

「機能」をクリックします。
![スクリーンショット_2023-08-13_22_02_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/c58c3854-3afe-e4bf-e187-3211d1faaf43.png)

右上の「+」ボタンをクリックします。
![スクリーンショット_2023-08-13_22_02_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/614dbc21-c916-8a1b-5e86-054871f9a2ee.png)

「App Transport Security」をクリックします。
![スクリーンショット_2023-08-13_22_02_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/5ce352f4-06b6-2d69-ecad-ee70f5ffc692.png)

「例外ドメインを追加」ボタンをクリックします。
![スクリーンショット_2023-08-13_22_02_47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/3838a77c-1199-a604-18fe-4726926fbe29.png)

HTTP通信を許可するドメインを入力し、右上の「追加」ボタンをクリックします。
![スクリーンショット_2023-08-13_22_03_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/f8f0bd82-c45c-f119-d2eb-52731396c878.png)

機能に「App Transport Security」が追加されていたらOKです。
![スクリーンショット_2023-08-13_22_03_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/19d0e281-6eda-bb6e-d2c7-55678379e7fd.png)

### ネットワーク接続を許可する

ATSの設定をしただけでは以下のエラーが発生し、HTTP通信できるようになりません。

```
Error: Error Domain=NSURLErrorDomain Code=-1003 "指定されたホスト名のサーバが見つかりませんでした。" UserInfo={_kCFStreamErrorCodeKey=-72000, NSUnderlyingError=XxXXXXXXXXXXXX {Error Domain=kCFErrorDomainCFNetwork Code=-1003 "(null)" UserInfo={_NSURLErrorNWPathKey=satisfied (Path is satisfied), interface: en0[802.11], ipv4, ipv6, dns, _kCFStreamErrorCodeKey=-72000, _kCFStreamErrorDomainKey=10}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX>.<1>"
), NSLocalizedDescription=指定されたホスト名のサーバが見つかりませんでした。, NSErrorFailingURLStringKey=http://zipcloud.ibsnet.co.jp/api/search?zipcode=2790031, NSErrorFailingURLKey=http://zipcloud.ibsnet.co.jp/api/search?zipcode=2790031, _kCFStreamErrorDomainKey=10}
```

macOSでネットワーク接続を許可する必要があります。

右上の「+」ボタンをクリックします。
![スクリーンショット_2023-08-13_22_03_26_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/d22fbe83-e127-dee8-df18-14b3eb3aab8b.png)

「ネットワーク接続（macOS）」をクリックします。
![スクリーンショット_2023-08-13_22_28_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/06582e78-50b2-895d-127b-eb3bd04aae79.png)

「ネットワーク送信接続（クライアント）」を選択し、「追加」ボタンをクリックします。
![スクリーンショット_2023-08-13_22_28_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/4914ec2a-7e4e-bda6-358d-24b9378c510a.png)

機能に「ネットワーク接続（macOS）」が追加されていたらOKです。
![スクリーンショット_2023-08-13_22_28_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/237ab8ff-80fc-2d43-8463-675086b74127.png)

## おわりに

これでSwift PlaygroundsでもHTTP通信ができるようになりました :relaxed: