トラブルシューティング

重要

iOS 14 で MediaChannelHandlers.onDisconnect() が呼ばれない現象があります。 この項目を確認して下さい。

ビルド

Carthage

重要

Carthage のサポートは 2020.1 で終了しました。今後は CocoaPods を利用してください。

Incompatible Swift version - framework was built with x.x.x and the local version is x.x.x

carthage update の実行時に次のエラーが発生する場合があります。

*** Downloading sora-ios-sdk.framework binary at "1.0.0"
*** Downloading sora-webrtc-ios.framework binary at "M57"
*** Downloading SocketRocket.framework binary at "0.4.2"
*** Checking out unbox at "2.2.1"
*** Skipped installing sora-ios-sdk.framework binary due to the error:
  "Incompatible Swift version - framework was built with 3.0.2 and the local version is 3.1."
*** Checking out sora-ios-sdk at "1.0.0"
*** xcodebuild output can be found in /var/folders/pk/nkv_60cd629g28km03t35ypm0000gn/T/carthage-xcodebuild.mkQRsi.log
*** Building scheme "Sora" in Sora.xcodeproj

このエラーは、 Sora iOS SDK のバイナリをビルドした Swift のバージョンと、使用中の Swift のバージョンが異なる場合に発生します。

次の方法を試してみてください。

  • Sora iOS SDK と Swift (Xcode) の両方のバージョンを最新版に上げる。

  • Sora iOS SDK をソースコードからビルドする。

Sora iOS SDK 以外のライブラリのビルドに失敗する

carthage update で Sora iOS SDK 以外のライブラリのビルドに失敗する場合は、 Sora iOS SDK と Swift (Xcode) の両方のバージョンを最新版に上げてみてください。

Xcode

Use of undeclared type 'xxx' または 'xxx' is unavailable: cannot find Swift declaration for this class

Sora モジュールをインポート (import Sora) しているにも関わらず、次のエラーでビルドできない場合があります。

  • Use of undeclared type 'xxx'

  • 'xxx' is unavailable: cannot find Swift declaration for this class

これらのエラーは、次のいずれかの状況で発生します。

  • Sora iOS SDK がサポートしていないアーキテクチャをビルドのターゲットに含めている

  • リンクする Sora iOS SDK のバージョンに存在しない API を使っている

これらのエラーが発生したら、次の方法を試してください。

  • Sora iOS SDK を最新版にアップデートする。

  • ビルドのターゲットにシミュレーターを指定しないか確認する。 Sora iOS SDK はシミュレーターをサポートしていません。

  • プロジェクトの "Build Settings" の "Valid Architectures" で指定しているアーキテクチャを確認する。 Sora iOS SDK がサポートするアーキテクチャは "armv7" と "arm64" のみです。

実行

アプリケーションが強制終了する

SDK を組み込んだアプリケーションが強制終了する場合、一つの原因として Info.plist ファイルにカメラとマイクの用途が記述されていない可能性があります。 Info.plist にカメラとマイクの用途を記述しているかどうか確認してください。

起動時に次のログが表示される: One of the two will be used.

アプリケーションを iOS 12 以降のデバイスで起動すると次のログが出力されます。

` /private/var/containers/Bundle/Application/C1E5D7C0-076A-41E3-831A-C4911C2ABB3D/MyApp.app/MyApp objc[28847]: Class RTCCVPixelBuffer is implemented in both /System/Library/PrivateFrameworks/WebCore.framework/Frameworks/libwebrtc.dylib (0x261598018) and /private/var/containers/Bundle/Application/C1E5D7C0-076A-41E3-831A-C4911C2ABB3D/MyApp.app/Frameworks/WebRTC.framework/WebRTC (0x104ce9af8). One of the two will be used. Which one is undefined. objc[28847]: Class RTCWrappedNativeVideoDecoder is implemented in both /System/Library/PrivateFrameworks/WebCore.framework/Frameworks/libwebrtc.dylib (0x25f453468) and /private/var/containers/Bundle/Application/C1E5D7C0-076A-41E3-831A-C4911C2ABB3D/MyApp.app/Frameworks/WebRTC.framework/WebRTC (0x104ce9b48). One of the two will be used. Which one is undefined. objc[28847]: Class RTCWrappedNativeVideoEncoder is implemented in both /System/Library/PrivateFrameworks/WebCore.framework/Frameworks/libwebrtc.dylib (0x25f4534b8) and /private/var/containers/Bundle/Application/C1E5D7C0-076A-41E3-831A-C4911C2ABB3D/MyApp.app/Frameworks/WebRTC.framework/WebRTC (0x104ce9b98). One of the two will be used. Which one is undefined. objc[28847]: Class RTCVideoDecoderVP8 is implemented in both /System/Library/PrivateFrameworks/WebCore.framework/Frameworks/libwebrtc.dylib (0x25f4531c0) and /private/var/containers/Bundle/Application/C1E5D7C0-076A-41E3-831A-C4911C2ABB3D/MyApp.app/Frameworks/WebRTC.framework/WebRTC (0x104ce9c10). One of the two will be used. Which one is undefined. `

このログは、 Sora iOS SDK が利用する WebRTC ライブラリのバイナリと組み込みのバイナリとの競合を示しています。

iOS 12 以降のデバイスでは WebRTC ライブラリが組み込まれるようになり、 アプリケーションを起動すると組み込みの WebRTC ライブラリがロードされます。 同時に Sora iOS SDK が利用する WebRTC ライブラリもロードされるので、同じライブラリが重複してしまいます。 そのため iOS はどちらか一方のライブラリのみを使用しますが、選択結果はわかりません (公式ドキュメントにも具体的な記述はありません) 。 ただし、 Sora iOS SDK の WebRTC ライブラリが使われていることは確認していますので、特に動作に問題はありません。

接続

Sora サーバーに接続できない

まずは wscat などのツールで WebSocket の接続の成否を確認してください。 wscat であれば次のコマンドで接続の成否を確認できます:

$ wscat --connect [URL]

もし接続できなければ URL を確認してください。

  • プロトコルは "ws" または "wss" のどちらかを指定していますか? Sora iOS SDK のシグナリングは WebSocket のみ対応しています。

  • ポート番号に間違いはありませんか? "wss" であれば通常は 443 です。

  • パスに signaling を指定していますか?指定されているなら、パスの末尾を確認してください。 パスの末尾が / だと接続に失敗します。

URL に問題がないのに WebSocket 接続ができない場合は、 Sora の設定やネットワーク環境を確認してください。

モバイルデータ通信の接続解除時に MediaChannelHandlers.onDisconnect() が呼ばれない (iOS 14)

iOS 14 と Sora 2020.5 の組み合わせを使っている場合、モバイルデータ通信の接続解除時に MediaChannelHandlers.onDisconnect() イベントハンドラが呼ばれない現象を確認しています。

この現象は標準の WebSocket API が影響している可能性があります。 Sora 2020.4 以降では、端末の iOS のバージョンが 13 以降の場合に標準 API を使って WebSoket 通信を行います。 iOS のバージョンが 13 以前の場合はサードパーティーの WebSocket ライブラリ (Starscream) を使うようになっています。

この現象に遭遇した場合、サードパーティーの WebSocket ライブラリを試してみて下さい。 ConfigurationallowsURLSessionWebSocketChannel プロパティを false に設定すると、標準 API の代わりにサードパーティーの WebSocket ライブラリが使われます。

例:

config.allowsURLSessionWebSocketChannel = false