[Swift] UIActivityViewControllerを使用してSNSアプリに画像をシェア投稿すると投稿画面が落ちる

#概要
iPhoneカメラで撮影した画像をSNSアプリへ投稿するため
UIActivityViewControllerを使用しましたが
実機で動作させると 画像選択、投稿するSNSアプリ選択後のSNS投稿画面で落ちて投稿ができない現象がありました。
(SNSアプリはすでにiPhoneにインストール済みとして想定しています)


#####UIActivityViewControllerとは
テキストや画像をSNSにシェアをする時に使う、以下のようなiPhoneの画面下から出てくる機能です
<img width="375" alt="IMG_0586.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348912/281ceb1a-7899-a1aa-e9a4-81a210cc0755.png">

#環境
| Swift | iOS | iPhone |
|:-----------|------------:|:------------:|
| 4.2     |      11.4 |    iphone8    |

<b>UIActivityViewController部分のコード</b>
（カメラ、フォトライブラリーからの画像選択部分はここでは省略します）

```swift:swift
if let shareImage = pictureImage.image {
  //UIActivityViewControllerに渡す配列
  let shareItems = [shareImage]

  //UIActivityViewControllerにシェア画像を渡す
  let controller = UIActivityViewController(activityItems: shareItems, applicationActivities: nil)
}

```

#詳細
まず画像を選択
この場合フォトライブラリーから選択
<img width="375" alt="IMG_0591.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348912/d1721ae1-176d-2ec6-5295-fb5faa5d566c.png">
↓
<img width="375" alt="IMG_0590.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348912/42196645-12f1-3fab-ae23-668b5a97ed41.png">
画像を選択

<img width="375" alt="IMG_0587.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348912/7cd9c0d7-3704-4846-705d-91cd790db117.png">
シェアボタンを押す
<img width="375" alt="IMG_0586.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348912/281ceb1a-7899-a1aa-e9a4-81a210cc0755.png">
ここでTwitterを選択すると、

<img width="375" alt="IMG_0581.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348912/6b541e77-17a2-32ff-dbf9-e2945b21994f.png">

この投稿画面が数秒表示されサムネも表示されず
投稿画面が落ちてしまい
前画面に戻ってしまいます

LINE、Facebookでも同じ画像で投稿しましたが、同じく投稿画面で落ちてしまいます。


<b>落ちた後のデバッグエリアログ<b>

このログだけでははっきりとした原因がわかりませんでした。

```
[Common] _BSMachError: port b21f; (os/kern) invalid capability (0x14) "Unable to insert COPY_SEND"
 [core] SLRemoteComposeViewController: (this may be harmless) viewServiceDidTerminateWithError: Error Domain=_UIViewServiceInterfaceErrorDomain Code=3 "(null)" UserInfo={Message=Service Connection Interrupted}
```

#原因
デバッグエリアのログだけでははっきり分からず、投稿画面でのサムネイルが読み込まれない動作から
画像のアップロードが失敗してる？っぽいので
とりあえず原因は、<b>iPhone８カメラで撮った画像(3024×4032)のサイズが大きすぎる事</b>を疑い
画像のサイズを落としてみました。
サイズを落とす処理は以下コードを参考にしました。

<b>参考：画像を指定のファイルサイズ以下に落とすコード
<b>
>[[Swift] iPhoneの写真をAPIにPOSTする際の、上下反転問題とファイルサイズ制限への対策]https://qiita.com/y-some/items/3d02d15be36bf44e538f

試しに、投稿する画像サイズが5割（1549x2065）になるように処理追加

```swift:swift
  let resizeImage2 = resizeImage?.fixedOrientation()?.resizeImage()
```


<b>結果、正常に投稿画面が表示されツイートボタンを押すと
投稿も確認できました。<b>

LINE、Facebookでも同じ画像でリサイズの処理をすると投稿ができました。


<img width="375" alt="IMG_0592.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348912/6272edbe-2c3c-2a11-b53d-3899b19cc598.png">


#結論
今回使用したiphoneはiphone8ですが、このカメラで撮影された画像をそのままリサイズ無しで使用するとサイズが3024×4032となり、
UIActivityViewController経由でTwitterなどのアプリへ投稿すると、
画像サイズが大き過ぎてアップロードするタイミングでSNS側で落ちてしまうようです。

対策として画像のリサイズが必要ですが、どこまでサイズを下げる必要があるのかは
推奨サイズの参考サイト
[【推奨サイズまとめ】Facebook,Twitter,YouTube,Googl+,Instagramで使う画像サイズ](https://homepage-reborn.com/2015/09/15/%E3%80%90%E6%8E%A8%E5%A5%A8%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%BE%E3%81%A8%E3%82%81%E3%80%91facebooktwitteryoutubegooglinstagram%E3%81%AE%E5%90%84%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%9B/#Instagram-2)
を確認すると、Twitterの場合は
>Twitterに投稿する画像の最大サイズは横2048x縦2048
>画像の容量は最大5MB

とあるので各SNSで指定されたサイズまで落とす事で画像の投稿が可能になりそうです。