Gentlemen, For iOS works general cross-platform Qt url handling mechanism. // // Register for: iOS "Open In" file sharing and for our special file extensions // QDesktopServices::setUrlHandler("file", this, "handle_shared_ios_file_and_app_ext_we_are_registed_for");
Existing Qt iOS delegate calls all URL-handling. Take care. Regards, Robert On Sat, Nov 14, 2015 at 3:09 PM, maitai <mai...@virtual-winds.org> wrote: > 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 > _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest