<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.owlclient.com/index.php?action=history&amp;feed=atom&amp;title=How-To_Qt5.x_Max_AppStore</id>
		<title>How-To Qt5.x Max AppStore - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.owlclient.com/index.php?action=history&amp;feed=atom&amp;title=How-To_Qt5.x_Max_AppStore"/>
		<link rel="alternate" type="text/html" href="http://wiki.owlclient.com/index.php?title=How-To_Qt5.x_Max_AppStore&amp;action=history"/>
		<updated>2026-04-27T04:44:47Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.27.0</generator>

	<entry>
		<id>http://wiki.owlclient.com/index.php?title=How-To_Qt5.x_Max_AppStore&amp;diff=462&amp;oldid=prev</id>
		<title>Admin: /* Upload */</title>
		<link rel="alternate" type="text/html" href="http://wiki.owlclient.com/index.php?title=How-To_Qt5.x_Max_AppStore&amp;diff=462&amp;oldid=prev"/>
				<updated>2015-12-06T15:27:17Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Upload&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 15:27, 6 December 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l320&quot; &gt;Line 320:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 320:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Upload===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Upload===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Before you can upload your package you need to create a new version for you App with http://itunesconnect.apple.com. After that you can use the ''Application Loader'' to upload your package &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;{{TT|&lt;/del&gt;*.pkg&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;}}&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Before you can upload your package you need to create a new version for you App with http://itunesconnect.apple.com. After that you can use the ''Application Loader'' to upload your package *.pkg &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;file&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Good luck! :-)&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://wiki.owlclient.com/index.php?title=How-To_Qt5.x_Max_AppStore&amp;diff=461&amp;oldid=prev</id>
		<title>Admin: /* Feedback */</title>
		<link rel="alternate" type="text/html" href="http://wiki.owlclient.com/index.php?title=How-To_Qt5.x_Max_AppStore&amp;diff=461&amp;oldid=prev"/>
				<updated>2015-12-06T15:26:44Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Feedback&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 15:26, 6 December 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l323&quot; &gt;Line 323:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 323:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Good luck! :-)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Good luck! :-)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;==Feedback==&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;I hope this How-To was helpful! Feedback is welcome. If you have suggestions, problems, etc. feel free to write a message to mailto:info@phisys.com.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://wiki.owlclient.com/index.php?title=How-To_Qt5.x_Max_AppStore&amp;diff=460&amp;oldid=prev</id>
		<title>Admin: Created page with &quot;==Overview== This is a How-To for getting your Qt based application successfully into the Mac AppStore.  If you want to include QtWebKit or QtWebKitWidgets in your AppStore ap...&quot;</title>
		<link rel="alternate" type="text/html" href="http://wiki.owlclient.com/index.php?title=How-To_Qt5.x_Max_AppStore&amp;diff=460&amp;oldid=prev"/>
				<updated>2015-12-06T15:26:18Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;==Overview== This is a How-To for getting your Qt based application successfully into the Mac AppStore.  If you want to include QtWebKit or QtWebKitWidgets in your AppStore ap...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Overview==&lt;br /&gt;
This is a How-To for getting your Qt based application successfully into the Mac AppStore.&lt;br /&gt;
&lt;br /&gt;
If you want to include QtWebKit or QtWebKitWidgets in your AppStore application you will face several problems - if not skip the ICU section and continue with [[#Qt 5.3|Qt 5.3]].&lt;br /&gt;
===Problems===&lt;br /&gt;
If you use Qt ''as it is'' (without any modification) and use ''Application Loader'' to upload it to the AppStore  you will probably get Apple's response:&lt;br /&gt;
&lt;br /&gt;
'''Use of non-public APIs not permitted. Following non-public APIs are included:'''&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
'usr/lib/libSystem.B.dylib'&lt;br /&gt;
+++ : bootstrap_look_up2&lt;br /&gt;
+++ : bootstrap_register2&lt;br /&gt;
'usr/lib/libicucore.A.dylib'&lt;br /&gt;
+++ : ubrk_getRuleStatus&lt;br /&gt;
+++ : ubrk_setUText&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
What does it mean? One or more Qt libraries uses APIs which are not declared public by Apple. In this case the QtWebKit implementation is making trouble (actually it is '''not''' a problem of Qt as Apple's own Safari App uses these APIs). It is not possible (please contact me if I am wrong) to use the WebKit2 implementation as there is currently no workaround for the {{TT|bootstrap_*}} issues. However Qt delivers both: WebKit1 and WebKit2 - so we can use WebKit1. The {{TT|ubrk_*}} issues can be fixed by compiling your own ICU libs and we let Qt link against them.&lt;br /&gt;
&lt;br /&gt;
So we need to patch Qt and this How-To shows what has to be done.&lt;br /&gt;
&lt;br /&gt;
==ICU==&lt;br /&gt;
First of all you need the latest ICU libs. Download them from http://site.icu-project.org/download. In this example we use version 53.1 but you can use any recent version. We also need to patch some files otherwise we will face linking problems with Qt later. Skip this section if you are not intent to use QtWebKit and/or QtWebKitWidgets.&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
$ tar -zxf icu-53_1-src.tar&lt;br /&gt;
$ cd icu/source&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
By default ICU will add a version number suffix for symbols and therefore e.g. {{TT|_UCNV_FROM_U_CALLBACK_ESCAPE}} becomes {{TT|_UCNV_FROM_U_CALLBACK_ESCAPE_53}}. In WebKit those symbols are referenced without the version suffix and therefore Qt will not be able to link against the self-compiled ICU library. So we need to disable the version suffix:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
$ ./configure --prefix=/usr/local/icu53.1 --enable-renaming=no&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
After configuring ICU, it will prompt you with the following:&lt;br /&gt;
&amp;lt;source lang=C&amp;gt;&lt;br /&gt;
/* ICU customizations: put these lines at the top of uconfig.h */&lt;br /&gt;
&lt;br /&gt;
 /* -DU_DISABLE_RENAMING=1 */&lt;br /&gt;
#define U_DISABLE_RENAMING 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
So add {{TT|#define U_DISABLE_RENAMING 1}} to the file {{TT|common/unicode/uconfig.h}}:&lt;br /&gt;
&amp;lt;source lang=C&amp;gt;&lt;br /&gt;
/*  &lt;br /&gt;
**********************************************************************&lt;br /&gt;
*   Copyright (C) 2002-2014, International Business Machines&lt;br /&gt;
*   Corporation and others.  All Rights Reserved.&lt;br /&gt;
**********************************************************************&lt;br /&gt;
*   file name:  uconfig.h&lt;br /&gt;
*   encoding:   US-ASCII&lt;br /&gt;
*   tab size:   8 (not used)&lt;br /&gt;
*   indentation:4&lt;br /&gt;
*&lt;br /&gt;
*   created on: 2002sep19&lt;br /&gt;
*   created by: Markus W. Scherer&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#ifndef __UCONFIG_H__&lt;br /&gt;
#define __UCONFIG_H__&lt;br /&gt;
&lt;br /&gt;
// Add it here:&lt;br /&gt;
#define U_DISABLE_RENAMING 1   &lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Now compile ICU and install them:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
$ make -j4&lt;br /&gt;
[...]&lt;br /&gt;
$ sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The ICU libraries should now be available in {{TT|/usr/local/icu53.1/libs}}.&lt;br /&gt;
&lt;br /&gt;
==Qt 5.3==&lt;br /&gt;
For Qt we need some more work todo. Change into the directory of Qt:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
$ cd qt-everywhere-enterprise-src-5.3.0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Patch===&lt;br /&gt;
To remove the dependency from QtDeclarative patch the file {{TT|qt.pro}} in the top level directory (IMHO there is absolutely no reason why these libs should be dependent and link against QtDeclarative - many projects don't use QtQuick at all):&lt;br /&gt;
&amp;lt;source lang=diff&amp;gt;&lt;br /&gt;
--- qt.pro.org	2014-05-26 12:09:34.000000000 +0200&lt;br /&gt;
+++ qt.pro	2014-05-26 11:09:03.000000000 +0200&lt;br /&gt;
@@ -65,10 +65,10 @@&lt;br /&gt;
 addModule(qtxmlpatterns, qtbase)&lt;br /&gt;
 addModule(qtdeclarative, qtbase, qtsvg qtxmlpatterns)&lt;br /&gt;
 addModule(qtquickcontrols, qtdeclarative)&lt;br /&gt;
-addModule(qtmultimedia, qtdeclarative)&lt;br /&gt;
+addModule(qtmultimedia, qtbase)&lt;br /&gt;
 addModule(qtwinextras, qtbase, qtdeclarative qtmultimedia)&lt;br /&gt;
 addModule(qtactiveqt, qtbase)&lt;br /&gt;
-addModule(qt3d, qtdeclarative)&lt;br /&gt;
+addModule(qt3d, qtbase)&lt;br /&gt;
 addModule(qtjsondb, qtdeclarative)&lt;br /&gt;
 addModule(qtsystems, qtbase, qtdeclarative)&lt;br /&gt;
 addModule(qtlocation, qtbase, qt3d qtsystems qtmultimedia)&lt;br /&gt;
@@ -76,7 +76,7 @@&lt;br /&gt;
 addModule(qtconnectivity, qtbase $$ANDROID_EXTRAS, qtdeclarative)&lt;br /&gt;
 addModule(qtfeedback, qtdeclarative, qtmultimedia)&lt;br /&gt;
 addModule(qtpim, qtdeclarative, qtjsondb)&lt;br /&gt;
-addModule(qtwebkit, qtdeclarative, qtlocation qtmultimedia qtsensors, WebKit.pro)&lt;br /&gt;
+addModule(qtwebkit, qtbase, qtlocation qtmultimedia qtsensors, WebKit.pro)&lt;br /&gt;
 addModule(qttools, qtbase, qtdeclarative qtactiveqt qtwebkit)&lt;br /&gt;
 addModule(qtwebkit-examples, qtwebkit qttools)&lt;br /&gt;
 addModule(qtimageformats, qtbase)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
If you don't use QtQuick rename the following directories to prevent Qt from building them:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
$ mv qtdeclarative qtdeclarative.org&lt;br /&gt;
$ mv qtquick1 qtquick1.org&lt;br /&gt;
$ mv qtquickcontrols qtquickcontrols.org&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
If you are not using QtWebKit and/or QtWebKitWidgets continue with [[#Configure|Configure]]. For using WebKit patch file {{TT|qtwebkit/Source/WTF/WTF.pri}} to link against our own ICU libs:&lt;br /&gt;
&amp;lt;source lang=diff&amp;gt;&lt;br /&gt;
--- qtwebkit/Source/WTF/WTF.pri.org	2014-05-23 17:21:30.000000000 +0200&lt;br /&gt;
+++ qtwebkit/Source/WTF/WTF.pri	2014-05-23 17:23:43.000000000 +0200&lt;br /&gt;
@@ -11,8 +11,8 @@&lt;br /&gt;
 mac {&lt;br /&gt;
     # Mac OS does ship libicu but not the associated header files.&lt;br /&gt;
     # Therefore WebKit provides adequate header files.&lt;br /&gt;
-    INCLUDEPATH = $${ROOT_WEBKIT_DIR}/Source/WTF/icu $$INCLUDEPATH&lt;br /&gt;
-    LIBS += -licucore&lt;br /&gt;
+    INCLUDEPATH = /usr/local/icu53.1/include $$INCLUDEPATH&lt;br /&gt;
+    LIBS += -licui18n -licuuc -licudata -L/usr/local/icu53.1/lib&lt;br /&gt;
 } else {&lt;br /&gt;
     contains(QT_CONFIG,icu) {&lt;br /&gt;
         win32: LIBS += -licuin -licuuc -licudt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Now we need to disable the WebKit2 implementation, patch file {{TT|qtwebkit/Tools/qmake/mkspecs/features/configure.prf}}:&lt;br /&gt;
&amp;lt;source lang=diff&amp;gt;&lt;br /&gt;
--- qtwebkit/Tools/qmake/mkspecs/features/configure.prf.org	2014-05-23 17:36:24.000000000 +0200&lt;br /&gt;
+++ qtwebkit/Tools/qmake/mkspecs/features/configure.prf	2014-05-23 17:37:46.000000000 +0200&lt;br /&gt;
@@ -49,7 +49,6 @@&lt;br /&gt;
 &lt;br /&gt;
     WEBKIT_CONFIG += \&lt;br /&gt;
         build_webkit1 \&lt;br /&gt;
-        build_webkit2 \&lt;br /&gt;
         build_tests \&lt;br /&gt;
         $$WEBKIT_TOOLS_CONFIG&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Configure===&lt;br /&gt;
Now we can configure and build Qt (prefix it to your own needs) and omit the {{TT|-commercial}} and {{TT|-confirm-license}} switch if you are using the non-commercial version:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
$ ./configure -prefix /usr/local/qt/5.3.0 -no-icu -release -strip -commercial -confirm-license -no-rpath -nomake examples&lt;br /&gt;
[...]&lt;br /&gt;
$ make -j4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Install===&lt;br /&gt;
After building Qt we install it in the predefined directory:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
$ sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Post checks===&lt;br /&gt;
Some Qt versions (mainly prior 5.3.0) do not build the path ID for all Qt frameworks correctly. In our case the path {{TT|../lib/libicudata.53.1.dylib}} of {{TT|QtWebKit.framework}} will make trouble as it is relative. We can fix this using {{TT|install_name_tool}}.&lt;br /&gt;
To find out all relevant frameworks use {{TT|otool}}:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
$ cd /usr/local/qt/5.3.0/lib&lt;br /&gt;
$ otool -L Qt*/Qt*[^prl] | grep &amp;quot;\.\.\/&amp;quot; # for all files containing e.g. '../'&lt;br /&gt;
[...]&lt;br /&gt;
$ otool -L Qt*/Qt*[^prl] | grep &amp;quot;/usr/local/qt&amp;quot; # for all files containing absolute paths&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
After identifying the wrong frameworks we use {{TT|install_name_tool}} (this is an example fixing the ICU path but is representative for any other lib containing wrong paths):&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
$ cd /usr/local/qt/5.3.0/lib/QtWebKit.framework&lt;br /&gt;
$ sudo install_name_tool -change ../lib/libicudata.53.1.dylib libicudata.53.dylib QtWebKit &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Checking again with {{TT|otool}} and {{TT|grep}} no files should be listed anymore.&lt;br /&gt;
&lt;br /&gt;
==Bundle==&lt;br /&gt;
Applications in Mac OS X are organized in a so called ''bundle'' which represents a well defined file system structure:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
MyApp.app/&lt;br /&gt;
  Contents/&lt;br /&gt;
    Info.plist     # information about your app&lt;br /&gt;
    Frameworks/    # place of our Qt libs&lt;br /&gt;
    MacOS/         # application(s)&lt;br /&gt;
    PlugIns/       # plug-ins and your own libs (*dylib)&lt;br /&gt;
    Resources/     # entitlements, readme, icons, translations&lt;br /&gt;
    SharedSupport/ # optional files, documents&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
For creating such a bundle you can use {{TT|macdeployqt}} see http://qt-project.org/doc/qt-5/macosx-deployment.html. However this tool is not sufficient in many cases, so we will develop our own deployment script.&lt;br /&gt;
===Entitlements===&lt;br /&gt;
The AppStore requires an [https://developer.apple.com/library/mac/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/EnablingAppSandbox.html#//apple_ref/doc/uid/TP40011195-CH4-SW1 entitlements] file containing several security options for our application. We store this file in {{TT|$HOME/src/myapp.entitlements}}. An example could be:&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;com.apple.security.app-sandbox&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;true/&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;com.apple.security.files.downloads.read-write&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;true/&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;com.apple.security.files.user-selected.read-write&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;true/&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;com.apple.security.network.client&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;true/&amp;gt;&lt;br /&gt;
        &amp;lt;key&amp;gt;com.apple.security.print&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;true/&amp;gt;&lt;br /&gt;
        &amp;lt;key&amp;gt;com.apple.security.files.bookmarks.app-scope&amp;lt;/key&amp;gt;&lt;br /&gt;
        &amp;lt;true/&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This file will be used later for signing our application.&lt;br /&gt;
&lt;br /&gt;
===Structure===&lt;br /&gt;
First we create the directories and copy all the files we need (this shell script is an example but you can use it and change it for your own needs):&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
MYAPP=&amp;quot;MyApp&amp;quot;&lt;br /&gt;
DEST=&amp;quot;$HOME/bundles/$MYAPP.app&amp;quot; # Our final App directory&lt;br /&gt;
SRC=&amp;quot;$HOME/src/$MYAPP.app&amp;quot; # Usually the App directory created by our Qt *.pro file&lt;br /&gt;
ENTITLEMENTS=&amp;quot;$HOME/src/$MYAPP.entitlements&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ICUDIR=&amp;quot;/usr/local/icu53.1&amp;quot;&lt;br /&gt;
ICULIBS=&amp;quot;libicui18n.53 libicudata.53 libicuuc.53&amp;quot;&lt;br /&gt;
QTDIR=&amp;quot;/usr/local/qt/5.3.0&amp;quot;&lt;br /&gt;
QTLIBS=&amp;quot;QtCore QtNetwork QtSql QtGui QtSvg QtScript QtOpenGL QtWidgets QtWebKit QtWebKitWidgets \&lt;br /&gt;
  QtPrintSupport QtXml QtPositioning QtSensors QtMultimedia QtMultimediaWidgets&amp;quot; # QtQml QtQuick&lt;br /&gt;
PLUGINS=&amp;quot;sqldrivers imageformats iconengines platforms printsupport accessible \&lt;br /&gt;
  position mediaservice&amp;quot; # playlistformats sensors sensorgestures bearer audio&lt;br /&gt;
&lt;br /&gt;
# make clean &amp;amp; create pathes &lt;br /&gt;
rm -rf $DEST&lt;br /&gt;
cp -Rp $SRC $DEST&lt;br /&gt;
mkdir -p $DEST/Contents/Frameworks $DEST/Contents/PlugIns $DEST/Contents/SharedSupport&lt;br /&gt;
cp -p $ENTITLEMENTS $DEST/Contents/Resources/&lt;br /&gt;
&lt;br /&gt;
# copy Qt libs, plug-ins and ICU&lt;br /&gt;
for L in $QTLIBS ; do&lt;br /&gt;
  cp -Rp $QTDIR/lib/$L.framework $DEST/$MYAPP.app/Contents/Frameworks&lt;br /&gt;
  # remove all unnecessary header files:&lt;br /&gt;
  rm -f $DEST/$MYAPP.app/Contents/Frameworks/$L.framework/Headers&lt;br /&gt;
  rm -rf $DEST/$MYAPP.app/Contents/Frameworks/$L.framework/Versions/5/Headers&lt;br /&gt;
done&lt;br /&gt;
for P in $PLUGINS ; do&lt;br /&gt;
  cp -Rp $QTDIR/plugins/$P/*.dylib $DEST/$MYAPP.app/Contents/PlugIns/$P/&lt;br /&gt;
done&lt;br /&gt;
for I in $ICULIBS ; do&lt;br /&gt;
    cp -p $ICUDIR/lib/$I.dylib $DEST/$MYAPP.app/Contents/PlugIns/icu/&lt;br /&gt;
done&lt;br /&gt;
# copy own application libs if necessary to /Contents/PlugIns/myapp/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Library paths===&lt;br /&gt;
We need to change the library IDs and paths of all our libs for our application to create an exclusive fully self-contained bundle using again {{TT|install_name_tool}} - it provides the variable {{TT|@executable_path}} to offer a path relative to our executable in {{TT|/Contents/MacOS}}:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
DISTPLUGINS=`cd $DES/$MYAPP.app/Contents/PlugIns; ls -1 */*.dylib` # extract all our *.dylib libs&lt;br /&gt;
&lt;br /&gt;
for I in $QTLIBS ; do &lt;br /&gt;
  install_name_tool -id &amp;quot;@executable_path/../Frameworks/$I.framework/Versions/5/$I&amp;quot;\&lt;br /&gt;
   &amp;quot;$DEST/$MYAPP.app/Contents/Frameworks/$I.framework/Versions/5/$I&amp;quot;&lt;br /&gt;
  install_name_tool -change $I.framework/Versions/5/$I\&lt;br /&gt;
    @executable_path/../Frameworks/$I.framework/Versions/5/$I\&lt;br /&gt;
    $DEST/$MYAPP.app/Contents/MacOS/$MYAPP # change references to Qt frameworks&lt;br /&gt;
  for L in $QTLIBS ; do # change all lib references in all Qt frameworks&lt;br /&gt;
    if [ $L = $I ] ; then continue; fi &lt;br /&gt;
    install_name_tool -change $I.framework/Versions/5/$I\&lt;br /&gt;
      @executable_path/../Frameworks/$I.framework/Versions/5/$I\&lt;br /&gt;
      $DEST/$MYAPP.app/Contents/Frameworks/$L.framework/Versions/5/$L&lt;br /&gt;
  done&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
for P in $DISTPLUGINS ; do # change ID for all *.dylib libs&lt;br /&gt;
  install_name_tool -id &amp;quot;@executable_path/../PlugIns/$I&amp;quot; &amp;quot;$DEST/$MYAPP.app/Contents/PlugIns/$P&amp;quot;&lt;br /&gt;
  for L in $QTLIBS ; do # change any reference to Qt in our *.dylib libs&lt;br /&gt;
    install_name_tool -change $L.framework/Versions/5/$L\&lt;br /&gt;
      @executable_path/../Frameworks/$L.framework/Versions/5/$L\&lt;br /&gt;
      $DEST/$MYAPP.app/Contents/PlugIns/$P&lt;br /&gt;
  done&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
for L in $ICULIBS ; do &lt;br /&gt;
  install_name_tool -id &amp;quot;@executable_path/../PlugIns/icu/$L.dylib&amp;quot;\&lt;br /&gt;
    &amp;quot;$DEST/$MYAPP.app/Contents/PlugIns/icu/$L.dylib&amp;quot;&lt;br /&gt;
    for I in $ICULIBS ; do # change all references in ICU libs&lt;br /&gt;
      if [ $I = $L ] ; then continue; fi&lt;br /&gt;
      install_name_tool -change &amp;quot;$I.dylib&amp;quot; &amp;quot;@executable_path/../PlugIns/icu/$I.dylib&amp;quot;\&lt;br /&gt;
        &amp;quot;$DEST/$MYAPP.app/Contents/PlugIns/icu/$L.dylib&amp;quot;&lt;br /&gt;
    done&lt;br /&gt;
done&lt;br /&gt;
# we do the same for additional own libs in /Contents/PlugIns/myapp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Check if every lib, framework and especially our executable contains the correct lib references i.e. no {{TT|/usr/local/qt/...}} is part of a path. Again use {{TT|otool -L}}.&lt;br /&gt;
&lt;br /&gt;
===Code sign===&lt;br /&gt;
For uploading successfully to the Mac AppStore each of our files must be signed. By registering with Apple you get a ''Developer Application'' and a ''Developer Installer'' certificate. For signing the files we need the ''Developer Application'' certificate and for packaging the ''Developer Installer'' certificate.&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
APPLCERT=&amp;quot;3rd Party Mac Developer Application: &amp;lt;your ID&amp;gt;&amp;quot;&lt;br /&gt;
INSTCERT=&amp;quot;3rd Party Mac Developer Installer: &amp;lt;your ID&amp;gt;&amp;quot;&lt;br /&gt;
DOMAIN=&amp;quot;com.yourdomain&amp;quot; # must be the domain registered for this App&lt;br /&gt;
&lt;br /&gt;
for I in $QTLIBS ; do # signing the Qt frameworks&lt;br /&gt;
  codesign -s &amp;quot;$APPLCERT&amp;quot; -v -i &amp;quot;$DOMAIN.$I&amp;quot; \&lt;br /&gt;
    $DEST/$MYAPP.app/Contents/Frameworks/$I.framework/Versions/5/$I&lt;br /&gt;
done&lt;br /&gt;
for I in $DISTPLUGINS ; do # signing all *.dylib libs&lt;br /&gt;
  BN=`basename $I .dylib`&lt;br /&gt;
  codesign -s &amp;quot;$APPLCERT&amp;quot; -v -i &amp;quot;$DOMAIN.$BN&amp;quot; \&lt;br /&gt;
    $DEST/$MYAPP.app/Contents/PlugIns/$I&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Finally we need to sign our executable using the entitlements file:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
codesign -s &amp;quot;$APPLCERT&amp;quot; -v -i &amp;quot;$DOMAIN.$MYAPP&amp;quot; --entitlements \&lt;br /&gt;
  &amp;quot;$DEST/$MYAPP.app/Contents/Resources/$MYAPP.entitlements&amp;quot; \&lt;br /&gt;
  &amp;quot;$DEST/$MYAPP.app/Contents/MacOS/$MYAPP&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This step will only be successful if any library and framework is code signed.&lt;br /&gt;
&lt;br /&gt;
===Package===&lt;br /&gt;
If everything went successful until now we can package our application to get it ready for the AppStore upload. Therefor we use {{TT|productbuild}} (take care of the {{TT|$INSTCERT}} variable):&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
productbuild --component &amp;quot;$DEST/$MYAPP.app&amp;quot; /Applications \&lt;br /&gt;
  --sign &amp;quot;$INSTCERT&amp;quot; &amp;quot;$DEST/$MYAPP.pkg&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
To check our created package we can use:&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
$ sudo installer -store -pkg MyApp.pkg -target /&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Upload===&lt;br /&gt;
Before you can upload your package you need to create a new version for you App with http://itunesconnect.apple.com. After that you can use the ''Application Loader'' to upload your package {{TT|*.pkg}}.&lt;br /&gt;
&lt;br /&gt;
Good luck! :-)&lt;br /&gt;
&lt;br /&gt;
==Feedback==&lt;br /&gt;
I hope this How-To was helpful! Feedback is welcome. If you have suggestions, problems, etc. feel free to write a message to mailto:info@phisys.com.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>