Import static universal Library in xCode-Project

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

  • Import static universal Library in xCode-Project

    Hallo :),

    ich habe ein paar Probleme eine universal static Library in mein Project einzufügen. Und zwar habe ich mir ein Projekt angelegt als Library und habe dort zwei Klassen erstellt mit jeweils zwei Testmethoden. Nun habe ich die Library für IOSdevices und für den Simulator kompiliert. Sobald dies geschehen ist, kann man im Projektnavigator unter dem Ordner Products die library anklicken und sie sich im Finder anzeigen lassen. Dort werden dann jeweils einmal Ein Ordner mit der library für den Simulator und einmal für die devices Angezeigt.
    Nun habe ich mit Hilfe eines Tutorials von der Website raywenderlich.com/41377/creati…c-library-in-ios-tutorial um daraus eine Universal library zu kreieren, damit man alles in einer Datei hat. Nun kann ich diese meinem Projekt zwar hinzufügen und wenn ich den Simulator ohne die 64bit nehme funktioniert auch alles. Jedoch gibt er mir immer Fehler, wenn ich versuche die App auf dem 64bit Simulator laufen zu lassen.
    Folgende Fehler gibt er mir aus:

    Quellcode

    1. ld: warning: ignoring file /Users/SomeUser/Library/Developer/Xcode/DerivedData/lokataDBConnection-frueqaenmrdtrdckiccpopmqicjp/Build/Products/Debug-iphonesimulator/liblokataDBConnection.a, file was built for archive which is not the architecture being linked (x86_64): /Users/SomeUser/Library/Developer/Xcode/DerivedData/lokataDBConnection-frueqaenmrdtrdckiccpopmqicjp/Build/Products/Debug-iphonesimulator/liblokataDBConnection.a
    2. Undefined symbols for architecture x86_64:
    3. "_OBJC_CLASS_$_Connection", referenced from:
    4. objc-class-ref in LoginViewController.o
    5. ld: symbol(s) not found for architecture x86_64
    6. clang: error: linker command failed with exit code 1 (use -v to see invocation)
    Alles anzeigen



    Womöglich liegt dies daran, das bei dem Skript:

    Quellcode

    1. # define output folder environment variable
    2. UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal
    3. # Step 1. Build Device and Simulator versions
    4. xcodebuild -target ImageFilters ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
    5. xcodebuild -target ImageFilters -configuration ${CONFIGURATION} -sdk iphonesimulator -arch i386 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
    6. # make sure the output directory exists
    7. mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"
    8. # Step 2. Create universal binary file using lipo
    9. lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a"
    10. # Last touch. copy the header files. Just for convenience
    11. cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/include" "${UNIVERSAL_OUTPUTFOLDER}/"
    Alles anzeigen


    das Command für das kompilieren der 64bit library fehlt!? Ich vermute jedoch, das ich unter den Projekteinstellungen->zum selbst angelegten Target(UniversalLib->Build Settings->Architectures die 64bit Architektur für den Simulator hinzufügen muss!?
    Bin ich so ungefähr auf dem reichtigen Pfad oder völlig verkehrt mit der Fehlversuche ?

    Bin sehr dankbar über eure Hilfe. :)

    Gruß Rocks360
  • Wollte ich aber leider muss ich dort zu einer Beerdigung und für einen Tag ganz dort runter zu fahren ist als Student leider zu teuer :(
    Wenn ich sie einzeln jeweils kompiliere funktioniert das ja auch, ich füge dann jeweils die Passende zu dem Projekt hinzu. Aber wenn ich versuche das ganze als Universallib zu kompilieren geht das halt :(
    Wo muss ich denn angeben, für welche Architekturen er as kompilieren soll?
  • Wenn ich mit in dem Terminal die Library mit dem command: lipo -info lokataDBConection.a aufrufe erhalte ich den folgenden Output: Architectures in the fat file: liblokataDBConnection.a are: armv7 armv7s i386 arm64
    trozdessen, das ich unter Build Settings->Architectures die alle hinzugefügt habe($ARCHS_STANDARD_INCLUDING_64BIT) armv7 armv7s arm64).
  • So Lösung da ... Danke für den Tipp mit dem Quellcode ... ich muss dort noch ein zweites -arch mit der Architektur x86_64 hinzufügen nun gibt :lipo -info lokataDBConnection.a folgenden Output: Architectures in the fat file: liblokataDBConnection.a are: armv7 armv7s i386 x86_64 arm64

    Und es gibt keine Fehlermeldungen mehr :)

    Hier noch eine evt. Lösung : stackoverflow.com/questions/22…for-suporting-arm64-build

    Hat bei mir jedoch nicht funktioniert!?