Embedded Framework: Header nicht ins Bundle kopieren

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

  • Embedded Framework: Header nicht ins Bundle kopieren

    Ich verwendet in meiner Applikation ein paar Frameworks, die ich in das App-Bundle/-Package mit integriere. Das funktioniert auch soweit ganz gut (mittels "Copy Files" mit Ziel "Frameworks").
    Das Problem ist nur, dass durch die Build Phase "Copy Files" die gesamten Frameworks inklusive deren Header ins Bundle kopiert werde. Die Header werden aber zur Laufzeit nicht mehr gebraucht, blähen die Applikationsgröße unnötig auf (in meinem Fall um 2,5 MB) und sollen deshalb dort nicht auftauchen!

    Wie mache ich es nun, dass beim "Installieren" der Frameworks ins Bundle die Header nicht mitkopiert werden? Es muss doch einen besseren Weg geben, als ein Skript zu schreiben, dass nachträglich die Header wieder löscht.
    Wenn ich mir so die Programme auf meiner Festplatte ansehe, integrieren ziemlich viele Applikationen Frameworks in ihr Bundle, und dort sind nirgendwo Header mit enthalten (es muss also eine Standard-Lösung geben)

    (So ein ähnliches Problem wurde schon hier diskutiert - allerdings landeten dort die Header im Resource-Verzeichnis, was sich dann richtig konfigurieren ließ).

    Gruß,
    Tjark
  • Mit lizenzbestimmungen bekommst du kein probleme, solange es deine eigenen Frameworks sind ;) Bei anderen würd ich micht an deiner Stelle vorher informaieren oder noch einfacher: nachfragen.

    Das Skript sollte dann ungefähr so aussehen:

    Quellcode

    1. cd "$BUILD_DIR"
    2. find . -name "*.h" -exec rm {} \;

    Einfach ne shell script build pahse einbauen und das hinzufügen :)

    Max
  • Ich verwende die Omni und CocoaTech Frameworks, die haben sehr laxe Lizenzbestimmungen.

    In der OmniGroup Mailinglist habe ich noch ein ganz gutes Script gefunden:
    For the record, this is the shell script that I was using. Rather than using the "rm" command it uses the "-delete" switch built in to the find command. The other difference is that I was using FULL_PRODUCT_NAME instead of FRAMEWORKS_FOLDER_PATH. I used the broader scope because I wanted to catch not only embedded frameworks, but frameworks embedded inside embedded applications in the Resources folder etc.

    SEARCH_DIR="${TARGET_BUILD_DIR}/${FULL_PRODUCT_NAME}"

    echo "Deleting PrivateHeaders (files, dirs and links) from \"${SEARCH_DIR}\"..."

    /usr/bin/find "${SEARCH_DIR}" \
    -type f \
    -path "*/PrivateHeaders/*" \
    -delete -print && \
    /usr/bin/find "${SEARCH_DIR}" \
    -name "PrivateHeaders" \
    -delete -print && exit 0

    exit 1


    Eine ebenfalls gute Idee finde ich die Ergänzung von below, das Script nur beim deployment build auszuführen, indem man die Befehel m Script folgendermaßen einklammert:
    if [ $BUILD_STYLE = "Deployment" ]
    then
    .....
    fi