Dlaczego Apple zezwala tylko na statyczne ramy w systemie iOS?

11

Najwyraźniej Apple ma możliwość tworzenia dynamicznie ładowanych bibliotek (znanych jako frameworki) dla iOS, ponieważ są one dostarczane z XCode (np. UIKit). Twórcy aplikacji mają tylko możliwość tworzenia bibliotek statycznych lub, w najlepszym razie, nakłaniają Xcode do myślenia, że ​​ładuje platformę, podczas gdy faktycznie ładuje bibliotekę statyczną, jest to znane jako tworzenie fałszywej ramy, wygoda przeciągania i upuszczania, ale żadna z korzyści dynamicznego ładowania.

Jakie jest powody, dla których Apple utrzymuje dynamiczne ramy przed twórcami aplikacji? Wydaje się, że znacznie ułatwiłoby to korzystanie z bibliotek zewnętrznych, ponieważ programiści nie musieliby polegać na wybrednych flagach linkerów lub łańcuchach zależności bibliotek otwartych.

Widzę wspólny powód to bezpieczeństwo. Dlaczego zatem Apple zezwala na to w OSX, a nie na iOS? Czy bezpieczeństwo również nie jest tam wymagane?

EDYCJA: Nie dotyczy już iOS 8. Apple dodał obsługę dynamicznych ram.

Joel Fischer
źródło

Odpowiedzi:

17

Jednym z kryteriów akceptacji programu przez Apple jest to, czy wywołuje on nieobsługiwane interfejsy API Apple (lub inne złe rzeczy). Wymagając statycznego łączenia, mogą udowodnić, że oprogramowanie nie wykonuje takich połączeń. Zezwolenie na dynamiczne łączenie pozwoliłoby na późniejsze dodanie dowolnego zachowania, co prawie unieważnia proces ich zatwierdzania.

Apple umożliwia dynamiczne łączenie w OSX, ponieważ cóż, Macintoshes to prawdziwe komputery, a nie tablety, a użytkownicy prawdziwych komputerów oczekują, że będą programowalne w ten sposób. Rynek tabletów i telefonów różni się od rynku komputerów stacjonarnych i laptopów. Komputery są urządzeniami produkcyjnymi; użytkownicy oczekują, że będą mogli tworzyć na nich produkty, w tym pisać programy, które robią, co chcą i jak chcą. Nigdy nie było to oczekiwanie na tablety, które są urządzeniami konsumpcyjnymi.

Cały sens tabletów i Apple Store polegał na stworzeniu zamkniętego środowiska w celu ochrony konsumentów przed wirusami dla pieszych i tym podobnymi (no i umożliwieniem Apple'owi zebrania 30% całej sprzedaży oprogramowania realizowanej przez ich sklep).

Robert Harvey
źródło
7
Uwaga: Apple dopuszcza teraz dynamiczne ramy na iOS od iOS 8.
Joel Fischer
@Robert Harvey dziękuje za wyjaśnienie, ale w iOS 8 są otwarci na korzystanie z dynamicznych ram. czy pozwoli hakerom wpływać na iOS / aplikację? nie masz pojęcia, w jaki sposób Apple stworzyło dynamiczne frameworki jako otwarte dla programistów, ale uniemożliwiając hakerom korzystanie z nich. dzięki!
Vijay-Apple-Dev.blogspot.com
8

Powodem są zabezpieczenia, jak wspomniano w pytaniu dotyczącym przepełnienia stosu :

Powodem są zabezpieczenia: ponieważ bibliotekę dynamiczną można ładować i rozładowywać w czasie wykonywania, możesz pobrać dodatkowy kod wykonywalny i załadować go (pomyśl o wtyczce). Może to zostać skompromitowane przez hakera, a następnie wykonanie złośliwego kodu w telefonie jest bardzo złą rzeczą. Umożliwiłoby to również dodanie niezatwierdzonych funkcji do zatwierdzonej aplikacji. Krótko mówiąc: w tym środowisku Apple uważa dynamiczne łączenie za urządzenie Pandoras, które musi być ściśle kontrolowane, w przeciwnym razie może zagrozić bezpieczeństwu i zgadzam się, że ma to sens w telefonie.

Inżynier świata
źródło