Песочница QtWebengine для яблочного магазина - PullRequest
1 голос
/ 23 сентября 2019

Последние 4 дня я пытался опубликовать свое приложение в магазине Apple (чего я никогда раньше не делал).В нем я использую qt 5.12.1 с qtwebengine.Но я действительно застрял с песочницей, потому что после песочницы приложение даже не запустилось.Сначала я следовал этому https://mediaarea.net/blog/2018/02/14/QtWebEngine-MacAppStore, не перекомпилируя и не меняя веб-движок, но потом делал то же самое (хотя и безуспешно, потому что они использовали qt 5.9).Я попробовал также предложения из этой темы https://forum.qt.io/topic/102212/qtwebengine-signing-issues/4, но безуспешно.Поэтому я подумал, что вы, ребята, могли бы дать мне несколько советов, как мне это сделать.Вот мой скрипт для подписания пакета.

echo SIGN PACKAGE
# special case for QtWebEngineCore

find dist/MyApp.app -name Info.plist -exec plutil -replace CFBundleIdentifier -string "com.MyApp.desktop" {} \;

find dist/MyApp.app -name _CodeSignature -exec rm -fr {} \;
find dist/MyApp.app -name "*.dSYM" -exec rm -fr {} \;

# 1*

for f in $(find dist/MyApp.app/Contents/Frameworks -name '*.framework' -type d)
do
    codesign --force --verbose -s "3rd Party Mac Developer Application: MyApp (*)" $f
done

for f in $(find dist/MyApp.app/Contents -name '*.dylib' -type f)    
do
    codesign --force --verbose -s "3rd Party Mac Developer Application: MyApp (*)" $f  
done

codesign --entitlements app/MyApp.entitlements -s "3rd Party Mac Developer Application: MyApp (*)" dist/MyApp.app/Contents/MacOS/MyAppUpdater
codesign --entitlements app/MyApp.entitlements -s "3rd Party Mac Developer Application: MyApp (*)" dist/MyApp.app/Contents/MacOS/crashpad_handler

# 2*
codesign --force --verify --verbose -s "3rd Party Mac Developer Application: MyApp (*)" --entitlements app/MyApp.entitlements dist/MyApp.app 

codesign --force --verify --verbose --sign "3rd Party Mac Developer Application: MyApp (*)" --identifier "com.MyApp.desktop" --entitlements app/webengine.entitlements dist/MyApp.app/Contents/Frameworks/QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app

# 3*
codesign --entitlements app/MyApp.entitlements -s "3rd Party Mac Developer Application: MyApp (*)" dist/MyApp.app/Contents/MacOS/MyApp 

Это своего рода смесь всех предложений тех сообщений.В конце концов мне удалось избавиться от всех ошибок Apple, кроме этой.

ITMS-90296: App sandbox not enabled - The following executables must include the "com.apple.security.app-sandbox" entitlement with a Boolean value of true in the entitlements property list: [( "com.MyApp.desktop.pkg/Payload/MyApp.app/Contents/MacOS/MyApp" )] Refer to App Sandbox page at https://developer.apple.com/devcenter/mac/app-sandbox/ for more information on sandboxing your app. 

Проблема в том, что если я переместу часть, где я подписываю webengine, в (1 *) я получу свое приложение через appleпроверяет, но это потерпит крах.Но если я оставлю это там, где сейчас, я получу ошибку выше.Сначала у меня было 3 * выше 2 *, и я попробовал комбинацию перемещения по сигнатуре webengine.

Для получения более подробной информации я приложу свои MyApp.plist, MyApp.entitlements и webengine.entitlements ниже.Я запускаю macos mojave 10.14.3 на VirtualBox, qt 5.12.1

webengine.entitlements

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.inherit</key>
    <true/>
    <key>com.apple.security.app-sandbox</key>
    <true/>
    <key>com.apple.security.cs.disable-executable-page-protection</key>
    <true/>
</dict>
</plist>

MyApp.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDisplayName</key>
    <string>MyApp</string>
    <key>CFBundleExecutable</key>
    <string>MyApp</string>
    <key>CFBundleIdentifier</key>
    <string>com.MyApp.desktop</string>
    <key>CFBundleSpokenName</key>
    <string>MyApp</string>
    <key>CFBundleGetInfoString</key>
    <string>blalba</string>
    <key>CFBundleIconFile</key>
    <string>MyApp.icns</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>LSMinimumSystemVersion</key>
    <string>10.11</string>
    <key>NSPrincipalClass</key>
    <string>NSApplication</string>
    <key>NSMicrophoneUsageDescription</key>
    <string>Microphone is required for voice messages and calls</string>
    <key>NSSupportsAutomaticGraphicsSwitching</key>
    <false/>
    <key>CFBundleVersion</key>
    <string>0.5.1225</string>
    <key>CFBundleShortVersionString</key>
    <string>0.5.1225</string>
    <key>LSApplicationCategoryType</key>
    <string>public.app-category.social-networking</string>
    <key>NSHighResolutionCapable</key>
    <true/>
</dict>
</plist>

MyApp.entitlements

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.inherit</key>
    <true/>
    <key>com.apple.security.app-sandbox</key>
    <true/>
</dict>
</plist>

У меня закончились идеи и информация о том, как решить эту проблему.Еще одна проблема заключается в том, что я никогда раньше не публиковал приложения в Apple Store, и обычно я тоже не разрабатываю под Macos.Так что все для меня ново (люблю это).И если я этого не сделаю, мой руководитель команды повесят меня, если я сам этого не сделаю первым.Так что любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...