I finally fixed my problem by running app->exec() much sooner in
main.cpp
(using a QTimer::singleShot(0, ...) to finished my initialization). It
seems
that the fact that exec() and eventloop was not started soon enough
conflicted somehow with openUrl(), while in a normal situation that
was not
a problem.
Thanks again Edward for your help, that was very helpful.
Philippe Lelong
Le 13-11-2015 20:17, maitai a écrit :
Ok then, I need to review all that it's clear.
Thank you a thousand times for your input, it helps a lot to know that
it's
something wrong with my own code.
I'll post back when fixed
Le 13-11-2015 20:10, Edward Sutton a écrit :
On Nov 13, 2015, at 1:01 PM, maitai <mai...@virtual-winds.org> wrote:
And just to make sure I understand well, if you press your app icon
"copy
to MyApp" your app launches and all is fine? If this is the case then
the
problem must be on my side obviously
Yes. My Qt 5.5 widget app launches splash screen, then app opens the
data
file displaying the data inside the app.
I just powered-off and repeated test. App launched just fine.
iPhone 5c, iOS 9.1.
Built on Xcode 7.1.1 on OS X 10.10.5
-Ed
Le 13-11-2015 19:56, Edward Sutton a écrit :
On Nov 13, 2015, at 12:50 PM, maitai <mai...@virtual-winds.org> wrote:
Thanks Edward for your fast answer.
That is working also if your app is not in the background (i.e not
started)?
Yes. Since Qt 5.4 and currently using Qt 5.5.1
I just closed my app to make sure.
Then I went to iOS mail and opened an email attachment of a file with
a
*.TSR file extension associated with my application. The sharing
thing
opens. One of the options displayed my app's icon with text "Copy yo
MyApp"
-Ed
Le 13-11-2015 19:42, Edward Sutton a écrit :
I am using a pure Qt 5.5.1 iOS widgets app. Disclaimer: This solution
works
but may not be the best solution. Recommendations for a cleaner
approach
are welcome.
Using Qt 5.5.1 I added myApplicationDelegate.mm that posts an
fileOpenEvent.
It would be nice if this was built into Qt. See below File:
myApplicationDelegate.mm.
Then I subclass QApplication to include to add a member variable for
my
QMainWindowto watch for QEvent::FileOpen and call
/// Looks for QFileOpenEvent to implement app file open from
/// other apps, for example, Finder on OS X, or Apple Mail on iOS and
OS X.
///
///
/// \remarks Could this work on Android too?
///
/// See file: myApplicationDelegate.mm
/// \see myApplicationDelegate.mm.mm
///
bool TcmwApplication::event(QEvent* event)
{
// iOS receives ApplicationDeactivate, ApllicationStateChange,
when Home
is pressed
// When iOS user opens Mail file attachment using "Open in TSR",
ApplicationActivate event received but NOT QEvent::FileOpen
switch (event->type())
{
#if 0 // Why was I calling m_mainWindow.show() here? Android problem?
case QEvent::ApplicationActivate:
{
//clean();
if (false == m_mainWindow.isMinimized())
{
qDebug("m_mainWindow.show()");
// Why was I calling m_mainWindow.show() here? Android
problem?
//m_mainWindow.show();
}
return true;
}
#endif
case QEvent::FileOpen:
{
// Should file attachments be copied locally as if they
were
downloaded from a TK?
QString fileName = static_cast<QFileOpenEvent
*>(event)->file();
m_mainWindow.openFile(fileName);
return true;
}
default:
break;
}
return QApplication::event(event);
}
#endif
-Ed
File: myApplicationDelegate.mm
#include <UIKit/UIKit.h>
#include <QDebug>
#include <QFileOpenEvent>
#include "qiosapplicationdelegate.h"
/// \category QIOSApplicationDelegate(TcmwApplicationDelegate)
/// \abstract A category on QIOSApplicationDelegate to override
openURL
/// Use the Objective-C category feature to override the openURL
method
@implementation QIOSApplicationDelegate (TcmwApplicationDelegate)
/// Posts a QFileOpenEvent to QCoreApplication when iOS calls openURL.
///
/// This allows userto open a TSR file from Apple Mail,
/// select "Open in TSR", to launch TSR and pass openURL the
/// file to open.
///
/// Must add UTExportedTypeDeclarations and CFBundleDocumentTypes to
your
/// Info.plist for this to work.
///
/// Example: Info.plist
/// \verbatim
/// <key>UTExportedTypeDeclarations</key>
/// <array>
/// <dict>
/// <key>UTTypeConformsTo</key>
/// <array>
/// <string>public.data</string>
/// </array>
/// <key>UTTypeDescription</key>
/// <string>Tracking Status Report</string>
/// <key>UTTypeIdentifier</key>
/// <string>com.ditchwitch.tsr</string>
/// <key>UTTypeTagSpecification</key>
/// <dict>
/// <key>public.filename-extension</key>
/// <string>tsr</string>
/// <key>public.mime-type</key>
/// <string>public.data</string>
/// </dict>
/// </dict>
/// </array>
/// <key>CFBundleDocumentTypes</key>
/// <array>
/// <dict>
/// <key>CFBundleTypeIconFiles</key>
/// <array>
/// <string>Icon.png</string>
/// </array>
/// <key>CFBundleTypeName</key>
/// <string>Tracking Status Report</string>
/// <key>CFBundleTypeRole</key>
/// <string>Editor</string>
/// <key>LSHandlerRank</key>
/// <string>Owner</string>
/// <key>LSItemContentTypes</key>
/// <array>
/// <string>com.ditchwitch.tsr</string>
/// <string>public.data</string>
/// </array>
/// </dict>
/// </array>
/// \endverbatim
///
/// See file: tcmwapplication.cpp
/// \see tcmwapplication.cpp
///
/// \see
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html
///
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString
*)sourceApplication
annotation:(id)annotation
{
Q_UNUSED(application);
Q_UNUSED(annotation);
NSLog(@"sourceApplication: %@",sourceApplication);
NSLog(@"url: %@",url);
QString filePath = QString::fromNSString(url.path);
qDebug("filePath %s", filePath.toLatin1().data());
QFileOpenEvent *fileOpenEvent = new QFileOpenEvent(filePath);
QCoreApplication::postEvent(QCoreApplication::instance(),
fileOpenEvent);
return YES;
}
@end
On Nov 13, 2015, at 12:24 PM, maitai <mai...@virtual-winds.org> wrote:
Hello all,
Since I updated to 5.5, I cannot launch my application by opening an
email
attachment or such methods, for file extensions that have been
registered
for my app in info.plist
I can open the documents only if the app is already running.
I can see in the app's log the following message:
(...)
Nov 13 19:03:39 iPad-maitai com.apple.mdt[483] <Notice>: Copy
/var/mobile/Library/Mail/imap-xxx...@gmail.com@imap.gmail.com/INBOX.imapmbox/Attachments/2126/2/530_1.KAP
->
/private/var/mobile/Containers/Data/Application/53F9684F-8FF2-4A10-A9BD-87A93C97FB11/Documents/Inbox
Nov 13 19:03:39 iPad-maitai kernel[0] <Notice>: xpcproxy[484]
Container:
/private/var/mobile/Containers/Data/Application/53F9684F-8FF2-4A10-A9BD-87A93C97FB11
(sandbox)
Nov 13 19:03:39 iPad-maitai qtVlm[484] <Warning>:
didFinishLaunchingWithOptions option happen
Nov 13 19:03:39 iPad-maitai qtVlm[484] <Warning>: url received:
/private/var/mobile/Containers/Data/Application/53F9684F-8FF2-4A10-A9BD-87A93C97FB11/Documents/Inbox/530_1.KAP
Nov 13 19:03:40 iPad-maitai kernel[0] <Notice>: Sandbox: qtVlm(484)
deny(1)
file-read-data /dev/tty
Nov 13 19:03:40 iPad-maitai qtVlm[484] <Warning>: qwarning received:
starting up nslogmessage
Nov 13 19:03:40 iPad-maitai qtVlm[484] <Warning>: qwarning received:
step 2
Nov 13 19:03:40 iPad-maitai qtVlm[484] <Warning>: qwarning received:
step 3
Nov 13 19:03:40 iPad-maitai qtVlm[484] <Warning>: qwarning received:
step 4
Nov 13 19:03:40 iPad-maitai qtVlm[484] <Warning>: <CATransformLayer:
0x15da1ee0> - changing property masksToBounds in transform-only layer,
will
have no effect
Nov 13 19:03:40 iPad-maitai qtVlm[484] <Warning>: <CATransformLayer:
0x15da4680> - changing property masksToBounds in transform-only layer,
will
have no effect
Nov 13 19:03:40 iPad-maitai qtVlm[484] <Warning>: <CATransformLayer:
0x15d50730> - changing property masksToBounds in transform-only layer,
will
have no effect
Nov 13 19:03:40 iPad-maitai qtVlm[484] <Warning>: qwarning received:
step 5
just before qApp->exec()
Nov 13 19:03:41 iPad-maitai kernel[0] <Notice>: 024305.657672
wlan0.W[123]
AWDL MODE: OFF
Nov 13 19:03:57 iPad-maitai backboardd[63] <Warning>: CoreAnimation:
updates
deferred for too long
Nov 13 19:03:59 iPad-maitai SpringBoard[48] <Warning>: Forcing crash
report
of <FBApplicationProcess: 0x192412a0; qtVlm; pid: 484> (reason: 1,
description: com.meltemus.qtvlm failed to scene-create after 19.68s
(launch
took 0.32s of total time limit 20.00s))
(...)
The full story is that I override QIOSApplicationDelegate to be able
to
manage didFinishLaunchingWithOptions and openUrl methods, but even if
I
remove my implementations and let Qt regular QIOSApplicationDelegate
load, I
get the same crash. I can see that main.cpp reaches the point where it
calls
qApp->exec() and stays stuck there until a timeout of some sort
occurs. I
can see that didFinishLaunchingWithOptions is called if I activate my
own
delegate, as you can read from the log. But anyway with or without my
own
delegate, I get this crash when I launch the app through a file
opening.
What is this message about CoreAnimation taking too long that I don't
get
when I launch the app normally?
If I launch the application by clicking on the icon, it works and
takes less
than 2secs to load, and it will even accept all incoming files through
openUrl. didFinishLaunchingWithOptions is called at startup too, but
with no
url as expected.
I am sure that was working before with qt 5.4.2.
What should I do to make this working? And btw what is the recommended
way
to override QIOSApplicationDelegate in order not to be annoyed each
time a
new qt version is released, and still be able to handle openUrl and
such?
Thanks in advance
Philippe Lelong
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest
This email and any files transmitted with it from The Charles Machine
Works,
Inc. are confidential and intended solely for the use of the
individual or
entity to which they are addressed. If you have received this email in
error
please notify the sender. Our company accepts no liability for the
contents
of this email, or for the consequences of any actions taken on the
basis of
the information provided, unless that information is subsequently
confirmed
in writing. Please note that any views or opinions presented in this
email
are solely those of the author and do not necessarily represent those
of the
company. Finally, the recipient should check this email and any
attachments
for the presence of viruses. The company accepts no liability for any
damage
caused by any virus transmitted by this email.
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest
This email and any files transmitted with it from The Charles Machine
Works,
Inc. are confidential and intended solely for the use of the
individual or
entity to which they are addressed. If you have received this email in
error
please notify the sender. Our company accepts no liability for the
contents
of this email, or for the consequences of any actions taken on the
basis of
the information provided, unless that information is subsequently
confirmed
in writing. Please note that any views or opinions presented in this
email
are solely those of the author and do not necessarily represent those
of the
company. Finally, the recipient should check this email and any
attachments
for the presence of viruses. The company accepts no liability for any
damage
caused by any virus transmitted by this email.
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest
This email and any files transmitted with it from The Charles Machine
Works,
Inc. are confidential and intended solely for the use of the
individual or
entity to which they are addressed. If you have received this email in
error
please notify the sender. Our company accepts no liability for the
contents
of this email, or for the consequences of any actions taken on the
basis of
the information provided, unless that information is subsequently
confirmed
in writing. Please note that any views or opinions presented in this
email
are solely those of the author and do not necessarily represent those
of the
company. Finally, the recipient should check this email and any
attachments
for the presence of viruses. The company accepts no liability for any
damage
caused by any virus transmitted by this email.
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest