Какова подходящая кроссплатформенная методология для iOS и Mac OS X? - PullRequest
3 голосов
/ 30 августа 2010

Кажется, что есть много ответов для кроссплатформенных фреймворков для устройств (iPhone + Android) и кроссплатформенных фреймворков для настольных компьютеров (Mac + Win + Linux). Это другой вопрос, касающийся подходящей платформы, методологии, шаблонного приложения, учебного пособия или просто полезных советов по разработке нативных приложений (не только веб-приложений), которые кросс-платформенны и переносимы между ОС устройства и настольной ОС.

Я хочу написать приложение, которое может работать как на моем iPhone (или iPad), так и быть скомпилированным для работы в Mac OS X (а не только в симуляторе). Я готов жить только с базовыми элементами пользовательского интерфейса, которые являются общими для обеих платформ (только 1 окно, общие кнопки, текстовые поля и т. Д.)

Какова наилучшая методология для создания пары приложений с минимальным количеством переписываний кода # ifdef и других платформ, которые будут работать на моем iPhone и изначально на моем MacBook?

Ответы [ 2 ]

3 голосов
/ 30 августа 2010

Нет простого способа сделать это, используя стандартные элементы управления пользовательским интерфейсом. AppKit и UIKit - совершенно разные животные. Даже базовые UIView и NSView сильно отличаются по структуре и функциям. На этом уровне вы не увидите ничего, что можно было бы сделать кроссплатформенным.

Однако есть элементы дисплея, которые можно настроить для работы на Mac и iOS с минимальными изменениями. Базовые анимации CALayers являются одним из таких элементов, поскольку они одинаковы для Mac OS X и iOS. Вот почему мы решили использовать их в качестве основы для Core Plot фреймворка, который использует практически идентичную кодовую базу для отображения графиков на Mac и iOS. Есть несколько вещей, специфичных для платформ (например, инвертированная система координат, которую UIView применяет к своему базовому слою), но большая часть кода будет транслироваться на обе платформы.

Вы упоминаете о написании игры. Если вы используете для этого OpenGL ES, большая часть написанного вами кода рендеринга также будет работать на Mac. Есть несколько вещей, которые вам нужно изменить, но по большей части OpenGL ES является подмножеством настольных OpenGL. Тем не менее, для простой двухмерной игры я бы порекомендовал придерживаться Core Animation, если только вы действительно не столкнетесь с кирпичной стеной с точки зрения производительности, просто потому, что вы будете писать намного меньше кода.

Элементы, которые я упомянул до сих пор, все были в части View шаблона проектирования Model-View-Controller. Код вашего контроллера будет зависеть от приложения, но вы сможете сделать большую часть этой платформы независимой. Если вы используете простую модель или даже ту, которая использует постоянство SQLite или Core Data, это должно быть тривиально, чтобы заставить работать на Mac и iOS с одним и тем же кодом.

Приложение Mac и iOS (даже между различными устройствами iOS) будут иметь совершенно разный дизайн ядра. Вы не можете просто подковать что-то с одной платформы на другую. Игры, вероятно, более переносимы, чем что-либо еще, но вам все равно нужно будет выполнить какую-то специальную работу, чтобы отразить уникальные атрибуты каждого вычислительного устройства.

1 голос
/ 01 февраля 2014

Я тоже борюсь с этим;Я использую Unity3D, и бесплатная лицензия не позволяет использовать собственные плагины OS X.

Я только что провел последний час, читая http://rayvinly.com/how-to-build-a-truly-universal-framework-for-ios-and-mac-with-just-a-single-codebase/

Рэй сделал суперпрезентацию, вы можете скачать его 30-страничный документ электронной книги!Он также предоставляет шаблон проекта.

Я думаю, я мог бы использовать эту настройку, чтобы создать единую поверхность для рисования (то есть одно окно на обеих платформах), которую я мог бы нарисовать с помощью SpriteKit.

Затем оберните мышью / сенсорный ввод для создания единого ввода.

Что касается готовых каркасов, http://chameleonproject.org/ выглядит интересно.

http://kivy.org/#home выглядит многоДальше интереснее: многоплатформенная обёртка Python GLES2

Также http://polycode.org/ http://qt -project.org /

Что вы выбрали в итоге?

...