Eine Funktion von 10.6 ins 10.4-Projekt integrieren

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

  • Eine Funktion von 10.6 ins 10.4-Projekt integrieren

    Ich habe schon lange nicht mehr programmiert. Nun möchte ich mein 10.4-Projekt etwas auffrischen. Insgesamt läuft es unter 10.6 schon. Doch Einiges muss man anders machen. Z.B. Keyboard Viewer konnte man früher mit einem eingebauten Apple-Script starten. Ab 10.6 geht es nicht mehr, man muss nun TISSelectInputSource benutzen, was an sich kein Problem wäre. Nur weiss ich (oder habe vergessen) das Folgende nicht: in Xcode, als 'Base SDK for All Configurations' gebe ich 10.4 und bekomme dann eine Fehlermeldung: 'kTISPropertyInputSourceID' undeklared, weil es in 10.4 noch nicht gab... Wie bringe ich alles unter einen Dach? Ich möchte, dass mein Projekt weiterhin unter 10.4 läuft und alle Funktionen von 10.6 richtig ausführt.
    Gruss aus Russland :)
  • system schrieb:

    Benutze das 10.6 SDK, aber rufe Funktionen, die es unter 10.4 nicht gibt, einfach nicht auf.
    Ich will aber eine neue Funktion einbauen - darum geht es. Auch wenn ich SDK 10.6 benutze, wird das Projekt meine Erfahrung nach unter 10.4 nicht laufen - oder ist es anders?

    Markus Müller schrieb:


    Benutze das 10.4 SDK, denn nur dann bekommst Du die entspr. Warnungen.
    Ja, ich benutze gerade SDK 10.4, will aber eine Funktion aus 10.6 einbauen, die es in 10.4 nicht gab.
    Gruss aus Russland :)
  • Markus Müller schrieb:

    Dann läuft es doch aber nicht mehr unter 10.4? Oder checkst Du zur Laufzeit?
    Es wird nicht vom Xcode angenommen - die Fehlermeldung kommt beim Compilieren, weil die neue Funktion nicht in SDK 10.4 vorhanden ist. Ich muss anscheinend irgendwie zwei Sachen kombinieren - den grössten Teil mit SDK 10.4 compilieren, den Zusatz - mit SDK 10.6 und dann die beiden zusammenbringen. Wie aber?
    Gruss aus Russland :)
  • Du kannst keine Funktionalitäten aus 10.6 auch in 10.4 verfügbar machen.
    Du musst also das SDK für 10.4 nehmen und die Funktion aus 10.6 selbst nachbauen.
    «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
  • schreib einfach ein @interface mit der methode dies in 10.4 nicht gibt.
    zur laufzeit musst du aber natürlich abprüfen dass du die nur unter 10.6 aufrufst und unter 10.4 und 10.5 das anderst machst.

    wenn das mit dem interface nicht klappt dann kannst du den weg gehen den ich gehe.
    und zwar hab ich für jede os-version ein plugin (also 10.4, 10.5, 10.6 und bald 10.7). jedes der plugins wird mit dem entsprechenden sdk compiliert.
    zur laufzeit der hauptapp lade ich dann das entsprechende plugin und feritg ist ;)
  • Lucas de Vil schrieb:

    Du kannst keine Funktionalitäten aus 10.6 auch in 10.4 verfügbar machen.
    Du musst also das SDK für 10.4 nehmen und die Funktion aus 10.6 selbst nachbauen.
    Ich habe schon vermutet, dass es möglich sein sollte. Meine Frage wäre aber nicht OB sondern WIE - ich würde gerne die entsprechenden Schritte irgendwo an einem Beispiel erklärt haben.

    gritsch schrieb:


    schreib einfach ein @interface mit der methode dies in 10.4 nicht gibt.
    zur laufzeit musst du aber natürlich abprüfen dass du die nur unter 10.6 aufrufst und unter 10.4 und 10.5 das anderst machst.

    wenn das mit dem interface nicht klappt dann kannst du den weg gehen den ich gehe.
    und zwar hab ich für jede os-version ein plugin (also 10.4, 10.5, 10.6 und bald 10.7). jedes der plugins wird mit dem entsprechenden sdk compiliert.
    zur laufzeit der hauptapp lade ich dann das entsprechende plugin und feritg ist ;)
    Mit dem Interface ist ja klar - dies habe ich bereits für beider 10.4 und 10.6, aber separat; zur Laufzeit könnte ich es schon abprüfen, muss aber erst das Compilieren überwinden.

    Mit Plug Ins kling es gut - so habe ich es mir vorgestellt, nur weiss ich nicht, wie ich die nötigen Schritte ausführe und würde sehr froh, wenn Du mir sie kurz beschreibst oder/und zeigst, wo ich sie nachlesen kann
    Gruss aus Russland :)
  • ich hab das in etwa so:

    im GGDeprecated sind alle methoden im interface und haben eine leere implementation.
    dann gibts noch die _GGDeprecated welche die plugin-classe darstellt.

    das ist dann der code zu m laden des entsprechenden plugins:

    Quellcode

    1. + (GGDeprecated *)sharedController
    2. {
    3. @synchronized(self)
    4. {
    5. if (sharedDeprecated == nil)
    6. {
    7. NSBundle *bundle = nil;
    8. if (IS_TIGER)
    9. {
    10. bundle = [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"GGDeprecated_10_4" ofType:@"bundle"]] retain];
    11. }
    12. else if (IS_LEOPARD)
    13. {
    14. bundle = [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"GGDeprecated_10_5" ofType:@"bundle"]] retain];
    15. }
    16. else
    17. {
    18. bundle = [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"GGDeprecated_10_6" ofType:@"bundle"]] retain];
    19. }
    20. sharedDeprecated = [[[bundle classNamed:@"_GGDeprecated"] alloc] init];
    21. }
    22. }
    23. return sharedDeprecated;
    24. }
    Alles anzeigen