Hauptapp mit Framework das Subprojects enthält

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

  • Hauptapp mit Framework das Subprojects enthält

    Hallo,

    ich hänge schon seit ein paar Stunden an einem Problem...

    Ich habe ein Projekt entwickelt das ein iOS Framework als Target hat. In diesem Projekt versuche ich möglichst viel wiederverwendbaren Code und Classes etc. abzulegen.
    Ziel ist es einfach das ich Apps entwickle die immer zu einem gewissen Teil die gleichen Bestandteile nutzen...
    Das hat bisher auch super geklappt, jetzt möchte ich in das Framework allerdings ein weiteres Projekt integrieren, genauer gesagt handelt es sich um MailCore github.com/MailCore/mailcore2/…aster/build-mac/README.md

    Ich habe also folgende Struktur

    - HauptApp
    - Framework (Target: Framework)
    - MailCore (Target: Framework + static Library?)

    Wenn ich jetzt meine HauptApp builden möchte dann bekomme ich 201 "Undefined symbols for architecture arm64:" in meiner Hauptapp. Alle zeigen auf Klassen des MailCores.

    Die Architectures stehen eigentlich alle auf dem einheitlichen - siehe Screenshot.
    Bildschirmfoto 2015-08-07 um 16.41.57.png

    Ich hab zum Test ein neues Projekt angelegt (ohne Framework) und den MailCore wie in der Readme beschrieben integriert, geht sofort.
    Das es nicht für 64Bit geht kann eig auch nicht sein das die Testapp auch sofort lief.

    Ich denke also es liegt daran das mein Framework die Static-Library oder Header Files nicht richtig oder gar nicht kopiert oder der Hauptapp zeigt wo sie zu finden sind...

    Wenn ich mir den Ordner ansehe unter /Derived-Data/...Debug-iphoneos/ dann liegt hier folgendes:

    HauptApp.app
    include(Ordner: scheint vom MailCore zu kommen)
    libMailCore-ios.a
    Framework.framework

    Ich hoffe ich konnte mein Problem gut genug schildern...
  • Also für die libMailCore-ios.a wird folgendes ausgegeben:

    libMailCore-ios.a: Mach-O universal binary with 2 architectures
    libMailCore-ios.a (for architecture armv7): current ar archive random library
    libMailCore-ios.a (for architecture arm64): current ar archive random library

    Framework.framework/Framework: current ar archive random library

    die ganzen .h Dateien vom MailCore liegen in dem include Ordner der neben der static Library liegt - müsste ich nicht auf den irgendwie noch verweisen oder so?
  • macmoonshine schrieb:

    H1990 schrieb:

    die ganzen .h Dateien vom MailCore liegen in dem include Ordner der neben der static Library liegt - müsste ich nicht auf den irgendwie noch verweisen oder so?
    Du hast ja einen Linker-Fehler. Für den sind die Header-Dateien sowas von uninteressant.
    BTW.: Hast du -ObjC oder -all_load gesetzt?
    Ja im Framework in den Build Settings unter "Other Linker Flags" hab ich:
    -lctemplate-ios -letpan-ios -lxml2 -lsasl2 -liconv -ltidy -lz -lc++ -lresolv -stdlib=libc++ -ObjC $(inherited)

    und in der Hauptapp habe ich:
    -ObjC -all_load




    Die Architekturen in der static Lib sehen richtig aus oder?
  • Ich hoff ich hab das richtig verstanden..

    Hab mir über das Terminal mit "nm libMailCore-iOS.a" eine Ausgabe, von Symbols? bekommen.

    In Xcode wird mir zum Beispiel als Error angezeigt:

    Undefined symbols for architecture arm64:
    "___cxa_guard_acquire", referenced from:
    mailcore::MailProvidersManager::sharedManager() in FRAMEWORK (MCMailProvidersManager.o)

    dann hab ich die Ausgabe vom Terminal nach

    __cxa_guard_acquire

    durchsucht und 2 Treffer erhalten. (Ich denke einmal für arm64 und einmal für armv7)

    scheint also auch da zu sein...


    ----

    In dem Testprojekt in dem ich das MailCore direkt eingefügt habe werden im Build Ordner auch viel mehr *.a Dateien erstellt, viellicht kommt der Build Process aber aufgrund der Errors da gar nicht hin.
  • H1990 schrieb:

    Das ist beides mal ein U

    Apple schrieb:

    Each symbol name is preceded by its value (blanks if undefined).
    Unless the -m option is specified, this value is followed by one of the
    following characters, representing the symbol type: U (undefined), A
    (absolute), T (text section symbol), D (data section symbol), B (bss
    section symbol), C (common symbol), - (for debugger symbol table
    entries; see -a below), S (symbol in a section other than those above),
    or I (indirect symbol). If the symbol is local (non-external), the
    symbol's type is instead represented by the corresponding lowercase
    letter. A lower case u in a dynamic shared library indicates a unde-
    fined reference to a private external in another module in the same
    library.
    Anscheinend referenziert die Lib nur die Symbole, und definiert sie nicht.
    „Meine Komplikation hatte eine Komplikation.“
  • Ich hab es nun irgendwie hinbekommen... irgendwie weil ich selber nichtmehr genau weiß was ich alles versucht habe.

    Ich denke aber es lag daran was macmoonshine auch gemeint hat. Ich habe einfach alle Framework und Libs die das Subproject (MailCore) braucht auch im Hauptprojekt hinzugefügt und auch die static Lib die erzeugt wird.

    Bei den Other Linker flags hab ich auf -all_load verzichtet da ich sonst errors bekommen habe "duplicate symbols" in meinen FRAMEWORK Klassen.

    Die Lösung ist zwar jetzt nicht ganz sooo einfach und komfortabel wie erhofft aber es geht :)