Using a continuous integration solution to efficiently develop iOS applications, I stumble upon the following issue when trying to upload an .ipa file using Apple’s Application Loader (Version 3.0)
ERROR ITMS-90071: “This bundle is invalid. The CodeResources file must be a symbolic link to _CodeSignature/CodeResources. Make certain that the bundle is on a locally-mounted volume [not a remote SMB volume], and be certain to use the Mac OS X Finder to compress it.”
The error might be caused by the way your CI solution creates your resulting archive or just due to running the build process from a command line instead of old-fashioned XCode with GUI.
To fix this issue you need to manually change the structure of your application file.
# extract your application archive file (ends with .ipa)
unzip Foobar.ipa -d tmp/
# change to the application folder (ends with .app)
cd tmp/Payload/Foobar.app
# overwrite or create the mentioned symbolic link
ln -fs _CodeSignature/CodeResources CodeResources
# change to the tmp/ folder
cd ../..
# recreate the application archive file (.ipa)
zip -yr9 Foobar.ipa Payload/
You should then be able to successfully upload your iOS application with Apple’s gorgeous Application Loader.
You can also use the copy’n’pastable example below (resulting file is called Fixed.ipa).
unzip *.ipa -d tmp/
cd tmp/Payload/*.app
ln -fs _CodeSignature/CodeResources CodeResources
cd ../..
zip -yr9 Fixed.ipa Payload/
cd ..
mv tmp/Fixed.ipa .
rm -r tmp
ls -lah