Werden dynamische Bibliotheken unter iOS (iPhone / iPad) unterstützt?
In Xcode habe ich versucht, ein neues Projekt zu erstellen -> Framework & Library -> Cocoa Library (dynamisch) . In den Projekteinstellungen habe ich das Basis-SDK auf iOS device 4.1
und das Ziel auf festgelegt iOS4.1
, aber es hat einen Erstellungsfehler:
Ziel gibt den Produkttyp 'com.apple.product-type.library.dynamic' an, aber es gibt keinen solchen Produkttyp für die 'iphonesimulator'-Plattform ".
Der Build, den ich ausgewählt habe, ist Simulator -> Debug -> i386 .
Antworten:
Zum Zeitpunkt der Beantwortung dieser Frage wurden dynamische Bibliotheken von iOS nicht unterstützt und führen dazu, dass Ihre App abgelehnt wird. Es sind nur statische Bibliotheken zulässig.
In iOS8 können Sie jedoch dynamische Bibliotheken und Frameworks verwenden. Es sollte "einfach funktionieren"
quelle
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: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.
quelle
Ab Xcode 11.4.1 sind dynamische Bibliotheken nicht zulässig (Ihr Projekt wird nicht für alle Ziele kompiliert). Die neue Art, libs / Frameworks zu verwenden, ist das create-xcframework von xcodebuild.
quelle