> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Prise en main sur iOS et macOS

> Exigences d'intégration de PlayFab Party sur iOS et macOS, notamment la liaison des frameworks Xcode, les droits d'accès au microphone et la configuration de l'audio en arrière-plan.

Ce document répertorie les prérequis et exigences de base nécessaires pour intégrer PlayFab Party dans vos applications iOS ou macOS. Après avoir effectué les étapes propres à la plateforme, consultez le [Démarrage rapide de PlayFab Party](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/quickstart.md) pour terminer la prise en main de PlayFab Party.

## Prérequis

Avant de commencer ce tutoriel, vérifiez que les prérequis suivants sont remplis :

1. Vous avez créé un [compte développeur PlayFab](https://developer.playfab.com)
2. Vous avez créé un titre PlayFab et votre titre a été ajouté à la liste d'autorisation de PlayFab Party
3. Xcode version 10.2.1 ou ultérieure est installé
4. Vous avez accès au [dépôt des plateformes PlayFab Party](https://github.com/PlayFab/PlayFabParty)
5. Vous avez créé un compte développeur Apple qui peut être utilisé pour signer votre application en vue de son déploiement.

REMARQUE : si vous prévoyez d'utiliser le simulateur Xcode pour les tests, vous devez cibler l'architecture 64 bits (\$(ARCHS\_STANDARD\_64\_BIT)) pour votre application. Les simulateurs 32 bits ne sont actuellement pas pris en charge.

## Inclusion des bibliothèques et fichiers d'en-tête requis

### En-têtes

* Vous devez inclure les fichiers d'en-tête suivants provenant du [dépôt de distribution PlayFab Party](https://github.com/PlayFab/PlayFabParty/releases).

### Frameworks

* Vous devez lier votre application aux frameworks suivants, qui se trouvent également dans les packages de distribution PlayFab Party.
  * iOS : PlayFabParty
  * macOS : PlayFabPartyMac

> [!NOTE]
>
> Les bibliothèques SSL sont générées à partir d'[Open SSL version XXX](https://github.com/openssl/openssl/tree/OpenSSL_1_1_1-stable). Utilisez une version d'OpenSSL XXX ou ultérieure

Inclusions d'en-têtes

[En-têtes Party](https://github.com/PlayFab/PlayFabParty/tree/master/include)

En plus des fichiers de bibliothèque et des en-têtes ci-dessus, vous avez également besoin des bibliothèques et des en-têtes du SDK PlayFab, ainsi que de toutes les autres dépendances propres à la plateforme dont votre application a besoin. Consultez l'organisation des fichiers du projet de l'exemple iOS pour plus d'informations.

## Étapes pour faire fonctionner PlayFab Party sur iOS ou macOS

Comme la bibliothèque Party principale est écrite en C++, elle est directement accessible depuis du code Objective-C++. Pour plus de commodité, nous avons créé une classe wrapper Objective-C++ simple pour accéder aux fonctionnalités de la bibliothèque Party. Globalement, vous aurez besoin d'une classe ayant accès aux méthodes de l'API Party pour créer un réseau, se connecter à un réseau et envoyer des messages sur un réseau. La [SimpleClientClass](https://github.com/PlayFab/PlayFabParty/blob/docs/iOS/PartySample/app/inc/SimpleClient.h) est présentée à titre d'exemple dans notre application de démonstration iOS.

```obj-c theme={null}
//
//  SimpleClient.h
//  chatdemo_ios

#import <Foundation/Foundation.h>
#import "ChatEventHandler.h"

@interface SimpleClient : NSObject

@property (nonatomic) id<ChatEventHandler> chatEventHandler;

-(void) initialize;
-(void) setHandler:(id<ChatEventHandler>) messageHandler;
-(void) signInLocalUser;

-(void) createNetwork:(NSString*) networkId;
-(void) joinNetwork:(NSString*) networkId;
-(void) leaveNetwork;

-(void) sendTextAsVoice:(NSString*) text;
-(void) sendTextMessage:(NSString*) text;
-(void) setLanguageCode:(int) languageIndex;
-(NSArray *) getLanguageOptions;
-(int) getDefaultLanguageIndex;

-(NSString*) getSelectedUserName;

-(void) tick;

+(void) globalInitialize;
+(void) globalShutdown;

@end

```

Le pont d'objet ci-dessus s'appuie sur un fichier d'implémentation en C++ pur qui appelle [NetworkManager.cpp](https://github.com/PlayFab/PlayFabParty/blob/docs/android/PartySampleNetworkCommon/lib/NetworkManager.cpp), qui à son tour appelle les API Party.

Voici un extrait d'exemple qui montre les différentes couches :

L'interface Objective-C SimpleClient expose une méthode permettant d'initialiser PlayFab Party.

```obj-c theme={null}
// In SimpleClient.h
-(void) createNetwork:(NSString*) networkId;
```

L'implémentation de SimpleClient inclut également une référence à l'objet C++ qui appelle les API Party via le gestionnaire réseau.

```obj-c theme={null}
// In SimpleClient.mm

@interface SimpleClient ()

@end

@implementation SimpleClient

SimpleClientImpl* m_impl;
```

SimpleClientImpl est une classe C++ qui effectue l'essentiel du travail de création du réseau Party, comme illustré dans l'extrait de code ci-dessous :

```cpp theme={null}
void
SimpleClientImpl::CreateNetwork(
    std::string &networkId
    )
{
    if (g_isRunning && g_initializeCompleted)
    {
        Managers::Get<NetworkManager>()->Initialize(c_pfTitleId);
        m_messageHandler->OnStartLoading();
        Managers::Get<NetworkManager>()->CreateAndConnectToNetwork(
            networkId.c_str(),
            [this, networkId](std::string message)
            {
                this->SendSysLogToUI("create network: %s", message.c_str());
                Managers::Get<PlayFabManager>()->SetDescriptor(
                    networkId,
                    message, 
                    [this, message](void)
                    {
                        m_messageHandler->OnEndLoading();
                        this->SendSysLogToUI("set network descriptor %s", "successed");
                        std::string l_message = message;
                        m_messageHandler->OnNetworkCreated(l_message);
                    });
            },
            [this](PartyError error)
            {
                m_messageHandler->OnEndLoading();
                this->SendSysLogToUI("create network failed: %s", GetErrorMessage(error));
            });
    }
}
```

Dans l'extrait de code ci-dessus, SimpleClient appelle NetworkManager::CreateAndConnectToNetwork(), qui à son tour appelle l'API Party brute exposée dans [Party.h](https://github.com/PlayFab/PlayFabParty/blob/docs/include/Party.h)

```cpp theme={null}
void 
NetworkManager::CreateAndConnectToNetwork(
    const char *networkId, 
    std::function<void(std::string)> callback, 
    std::function<void(PartyError)> errorCallback
    )
{
    DEBUGLOG("NetworkManager::CreateAndConnectToNetwork()\n");

    // Set the maximum number of devices allowed in a network to 16 devices
    constexpr uint8_t c_maxSampleNetworkDeviceCount = 16;
    static_assert(c_maxSampleNetworkDeviceCount <= c_maxNetworkConfigurationMaxDeviceCount, "Must be less than or equal to c_maxNetworkConfigurationMaxDeviceCount.");

    // Initialize network configuration for Party Network.
    PartyNetworkConfiguration cfg = {};
    cfg.maxDeviceCount = c_maxSampleNetworkDeviceCount;
    cfg.maxDevicesPerUserCount = 1;
    cfg.maxEndpointsPerDeviceCount = 1;
    cfg.maxUserCount = c_maxSampleNetworkDeviceCount;
    cfg.maxUsersPerDeviceCount = 1;

    //Get the uid from the local chat control
    PartyString uid = nullptr;
    PartyError err = m_localUser->GetEntityId(&uid);

    if (PARTY_FAILED(err))
    {
        DEBUGLOG("GetUserIdentifier failed: %s\n", GetErrorMessage(err));
        errorCallback(err);
        return;
    }

    // Setup the network invitation configuration to use the network id as an invitation id and allow anyone to join.
    PartyInvitationConfiguration invitationConfiguration{
        networkId,                                  // invitation identifier
        PartyInvitationRevocability::Anyone,        // revokability
        0,                                          // authorized user count
        nullptr                                     // authorized user list
    };

    // Initialize an empty network descriptor to hold the result of the following call.
    PartyNetworkDescriptor networkDescriptor = {};

    // Create a new network descriptor
    err = PartyManager::GetSingleton().CreateNewNetwork(
        m_localUser,                                // Local User
        &cfg,                                       // Network Config
        0,                                          // Region List Count
        nullptr,                                    // Region List
        &invitationConfiguration,                   // Invitation configuration
        nullptr,                                    // Async Identifier
        &networkDescriptor,                         // OUT network descriptor
        nullptr                                     // applied initialinvitationidentifier.
    );

    if (PARTY_FAILED(err))
    {
        DEBUGLOG("CreateNewNetwork failed: %s\n", GetErrorMessage(err));
        errorCallback(err);
        return;
    }

    // Connect to the new network
    if (InternalConnectToNetwork(networkDescriptor, networkId, errorCallback))
    {
        m_state = NetworkManagerState::WaitingForNetwork;
        m_onnetworkcreated = callback;
        m_onnetworkcreatederror = errorCallback;
        m_onnetworkconnectedError = errorCallback;
    }
}
```

De la même manière, chaque méthode de l'interface Objective-C SimpleClient est mappée à l'API Party via `SimpleClientImpl` et `NetworkManager`.

## Remarques

Si PlayFab Party est destiné à être utilisé pour le chat vocal, l'application doit se voir accorder l'accès au microphone. Pour ce faire, assurez-vous que la propriété suivante est ajoutée au fichier Info.plist de l'application.

```
<key>NSMicrophoneUsageDescription</key>
<string>The application requires access to the microphone for voice chat.</string>
```

## Étapes suivantes

Après avoir effectué les étapes propres à la plateforme pour intégrer la bibliothèque Party dans votre application iOS ou macOS, consultez le [Démarrage rapide de PlayFab Party](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/quickstart.md) pour terminer la prise en main de PlayFab Party.


## Related topics

- [Plateformes prises en charge par PlayFab](https://docs.xbox.com/fr/services/playfab/sdks/platforms/index.md)
- [SDK PlayFab Services](https://docs.xbox.com/fr/services/playfab/sdks/c/index.md)
- [Démarrage rapide macOS](https://docs.xbox.com/fr/services/playfab/sdks/c/quickstart-macos.md)
- [Notes de version de PlayFab Party](https://docs.xbox.com/fr/services/playfab/multiplayer/networking/release-notes.md)
- [Notes de version du SDK C++ PlayFab Multiplayer](https://docs.xbox.com/fr/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/lobby-and-matchmaking-release-notes.md)
