РЕДАКТИРОВАТЬ 2 :
Я определил причину ошибки. Две разные аудио рамки играют на двух разных настройках громкости. Существует основная громкость (это то, что отображается, когда вы находитесь в приложении, и на нем нет заголовка) и громкость звонка (это то, что отображается, когда вы находитесь на главном экране без загрузки какого-либо приложения). AVAudioPlayer вызывает воспроизведение с основной настройкой громкости. Поскольку я установил категорию на AVAudioSessionCategorySoloAmbient (см. Код ниже), это регулятор громкости, который будет регулироваться, если вы используете регулятор громкости внутри приложения. SystemSounds, однако, воспроизводятся на громкости звонка. Это НЕ будет появляться внутри приложения, и, как таковое, не позволяет пользователю изменять свои настройки во время игры.
Легко увидеть возможную путаницу для пользователя: скажем, у него установлен низкий или даже выключенный сигнал вызова. Они начинают играть в игру. Они слышат музыку титульного экрана (AVAudioPlayer) и могут увеличивать или уменьшать громкость, и она реагирует нормально. Затем они запускают игру и воспроизводят звуковые эффекты (SystemSounds) и ничего не слышат, потому что громкость звонка низкая / выключена. Чтобы услышать звуковые эффекты, они увеличивают громкость, и фоновая музыка реагирует соответственно. Таким образом, с этой точки зрения, похоже, звуковые эффекты просто не воспроизводятся.
Если вы сталкиваетесь с подобной ситуацией, попросите своего пользователя убедиться в том, что его громкость звонка повышена, прежде чем играть в игру, и его переключатель отключения звука включен (т.е. не отключен). Вы также можете проверить все это, выполнив тест самостоятельно - уменьшите громкость звонка и увеличьте громкость в приложении. Ваши системные звуки должны выпасть из смеси.
Оригинальный ответ :
Перечитывая все документы, я нашел ответ. Я не правильно активировал аудио сеанс. Ранее у меня был только этот код для установки категории:
NSError *setCategoryError = nil;
BOOL categoryWasSet = [[AVAudioSession sharedInstance]
setCategory: AVAudioSessionCategorySoloAmbient
error: &setCategoryError];
Но мне нужно было также добавить следующий код, чтобы явно активировать аудио сеанс:
NSError *activationError = nil;
BOOL activationSuccess = [[AVAudioSession sharedInstance]
setActive: YES
error: &activationError];
Я повторно протестировал этого пользователя, и он полностью устранил проблему. Надеюсь, это поможет любому, у кого может быть похожая проблема.
РЕДАКТИРОВАТЬ: Кажется, это не решило проблему в конце концов. Я получил ложный положительный результат от моего тестера, и при более детальном рассмотрении кажется, что он фактически не слышал звуки, генерируемые SystemSound.