# Mac OS X

[**Скачать SDK**](https://github.com/Pushwoosh/pushwoosh-mac-sdk)\
[**Пример проекта**](https://github.com/Pushwoosh/pushwoosh-mac-sdk/tree/master/Samples/Mac)\
[**Документация по SDK API**](https://github.com/Pushwoosh/pushwoosh-mac-sdk/tree/master/Documentation)

## Подключение Pushwoosh.framework

Добавьте `Pushwoosh.framework` в ваш проект с помощью менеджера зависимостей, вставив следующие строки в ваш `podfile` или `cartfile`:

<Tabs>
<TabItem label="Podfile">
```
platform :osx, '10.7'

target 'MyApp' do
	pod 'Pushwoosh_mac'
end
```
</TabItem>

<TabItem label="Cartfile">
```
github "Pushwoosh/pushwoosh-mac-sdk"
```
</TabItem>
</Tabs>

Кроме того, вы можете просто перетащить фреймворк в **Link Binaries With Libraries** на вкладке **Build Phases** вашего проекта.

## Добавление библиотек

На вкладке **Build Phases** вашего проекта откройте **Link Binaries With Libraries** и нажмите на кнопку добавления элементов («+»). Найдите и добавьте библиотеки **libz.tbd** и **libc++.tbd** в ваш проект:

<img src="/pushwoosh-sdk-os-x-1.webp" alt=""/>

## Связывание приложения с Pushwoosh Control Panel

В вашем файле **Info.plist** добавьте ключ типа string `Pushwoosh_APPID` со значением вашего Pushwoosh Application Code.

## Изменение AppDelegate

Добавьте следующий код в ваш AppDelegate:

<Tabs>
<TabItem label="Swift">
```swift
import PushKit
import Pushwoosh

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {

// ваш код инициализации

//-----------ЧАСТЬ PUSHWOOSH-----------

NSUserNotificationCenter.default.delegate = Pushwoosh.sharedInstance()?.notificationCenterDelegateProxy

// устанавливаем кастомный делегат для обработки пушей, в нашем случае - view controller
Pushwoosh.sharedInstance().delegate = self

// обработка пуша при запуске приложения
Pushwoosh.sharedInstance().handlePushReceived(aNotification.userInfo)

// регистрируемся для получения push-уведомлений!
Pushwoosh.sharedInstance().registerForPushNotifications()
```
</TabItem>

<TabItem label="Objective-C">
```objective-c
#import <Pushwoosh/Pushwoosh.h>

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // ваш код инициализации

    //-----------ЧАСТЬ PUSHWOOSH-----------

    [NSUserNotificationCenter defaultUserNotificationCenter].delegate = [Pushwoosh sharedInstance].notificationCenterDelegateProxy;

    // устанавливаем кастомный делегат для обработки пушей, в нашем случае - view controller
    [Pushwoosh sharedInstance].delegate = self;

    // обработка пуша при запуске приложения
    [[Pushwoosh sharedInstance] handlePushReceived:[aNotification userInfo]];

    // регистрируемся для получения push-уведомлений!
    [[Pushwoosh sharedInstance] registerForPushNotifications];
 }
```
</TabItem>
</Tabs>

Добавьте следующий код в ваш **UIApplicationDelegate** (в тот же файл, что и выше).

<Tabs>
<TabItem label="Swift">
```swift
// колбэк успешной регистрации для получения системных push-уведомлений, делегируется в PWMessagingDelegate
func application(_ application: NSApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
   Pushwoosh.sharedInstance()?.handlePushRegistration(deviceToken)
}

// колбэк ошибки регистрации для получения системных push-уведомлений, делегируется в PWMessagingDelegate
func application(_ application: NSApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
   Pushwoosh.sharedInstance()?.handlePushRegistrationFailure(error)
}
```
</TabItem>

<TabItem label="Objective-C">
```objective-c
// колбэк успешной регистрации для получения системных push-уведомлений, делегируется в pushManager
- (void)application:(NSApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
  [[Pushwoosh sharedInstance] handlePushRegistration:deviceToken];
}

// колбэк ошибки регистрации для получения системных push-уведомлений, делегируется в pushManager
- (void)application:(NSApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
  [[Pushwoosh sharedInstance] handlePushRegistrationFailure:error];
}
```
</TabItem>
</Tabs>

Для обработки push-уведомлений добавьте следующую функцию в ваш **UIApplicationDelegate** (в тот же файл, что и в трех шагах выше):

<Tabs>
<TabItem label="Swift">
```swift
// это событие срабатывает при получении пуша
func pushwoosh(_ pushwoosh: Pushwoosh!, onMessageReceived message: PWMessage!) {
   print("onMessageReceived: \(String(describing: message.payload))")
}

// это событие срабатывает, когда пользователь нажимает на уведомление
func pushwoosh(_ pushwoosh: Pushwoosh!, onMessageOpened message: PWMessage!) {
   print("onMessageOpened: \(String(describing: message.payload))")
}
```
</TabItem>

<TabItem label="Objective-C">
```objective-c
// это событие срабатывает при получении пуша
- (void)pushwoosh:(Pushwoosh *)pushwoosh onMessageReceived:(PWMessage *)message {
    NSLog(@"onMessageReceived: %@", message.payload);
}

// это событие срабатывает, когда пользователь нажимает на уведомление
- (void)pushwoosh:(Pushwoosh *)pushwoosh onMessageOpened:(PWMessage *)message {
    NSLog(@"onMessageOpened: %@", message.payload);
}
```
</TabItem>
</Tabs>

## Включение Push-уведомлений

Перейдите в **Signing and** **Capabilities** в вашем target. Нажмите **+ Capability** и добавьте **Push Notifications**.

<img src="/pushwoosh-sdk-os-x-2.webp" alt=""/>