OmniFrameworks: Einstellungen für funktionierendes prebinding

  • OmniFrameworks: Einstellungen für funktionierendes prebinding

    Ich verwende in meiner App die OmniFrameworks und die von CocoaTech.
    Wenn ich nun ein deployment-build mit prebinding machen möchte, sagt mir der Linker, dass prebinding deaktiviert wurde, da OmniAppKit keine prebinding informationen enthält (oder so ähnlich).

    Bei allen Frameworks und auch bei meiner App habe ich Prebinding in den Einstellungen aktiviert und darauf geachtet, dass unter -seg1addr überall eine andere Adresse steht.

    Kennt jemand eine Einstellung für die OmniFrameworks, damit Prebindung funktioniert?

    Gruß,
    Tjark
  • RE: OmniFrameworks: Einstellungen für funktionierendes prebinding

    Original von chacko
    Ich verwende in meiner App die OmniFrameworks und die von CocoaTech.
    Wenn ich nun ein deployment-build mit prebinding machen möchte, sagt mir der Linker, dass prebinding deaktiviert wurde, da OmniAppKit keine prebinding informationen enthält (oder so ähnlich).


    Oder so ähnlich !? Wie lautet die Fehlermeldung genau?

    Bei allen Frameworks und auch bei meiner App habe ich Prebinding in den Einstellungen aktiviert und darauf geachtet, dass unter -seg1addr überall eine andere Adresse steht.


    Es muß nicht nur eine andere Adresse da stehen, sondern auch der richtige Offset im richtigen Bereich, damit es keine Überlappungen gibt.

    Kennt jemand eine Einstellung für die OmniFrameworks, damit Prebindung funktioniert?


    Wie lauten Deine Einstellungen?
    Ansonsten kannst Du prebinding ab spätestens 10.3.5 auch getrost vergessen, wenn Du nicht unbedingt auf eine etwas geringere Startzeit Deines Programmes (und nur darum geht es eigentlich bei Prebinding) verzichten kannst.

    t.
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?
  • RE: OmniFrameworks: Einstellungen für funktionierendes prebinding


    Oder so ähnlich !? Wie lautet die Fehlermeldung genau?

    Ausgabe:
    warning prebinding disabled because dependent library: @executable_path/../Frameworks/OmniAppKit.framework/Versions/2004A/OmniAppKit is not prebound


    Wie lauten Deine Einstellungen?


    Ich habe folgende Parameter für -seg1addr. Die CocoaTech frameworks haben bereits das wie folgt eingetragen für den deployment-style, bei den OmniFrameworks musste ich mir selber was aus den Finder saugen (die von Omni sind übrigens keine native Targets!):
    CocoaTechBase: 0x1a000000
    CocoaTechFoundation: 0x1b000000
    CocoaTechStrings: 0x1ff00000
    CocoaTechID3: 0x22000000

    OmniBase: 0x1c000000
    OmniFoundation: 0x1d000000
    OmniAppKit: 0x1e000000

    Ansonsten kannst Du prebinding ab spätestens 10.3.5 auch getrost vergessen, wenn Du nicht unbedingt auf eine etwas geringere Startzeit Deines Programmes (und nur darum geht es eigentlich bei Prebinding) verzichten kannst.

    Könntest du das etwas genauer erklären?
    Mein Programm benötigt (subjektiv) relativ lange zum Starten. Ich könnte mir vorstellen, dass das an den vielen Frameworks liegt, die zur Laufzeit gebunden werden müssen. Ich hoffe, dass da Prebinding hilft.

    Danke,
    Tjark
  • RE: OmniFrameworks: Einstellungen für funktionierendes prebinding

    Die Fehlermeldung bedeutet übersetzt:

    Ich kann die Applikation nicht vorbinden, weil das verwendete Framework von Omni nicht vorgebunden ist. Irgenxdwie ist das ja auch verständlich.

    Du müsstest also die Omni-Frameworks selbst mit einem prebind neu übersetzen.

    Was tsunamix sagen will, ist:
    Das Vorbinden sorgt dafür, dass die Verbindung zwischen Framework und Applikation zur Linkzeit fest gebunden wird. Das hat Nachteile, insbesondere was Updates angeht. Wenn du kein Prebinding verwendest, sucht sich OS X zur Startzeit das Framework und bindet dieses an deine Applikation. Was also vorher schon in Xcode gemacht wurde, wird jetzt erst von OS X gemacht. Das kostet natürlich beim Start Zeit. Diese Investition ist aber in der Regel sinnvoll!

    Es gibt übrigens Programme, die das Prebinding nachträglich hinzufügen, womit auch fremde Applikationen schneller starten.

    Es dürfte inzwischen bekannt sein, was ich von derlei Tricks halte. ;)
    *Mal ein bisschen Weihwasser versprüht, damit dieses Teufelszeugs weggeht.*
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: OmniFrameworks: Einstellungen für funktionierendes prebinding


    Ich kann die Applikation nicht vorbinden, weil das verwendete Framework von Omni nicht vorgebunden ist. Irgenxdwie ist das ja auch verständlich.

    Du müsstest also die Omni-Frameworks selbst mit einem prebind neu übersetzen.

    Ist mir bekannt;-)

    Es geht mir jetzt darum, die Einstellungen zu finden, so dass das Prebinding funktioniert. Wie ich in meinem ersten Post geschrieben habe, habe ich die OmniFrameworks mit aktiviertem Prebinding übersetzt. Aber offensichtlich habe ich irgendetwas nicht richtig gemacht.
    Das Häkchen bei "Prebinding" ist gesetzt und ich habe eine Start-Segmentadreese angeben (die "richtige"? siehe Adressen oben).

    Was tsunamix sagen will, ist:
    Das Vorbinden sorgt dafür, dass die Verbindung zwischen Framework und Applikation zur Linkzeit fest gebunden wird. Das hat Nachteile, insbesondere was Updates angeht. Wenn du kein Prebinding verwendest, sucht sich OS X zur Startzeit das Framework und bindet dieses an deine Applikation. Was also vorher schon in Xcode gemacht wurde, wird jetzt erst von OS X gemacht. Das kostet natürlich beim Start Zeit. Diese Investition ist aber in der Regel sinnvoll!

    Da die genannten Frameworks in das Applikations-Bundle mithineinkopiert werden, ist es meiner Meinung nach sinnvoll, dass das Prebinding im Auslieferungszustand schon funktioniert.

    Was ist denn seit 10.3.5 in diesem Zusammenhang anders?