Один из аргументов против создания кроссплатформенного фреймворка заключается в том, что он всегда будет нацелен на наименьший общий знаменатель - клиенты фреймворка хотят писать код только один раз и работают «везде», поддерживаемые. Таким образом, одна удивительная аппаратная платформа будет просто похожа на любую другую платформу, которая работает на этой платформе, поскольку вы не можете использовать ее функции.
Со временем это, к сожалению, приводит к тому, что фреймворки склоняются к своей самой популярной платформе и объединяют поддержку других платформ, или просто отрывают их, когда заканчивается бюджет / популярность.
Один из способов извлечь выгоду из специфических для платформы возможностей - создать нечто вроде #if PLATFORM_FEATURE_X
конструкции вокруг всего конкретного кода или эквивалентных проверок во время выполнения, что приведет к раздуванию кода. Это становится довольно утомительным довольно быстро, поскольку варианты одной и той же платформы потребуют особой обработки. Например, некоторые XBox v1 не имели жесткого диска, поэтому игры, использующие кроссплатформенные инструменты, не могли использовать его для кэширования, по сравнению с версией для ПК, где вы можете гарантировать жесткий диск.
Для приложений для настольных ПК и приложений производительности внешний вид платформы кажется важным, но многие приложения имеют собственный стиль, поэтому нет проблем выглядеть одинаково на всех платформах, например, приложениях, созданных с помощью AIR.
Производители оборудования, такие как Apple, Sony, Nintendo и Toshiba, захотят сделать так, чтобы их продукты отличались от конкурентов, например Touch, акселерометры / гриоскопы, Blu-Ray, 3D-дисплей. Маловероятно, что когда-либо будет платформа со всеми функциями всех конкурентов, объединенных в одну (из-за стоимости и сложности), так что одна победит.