トラブルシューティング¶
ビルド¶
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 を組み込んだアプリケーションが強制終了する場合、1 つの原因として 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 にてモバイルデータ通信の接続解除時に MediaChannelHandlers.onDisconnect()
イベントハンドラが呼ばれない現象を確認しています。
最新版の iOS での発生は確認されていません。
この現象は標準の WebSocket API が影響している可能性があります。 Sora iOS SDK 2020.4 以降では、端末の iOS のバージョンが 13 以降の場合に標準 API を使って WebSoket 通信を行います。 iOS のバージョンが 13 以前の場合はサードパーティーの WebSocket ライブラリ (Starscream) を使うようになっています。
この現象に遭遇した場合、サードパーティーの WebSocket ライブラリを試してみてください。 Configuration
の allowsURLSessionWebSocketChannel
プロパティを false
に設定すると、標準 API の代わりにサードパーティーの WebSocket ライブラリが使われます。
例:
config.allowsURLSessionWebSocketChannel = false
配信¶
iOS から H.264/FHD で配信した映像が他の端末で受信できない¶
iOS 端末から FHD で配信したい場合は H.264 のプロファイルレベル ID を設定してください。設定は以下の方法で行うことができます。
Configuration.videoH264Params
を設定するSora の設定を変更する
Sora の設定については Sora ドキュメント sora.conf リファレンス をご確認ください。 プロファイルレベル ID を変更しない場合は H.264 の HD 以下で配信するか、他のコーデックを使用して FHD 配信をしてください。