Kategorien
iPhone/iOS

iOS Sound wird im Simulator abgespielt, aber nicht auf dem Test Device

Wer die folgende Fehlermeldung auf seinem Device (iPhone) bekommt, obwohl alles ohne Probleme lief im Simulator, der begibt sich auf eine unendliche Reise durch das Internet.

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:isDirectory:]: nil string parameter'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x3101b64f __exceptionPreprocess + 114
    1   libobjc.A.dylib                     0x34b36c5d objc_exception_throw + 24
    2   CoreFoundation                      0x3101b491 +[NSException raise:format:arguments:] + 68
    3   CoreFoundation                      0x3101b4cb +[NSException raise:format:] + 34
    4   Foundation                          0x34869e2f -[NSURL(NSURL) initFileURLWithPath:isDirectory:] + 74
    5   Foundation                          0x3487c9cb +[NSURL(NSURL) fileURLWithPath:isDirectory:] + 34

Der Code sieht so aus:

NSURL* aFileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"beep" ofType:@"wav"] isDirectory:NO];
AudioServicesCreateSystemSoundID((CFURLRef)aFileURL, &_scanSuccessSound);

Dabei ist die Lösung relativ einfach. Es gibt ein Kontextmenü, in dem man einstellen kann, welcher Dateien auf das Device kopiert werden sollen. Dieses ist erreichbar über: rechte Maustaste auf Grups & Files oben links in Xcode und dann sollte das passende Häckchen dort gemacht werden.

iphone_nsurl fileurlwithpath_nil string

Eine andere Fehlerquelle ist, dasss die Datei nicht in das Projektverzeichnis(Destination Folder) kopiert wurde, dies kann man durch löschen und erneutes einfügen der Datei in Xcode mit dem passenden ersten Häckchen wieder bereinigen.