MusicSequenceFileLoadはiOS10(AudioToolbox / MusicPlayer)で-1を返します

デレク・リー

2016年10月9日更新: 2016年9月22日にAppleでレーダー#28425770を次の欠陥のために開いたところ、(レーダー#28327056の)重複としてマークされたため、これは既知のバグのようですiOS10内。


AudioToolbox / MusicPlayer APIメソッド「MusicSequenceFileLoad()」を呼び出してMIDIファイルのコンテンツ(指定されたURLから)をiOS10 iPad Pro(wifiモデル)の音楽シーケンスにロードするときにエラーが発生しました。これをデバッグする際のコミュニティからの支援。

私がこれまでに行うことができた調査/観察:

  • このコードは、iOS7、8、および9の本番環境で2年以上問題なく動作しており、iOS 10シミュレーターでも問題なく実行されますが、iOS 10.0.1 iPad ProWifiモデルでのみエラーが返されます。

  • 他のデバイスでは再現できず、友達にも試してもらいました。問題なくテストされたデバイス:iPhone 6以降、iPad Mini 4th Gen、iPad ProCellular。

  • このMIDIファイルを使用するVCが初めて表示されるとき、すべての処理は問題なく実行されます。アプリがクラッシュした場所にVCが読み込まれるのは、2回目(場合によっては3回目)だけです。問題は、100%の確率で一貫して再現できます。

  • この関数を呼び出してOSStatus結果コードをチェックすると、値-1が返されるだけで、失敗の理由は示されません。

  • Xcode内でデバッグする場合、クラッシュレポート、例外情報、またはコールスタックは利用できません。

  • メモリ管理の問題(割り当て、リーク、ゾンビ)のプロファイリングでは、クラッシュに関連する情報は示されていません。ゾンビオブジェクトオプションをオンにしても、ゾンビオブジェクトは表示されませんでした。

  • アプリケーションを分析しても、メモリが解放されていない領域は見つかりませんでした。

  • オブジェクトを静的に変更しても影響はなかったため、これはメモリに関連していないようです。

私がこの問題をデバッグできる他の方法について誰かが何か提案があれば、それは大いにありがたいです。当初はメモリ管理に関連しているのではないかと思っていましたが、メモリを適切に処理しており(アプリケーションにARCを使用し、必要に応じてC-APIオブジェクトを解放している)、プロファイリングで確認できる問題は見つかりませんでした。

コードサンプル:

@property (readwrite, nonatomic) MusicPlayer midiMusicPlayer;
@property (readwrite, atomic) MusicSequence masterMidiMusicSequence;

- (void)initializeMusicPlayerAndMasterSequenceWithFile:(NSString *)midiFilename
{
    CheckError(NewMusicPlayer(&_midiMusicPlayer), "NewMusicPlayer: _midiMusicPlayer");
    CheckError(NewMusicSequence(&_masterMidiMusicSequence), "NewMusicSequence: _masterMidiMusicSequence");

    NSString *midiFilePath = [NSBundle pathForResource:midiFilename
                                                ofType:@"mid"
                               checkDocumentsDirectory:YES];
    NSURL *midiFileURL = [NSURL fileURLWithPath:midiFilePath];

    // Crash is encountered on the following line:
    CheckError(MusicSequenceFileLoad(self.masterMidiMusicSequence, (__bridge CFURLRef)midiFileURL, 0, 0), "MusicSequenceFileLoad");
}
デレク・リー

コアオーディオメーリングリストを介してAppleエンジニアからいくつかのガイダンスを受け取り、iOS10でこの問題の提案された回避策を正常に実装しました。

呼び出しが失敗した後に「errno」値を0に更新することにより、「MusicSequenceFileLoad」への後続の呼び出しは成功した応答を生成します。したがって、コードを次のように修正しました。

OSStatus statusOfInitialAttempt = CheckError(MusicSequenceFileLoad(self.masterMidiMusicSequence, (__bridge CFURLRef)midiFileURL, 0, 0), "MusicSequenceFileLoad");
if (statusOfInitialAttempt == -1) {
    errno = 0;

    OSStatus statusOfSecondAttempt = CheckErrorAndReturnOnFailure(MusicSequenceFileLoad(self.masterMidiMusicSequence, (__bridge CFURLRef)midiFileURL, 0, 0), "MusicSequenceFileLoad");

    if (statusOfSecondAttempt == -1) {
        // Handle error case
    }
}

...ここで、CheckError()関数はOSStatusの戻り値を既知のOSStatusコードと照合するだけで、GitHubのこれに似ています(元々はChrisAdamsonがブログ投稿/プレゼンテーション「 CoreAudioCranks ItUp 」から作成したものです)。

この問題は、Core Audioメーリングリストに投稿された内容に従って、将来のiOSアップデートで解決される予定であることを理解しています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

deferredLocationUpdatesAvailableはiOS10でNOを返します

分類Dev

NSDateFormatterはIOS10でnilを返します

分類Dev

deferredLocationUpdatesAvailableはiOS10でNOを返します

分類Dev

CTRunGetImageBoundsは、iOS10以下で誤ったx座標を返します

分類Dev

MPMediaPickerControllerは、iOS10で空の画面を表示します

分類Dev

sqlcipherはiOS10で動作を停止しました

分類Dev

UIcollectionView cellForItemAtIndexPathは、iOS10でのみNullを返します。iOS9およびiOS8で正常に動作します

分類Dev

UIApplicationOpenSettingsURLStringはiOS10では機能しません

分類Dev

AVcaptureMetadataOutputはios10では機能しません

分類Dev

PhoneGapGeolocationはiOS10でブロックされています

分類Dev

AVAudioConverterはiOS10で壊れています

分類Dev

xcode9でIOS10を使用する方法は?

分類Dev

UITextField textColorは、iOS11ではなくiOS10で更新されます

分類Dev

iOS10:captureStillImageAsynchronouslyFromConnectionに相当するAVCapturePhotoOutputとは何ですか?

分類Dev

FacebookSDKはSwift3 iOS10でサインインします

分類Dev

devicereadyはiOS10で30秒後にのみ起動します

分類Dev

WKUserScript は iOS10 では呼び出しませんが、iOS9 では動作します

分類Dev

glGetAttribLocationは私の属性の1つで-1を返します

分類Dev

UITableView indexPathForCell:Xcode8(Swift2.3)を使用するiOS10でnilを返します

分類Dev

iOS10でNSUrlSessionを再開する

分類Dev

iOS10でNSUrlSessionを再開する

分類Dev

iOS10でUIDatePickerTextColorを変更する

分類Dev

Firebase Notificationsは、iOS10で間違ったデリゲートをトリガーします

分類Dev

UICollectionView cellForItemAt indexPathは、iOS10で行インデックスをスキップしています

分類Dev

setStatusBarOrientationは非推奨になりました。iOS10でデバイスの向きを変更する方法

分類Dev

cornerRadiusはiOS10で長いロード時間を引き起こします

分類Dev

iOS10 SwiftでUISearchBarの背景色をクリアする方法は?

分類Dev

CollectionViewCellサブレイヤーはiOS10では更新されません

分類Dev

MySql COUNT(*)は0ではなく1を返します

Related 関連記事

  1. 1

    deferredLocationUpdatesAvailableはiOS10でNOを返します

  2. 2

    NSDateFormatterはIOS10でnilを返します

  3. 3

    deferredLocationUpdatesAvailableはiOS10でNOを返します

  4. 4

    CTRunGetImageBoundsは、iOS10以下で誤ったx座標を返します

  5. 5

    MPMediaPickerControllerは、iOS10で空の画面を表示します

  6. 6

    sqlcipherはiOS10で動作を停止しました

  7. 7

    UIcollectionView cellForItemAtIndexPathは、iOS10でのみNullを返します。iOS9およびiOS8で正常に動作します

  8. 8

    UIApplicationOpenSettingsURLStringはiOS10では機能しません

  9. 9

    AVcaptureMetadataOutputはios10では機能しません

  10. 10

    PhoneGapGeolocationはiOS10でブロックされています

  11. 11

    AVAudioConverterはiOS10で壊れています

  12. 12

    xcode9でIOS10を使用する方法は?

  13. 13

    UITextField textColorは、iOS11ではなくiOS10で更新されます

  14. 14

    iOS10:captureStillImageAsynchronouslyFromConnectionに相当するAVCapturePhotoOutputとは何ですか?

  15. 15

    FacebookSDKはSwift3 iOS10でサインインします

  16. 16

    devicereadyはiOS10で30秒後にのみ起動します

  17. 17

    WKUserScript は iOS10 では呼び出しませんが、iOS9 では動作します

  18. 18

    glGetAttribLocationは私の属性の1つで-1を返します

  19. 19

    UITableView indexPathForCell:Xcode8(Swift2.3)を使用するiOS10でnilを返します

  20. 20

    iOS10でNSUrlSessionを再開する

  21. 21

    iOS10でNSUrlSessionを再開する

  22. 22

    iOS10でUIDatePickerTextColorを変更する

  23. 23

    Firebase Notificationsは、iOS10で間違ったデリゲートをトリガーします

  24. 24

    UICollectionView cellForItemAt indexPathは、iOS10で行インデックスをスキップしています

  25. 25

    setStatusBarOrientationは非推奨になりました。iOS10でデバイスの向きを変更する方法

  26. 26

    cornerRadiusはiOS10で長いロード時間を引き起こします

  27. 27

    iOS10 SwiftでUISearchBarの背景色をクリアする方法は?

  28. 28

    CollectionViewCellサブレイヤーはiOS10では更新されません

  29. 29

    MySql COUNT(*)は0ではなく1を返します

ホットタグ

アーカイブ