Sandbox app for the Mac App Store with Qt 5.8 and QtWebEngineProcess
-
@SGaist said in Sandbox app for the Mac App Store with Qt 5.8 and QtWebEngineProcess:
The switch doesn't remove the build of the helper application, it disable some code that is using APIs not authorised in App Store applications.
Do you know if these API were present in 5.7? My next thought is to try this with 5.7 since I am having so many problems with 5.8.
-
I was finally able to get my app to run in sandbox mode with Qt 5.6.2. I have not tried 5.7 yet, but I did have to reduce the version of QtQuick I was using from 2.7 to 2.6. Luckily I am not using any 2.7 specific features.
I was also able to get my app past the Application Loader portion of the app submission. It hasn't been approved yet but we'll see.
I wanted to mention a few things for anyone else that might have a problem with this.
-
macdeployqt
's-codesign
option did NOT work. The only way I was able to sign my app correctly was to write a script that manually walked through my app bundle and calledcodesign
on every binary with the entitlements I wanted/needed. -
macdeployqt
also seems to create a lot of *.dSYM files. This is something I noticed in with 5.8 as well and Apple's Application Loader will reject these. I didn't pay much attention to the error but I just made sure my packaging script deleted them (before signing). -
QtWebProcessEngine.app
's Info.plist file needs to be changed before you sign it. TheCFBundleIdentifier
needs to match that of your signature.
Like I said, my app has only passed Application Loader's loading process. I've had problems in the past with Qt and the App Store system (see http://stackoverflow.com/questions/25694066/submitting-qt-5-3-app-for-review-on-mac-app-store) before I could even submit the app for review, so I'm skeptical that I'm out of the woods yet.
I'll keep this thread updated.
-
-
Attempting Qt 5.7.1 brought its own problem. Namely that on startup the application gives the error:
This application failed to start because it could not find or load the Qt platform plugin "cocoa" in "". Available platform plugins are: cocoa. Reinstalling the application may fix this problem. Abort trap: 6
I did a little research and tried a couple minor things but nothing worked.
Meanwhile my app was rejected because of an unused sandbox permission. So I've corrected that and resubmitted a new build still using Qt 5.6.2.
Really wish I had been able to get 5.8 to work or even 5.7.
-
That strange, do you have a qt.conf file in your application bundle ?
-
@SGaist Yes.
So, my app was rejected using Qt 5.6.2 because of the following:
Your app uses or references the following non-public API(s): framework: '/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit' : NSAccessibilityUnregisterUniqueIdForUIElement : _NSAppendToKillRing : _NSDrawCarbonThemeBezel : _NSDrawCarbonThemeListBox : _NSInitializeKillRing : _NSNewKillRingSequence : _NSPrependToKillRing : _NSSetKillRingToYankedState : _NSYankFromKillRing framework: '/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices' : CGSSetDenyWindowServerConnections : CGSShutdownServerConnections : CTFontCopyDefaultCascadeList The use of non-public APIs is not permitted on the App Store as it can lead to a poor user experience should these APIs change.
Which looks like this is addressed by this: https://doc.qt.io/qt-5/qtwebengine-platform-notes.html#mac-app-store-compatibility
So I tried Qt 5.7 again and for whatever reason it didn't crash this time! However, it has the same exact problem I was seeing with Qt 5.8.
I have built and rebuilt and rebuilt
QtWebEngine
and yet I still cannot get it to work. Is there anyway to verify that my build ofQtWebEngine
is actually applying theuse_appstore_compliant_code
flag?It seems like this has been a problem for a while: https://bugreports.qt.io/browse/QTBUG-41611
-
The symbol problem is pretty surprising, are you sure you are using your build of the QtWebEngine module that is app store compliant ?
-
@SGaist said in Sandbox app for the Mac App Store with Qt 5.8 and QtWebEngineProcess:
The symbol problem is pretty surprising, are you sure you are using your build of the QtWebEngine module that is app store compliant ?
I was using 5.6.2. Should I build 5.6.2 QtWebEngine with the
use_appstore_compliant_code
? -
@SGaist I'm back to trying Qt 5.8 again. I've gone so far as to manually copy over QtWebEngineCore.framework that is in my build folder and I'm getting the same results:
4/26/17 20:33:04.000 kernel[0]: Sandbox: QtWebEngineProce(86853) deny(1) mach-lookup org.chromium.Chromium.rohitfork.86852 4/26/17 20:33:04.019 QtWebEngineProcess[86853]: [0426/203304:ERROR:mach_port_broker.mm(43)] bootstrap_look_up: Permission denied (1100) 4/26/17 20:33:04.000 kernel[0]: Sandbox: QtWebEngineProce(86854) deny(1) mach-lookup org.chromium.Chromium.rohitfork.86852 4/26/17 20:33:04.020 QtWebEngineProcess[86854]: [0426/203304:ERROR:mach_port_broker.mm(43)] bootstrap_look_up: Permission denied (1100) 4/26/17 20:33:04.000 kernel[0]: Sandbox: QtWebEngineProce(86854) deny(1) forbidden-sandbox-reinit 4/26/17 20:33:04.000 kernel[0]: Sandbox: QtWebEngineProce(86853) deny(1) forbidden-sandbox-reinit
Again, is there anyway by inspecting the
QtWebEngineCore.framework
to make sure is being built with the app store compliant code? -
Just built
QtWebEngine
again on 5.8 and made sure to use theQtWebEngineCore.framework
that just got built. No luck.I see the
use_appstore_compliant_code
config item was added in Qt 5.7. Guess I'll try building that and see if I have any luck. Heck, I may even try 5.9 at this point just to see.Seriously, has anyone successfully published an app that uses
QtWebEngine
to the MAS? -
Built 5.7 with
use_appstore_compliant_code
and am getting the same errors from my app:4/27/17 07:10:53.000 kernel[0]: Sandbox: QtWebEngineProce(20764) deny(1) mach-lookup org.chromium.Chromium.rohitfork.20763 4/27/17 07:10:53.000 kernel[0]: Sandbox: QtWebEngineProce(20765) deny(1) mach-lookup org.chromium.Chromium.rohitfork.20763 4/27/17 07:10:53.627 QtWebEngineProcess[20764]: [0427/071053:ERROR:mach_broker_mac.mm(52)] bootstrap_look_up: Permission denied (1100) 4/27/17 07:10:53.627 QtWebEngineProcess[20765]: [0427/071053:ERROR:mach_broker_mac.mm(52)] bootstrap_look_up: Permission denied (1100) 4/27/17 07:10:53.000 kernel[0]: Sandbox: QtWebEngineProce(20764) deny(1) forbidden-sandbox-reinit
Are there any apps on the MAS that use Qt 5.x and
QtWebEngine
? -
@SGaist Thank you for trying to help. I discovered that link a few days ago while researching this problem. It did lead me to add the
com.apple.security.application-groups
entitlement to my app's entitlements file but the problem persists.I am beginning to wonder if this is a problem with
QtWebEngineProcess
. I have posted this issue to the QtWebEngine mailing list but so far there has been no response.I'm at a loss. :(
-
Do you mean from the QtWebView module ?
-
@SGaist Yes. That does not use
QtWebEngineProcess
correct?What I need is for a link in the HTML of the control to invoke some C++. I'm able to do this in
QtWebEngine
withQWebChannel
. From what I've read,QtWebView
doesn't really support that but maybe it's possible? -
No it doesn't use it.
AFAIK, QtWebView uses the platform native web views so it should be able to run with the QWebChanne module. Note that I haven't personally tested that combo but it's well worth a shot since it will likely make your application more lightweight.
-
@Wolosocu said in Sandbox app for the Mac App Store with Qt 5.8 and QtWebEngineProcess:
QtWebEngineProce
@Wolosocu did you manage to overcome this issue? If so how ?