EInen Button für eine spezifische Version von iOS verstecken

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

  • EInen Button für eine spezifische Version von iOS verstecken

    Hallo Leute

    Ich habe gerade erfolgreich Facebook und Twitter für iOS 6 integriert. Das ganze natürlich über das neue social.framework. Unter iOS 5 läuft Twitter noch über das alte twitter Framework. Nun, ich möchte mich da auf die Apple Integrationen beruhen, und aus diesem Grund, möchte ich den Button für Facebook verstecken, sofern eine iOS Version verwendet wird, die tiefer als iOS 6 ist. Das Deployment Target der App ist 5.1.

    Nun, als erstes muss ich ja checken, welche iOS Version aktuell läuft. Das mache ich mit:

    Quellcode

    1. [[UIDevice currentDevice] systemVersion]


    richtig?

    Nun möchte ich das, was ich da bekomme hier verwerten:

    Quellcode

    1. -(IBAction)speichern:(id)sender
    2. {
    3. [super speichern:sender];
    4. Apfeltalk_MagazinAppDelegate *appDelegate = [Apfeltalk_MagazinAppDelegate sharedAppDelegate];
    5. // :below:20090920 This is only to placate the analyzer
    6. myMenu = [[UIActionSheet alloc] init];
    7. myMenu.title = nil;
    8. myMenu.delegate = self;
    9. [myMenu addButtonWithTitle:NSLocalizedStringFromTable(@"Send Mail", @"ATLocalizable", @"")];
    10. if ([self showSaveButton]) // :below:20100101 This is something of a hack
    11. [myMenu addButtonWithTitle:[self Mailsendecode]];
    12. [myMenu addButtonWithTitle:@"Twitter"];
    13. [myMenu addButtonWithTitle:@"Facebook"];
    14. NSInteger lastButtonIndex = [myMenu addButtonWithTitle:NSLocalizedStringFromTable(@"Cancel", @"ATLocalizable", @"")];
    15. myMenu.cancelButtonIndex = lastButtonIndex;
    16. [myMenu showFromTabBar:[[appDelegate tabBarController] tabBar]];
    17. }
    Alles anzeigen


    Und zwar soll wie gesagt unterhalb iOS 6 der ButtonWithTitle:@"Facebook" schlicht versteckt werden. Wie könnte ich das umsetzen?
  • Also soweit bin ich schon mal:

    Quellcode

    1. myMenu = [[UIActionSheet alloc] init];
    2. myMenu.title = nil;
    3. myMenu.delegate = self;
    4. [myMenu addButtonWithTitle:NSLocalizedStringFromTable(@"Send Mail", @"ATLocalizable", @"")];
    5. if ([self showSaveButton]) // :below:20100101 This is something of a hack
    6. [myMenu addButtonWithTitle:[self Mailsendecode]];
    7. [myMenu addButtonWithTitle:@"Twitter"];
    8. // Check if the Device is running iOS 6 for Facebook integration, because on iOS 5 wie hide the Facebook-Button
    9. if ([[[UIDevice currentDevice] systemVersion] isEqualToString:@"6.0" @"6.0.1" @"6.1"]);
    10. [myMenu addButtonWithTitle:@"Facebook"];
    Alles anzeigen


    Nutzt aber nix... Wie muss denn die else aussehen?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Thaddel ()

  • Thaddel schrieb:

    Ähm, wie meinst du das jetzt?


    Du stellst die falsche Frage will er dir sagen.
    Nicht ob das Gerät auf iOS 6 läuft ist für dich interessant,
    sondern ob die Funktionen des Facebook Frameworks vorhanden sind die du nutzen willst.

    Also frag deren Existenz ab (siehe Tip von gritsch) und zeige dementsprechend den Button an oder nicht.

    Dann klappt das auch in zukünftigen iOS Versionen.
    Oder willst du bei jedem iOS Update die Strings die du systemVersion vergleichst anpassen?

    Wenn sonst überraschend noch eine 6.0.2 vor 6.1 rauskommen sollte verschwindet der Button einfach.

    Zwecks Grundlagen kann man gritsch auch nur zustimmen. ;)
  • Danke für den Tipp.

    Ich hab das jetzt so gelöst:

    Quellcode

    1. if ( [[[UIDevice currentDevice] systemVersion] hasPrefix:@"6."] ) {
    2. [myMenu addButtonWithTitle:@"Facebook"];}


    Funktioniert wunderbar. Und wenn dann mal iOS 7 rauskommt, dann werd ich das Deployment Target eh auf 6.1 stellen (meine normale Strategie), womit der Button dann auch in einer älteren Version sichtbar sein wird. ;)

    Viele Grüsse,

    Stephan
  • Eine fixe Abfrage unter welcher iOS Version eine App gerade läuft ist nicht ratsam. Wie DroneDeveloper bereits vorgeschlagen hat osxentwicklerforum.de/index.ph…&postID=206919#post206919, solltest Du lieber prüfen, ob die für eine Funktion vom iOS zur Verfügung gestellte Klasse zu Laufzeit vorhanden ist.

    Dies lässt sich sehr einfach mit NSClassFromString prüfen und sieht etwa so aus:

    Quellcode

    1. Class composeViewControllerClass = NSClassFromString(@"SLComposeViewController");
    2. if (composeViewControllerClass != nil)
    3. {
    4. // SLComposeViewController steht auf diesem Device/iOS Version zur Verfügung!
    5. }
  • Thaddel schrieb:

    Warum ist es denn nicht ratsam, das fix abzufragen? Einfach weil es nicht besonders schön ist, oder weil Apple das nicht sehen will?

    Weil du von Dingen ausgehst, die nicht gegeben sein müssen.

    Beispiel:
    Du möchtest jemanden einstellen, der dir deine Briefe von Band abtippt.

    Jetzt gibt es zwei Möglichkeiten für die Stellenbeschreibung:
    "Suche Sekretär/-in..." - hier triffst du die Annahme, dass jede/r Sekretär/-in Briefe von Band abtippen kann.
    Das wäre dann die Prüfung auf das iOS: du triffst die Annahme, dass nur iOS größer 6 das SozialMedia Framework hat.

    "Suche Person, die mir Briefe von Band abtippt." - hier sagst du ganz klar, was du willst. Auf diese Anzeige kann sich ein Obdachloser genauso melden wie ein Doktor der Chemie.
    Das wäre dann die Prüfung auf die Klasse: steht sie zur Verfügung, kannst du sie nutzen. Wenn nicht, dann nicht.

    Der Unterschied ist also:
    Du verlässt dich auf eine Annahme vs. du verlässt dich auf eine Tatsache.

    Und unser internes elftes Gebot lautet: "Du sollst nicht davon ausgehen, dass." ;)

    // Nachtrag:
    Natürlich könntest du jetzt sagen "Aber es ist eine Tatsache, dass das Framework erst in iOS 6 zur Verfügung steht!"
    Darauf könnte ich kontern: Und wenn einem iOS 5.1 mit Jailbreak ein ähnliches Framework beigefügt wurde?
    Und wenn Apple ein iOS 5.2 mit dem Framework rausbringt?
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Quellcode

    1. Das wäre dann die Prüfung auf das iOS: du triffst die Annahme, dass nur iOS größer 6 das SozialMedia Framework hat.


    Aber genau so ist es ja. Unterhalb von iOS 6 habe ich gar keine Facebook Funktionalität. Entsprechend kann der Button da weg... Ich steh grad auf dem Schlauch...
  • Lucas de Vil schrieb:

    // Nachtrag:
    Natürlich könntest du jetzt sagen "Aber es ist eine Tatsache, dass das Framework erst in iOS 6 zur Verfügung steht!"
    Darauf könnte ich kontern: Und wenn einem iOS 5.1 mit Jailbreak ein ähnliches Framework beigefügt wurde?
    Und wenn Apple ein iOS 5.2 mit dem Framework rausbringt?

    Jetzt ist es eine Tatsache und du nimmst an, dass das so bleibt.
    Es ist aber eine Tatsache, dass eine Laufzeit, die eine Klasse 'SLComposeViewController' kennt, eine Klasse 'SLComposeViewController' kennt.
    Ebenso ist es eine Tatsache, dass eine Laufzeit, die keine Klasse 'SLComposeViewController' kennt, eine Klasse 'SLComposeViewController' eben nicht kennt.

    Daran kann einfach niemand rütteln, weder mit einer eigenen ins OS integrierten Library für ein jailbroken 5.1 noch eine improvisierte offizielle 5.2 ;)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Darauf könnte ich kontern: Und wenn einem iOS 5.1 mit Jailbreak ein ähnliches Framework beigefügt wurde?
    Und wenn Apple ein iOS 5.2 mit dem Framework rausbringt?


    Naja, auf Jailbreaks habe ich noch nie Rücksicht genommen. Das ist meiner Meinung nach absolut nicht das Problem der Entwickler, die für den Appstore entwickeln.

    Dass Apple eine 5.2 mit social.framework rausbringt ist zwar möglich, aber kaum anzunehmen. Aber ja, daran habe ich so nicht gedacht.
  • Thaddel schrieb:

    Dass Apple eine 5.2 mit social.framework rausbringt ist zwar möglich, aber kaum anzunehmen.

    Das 11. Gebot: Du sollst nicht davon ausgehen, dass. ;)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Dann halt ich mich da mal dran... :) Der Code sieht nun so aus:

    Quellcode

    1. // Check if the new SLComposerViewController is available, then hide the facebook button in the options for news if it is not available
    2. Class composeViewControllerClass = NSClassFromString(@"SLComposeViewController");
    3. if (composeViewControllerClass != nil)
    4. [myMenu addButtonWithTitle:@"Facebook"];