es gibt ein script auf http://qtnode.net/wiki/Distributing_Mac_Qt_applications aber je nach version geht es nicht ... un schon gar nicht wenn man plugin hat wie image oder sql plugin...
- 1de- QT von der quelle builden nicht die DMG von trolltech benutzen ( die haben andere configuration)
1en- Dont use QT4 .dmg package from trolltech on target to distritibuiting apps. Build from source
2de- Wo immer moeglich kurze ordner namen bentuzen und keinen leerschlag wie window.
2en- use shortly dir name! (no space) prefix and set the envoirment $PATH && $QTDIR on ~/.profile
3de- Jede externe lib wenn moeglich immer mit XCODE builden und universal clicken im letzen reiter... ansonsten lauf die libs nur auf dem entsprechenden prozessor.
3en- Each external lib build on XCODE universal. Otherwise you can not use to build Universal PPC & INTEL
curl -O ftp://ftp.trolltech.com/qt/source/qt-ma ... eta.tar.gz
Tif support & other fix like Dirmodel all ok....
Configure beispiel UNIVERSAL PPC & INTEL:
Sample configure UNIVERSAL PPC & INTEL:
./configure -prefix /opt/qt -qt-zlib -qt-sql-sqlite -qt-gif -qt-tif -qt-libpng -qt-libjpeg -universal -sdk /Developer/SDKs/MacOSX10.4u.sdk
make
sudo make install
Wichtig wenn man static buildet wie von mir beschrieben auf http://wiki.qtcentre.org/index.php?titl ... n_Mac_OS_X muss man nichts packen man kann hoechstens noch die locale dir reinmachen. und mit rechstclick dazu stellen.
If You build -static ( my how to on http://wiki.qtcentre.org/index.php?titl ... n_Mac_OS_X )the bundle package having all libs, you can only append locale on bundle right click...
Dieses script macht dass bundle mit dem locale on plugin dir..
This script append to bundle plugin and locale dir....
In der main muss man angeben wo was ist un wo suchen:
Append on main.cpp to tell path to search plugin or locale...
On main tell setLibraryPaths() to find plugin & locale...
Code: Alles auswählen
# on main.cpp
#if defined Q_WS_MAC
#QStringList path;
#path.append(QApplication::applicationDirPath());
#QDir dir(QApplication::applicationDirPath());
#dir.cdUp();
#path.append(dir.absolutePath());
#dir.cd("plugins");
#path.append(dir.absolutePath());
#dir.cdUp();
#path.append(dir.absolutePath());
#QApplication::setLibraryPaths(path);
#QDir::setCurrent(dir.absolutePath()); /* here down -> Frameworks */
#endif
Nun wen die base bundle da ist kann man dieses script anpassen und packen..
Now if you have your base bundle tell all path on this script and run it..
Code: Alles auswählen
#!/bin/bash
#
# Configuration start
#
# relative path to the directory which contains the created app bundle
BIN_DIR="bin"
# name of the binary
BINARY_NAME="edithtml"
# Qt libraries you've linked against on apps remove not needed libs
declare -a NEEDED_LIBS=( "QtCore" "QtGui" "QtXml" "QtSql" "QtNetwork" "QtOpenGL" "QtSvg")
# additional files you'd like to get copied to the final dmg inside DMG not bundle!
declare -a ADD_FILES=("bin/ticket.pdf" "bin/copying.txt")
#
# Configuration end, nothing should be edited from here on
#
# on main.cpp
#if defined Q_WS_MAC
#QStringList path;
#path.append(QApplication::applicationDirPath());
#QDir dir(QApplication::applicationDirPath());
#dir.cdUp();
#path.append(dir.absolutePath());
#dir.cd("plugins");
#path.append(dir.absolutePath());
#dir.cdUp();
#path.append(dir.absolutePath());
#QApplication::setLibraryPaths(path);
#QDir::setCurrent(dir.absolutePath()); /* here down -> Frameworks */
#endif
bundle_dir="$BIN_DIR/$BINARY_NAME.app"
bundle_bin="$bundle_dir/Contents/MacOS/$BINARY_NAME"
framework_dir="$bundle_dir/Contents/Frameworks"
#### make plugin && locale dir after the before the 2° run oft this script copy image sql
#### plugin inside... or at end right click apps and info apps select locale to activate...
plugin_dir="$bundle_dir/Contents/plugins"
locale_dir="$bundle_dir/Contents/locale"
if [ -z $QTDIR ]; then
echo "\$QTDIR environment variable not found... exiting."
exit 1
fi
# canonicalize QtDir, unfortunately this bash has no realpath() implementation
# so we need to use perl for this
QTDIR=`perl -e "use Cwd 'realpath'; print realpath('$QTDIR');"`
if [ ! -d "$bundle_dir" ]; then
echo "Application bundle not found in bin... exiting."
exit 1
fi
echo "Creating Frameworks directory in application bundle..."
mkdir -p "$framework_dir"
mkdir -p $plugin_dir
mkdir -p $locale_dir
libcount=${#NEEDED_LIBS[@]}
for (( i = 0 ; i < libcount ; i++ ))
do
lib=${NEEDED_LIBS[$i]}
echo "Processing $lib..."
if [ ! -d "$QTDIR/lib/$lib.framework" ]; then
echo "Couldn't find $lib.framework in $QTDIR."
exit 1
fi
rm -rf "$framework_dir/$lib.framework"
cp -fR "$QTDIR/lib/$lib.framework" "$framework_dir"
echo "...$lib copied."
install_name_tool \
-id "@executable_path/../Frameworks/$lib.framework/Versions/4/$lib" \
"$framework_dir/$lib.framework/Versions/4/$lib"
# other Qt libs depend at least on QtCore
if [ "$lib" != "QtCore" ]; then
install_name_tool -change "$QTDIR/lib/QtCore.framework/Versions/4/QtCore" \
"@executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore" \
"$framework_dir/$lib.framework/Versions/Current/$lib"
fi
install_name_tool -change "$QTDIR/lib/$lib.framework/Versions/4/$lib" \
"@executable_path/../Frameworks/$lib.framework/Versions/4/$lib" \
"$bundle_bin"
echo "...$lib done."
done
echo "Removing any debug libraries and headers..."
find "$framework_dir" | egrep "debug|Headers" | xargs rm -rf
echo "Preparing image directory..."
tempdir="/tmp/`basename $0`.$$"
mkdir $tempdir
cp -R $bundle_dir $tempdir
echo "...Bundle copied"
fcount=${#ADD_FILES[@]}
for (( i = 0 ; i < fcount ; i++ )) do
file=${ADD_FILES[$i]}
if [ ! -f "$file" ]; then
echo "WARNING: $file not found!"
else
cp "$file" $tempdir
echo "...$file copied"
fi
done
echo "Creating disk image..."
rm -f "$BIN_DIR/$BINARY_NAME.dmg"
# format UDBZ: bzip2 compressed (10.4+), UDZ0: zlib compressed (default)
hdiutil create -srcfolder $tempdir -format UDBZ -volname "$BINARY_NAME" "$BIN_DIR/$BINARY_NAME.dmg"
rm -rf $tempdir
Sample main..
Code: Alles auswählen
static inline QString UserLanguage()
{
/////////////QSettings setter;
QString languser,languagesistem,langqt;
QLocale loci = QLocale::system();
languser = getenv("LANG");
languser = languser.toLower();
languagesistem = loci.name();
languagesistem = languagesistem.toLower();
languagesistem = languagesistem.left(2);
/* Window XP Prof MUI Multiuser == stay only "c" language && user setting setenv !!! */
if (languagesistem == "c") {
if (languser.size() > 2 && languser.contains("_")) {
languagesistem = languser.left(2);
}
}
////////////setter.setValue("userlanguage",languagesistem);
///////////qDebug() << "### save to qsetting " << languagesistem;
///////// qDebug() << "### QT grep language " << QLocale::languageToString( QLocale::system().language());
/////////qDebug() << "### User setenv " << getenv("LANG");
return languagesistem;
}
int main(int argc, char *argv[]) {
QApplication a( argc, argv );
QCoreApplication::setOrganizationName(_ORGANIZATION_NAME_);
QCoreApplication::setOrganizationDomain(_PROGRAM_NAME_DOMAINE_);
QCoreApplication::setApplicationName(_PROGRAM_NAME_);
#if defined Q_WS_MAC
QStringList path;
path.append(QApplication::applicationDirPath());
QDir dir(QApplication::applicationDirPath());
dir.cdUp();
path.append(dir.absolutePath());
dir.cd("plugins");
path.append(dir.absolutePath());
dir.cdUp();
path.append(dir.absolutePath());
QApplication::setLibraryPaths(path);
QDir::setCurrent(dir.absolutePath()); /* here down -> Frameworks */
#endif
QString localedirfile,openfile;
#if defined Q_WS_MAC
localedirfile = QString("%1/locale/edit_%2.qm").arg(QDir::currentPath()).arg(UserLanguage());
#endif
#if defined Q_WS_WIN
localedirfile = QString("%1/locale/edit_%2.qm").arg(QCoreApplication::applicationDirPath()).arg(UserLanguage());
#endif
#if defined Q_WS_X11
localedirfile = QString("%1/locale/edit_%2.qm").arg(WORK_CACHEDIR).arg(UserLanguage());
#endif
QTranslator translator;
translator.load(localedirfile);
a.installTranslator(&translator);
QStringList command = a.arguments();
int wat = command.size();
Edit_html w;
QMainWindow mainWin;
mainWin.setWindowTitle(_PROGRAM_TITLE_);
QMenu *menu = mainWin.menuBar()->addMenu(QObject::tr("&File"));
menu->addAction(QObject::tr("Open File"), &w, SLOT(OpenNewDoc()));
menu->addSeparator();
menu->addAction(QObject::tr("&Quit"), &a, SLOT(quit()));
mainWin.setCentralWidget(&w);
w.set_Cache(IMM_BUILD);
if (wat > 1 ) {
w.SetFileBase(command.at(2));
}
mainWin.show();
a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
return a.exec();
}