Nie jestem naprawdę nie zgadzając się z odpowiedzią DarkDust za , ale jeśli mogę skierować moje wewnętrzne Billa Clintona, to zależy od tego, jaki jest sens obsługiwana jest :)
Apple nie chce, abyś robił to w aplikacjach App Store, ale system operacyjny z pewnością na to pozwala. Aplikacje Jailbreak używają tej techniki przez cały czas. Zasadniczo używasz standardowej techniki UNIX do dynamicznego otwierania struktury / biblioteki, a następnie używania jej elementów. Funkcja dlopen umożliwia otwarcie biblioteki przez przekazanie ścieżki do tego frameworka lub dylib. Z niektórych dokumentów dotyczących tworzenia aplikacji jailbreak , oto przykład wywoływania init()
funkcji zaimplementowanej we własnej, oddzielnej dylib:
#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);
}
}
Ponadto domyślne ograniczenie uniemożliwiające tworzenie projektu biblioteki dynamicznej dla systemu iOS jest czymś w Xcode, co można zastąpić, edytując niektóre pliki XCode xml:
Twórz i używaj dylib na iOS
Gdy to zrobisz, możesz zbudować normalną bibliotekę .dylib iOS i użyć jej zgodnie z przykładowym kodem powyżej. (tak, prawdopodobnie będziesz musiał ponownie odblokować tę możliwość za każdym razem, gdy zainstalujesz nową wersję XCode).
Nie jest to więc ograniczenie techniczne, ale ograniczenie zasad App Store. Jeśli nie jesteś ograniczony do App Store, możesz to zrobić. Zauważ, że ta technika nie wymaga jailbreakingu, chociaż jeśli aplikacja jest w piaskownicy, może ograniczać miejsce, z którego można ładować dylibs.
Edycja: aby upewnić się, że te informacje nie zostaną utracone przez przyszłą rotację linków, oto treść linku, który podałem, jak włączyć dylibs iOS w Xcode. ( Uwaga: ten proces nadal działa w Xcode 4, ale zobacz komentarz (y) poniżej, aby uzyskać aktualizacje ścieżek itp.) Źródłem jest blog iOS Place :
Xcode nie pozwala na tworzenie dylib dla iOS. Aplikacja zostanie odrzucona, jeśli nie jest pojedynczym plikiem binarnym. Ale mam aplikację, która ma architekturę wtyczek do ładowania opcjonalnych modułów. Chcę tylko szybkiego prototypu, który udowodniłby koncepcję przed pełnym przeniesieniem go na iOS. Jest to szybsze, jeśli dylib może po prostu działać. Ten post pokazuje, jak zbudować i używać dylib, ale pamiętaj, że nie zostanie on zatwierdzony do App Store. (Testowane z Xcode 3.2.4 w 10.6.4)
1. Otwórz te pliki w Edytorze listy właściwości: /Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX Product Types.xcspec and /Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specifications / iPhone Simulator ProductTypes.xcspec
2. Znajdź element w „ MacOSX Product Types.xcspec ”, który ma typ produktu com.apple.product-type.library.dynamic
i przeciągnij go do „ iPhone Simulator ProductTypes.xcspec ”.
3. Otwórz „ MacOSX Package Types.xcspec ” i „ iPhone Simulator PackageTypes.xcspec ”, które znajdują się w tych samych miejscach.
4. Znajdź element w „ MacOSX Product Types.xcspec ”, który ma typ pakietu com.apple.package-type.mach-o-dylib
i przeciągnij go do „ iPhone Simulator PackageTypes.xcspec ”.
5. Powtórz kroki dla „ iPhoneOS.platform ” i ponownie uruchom Xcode, jeśli był uruchomiony.
Teraz zbudujmy dylib. Zacznij od szablonu „ Cocoa Touch Static Library ”. Powinno to obejmować Foundation.framework w projekcie. Oto zmiany, które wprowadziłem w górnej części szablonu, aby zbudować dylib.
1. Otwórz plik project.pbxproj (znajdujący się w pakiecie plików projektu Xcode) w edytorze tekstu. Wyszukaj ciąg „ typ produktu ”, zmień jego wartość na com.apple.product-type.library.dynamic
;
Teraz otwórz projekt za pomocą Xcode, przejdź do Project-> Edit Project Settings
2. „ Katalog instalacyjny ” ustawiony na, @executable_path/
ponieważ planuję umieścić dylib w tym samym katalogu, w którym znajduje się plik wykonywalny aplikacji.
3. „ Mach-O Type ” ustawiony na Dynamic Library
4. „ Rozszerzenie wykonywalne ” ustawione na dylib
5. „ Przedrostek wykonywalny ” ustawiony na pusty
6. Dodaj jedną lub dwie proste metody do biblioteki i zbuduj ją.
Teraz utwórz aplikację, aby ją przetestować. Tym razem wybieram aplikację opartą na widoku . Podłącz UIButton i UILabel, aby wywołać bibliotekę i wyświetlić komunikat zwrotny. Możesz pobrać kompletny projekt TestApp i bawić się nim.