LoginSignup
9
12

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-04-19

概要

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

UIActivityViewControllerとは

テキストや画像をSNSにシェアをする時に使う、以下のようなiPhoneの画面下から出てくる機能です
IMG_0586.PNG

環境

Swift iOS iPhone
4.2 11.4 iphone8

UIActivityViewController部分のコード
(カメラ、フォトライブラリーからの画像選択部分はここでは省略します)

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

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

詳細

まず画像を選択
この場合フォトライブラリーから選択
IMG_0591.PNG

IMG_0590.PNG
画像を選択

IMG_0587.PNG
シェアボタンを押す
IMG_0586.PNG
ここでTwitterを選択すると、

IMG_0581.PNG

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

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)になるように処理追加

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

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

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

IMG_0592.PNG

結論

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

対策として画像のリサイズが必要ですが、どこまでサイズを下げる必要があるのかは
推奨サイズの参考サイト
【推奨サイズまとめ】Facebook,Twitter,YouTube,Googl+,Instagramで使う画像サイズ
を確認すると、Twitterの場合は

Twitterに投稿する画像の最大サイズは横2048x縦2048
画像の容量は最大5MB

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

9
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
12