Ich bin mit DarkDusts Antwort nicht wirklich einverstanden , aber wenn ich meinen inneren Bill Clinton kanalisieren darf, hängt es davon ab, was die Bedeutung von unterstützt ist :)
Apple möchte nicht, dass Sie dies für App Store-Apps tun, aber das Betriebssystem erlaubt dies auf jeden Fall. Jailbreak-Apps verwenden diese Technik ständig. Grundsätzlich verwenden Sie eine Standard-UNIX-Technik, um ein Framework / eine Bibliothek dynamisch zu öffnen und dann Inhalte darin zu verwenden. Mit der Funktion dlopen können Sie die Bibliothek öffnen, indem Sie den Pfad zu diesem Framework oder dylib übergeben. In einigen Dokumenten zum Erstellen von Jailbreak-Apps finden Sie hier ein Beispiel für den Aufruf einer init()
Funktion, die in Ihrer eigenen, separaten Dylib implementiert ist:
#include <dlfcn.h>
initWrapper() {
char *dylibPath = "/Applications/myapp.app/mydylib2.dylib";
void *libHandle = dlopen(dylibPath, RTLD_NOW);
if (libHandle != NULL) {
// This assumes your dylib’s init function is called init,
// if not change the name in "".
void (*init)() = dlsym(libHandle, "init");
if (init != NULL) {
init();
}
dlclose(libHandle);
}
}
Darüber hinaus ist die Standardeinschränkung, dass Sie kein dynamisches Bibliotheksprojekt für iOS erstellen dürfen , in Xcode enthalten, die Sie durch Bearbeiten einiger XCode-XML-Dateien überschreiben können:
Erstellen und verwenden Sie Dylib unter iOS
Sobald Sie dies getan haben, können Sie eine normale iOS .dylib- Bibliothek erstellen und diese gemäß dem obigen Beispielcode verwenden. (Ja, Sie müssen diese Funktion wahrscheinlich erneut entsperren, wenn Sie eine neue XCode-Version installieren.)
Es handelt sich also nicht um eine technische Einschränkung, sondern um eine Einschränkung der App Store-Richtlinien. Wenn Sie nicht auf den App Store beschränkt sind, können Sie dies tun. Beachten Sie, dass diese Technik nicht nicht Jailbreak erforderlich, obwohl , wenn die App Sandbox ist es begrenzen kann , wo dylibs aus geladen werden kann.
Bearbeiten: Um sicherzustellen, dass diese Informationen nicht für zukünftige Linkfäule verloren gehen, finden Sie hier den Inhalt des Links, den ich zum Aktivieren von iOS-Dylibs in Xcode bereitgestellt habe. ( Hinweis: Dieser Vorgang funktioniert weiterhin mit Xcode 4, Aktualisierungen der Pfade usw. finden Sie in den Kommentaren unten.) Quelle ist das iOS Place-Blog :
Mit Xcode können Sie keine Dylib für iOS erstellen. App wird abgelehnt, wenn es sich nicht um eine einzelne Binärdatei handelt. Ich habe jedoch eine Anwendung mit Plug-In-Architektur zum Laden optionaler Module. Ich möchte nur, dass ein schneller Prototyp das Konzept beweist, bevor er vollständig auf iOS portiert wird. Es ist schneller, wenn Dylib einfach funktionieren könnte. In diesem Beitrag wird gezeigt, wie Dylib erstellt und verwendet wird. Beachten Sie jedoch, dass es nicht für den App Store zugelassen wird. (Getestet mit Xcode 3.2.4 am 10.6.4)
1. Öffnen Sie diese Dateien im Eigenschaftenlisten-Editor: /Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX Product Types.xcspec und /Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specifications / iPhone Simulator ProductTypes.xcspec
2. Suchen Sie das Element in der Datei " MacOSX Product Types.xcspec " mit dem Produkttyp com.apple.product-type.library.dynamic
und ziehen Sie es in die " iPhone Simulator ProductTypes.xcspec ".
3. Öffnen Sie " MacOSX Package Types.xcspec " und " iPhone Simulator PackageTypes.xcspec " an denselben Stellen.
4. Suchen Sie das Element in der Datei " MacOSX Product Types.xcspec " mit dem Pakettyp com.apple.package-type.mach-o-dylib
und ziehen Sie es in die Datei " iPhone Simulator PackageTypes.xcspec ".
5. Wiederholen Sie die Schritte für die „ iPhoneOS.platform “ und starten Sie Xcode neu, falls es ausgeführt wurde.
Lassen Sie uns nun eine Dylib bauen. Beginnen Sie mit der Vorlage „ Cocoa Touch Static Library “. Das sollte das Foundation.framework in das Projekt einbeziehen. Hier sind die Änderungen, die ich über der Vorlage vorgenommen habe, um Dylib zu erstellen.
1. Öffnen Sie die Datei project.pbxproj (im Xcode-Projektdateibündel enthalten) in einem Texteditor. Suchen Sie nach der Zeichenfolge " producttype " und ändern Sie den Wert in com.apple.product-type.library.dynamic
;
Öffnen Sie nun das Projekt mit Xcode und gehen Sie zu Projekt-> Projekteinstellungen bearbeiten
2. " Installationsverzeichnis " wurde auf gesetzt, @executable_path/
da ich die Dylib im selben Verzeichnis wie die ausführbare Datei der App ablegen möchte.
3. “ Mach-O Type ” auf Dynamic Library eingestellt
4. " Executable Extension " auf dylib gesetzt
5. " Ausführbares Präfix " auf leer gesetzt
6. Fügen Sie der Bibliothek eine oder zwei einfache Methoden hinzu und erstellen Sie sie.
Erstellen Sie jetzt eine App, um sie zu testen. Dieses Mal wähle ich die ansichtsbasierte Anwendung . Schließen Sie einen UIButton und ein UILabel an, um die lib aufzurufen und die Rückmeldung anzuzeigen. Sie können das komplette Projekt TestApp herunterladen und damit spielen.