Frage

Ich versuche, eine App zu aktualisieren ( Clarke ) 10.6 Kompatibilität zu gewährleisten.

Mein Plan ist, zwei verschiedene Codepfade zu verwenden, je nach Version von OSX verwendet wird.

Am 10.5 wird es einen Controller verwenden, die aus vollständig benutzerdefinierten Code besteht, die nicht abhängig von einem bestimmten Cocoa-API ist. Am 10.6 wird es einen anderen Controller verwenden, die die neue Corelocation-API in einer identischen Schnittstelle Wraps, basiert auf der gleichen abstrakten Klasse. Zur Laufzeit schaltet die App zwischen den Controllern durch die OS-Version zu erkennen.

Dies funktioniert auf 10,6 für die SDK 10.6 gebaut, aber das gleiche Build sprengt auf 10.5 mit:

10/09/2009 18:30:50 [0x0-0x12f12f].uk.co.tomtaylor.Clarke[4575] dyld: unknown required load command 0x80000022 
10/09/2009 18:30:51 com.apple.launchd[403] ([0x0-0x12f12f].uk.co.tomtaylor.Clarke[4575]) Exited abnormally: Trace/BPT trap 

Wenn ich für 10.5 SDK bauen sie die Corelocation Sachen nicht zusammenstellen können, natürlich.

Ich hatte gehofft, der Lage sein, eine einzelne binäre für diese Anwendung bereitzustellen. Gibt es eine Möglichkeit zu ‚verstecken‘ die Corelocation API von 10,5?

War es hilfreich?

Lösung

Es sollte möglich sein, dieses Problem zu lösen, indem sie die Build-Einstellungen Ihres Ziel Ändern:

  1. Stellen Sie die Basis SDK auf 10,6
  2. Stellen Sie das Deployment SDK auf 10,5

Andere Tipps

Der Trick Deployment SDK funktioniert nur, wenn Sie den gleichen Rahmen haben beide auf Plattformen aber neue Anrufe in der neueren. Für Corelocation, fehlt der gesamte Rahmen auf 10,5, so dass Ihre App laden fehl, weil es nicht dynamisch an den Rahmen binden kann.

Sie müssen die oben genannten tun, und Corelocation als schwacher Rahmen hinzuzufügen. Wählen Sie ein Link-Frameworks und Binaries Phase bauen, findet Corelocation in der Detailansicht und in der mittleren Spalte ändern „Required“ bis „schwach“.

Wenn Sie Ihre App bauen, wird Xcode passieren -weak_framework Corelocation an den Linker, und Ihre Anwendung lädt auf alle 10.5 und 10.6 Systeme unabhängig davon, ob Corelocation vorhanden ist. Es liegt an Ihnen, um sicherzustellen, dass keine Corelocation Methoden aufrufen, wenn Sie tatsächlich auf 10.6 laufen, though.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top