2015-08-14 9 views
5

Ich arbeite an einer App, die kurz vor dem Start ist, aber das ABAddressBook-Framework verwendet. Muss ich bei der Vernachlässigung von ABAddressBook in iOS9 die iOS-Version des Benutzers überprüfen und ABAddressBook für Benutzer vor iOS9 und CNContact für Benutzer von iOS9 verwenden?ABAddressBook to CNContact App Transition

Wie gehen alle anderen damit um? Ich war noch nie in einer solchen Situation.

+0

Haben Sie einen Weg gefunden, mit diesem umzugehen? – rordulu

+1

Ich würde gerne wissen, wie jeder damit umgeht –

+0

Nein, ich habe immer noch keine Antwort gefunden. – Felker

Antwort

4

Ich habe mich auch mit diesem Thema beschäftigt und recherchiert, was ich gewählt habe, ist, wie Sie vorschlagen; Besuche die Benutzer iOS-Version so etwas wie die folgenden Aktionen ausführen:

NSString *version = [[UIDevice currentDevice] systemVersion]; 
BOOL isVersion8 = [version hasPrefix:@"8."]; 
BOOL isVersion7 = [version hasPrefix:@"7."]; 
//... 

... auf den Versionen basierten Fortsetzen Sie sich entschieden haben, für Ihre Anwendung zu unterstützen.

Dann überprüfe ich, ob ich das Adressbuch-Framework für älter als iOS 9 und das Kontakte-Framework für iOS 9 und höher verwenden soll.

if(isVersion7 || isVersion8){ 
    //Use AddressBook 
    } 
else{ 
    //Use Contacts 
} 

dass der beste Weg ist, was ich denken konnte mit diesem deprecation Geschäft zu beschäftigen ...

+0

Es ist zwei Wochen her, und ich denke, dies ist die einzige Option, also markiere ich das als beantwortet. Wenn eine bessere Option kommt, werde ich es ändern. Danke, UberJames! – Felker

2

Veraltete bedeutet nicht entfernt. Machen Sie einfach eine Verknüpfung zu beiden Frameworks als optional und beginnen Sie mit dem Entwurf eines Daten-Workflows, der beide Frameworks verarbeiten kann. Bedenken Sie auch, dass CNContact neu und voller Fehler ist.

Sobald denken Sie Ihre App Refactoring und iOS entwickelt, um 9.1 geben sie grünes Licht

Wie kann man wissen, ob die Systemfunktionalität unterstützt

1) Überprüfen Sie, ob die Klasse existiert

if(NSClassFromString(@"CNContact")) { 
    // Do something 
} 

Für schwach verknüpfte Klassen ist es sicher, die Klasse direkt zu melden. Dies gilt insbesondere für Frameworks, die nicht explizit als "Erforderlich" verknüpft sind. Bei fehlenden Klassen wird der Ausdruck als null ausgewertet.

2)

#ifned NSFoundationVersionNumber_iOS_9 
#def NSFoundationVersionNumber_iOS_9 NUMBER 
#endif 

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_9) { 
    // Use address book 
} else { 
    // Use contact framework 
} 

Führen Sie die App im Simulator die NSFoundationVersionNumber Konstante

0
if #available(iOS 9, *) 
{ 
    // iOS 9 - CNContact 
} 
else 
{ 
    // iOS 8 - ABAddressBook 
} 

Dies ist der richtige Weg, um zu überprüfen zu finden.