MonoTouch: разработка iPhone приложений с помощью .NET
Вступление
Для разработки программных продуктов для iPhone необходимо погружаться в изучение Objective-C и Xcode IDE. Для многих разработчиков это является стоп-фактором. Особенно это касается .NET разработчиков, которые редко волнуются по поводу управления памятью, указателей и других "сишных" вещей.
После анонса MonoTouch, который является частью проекта Mono от Novell) эта ситуация изменилась. Mono - это open-source реализация Microsoft .NET Platform, позволяющая запускать .NET-приложения на любой платформе, включая Apple, FreeBSD, Linux, Uni и других. MonoTouch позволяет запускать приложения на iPhone.
Целью данной статьи является предоставить информацию о том, что нужно для начала работы с MonoTouch, а также показать пример простого приложения.
Как это работает?
Когда вы разрабатываете MonoTouch приложения, вы можете использовать большинство из технологий Microsoft стека .NET 3.5 (за исключением UI вещей). Это стек технологий включает в себя Windows Communication Framework (WCF), Workflow Foundation (WF) и др. Также присутствует Base Class Library (BCL), которая включает Garbage Collection, Threading, Math, System.Net, Cryptography. Список стандартных библиотек, доступных в MonoTouch, можно посмотреть по ссылке http://monotouch.net/Documentation/Assemblies. Это означает, что вы можете использовать .NET библиотеки в MonoTouch приложениях. MonoTouch также включает обвертки на iPhone API - расположение (GPS), акселерометр, адресную книгу и т.д.
User Interface (UI), можно ли использовать Silverlight?
Для разработки MonoTouch UI необходимо использовать встроенный Interface Builder (IB) от Apple, который поставляется вместе с iPhone SDK. Interface Builder использует родные для iPhone объекты Cocoa Touch (UI Framework для iPhone). Это означает, что вы можете использовать стандартные для iPhone элементы управления, такие как Pickers, Sliders, Buttons и др.
Вы также можете создавать ваши интерфейсы программно, создавая элементы в коде и добавляя их к Views.
В данный момент вы не можете использовать такие .NET технологии, как Silverlight, WPF, Winforms для разработки пользовательского интерфейса.
Как публиковать свои приложения?
MonoTouch приложения публикуются таким же образом, что и традиционные iPhone приложения. App Store - это онлайн магазин, где пользователи могут купить или скачать ваши приложения с помощью программы iTunes или напрямую с iPhone. Для того, чтобы иметь возможность продавать приложения, необходимо зарегистрироваться в iPhone Developer Program ($99 в год).
Лицензирование
В отличие от Mono, MonoTouch не является open-source проектом, а является коммерческим продуктом.
Лицензии:
- Professional ($399) – лицензия для независимого разработчика, которая позволяет разрабатывать и публиковать приложения в Apple App Store.
- Enterprise ($999) – корпоративная лицензия
- Enterprise, 5 Seat
($3,999) – корпоративная лицензия на 5 машин
Все три лицензии включают год обновлений бесплатно.
Также есть пробная версия, которая позволяет тестировать приложения только в симуляторе. Для тестирования на устройствах, необходима полная версия.
Ограничения MonoTouch
Нет Just-in-Time компилятора
Согласно правил Apple приложения не должны включать код, который требует Just-in-Time (JIT) компиляцию. Но ведь так работает .NET? верно? Действительно, но MonoTouch компилирует приложения в родной для iPhone код, минуя это ограничение. Ограничения:
- Generics – генерики создаются с помощью JIT компилятора в
рантайме, но Mono имеет Ahead of Time (AOT) компиляцию, которая
генерирует все методы и свойства для объектов типа List
. Другие использования Generics, такие как Generic Virtual Methods, P/Invokes в Generic Types, и Value Types в Dictionary , не поддерживаются. - Dynamic Code Generation – генерация динамического кода зависит от JIT компилятора, то MonoTouch не поддерживает динамическую компиляцию динамических языков. Это включает System.Reflection.Emit, Remoting и Dynamic Language Runtime.
C# - единственный язык
Единственным языком, который поддерживается, является C#, Visual Basic.NET есть в планах.
Список всех ограничений доступен по адресу: http://monotouch.net/Documentation/Limitations.
Начинаем работу
Для начала работы нам необходимо следующее:
- Intel Mac Computer Running MacOSX 10.5 or 10.6 (Leopard или Snow Leopard)
- Apple iPhone SDK 3.0 или выше
- Mono
- MonoTouch SDK
- IDE - MonoDevelop или XCode
Mac Leopard или Snow Leopard
Это важное требование, так как iPhone Simulator и Interface Builder поддерживаются только на Leopard и Snow Leopard. Кроме того, MonoTouch компилятор использует низкоуровневую "магию", специфичную для Intel Maс, поэтому наличие Leopard или Snow Leopard является обязательным условием.
Apple iPhone SDK
Доступен на http://developer.apple.com/iphone/. iPhone SDK является бесплатным, но вы должны быть зарегистрированы в iPhone Developer Program. iPhone SDK включает Interface Builder, iPhone device simulator, XCode и ряд других инструментов.
Mono
Последняя версия Mono для OS X доступна по ссылке http://mono-project.com/Downloads. также нужно помнить, что Mono нужно устанавливать до установки MonoTouch SDK.
MonoTouch SDK
Дальше загружаем и устанавливаем последний MonoTouch SDK (купить можно по ссылке http://monotouch.net/Store или скачать пробную версию на http://monotouch.net/DownloadTrial).
Text Editor или Integrated Developer Environment (IDE)
Если вы хотите создавать MonoTouch приложения, то вам необходимо текстовый редактор и командную строку для компиляции или использовать XCode или MonoDevelop для этих целей.
MonoDevelop можно скачать здесь: http://monodevelop.com/Download/Mac_MonoTouch.
Если Mono установлено корректно, то MonoDevelop запустится без ошибок.
Hello World
Now that we’ve gotten through all that, let’s actually build something.
MonoDevelop
Открываем MonoDevelop и видим следующее окно:
MonoDevelop выглядит как и стандартные IDE, такие как Visual Studio, SharpDevelop, Visual C# Express и т.д.
Создаем новое приложение (solution), которые совместимые с solutions в Visual Studioю Пос сути, вы можете открывать проекты, написанные в Visual Studio, в MonoDevelop. Единственным отличием является тот факт, что вы можете открыть несколько solutions в одной версии MonoDevelop:
В OSX вы не можете открывать несколько версий MonoDevelop (и других приложений).
Создаем новое приложение - File : New : Solution:
Выбираем “iPhone MonoTouch Project” (как показано на рисунку) и назовем его Example_HelloWorld_1.
Нажимаем Forward и на следующем этапе нажимаем OK, так как нам не нужны дополнительные возможности:
Теперь вы должны получить solution на подобии этого:
Итак:
- References – эта папка содержит базовые ссылки которые нужны для запуска простейшего MonoTouch приложения. Библиотека MonoTouch включает все, что специфично для iPhone, включая обвертки над элементами управления Cocoa Touch и такие фичи, как Location, Data и др. Также присутствуют библиотеки из пространства System[.x] из .NET Base Class Library.
- Main.cs – основной файл (как это сделано в консольных приложениях). Здесь есть метод static void main(), который является точкой входа в приложение.
- MainWindow.xib & MainWindow.xib.designer.cs – аналоги Winforms Window или WPF Window. Файл с расширением xib можен быть отредактирован в Interface Builder.
Посмотрим на код в файле Main.cs:
using System; using System.Collections.Generic; using System.Linq; using MonoTouch.Foundation; using MonoTouch.UIKit; namespace Example_HelloWorld_1 { public class Application { static void Main (string[] args) { UIApplication.Main (args); } } // The name AppDelegate is referenced in the MainWindow.xib file. public partial class AppDelegate : UIApplicationDelegate { // This method is invoked when the application has loaded its UI and its ready to run public override bool FinishedLaunching (UIApplication app, NSDictionary options) { // If you have defined a view, add it here: // window.AddSubview (navigationController.View); window.MakeKeyAndVisible (); return true; } // This method is required in iPhoneOS 3.0 public override void OnActivated (UIApplication application) { } } }
Здесь мы имеем классы Application и AppDelegate. Этот подход немного отличается от привычного .NET GUI.
Мы имеем класс приложения (унаследованный от UIApplication) содержит все окна (Windows), виды (Views), элементы управления (Controls), ресурсы (Resources) и т.д. и класс делегата (унаследованный от UIApplicationDelegate), который обрабатывает события iPhone OS (такие как запуск программы или ее закрытие) и события рантайма (например предупреждения о недостаточном количестве памяти).
Обрабатывая события, вы можете на них реагировать. Например, когда ваше приложение выключается, то будет вызван метод WillTerminate() вашего класса-делегата и вы можете сохранить данные, состояние иили выполнить другие действия.
В нашем Application классе есть метод Main(). Вызывая UIApplication.Main, рантайм Objective-C найдет файл MainWindow.xib file (который содержит название нашего UIApplicationDelegate класса), создаст класс Application class (в виде Singleton) и потом вызовет события из жизненного цикла класса AppDelegate.
Interface Builder
Следующим шагом является разработка дизайна приложения. Для этого мы будем использовать Interface Builder. С его помощью можно редактировать .xib файлы, которые отвечают за пользовательский интерфейс. Файлы Nib содержат XML представление вашего интерфейса (похоже на XAML в WPF/Silverlight).
Независимо от того, что вы используете (Objective-C в XCode или C# в MonoDevelop), вы все равно используете Interface Builder.
Вы можете создавать GUI программно без использования Interface Builder и часто некоторые разработчики выбирают этот вариант. Есть много вещей, которые Interface Builder не может сделать, поэтому часто приходится дописывать GUI программно. Но для начала работы использование Interface Builder оправдано.
Поэтому открываем файл MainWindow.xib:
Давайте рассмотрим все окна по порядку. Слева направо - Document Window, Design Surface Window, Library Window и Inspector Window.
Давайте посмотрим сначала на Document Window:
Это окно отображает все объекты, которые находятся в .xib файле. Это окно показывается по умолчанию, и здесь вы можете найти иерархию объектов. Когда мы добавим элементы управления в наше окно, они не будут здесь показаны. Поэтому изменим способ отображения на list view путем нажатия на центральной иконке в View Mode. В результате мы должны увидеть следующее:
Конец первой части...
Компании из статьи
Microsoft Украина | Украинское подразделение компании Microsoft. |