Microsoft — мировой лидер в области ПО и ИТ-услуг
498,41
рейтинг
7 августа 2015 в 08:03

Разработка → Компиляция iOS приложений для Windows Store



В апреле этого года на конференции //Build был сделан очень интересный анонс, который показал возможность компиляции и сборки ObjectiveC кода для Windows Store. С радостью хочу сообщить что теперь эта технология и инструменты стали публичными, вы можете уже сейчас загрузить компоненты сборки ObjC/iOS приложений для Visual Studio 2015 и собрать приложение для Windows Store.

C чего начать


По адресу https://github.com/Microsoft/WinObjC/releases опубликован SDK который содержит компоненты для сборки приложения iOS для Windows Store. Для того чтобы попробовать их в деле вам понадобится Windows 10 и Visual Studio Community 2015. Распакуйте содержимое winobjc.zip и откройте файл samples\HelloUI\HelloUI-WinStore10.sln. Далее делаем активным проект Hello-UI-Winstore (в Solution Explorer вызвать контекстное меню, «Set as StartUP Project») и нажимаем F5.



Добро пожаловать в мир кросс-компиляции ObjectiveC для Windows.



Пакет, который подготовила команда Microsoft содержит компилятор ObjectiveC, компоненты интеграции с Visual Studio 2015, основные части SDK iOS и дополнительные инструменты конвертации приложений.
C основными возможностями SDK вы можете ознакомиться из примера samples\WOCCatalog\WOCCatalog-WinStore10.sln.



В этом примере показаны основные варианты использования интерфейсных компонент:



Взаимодействие с OpenGL:



Кстати говоря, этот SDK также может собирать приложения для Windows 8.1 и Windows Phone 8.1.



Несколько необычно видеть стандартные интерфейсные элементы iOS на Windows Phone.

Конвертация проектов iOS


Для того чтобы превратить проект iOS в проект Visual Studio можно воспользоваться специальной утилитой \bin\vsimporter.exe.
Например, сделаем git clone https://github.com/ericjohnson/canabalt-ios.git и запустим в каталоге исходного кода этого проекта vsimporter. В результате у вас появится файл Canabalt-WinStore10.sln, открываем его в Visual Studio 2015 и собираем проект:



Почему-то он работает повернутый на 90 градусов.

Или например:

git clone https://github.com/haqu/tweejump.git
cd tweejump
winobjc_sdk_path\bin\vsimporter.exe

Результат компиляции для Windows 10:



Что пока в активной разработке?


Проект WinobjC находится в активной разработке и некоторые возможности не работают:
  1. Нет поддержки ARM, только x86.
  2. Оптимизации компилятора не работают. Скорее всего они приведут к крашу clang, пока можно использовать только debug сборки.
  3. Autolayout
  4. Storyboard support
  5. MapKit
  6. AssetsLibrary
  7. AddressBook
  8. Ads
  9. Objective-C annotations
  10. Media Capture

Если у вас есть вопросы и вы хотели бы узнать больше об этом проекте, обращайтесь на форумы http://stackoverflow.com/, маркируйте свои вопросы тегом WinObjC и почитайте вики https://github.com/Microsoft/WinObjC/wiki.
Автор: @dmandreev
Microsoft
рейтинг 498,41
Microsoft — мировой лидер в области ПО и ИТ-услуг

Комментарии (67)

  • 0
    Только для Windows 10? Для Windows 7 не будет работать?
    • +1
      Только для Windows Store приложений (в том числе win8). В первую очередь политика, во вторую — несколько разные стеки технологий. МС сейчас работает (хотя по некоторым сведениям с 2010) над переносом классических приложений в стор.
      • 0
        Да пофиг на стор, я хочу просто чтобы на локальной машине компилировался и запускался код на objc (чисто для поиграться).
        У меня на Win7 SP1 установлена VS2015 Community, этот SDK будет работать?
        • +3
          1) на 7ке не работает WinRT SDK, так что нельзя даже если очень захотеть.
          2) На гитхабе написано, что сейчас все работает только на 10ке.

          Обновляйтесь :)
          • 0
            Спасибо, теперь понятно. Но лучше подожду когда Apple портирует Swift на другие платформы, думаю там поинтереснее будет:) С objc можно поиграться и в виртуалке, да и в gcc/mingw в ограниченном объеме — тоже.
    • 0
      На самом деле — попробуйте. Там используется модифицированный clang, возможно результирующие сборки — это обычные нативные DLL. Нужно изучить этот вопрос.
      • 0
        На самом деле — получилось! После запуска проекта запустился инсталлятор Студии, который что-то долго скачивал и устанавливал. После этого проект на ObjC скомпилировался.
        Правда одна странность — в скомпилированном файле WOCCatalog.exe AVG обнаружил вирус Win32/Heri. Ну да ладно, остальные антивирусы на Virustotal ничего не нашли, думаю это ложное срабатывание.
        В общем в итоге под Windows 7 SP1 тестовый проект на objc компилируется. Эмулятор действительно не поддерживается, но предлагается подключить реальный WinPhone девайс (которого у меня тоже нету), так что эксперимент на этом закончен:)
  • 0
    3.Autolayout
    4.Storyboard support
    5.MapKit

    Странно, на билде говорили, что это все есть.

    Добавить можно, что swift тоже не поддерживается.
    • +7
      Название проекта WinObjC вам что-нибудь говорит? Добавить можно что brainfuck не поддерживается
      • 0
        Вот с BF-то как раз проще. Есть BrainFuck.net подключить его к WinRT-проекту, я думаю, можно.

        А про swift я специально прокомментировал, потому что это был первый вопрос докладчику на Build. Начинающие iOS разработчики беспокоятся.
  • +1
    Ох, с asset'ами все действительно очень плохо
    • 0
      Надеюсь это всё же временное решение пока они не сделали модуль для работы с ресурсами
  • +1
    ох, раскатал было уже губу, но для наших проектов без поддрежки autolayout и storyboard не имеет смысла
  • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Когда добавят поддержку арма и релизных сборок — можно начинать пробовать. Кроме этого из списка в нашем проекте есть только MapKit. Ехидно посмеиваюсь над любителями IB, автолэйаутов и свифта :)
    • +1
      И что, даже ассетов нет?
      • 0
        А ассетов в списке нет :) Но да, вы верно заметили, ассеты тоже нужны.
        • 0
          Не пользовался AssetsLibrary, думал это про них)
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        Дело в том, что constraints удобны для использования только в IB. Если отрисовывать интерфейс полностью кодом, то проще реализовать старый добрый layoutSubviews. А уже IB vs программная отрисовка — это отдельная большая тема для рассуждений: в каких-то случаях лучше одно, в других — другое.
        • НЛО прилетело и опубликовало эту надпись здесь
          • +2
            Имхо, смысл не использовать IB есть, когда в приложении сложный UI с большим количеством переходов. В этом случае ваши макеты превратятся в вечнотормозящую (в Xcode) мешанину.
            • НЛО прилетело и опубликовало эту надпись здесь
              • 0
                вот только я так до сих пор не увидел, чтоб из IB можно было задать состояние, когда кнопка selected и pressed одновременно, а из кода можно. Таких моментов дофига, и в целом, я понимаю тех, кто все делает из кода, хотя сам предпочитаю xib
              • 0
                Возможно, спорить не буду, опыта использования IB у меня нет. Доводилось просто видеть проекты с описанной мной кашей, в которой очень сложно разобраться.
  • +2
    Это без сомнений очень крутая новость, но я надеюсь что разработчики всё-таки будут стараться найти ресурсы сделать UI на XAML, а код на Objective-C использовать для всего остального.
    • НЛО прилетело и опубликовало эту надпись здесь
      • +1
        Глядишь напишут парсер для custom-xml, xib-ов.

        шо там парсить-то. Самое сложное — порт UIKit уже сделали.

        А учитывая удобность средств разработки IB и виндовых, никто не будет дергаться.

        Вы про то, что IB застрял на уровне WinForms?
      • +1
        Рынок winphone — да. Но Вы, вероятно, упустили тот момент, что в Win10 что винфон, что «большая» винда — один код и даже один XAML при желании.
        • НЛО прилетело и опубликовало эту надпись здесь
          • +1
            Да ну?
            • 0
              Ну да.

              Совокупность андроида сейчас больше чем совокупность винды.
              iOS в этом году будет столько же сколько и customer винды

              • 0
                Что-то Википедия не согласна с вами.
                • 0
                  Devices in use today

                  Closed, Google Android: 1.25-1.5bn?
                  Chinese Android -4-500m
                  PCs: 1.5-1.6bn
                  -of which consumer PCs: 7-800m
                  iOS: 7-800m
                  • 0
                    И откуда это?
                      • 0
                        Ну, ок, Допустим, этот странный чувак со «своей моделью» прав. Все равно получается, что совокупность андроидов не больше совокупности винды.

                        Хотя методы чувака из венчурного фонда надо проверять.

                        А статья 2011 года — это вообще прекрасно.
                        • 0
                          Этот странный чувак работает в странной конторе которая инвестировала в половину компаний интернета. И в работу чувака входит: I try to work out what's going on and what will happen next.

                          Идея в том, что андроиды в большинстве своём уже у consumer владельцев, и согласно прикидкам, консьюмеров на этой платформе больше чем на винде.

                          А статья да, хороша. Даёт возможно оттолкнуться.

                          1.2 ярда Windows на конец(!) 2011. Я взял статистику Гартнера

                          2007 272,4
                          2008 302,2
                          2009 308,3
                          2010 350,9
                          2011 352,8
                          — 2012 351,0
                          2013 316,4
                          2014 315,8

                          Совокупно за 5 лет (2007-2011) продано 1.586 ярда ПК. Что несколько меньше 1.25 ярда активной Windows. Но будем считать, что время жизни ПК 5 лет.

                          За 5 лет (2014-2010) 1.6 ярда ПК, отсюда число «PCs: 1.5-1.6bn» выглядит реалистичным, даже если учесть, что входу ПК до 2010 года выпуска.

                          И 1/2 от 1.6 ярда как консьюмер тоже вполне реалистично.

                          При этом уже к сентябрю 2013 года был 1 миллиард активаций Google версии Андроида.

                          Так что модель вполне себе реалистичная.
                • 0
                  Статистика от Akamai. 15-30% трафика интернета.

                  image
                  • 0
                    Даже по этой картинке видно: десктопных браузеров за 50%, исключая сафари. Даже если десятая доля это линукс/макос, то остаётся более 45 процентов на виду. Со статистикой Википедии вполне сходится
                    • 0
                      На работе Win ПК, дома Win ПК. А юзер — один.
                      • 0
                        Телефон, планшет, а юзер один, и?
                        • 0
                          Поэтому, по веб статистике нельзя делать выводов.
                          Только по device shipments, продажам и активациям.
                          • 0
                            По веб статистике можно судить об активных пользователях. Туда не попадет тонна пылящихся на полках устаревших девайсов, куча серверов, почти не попадет огромное количество тестовых андроидов.
                          • 0
                            Опять же, телефон, планшет — продажи/активации две, пользователь один.

                            Бесполезный спор, короче, кто может в математику, уже давно все понял.
                            • НЛО прилетело и опубликовало эту надпись здесь
                            • 0
                              Рановато вы автоматически к смартфону прикладываете планшет:
                              Tablet 2014 Unit Shipments — 229,6 mln
                              Worldwide Smartphone Sales to End Users by Vendor in 2014 — 1,244,890 mln

                              Смартфонов на Андроиде только за 2014 — 1 миллиард!!!
                              А всех Windows устройств — 360 млн!
                              • 0
                                А всех Windows устройств — 360 млн!

                                Что это за цифра и откуда вы ее взяли? Windows устройств порядка 1.3 миллиардов в мире. Андроид устройств не только за 2014, а в целом в мире порядка 1 миллиарда.

                                ios аудитория там раза в 2-3 платежеспособнее, чем на остольной совоккупности вместе взятой.

                                Фантазии хипстеров это всегда очень смешно.
                                • НЛО прилетело и опубликовало эту надпись здесь
                                  • 0
                                    что ж они ломают телефоны и приложения пиратят. От хорошей жизни, наверное.
                                    • 0
                                      after the Pangu 7.1-7.1.2 (7.1.1 at the time) jailbreak came out but here are the results:

                                      32% had not jailbroken, but wanted to
                                      25% had not jailbroken, and were against it
                                      17% had jailbroken and enjoyed it
                                      17% didn't know what jailbreaking was
                                      9% had jailbroken, but restored it afterwards

                                      Статистика о том, что ломают новые аппараты, а не б\у у школьника — отсутствует.
                                  • 0
                                    Вы не в курсе про существование телефонов на андройде стоимостью в 1к$(самсунги и прочее)?
                                    • НЛО прилетело и опубликовало эту надпись здесь
                                    • 0
                                      ну миллионов 20 в квартал у Samsung vs 50 у Apple.
                                • 0
                                  А всех Windows устройств — 360 млн!

                                  Что это за цифра и откуда вы ее взяли? Windows устройств порядка 1.3 миллиардов в мире.

                                  Комменты не читай, а сразу отвечай. (с) народная мудрость

                                  360 млн Windows устройств было продано за 2014 год. Числа я взял из отчета Гартнера и Микрософта, а затем сложил. 315,8 + 40.

                                  Андроид устройств не только за 2014, а в целом в мире порядка 1 миллиарда.

                                  Вы с какого года к нам поступили? 1 миллиард активаций у Андроида был в сентябре 2013. С тех пор прошло два года. Тут речь уже о том, что как бы у Андроида не все 2 миллиарда. И при этом они в карманах пользователей, а не на столах офисов, банкоматах, станках и другом узкоспециализированном оборудовании.
                                  • 0
                                    К сожалению сам гугл явно не в курсе этих цифр и на Google I/O 2015 глава компании репортовал об 1 миллиарде пользователей андройда:

                                    There are now 1 billion Android users, according to Sundar Pichai, head of Google's most important products, including Android, Chrome, Search and Maps. What's more, 8 out of every 10 phones worldwide is operating on Android, he said.

                                    И в 2014 было тоже самое

                                    image

                                    Вы им напишите про 2 миллиарда, пусть порадуются.
                                    • 0
                                      1) Старайтесь ссылаться на оригинал. На гугл ИО 2015 Сундар сказал, что Google Android имеет более миллиарда пользователей



                                      Да, возможно, что 1 миллиард + 1 смартфон, а возможно, что 1 миллиард + 300 млн. (Учитывая продажи за 2014)

                                      2) Андроид есть не только у Гугла, но и у Амазона и у кучи китайских товарищей, т.к. Google Play там закрыт. В совокупности их тоже не меньше 500 млн.

                                      Отсюда и цифра в 2 миллиарда.

  • 0
    Очевидно, что польза есть при переиспользовании имеющейся базы кода, например, бизнес-логики, моделей и т.п.
    Заниматься сексом с кодом для интерфейса, который при этом еще и выглядит ужасно и непредсказуемо главным образом для дизайнера (не могли что ли отрисовать нормально?) — бессмысленно.
    • НЛО прилетело и опубликовало эту надпись здесь
      • +2
        Вот у нас сейчас как раз такой проектик, который на Android и iOS «должен выглядеть одинаково» — хуже не придумаешь: ни для разработчиков, ни для пользователей…
    • 0
      Просто нарисовали, когда ещё iOS 6 был. Поменять картинки — меньшая из проблем. Тем более, что iOS проектов использующих стандартные контролы (не заменяя картинки) не так уж и много.

      А вот то, что CollectionView не перестраивается при изменении окна, NavBar дрожит как припадочный — вот это сложнее. Это ещё ловить надо.
  • 0
    Интересно скомпилировать свои проекты и посмотреть как будет выглядеть UI с этими компонентами. Да, как уже здесь упоминали Auto layout — must have.
    Как мне кажется все это — огромный объем работы, еще и за изменениями в iOS SDK нужно следить постоянно.
    Если не секрет, каковы масштабы команды работающей над проектом?
  • 0
    То есть теперь не обязательно пользоваться макосью под VmWare, вместо симулятора можно использовать нативное Win32 окно?
    • +1
      Нет, нет, и ещё раз нет. Это НЕ Симулятор. И от iOS эта среда будет отличаться ещё сильнее чем симулятор.
  • +3
    То чувство, когда портирование Objective-C iOS -> WinStore опенсорсное, бесплатное и разрабатывается МС, а портирование C# WinStore -> iOS закрытое, стоит $1000 в год на разраба на платформу и разрабатывается третьей стороной…

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разработка