[Interest] iOS didFinishLaunchingWithOptions and such
Robert Iakobashvili
coroberti at gmail.com
Sun Nov 15 09:35:21 CET 2015
Hi Philippe,
Here's the docs:
http://doc.qt.io/qt-5/qdesktopservices.html#setUrlHandler
Regards,
Robert
On Sun, Nov 15, 2015 at 10:08 AM, maitai <maitai at virtual-winds.org> wrote:
> So simple... that should be written somewhere in the iOS documentation
> section
>
> I'll give it a try
>
> BTW what other scheme can we use apart from "file" ?
>
> Thanks Robert for the tip, didn't knew that one...
>
>
> Le 14-11-2015 20:37, Robert Iakobashvili a écrit :
>>
>> 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 <maitai at 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 <maitai at 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 <maitai at 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 <maitai at 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-xxxxxx at 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 at 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 at 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 at 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 at qt-project.org
>>> http://lists.qt-project.org/mailman/listinfo/interest
>>>
>>>
>>> _______________________________________________
>>> Interest mailing list
>>> Interest at qt-project.org
>>> http://lists.qt-project.org/mailman/listinfo/interest
>>>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
More information about the Interest
mailing list