В апреле этого года на конференции //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.

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


  1. NeoCode
    07.08.2015 09:16

    Только для Windows 10? Для Windows 7 не будет работать?


    1. ad1Dima
      07.08.2015 09:26
      +1

      Только для Windows Store приложений (в том числе win8). В первую очередь политика, во вторую — несколько разные стеки технологий. МС сейчас работает (хотя по некоторым сведениям с 2010) над переносом классических приложений в стор.


      1. NeoCode
        07.08.2015 09:50

        Да пофиг на стор, я хочу просто чтобы на локальной машине компилировался и запускался код на objc (чисто для поиграться).
        У меня на Win7 SP1 установлена VS2015 Community, этот SDK будет работать?


        1. ad1Dima
          07.08.2015 10:05
          +3

          1) на 7ке не работает WinRT SDK, так что нельзя даже если очень захотеть.
          2) На гитхабе написано, что сейчас все работает только на 10ке.

          Обновляйтесь :)


          1. NeoCode
            07.08.2015 20:03

            Спасибо, теперь понятно. Но лучше подожду когда Apple портирует Swift на другие платформы, думаю там поинтереснее будет:) С objc можно поиграться и в виртуалке, да и в gcc/mingw в ограниченном объеме — тоже.


            1. ad1Dima
              07.08.2015 21:10

              Не. Знаю, зачем бы apple понадобилось переносить swift куда-либо. Разве что не сервера, но опять же на эпловские.


              1. alexeyrom
                08.08.2015 20:22
                +1

    1. SgtRiggs91
      07.08.2015 13:35

      На самом деле — попробуйте. Там используется модифицированный clang, возможно результирующие сборки — это обычные нативные DLL. Нужно изучить этот вопрос.


      1. NeoCode
        08.08.2015 00:57

        На самом деле — получилось! После запуска проекта запустился инсталлятор Студии, который что-то долго скачивал и устанавливал. После этого проект на ObjC скомпилировался.
        Правда одна странность — в скомпилированном файле WOCCatalog.exe AVG обнаружил вирус Win32/Heri. Ну да ладно, остальные антивирусы на Virustotal ничего не нашли, думаю это ложное срабатывание.
        В общем в итоге под Windows 7 SP1 тестовый проект на objc компилируется. Эмулятор действительно не поддерживается, но предлагается подключить реальный WinPhone девайс (которого у меня тоже нету), так что эксперимент на этом закончен:)


  1. ad1Dima
    07.08.2015 09:33

    3.Autolayout
    4.Storyboard support
    5.MapKit

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

    Добавить можно, что swift тоже не поддерживается.


    1. Voley
      07.08.2015 11:03
      +7

      Название проекта WinObjC вам что-нибудь говорит? Добавить можно что brainfuck не поддерживается


      1. ad1Dima
        07.08.2015 11:13

        Вот с BF-то как раз проще. Есть BrainFuck.net подключить его к WinRT-проекту, я думаю, можно.

        А про swift я специально прокомментировал, потому что это был первый вопрос докладчику на Build. Начинающие iOS разработчики беспокоятся.


  1. ad1Dima
    07.08.2015 09:43
    +1

    Ох, с asset'ами все действительно очень плохо


    1. Garrett
      09.08.2015 15:27

      Надеюсь это всё же временное решение пока они не сделали модуль для работы с ресурсами


  1. AnthonyBY
    07.08.2015 10:40
    +1

    ох, раскатал было уже губу, но для наших проектов без поддрежки autolayout и storyboard не имеет смысла


  1. StrangerInRed
    07.08.2015 10:50

    Ой лол. Интересно посмотреть, что из этого выльется.


  1. ASkvortsov
    07.08.2015 11:11

    Когда добавят поддержку арма и релизных сборок — можно начинать пробовать. Кроме этого из списка в нашем проекте есть только MapKit. Ехидно посмеиваюсь над любителями IB, автолэйаутов и свифта :)


    1. ad1Dima
      07.08.2015 11:14
      +1

      И что, даже ассетов нет?


      1. ASkvortsov
        07.08.2015 12:01

        А ассетов в списке нет :) Но да, вы верно заметили, ассеты тоже нужны.


        1. ad1Dima
          07.08.2015 12:09

          Не пользовался AssetsLibrary, думал это про них)


    1. StrangerInRed
      07.08.2015 11:39
      +3

      Да вы устарели, сударь. Посмехиватся над constraints и sizeClasses странно. Все это в IB — ускоряет процесс разработки в десятки раз. Зачем писать велосипеды, если есть api.


      1. ASkvortsov
        07.08.2015 12:03

        Дело в том, что constraints удобны для использования только в IB. Если отрисовывать интерфейс полностью кодом, то проще реализовать старый добрый layoutSubviews. А уже IB vs программная отрисовка — это отдельная большая тема для рассуждений: в каких-то случаях лучше одно, в других — другое.


        1. StrangerInRed
          07.08.2015 12:16

          Ну да смысл не использовать IB есть только тогда, когда у вас есть готовый проект и вы занимаетесь поддержкой. IB направлен на аутсорс и подходы, дизайнер нарисовал + немного бл + хуяк-хуяк и в продакшн


          1. ASkvortsov
            07.08.2015 12:19
            +2

            Имхо, смысл не использовать IB есть, когда в приложении сложный UI с большим количеством переходов. В этом случае ваши макеты превратятся в вечнотормозящую (в Xcode) мешанину.


            1. StrangerInRed
              07.08.2015 12:22
              +2

              Сторибордов может быть несколько, чотб не тормозило. Можно вообще по ксибам разбить.


              1. ad1Dima
                07.08.2015 13:06

                вот только я так до сих пор не увидел, чтоб из IB можно было задать состояние, когда кнопка selected и pressed одновременно, а из кода можно. Таких моментов дофига, и в целом, я понимаю тех, кто все делает из кода, хотя сам предпочитаю xib


              1. ASkvortsov
                07.08.2015 13:08

                Возможно, спорить не буду, опыта использования IB у меня нет. Доводилось просто видеть проекты с описанной мной кашей, в которой очень сложно разобраться.


  1. SgtRiggs91
    07.08.2015 13:31
    +2

    Это без сомнений очень крутая новость, но я надеюсь что разработчики всё-таки будут стараться найти ресурсы сделать UI на XAML, а код на Objective-C использовать для всего остального.


    1. StrangerInRed
      07.08.2015 13:46
      -3

      Не смешите мои подковы. Какой XAML? Рынок winphone не так богат, чтобы искать ресурсы на XAML. Если хотят привлечь iOS-разработчиков, то это должен быть легчайший путь переноса всего — просто перекомпиляция с помощью компилера виндовс. Глядишь напишут парсер для custom-xml, xib-ов. А учитывая удобность средств разработки IB и виндовых, никто не будет дергаться.


      1. ad1Dima
        07.08.2015 14:36
        +1

        Глядишь напишут парсер для custom-xml, xib-ов.

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

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

        Вы про то, что IB застрял на уровне WinForms?


      1. SgtRiggs91
        07.08.2015 16:08
        +1

        Рынок winphone — да. Но Вы, вероятно, упустили тот момент, что в Win10 что винфон, что «большая» винда — один код и даже один XAML при желании.


        1. StrangerInRed
          07.08.2015 16:45
          -4

          Рынок десктопной винды не лучше.


          1. SgtRiggs91
            07.08.2015 17:16
            +1

            Да ну?


            1. olegi
              10.08.2015 19:55

              Ну да.

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


              1. ad1Dima
                10.08.2015 21:52

                Что-то Википедия не согласна с вами.


                1. olegi
                  10.08.2015 22:38

                  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


                  1. ad1Dima
                    10.08.2015 23:01

                    И откуда это?


                    1. olegi
                      11.08.2015 12:01

                      1. ad1Dima
                        11.08.2015 12:11

                        Ну, ок, Допустим, этот странный чувак со «своей моделью» прав. Все равно получается, что совокупность андроидов не больше совокупности винды.

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

                        А статья 2011 года — это вообще прекрасно.


                        1. olegi
                          11.08.2015 12:45

                          Этот странный чувак работает в странной конторе которая инвестировала в половину компаний интернета. И в работу чувака входит: 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 версии Андроида.

                          Так что модель вполне себе реалистичная.


                1. olegi
                  10.08.2015 23:00

                  Статистика от Akamai. 15-30% трафика интернета.

                  image


                  1. ad1Dima
                    10.08.2015 23:08

                    Даже по этой картинке видно: десктопных браузеров за 50%, исключая сафари. Даже если десятая доля это линукс/макос, то остаётся более 45 процентов на виду. Со статистикой Википедии вполне сходится


                    1. olegi
                      11.08.2015 12:01

                      На работе Win ПК, дома Win ПК. А юзер — один.


                      1. ad1Dima
                        11.08.2015 12:06

                        Телефон, планшет, а юзер один, и?


                        1. olegi
                          11.08.2015 12:09

                          Поэтому, по веб статистике нельзя делать выводов.
                          Только по device shipments, продажам и активациям.


                          1. ad1Dima
                            11.08.2015 12:14

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


                          1. ad1Dima
                            11.08.2015 12:15

                            Опять же, телефон, планшет — продажи/активации две, пользователь один.

                            Бесполезный спор, короче, кто может в математику, уже давно все понял.


                            1. StrangerInRed
                              11.08.2015 12:44
                              +1

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


                            1. olegi
                              11.08.2015 12:50

                              Рановато вы автоматически к смартфону прикладываете планшет:
                              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 млн!


                              1. sdramare
                                11.08.2015 17:57

                                А всех Windows устройств — 360 млн!

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

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

                                Фантазии хипстеров это всегда очень смешно.


                                1. StrangerInRed
                                  11.08.2015 19:16

                                  телефон хипстера стоит под 1k$, телефон не хипстера 300-400$


                                  1. ad1Dima
                                    11.08.2015 19:25

                                    что ж они ломают телефоны и приложения пиратят. От хорошей жизни, наверное.


                                    1. olegi
                                      11.08.2015 20:10

                                      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

                                      Статистика о том, что ломают новые аппараты, а не б\у у школьника — отсутствует.


                                  1. sdramare
                                    11.08.2015 19:27

                                    Вы не в курсе про существование телефонов на андройде стоимостью в 1к$(самсунги и прочее)?


                                    1. StrangerInRed
                                      11.08.2015 19:35

                                      сравните статистику покупок по яблокам и самсунгам епт


                                    1. olegi
                                      11.08.2015 20:00

                                      ну миллионов 20 в квартал у Samsung vs 50 у Apple.


                                1. olegi
                                  11.08.2015 19:58

                                  А всех Windows устройств — 360 млн!

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

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

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

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

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


                                  1. sdramare
                                    11.08.2015 20:44

                                    К сожалению сам гугл явно не в курсе этих цифр и на 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 миллиарда, пусть порадуются.


                                    1. olegi
                                      12.08.2015 09:13

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



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

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

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


  1. egormerkushev
    07.08.2015 13:53

    Очевидно, что польза есть при переиспользовании имеющейся базы кода, например, бизнес-логики, моделей и т.п.
    Заниматься сексом с кодом для интерфейса, который при этом еще и выглядит ужасно и непредсказуемо главным образом для дизайнера (не могли что ли отрисовать нормально?) — бессмысленно.


    1. StrangerInRed
      07.08.2015 13:59
      -2

      Бесконечно плюсую. А с точки зрения прогера — устранять неоднозначности между интерфейсами, чтоб все выглядело одинаково вообще будет ад.


      1. egormerkushev
        07.08.2015 14:03
        +2

        Вот у нас сейчас как раз такой проектик, который на Android и iOS «должен выглядеть одинаково» — хуже не придумаешь: ни для разработчиков, ни для пользователей…


    1. ad1Dima
      07.08.2015 14:39

      Просто нарисовали, когда ещё iOS 6 был. Поменять картинки — меньшая из проблем. Тем более, что iOS проектов использующих стандартные контролы (не заменяя картинки) не так уж и много.

      А вот то, что CollectionView не перестраивается при изменении окна, NavBar дрожит как припадочный — вот это сложнее. Это ещё ловить надо.


  1. HeisenbergP
    07.08.2015 17:19

    Интересно скомпилировать свои проекты и посмотреть как будет выглядеть UI с этими компонентами. Да, как уже здесь упоминали Auto layout — must have.
    Как мне кажется все это — огромный объем работы, еще и за изменениями в iOS SDK нужно следить постоянно.
    Если не секрет, каковы масштабы команды работающей над проектом?


  1. JasF
    07.08.2015 19:29

    То есть теперь не обязательно пользоваться макосью под VmWare, вместо симулятора можно использовать нативное Win32 окно?


    1. ad1Dima
      07.08.2015 21:13
      +1

      Нет, нет, и ещё раз нет. Это НЕ Симулятор. И от iOS эта среда будет отличаться ещё сильнее чем симулятор.


  1. Athari
    07.08.2015 21:46
    +3

    То чувство, когда портирование Objective-C iOS -> WinStore опенсорсное, бесплатное и разрабатывается МС, а портирование C# WinStore -> iOS закрытое, стоит $1000 в год на разраба на платформу и разрабатывается третьей стороной…