Когда мы задумываемся о разработке под iOS, чаще всего в голове возникает пятизначная сумма входного порога: как минимум нужно iOS-устройство на последней версии ОС и Mac. Если вы уже пишете под iOS, вам наверняка известны альтернативные варианты, а если нет — посмотрите, вдруг пригодится? Приведенный ниже обзорный пост — как раз на этот случай. Под катом вы найдете довольно простую информацию, так что если хотите хардкорчика, вам не сюда!
- Берем Mac (точнее, нам нужна OS X), берем Xcode с iOS SDK, берем Objective-C или Swift, делаем проект, и на выходе получаем самое настоящее, «нативное», iOS-овское приложение, которое даже можно со спокойной душой засабмитить в App Store, и радоваться показу баннеров тому, что наша небольшая разработка приносит людям радость.
- Берем хоть Mac, хоть Windows-машину, выбираем фреймворк, позволяющий писать мобильные приложения на более знакомых многим языках (JavaSctipt, C#). Заботу о том, как наш код выполнится на устройстве, возьмет на себя фреймворк: для обеспечения выполнения с нашим кодом будет слинкован механизм исполнения кода (runtime), в задачи которого, среди прочего, входит трансляция вызовов используемого языка программирования в API мобильной платформы. Плюс подхода состоит в определенной независимости от конкретной мобильной платформы (с которой нас связывает только сам runtime), минус же — в меньшей, чем у «родного» приложения, скорости работы.
- Берем Блокнот любой редактор текстовых файлов, ваяем веб-страницу, должным образом ее обустраиваем, и на выходе получаем веб-приложение, которое, по сути, будет запускаться в полноэкранном окне браузера (как самое настоящее приложение на платформе — без адресной строки браузера), но работать будет, конечно, со скоростью и отзывчивостью обычной веб-страницы. В первую очередь это будет видно при отсутствии нормального интернет-соединения, однако, согласитесь, даже такой вариант иногда удобен. Веб-приложение, кстати, имеет тот плюс, что для доступа пользователей к нему страницу не требуется отправлять в App Store, достаточно дать людям ее URL и предложить добавить себе «на домашний экран».
Путь от Apple
Путь настоящего джедая тру iOS-разработчика лежит в плоскости следования идеям Apple. Свежий SDK, свежая же версия Xcode, документация от Apple по технологиям Apple, форумы разработчиков на технологиях Apple – если вдуматься, а что ещё нужно для создания отличного приложения, кроме толики времени? Польза очевидна: разработка идет самым близким к платформе и к идеологии Apple образом, с использованием всех новинок, предлагаемых Apple в текущем (и будущих) iOS API, так что постоянное изучение нового приносят больше хорошего, чем плохого.
iOS программирование с нуля — часть 1
Новинки Apple озвучивает регулярно. На последней конференции для разработчиков WWDC 2017 были показан новый SDK и новая версия среды для разработке Xcode. Список изменений довольно обширен (тем более в преддверии выхода iOS 11):
Xcode
Текстовый редактор в Xcode переписали на Swift, сделав его надёжнее и быстрее. Можно ли это почувствовать? Да! Подсветка синтаксиса работает (почти) моментально, открытие и навигация по файлу теперь без заметных задержек, а сообщения об ошибках больше не перекрывают исходный код. В beta все выглядит очень приятно, посмотрим, что нас ждет в релизе!
Как создать приложение для iOS? С чего начать и как создать приложение для iOS?
В Xcode появилась поддержка Markdown. Разметку можно использовать при документировании кода, и функциональность эта, на первый взгляд, косметическая, довольно заметно облегчает чтение кода, особенно чужого:
(Источник)
Редактор, кстати, научился подсвечивать блоки кода, удобно при изучении большого объёма кода.
Ещё одной важной фичей Xcode 9 стал рефакторинг кода на Swift, Objective-C, Objective-C++, C. Рефакторинг позволяет переименовывать классы, переменные, а также дробить методы на менее крупные.
Из менее выделяющихся, но тем не менее полезных фич, можно назвать:
- Новую систему сборки (кстати, написанную на Swift);
- Поддержку GitHub;
- UI debugger стал показывать UIViewController;
- Добавили больше проверок (например, main thread API checker и undefined behavior tracking);
- Параллельный запуск тестов на разных устройствах и симуляторах, UI-тесты нескольких приложений;
- «Беспроводную» отладку на нескольких устройствах для проверки приложений под iPad и iPhone.
Swift 4
Это изменение стоит особняком. Все, кто уже пережил чувство «в Swift 2 было, в Swift 3 пропало?!», могут ощутить дежавю, но сейчас ожидаются изменения, скорее, в лучшую сторону (впрочем, замечу вполголоса, когда это было не так, по мысли авторов-то?)
- Приложения, написанные на Swift 4, станут меньше в размерах.
- Swift 4 получит встроенную поддержку кодирования/декодирования в/из JSON. До Swift 4 приходилось много писать много кода самому, либо использовать сторонние кодогенераторы. Сейчас этот код генерирует компилятор. Отдельное спасибо!
- Возврат к удобной модели работы со строками, которая была реализована в Swift 2 и убрана в Swift 3. Вместе с этим изменением строки станут лучше поддерживать Unicode («чтобы ваши любимые приложения корректно показывали все ваши emoji»), а работа с ними ускорится.
- Проекты, в которых используется и Swift, и Objective-C, будут собираться на 40% быстрее за счёт улучшений в Xcode 9 и его системы сборки.
- Apple (как обычно) обещает простую миграцию на Swift 4, и одновременную поддержку разных кодовых баз (3.2 и 4.0).
«Гибридное», «не совсем нативное» приложение
Уточню: термин, вынесенный в заголовок, даже по сути своей не очень верен. Приложения, которые мы получим в результате, самые что ни на есть нативные в смысле того, что они исполняются на той же iOS, на том же железе, что и любое другое ПО для iOS, просто сам процесс разработки позволяет использовать не только предложенные Apple технологии и языки программирования. Если человек умеет писать, скажем, на JavaScript, и не хочет разбираться в Swift, то Apple ему ничем не поможет (кроме, конечно, хорошего учебника по Swift), а вот вариант написать, условно говоря, приложение на JavaScript, а потом запустить его на iOS, как если бы оно было написано в Xcode (получив, таким образом, некий «гибридный» вариант) существует, и вполне востребован.
Ionic
Ionic – один из самых известных фреймворков для кросс-платформенной разработки. Он построен на базе Apache Cordova, что обеспечивает доступ к различным функциям устройства, таким как геолокация, push-уведомления, камера и прочим, и позволяет разработчикам создавать приложения для iOS и Android с веб-технологиями, такими как HTML, CSS и JavaScript.
В дополнение к фреймворку, Ionic может похвастаться целой экосистемой, облегчающей разработчикам-новичкам процесс изучения и вхождения. Ionic Cloud предоставляет разработчикам различные инструменты для управления, развертывания и масштабирования приложений на Ionic. Ionic Creator представляет собой визуальный редактор, который позволяет разработчикам быстро прототипировать и создавать мобильные приложения методом draghttps://habr.com/ru/companies/jugru/articles/337394/» target=»_blank»]habr.com[/mask_link]
Краткое руководство по приложению «Привет, iOS»
Поддержка конструктора iOS была прекращена в Visual Studio 2019 версии 16.8 и Visual Studio 2019 для Mac версии 8.8. В Visual Studio 2019 версии 16.9 и Visual Studio для Mac версии 8.9 этот конструктор удален. Создавать пользовательские интерфейсы iOS рекомендуется непосредственно на Mac с помощью Xcode Interface Builder. Дополнительные сведения см. в статье Проектирование пользовательских интерфейсов с помощью Xcode.
Это руководство описывает создание приложения, которое преобразует введенный пользователем буквенно-цифровой телефонный номер в числовой телефонный номер и затем набирает его. Окончательный вариант приложения выглядит примерно так:
Требования
Для разработки на iOS с помощью Xamarin требуется следующее:
- Компьютер Mac под управлением macOS High Sierra 10.13 или последующей версии.
- Последняя версия Xcode и пакета SDK iOS из App Store.
Xamarin.iOS работает со следующими конфигурациями:
- Последняя версия Visual Studio для Mac, удовлетворяющая указанным выше требованиям.
Xamarin.iOS работает со следующими конфигурациями:
- Последняя версия Visual Studio 2019 или Visual Studio 2017 Community, Professional или Enterprise на базе Windows 10 или более поздней версии, связанная с узлом сборки Mac, удовлетворяющим указанным выше требованиям.
Пошаговое руководство по Visual Studio для Mac
Это пошаговое руководство описывает создание приложения Phoneword, которое преобразует буквенно-цифровой телефонный номер в числовой.
- Запустите Visual Studio для Mac из папки Applications (Приложения) или из Spotlight:
На экране запуска нажмите кнопку Новый проект. , чтобы создать новое решение Xamarin.iOS:
- В диалоговом окне «Новое решение» выберите шаблон приложения с одним представлением iOS >> и убедитесь, что выбран C# . Нажмите кнопку Далее:
- Настройте приложение. Присвойте ему имя Phoneword_iOS и оставьте все остальные значения по умолчанию. Нажмите кнопку Далее:
- Оставьте имеющееся имя для проекта и решения. Выберите расположение проекта или оставьте значение по умолчанию:
- Нажмите кнопку Создать, чтобы создать Решение.
- Откройте файл Main.storyboard, дважды щелкнув его на Панели решения. Убедитесь, что файл открыт с помощью конструктора Visual Studio iOS (щелкните раскадровку правой кнопкой мыши и выберите «Открыть с помощью > конструктора iOS»). Это позволяет создавать пользовательский интерфейс визуально:
Обратите внимание на то, что классы размера включены по умолчанию. Чтобы узнать о них подробнее, см. руководство по унифицированным раскадровкам.
- Откройте панель элементов, введите «метка» в поле поиска и перетащите элемент Метка в область конструктора (в центре):
Примечание Панель свойств или панель элементов можно открыть в любое время, перейдя к панели просмотра>.
using System.Text; using System; namespace Phoneword_iOS < public static class PhoneTranslator < public static string ToNumber(string raw) < if (string.IsNullOrWhiteSpace(raw)) < return «»; >else < raw = raw.ToUpperInvariant(); >var newNumber = new StringBuilder(); foreach (var c in raw) < if (» -0123456789″.Contains(c)) < newNumber.Append(c); >else < var result = TranslateToNumber(c); if (result != null) < newNumber.Append(result); >> // otherwise we’ve skipped a non-numeric char > return newNumber.ToString(); > static bool Contains (this string keyString, char c) < return keyString.IndexOf(c) >= 0; > static int? TranslateToNumber(char c) < if («ABC».Contains(c)) < return 2; >else if («DEF».Contains(c)) < return 3; >else if («GHI».Contains(c)) < return 4; >else if («JKL».Contains(c)) < return 5; >else if («MNO».Contains(c)) < return 6; >else if («PQRS».Contains(c)) < return 7; >else if («TUV».Contains(c)) < return 8; >else if («WXYZ».Contains(c)) < return 9; >return null; > > >
Сохраните файл PhoneTranslator.cs и закройте его.
string translatedNumber = «»; TranslateButton.TouchUpInside += (object sender, EventArgs e) => < // Convert the phone number with text to a number // using PhoneTranslator.cs translatedNumber = PhoneTranslator.ToNumber( PhoneNumberText.Text); // Dismiss the keyboard if text field was tapped PhoneNumberText.ResignFirstResponder (); if (translatedNumber == «») < CallButton.SetTitle («Call «, UIControlState.Normal); CallButton.Enabled = false; >else < CallButton.SetTitle («Call » + translatedNumber, UIControlState.Normal); CallButton.Enabled = true; >>;
CallButton.TouchUpInside += (object sender, EventArgs e) => < // Use URL handler with tel: prefix to invoke Apple’s Phone app. var url = new NSUrl («tel:» + translatedNumber); // . otherwise show an alert dialog if (!UIApplication.SharedApplication.OpenUrl (url)) < var alert = UIAlertController.Create («Not supported», «Scheme ‘tel:’ is not supported on this device», UIAlertControllerStyle.Alert); alert.AddAction (UIAlertAction.Create («Ok», UIAlertActionStyle.Default, null)); PresentViewController (alert, true, null); >>;


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


Пошаговое руководство по Visual Studio
Это пошаговое руководство описывает создание приложения Phoneword, которое преобразует буквенно-цифровой телефонный номер в числовой.
В этом пошаговом руководстве используется Visual Studio Enterprise 2017 на виртуальной машине Windows 10. Ваша конфигурация может отличаться при условии соблюдения приведенных выше требований, но имейте в виду, что некоторые снимки экрана могут отличаться от вашей конфигурации.
Прежде чем продолжить работу с пошаговым руководством, вам нужно подключиться к компьютеру Mac из Visual Studio. Это вызвано тем, что Xamarin.iOS использует инструменты Apple при сборке и запуске приложений. Настройка описана в инструкциях из руководства по связыванию с компьютером Mac.
- Запустите Visual Studio из меню Пуск:
Создайте новое решение Xamarin.iOS, выбрав «Создать файл >> » Project. > Visual C# > iPhone приложения iOS (Xamarin):
В следующем диалоговом окне выберите шаблон Приложение с одним представлением и нажмите OK, чтобы создать проект:
- Убедитесь, что значок агента Mac Xamarin на панели инструментов отображается зеленым цветом.
Если это не так, то есть отсутствует подключение к компьютеру сборки Mac, выполните инструкции из руководства по выбору конфигурации, чтобы настроить подключение.
- Откройте файл Main.storyboard в конструкторе iOS, дважды щелкнув его в обозревателе решений:
- Откройте вкладку Панель элементов, введите «метка» в поле поиска и перетащите элемент Метка в область конструктора (в центре):
- Захватите маркеры перетаскивания и растяните метку в стороны:
- Выбрав элемент Метка в области конструктора, используйте окна свойств, чтобы изменить свойство Текст элемента Метка на «Enter a Phoneword» (Введите слово-номер):
Примечание Вы можете открыть Свойства или Панель элементов в любое время. Для этого перейдите в меню Вид.
Важно! Убедитесь, что выбран шаблон класса, в значке которого указан C#. В противном случае ссылка на этот класс может быть невозможна.
using System.Text; using System; namespace Phoneword < public static class PhoneTranslator < public static string ToNumber(string raw) < if (string.IsNullOrWhiteSpace(raw)) < return «»; >else < raw = raw.ToUpperInvariant(); >var newNumber = new StringBuilder(); foreach (var c in raw) < if (» -0123456789″.Contains(c)) < newNumber.Append(c); >else < var result = TranslateToNumber(c); if (result != null) < newNumber.Append(result); >> // otherwise we’ve skipped a non-numeric char > return newNumber.ToString(); > static bool Contains (this string keyString, char c) < return keyString.IndexOf(c) >= 0; > static int? TranslateToNumber(char c) < if («ABC».Contains(c)) < return 2; >else if («DEF».Contains(c)) < return 3; >else if («GHI».Contains(c)) < return 4; >else if («JKL».Contains(c)) < return 5; >else if («MNO».Contains(c)) < return 6; >else if («PQRS».Contains(c)) < return 7; >else if («TUV».Contains(c)) < return 8; >else if («WXYZ».Contains(c)) < return 9; >return null; > > >
Сохраните файл PhoneTranslator.cs и закройте его.
string translatedNumber = «»; TranslateButton.TouchUpInside += (object sender, EventArgs e) => < // Convert the phone number with text to a number // using PhoneTranslator.cs translatedNumber = PhoneTranslator.ToNumber(PhoneNumberText.Text); // Dismiss the keyboard if text field was tapped PhoneNumberText.ResignFirstResponder (); if (translatedNumber == «») < CallButton.SetTitle («Call», UIControlState.Normal); CallButton.Enabled = false; >else < CallButton.SetTitle («Call » + translatedNumber, UIControlState.Normal); CallButton.Enabled = true; >>;
CallButton.TouchUpInside += (object sender, EventArgs e) => < var url = new NSUrl («tel:» + translatedNumber); // Use URL handler with tel: prefix to invoke Apple’s Phone app, // otherwise show an alert dialog if (!UIApplication.SharedApplication.OpenUrl (url)) < var alert = UIAlertController.Create («Not supported», «Scheme ‘tel:’ is not supported on this device», UIAlertControllerStyle.Alert); alert.AddAction (UIAlertAction.Create («Ok», UIAlertActionStyle.Default, null)); PresentViewController (alert, true, null); >>;




Поздравляем! Вы создали свое первое приложение Xamarin.iOS!
Пришло время закрепить и углубить приобретенные знания и навыки с помощью раздела Привет, iOS: теперь подробнее.
Связанные ссылки
- Значки приложения Xamarin и изображения при запуске (пример)
- Привет, iOS (пример)
- Рекомендации по работе с человеческим интерфейсом iOS
- Портал подготовки iOS
Источник: learn.microsoft.com
Как написать программу для айфона
Рассмотрим построение проекта на Maui и C# для iOS.
Взаимодействие iOS и Maui
Весь код для непосредственного взаимодействия с платформой iOS расположен в проекте в папке Platforms/iOS/
Здесь нас будут интересовать два файла: AppDelegate.cs и Program.cs .
Работа приложения iOS начинается с кода, расположенного в файле Program.cs :
using ObjCRuntime; using UIKit; namespace HelloApp; public class Program < static void Main(string[] args) < UIApplication.Main(args, null, typeof(AppDelegate)); >>
Метод Main класса Program служит точкой входа в приложения. В нем же в свою очередь вызывается метод UIApplication.Main() , который определяет суть приложения и который обращается к классу AppDelegate из файла AppDelegate.cs :
using Foundation; namespace HelloApp; [Register(«AppDelegate»)] public class AppDelegate : MauiUIApplicationDelegate < protected override MauiApp CreateMauiApp() =>MauiProgram.CreateMauiApp(); >
А класс Appdelegate, в свою очередь, переопределяет метод CreateMauiApp(), в котором вызывается метод CreateMauiApp() и таким образом реализуется связь с кодом приложения MAUI.
Компиляция проекта для iOS из Visual Studio на Windows
Рассмотрим, как создавать приложения под iOS из Visual Studio на Windows. Прежде всего, следует отметить, что технически для компиляции приложения под iOS необходим MacBook. Кроме того, на MacOS должны быть установлены все необходимые инструменты для разработки под Maui, как описывалось в прошлой теме, и также должна быть установлена последняя версия XCode.
Для подключения к MacOS Visual Studio применяет SSH.
Возьмем простейший проект Maui, который создается по умолчанию. Прежде всего нам надо открыть доступ извне на самой машине под управлением Mac OS. Для этого на MacOS перейдем к настройкам общего доступа, среди которых надо включить опцию «Удаленный вход»:
В этом окне надо отметить IP-адрес в рамках подсети, по которому мы будем подключаться к макбуку. В моем случае 192.168.0.102.
Это были все необходимые настройки для Mac OS. Теперь перейдем к Visual Studio. Перейдем к пункту меню Tools -> iOS -> Pair to Mac
Открывшееся окно отобразит список доступных хостов MacOS для подключения:
Выберем в этом окне нужное подключение и нажмем на кнопку Connect. После этого откроется диалоговое окно, в котором надо будет ввести аутентификационные данные для подключения к Mac OS (то есть логин и пароль пользователя на машине Mac OS):
Если вы вдруг не уверены в правильности вводимого логина, то его можно узнать на Mac OS, введя в терминал команду whoami .
При первом подключении Visual Studio может загружать и установливать некоторые необходимые пакеты для связи с MacOS.
После успешного логина и подключения все окна можно закрыть. А Visual Studio с помощью значка зеленого монитора на панели инструментов укажет, что подключение успешно установлено
И затем мы сможем использовать удаленную машину Mac OS для компиляции приложения, а в Visual Studio мы сможем выбрать нужный симулятор iOS и запустить проект:
После этого запустится на симуляторе наш проект:
Стоит отметить, что несмотря на то, что мы можем запустить приложения на симуляторе непосредственно в Windows, но все равно нам необходим Mac OS для компиляции проекта.
Настройка компиляции под iOS
Если мы перейдем к свойствам проекта в visual Studio, то в секции Application/iOS Targets мы можем настроить минимальную и целевую версии iOS, под которые выполняется построение проекта.
Здесь нам доступны следующие опции:
- Target the iOS platform : при установке этого флажка .NET MAUI при построении проекта будет также создавать версию приложения для iOS.
- Target .NET Runtime : применяемая версия .NET
- Target iOS Framework : применяемая версия iOS
- Minimum Target iOS Framework : минимальная версия iOS, под которую создается приложение
Кроме того, внизу свойств проекта с помощью пункта iOS можно настроить различные параметры публикации проекта.
Компиляция проекта для iOS на Mac OS
При компиляции проекта MAUI под iOS на Mac OS все естественно несколько проще. Если мы используем Visual Studio for Mac, то также мы можем выбрать из панели запуска нужный симулятор iOS, либо даже подключиться к реальному устройству с iOS через WiFi:
При выборе симулятора iOS будет запущено приложение на выбранном симуляторе XCode.
Источник: metanit.com