Apple specifies in the UILocalNotification
class reference that the audio file must be from the application bundle. However, some smart geek has found his way around this limitation by using:
// this works by going up the bundle dir, then pointing to the Documents dir
localNotif.soundName = @"../Documents/blabla.caf";
This workaround has worked well with iOS 5, however, it broke in iOS 6. In a desperate attempt to try and come up with a new workaround, I made an alias (Symbolic Link) called blabla.caf
that points to ../Documents/blabla.caf
, and placed it into the application bundle. This is were I got stuck.
Now, I am getting a PBXCp error
, and Xcode can't complete application deployment to the device because apparently
error: /Users/stuff/moreStuff/appName/../Documents/blabla.caf: No such file or directory
My Question:
- Can I somehow add a dummy file (0 KB) to the
Documents
directory just to shut Xcode up?
- Can I somehow force Xcode to just override this error and get on with
life deploying the app?
If you place a symlink to ../../Documents/blabla.caf
inside a folder, and then add the folder to the project (making sure that you have "Create folder references..." set on import instead of "Create groups...") then Xcode won't try to resolve the link during the build process.
I've verified that the link itself works fine in the app, though I'm not sure off the top of my head if UILocalNotification will accept folder/blabla.caf
in its soundName property.
Despite symlink from bundle to documents directory works in iOS 7.1, this workaround becomes unusefull if you are going to put an app in the AppStore. Since March 2014 apps with such symbolic links will not pass to the review.
After I have uploaded app with such link in the bundle to iTunes connect I receive an Invalid binary
status immediately. With following mail from iTunes Store:
Dear developer,
We have discovered one or more issues with your recent delivery for
"X". To process your delivery, the following issues must be corrected:
Invalid Symlink - Your package contains a symbolic link
'External/Documents' which resolves to a location
'External/../../Documents' that does not exist or is outside of the
package.
...
Regards,
The App Store team