'AppKit.h not found' in iOS-Projekt

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

  • 'AppKit.h not found' in iOS-Projekt

    Hallo,

    mein erstes Posting hier im Forum - aufregend 8)

    Ich programmiere schon länger, aber erst seit wenigen Wochen mit Xcode und Objective C bzw. Swift. So, nun mein Problem:

    github.com/mixedinkey-opensource/MIKMIDI

    Ich möchte diese MIDI-Library in mein Projekt (Xcode 6, iOS 7) einbinden, da ich auf externe MIDI-Geräte zugreifen möchte und mir hoffe, dass diese Lib mir das Leben ein wenig einfacher macht. Das iOS-Beispiel-Projekt von MIDMIDI (das ja noch ObjC und auch schon ein paar Jahre alt ist) lässt sich in Xcode 6 ohne Weiteres kompilieren. Wenn ich die Library aber in mein neues Swift-Projekt einbinde, bekomme ich (nachdem ich nach stundenlangem Probieren libxml2 erfolgreich eingebunden habe) einen Fehler "AppKit/AppKit.h file not found" bei folgendem Code (der in MIKMIDI zu Beginn eines .m-Files steht):

    #if TARGET_OS_IPHONE
    #import <UIKit/UIKit.h>
    #else
    #import <AppKit/AppKit.h>
    #endif

    Ist auch soweit nachvollziehbar, AppKit ist OSX und nicht iOS. Aber da es ein iOS-Swift-Projekt ist, sollte das doch gar nicht ausgeführt werden? Ich hab jetzt ewig in allen Build Settings/Build Phases gesucht, ob mir irgendwas auffällt, komme aber nicht weiter.

    Im MIKMIDI-Demo-Projekt funktioniert das anstandslos. Wenn ich dort TARGET_OS_IPHONE anklicke, komme ich zum Simulator - iOS 8.2-File, wo TARGET_OS-IPHONE definiert ist. Wenn ich in meinem eigenen Swift-Projekt dieses Symbol anklicke, gibt's nur einen Fehler "Symbol not found". Ist das der Grund, warum die #if-Abfrage fehlschlägt (wurde nicht definiert)? Aber woran liegt das dann, dass diese Konstante (ist nicht direkt ne Konstante, ich weiß!) nicht verfügbar ist in meinem Projekt (der Simulator läuft doch bei mir auch!?)? Wo könnte ich vergessen haben, irgendwas einzubinden?

    Falls ich wichtige Infos vergessen habe, seht es mir bitte nach :)

    Vielen Dank schon mal für eure Hilfe!

    LG Lukas

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von midifreak ()

  • Definiere halt das Makro "TARGET_OS_IPHONE" in den Buildsettings, dann sollte es passen

    @dasdom: Meine Erfahrung ist, wenn man bei solchen Build-Problemen anfängt bestimmte Sachen auszukommentieren, dann stolpert man von einem Problem zu nächsten, nur um dann irgendwann festzustellen, das man das Problem besser gleich richtig hätte lösen sollen.

    ciao

    gandhi
  • Danke für eure Antworten!

    dasdom schrieb:

    Warum kommentierst du nicht alles ausser #import <UIKit/UIKit.h> aus?
    Hatte ich auch schon dran gedacht. Von diesen Abfragen sind aber ca. 200 im Code, da kommentier ich mir ja die Library kaputt - zumal es ja auch anders gehen müsste. Wollte ich mir also für den Notfall aufheben, wenn ich sonst gar nicht weiterkomme.

    gandhi schrieb:

    Definiere halt das Makro "TARGET_OS_IPHONE" in den Buildsettings, dann sollte es passen

    Hat bei mir nicht geklappt, es wurde an der Stelle dann doch nicht gefunden...

    Michael schrieb:

    Was auch funktionieren sollte ist

    #include <TargetConditionals.h>

    in den Bridging-Header eintragen. Ich habe es allerdings selbst nicht ausprobiert. Also ohne Gewähr.

    In den Bridging-Header eintragen hat leider keine Änderung gebracht. Aber wenn ich den #include direkt vor die Abfrage setze, funktioniert es und ich kann kompilieren :)

    Vielen Dank euch!!
  • Michael schrieb:

    midifreak schrieb:

    In den Bridging-Header eintragen hat leider keine Änderung gebracht
    Schade. Wo im Bridging-Header hast du es versucht? Am Anfang oder am Ende?
    Habe beides ausprobiert - mit gleichem Ergebnis.

    Wäre der Bridging-Header denn davon abgesehen auch der richtige Ort, um irgendwelche projektweiten Konstanten/Defines zu speichern (maximale Anzahl der MIDI-Geräte, die der User in der App anlegen kann)? Da diese Datei ja anscheinend automatisch in allen anderen Files includiert wird und die Werte damit überall verfügbar wären? Oder gibt es da andere Stellen, wo man sowas regelt?