В апреле этого года на конференции //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 находится в активной разработке и некоторые возможности не работают:
- Нет поддержки ARM, только x86.
- Оптимизации компилятора не работают. Скорее всего они приведут к крашу clang, пока можно использовать только debug сборки.
- Autolayout
- Storyboard support
- MapKit
- AssetsLibrary
- AddressBook
- Ads
- Objective-C annotations
- Media Capture
Если у вас есть вопросы и вы хотели бы узнать больше об этом проекте, обращайтесь на форумы http://stackoverflow.com/, маркируйте свои вопросы тегом WinObjC и почитайте вики https://github.com/Microsoft/WinObjC/wiki.
Комментарии (67)
ad1Dima
07.08.2015 09:333.Autolayout
4.Storyboard support
5.MapKit
Странно, на билде говорили, что это все есть.
Добавить можно, что swift тоже не поддерживается.Voley
07.08.2015 11:03+7Название проекта WinObjC вам что-нибудь говорит? Добавить можно что brainfuck не поддерживается
ad1Dima
07.08.2015 11:13Вот с BF-то как раз проще. Есть BrainFuck.net подключить его к WinRT-проекту, я думаю, можно.
А про swift я специально прокомментировал, потому что это был первый вопрос докладчику на Build. Начинающие iOS разработчики беспокоятся.
ad1Dima
07.08.2015 09:43+1Ох, с asset'ами все действительно очень плохо…
Garrett
09.08.2015 15:27Надеюсь это всё же временное решение пока они не сделали модуль для работы с ресурсами
AnthonyBY
07.08.2015 10:40+1ох, раскатал было уже губу, но для наших проектов без поддрежки autolayout и storyboard не имеет смысла
ASkvortsov
07.08.2015 11:11Когда добавят поддержку арма и релизных сборок — можно начинать пробовать. Кроме этого из списка в нашем проекте есть только MapKit. Ехидно посмеиваюсь над любителями IB, автолэйаутов и свифта :)
ad1Dima
07.08.2015 11:14+1И что, даже ассетов нет?
StrangerInRed
07.08.2015 11:39+3Да вы устарели, сударь. Посмехиватся над constraints и sizeClasses странно. Все это в IB — ускоряет процесс разработки в десятки раз. Зачем писать велосипеды, если есть api.
ASkvortsov
07.08.2015 12:03Дело в том, что constraints удобны для использования только в IB. Если отрисовывать интерфейс полностью кодом, то проще реализовать старый добрый layoutSubviews. А уже IB vs программная отрисовка — это отдельная большая тема для рассуждений: в каких-то случаях лучше одно, в других — другое.
StrangerInRed
07.08.2015 12:16Ну да смысл не использовать IB есть только тогда, когда у вас есть готовый проект и вы занимаетесь поддержкой. IB направлен на аутсорс и подходы, дизайнер нарисовал + немного бл + хуяк-хуяк и в продакшн
ASkvortsov
07.08.2015 12:19+2Имхо, смысл не использовать IB есть, когда в приложении сложный UI с большим количеством переходов. В этом случае ваши макеты превратятся в вечнотормозящую (в Xcode) мешанину.
StrangerInRed
07.08.2015 12:22+2Сторибордов может быть несколько, чотб не тормозило. Можно вообще по ксибам разбить.
ad1Dima
07.08.2015 13:06вот только я так до сих пор не увидел, чтоб из IB можно было задать состояние, когда кнопка selected и pressed одновременно, а из кода можно. Таких моментов дофига, и в целом, я понимаю тех, кто все делает из кода, хотя сам предпочитаю xib
ASkvortsov
07.08.2015 13:08Возможно, спорить не буду, опыта использования IB у меня нет. Доводилось просто видеть проекты с описанной мной кашей, в которой очень сложно разобраться.
SgtRiggs91
07.08.2015 13:31+2Это без сомнений очень крутая новость, но я надеюсь что разработчики всё-таки будут стараться найти ресурсы сделать UI на XAML, а код на Objective-C использовать для всего остального.
StrangerInRed
07.08.2015 13:46-3Не смешите мои подковы. Какой XAML? Рынок winphone не так богат, чтобы искать ресурсы на XAML. Если хотят привлечь iOS-разработчиков, то это должен быть легчайший путь переноса всего — просто перекомпиляция с помощью компилера виндовс. Глядишь напишут парсер для custom-xml, xib-ов. А учитывая удобность средств разработки IB и виндовых, никто не будет дергаться.
ad1Dima
07.08.2015 14:36+1Глядишь напишут парсер для custom-xml, xib-ов.
шо там парсить-то. Самое сложное — порт UIKit уже сделали.
А учитывая удобность средств разработки IB и виндовых, никто не будет дергаться.
Вы про то, что IB застрял на уровне WinForms?
SgtRiggs91
07.08.2015 16:08+1Рынок winphone — да. Но Вы, вероятно, упустили тот момент, что в Win10 что винфон, что «большая» винда — один код и даже один XAML при желании.
StrangerInRed
07.08.2015 16:45-4Рынок десктопной винды не лучше.
SgtRiggs91
07.08.2015 17:16+1Да ну?
olegi
10.08.2015 19:55Ну да.
Совокупность андроида сейчас больше чем совокупность винды.
iOS в этом году будет столько же сколько и customer винды
ad1Dima
10.08.2015 21:52Что-то Википедия не согласна с вами.
olegi
10.08.2015 22:38Devices 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-800mad1Dima
10.08.2015 23:01И откуда это?
olegi
11.08.2015 12:01twitter.com/BenedictEvans/status/624790583983276032
www.businessinsider.com/right-now-there-are-125-billion-windows-pcs-worldwide-2011-12ad1Dima
11.08.2015 12:11Ну, ок, Допустим, этот странный чувак со «своей моделью» прав. Все равно получается, что совокупность андроидов не больше совокупности винды.
Хотя методы чувака из венчурного фонда надо проверять.
А статья 2011 года — это вообще прекрасно.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 версии Андроида.
Так что модель вполне себе реалистичная.
olegi
10.08.2015 23:00Статистика от Akamai. 15-30% трафика интернета.
ad1Dima
10.08.2015 23:08Даже по этой картинке видно: десктопных браузеров за 50%, исключая сафари. Даже если десятая доля это линукс/макос, то остаётся более 45 процентов на виду. Со статистикой Википедии вполне сходится
olegi
11.08.2015 12:01На работе Win ПК, дома Win ПК. А юзер — один.
ad1Dima
11.08.2015 12:06Телефон, планшет, а юзер один, и?
olegi
11.08.2015 12:09Поэтому, по веб статистике нельзя делать выводов.
Только по device shipments, продажам и активациям.ad1Dima
11.08.2015 12:14По веб статистике можно судить об активных пользователях. Туда не попадет тонна пылящихся на полках устаревших девайсов, куча серверов, почти не попадет огромное количество тестовых андроидов.
ad1Dima
11.08.2015 12:15Опять же, телефон, планшет — продажи/активации две, пользователь один.
Бесполезный спор, короче, кто может в математику, уже давно все понял.StrangerInRed
11.08.2015 12:44+1Кто может в математику уже понял, что ios аудитория там раза в 2-3 платежеспособнее, чем на остольной совоккупности вместе взятой. Решают не количество девайсов, а их цена.
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 млн!sdramare
11.08.2015 17:57А всех Windows устройств — 360 млн!
Что это за цифра и откуда вы ее взяли? Windows устройств порядка 1.3 миллиардов в мире. Андроид устройств не только за 2014, а в целом в мире порядка 1 миллиарда.
ios аудитория там раза в 2-3 платежеспособнее, чем на остольной совоккупности вместе взятой.
Фантазии хипстеров это всегда очень смешно.StrangerInRed
11.08.2015 19:16телефон хипстера стоит под 1k$, телефон не хипстера 300-400$
ad1Dima
11.08.2015 19:25что ж они ломают телефоны и приложения пиратят. От хорошей жизни, наверное.
olegi
11.08.2015 20:10after 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
Статистика о том, что ломают новые аппараты, а не б\у у школьника — отсутствует.
sdramare
11.08.2015 19:27Вы не в курсе про существование телефонов на андройде стоимостью в 1к$(самсунги и прочее)?
olegi
11.08.2015 19:58А всех Windows устройств — 360 млн!
Что это за цифра и откуда вы ее взяли? Windows устройств порядка 1.3 миллиардов в мире.
Комменты не читай, а сразу отвечай. (с) народная мудрость
360 млн Windows устройств было продано за 2014 год. Числа я взял из отчета Гартнера и Микрософта, а затем сложил. 315,8 + 40.
Андроид устройств не только за 2014, а в целом в мире порядка 1 миллиарда.
Вы с какого года к нам поступили? 1 миллиард активаций у Андроида был в сентябре 2013. С тех пор прошло два года. Тут речь уже о том, что как бы у Андроида не все 2 миллиарда. И при этом они в карманах пользователей, а не на столах офисов, банкоматах, станках и другом узкоспециализированном оборудовании.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 было тоже самое
Вы им напишите про 2 миллиарда, пусть порадуются.olegi
12.08.2015 09:131) Старайтесь ссылаться на оригинал. На гугл ИО 2015 Сундар сказал, что Google Android имеет более миллиарда пользователей
Да, возможно, что 1 миллиард + 1 смартфон, а возможно, что 1 миллиард + 300 млн. (Учитывая продажи за 2014)
2) Андроид есть не только у Гугла, но и у Амазона и у кучи китайских товарищей, т.к. Google Play там закрыт. В совокупности их тоже не меньше 500 млн.
Отсюда и цифра в 2 миллиарда.
egormerkushev
07.08.2015 13:53Очевидно, что польза есть при переиспользовании имеющейся базы кода, например, бизнес-логики, моделей и т.п.
Заниматься сексом с кодом для интерфейса, который при этом еще и выглядит ужасно и непредсказуемо главным образом для дизайнера (не могли что ли отрисовать нормально?) — бессмысленно.StrangerInRed
07.08.2015 13:59-2Бесконечно плюсую. А с точки зрения прогера — устранять неоднозначности между интерфейсами, чтоб все выглядело одинаково вообще будет ад.
egormerkushev
07.08.2015 14:03+2Вот у нас сейчас как раз такой проектик, который на Android и iOS «должен выглядеть одинаково» — хуже не придумаешь: ни для разработчиков, ни для пользователей…
ad1Dima
07.08.2015 14:39Просто нарисовали, когда ещё iOS 6 был. Поменять картинки — меньшая из проблем. Тем более, что iOS проектов использующих стандартные контролы (не заменяя картинки) не так уж и много.
А вот то, что CollectionView не перестраивается при изменении окна, NavBar дрожит как припадочный — вот это сложнее. Это ещё ловить надо.
HeisenbergP
07.08.2015 17:19Интересно скомпилировать свои проекты и посмотреть как будет выглядеть UI с этими компонентами. Да, как уже здесь упоминали Auto layout — must have.
Как мне кажется все это — огромный объем работы, еще и за изменениями в iOS SDK нужно следить постоянно.
Если не секрет, каковы масштабы команды работающей над проектом?
Athari
07.08.2015 21:46+3То чувство, когда портирование Objective-C iOS -> WinStore опенсорсное, бесплатное и разрабатывается МС, а портирование C# WinStore -> iOS закрытое, стоит $1000 в год на разраба на платформу и разрабатывается третьей стороной…
NeoCode
Только для Windows 10? Для Windows 7 не будет работать?
ad1Dima
Только для Windows Store приложений (в том числе win8). В первую очередь политика, во вторую — несколько разные стеки технологий. МС сейчас работает (хотя по некоторым сведениям с 2010) над переносом классических приложений в стор.
NeoCode
Да пофиг на стор, я хочу просто чтобы на локальной машине компилировался и запускался код на objc (чисто для поиграться).
У меня на Win7 SP1 установлена VS2015 Community, этот SDK будет работать?
ad1Dima
1) на 7ке не работает WinRT SDK, так что нельзя даже если очень захотеть.
2) На гитхабе написано, что сейчас все работает только на 10ке.
Обновляйтесь :)
NeoCode
Спасибо, теперь понятно. Но лучше подожду когда Apple портирует Swift на другие платформы, думаю там поинтереснее будет:) С objc можно поиграться и в виртуалке, да и в gcc/mingw в ограниченном объеме — тоже.
ad1Dima
Не. Знаю, зачем бы apple понадобилось переносить swift куда-либо. Разве что не сервера, но опять же на эпловские.
alexeyrom
Главное, что Apple знает:
SgtRiggs91
На самом деле — попробуйте. Там используется модифицированный clang, возможно результирующие сборки — это обычные нативные DLL. Нужно изучить этот вопрос.
NeoCode
На самом деле — получилось! После запуска проекта запустился инсталлятор Студии, который что-то долго скачивал и устанавливал. После этого проект на ObjC скомпилировался.
Правда одна странность — в скомпилированном файле WOCCatalog.exe AVG обнаружил вирус Win32/Heri. Ну да ладно, остальные антивирусы на Virustotal ничего не нашли, думаю это ложное срабатывание.
В общем в итоге под Windows 7 SP1 тестовый проект на objc компилируется. Эмулятор действительно не поддерживается, но предлагается подключить реальный WinPhone девайс (которого у меня тоже нету), так что эксперимент на этом закончен:)