Ich entwickle eine Cross-Plattform-Anwendung mit Qt 5.6. Wenn die Anwendung gestartet wird, erstellt es eine einzelne Datei auf dem App-Verzeichnis:Permisison Probleme mit Qt App auf MAC OS Sierra
QFile file;
// /MyApp.app/Contents/MacOS
file.setFileName(QApplication::applicationDirPath() + QString("/file.csv");
file.open(QIODevice::ReadWrite | QIODevice::Truncate);
...
file.close();
Das funktioniert völlig in Ordnung mit alten Versionen O X, aber da Sierra, diese Datei regeneriert wird nicht (nur wenn die App aus dem Internet heruntergeladen). Beachten Sie, dass ich meine App nicht im MAC-Store veröffentliche. Ich verwende einfach eine .dmg-Datei.
Hier sind einige Tests, die ich getan habe:
- die App Kompilieren und starten auf Sierra =>OK
- die App Kompilieren, eine .dmg erstellen und den Start auf Sierra =>OK
- die App Kompilieren, erstellen Sie eine .dmg (die ich hochgeladen), das Herunterladen und starten der App auf Sierra =>FAIL
Ich denke, das Problem ist mit Zugriffsberechtigungen verknüpft. Diese einzelne Befehlszeile meines Problem lösen, aber natürlich kann ich nicht, dass die Lösung für meine Nutzer geben:
sudo spctl --master-disable
Dies ist, wie ich meine Bewerbung unterschreiben:
# Signing application
codesign --force --deep --sign "Developer ID Application: *** ***" /MyPath/MyApp.app
# Validating signature
spctl --assess --verbose /MyPath/MyApp.app
Und hier ist meine Info. plist-Datei, erzeugt von Qt:
<?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>NSPrincipalClass</key>
<string>NSApplication</string>
<key>CFBundleIconFile</key>
<string>mac_app_icon.icns</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleGetInfoString</key>
<string>Created by Qt/QMake</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleExecutable</key>
<string>MyApp</string>
<key>CFBundleIdentifier</key>
<string>com.company.myapp</string>
<key>NOTE</key>
<string>This file was generated by Qt/QMake.</string>
<key>LSUIElement</key>
<true/>
</dict>
</plist>
ich mit MAC Unterzeichnung Werkzeug nicht sehr vertraut bin, so würde jede mögliche Hilfe sehr geschätzt. Vielen Dank.
Sie sind total richtig. Unglücklicherweise habe ich keine Wahl für diese spezielle Datei. – Sierra
@Sierra Ich weiß nicht aus eigener Erfahrung, aber ich würde wahrscheinlich versuchen, eine GUI sudo, um den Befehl auszuführen, den Sie benötigen, der Benutzer würde dann zur Eingabe des Kennworts aufgefordert werden und weiter wie gewohnt: http: //www.performantdesign. com/2009/10/26/cocoasudo-a-graphical-kakaobasiert-alternativ-zu-sudo/ –
Ja, es wäre perfekt, aber 'AuthorizationExecuteWithPrivileges' scheint seit OS_X 10.7 veraltet zu sein – Sierra