2009-08-11 12 views
1

Ich habe vor kurzem eine statische Bibliothek (mobclix) zu meinem iPhone-Projekt hinzugefügt, bei der ich das Base SDK auf 3.0 setzen musste. Diese Bibliothek soll mit 2.2 kompatibel sein und bisher scheint es so zu sein. Ich habe das Implementierungsziel des Projekts auf 2,2 festgelegt. Keine Probleme dort.Wie kann ich die Kompatibilitätsversion für dylib in iPhone Projekten angeben?

Jetzt benutze ich auch libxml2 in diesem Projekt. Anscheinend ist die libxml2.2.dylib in OS 3.0 neuer als in OS 2.X (Version 10 bzw. 9). Mein Code, der libxml2 verwendet, war jedoch bereits mit der libxml2-Version von OS 2.X kompatibel. Da ich das Base SDK auf 3.0 setzen musste, wird die "Kompatibilitätsversion"/Mindestversionsanforderung/-abhängigkeit automatisch auf die neuere Version von libxml2 gesetzt. Wenn ich versuche, die app in OS 2 zu laufen, erhalte ich diese Laufzeitfehler (natürlich):

Dyld Error Message: 
    Library not loaded: /usr/lib/libxml2.2.dylib 
    Referenced from: /Users/Martijn/Library/Application Support/iPhone Simulator/User/Applications/4D5456DE-F297-4DF4-ACA6-DA8BBBBBA914/Luisterpaal.app/Luisterpaal 
    Reason: Incompatible library version: Luisterpaal requires version 10.0.0 or later, but libxml2.2.dylib provides version 9.0.0 

Ist es möglich, irgendwo die Version Anforderung außer Kraft zu setzen? Oder andere Ideen, um dieses Problem zu lösen?

+0

Ihre Fehler von einem Versuch, sind es im Simulator auszuführen, wird dies auch auf echte Hardware passiert eigentlich? Binär Kompatibilität zwischen Simulator-Versionen ist eine ganz andere Sache, die Kompatibilität zwischen iPhone OS Firmware. –

+0

Ich warte immer noch auf die Absturzberichte. Bei der Beurteilung der sichtbaren Symptome (Absturz der App beim Start) könnte dies das Problem sein ... –

+0

Es passiert auch auf dem Gerät. –

Antwort

0

Die Kompatibilitätsversion wird entsprechend der Version festgelegt, die während des Builds in die Dylib des aktuellen SDK eingebettet ist. Ich habe keine Möglichkeit gefunden, dies zu ändern oder zu überschreiben.

Allerdings gibt es im Ziel in Xcode unter dem Zweig "Verknüpfung mit Binärdateien mit Bibliotheken" eine Option, eine Dylib "schwach" zu verknüpfen. Dies überspringt die Versionsüberprüfung zum Zeitpunkt des Ladens der Dylib (Runtime). Es liegt in Ihrer Verantwortung, nur zu bestehenden Funktionen zu telefonieren. Das Aufrufen von nicht vorhandenen Funktionen führt zum Absturz der Anwendung.