Swing Client Anwendung für MAC OS (Update Routine)

eskimo328

Aktives Mitglied
Hi,
wir möchten unsere Windows Anwendung zusätzlich für Macbooks (MacOS) freigeben. Dazu haben wir uns ein aktuelles Macbook (Air) angeschafft.
Ich persönlich betrete mit Mac Neuland, habe mich aber die letzten Tage schon etwas eingearbeitet.

Anscheinend werden Programme in der Regel als Application Bundles verpackt und als .DMG File verteilt.
Habe bereits den ANT-Build erweitert, sodass per JarBundler ein Application Bundle und daraus ein .DMG File erstellt wird.

Nun zum Problem:
Unsere Anwendung aktualisiert sich über eine selbstgeschriebene Update Routine. D.h. Die Anwedung ruft per http eine XML Datei auf dem Update Server auf, vergleicht die Versionsnummer und downloadet die Files, die in der XML Datei definiert sind. Die Dateien werden in das Home Verzeichnis der Anwendung installiert. Man kann aber auch Unterordner in der XML angeben, die auch berücksichtigt werden.

Für Mac würde das bedeuten, dass Die Anwendung die aktuellen .jar Dateien downloadet und im Application Bundle unter ANWENDUNG.app/Contents/Resources/Java/ speichert.

1. Frage: Ist das so OK bzw. üblich? Oder wie machen das andere Java Desktop Anwendungen?

2. Frage: Könnte das zu Rechte-Problemen führen? D.h. könnte der Fall auftreten das der User z.B. keine Schreibrechte auf das Application Bundle hat?
 

Guybrush Threepwood

Top Contributor
Das dürfte nur dann funktionieren, wenn der User das App-Bundle in seinem Home-Verzeichnis ablegt. Unter Programme sind vermutlich SuperUser-Rechte notwendig und dann wird es knifflig. Es gibt eine Bib dafür, aber muss dann natürlich unterschiedliche Fassungen für die verschiedenen Betriebsysteme entwickeln: osx - I need to give a java application super user access to view protected files on a mac - Stack Overflow
Es funktioniert auch dann nicht (und zwar gar nicht), wenn das APP-Bundle signiert ist. Das ist dann notwendig, wenn es per AppStore ausgeliefert wird oder neuerdings, wenn das AppBundle aus dem Netz geladen wurde (Stichwort GateKeeper). Wenn die Auslieferung über ein Read-Only-Medium stattfindet, dann muss es nicht signiert sein.

MacOS X ist für Entwickler eine echte Qual.
 
A

Absolpfent

Gast
Probier's doch einfach aus. Ich überschreibe in meinem updater im Moment einfach das ganze app Bundle aus dem update dmg mit cp und das klappt problemlos ohne root rechte. Sollte also auch klappen wenn du nur eine jar im bundle aktualisierst.
 

Guybrush Threepwood

Top Contributor
Probier's doch einfach aus. Ich überschreibe in meinem updater im Moment einfach das ganze app Bundle aus dem update dmg mit cp und das klappt problemlos ohne root rechte. Sollte also auch klappen wenn du nur eine jar im bundle aktualisierst.

Das komplette Überschreiben des app bundles ist scheinbar auch die favorisierte Option von Apple. Das Dumme ist allerdings, dass auf diese Weise jemand bei einem Update an das komplette Programm herankommt, was bei kommerzieller Software weniger schön ist. Manchmal will man ja auch nur einzelne Jar-Dateien oder Ressourcen aktualisierten. Das Schreiben in ein App-Bundle geht prinzipiell (ist ja nur eine Ordnerstruktur), aber man kann nicht sicher sein, dass es auch tatsächlich funktioniert: osx - Writing inside Mac application package/folder with Java - Stack Overflow (Erste Antwort)

Ich stehe momentan selbst vor diesem Problem und bin etwas ratlos. Meine Versuche mit dem PackageMaker waren diesbezüglich auch nicht erfolgreich. Wenn jemand dafür einen passenden Vorschlag hat wäre ich ebenfalls sehr dankbar.
 

eskimo328

Aktives Mitglied
Probier's doch einfach aus. Ich überschreibe in meinem updater im Moment einfach das ganze app Bundle aus dem update dmg mit cp und das klappt problemlos ohne root rechte. Sollte also auch klappen wenn du nur eine jar im bundle aktualisierst.

Wie machst du das dann genau?

Bei uns funktioniert das so, dass alle Pfade vom Installationsverzeichnis ausgehen, z.B. "C:\Programme\ANWENDUNG\". Darin gibt es ein Unterordner "lib" indem alle .jar files und auch die .exe Datei liegen. Weiterhin gibt es z.B. ein "img" Verzeichnis für Logos etc.

In der Update XML ist die aktuelle Versionsnummer sowie die Dateien definiert, die aktualisiert werden sollen. Also da steht z.B. drin, dass die Datei "abc.jar" nach "lib\abc.jar" installiert werden soll. Oder "logo.jpg" nach "img\logo.jpg". Das herunterladen/aktualisieren der Datei übernimmt die eigentliche Anwendung und kein separater Updater.

Problem bei Mac: Die .jar Files liegen in ".../Contents/Resources/Java/". D.h. bei Mac wäre sozusagen ".../Contents/Resources/" das Installationsverzeichnis? Und Für Mac müsste ich "lib" durch "Java" ersetzen. Dann sollte das klappen?
Oder gibt es bessere Ideen?
 
N

newMAC

Gast
Mach es dir doch ganz einfach:
1) verzichte auf dieses umständliche Rumgehampel mit Setup-Packages und baue dir das lieber selbst zusammen
2) lege ALLE Daten unterhalb von user.home ab, denn dort bestehen für den User immer volle Schreibrechte
3) verwende einen Launcher, also etwas was VOR dem eigentlichen Start deiner App geladen wird und dabei gleich auf Updates prüft, danach greift der Launcher dierekt auf die unter user.home/.deineapp/jar auf die entsprechenden JARs zu (wenn möglich mit URLClassLoader) und startet so die eigentliche "main-Klasse"
4) da Windows auch solche Einschränkungen hat versuche es doch einfach halbwegs genau so auf MAC umzusetzen, sich da extra in OS-spezifische App-Packages einarbeiten ist für den Anfang der MAC-Entwicklung ziemlich sinnfrei


Das wäre so meine Idee. Nehmen wir als Beispiel mal Minecraft: dort gibt es auch nur einen Launcher (unter Windows mit Launch4J in eine EXE gewrapped) und diese wird "ausgeführt". Beim Start zieht der Launcher alle daten und packt sie irgendwo unter user.home (unter Windows in %APPDATA%).
Da es außer der EXE für Windows nur eine JAR für Unix/Linux/Mac gibt sollte der Funktionsablauf dem der Windows-EXE ähnlich sein.
Versucht es doch so zu lösen. Dann hast du volle Kontrolle über deine Daten und musst dich nicht mit irgendwelchen DMG oder sonstwas rumschlagen. Das ist IMO halt deutlich einfacher. Und wo dann der User das Launcher-JAR ablegt sollte so ziemlich egal sein, dürfte aber zu 99% auch irgendwo unter user.home sein ala "Downloads" oder "Desktop" oder wo auch immer.
 

eskimo328

Aktives Mitglied
Die Idee mit dem Launcher finde ich gar nicht so schlecht.
D.h. für Mac würde ich eine kleine Launcher Anwendung basteln und als App-Bundle verpacken (und als DMG verteilen).
Dann könnte ich, glaube ich, sogar die Windows-Variante belassen wie sie ist. Also ohne Launcher. Denn ich kann nicht die Bestandskunden alle so einfach umstellen.

Müsste man mal genauer drüber nachdenken. Hört sich aber nicht so verkehrt an.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Kochbuch bzw. Rezepte-Datenbank app mit Swing..? Allgemeine Java-Themen 5
I Swing GUI / Webapp..... benötige ein paar Tips / Ratschläge Allgemeine Java-Themen 18
KeTho1712 Java Swing: JTable standardmäßig füllen, sodass bei Start bereits Datensätze gespeichert sind Allgemeine Java-Themen 1
C Swing File[] als klickbare links in irgendeinem Swing Element Allgemeine Java-Themen 3
RalleYTN 2D-Grafik Bild ohne AWT, Swing und JavaFX rotieren Allgemeine Java-Themen 12
T Methoden Swing/Graphics/draw Allgemeine Java-Themen 6
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
N GUI Interface, swing Allgemeine Java-Themen 7
J Swing Cursor.WAIT funktioniert nicht nach JFileChooser Allgemeine Java-Themen 1
V Input/Output Swing Icons in Jar Archiv laden Allgemeine Java-Themen 10
M for Schleife mit Swing Button abbrechen Allgemeine Java-Themen 7
O Swing + EJB Allgemeine Java-Themen 4
M JavaFX-Gegenstück zu Swing-Button-DoClick-Methode Allgemeine Java-Themen 5
T HTTP HttpWebRequest in Swing-Projekt nutzen Allgemeine Java-Themen 4
G Input/Output Manuelle Änderung von Wert in Swing Komponente bemerken! Allgemeine Java-Themen 2
K Threads - Swing - Synchronisation nötig? Allgemeine Java-Themen 8
J [SWING]Elegante Java Formular Lösung? XML? Allgemeine Java-Themen 4
M Swing-Frontend abhängig von ausgewähltem Objekt Allgemeine Java-Themen 4
I Swing Welche Swing Komponente soll ich nehmen? Allgemeine Java-Themen 2
L Web-Framework und Swing Framework o.ä Allgemeine Java-Themen 15
Y Anwendung starten(JAR) - Entscheidung Konsole oder Swing Allgemeine Java-Themen 5
A Swing paintcomponent komischer Fehler Allgemeine Java-Themen 6
algorismi Google maps in Java Swing Allgemeine Java-Themen 2
nrg Swing 2 Fragen zu Swing/AWT Allgemeine Java-Themen 7
T Jakarta Objekt (Excel Sheet) in Swing/SWT einbetten Allgemeine Java-Themen 3
D Organigramm mit GWT oder Swing Allgemeine Java-Themen 4
E Swing hilfe, JWindow mit eintrag in taskleiste Allgemeine Java-Themen 2
M Name der Swing Komponente Allgemeine Java-Themen 3
A awt und swing Allgemeine Java-Themen 3
MQue Swing-Componenten -> JavaBean Allgemeine Java-Themen 5
H Schrifthöhe berechnen / Swing Allgemeine Java-Themen 5
Z Swing vs Konsole Allgemeine Java-Themen 17
T Wo ist javax.swing.TransferHandler enthalten? Allgemeine Java-Themen 10
ARadauer Scaffolding für Swing Anwendungen Allgemeine Java-Themen 4
? Swing Anwendung aus Konsole starten Allgemeine Java-Themen 7
H Webseiten aus Swing Allgemeine Java-Themen 4
B SBCC - Swing Better Components Collection - downloadlink ? Allgemeine Java-Themen 5
G Feld Validierung in Swing Programm Allgemeine Java-Themen 6
G Swing Validierungs Framework Allgemeine Java-Themen 2
A Klappmechanismus bei Components(SWING) Allgemeine Java-Themen 8
M Swing funktioniert und funktioniert nicht Allgemeine Java-Themen 4
O Swing oder JMF Problem Allgemeine Java-Themen 11
M Swing JButton Farbe zurücksetzen Allgemeine Java-Themen 6
P RTF dynamisch machen (IText, Swing) Allgemeine Java-Themen 4
E Thread Fragen in Verbindung mit Swing Allgemeine Java-Themen 4
G java applet mit swing -> hundert prozent cpu auslastung Allgemeine Java-Themen 11
S Swing-Projekt zum Üben Allgemeine Java-Themen 5
I Servlet von einem Swing Based GUI aufrufen Allgemeine Java-Themen 5
D Spezielles Eingabefeld für Numerische Werte in Swing Allgemeine Java-Themen 2
G Swing vs. RCP Allgemeine Java-Themen 9
T substring() und Swing setText() Allgemeine Java-Themen 6
A Hibernate und Swing Allgemeine Java-Themen 2
S SWING Problem Allgemeine Java-Themen 2
S SWING UND AWT!Problem wegen Canvas! Allgemeine Java-Themen 29
clemente Swing Applikation killt kwin Prozess (unter Linux / KDE) Allgemeine Java-Themen 3
T Exception at javax.swing.plaf.basic.BasicTableUI.paintCell Allgemeine Java-Themen 3
S Swing - Problem mit Fenster-/Komponenten-Größe Allgemeine Java-Themen 3
M swing und windows registry Allgemeine Java-Themen 11
A Swing hat ein leicht verändertes Aussehen, wie findet ihrs? Allgemeine Java-Themen 28
M Was soll ich benutzen? Java2D, Java3D, Swing, AWT?? Allgemeine Java-Themen 21
U Frage zu Swing Allgemeine Java-Themen 4
B Hintergrund bei Swing Allgemeine Java-Themen 6
K swing frage (komisches swing) <-- manoman was für n threa Allgemeine Java-Themen 2
J Chatprog schließen,AWT + Swing Allgemeine Java-Themen 4
F InfluxDB Client, fehlende Referenz Allgemeine Java-Themen 5
F Einfacher TCP Client (non blocking) Allgemeine Java-Themen 1
OnDemand ApacheCommon FTP Client zuckt nicht Allgemeine Java-Themen 3
E Server Client Audio Allgemeine Java-Themen 6
E Server Client Audio Allgemeine Java-Themen 0
TonioTec Api für Datenaustausch zwischen Client und Server Allgemeine Java-Themen 0
C Java RMI Client - Server Allgemeine Java-Themen 0
S Simples Client Server Setup in Java Allgemeine Java-Themen 4
M JVM: Client Software Logging und Profiling aktivieren Allgemeine Java-Themen 1
OnDemand REST Client programmierens Allgemeine Java-Themen 4
J Soap Client mit mehreren URLs in Servlets Allgemeine Java-Themen 0
T Google Distance Matrix API Hello World/ Client Secret Allgemeine Java-Themen 3
C Hang Man Server Client Allgemeine Java-Themen 3
C Hang man mit Server/Client Allgemeine Java-Themen 2
M OOP IRC Client Allgemeine Java-Themen 3
B Web-Anwendung funktioniert mit Java 1.8, aber nicht mit Java 1.7 (auf Client) Allgemeine Java-Themen 5
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Allgemeine Java-Themen 3
P CXF 3.0.1 WebService- Client Allgemeine Java-Themen 0
M Checksummenprüfung bei Client Server kommunikation Allgemeine Java-Themen 3
B Java Mail Client als Outlook ausgeben Allgemeine Java-Themen 2
Z Java E-Mail Client mit End-to-End-Verschlüsselung Allgemeine Java-Themen 4
E Socket Client-Server-Programmierung Allgemeine Java-Themen 44
T Java Streaming-Server & Streaming-Client Allgemeine Java-Themen 4
0 Lösungsweg Client Server Kommunikation Fehlermeldung ausgeben Allgemeine Java-Themen 12
D Client / Server Allgemeine Java-Themen 23
M HTTP Client Zertifikat sicher übertragen? Wie? Allgemeine Java-Themen 2
Z Threads Thread für einen Client Allgemeine Java-Themen 9
J Zugriff auf Poker-Client Fenster Allgemeine Java-Themen 14
G REST Client / URL Parser Allgemeine Java-Themen 2
S Java Kommandozeilen - Client Allgemeine Java-Themen 3
T JPA Entity im Client-Server-Umfeld Allgemeine Java-Themen 19
M Client für einen Webservice erstellen (ONVIF) Allgemeine Java-Themen 3
B mehrere services in einem client Allgemeine Java-Themen 10
D Versuch Server - Client anwendung Allgemeine Java-Themen 9
T Welcher Server? JSP und Client-Anwendung Allgemeine Java-Themen 4
MQue Server- Thread Client Allgemeine Java-Themen 2

Ähnliche Java Themen


Oben