Как Вы портируете приложение Какао/Mac на Windows?

Как Вы портируете приложение Какао/Mac на Windows? Я имею в виду, как Вы пошли бы об этом? Предположите, что приложение было записано с Objective C и Какао, нет ничего, представляют себе продолжаться, никакой "механизм", который мог быть факторизован и т.д.

Переписать с нуля? Я не думаю, что будут огромные перекрытия между Mac и кодовыми базами Windows, правильно?

5
задан Ron 14 January 2010 в 06:23
поделиться

4 ответа

Проблема с целью C - это очень плохая поддержка на любой платформе, которая не является OS X. Вы можете попытаться использовать Cocotron , но я бы не считал это Производство готово еще.

Для портативности переписывается в порядке. С помощью разумного использования стандартного C или C ++ для «ядра» приложения вы сможете по-прежнему реализовать определенный код платформы. Если вам не нравится поддержание двух интернет-панелей, вы также можете попробовать такую ​​инструментарий, такой как Qt

2
ответ дан 14 December 2019 в 01:08
поделиться

Я считаю, что ваш вопрос основан на заблуждении. Программирование не связано главным образом с переводом с человеческого на компьютерный язык. Изучение языка программирования не сделает кого-то программистом больше, чем изучение музыкальной нотации сделает их композитором.

Это говорит, что если вы пишете на достаточно высоком уровне практически на любом языке и потратите несколько минут, объясняя синтаксис, вы можете передать суть части кода выделенному не программисту. И наоборот, достаточно точная спецификация естественного языка иногда может быть переведена в высокоуровневые функции (хотя люди редко готовы приложить усилия, чтобы написать такую спецификацию)

. -121--991966-

Не следует делать конструктор частным. Период. Сделайте его защищенным, чтобы можно было расширить класс, если нужно.

Редакция: Я стою на этом, сколько бы ни бросали на это понижения. Вы отсекаете потенциал для будущего развития кода. Если другие пользователи или программисты действительно намерены расширить класс, то они просто изменят конструктор на защищенный в источнике или байт-коде. Вы ничего не сделали, кроме того, чтобы сделать их жизнь немного сложнее. Включите предупреждение в комментарии конструктора и оставьте его при этом.

Если это служебный класс, более простое, правильное и элегантное решение - пометить весь класс как «статический финал», чтобы предотвратить расширение. Не стоит просто помечать конструктор как частный; действительно определенный пользователь может всегда использовать отражение для получения конструктора.

Допустимые виды использования:

  • Одно хорошее использование защищенного конструктор должен принудительно использовать статические заводские методы, которые позволяют ограничение создания экземпляров или пула & повторного использования дорогостоящие ресурсы (подключения к БД, собственные ресурсы).
  • Singletons (обычно не рекомендуется, но иногда необходимо)
-121--2031693-

В зависимости от того, какие объекты и инфраструктуру вы используете для вашего приложения для какао, вы можете сойти с рук, используя gnustep , хотя конечный результат, вероятно, будет выглядеть очень странно для пользователей окон, и среду разработки может быть немного трудно настроить в первую очередь.

2
ответ дан 14 December 2019 в 01:08
поделиться

Вы знаете Cocotron ? Похоже, что проект, возможно, стал устаревшим, но в любом случае это хорошая отправная точка. Это проект для порта основных API.

Если ваше приложение не отделено чисто (то есть: A La MVC), то единственное решение - переписать, я думаю.

1
ответ дан 14 December 2019 в 01:08
поделиться

По моему опыту, это не так просто. Встроенный клиент PHP SOAP не работает с SOAP-сервером на основе .NET, который нам пришлось использовать. Он пожаловался на недопустимое определение схемы. Несмотря на то, что клиент .NET работал с этим сервером нормально. Кстати, позвольте мне утверждать, что совместимость SOAP - это миф.

Следующим шагом был NuSOAP . Это сработало довольно долго. Кстати, ради Бога, не забудьте кэшировать WSDL! Но даже при кэшировании WSDL пользователи жаловались, что чертовски медленно.

Затем мы решили открыть HTTP, собрав запросы и прочитав ответы с помощью SimpleXMLElemnt , вот так:

$request_info = array();

$full_response = @http_post_data(
    'http://example.com/OTA_WS.asmx',
    $REQUEST_BODY,
    array(
        'headers' => array(
            'Content-Type' => 'text/xml; charset=UTF-8',
            'SOAPAction'   => 'HotelAvail',
        ),
        'timeout' => 60,

    ),
    $request_info
);

$response_xml = new SimpleXMLElement(strstr($full_response, '<?xml'));

foreach ($response_xml->xpath('//@HotelName') as $HotelName) {
    echo strval($HotelName) . "\n";
}

Обратите внимание, что в PHP 5,2 вам понадобится pecl_http, насколько (сюрприз-сюрприз!) нет встроенного HTTP-клиента.

Когда мы открываем HTTP, количество просить SOAP превысило 30%. И с этого момента мы перенаправляем все жалобы производительности на серверных парней.

В конце концов, я бы рекомендовал этот последний подход, а не из-за производительности. Я думаю, что в общем, в динамическом языке, таком как PHP, нет никакой выгоды от всего этого WSDL/type-control. Вам не нужна модная библиотека для чтения и записи XML, со всем, что блокирует генерацию и динамические прокси. Ваш язык уже динамичен, и SimpleXMLElement работает просто и просто. Кроме того, у вас будет меньше кода , что всегда хорошо.

-121--1075855-

Чтобы получить папку «Мои документы», можно воспользоваться:

from win32com.shell import shell
df = shell.SHGetDesktopFolder()
pidl = df.ParseDisplayName(0, None,  
    "::{450d8fba-ad25-11d0-98a8-0800361b1103}")[1]
mydocs = shell.SHGetPathFromIDList(pidl)
print mydocs

Из здесь .

Я не уверен, что эквивалентная волшебная инканция для «Program Files», но, надеюсь, этого должно быть достаточно, чтобы начать.

-121--3286771-

У меня есть сомнения относительно кокотрона. Его не ясно с сайта кокотрона, что кокотрон на самом деле производство еще готово. Id подозревает, что можно было бы начать разработку новых приложений и постоянно использовать кокотрон для обслуживания и тестирования окон на ходу. Но преобразовать его в существующий проект может быть гораздо более масштабной задачей. Альтернативы кокотрону также нет - кроме, возможно, гнустепа.

Практический подход к межплатформенной разработке включает в себя разработку компонентов приложения, отличных от GUI, один раз в C или C++. А затем с помощью кроссплатформенной библиотеки GUI, такой как QT - что ОЧЕНЬ хорошо в генерации и использовании собственного пользовательского интерфейса, где это возможно или подделка его, где это возможно. Пожалуйста, перейдите к qt.nokia.com и скачать последнюю сборку QTCreator для windows и mac - Посмотрите, как одно и то же приложение QT выглядит и чувствует себя очень убедительно на обеих платформах.

Если QT не предоставляет достаточно нативного решения, то вам нужно разработать свой GUI дважды: - один раз в Cocoa, и один раз в Win32. GUI какао будет в целевом C, конечно, Win32 GUI в C/C + +.

Ваш код приложения без GUI, написанный на языке c++, не сможет напрямую вызывать Objective-C, но не будет трудным для записи классов прокладок, реализованных в файлах .mm - предоставьте интерфейс c++,и переносить доступ к объекту c или классу.

Вам также придется придумать альтернативу CoreData на окнах - возможно, sqlite? Учитывая, что XCode имеет интегрированную поддержку рамка, и тестирование нескольких кодовых путей является, ну, больше работы - возможно, удаление CoreData в пользу общего уровня является лучшим подходом?

4
ответ дан 14 December 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: