Почему Apple разрешает использовать статические фреймворки только на iOS?

11

Очевидно, что у Apple есть возможность создавать динамически загружаемые библиотеки (известные как фреймворки) для iOS, поскольку они поставляются с XCode (например, UIKit). Разработчики приложений могут только создавать статические библиотеки или, в лучшем случае, обманывать Xcode, думая, что он загружает фреймворк, когда фактически загружает статическую библиотеку, это называется созданием фальшивых фреймворков, что является некоторым удобством перетаскивания мышью, но ни одно из преимуществ динамической загрузки.

Каково обоснование Apple для сохранения динамических структур от разработчиков приложений? Похоже, что это значительно облегчит использование внешних библиотек, поскольку разработчикам не придется полагаться на привередливые флаги компоновщика или цепочки зависимостей библиотек с открытым исходным кодом.

Я вижу общую причину безопасности. Почему же Apple разрешает это на OSX, а не на iOS? Разве безопасность там тоже не является обязательным требованием?

РЕДАКТИРОВАТЬ: Это больше не относится к iOS 8. Apple добавила поддержку динамических структур.

Джоэл Фишер
источник

Ответы:

17

Один из критериев принятия Apple программы заключается в том, выполняет ли она вызовы неподдерживаемых API-интерфейсов Apple (или других вредоносных программ). Требуя статического связывания, они могут доказать, что программное обеспечение не выполняет такие вызовы. Разрешение динамического связывания позволило бы позже добавить любое поведение, что в значительной степени лишает законной силы процесс утверждения.

Apple разрешает динамическое связывание в OSX, потому что Macintoshes - это настоящие компьютеры, а не планшетные устройства, и пользователи реальных компьютеров ожидают, что они будут программироваться таким образом. Рынок планшетов и телефонов сильно отличается от рынка настольных и портативных компьютеров. Компьютеры являются производственными устройствами; пользователи ожидают, что смогут производить на них продукты, включая написание программ, которые делают то, что они хотят, как они хотят. Это никогда не было ожиданием планшетных устройств, которые являются устройствами потребления.

Весь смысл планшетов и Apple Store заключался в создании закрытой среды для защиты потребителей от пешеходных вирусов и тому подобного (ну, и чтобы Apple могла собирать 30% всех продаж программного обеспечения, совершаемых через их магазин).

Роберт Харви
источник
7
Примечание: Apple теперь разрешила динамические фреймворки на iOS начиная с iOS 8.
Джоэл Фишер
@ Роберт Харви, спасибо за объяснение, но с iOS 8 они открыты для использования динамических фреймворков. это позволит хакерам влиять на iOS / приложение? Есть ли у вас какие-либо идеи, как Apple сделала динамические фреймворки открытыми для разработчиков, но не позволяя хакеру это сделать? благодаря!
Vijay-Apple-Dev.blogspot.com
8

Причина - безопасность, как упоминалось в этом вопросе переполнения стека :

Причина в безопасности: поскольку динамическая библиотека может загружаться и выгружаться во время выполнения, вы можете загрузить дополнительный исполняемый код и загрузить его (например, плагин). Это может быть взломано хакером, и тогда выполнение вредоносного кода на вашем телефоне - это очень плохо. Это также позволило бы добавить неутвержденные функции в утвержденное приложение. Короче говоря, в этой среде Apple рассматривает динамическое связывание как ящик Pandoras, который должен строго контролироваться, иначе это может поставить под угрозу безопасность, и я согласен, что это имеет смысл в телефоне.

Мировой инженер
источник