#概要
iPhoneカメラで撮影した画像をSNSアプリへ投稿するため
UIActivityViewControllerを使用しましたが
実機で動作させると 画像選択、投稿するSNSアプリ選択後のSNS投稿画面で落ちて投稿ができない現象がありました。
(SNSアプリはすでにiPhoneにインストール済みとして想定しています)
#####UIActivityViewControllerとは
テキストや画像をSNSにシェアをする時に使う、以下のようなiPhoneの画面下から出てくる機能です
#環境
Swift | iOS | iPhone |
---|---|---|
4.2 | 11.4 | iphone8 |
UIActivityViewController部分のコード
(カメラ、フォトライブラリーからの画像選択部分はここでは省略します)
if let shareImage = pictureImage.image {
//UIActivityViewControllerに渡す配列
let shareItems = [shareImage]
//UIActivityViewControllerにシェア画像を渡す
let controller = UIActivityViewController(activityItems: shareItems, applicationActivities: nil)
}
#詳細
まず画像を選択
この場合フォトライブラリーから選択
↓
画像を選択
この投稿画面が数秒表示されサムネも表示されず
投稿画面が落ちてしまい
前画面に戻ってしまいます
LINE、Facebookでも同じ画像で投稿しましたが、同じく投稿画面で落ちてしまいます。
落ちた後のデバッグエリアログ
このログだけでははっきりとした原因がわかりませんでした。
[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}
#原因
デバッグエリアのログだけでははっきり分からず、投稿画面でのサムネイルが読み込まれない動作から
画像のアップロードが失敗してる?っぽいので
とりあえず原因は、iPhone8カメラで撮った画像(3024×4032)のサイズが大きすぎる事を疑い
画像のサイズを落としてみました。
サイズを落とす処理は以下コードを参考にしました。
参考:画像を指定のファイルサイズ以下に落とすコード
[[Swift] iPhoneの写真をAPIにPOSTする際の、上下反転問題とファイルサイズ制限への対策]https://qiita.com/y-some/items/3d02d15be36bf44e538f
試しに、投稿する画像サイズが5割(1549x2065)になるように処理追加
let resizeImage2 = resizeImage?.fixedOrientation()?.resizeImage()
結果、正常に投稿画面が表示されツイートボタンを押すと
投稿も確認できました。
LINE、Facebookでも同じ画像でリサイズの処理をすると投稿ができました。
#結論
今回使用したiphoneはiphone8ですが、このカメラで撮影された画像をそのままリサイズ無しで使用するとサイズが3024×4032となり、
UIActivityViewController経由でTwitterなどのアプリへ投稿すると、
画像サイズが大き過ぎてアップロードするタイミングでSNS側で落ちてしまうようです。
対策として画像のリサイズが必要ですが、どこまでサイズを下げる必要があるのかは
推奨サイズの参考サイト
【推奨サイズまとめ】Facebook,Twitter,YouTube,Googl+,Instagramで使う画像サイズ
を確認すると、Twitterの場合は
Twitterに投稿する画像の最大サイズは横2048x縦2048
画像の容量は最大5MB
とあるので各SNSで指定されたサイズまで落とす事で画像の投稿が可能になりそうです。