sobota, września 21, 2024

Aplikacja w Java'ie jako coś w czym można przeglądać pliki w macOS

Człowiek by myślał, że w zbudowaniu czegoś do wyświetlania plików największym problemem jest zrobienie samego wyświetlania, bo przecież coś takiego jak przekazanie pliku do narzędzia to pikuś.

Argumenty przekazywane do aplikacji to coś co wspiera chyba każdy język, więc naturalne byłoby użycie tego mechanizmu....

Ale nie, w macOS to zrobili inaczej ;-)

I jak chcesz popełnić apkę, która potrafi wyświetlić jakieś pliki (w naszym przykładzie txt) to trzeba zrobić parę rzeczy....

W kodzie trzeba powiedzieć, że chcielibyśmy przechwytywać otwieranie plików

Desktop.getDesktop().setOpenFileHandler(e -> {
System.out.println("File opened: "+e.getFiles().get(0).getAbsolutePath());
var file = e.getFiles().get(0);
var path = file.getAbsolutePath();

ale to za mało... bo jeszcze musimy powiedzieć o tym wyraźnie macOSowi plikiem Info.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>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>txt</string>
</array>
<key>CFBundleTypeName</key>
<string>Text File</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
</dict>
</array>
</dict>
</plist>
Kluczem jest podanie poprawnego typu plików.... niby txt jest dość oczywiste, ale wcześniej próbowałem to co sugerował Internet w osobie ChatGPT ;-) czyli public.plain-text...
Ale oczywiście plik Info.plist jakoś trzeba połączyć z naszym JARem....
I do tego służy jpackage:
jpackage --input <folderWithJAR> --name <NameOfApp> \
 --main-jar <nameOfJARfileInInputCatalog> \
--resource-dir <pathToFolderWiht_Info.plist>
To nam wyprodukuje plik dmg, którego możemy używać do instalowania aplikacji ;-) Na moim komputerze plik waży "niecałe" 56 MB ;-) a po instalacji apka waży jakieś 130-150 MB ;-)


Podobne postybeta
Z NMEA do KML (chyba najbardziej kryptyczny tytuł postu jak stworzyłem ;-))
Robimy widget do Windows 7 :-)
Niecne wykorzystanie refleksji... czyli jak poszukać tekstu w drzewie obiektów? ;-)
Jak walczyć z gigantycznym kodem w Java'ie, część 1 ;-)
Prosty spell checker, czyli jak umiejętnie połączyć teorie z praktyką

Brak komentarzy:

Prześlij komentarz