Class xy is implemented in both .. One of the two will be used. Which one is undefined.

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

  • Class xy is implemented in both .. One of the two will be used. Which one is undefined.

    Hallo,

    habe ein Problem in Xcode 7.2.1 und MacOS 10.11.3.
    Für ein Swift (2.1?) Kommandozeilen Programm habe Ich auf github (github.com/nomothetis/OptionKit)das OptionKit geladen und wie in der Beschreibung steht die Datei OptionKit.framework nach /Library/Framework kopiert.

    Mit add files to <project name> im Project Navigator habe ich das Framework mein Projekt hinzugefügt. (developer.apple.com/library/io…s/Adding_a_Framework.html)
    Xcode konnte nun die jeweiligen Code Zeilen auflösen.

    Wenn ich nun das Beispielprogramm in Xcode starte bekomme ich folgenden Output:
    objc[19790]: Class _TtC10Foundation15NSSimpleCString is implemented in both /Library/Frameworks/OptionKit.framework/Versions/0/Frameworks/libswiftFoundation.dylib and /Users/mkb/Library/Developer/Xcode/DerivedData/optionkitTest-czwzqdbfieeutbemubltyixleczt/Build/Products/Debug/optionkitTest. One of the two will be used. Which one is undefined.
    objc[19790]: Class _TtC10Foundation16NSConstantString is implemented in both /Library/Frameworks/OptionKit.framework/Versions/0/Frameworks/libswiftFoundation.dylib and /Users/mkb/Library/Developer/Xcode/DerivedData/optionkitTest-czwzqdbfieeutbemubltyixleczt/Build/Products/Debug/optionkitTest. One of the two will be used. Which one is undefined.
    objc[19790]: Class _TtC10Foundation15NSFastGenerator is implemented in both /Library/Frameworks/OptionKit.framework/Versions/0/Frameworks/libswiftFoundation.dylib and /Users/mkb/Library/Developer/Xcode/DerivedData/optionkitTest-czwzqdbfieeutbemubltyixleczt/Build/Products/Debug/optionkitTest. One of the two will be used. Which one is undefined.
    [...]
    objc[19790]: Class _SwiftNativeNSArrayBase is implemented in both /Library/Frameworks/OptionKit.framework/Versions/0/Frameworks/libswiftCore.dylib and /Users/mkb/Library/Developer/Xcode/DerivedData/optionkitTest-czwzqdbfieeutbemubltyixleczt/Build/Products/Debug/optionkitTest. One of the two will be used. Which one is undefined.
    objc[19790]: Class _SwiftNativeNSDictionaryBase is implemented in both /Library/Frameworks/OptionKit.framework/Versions/0/Frameworks/libswiftCore.dylib and /Users/mkb/Library/Developer/Xcode/DerivedData/optionkitTest-czwzqdbfieeutbemubltyixleczt/Build/Products/Debug/optionkitTest. One of the two will be used. Which one is undefined.
    objc[19790]: Class _SwiftNativeNSSetBase is implemented in both /Library/Frameworks/OptionKit.framework/Versions/0/Frameworks/libswiftCore.dylib and /Users/mkb/Library/Developer/Xcode/DerivedData/optionkitTest-czwzqdbfieeutbemubltyixleczt/Build/Products/Debug/optionkitTest. One of the two will be used. Which one is undefined.
    objc[19790]: Class _SwiftNativeNSStringBase is implemented in both /Library/Frameworks/OptionKit.framework/Versions/0/Frameworks/libswiftCore.dylib and /Users/mkb/Library/Developer/Xcode/DerivedData/optionkitTest-czwzqdbfieeutbemubltyixleczt/Build/Products/Debug/optionkitTest. One of the two will be used. Which one is undefined.
    objc[19790]: Class _SwiftNativeNSEnumeratorBase is implemented in both /Library/Frameworks/OptionKit.framework/Versions/0/Frameworks/libswiftCore.dylib and /Users/mkb/Library/Developer/Xcode/DerivedData/optionkitTest-czwzqdbfieeutbemubltyixleczt/Build/Products/Debug/optionkitTest. One of the two will be used. Which one is undefined.

    HAllo
    ["hello"]
    Program ended with exit code: 0

    Gibt es noch eine Einstellung in Xcode zu tätigen damit der Fehler gelöst wird?
  • Ohne jetzt tiefer in die Linker-Problematik eingehen zu wollen...
    Kannst Du nicht einfach die Datei OptionKit/Core.swift in Dein Projekt einbinden und das Verlinken mit den Bibliotheken sein lassen? Dann würde Deine Tool auch auf Rechnern laufen, die das OptionKit-Framework nicht installiert haben, laufen...
    Nur so ein Gedanke...
  • tsunamix schrieb:

    gritsch schrieb:

    MarcKevin schrieb:

    und wie in der Beschreibung steht die Datei OptionKit.framework nach /Library/Framework kopiert.
    wozu?
    Weil es sich um ein CLI-Tool handelt und man da keine dynamischen Libraries in ein Bundle kopieren kann...
    warum kein statisches verwenden?

    ansonsten das framework einfach nicht in Xcode hinzufügen wenn es eh im system installiert sein muss.
  • gritsch schrieb:

    tsunamix schrieb:

    gritsch schrieb:

    MarcKevin schrieb:

    und wie in der Beschreibung steht die Datei OptionKit.framework nach /Library/Framework kopiert.
    wozu?
    Weil es sich um ein CLI-Tool handelt und man da keine dynamischen Libraries in ein Bundle kopieren kann...
    warum kein statisches verwenden?

    Unter Swift sind statische Libraries z.Zt. nicht möglich.

    Der Grund liegt darin, daß die Swift-stdlib immer mit ins Binary hineinkompiliert wird. Das führt dann dazu, daß es zwischen einer staticLib und dem Programm zu doppelten Symbols kommt. Das geht nicht.

    Das wurde so gemacht, um bei der Veröffentlichung von Swift (OS X 10.10 war aktuell), Swift-Programme auch auf älteren Systemen laufen zu lassen (OS X 10.9), und weil Swift bei der Veröffentlichung noch keine API-, noch ABI-Stabilität hatte und hat, also man von Anfang an wußte, daß man da noch rumwerkeln würde...

    Das wird sich sicherlich in Zukunft ändern. In 3 Jahren vielleicht...?

    Deswegen habe ich ja empfohlen, die paar Zeilen Code direkt ins Programm zu packen. Das tut ja letztendlich das gleiche wie eine staticlib.

    gritsch schrieb:

    ansonsten das framework einfach nicht in Xcode hinzufügen wenn es eh im system installiert sein muss.
    Oder so. Joa.
  • tsunamix schrieb:

    gritsch schrieb:

    tsunamix schrieb:

    gritsch schrieb:

    MarcKevin schrieb:

    und wie in der Beschreibung steht die Datei OptionKit.framework nach /Library/Framework kopiert.
    wozu?
    Weil es sich um ein CLI-Tool handelt und man da keine dynamischen Libraries in ein Bundle kopieren kann...
    warum kein statisches verwenden?
    Unter Swift sind statische Libraries z.Zt. nicht möglich.

    Der Grund liegt darin, daß die Swift-stdlib immer mit ins Binary hineinkompiliert wird. Das führt dann dazu, daß es zwischen einer staticLib und dem Programm zu doppelten Symbols kommt. Das geht nicht.

    Das wurde so gemacht, um bei der Veröffentlichung von Swift (OS X 10.10 war aktuell), Swift-Programme auch auf älteren Systemen laufen zu lassen (OS X 10.9), und weil Swift bei der Veröffentlichung noch keine API-, noch ABI-Stabilität hatte und hat, also man von Anfang an wußte, daß man da noch rumwerkeln würde...

    Das wird sich sicherlich in Zukunft ändern. In 3 Jahren vielleicht...?

    Deswegen habe ich ja empfohlen, die paar Zeilen Code direkt ins Programm zu packen. Das tut ja letztendlich das gleiche wie eine staticlib.

    gritsch schrieb:

    ansonsten das framework einfach nicht in Xcode hinzufügen wenn es eh im system installiert sein muss.
    Oder so. Joa.

    Ok, ich verstehe. Das war mir jetzt nicht bekannt.
    Dann ist es wohl das einfachste die Swift Dateien in das Projekt einzufügen