トラブルシューティング¶
重要
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) の両方のバージョンを最新版に上げてみてください。
実行¶
アプリケーションが強制終了する¶
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 ライブラリを試してみて下さい。 Configuration
の allowsURLSessionWebSocketChannel
プロパティを false
に設定すると、標準 API の代わりにサードパーティーの WebSocket ライブラリが使われます。
例:
config.allowsURLSessionWebSocketChannel = false