Знакомство с Mac. Пошаговое руководствоHello, Mac – Walkthrough

Xamarin.Mac позволяет разрабатывать полностью нативные приложения для Mac на C# и .NET с помощью тех же API-интерфейсов macOS, которые используются при разработке на Objective-C и Swift.Xamarin.Mac allows for the development of fully native Mac apps in C# and .NET using the same macOS APIs that are used when developing in Objective-C or Swift. Поскольку Xamarin.Mac напрямую интегрируется с Xcode, можно использовать конструктор Interface Builder для Xcode, чтобы создавать пользовательские интерфейсы приложений (или при необходимости создать их непосредственно в коде C#).Because Xamarin.Mac integrates directly with Xcode, the developer can use Xcode's Interface Builder to create an app's user interfaces (or optionally create them directly in C# code).

Кроме того, поскольку приложения Xamarin.Mac пишутся на C# и .NET, их код можно использовать для мобильных приложений Xamarin.iOS и Xamarin.Android, при этом на каждой платформе формируется собственная среда взаимодействия.Additionally, since Xamarin.Mac applications are written in C# and .NET, code can be shared with Xamarin.iOS and Xamarin.Android mobile apps; all while delivering a native experience on each platform.

В этой статье будут представлены основные понятия, необходимые для создания приложения Mac с помощью Xamarin.Mac, Visual Studio для Mac и конструктора Interface Builder Xcode. Они рассматриваются в ходе процесса построения простого приложения Привет, Mac, которое подсчитывает количество раз нажатия кнопки:This article will introduce the key concepts needed to create a Mac app using Xamarin.Mac, Visual Studio for Mac and Xcode's Interface Builder by walking through the process of building a simple Hello, Mac app that counts the number of times a button has been clicked:

В статье затрагиваются следующие темы:The following concepts will be covered:

  • Visual Studio для Mac. Общие сведения о Visual Studio для Mac и использовании этой среды для создания приложений Xamarin.Mac.Visual Studio for Mac – Introduction to the Visual Studio for Mac and how to create Xamarin.Mac applications with it.
  • Компоненты приложения Xamarin.Mac. Описание частей приложения Xamarin.Mac.Anatomy of a Xamarin.Mac Application – What a Xamarin.Mac application consists of.
  • Конструктор Interface Builder в Xcode. Сведения об использовании конструктора Interface Builder в Xcode для определения пользовательского интерфейса приложения.Xcode’s Interface Builder – How to use Xcode’s Interface Builder to define an app’s user interface.
  • Переменные экземпляров и действия. Сведения об использовании переменных экземпляров и действий для привязывания элементов управления в пользовательском интерфейсе.Outlets and Actions – How to use Outlets and Actions to wire up controls in the user interface.
  • Развертывание и тестирование. Сведения о запуске и тестировании приложения Xamarin.Mac.Deployment/Testing – How to run and test a Xamarin.Mac app.

ТребованияRequirements

Для разработки приложений с помощью Xamarin.Mac вам потребуются:Xamarin.Mac application development requires:

Чтобы запустить приложение, созданное с помощью Xamarin.Mac, вам потребуется:To run an application built with Xamarin.Mac, you will need:

  • компьютер Mac под управлением macOS начиная с версии 10.7.A Mac computer running macOS 10.7 or greater.

Предупреждение

Будущий выпуск Xamarin.Mac 4.8 будет поддерживать только macOS 10.9 или более поздней версии.The upcoming Xamarin.Mac 4.8 release will only support macOS 10.9 or higher. Предыдущие версии Xamarin.Mac поддерживали macOS 10.7 или более поздней версии, но в этих версиях macOS нет достаточной инфраструктуры TLS для поддержки TLS 1.2.Previous versions of Xamarin.Mac supported macOS 10.7 or higher, but these older macOS versions lack sufficient TLS infrastructure to support TLS 1.2. Для macOS 10.7 или macOS 10.8 используйте Xamarin.Mac 4.6 или более ранней версии.To target macOS 10.7 or macOS 10.8, use Xamarin.Mac 4.6 or earlier.

Создание приложения Xamarin.Mac в Visual Studio для MacStarting a new Xamarin.Mac App in Visual Studio for Mac

Как уже говорилось выше, в этом руководстве описываются действия по созданию приложения Mac Hello_Mac, которое добавляет одну кнопку и метку в главное окно.As stated above, this guide will walk through the steps to create a Mac app called Hello_Mac that adds a single button and label to the main window. При нажатии кнопки метка будет отображать количество раз нажатия.When the button is clicked, the label will display the number of times it has been clicked.

Чтобы приступить к работе, сделайте следующее:To get started, do the following steps:

  1. Запустите Visual Studio для Mac:Start Visual Studio for Mac:

  2. Нажмите кнопку Создать проект. В открывшемся диалоговом окне Создание проекта последовательно щелкните Mac > Приложение > Приложение Cocoa, после чего нажмите кнопку Далее.Click on the New Project... button to open the New Project dialog box, then select Mac > App > Cocoa App and click the Next button:

  3. Введите Hello_Mac в поле Имя приложения и оставьте все остальные значения по умолчанию.Enter Hello_Mac for the App Name, and keep everything else as default. Нажмите кнопку Далее:Click Next:

  4. Укажите для нового проекта расположение на своем компьютере.Confirm the location of the new project on your computer:

  5. Нажмите кнопку Создать.Click the Create button.

В Visual Studio для Mac будет создано приложение Xamarin.Mac и отобразятся файлы по умолчанию, добавляемые в решение приложения:Visual Studio for Mac will create the new Xamarin.Mac app and display the default files that get added to the app's solution:

В Visual Studio для Mac используется такая же структура решений и проектов, что и в Visual Studio 2019.Visual Studio for Mac uses the same Solution and Project structure as Visual Studio 2019. Решение представляет собой контейнер, который может содержать один или несколько проектов; проекты могут включать в себя приложения, вспомогательные библиотеки, тестовые приложения и т. д. Шаблон Файл > Создать проект автоматически создает решение и проект приложения.A solution is a container that can hold one or more projects; projects can include applications, supporting libraries, test applications, etc. The File > New Project template creates a solution and an application project automatically.

Структура приложения Xamarin.MacAnatomy of a Xamarin.Mac Application

Создание приложений с помощью Xamarin.Mac очень похоже на работу с Xamarin.iOS.Xamarin.Mac application programming is very similar to working with Xamarin.iOS. iOS использует платформу CocoaTouch, облегченную версию используемого в Mac API-интерфейса Cocoa.iOS uses the CocoaTouch framework, which is a slimmed-down version of Cocoa, used by Mac.

Взгляните на файлы в проекте:Take a look at the files in the project:

  • Main.cs содержит основную точку входа приложения.Main.cs contains the main entry point of the app. Класс Main содержит первый метод, который выполняется при запуске приложения.When the app is launched, the Main class contains the very first method that is run.
  • AppDelegate.cs содержит класс AppDelegate, который отвечает за ожидание передачи данных событий из операционной системы.AppDelegate.cs contains the AppDelegate class that is responsible for listening to events from the operating system.
  • Info.plist содержит свойства приложения, такие как имя приложения, значки и т. д.Info.plist contains app properties such as the application name, icons, etc.
  • Entitlements.plist содержит данные о правах приложения и позволяет обращаться к таким вещам, как песочница и iCloud.Entitlements.plist contains the entitlements for the app and allows access to things such as Sandboxing and iCloud support.
  • Main.storyboard определяет пользовательский интерфейс приложения (окна и меню) и схему взаимосвязей между окнами (с помощью объектов Segue).Main.storyboard defines the user interface (Windows and Menus) for an app and lays out the interconnections between Windows via Segues. Раскадровки представляют собой XML-файлы, которые содержат определение представлений (элементов пользовательского интерфейса).Storyboards are XML files that contain the definition of views (user interface elements). Этот файл создается и обслуживается с помощью конструктора Interface Builder в Xcode.This file can be created and maintained by Interface Builder inside of Xcode.
  • ViewController.cs — это контроллер главного окна.ViewController.cs is the controller for the main window. Контроллеры будут подробно рассматриваться в другой статье, а в нашем случае он считается основным механизмом любого конкретного представления.Controllers will be covered in detail in another article, but for now, a controller can be thought of the main engine of any particular view.
  • ViewController.designer.cs содержит код подключения, который помогает интегрироваться в пользовательский интерфейс главного экрана.ViewController.designer.cs contains plumbing code that helps integrate with the main screen’s user interface.

Краткое описание некоторых файлов будет приведено в разделах ниже.The following sections, will take a quick look through some of these files. Позже мы рассмотрим их более подробно, однако понять их основы следует именно сейчас.Later, they will be explored in more detail, but it’s a good idea to understand their basics now.

Main.csMain.cs

Файл Main.cs очень прост.The Main.cs file is very simple. Он содержит статический метод Main, создающий экземпляр приложения Xamarin.Mac и передающий имя класса, который будет обрабатывать события операционной системы. В данном случае это класс AppDelegate:It contains a static Main method which creates a new Xamarin.Mac app instance and passes the name of the class that will handle OS events, which in this case is the AppDelegate class:

using System;
using System.Drawing;
using Foundation;
using AppKit;
using ObjCRuntime;

namespace Hello_Mac
{
    class MainClass
    {
        static void Main (string[] args)
        {
            NSApplication.Init ();
            NSApplication.Main (args);
        }
    }
}

AppDelegate.csAppDelegate.cs

Файл AppDelegate.cs содержит класс AppDelegate, который отвечает за создание окон и прослушивание событий операционной системы:The AppDelegate.cs file contains an AppDelegate class, which is responsible for creating windows and listening to OS events:

using AppKit;
using Foundation;

namespace Hello_Mac
{
    [Register ("AppDelegate")]
    public class AppDelegate : NSApplicationDelegate
    {
        public AppDelegate ()
        {
        }

        public override void DidFinishLaunching (NSNotification notification)
        {
            // Insert code here to initialize your application
        }

        public override void WillTerminate (NSNotification notification)
        {
            // Insert code here to tear down your application
        }
    }
}

Возможно, этот код вам незнаком, если вы не создавали приложения iOS ранее, но он довольно прост.This code is probably unfamiliar unless the developer has built an iOS app before, but it’s fairly simple.

Метод DidFinishLaunching выполняется после создания экземпляра приложения и отвечает за фактическое создание окна приложения и запуск процесса отображения представления в этом окне.The DidFinishLaunching method runs after the app has been instantiated, and it’s responsible for actually creating the app's window and beginning the process of displaying the view in it.

Метод WillTerminate вызывается после того, как пользователь или система инициировали завершение работы приложения.The WillTerminate method will be called when the user or the system has instantiated a shutdown of the app. Этот метод следует использовать для завершения работы приложения перед его закрытием (например, сохранение настроек пользователя или размера и расположения окна).The developer should use this method to finalize the app before it quits (such as saving user preferences or window size and location).

ViewController.csViewController.cs

В Cocoa (и производной платформе CocoaTouch) используется шаблон Model View Controller (MVC).Cocoa (and by derivation, CocoaTouch) uses what’s known as the Model View Controller (MVC) pattern. Объявление ViewController представляет объект для управления фактическим окном приложения.The ViewController declaration represents the object that controls the actual app window. Как правило, для каждого созданного окна (и для многих других задач, выполняемых в окнах) существует контроллер, который отвечает за жизненный цикл окна, например за его отображение, добавление в него новых представлений (элементов управления) и т. д.Generally, for every window created (and for many other things within windows), there is a controller, which is responsible for the window’s lifecycle, such as showing it, adding new views (controls) to it, etc.

Класс ViewController является контроллером главного окна.The ViewController class is the main window’s controller. Этот контроллер отвечает за жизненный цикл главного окна.The controller is responsible for the life cycle of the main window. Этот вопрос будет подробно рассматриваться позднее, а сейчас мы лишь быстро взглянем на этот класс:This will be examined in detail later, for now take a quick look at it:

using System;

using AppKit;
using Foundation;

namespace Hello_Mac
{
    public partial class ViewController : NSViewController
    {
        public ViewController (IntPtr handle) : base (handle)
        {
        }

        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();

            // Do any additional setup after loading the view.
        }

        public override NSObject RepresentedObject {
            get {
                return base.RepresentedObject;
            }
            set {
                base.RepresentedObject = value;
                // Update the view, if already loaded.
            }
        }
    }
}

ViewController.Designer.csViewController.Designer.cs

Файл конструктора для класса главного окна изначально пуст. В процессе создания пользовательского интерфейса с помощью конструктора Interface Builder в Xcode программа Visual Studio для Mac будет автоматически заполнять этот файл.The designer file for the Main Window class is initially empty, but it will be automatically populated by Visual Studio for Mac as the user interface is created with Xcode Interface Builder:

// WARNING
//
// This file has been generated automatically by Visual Studio for Mac to store outlets and
// actions made in the UI designer. If it is removed, they will be lost.
// Manual changes to this file may not be handled correctly.
//
using Foundation;

namespace Hello_Mac
{
    [Register ("ViewController")]
    partial class ViewController
    {
        void ReleaseDesignerOutlets ()
        {
        }
    }
}

Файлы конструктора не нужно редактировать вручную, так как ими автоматически управляет Visual Studio для Mac. Они содержат необходимый код подключения, обеспечивающий доступ к элементам управления, которые были добавлены в окно или представление приложения.Designer files should not be edited directly, as they’re automatically managed by Visual Studio for Mac to provide the plumbing code that allows access to controls that have been added to any window or view in the app.

Создав проект приложения Xamarin.Mac и получив основное представление о его компонентах, можно переключиться в Xcode для создания пользовательского интерфейса с помощью конструктора Interface Builder.With the Xamarin.Mac app project created and a basic understanding of its components, switch to Xcode to create the user interface using Interface Builder.

Info.plistInfo.plist

Файл Info.plist содержит такие сведения о приложении Xamarin.Mac, как его имя и идентификатор пакета:The Info.plist file contains information about the Xamarin.Mac app such as its Name and Bundle Identifier:

А также определяет раскадровку, которая будет использоваться для отображения пользовательского интерфейса приложения Xamarin.Mac в раскрывающемся списке Главный интерфейс.It also defines the Storyboard that will be used to display the user interface for the Xamarin.Mac app under the Main Interface dropdown. В примере выше элемент Main в раскрывающемся списке относится к элементу Main.storyboard в дереве исходного кода проекта в обозревателе решений.In example above, Main in the dropdown relates to the Main.storyboard in the project's source tree in the Solution Explorer. Кроме того, в этом файле определяются значки приложения. Для этого указывается содержащий их каталог ресурсов (в примере выше — это AppIcon).It also defines the app's icons by specifying the Asset Catalog that contains them (AppIcon in this case).

Entitlements.plistEntitlements.plist

Файл Entitlements.plist приложения управляет назначениями в приложении Xamarin.Mac, такими как песочница и iCloud:The app's Entitlements.plist file controls entitlements that the Xamarin.Mac app has such as Sandboxing and iCloud:

Для примера Hello World назначения не потребуются.For the Hello World example, no entitlements will be required. В следующем разделе мы рассмотрим, как изменить файл Main.storyboard и определить пользовательский интерфейс приложения Xamarin.Mac с помощью Interface Builder в Xcode.The next section shows how to use Xcode's Interface Builder to edit the Main.storyboard file and define the Xamarin.Mac app's UI.

Общие сведения об Xcode и конструкторе интерфейсов Interface BuilderIntroduction to Xcode and Interface Builder

Компания Apple создала входящий в Xcode инструмент, который называется конструктором Interface Builder и позволяет визуально создавать пользовательский интерфейс в конструкторе.As part of Xcode, Apple has created a tool called Interface Builder, which allows a developer to create a user interface visually in a designer. Xamarin.Mac свободно интегрируется с конструктором Interface Builder, поэтому для создания пользовательского интерфейса применяются те же средства, что и в Objective-C.Xamarin.Mac integrates fluently with Interface Builder, allowing UI to be created with the same tools as Objective-C users.

Чтобы приступить к работе, дважды щелкните файл Main.storyboard в обозревателе решений, чтобы открыть его для редактирования в Xcode и конструкторе Interface Builder:To get started, double-click the Main.storyboard file in the Solution Explorer to open it for editing in Xcode and Interface Builder:

Запустится Xcode. Открывшееся окно будет выглядеть следующим образом:This should launch Xcode and look like this screenshot:

Перед началом разработки интерфейса кратко ознакомьтесь с Xcode, чтобы получить представление об основных используемых компонентах.Before starting to design the interface, take a quick overview of Xcode to orient with the main features that will be used.

Примечание

Примечание. Вам не нужно использовать Xcode и конструктор Interface Builder, чтобы создать пользовательский интерфейс для приложения Xamarin.Mac. Это можно сделать непосредственно из кода C# (в статье это не описано).The developer doesn't have to use Xcode and Interface Builder to create the user interface for a Xamarin.Mac app, the UI can be created directly from C# code but that is beyond the scope of this article. Для простоты в оставшейся части этого учебника будет использоваться конструктор Interface Builder.For the sake of simplicity, it will be using Interface Builder to create the user interface throughout the rest of this tutorial.

Компоненты XcodeComponents of Xcode

Когда файл .storyboard открывается в Xcode из Visual Studio для Mac, в левой части открывается навигатор проекта, по центру — иерархия интерфейса и редактор интерфейса, а в правой части — свойства и служебные программы.When opening a .storyboard file in Xcode from Visual Studio for Mac, it opens with a Project Navigator on the left, the Interface Hierarchy and Interface Editor in the middle, and a Properties & Utilities section on the right:

В следующих разделах рассматриваются функции каждого компонента Xcode и их использование для создания интерфейса приложения Xamarin.Mac.The following sections take a look at what each of these Xcode features do and how to use them to create the interface for a Xamarin.Mac app.

Навигация по проектуProject Navigation

Когда файл .storyboard открывается для редактирования в Xcode, Visual Studio для Mac в фоновом режиме создает файл проекта Xcode, который используется для синхронизации изменений с Xcode.When opening a .storyboard file for editing in Xcode, Visual Studio for Mac creates a Xcode Project File in the background to communicate changes between itself and Xcode. При возврате из Xcode в Visual Studio для Mac все изменения, внесенные в этот проект, синхронизируются с проектом Xamarin.Mac.Later, when the developer switches back to Visual Studio for Mac from Xcode, any changes made to this project are synchronized with the Xamarin.Mac project by Visual Studio for Mac.

В разделе Навигация по проекту можно перемещаться между всеми файлами, составляющими оболочку проекта Xcode.The Project Navigation section allows the developer to navigate between all of the files that make up this shim Xcode project. Как правило, в этом списке интерес представляют только файлы .storyboard, такие как Main.storyboard.Typically, they will only be interested in the .storyboard files in this list such as Main.storyboard.

Иерархия интерфейсаInterface Hierarchy

В разделе Иерархия интерфейса можно легко получить доступ к нескольким ключевым группам пользовательского интерфейса, таким как Заполнители и главное Окно.The Interface Hierarchy section allows the developer to easily access several key properties of the user interface such as its Placeholders and main Window. Данный раздел можно использовать для обращения к отдельным элементам (представлениям), составляющим пользовательский интерфейс, и корректировки их вложенности путем перетаскивания в рамках иерархии.This section can be used to access the individual elements (views) that make up the user interface and to adjust the way they are nested by dragging them around within the hierarchy.

Редактор интерфейсаInterface Editor

В разделе Редактор интерфейса находится область для графического представления пользовательского интерфейса. Проект интерфейса создается путем перетаскивания элементов из раздела Библиотека в разделе Свойства и служебные программы.The Interface Editor section provides the surface on which the user interface is graphically laid out. Drag elements from the Library section of the Properties & Utilities section to create the design. Элементы пользовательского интерфейса (представления), добавляемые в область конструктора, будут добавлены в раздел Иерархия интерфейса в том порядке, в котором они отображаются в разделе Редактор интерфейса.As user interface elements (views) are added to the design surface, they will be added to the Interface Hierarchy section in the order that they appear in the Interface Editor.

Свойства и служебные программыProperties & Utilities

Раздел Свойства и служебные программы состоит из двух основных разделов — Свойства (также называемые инспекторами) и Библиотека:The Properties & Utilities section is divided into two main sections, Properties (also called Inspectors) and the Library:

Изначально этот раздел практически пуст, однако если выбрать элемент в разделе Редактор интерфейса или в разделе Иерархия интерфейса, раздел Свойства будет заполняться сведениями о выбранном элементе и настраиваемыми свойствами.Initially this section is almost empty, however if the developer selects an element in the Interface Editor or Interface Hierarchy, the Properties section will be populated with information about the given element and properties that they can adjust.

В разделе Свойства находится восемь разных вкладок инспекторов, как показано на следующем рисунке:Within the Properties section, there are eight different Inspector Tabs, as shown in the following illustration:

Типы свойств и служебных программProperties & Utility Types

Слева направо располагаются следующие вкладки:From left-to-right, these tabs are:

  • Инспектор файлов. Инспектор файлов отображает сведения о файле, такие как имя файла и расположение редактируемого XIB-файла.File Inspector – The File Inspector shows file information, such as the file name and location of the Xib file that is being edited.
  • Экспресс-справка. На вкладке "Экспресс-справка" содержится контекстная справка по компоненту или функции, выбранной в Xcode.Quick Help – The Quick Help tab provides contextual help based on what is selected in Xcode.
  • Инспектор удостоверений. Инспектор удостоверений предоставляет сведения о выбранном элементе управления или представлении.Identity Inspector – The Identity Inspector provides information about the selected control/view.
  • Инспектор атрибутов. Инспектор атрибутов позволяет настраивать различные атрибуты выбранного элемента управления или представления.Attributes Inspector – The Attributes Inspector allows the developer to customize various attributes of the selected control/view.
  • Инспектор размеров. Инспектор размеров позволяет управлять размером и поведением изменения размера выбранного элемента управления или представления.Size Inspector – The Size Inspector allows the developer to control the size and resizing behavior of the selected control/view.
  • Инспектор подключений. Инспектор подключений показывает подключения переменной экземпляра и действия выбранных элементов управления.Connections Inspector – The Connections Inspector shows the Outlet and Action connections of the selected controls. Переменные экземпляров и действия будут подробно рассматриваться далее.Outlets and Actions will be discussed in detail below.
  • Инспектор привязок. Инспектор привязок позволяет настраивать элементы управления таким образом, чтобы их значения автоматически привязывались к моделям данных.Bindings Inspector – The Bindings Inspector allows the developer to configure controls so that their values are automatically bound to data models.
  • Инспектор эффектов представления. Инспектор эффектов представления позволяет указывать эффекты (например, анимации) в элементах управления.View Effects Inspector – The View Effects Inspector allows the developer to specify effects on the controls, such as animations.

Воспользуйтесь разделом Библиотека для поиска элементов управления и объектов, размещаемых в конструкторе для графического построения пользовательского интерфейса:Use the Library section to find controls and objects to place into the designer to graphically build the user interface:

Создание интерфейсаCreating the Interface

Ознакомившись с основными компонентами интегрированной среды разработки Xcode и конструктора Interface Builder, можно приступить к созданию пользовательского интерфейса для основного представления.With the basics of the Xcode IDE and Interface Builder covered, the developer can create the user interface for the main view.

Для работы с Interface Builder сделайте следующее:Follow these steps to use Interface Builder:

  1. В Xcode перетащите нажимную кнопку из раздела "Библиотека":In Xcode, drag a Push Button from the Library Section:

  2. Поместите кнопку в узел Представление (в разделе Контроллер окна) в редакторе интерфейса:Drop the button onto the View (under the Window Controller) in the Interface Editor:

  3. В окне Attribute Inspector (Инспектор атрибутов) щелкните свойство Title (Название) и измените название кнопки на Click Me (Нажми меня).Click on the Title property in the Attribute Inspector and change the button's title to Click Me:

  4. Перетащите метку из раздела "Библиотека":Drag a Label from the Library Section:

  5. Поместите метку в область Окно рядом с кнопкой в редакторе интерфейса:Drop the label onto the Window beside the button in the Interface Editor:

  6. Захватите правый маркер метки и перетаскивайте его до границы окна:Grab the right handle on the label and drag it until it is near the edge of the window:

  7. Выберите кнопку, только что добавленную в редактор интерфейса, и щелкните значок редактора ограничений в нижней части окна:Select the Button just added in the Interface Editor, and click the Constraints Editor icon at the bottom of the window:

  8. В верхней части редактора щелкните красные I-образные указатели, направленные вверх и влево.At the top of the editor, click the Red I-Beams at the top and left. При изменении размера окна кнопка будет оставаться на том же месте (в левом верхнем углу экрана).As the window is resized, this will keep the button in the same location at the top left corner of the screen.

  9. Затем установите флажки Высота и Ширина, чтобы использовать размеры по умолчанию.Next, check the Height and Width boxes and use the default sizes. При изменении размера окна кнопка будет сохранять свой размер.This keeps the button at the same size when the window resizes.

  10. Нажмите кнопку Добавить 4 ограничения, чтобы добавить ограничения и закрыть редактор.Click the Add 4 Constraints button to add the constraints and close the editor.

  11. Выберите метку и еще раз щелкните значок редактора ограничений.Select the label and click the Constraints Editor icon again:

  12. При щелчке красных I-образных указателей, направленных вверх, вправо и влево в редакторе ограничений, метка закрепляется в заданных позициях X и Y и увеличивается и уменьшается при изменении размера окна в запущенном приложении.By clicking Red I-Beams at the top, right and left of the Constraints Editor, tells the label to be stuck to its given X and Y locations and to grow and shrink as the window is resized in the running application.

  13. Снова установите флажок Высота и примите значение по умолчанию, а затем нажмите кнопку Добавить 4 ограничения, чтобы добавить ограничения и закрыть редактор.Again, check the Height box and use the default size, then click the Add 4 Constraints button to add the constraints and close the editor.

  14. Сохраните изменения пользовательского интерфейса.Save the changes to the user interface.

При изменении размера и перемещении элементов управления Interface Builder будет давать полезные подсказки, основанные на рекомендациях по созданию пользовательских интерфейсов в macOS.While resizing and moving controls around, notice that Interface Builder gives helpful snap hints that are based on macOS Human Interface Guidelines. Эти рекомендации помогут создавать высококачественные приложения, которые будут иметь внешний вид и интерфейс, знакомый пользователям Mac.These guidelines will help the developer to create high quality apps that will have a familiar look and feel for Mac users.

Взгляните на раздел Иерархия интерфейса, чтобы увидеть компоновку и иерархию элементов, составляющих пользовательский интерфейс:Look in the Interface Hierarchy section to see how the layout and hierarchy of the elements that make up the user interface are shown:

Здесь можно выбирать элементы для редактирования или перетаскивать элементы для изменения их порядка.From here the developer can select items to edit or drag to reorder UI elements if needed. Например, если элемент пользовательского интерфейса перекрыт другим элементом, его можно перетащить в нижнюю часть списка, чтобы сделать самым верхним элементом в окне.For example, if a UI element was being covered by another element, they could drag it to the bottom of the list to make it the top-most item on the window.

После создания пользовательского интерфейса потребуется предоставить доступ к его элементам, чтобы Xamarin.Mac мог обращаться к ним и взаимодействовать с ними в коде C#.With the user interface created, the developer will need to expose the UI items so that Xamarin.Mac can access and interact with them in C# code. Эта задача будет рассматриваться в следующем разделе о переменных экземпляров и действиях.The next section, Outlets and Actions, shows how to do this.

Переменные экземпляров и действияOutlets and Actions

Что такое переменные экземпляров и действия?So what are Outlets and Actions? В традиционном программировании пользовательского интерфейса .NET добавляемый элемент управления в пользовательском интерфейсе автоматически предоставляется как свойство.In traditional .NET user interface programming, a control in the user interface is automatically exposed as a property when it’s added. В Mac это работает по-другому — простое добавление элемента управления в представление не делает его доступным для кода.Things work differently in Mac, simply adding a control to a view doesn’t make it accessible to code. Необходимо явно предоставить элемент пользовательского интерфейса в код.The developer must explicitly expose the UI element to code. Для этого Apple предлагает два указанных далее варианта:In order do this, Apple provides two options:

  • Переменные экземпляров. Они аналогичны свойствам.Outlets – Outlets are analogous to properties. Если элемент управления привязывается к переменной экземпляра, она предоставляется в код через свойство, поэтому можно выполнять такие действия, как присоединять обработчики событий, вызывать методы и т. д.If the developer wires up a control to an Outlet, it’s exposed to the code via a property, so they can do things like attach event handlers, call methods on it, etc.
  • Действия. Они аналогичны командам в WPF.Actions – Actions are analogous to the command pattern in WPF. Например, при выполнении действия в элементе управления (например, нажатие кнопки) элемент управления автоматически вызовет метод в коде.For example, when an Action is performed on a control, say a button click, the control will automatically call a method in the code. Действия являются мощным и удобным механизмом, поскольку позволяют привязывать много элементов управления к одному действию.Actions are powerful and convenient because the developer can wire up many controls to the same Action.

В Xcode переменные экземпляров и действия добавляются непосредственно в код путем нажатия клавиши CTRL и перетаскиванием.In Xcode, Outlets and Actions are added directly in code via Control-dragging. Это означает, что для создания переменной экземпляра или действия следует выбрать элемент управления, к которому нужно добавить переменную экземпляра или действие, и, удерживая нажатой клавишу CTRL на клавиатуре, перетащить этот элемент управления непосредственно в код.More specifically, this means that to create an Outlet or Action, the developer will choose a control element to add an Outlet or Action to, hold down the Control key on the keyboard, and drag that control directly into the code.

Для разработчиков Xamarin.Mac это означает, что элемент управления будет перетаскиваться в файлы заглушки Objective-C, которые соответствуют файлу C#, где нужно создать переменную экземпляра или действие.For Xamarin.Mac developers, this means that the developer will drag into the Objective-C stub files that correspond to the C# file where they want to create the Outlet or Action. В Visual Studio для Mac создан файл ViewController.h как часть проекта оболочки Xcode, сгенерированного для использования конструктора Interface Builder:Visual Studio for Mac created a file called ViewController.h as part of the shim Xcode Project it generated to use Interface Builder:

Этот файл заглушки .h соответствует ViewController.designer.cs, который автоматически добавляется в проект Xamarin.Mac при создании NSWindow.This stub .h file mirrors the ViewController.designer.cs that is automatically added to a Xamarin.Mac project when a new NSWindow is created. Этот файл будет использоваться для синхронизации изменений, внесенных конструктором Interface Builder. Кроме того, в нем создаются переменные экземпляров и действия для предоставления элементов пользовательского интерфейса в код C#.This file will be used to synchronize the changes made by Interface Builder and is where the Outlets and Actions are created so that UI elements are exposed to C# code.

Добавление переменной экземпляраAdding an Outlet

Получив общее представление о переменных экземпляров и действиях, можно создать переменную экземпляра для предоставления созданной метки в код C#.With a basic understanding of what Outlets and Actions are, create an Outlet to expose the Label created to our C# code.

Выполните следующие действия:Do the following:

  1. В Xcode в правом верхнем углу экрана нажмите кнопку с изображением двойного круга, чтобы открыть вспомогательный редактор:In Xcode at the far right top-hand corner of the screen, click the Double Circle button to open the Assistant Editor:

  2. Xcode переключится в комбинированный режим, где в одной стороне находится редактор интерфейса, а в другой — редактор кода.The Xcode will switch to a split-view mode with the Interface Editor on one side and a Code Editor on the other.

  3. Обратите внимание, что в Xcode в редакторе кода автоматически выбран файл ViewController.m, который нам не нужен.Notice that Xcode has automatically picked the ViewController.m file in the Code Editor, which is incorrect. Принимая во внимание приведенные выше сведения о переменных экземпляров и действиях, необходимо выбрать файл ViewController.h.From the discussion on what Outlets and Actions are above, the developer will need to have the ViewController.h selected.

  4. В верхней части редактора кода щелкните автоматическую ссылку и выберите файл ViewController.h:At the top of the Code Editor click on the Automatic Link and select the ViewController.h file:

  5. Теперь в Xcode должен быть выбран правильный файл:Xcode should now have the correct file selected:

  6. Последнее действие было очень важным! Если вы не выберете правильный файл, вы не сможете создать переменные экземпляров и действия либо же они будут передаваться в неправильный класс C#.The last step was very important!: if you didn't have the correct file selected, you won't be able to create Outlets and Actions, or they will be exposed to the wrong class in C#!

  7. Перейдите в редактор интерфейса и, удерживая нажатой клавишу CTPL на клавиатуре, щелкните и перетащите созданную метку в редактор кода сразу же под код @interface ViewController : NSViewController {}:In the Interface Editor, hold down the Control key on the keyboard and click-drag the label created above onto the code editor just below the @interface ViewController : NSViewController {} code:

  8. Откроется диалоговое окно.A dialog box will be displayed. Оставьте в поле Подключение значение Переменная экземпляра и введите ClickedLabel в поле Имя:Leave the Connection set to Outlet and enter ClickedLabel for the Name:

  9. Нажмите кнопку Подключить, чтобы создать переменную экземпляра:Click the Connect button to create the Outlet:

  10. Сохраните изменения в файле.Save the changes to the file.

Добавление действияAdding an Action

Далее следует предоставить кнопку в код C#.Next, expose the button to C# code. Так же, как и метку выше, к переменной экземпляра можно привязать кнопку.Just like the Label above, the developer could wire the button up to an Outlet. Поскольку нам необходимо реагировать на нажимаемую кнопку, необходимо воспользоваться действием.Since we only want to respond to the button being clicked, use an Action instead.

Выполните следующие действия:Do the following:

  1. Убедитесь, что Xcode по-прежнему находится во вспомогательном редакторе, а в редакторе кода отображается файл ViewController.h.Ensure that Xcode is still in the Assistant Editor and the ViewController.h file is visible in the Code Editor.

  2. Перейдите в редактор интерфейса и, удерживая нажатой клавишу CTPL на клавиатуре, щелкните и перетащите созданную кнопку в редактор кода сразу же под код @property (assign) IBOutlet NSTextField *ClickedLabel;:In the Interface Editor, hold down the Control key on the keyboard and click-drag the button created above onto the code editor just below the @property (assign) IBOutlet NSTextField *ClickedLabel; code:

  3. Задайте параметру Подключение значение Действие:Change the Connection type to Action:

  4. Введите ClickedButton в поле Имя:Enter ClickedButton as the Name:

  5. Нажмите кнопку Подключить, чтобы создать действие:Click the Connect button to create Action:

  6. Сохраните изменения в файле.Save the changes to the file.

Привязав пользовательский интерфейс и предоставив его в код C#, переключитесь в Visual Studio для Mac и позвольте среде синхронизировать изменения, внесенные в Xcode и конструктор Interface Builder.With the user interface wired-up and exposed to C# code, switch back to Visual Studio for Mac and let it synchronize the changes made in Xcode and Interface Builder.

Примечание

Создание пользовательского интерфейса и переменных экземпляров и действий может занимать много времени и усилий. Но все это компенсируется получением новых знаний.It probably took a long time to create the user interface and Outlets and Actions for this first app, and it may seem like a lot of work, but a lot of new concepts were introduced and a lot of time was spent covering new ground. После небольшой практики и работы с конструктором Interface Builder вы сможете создавать подобные интерфейсы и все переменные экземпляров и действия буквально за пару минут.After practicing for a while and working with Interface Builder, this interface and all its Outlets and Actions can be created in just a minute or two.

Синхронизация изменений с XcodeSynchronizing Changes with Xcode

При возврате из Xcode в Visual Studio для Mac все изменения, внесенные в Xcode, автоматически синхронизируются с проектом Xamarin.Mac.When the developer switches back to Visual Studio for Mac from Xcode, any changes that they have made in Xcode will automatically be synchronized with the Xamarin.Mac project.

Выберите файл ViewController.designer.cs в обозревателе решений, чтобы увидеть, как переменная экземпляра и действия привязаны в коде C #:Select the ViewController.designer.cs in the Solution Explorer to see how the Outlet and Action have been wired up in the C# code:

Обратите внимание, как два определения в файле ViewController.designer.csNotice how the two definitions in the ViewController.designer.cs file:

[Outlet]
AppKit.NSTextField ClickedLabel { get; set; }

[Action ("ClickedButton:")]
partial void ClickedButton (Foundation.NSObject sender);

соответствуют определениям в файле ViewController.h в Xcode:Line up with the definitions in the ViewController.h file in Xcode:

@property (assign) IBOutlet NSTextField *ClickedLabel;
- (IBAction)ClickedButton:(id)sender;

Visual Studio для Mac прослушивает изменения файла .h, а затем автоматически синхронизирует их в соответствующем файле .designer.cs для предоставления в приложение.Visual Studio for Mac listens for changes to the .h file, and then automatically synchronizes those changes in the respective .designer.cs file to expose them to the app. Обратите внимание, что ViewController.designer.cs является разделяемым классом, поэтому в Visual Studio для Mac не нужно изменять файл ViewController.cs, который перезапишет любые изменения, внесенные в класс.Notice that ViewController.designer.cs is a partial class, so that Visual Studio for Mac doesn't have to modify ViewController.cs which would overwrite any changes that the developer has made to the class.

Как правило, открывать файл ViewController.designer.cs никогда не потребуется. Он был представлен здесь только в целях обучения.Normally, the developer will never need to open the ViewController.designer.cs, it was presented here for educational purposes only.

Примечание

В большинстве случаев Visual Studio для Mac автоматически видит изменения, внесенные в Xcode, и синхронизирует их с проектом Xamarin.Mac.In most situations, Visual Studio for Mac will automatically see any changes made in Xcode and sync them to the Xamarin.Mac project. В ситуации, если синхронизация не выполняется автоматически, вернитесь в Xcode и затем обратно в Visual Studio для Mac.In the off occurrence that synchronization doesn't automatically happen, switch back to Xcode and then back to Visual Studio for Mac again. Обычно эти действия запускают цикл синхронизации.This will normally kick off a synchronization cycle.

Написание кодаWriting the Code

Создав пользовательский интерфейс и предоставив его элементы в код с помощью переменных экземпляров и действий, можно написать код для реализации приложения.With the user interface created and its UI elements exposed to code via Outlets and Actions, we are finally ready to write the code to bring the program to life.

В этом примере приложения при каждом нажатии кнопки метка будет обновляться для отображения количества раз нажатия.For this sample app, every time the first button is clicked, the label will be updated to show how many times the button has been clicked. Для этого откройте файл ViewController.cs для редактирования, дважды щелкнув его в обозревателе решений:To accomplish this, open the ViewController.cs file for editing by double-clicking it in the Solution Explorer:

Сначала создайте переменную уровня класса в классе ViewController, чтобы отслеживать количество сделанных нажатий.First, create a class-level variable in the ViewController class to track the number of clicks that have happened. Измените определение класса и придайте ему следующий вид:Edit the class definition and make it look like the following:

namespace Hello_Mac
{
    public partial class ViewController : NSViewController
    {
        private int numberOfTimesClicked = 0;
        ...

Далее в этом же классе (ViewController) переопределите метод ViewDidLoad и добавьте код для задания начального сообщения для метки:Next, in the same class (ViewController), override the ViewDidLoad method and add some code to set the initial message for the label:

public override void ViewDidLoad ()
{
    base.ViewDidLoad ();

    // Set the initial value for the label
    ClickedLabel.StringValue = "Button has not been clicked yet.";
}

Используйте ViewDidLoad вместо другого метода (например, Initialize), так как метод ViewDidLoad вызывается после того, как ОС загрузит и создаст пользовательский интерфейс из файла .storyboard.Use ViewDidLoad, instead of another method such as Initialize, because ViewDidLoad is called after the OS has loaded and instantiated the user interface from the .storyboard file. При попытке получить доступ к элементу управления метки до полной загрузки и создания файла .storyboard возникнет ошибка NullReferenceException, так как элемент управления метки еще не существует.If the developer tried to access the label control before the .storyboard file has been fully loaded and instantiated, they would get a NullReferenceException error because the label control would not exist yet.

Затем добавьте код для реагирования на нажатие кнопки пользователем.Next, add the code to respond to the user clicking the button. В класс ViewController добавьте следующий разделяемый метод:Add the following partial method to the ViewController class:

partial void ClickedButton (Foundation.NSObject sender) {
    // Update counter and label
    ClickedLabel.StringValue = string.Format("The button has been clicked {0} time{1}.",++numberOfTimesClicked, (numberOfTimesClicked < 2) ? "" : "s");
}

Этот код присоединяется к действию, созданному в Xcode и конструкторе Interface Builder, и будет вызываться при каждом нажатии кнопки пользователем.This code attaches to the Action created in Xcode and Interface Builder and will be called any time the user clicks the button.

Тестирование приложенияTesting the Application

Пришло время собрать и запустить приложение, чтобы убедиться, что оно работает должным образом.It’s time to build and run the app to make sure it runs as expected. Сборку и запуск можно выполнить за один шаг либо собрать приложение, не запуская его.The developer can build and run all in one step, or they can build it without running it.

При построении приложения можно выбрать тип сборки:Whenever an app is built, the developer can choose what kind of build they want:

  • Отладка. Сборка отладки компилируется в APP-файл с множеством дополнительных метаданных, позволяющих проводить отладку во время выполнения приложения.Debug – A debug build is compiled into an .app (application) file with a bunch of extra metadata that allows the developer to debug what’s happening while the app is running.
  • Выпуск. Сборка выпуска также создает APP-файл, но он не содержит отладочную информацию, поэтому он меньше и выполняется быстрее.Release – A release build also creates an .app file, but it doesn’t include debug information, so it’s smaller and executes faster.

Тип сборки можно выбрать в раскрывающемся списке Средство выбора конфигурации в верхнем левом углу окна Visual Studio для Mac.The developer can select the type of build from the Configuration Selector at the upper left-hand corner of the Visual Studio for Mac screen:

Построение приложенияBuilding the Application

В этом примере нам нужна сборка отладки, поэтому выберите тип Отладка.In the case of this example, we just want a debug build, so ensure that Debug is selected. Сначала выполните сборку приложения — нажмите ⌘B или в меню Сборка выберите пункт Собрать все.Build the app first by either pressing ⌘B, or from the Build menu, choose Build All.

Если ошибок нет, в строке Visual Studio для Mac появится сообщение Сборка успешно завершена.If there weren't any errors, a Build Succeeded message will be displayed in Visual Studio for Mac's status bar. Если возникли ошибки, просмотрите проект и убедитесь, что описанные выше действия были выполнены правильно.If there were errors, review the project and make sure that the steps above have been followed correctly. Сначала убедитесь, что код (как в Xcode, так и в Visual Studio для Mac) соответствует коду в этом учебнике.Start by confirming that the code (both in Xcode and in Visual Studio for Mac) matches the code in the tutorial.

Запуск приложенияRunning the Application

Существует три способа запуска приложения:There are three ways to run the app:

  • Нажмите сочетание клавиш ⌘ + ВВОД.Press ⌘+Enter.
  • В меню Запуск выберите Отладка.From the Run menu, choose Debug.
  • На панели инструментов Visual Studio для Mac нажмите кнопку Воспроизведение (сразу над обозревателем решений).Click the Play button in the Visual Studio for Mac toolbar (just above the Solution Explorer).

Приложение будет собрано (если это еще не было сделано), запущено в режиме отладки и отобразит главное окно интерфейса:The app will build (if it hasn’t been built already), start in debug mode and display its main interface window:

Если кнопка была нажата несколько раз, метка должна обновиться и отобразит количество раз нажатия:If the button is clicked a few times, the label should be updated with the count:

Дальнейшие действияWhere to Next

Изучив основы работы с приложением Xamarin.Mac, просмотрите следующие документы, чтобы получить более глубокие знания:With the basics of working with a Xamarin.Mac application down, take a look at the following documents to get a deeper understanding:

  • Введение в раскадровки. В этой статье приводятся общие сведения о работе с раскадровками в приложении Xamarin.Mac.Introduction to Storyboards - This article provides an introduction to working with Storyboards in a Xamarin.Mac app. В ней описывается создание и обслуживание пользовательского интерфейса приложения с помощью раскадровок и конструктора Interface Builder.It covers creating and maintaining the app's UI using storyboards and Xcode's Interface Builder.
  • Окна. В этой статье рассматривается работа с окнами и панелями в приложении Xamarin.Mac.Windows - This article covers working with Windows and Panels in a Xamarin.Mac application. В ней содержатся сведения о создании и обслуживании окон и панелей в Xcode и конструкторе Interface Builder, загрузка окон и панелей из XIB-файлов, использование окон и реагирование на окна в коде C#.It covers creating and maintaining Windows and Panels in Xcode and Interface builder, loading Windows and Panels from .xib files, using Windows and responding to Windows in C# code.
  • Диалоговые окна. В этой статье рассматривается работа с диалоговыми и модальными окнами в приложении Xamarin.Mac.Dialogs - This article covers working with Dialogs and Modal Windows in a Xamarin.Mac application. В ней содержатся сведения о создании и обслуживании модальных окон в Xcode и конструкторе Interface Builder, работа со стандартными диалоговыми окнами, отображение окон и реагирование на них в коде C#.It covers creating and maintaining Modal Windows in Xcode and Interface builder, working with standard dialogs, displaying and responding to Windows in C# code.
  • Оповещения. В этой статье рассматривается работа с оповещениями в приложении Xamarin.Mac.Alerts - This article covers working with Alerts in a Xamarin.Mac application. В ней содержатся сведения о создании и отображении оповещений из кода C# и реагирование на оповещения.It covers creating and displaying Alerts from C# code and responding to Alerts.
  • Меню. Меню используются в различных частях пользовательского интерфейса приложения Mac. Это и главное меню приложения в верхней части экрана, и разнообразные всплывающие и контекстные меню, которые могут отображаться в любом месте окна.Menus - Menus are used in various parts of a Mac application's user interface; from the application's main menu at the top of the screen to pop up and contextual menus that can appear anywhere in a window. Меню — неотъемлемая часть пользовательского интерфейса приложений Mac.Menus are an integral part of a Mac application's user experience. В этой статье рассматривается работа с меню Cocoa в приложении Xamarin.Mac.This article covers working with Cocoa Menus in a Xamarin.Mac application.
  • Панели инструментов. В этой статье рассматривается работа с панелями инструментов в приложении Xamarin.Mac.Toolbars - This article covers working with Toolbars in a Xamarin.Mac application. в частности их создание и поддержкаIt covers creating and maintaining. в Xcode и Interface Builder, передача элементов панелей инструментов в код с помощью переменных экземпляров и действий, включение и отключение элементов панелей инструментов и реагировании на них в коде C#.Toolbars in Xcode and Interface builder, how to expose the Toolbar Items to code using Outlets and Actions, enabling and disabling Toolbar Items and finally responding to Toolbar Items in C# code.
  • Представления таблиц. В этой статье рассматривается работа с представлениями таблиц в приложении Xamarin.Mac.Table Views - This article covers working with Table Views in a Xamarin.Mac application. В ней содержатся сведения о создании и обслуживании представлений таблиц в Xcode и конструкторе Interface Builder, предоставлении элементов представлений таблиц в код с помощью переменных экземпляров и действий, заполнении элементов таблиц и реагировании на элементы представлений таблиц в коде C#.It covers creating and maintaining Table Views in Xcode and Interface builder, how to expose the Table View Items to code using Outlets and Actions, populating Table Items and finally responding to Table View Items in C# code.
  • Представления структур. В этой статье рассматривается работа с представлениями структур в приложении Xamarin.Mac.Outline Views - This article covers working with Outline Views in a Xamarin.Mac application. В ней содержатся сведения о создании и обслуживании представлений структур в Xcode и конструкторе Interface Builder, предоставлении элементов представлений структур в код с помощью переменных экземпляров и действий, заполнении элементов структур и реагировании на элементы представлений структур в коде C#.It covers creating and maintaining Outline Views in Xcode and Interface builder, how to expose the Outline View Items to code using Outlets and Actions, populating Outline Items and finally responding to Outline View Items in C# code.
  • Списки источников. В этой статье рассматривается работа со списками источников в приложении Xamarin.Mac.Source Lists - This article covers working with Source Lists in a Xamarin.Mac application. В ней содержатся сведения о создании и обслуживании списков источников в Xcode и конструкторе Interface Builder, предоставлении элементов списков источников в код с помощью переменных экземпляров и действий, заполнении элементов списков источников и реагировании на элементы списков источников в коде C#.It covers creating and maintaining Source Lists in Xcode and Interface builder, how to expose the Source Lists Items to code using Outlets and Actions, populating Source List Items and finally responding to Source List Items in C# code.
  • Представления коллекций. В этой статье рассматривается работа с представлениями коллекций в приложении Xamarin.Mac.Collection Views - This article covers working with Collection Views in a Xamarin.Mac application. В ней содержатся сведения о создании и обслуживании представлений коллекций в Xcode и конструкторе Interface Builder, предоставлении элементов представлений коллекций в код с помощью переменных экземпляров и действий, заполнении представлений коллекций и реагировании на представления коллекций в коде C#.It covers creating and maintaining Collection Views in Xcode and Interface builder, how to expose the Collection View elements to code using Outlets and Actions, populating Collection Views and finally responding to Collection Views in C# code.
  • Работа с изображениями. В этой статье рассматривается работа с изображениями и значками в приложении Xamarin.Mac.Working with Images - This article covers working with Images and Icons in a Xamarin.Mac application. Здесь рассматривается создание и обслуживание изображений, необходимых для создания значка приложения, и использование изображений в коде C# и конструкторе Interface Builder для Xcode.It covers creating and maintaining the images needed to create an app's Icon and using Images in both C# code and Xcode's Interface Builder.

Коллекция примеров Mac содержит готовые к использованию примеры кода, которые помогут освоить Xamarin.Mac.The Mac Samples Gallery contains ready-to-use code examples to help learn Xamarin.Mac.

В качестве примера полностью готового приложения Xamarin.Mac, содержащего многие из тех функций, которые пользователь ожидает увидеть в типичном приложении для Mac, можно привести SourceWriter.One complete Xamarin.Mac app that includes many of the features a user would expect to find in a typical Mac application is the SourceWriter Sample App. SourceWriter — это простой редактор исходного кода, который предоставляет поддержку для автозавершения и выделения простого синтаксиса.SourceWriter is a simple source code editor that provides support for code completion and simple syntax highlighting.

Весь код SourceWriter содержит комментарии. Где необходимо, добавлены ссылки на описания технологий и методов или на соответствующую документацию по Xamarin.Mac.The SourceWriter code has been fully commented and, where available, links have been provided from key technologies or methods to relevant information in the Xamarin.Mac documentation.

СводкаSummary

В этой статье рассматривались основы стандартного приложения Xamarin.Mac.This article covered the basics of a standard Xamarin.Mac app. Здесь приводились сведения о создании приложения в Visual Studio для Mac, разработке пользовательского интерфейса в Xcode и конструкторе Interface Builder, предоставлении элементов пользовательского интерфейса в код C# с помощью переменных экземпляров и действий, добавлении кода для работы с элементами пользовательского интерфейса и, наконец, о сборке и тестировании приложения Xamarin.Mac.It covered creating a new app in Visual Studio for Mac, designing the user interface in Xcode and Interface Builder, exposing UI elements to C# code using Outlets and Actions, adding code to work with the UI elements and finally, building and testing a Xamarin.Mac app.