.app-Ordner-Inhalt?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • .app-Ordner-Inhalt?

    Hallo allezusammen,

    was muss in den .app-Ordner einer Anwendung alles rein? Ich entwickle mit Eclipse und eigenen make-files. Wenn ich das "nackte" executable starte, bekomme ich weder ein Programmsymbol im Dock noch eine Menüleiste oder Fensterrahmen. Wenn ich das executable in MeineAnwendung.app/Contents/MacOS/ kopiere, dann läuft alles wunderbar. Allerdings nur, wenn ich's aus Eclipse oder von der Kommandozeile aus starte. Wenn ich im Finder doppelklicke schiebt sich kurz das Programmsymbol im Dock auf und schließt sich gleich wieder. Das war's. Ich hab auch schon mal versucht, eine Info.plist Datei ins Contents-Verzeichnis zu legen. Ergibt aber keine Änderung.

    Weiß da jemand weiter?

    Gruß
    eloso
  • Du brauchst folgende Ordnerhierarchie:

    Contents
    >Info.plist (Mit all den Attributen wie Icon, Name, Version etc.)
    >Resources (Bilder, Texte, Nibs, alles was die App braucht)
    >MacOS
    >>Executable (Im MacOS Ordner liegt die Executable. Sollte (weiss nicht ob muss) den selben namen wie die app haben (ohne .app)

    Das wärs, glaube ich.


    Gruss,
    Fabian
  • Danke für die Tipps. Das hat leider irgendwie nicht geholfen. Die Anwendung wird nicht gestartet. Ich hab jetzt noch mal die Info.plist überarbeitet und genau die Schlüssel drin, die auf der apple-Seite als "required" angegeben sind. Die Ordnerhierarchie hab ich auch genau so. Das Resource-Verzeichnis ist leer (ich hoffe, das ist ok), da meine App (noch) keine Resourcen benötigt.

    Irgendwie bin ich ratlos. Debuggen kann ich ja auch nicht, da unter Eclipse und Kommandozeile alles läuft...

    Woran könnte das denn noch liegen?

    Gruß
    Björn
  • Hat sich schon erledigt. Als ich gerade 'ne minimale Testapplikation zusammengestellt habe, funktionierte die komischerweise. Naja, dann hab ich die nach und nach mit Inhalt gefüllt und siehe da, sie startet plötzlich nicht mehr. Das liegt daran, dass, wenn ich die Applikation über den Finder starte, das aktuelle Verzeichnis das Root-Verzeichnis, also / ist. Ich versuche aber in meinem Programm eine Datei mit relativem Pfad zu öffnen, was fehl schlägt. Naja, und als Fehlerausgabe benutze ich vorrübergehend noch die console, die es ja nicht gibt, wenn ich die Anwendung über den Finder starte, dh. ich sehe keine Fehlermeldung und auch das "cin.get()" wartet nicht mehr. Tja, nicht sonderlich schlau gemacht von mir, aber darauf muss man erstmal kommen...

    Trotzdem vielen Dank an alle.

    Gruß
    eloso
  • Ooops. Ich arbeite jetzt seit ca. 2 Jahren mit Mac OS, aber das wusste ich noch nicht. Da steht ja alles drin. Meine ganzen schönen Fehlermeldungen ;-). Man lernt doch immer wieder etwas neues über dieses Betriebssystem. Ich weiß, dass ich mir die Konsole ganz am Anfang mal angeschaut habe und damit aber irgendwie nichts richtiges mit anzufangen wusste. Die war ja auch noch leer. Naja und seit dem hab ich die nie wieder gestartet.

    Vielen Dank nochmal!

    Gruß
    eloso
  • Original von Diskordia
    Ey, wenn du mit Eclipse programmierst, dann kannst du dein Programm ganz einfach als Applikations bundle exportieren?

    Was heißt als Applikations bundle exportieren? Ich habe mir jetzt einmal das Bundle erstellt (sind ja nur 3 Verzeichnisse und die Info.plist Datei) und lasse jetzt das Executable an der entsprechenden Position im .app Verzeichnis bauen. Das ist alles. Was soll ich da noch exportieren?

    Gruß
    eloso
  • Mit Eclipse kannst du direkt lauffähige App Bundle mach, ohne dass du die gesammte app struktor selbst bauen musst!

    1. Gewünschtes Projekt anwählen
    2. Im Menu File auf Export klicken
    3. Mac os x applcation bundle auswählen und next drücken
    4. Startklasse auswählen und sonstige Einstellungen vornehmen
    5. Finish drücken

    Eclipse generiert dann automatisch ein lauffähiges App bundle! Wiso dann noch alls von Hand selber machen? Du machst dir da unnötigen aufwand!

    GruZZ Diskordia
    Ialea iacta est
  • @Diskordia: Sieht so aus, als ob das nur für Java-Applikatinen geht, richtig? Ich programmiere zur Zeit mit C++. Sonst wär's sicherlich ganz nett, obwohl das ja nun auch nicht so ein großer Aufwand ist, das Bundle zu erstellen. Man muss es ja nur einmal pro Projekt machen.

    @læng: Ja, warum nicht. Gibt's das irgendwo zu saugen? Oder kannst Du's als Anhang posten?

    Gruß
    eloso
  • Ja, gibt's zu saugen, wenn du noch ungefähr ne halbe Stunde Geduld hast, ich muss es nämlich noch fertig programmieren und hab ein dummes kleines Problem ;)

    Du wirst mit der App aber erstmal wirklich nur eine einfache .app machen können, ohne Resources und so.

    læng
    "Wales is the land of my fathers. And my fathers can have it." - Dylan Thomas
  • Achja:
    Als mittelgutes Script hab ich das jetzt schon:

    Brainfuck-Quellcode

    1. #! /bin/bash
    2. ### AppMaker.sh -- (c) læng Software 2005 ###
    3. ### Published under the temrs of the BSDL ###
    4. VERSION=0.2
    5. createApp()
    6. {
    7. echo ".:|Welcome to AppMaker.sh|:."
    8. echo "Enter file to pack to a .app"
    9. read APP
    10. echo "-----------"
    11. echo "Start packing to .app ..."
    12. echo "-----------"
    13. echo "creating "$APP".app ..."
    14. mkdir $APP.app
    15. echo "creating "$APP".app/Contents ..."
    16. mkdir $APP.app/Contents
    17. echo "creating "$APP".app/Contents/MacOS ..."
    18. mkdir $APP.app/Contents/MacOS
    19. echo "copying "$APP" to "$APP"/Contents/MacOS/"
    20. cp $APP $APP.app/Contents/MacOS/
    21. echo "Finished."
    22. }
    23. createAppQuiet()
    24. {
    25. echo "Enter file to pack to a .app"
    26. read APP
    27. mkdir $APP.app
    28. mkdir $APP.app/Contents
    29. mkdir $APP.app/Contents/MacOS
    30. cp $APP $APP.app/Contents/MacOS/
    31. }
    32. showVersion()
    33. {
    34. echo $VERSION
    35. }
    36. showHelp()
    37. {
    38. echo "-v Print script's version"
    39. echo "-q Quiet mode"
    40. echo "--help Print this message"
    41. echo "-h Same as --help"
    42. }
    43. case "$1" in
    44. -v) echo $VERSION ;;
    45. -q) createAppQuiet ;;
    46. --help) showHelp ;;
    47. -h) showHelp ;;
    48. *) createApp ;;
    49. esac
    Alles anzeigen


    læng
    "Wales is the land of my fathers. And my fathers can have it." - Dylan Thomas
  • Sieht ja ganz nett aus, aber bis jetzt tut es noch nicht mehr, als mein Bauprozess, bei dem ich als Ausgabeverzeichnis einfach "bla.app/Contents/MacOS" angegeben hab. Im übrigen reicht dazu ein "mkdir -p" aus, dann muss man nicht jede Verzeichnisebene einzeln erstellen.

    Das Executable an den richtigen Ort kopieren sollte sowieso der Bauprozess machen und nicht eine GUI-Applikation, da das ja nach jedem neu compilieren notwendig ist, und somit ganz schön umständlich wär. Wobei die GUI helfen kann, ist das, was man nur einmal macht, nämlich die Info.plist und evtl. notwendige Resourcen erstellen.

    Nicht, dass sich das so anhört, als ob ich Deine Arbeit niedermachen will. Nur hast Du zwar mit der einzig notwendigen Funktion, allerdings auch mit der, die jeder Standardbauprozess schon erledigen kann, angefangen. Die für mich wichtigste Funktion wäre das erstellen/editieren der Info.plist. Das kann man zwar auch mit dem PropertyList-Editor machen, aber dazu muss man die ganzen notwendigen Schlüssel und zugehörige Wertmengen kennen. Da könnte ein DotApp-Maker schon helfen. Das verwalten von Resourcen wäre vielleicht auch interessant, aber für mich zur Zeit nicht relevant, da mein Projekt plattformübergreifend ist und ich somit eine generische Resourcenverwaltung habe.

    Gruß
    eloso
  • @eloso
    Die executable wird doch schon nach bla.app/Contents/MacOS/ kopiert und sogar entsprechend umbenannt. Das mit den Resourcen mach ich auf jeden Fall noch.
    Das mit dem Info.plist kommt selbstverständlich auch noch, das ist ja nen Klacks. Nur weiß ich gar nicht, was diese Info.plist bringt...

    Wie meinst du das mit "das sollte der Bauporzess machen"? Das Makefile? Dann könntest du ja mein Skript benutzen, das ist ja schon fast fertig, da kann man das mit der Info.plist z.B. leicht hinzufügen. Würde ich machen, wenn da Interesse besteht.

    greeeetz
    læng
    "Wales is the land of my fathers. And my fathers can have it." - Dylan Thomas
  • Naja, so genau weiß ich auch nicht, was die Info.plist bringt. Ist wohl so 'ne Art Beschreibung für die Applikation, Copyright, etc... Müsste man vielleicht noch mal genau auf den Apple-Seiten nachlesen. Dass man die gar nicht braucht, habe ich auch erst gemerkt, nachdem ich meinen eigentlichen Fehler im Programm bemerkt hatte.

    Wie meinst du das mit "das sollte der Bauporzess machen"? Das Makefile?

    Ja, das makefile. Ich muss doch sowieso irgend ein Ziel für das executable angeben (wo der linker das hinlegen soll). Und da kann ich doch schon gleich als Pfad das .app-Bundle angeben. Da muss gar nichts kopiert werden. Wenn ich nach jedem Compilieren und vor anschließendem Testen/Debuggen jedesmal noch irgendetwas machen müsste, um das executable zu kopieren, wäre das nicht sehr effektiv.

    Wie schon gesagt ist das mit den Resourcen eine gute Idee und für andere, die nicht mit XCode programmieren sicherlich hilfreich, nur für mich ist das zur Zeit nicht so wichtig.

    Das mit der Info.plist wäre hingegen auch für mich interessant, wenn sie für irgendetwas wichtig ist.

    Gruß
    eloso
  • Jetzt versteh ich dich ;)
    Wenn ich die App nun um die Funktion, eine Info.plist zu erstelen erweitere, dann könntest du sie aber schon gebrauchen, du musst ja keine Datei angeben, die in die .app kopiert werden soll. Ich mach mich mal an die Arbeit ;)

    læng
    "Wales is the land of my fathers. And my fathers can have it." - Dylan Thomas