1 Разработка Mac-приложений на примерах. Создание простого калькулятора в Xcode

IDE от Apple - Xcode, широко используется при использовании Objective-C и фреймворков Cocoa, которые состоят из библиотек, API, и среды выполнения. Cocoa и Xcode это лучший способ разрабатывать native Mac-приложения.

1) File | New | Project...
2) OS X | Application | Cocoa Application | Next



  • Company Identifier можно еще написать в стиле com.yourlastname.yourfirstname
  • Class Prefix нужен для того чтобы отличать классы, по другому говоря гарантируют уникальность, обычно используются инициалы.

3) Сохраним проект в папке ~/Documents/Projects/
4) Описание иконок:
  1. Навигатор по файлам из проекта
  2. Навигатор по символам (имена методов и свойств)
  3. Поисковый навигатор (результаты поиска по проекту)
  4. Навигатор проблем (ошибки и предупреждения)
  5. Навигатор отладки (потоки и символы)
  6. Навигатор точек останова (breakpoint)
  7. Навигатор по log-у

5) Шаблон проекта:


.h - интерфейс (что можно сделать, но не как можно сделать)
.m - реализация (как можно сделать)
.xib - файл от Interface Builder (окна, кнопки, текстовые поля)
.plist - свойства (ключи и значения, Info.plist содержит информацию имя, версия, авторские права приложения)
.strings - список строк, которые локализуются под другие языки (InfoPlist.strings содержит локализованную версию строк из Info.plist)
.pch - предварительно откомпилированный заголовочный файл, компилятор предварительно компилирует .h файлы и сохраняет их в .pch, это ускоряет компиляцию
.rtf - rich text formatted файл, файл Credits.rtf автоматически отображается стандартным окном About
.framework - bundle (по сути папка выглядящая как файл) содержащий .h, .xib, и библиотечный файлы; фреймворки позволяют выполнять общие функции (например, показ окон)
.app - bundle содержащий вcё что нужно для запуска приложения.

6) Сменим OS X Deployment Target и Organization:


7) Создать иконку можно в Illustrator, Photoshop, Gimp. Фон должен быть прозрачным, а размеры изображения 512x512. Вообще рекомендуется создать все размеры от 16х16 до 1024х1024. Формат PNG.




8) Run

9)

//
//  BTSAppDelegate.h
//  SimpleCalc
//
//  Created by Devtype on 14.03.14.
//  Copyright (c) 2014 Devtype. All rights reserved.
//

#import <Cocoa/Cocoa.h>

@interface BTSAppDelegate : NSObject <NSApplicationDelegate>

@property (assign) IBOutlet NSWindow *window;

/*
 Create the user interface elements
 */
// Buttons
@property (assign) IBOutlet NSButton *mAdd;
@property (assign) IBOutlet NSButton *mSubtract;
@property (assign) IBOutlet NSButton *mMutliply;
@property (assign) IBOutlet NSButton *mDivide;
// Text Fields
@property (assign) IBOutlet NSTextField *mValue1;
@property (assign) IBOutlet NSTextField *mValue2;
@property (assign) IBOutlet NSTextField *mResult;
/*
 Create the App interface for the buttons
 */
- (IBAction)myButtonAction:(id)sender;

@end

//
//  BTSAppDelegate.m
//  SimpleCalc
//
//  Created by Devtype on 14.03.14.
//  Copyright (c) 2014 Devtype. All rights reserved.
//

#import "BTSAppDelegate.h"

@implementation BTSAppDelegate

/*
 Create the user interface setter and getter functions
 */
// Buttons
@synthesize mAdd;
@synthesize mSubtract;
@synthesize mMutliply;
@synthesize mDivide;
// Text Fields
@synthesize mValue1;
@synthesize mValue2;
@synthesize mResult;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
}

/*
 Create the App implementation for the buttons
 */
- (IBAction)myButtonAction:(id)sender;
{
    // For now, just beep
    NSBeep();
}

@end


Создадим интерфейс!

10) В MainMenu.xib нажимаем Show Document Outline


11) Далее добавляем 4 кнопки Square Button (+, -, ÷, x), 3 текстовых поля (Text Field) и Horizontal Line. На панели Show the size inspector включим Minimum Size и Maximum Size чтобы размеры окна оставались фиксированными.


12) Для всех 4 кнопок делаем следующее. ПКМ (или Ctrl+ЛКМ) перетягиваем их на AppDelegate и выбираем myButtonAction.

Аналогично перетягиваем AppDelegate на текстовые поля по порядку и выбираем mValue1, mValue2, mResult.

13) Run

Далее напишем основной код!

14) Дорабатываем метод myButtonAction в файле BTSAppDelegate.m

/*
 Create the App implementation for the buttons
 */
- (IBAction)myButtonAction:(id)a_sender;
{
    // For now, just beep
    // Comment out the beep, we don't need it
    // NSBeep();
    // Get the button title (+, -, x, or ÷) to
    // determine which operation the App will
    // preform
    NSString *l_operation = [a_sender title];
    // Get a double precision number from the
    // first text field
    double l_value1 = [mValue1 doubleValue];
    // Get a double precision number from the
    // second text field
    double l_value2 = [mValue2 doubleValue];
    // Create a double precision variable to
    // hold the result of l_value1 <op> l_value2
    double l_result;
    // If the operation was addition, then
    // add the two values
    if ([@"+" isEqual: l_operation])
    {
        l_result = l_value1 + l_value2;
    }
    // If the operation was subtraction, then
    // subtract the two values
    else if ([@"-" isEqual: l_operation])
    {
        l_result = l_value1 - l_value2;
    }
    // If the operation was multiplication, then
    // multiply the two values
    else if ([@"x" isEqual: l_operation])
    {
        l_result = l_value1 * l_value2;
    }
    // The operation must have been division, so
    // divide the first value by the second value
    else
    {
        l_result = l_value1 / l_value2;
    }
    // Set the result text field to the result
    [mResult setDoubleValue:l_result];
}

Сделаем теперь конечный продукт!

15) Product | Clean
16) Product | Scheme | Edit Scheme...
17) На панели Run SimpleCalc.app ставим Build Configuration значение Release.
18) Product | Build For | Running
19) Дальше в файлах проекта можно сделать ПКМ на продукте и выбрать Show in Finder: