Just a couple of days ago, Apple released Xcode 6.2 with support for iOS 8.2 beta and WatchKit.
This framework is designed to interact with Apple Watch and develop applications for them.
However, everything is not so simple.
The first and most important feature of applications for Apple Watch is that their code is executed not on the Watch themselves, but on the iPhone. How does this happen? Simple enough: the clock application contains only user interface files, but the WatchKit extension contains all event controllers. These are mandatory components of the application that needs to interact with Watch. When installing an application with WatchKit support on the iPhone, the user will also be prompted to install the application on the Watch (of course, if the user has the Watch and they are paired with the iPhone). When you start the application, the interface is displayed on the clock, and the code is executed in the background on the phone. The obvious and not at all pleasing conclusion is that without the iPhone (or Jailbreak), you cannot launch third-party software on Watch.
Watch apps come in three types: Watch App, Glance Interface and Notifications. The most functional is the first one, which I will discuss in the article. Glance Interface and Notifications are designed to notify users of any events, Glance allows you to create your own custom notification type, and Notifications works with local and push notifications, displays them to the user and allows you to add several buttons for actions.
Let's get started Launch Xcode, select “Create new Xcode project” and create a new project from the iOS template - Application - Single View Application.
')

The name of the project, the organization - to your taste. My example will be written in Objective-C, and choose it.

After selecting the folder to save the project, Xcode will create it in it and open it. Our application is only able to show a white screen on an iPhone, add support for Watch: go to the menu File -> New -> Target and in the appeared window select iOS - Apple Watch - WatchApp:

On the next window, the main application settings for Watch are configured: programming language (Objective-C), types of supported application modes (I have removed the Glance Interface and Notifications, will only have the Watch App):

After clicking “Finish” we draw attention to the files that appear in the Project Navigator:

InterfaceController.m is the interface controller of our application. This file will be executed on the iPhone.
Interface.storyboard - the application interface on Watch. With it, we can change the application interface to Watch.
The first application will be the traditional “Helloworld”. Click on Interface.storyboard and see the Watch screen in the editor:

There are not so many components of the watch: Button, Label, Slider, Image, Separator, Switch, Date, Map, Menu and Table (rather ascetic analogue of UITableView). In Glance mode, the selection is even smaller - for example, you cannot add buttons.
At Helloworld, we’ll need a button and a text label. To add the Label and Button components, look for them in the Object Library (usually below right):

Simply drag the components we need onto the Watch form. In Attributes Inspector I set my Title buttons and Text for Label:

We have an interface, but InterfaceController.m does not know about it. Let's fix this — we need to add a button click handler and a Label property. For easy editing, switch Xcode to Assistent Editor - a button with a tuxedo at the top left:

In this mode, Xcode shows the interface file on one side and the code editor on the other:

Introduce the code and the interface - drag the right mouse button Label and Button on the controller code, between
interface InterfaceController () and end. For Label, create a property (firstLabel), and for a Button, Action (tapOnButton). Xcode will automatically create an empty tapOnButton method for the button in the implementation section.

Making the final touch - we will change the text firstLabel by pressing the button. Edit the tapOnButton method:
- (IBAction)tapOnButton { [_firstLabel setText:@"Hello World!"]; }
Interestingly, the code below does not work:
firstLabel.text = @"Text";
firstLabel is an object of type WKInterfaceLabel, which has only a text setting method, but not a property to read it. Due to these limitations, the framework recommends that Apple store all the values ​​of the elements in the code, rather than hoping that they can be read directly from the component on the Watch interface.
To run the application on Watch, you need to select the correct active project scheme. By default, the application starts for the iPhone, we need to choose the launch of the application for Watch, in my example this is the second line. Choosing an iPhone 6:

Run the application. If the Watch simulator window does not appear, go to the simulator settings and turn on:

In a running form, it looks like this:

Finally, we press the button and with noticeable delay we observe the result:

This is how the creation of the simplest application for Watch looks like in general. Since the application runs on an iPhone, the programmer has access to all methods and data from the iPhone itself (Apple has already notified about possible restrictions on energy-intensive operations). WatchKit is a bridge between the code on the iPhone and the interface on Watch.
I am ready to accept criticism on the article, suggestions for improvement (or writing a new one on this subject), I will try to answer the questions.
Thanks for attention.