2012-04-21 20 views
5

Pracuję nad projektem na dużą skalę na iOS i chcę rozdzielić niezależne moduły na kilka ładowalnych pakietów. Jednak oficjalny dokument wskazuje, że ładowalny pakiet nie jest obsługiwany w systemie iOS. Ponadto planuję korzystać z wewnętrznej dystrybucji, więc zatwierdzenie sklepu z aplikacjami nie stanowi problemu.Ładowalny pakiet na iOS, czy jest jakiś sposób, aby to osiągnąć?

Teraz moje pytanie brzmi: W kodzie dzwonię pod numer [_bundle principalClass], aby uzyskać dostęp do klasy wejściowej ładowalnego pakietu. Działa dobrze na jailbreakach urządzeń iOS. W przypadku urządzeń nieuzbrojonych, gdy korzystam z trybu debugowania z Xcode, to działa też dobrze. Ale kiedy uruchomię go niezależnie, od trampoliny, rozbija się na tle.

Naprawdę chcę wiedzieć:

1) Dlaczego tak jest różny dla ładowalny pakiet działa na jailbroken/urządzenia unjailbroken?
2) Główne różnice między trybem debugowania XCode a trybem normalnym dla aplikacji?

Czy istnieją inne trudne sposoby korzystania z biblioteki dynamicznej na nieuzbrojonych urządzeniach z systemem iOS?

Odpowiedz

1

iOS blokuje wszystkie dynamiczne ładowanie kodu wykonywalnego, który nie jest częścią systemu; Obejmuje to Framework, dylibs, strony pamięci wykonywalne używające mmap, itd. Mam nadzieję, że pewnego dnia udostępnią dynamiczne pakiety, ale na razie będziesz musiał zbudować swoje moduły jako statyczne biblioteki i połączyć się z nimi w czasie kompilacji. Nie ma znanego sposobu obejścia tego ograniczenia.

Wiele osób napisało o tym, jak to zrobić (np. http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/), lub możesz użyć istniejącego projektu jako przykładu. Jedną z nich, która mi się podoba, jest GData objc API, który ma cele zarówno dla dynamicznej struktury zbudowanej dla OS X, jak i statycznej biblioteki, gdy jest tworzony dla systemu iOS: http://code.google.com/p/gdata-objectivec-client/

Powiązane problemy