Кросс-платформенная разработка iOS / Mac OS X Objective-C?

Я скоро начну проект iOS среднего размера, приложение, ориентированное на документ.

Позже программное обеспечение может быть перенесено в Mac OS X. Конечно, весь пользовательский интерфейс должен будет измениться; это не то, о чем я прошу.

Можно ли написать основную логику таким образом, чтобы она была кросс-платформенной (только для Mac / iOS) или более легко переносилась? Кто-нибудь сделал это раньше, или обычный способ просто написать другой код для обеих платформ?

Я благодарен за любые советы по этому поводу, будь то Code, Frameworks, Version Control – что угодно. Мне не хотелось бы осознавать, что я нарисовал себя в углу только после этого, поэтому я хочу начать как можно лучше.

Первый шаг – придерживаться шаблона MVC. Для просмотра часто требуется переписывание между iOS и OS X, как вы говорите, но слой модели и часть контроллеров можно повторно использовать.

Фонд ( NSArray т. Д.) И основные данные распределяются между iOS и OS X, поэтому не должно быть проблем писать обычный код Objective-C, который управляет уровнем модели, например, сохранение данных на диск, извлечение их из сети , и т.д.

Один важный момент – противостоять стремлению написать сегмент длинного ишевого кода, который в основном касается слоя модели непосредственно в вашем контроллере представления. Этот длинный сегмент кода может быть абстрагирован в метод, действующий на модельный слой сам по себе; то вы можете повторно использовать этот код в приложении OS X позже.

Например, предположим, что я создаю контроллер представления, управляющий отображаемым документом. Затем в методе действия, определенном в контроллере представления, соответствующем операции редактирования, я мог бы написать код, непосредственно вникающий в деталь уровня модели и реализовать операцию редактирования. Тогда мне нужно будет произвести довольно большое изменение в исходном коде, когда контроллер представления будет перенесен в оконный контроллер (или подкласс NSDocument ). Скорее, я бы применил метод для этой конкретной операции редактирования внутри самого объекта документа, так что я могу вызвать этот метод как из контроллера вида в приложении iOS, так и из оконного контроллера в приложении OS X.

Любые классы чистой логики и «модели», которые вы создаете, будут в основном работать как с iOS, так и с Mac OS X, если вы придерживаетесь классов Cocoa и SQLite / Core Data и т. Д., Которые являются общими для обоих системы. Тем не менее, файловая система iOS сильно изолирована, что не является ограничением на OS X, и это то, что вам также нужно будет иметь дело с «ориентированным на документ».

Однако, поскольку вы заявляете, что уровни уровня пользовательского интерфейса полностью различаются в обеих системах, iOS использует различные классы UIKit по сравнению с различными классами NS в OS X. В этом случае маловероятно, что вы сможете поделиться на этом уровне ,

Что касается совместного использования кода между двумя проектами, вы можете создать «общий» проект объектов более низкого уровня и т. Д., Добавить и это как ссылку в проектах iOS и Mac OS X, хотя это может оказаться несколько болезненным если вещи расходятся (что, я подозреваю, они могут). Независимо от того, есть хорошая запись в блоге по этой теме под названием « Легкий, модульный обмен кодами через iPhone Apps: статические библиотеки и кросс-проектные ссылки » Клинта Харриса, который стоит прочитать, хотя он фокусируется прежде всего на iOS-стороне вещей ,

вы можете просто написать на C, а затем поместить его в ios, osx, java, android, …

Я не знаю много об этом, другие ребята, вероятно, знают больше, но если вы когда-нибудь захотите перенести проект с iOS на Mac, то, возможно, UMEKit может вам помочь …

  • NSUrlRequest: где приложение может найти заголовки по умолчанию для HTTP-запроса?
  • Преобразование (или копирование) объекта в экземпляр подкласса в Objective-C
  • Дженкинс: где файл login.keychain в папке / Users / * name * / Library / Keychains?
  • Пример игровой площадки Alamofire разбивается на HTTPS-URL в версии 1.2.1
  • Каков правильный способ анализа даты ISO8601 в какао?
  • Работа с компонентами NSDate в Swift
  • Как обрабатывать асинхронный запрос на сервер redis с помощью одного соединения?
  • Установить сертификат на устройство iOS через OSX
  • didReadRSSI вызвал iOS, но не на OS X
  • Функция Swift StringBetweenString
  • xcode 6.3 раскадровка компилируется очень медленно
  • Давайте будем гением компьютера.