First of all let me tell you that I just basically modified one script I found on Internet (and use another one as is) and adapted it to my needs, so you just have to edit some lines in It and that's it!
What It is important to notice is that if you want to distribute your application out of the AppStore you will need a Developer ID Application certificate (not the Mac Developer -this is just for testing).
OK, let's begin...
1) Copy, paste and save to a file the following code, or download it from https://gist.github.com/kainjow/8059407 (macdeployqt_fix_frameworks.rb). There is not need to modify it.
#!/usr/bin/env ruby
# Copies missing Info.plist files for a .app's Qt frameworks installed
# from macdeployqt. Without the plists, 'codesign' fails on 10.9 with
# "bundle format unrecognized, invalid, or unsuitable".
#
# Example usage:
# ruby macdeployqt_fix_frameworks.rb /Users/me/Qt5.2.0/5.2.0/clang_64/ MyProgram.app
#
# Links:
# https://bugreports.qt-project.org/browse/QTBUG-23268
# http://stackoverflow.com/questions/19637131/sign-a-framework-for-osx-10-9
# http://qt-project.org/forums/viewthread/35312
require 'fileutils'
qtdir = ARGV.shift
dotapp = ARGV.shift
abort "Missing args." if !qtdir || !dotapp
abort "\"#{qtdir}\" invalid" if !File.exists?(qtdir) || !File.directory?(qtdir)
abort "\"#{dotapp}\" invalid" if !File.exists?(dotapp) || !File.directory?(dotapp)
frameworksDir = File.join(dotapp, 'Contents', 'Frameworks')
Dir.foreach(frameworksDir) do |framework|
next if !framework.match(/^Qt.*.framework$/)
fullPath = File.join(frameworksDir, framework)
destPlist = File.join(fullPath, 'Resources', 'Info.plist')
next if File.exists?(destPlist)
srcPlist = File.join(qtdir, 'lib', framework, 'Contents', 'Info.plist')
abort "Source plist not found: \"#{srcPlist}\"" if !File.exists?(srcPlist)
FileUtils.cp(srcPlist, destPlist)
end
2) Create a file named macdeployqt.sh (this will call macdeployqt_fix_frameworks.rb and macdeployqt ) and copy, paste and edit the following code (posted by Sarah Jane Smith on https://bugreports.qt-project.org/browse/QTBUG-23268). Modify It according to your needs (take a look at the PATHS).
# Create a temporary copy of the app for deploy & signing
# This must not be previously signed/sandboxed
# Include the .app suffix
APP_NAME=$1
QT5_CLANG=/Users/hectorsuarez/Aplicaciones/Qt5.2.0/5.2.0/clang_64
QT5_BIN=$QT5_CLANG/bin
#EXT_SIGN_CERT="Mac Developer: Hector Suarez Barenca"
EXT_SIGN_CERT="Developer ID Application: Barenca Networks"
# This will create a temporary directory
BUILD_TMP=~/tmp
if [ -d $BUID_TMP ]
then
echo
echo "###"
echo "### Cleaning directory... $BUILD_TMP/$APP_NAME ###"
echo "###"
echo
### Borrar versión previa
rm -rf $BUILD_TMP/$APP_NAME
else
mkdir -p $BUILD_TMP
fi
echo "### Copy $APP_NAME to $BUILD_TMP"
echo
### Copy the .app to a temporary location
cp -R $APP_NAME $BUILD_TMP
TMP_APP=$BUILD_TMP/$APP_NAME
QT_FMWK_VERSION="5"
QT_FMWKS="QtCore QtGui QtPrintSupport QtWidgets QtMultimedia QtMultimediaWidgets QtNetwork QtSql QtScript QtWebKitWidgets QtOpenGL QtPositioning QtQml QtQuick QtSensors QtWebKit"
echo "### Deploying Qt ${QT_FMWK_VERSION}..."
echo
$QT5_BIN/macdeployqt $TMP_APP $VERBOSE_MACDEPLOY_QT
echo "Patching Qt frameworks..."
## Set the right PATH
~/Aplicaciones/macdeployqt_fix_frameworks.rb $QT5_CLANG $TMP_APP
for FMWK in $QT_FMWKS; do
FMWK_PATH="${TMP_APP}/Contents/Frameworks/${FMWK}.framework"
mv -v "${FMWK_PATH}/Resources" "${FMWK_PATH}/Versions/${QT_FMWK_VERSION}/."
(cd "${FMWK_PATH}" && ln -s "Versions/${QT_FMWK_VERSION}/Resources" "Resources")
(cd "${FMWK_PATH}/Versions" && ln -s "${QT_FMWK_VERSION}" "Current")
perl -pi -e "s/${FMWK}_debug/${FMWK}/" "${FMWK_PATH}/Resources/Info.plist"
done
echo "Codesigning..."
for FMWK in $QT_FMWKS; do
FMWK_PATH="${TMP_APP}/Contents/Frameworks/${FMWK}.framework"
/usr/bin/codesign --verbose \
--sign "$EXT_SIGN_CERT" \
"${FMWK_PATH}/Versions/5"
done
for PLGN in $(find $TMP_APP -name "*.dylib"); do
/usr/bin/codesign --verbose \
--sign "$EXT_SIGN_CERT" \
${PLGN}
done
echo
echo "### Trying to sign $APP_NAME"
echo
/usr/bin/codesign --verify --verbose \
--sign "$EXT_SIGN_CERT" \
$TMP_APP
echo ""
echo "### Confirming \"Registered Developer\" codesiging of app"
codesign --verify --verbose=4 $TMP_APP
echo ""
echo "### Confirming codesigning app, frameworks & plugins for GateKeeper"
spctl --verbose=4 --assess --type execute $TMP_APP
3) Execute macdeployqt.sh and enjoy It!
I hope this works for you. Best regards.
PS. I tested these scripts with Qt 5.2.0
Thanks to those that take time to help others
References:
https://gist.github.com/kainjow/8059407
https://bugreports.qt-project.org/browse/QTBUG-23268
https://developer.apple.com/library/mac/documentation/IDEs/Conceptual/AppDistributionGuide/DistributingApplicationsOutside/DistributingApplicationsOutside.html
http://stackoverflow.com/questions/19637131/sign-a-framework-for-osx-10-9
http://stackoverflow.com/questions/7697508/how-do-you-codesign-framework-bundles-for-the-mac-app-store
http://www.copyquery.com/productsigned-mac-app-not-installing-in-computers-that-are-not-mine/