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

# iOS and macOS getting started

> Xcode フレームワークのリンク、マイクの entitlement、バックグラウンド オーディオ構成を含む、PlayFab Party の iOS および macOS 統合要件。

このドキュメントでは、PlayFab Party を iOS または macOS アプリケーションに統合するために必要な基本的な前提条件と要件を示します。プラットフォーム固有の手順を完了した後、PlayFab Party のセットアップを完了するために [PlayFab Party のクイックスタート](/services/playfab/multiplayer/networking/quickstart) を参照してください。

## 前提条件

このチュートリアルを開始する前に、以下の前提条件が満たされていることを確認してください。

1. [PlayFab 開発者アカウント](https://developer.playfab.com) を作成した。
2. PlayFab タイトルを作成し、そのタイトルが PlayFab Party の許可リストに登録されている。
3. Xcode バージョン 10.2.1 以上がインストールされている。
4. [PlayFab Party プラットフォーム リポジトリ](https://github.com/PlayFab/PlayFabParty) にアクセスできる。
5. デプロイ用にアプリを署名するために使用できる Apple 開発者アカウントを作成した。

注: テストに XCode シミュレーターを使用する予定の場合、アプリケーションを 64 ビット (\$(ARCHS\_STANDARD\_64\_BIT)) アーキテクチャ向けにターゲット指定する必要があります。32 ビット シミュレーターは現在サポートされていません。

## 必要なライブラリとヘッダー ファイルを含める

### ヘッダー

* [PlayFab Party 配布リポジトリ](https://github.com/PlayFab/PlayFabParty/releases) の以下のヘッダー ファイルを含める必要があります。

### フレームワーク

* PlayFab Party 配布パッケージ内にも含まれる以下のフレームワークに対して、アプリケーションをリンクする必要があります。
  * iOS: PlayFabParty
  * macOS: PlayFabPartyMac

<Note>
  SSL ライブラリは [OpenSSL バージョン XXX](https://github.com/openssl/openssl/tree/OpenSSL_1_1_1-stable) からビルドされています。XXX 以上の OpenSSL バージョンを使用してください。
</Note>

ヘッダーのインクルード

[Party ヘッダー](https://github.com/PlayFab/PlayFabParty/tree/master/include)

上記の lib ファイルとヘッダーに加えて、PlayFab SDK およびアプリに必要なその他のプラットフォーム固有の依存関係の lib とヘッダーも必要です。詳細については、iOS サンプルのプロジェクト ファイル構成を参照してください。

## iOS または macOS で PlayFab Party を動作させる手順

コアの Party ライブラリは C++ で記述されているため、Objective C++ コードから直接アクセスできます。便宜上、Party ライブラリの機能にアクセスするためのシンプルな Objective-C++ ラッパー クラスを作成しました。大まかには、ネットワークを作成し、ネットワークに接続し、ネットワーク間でメッセージを送信する Party API メソッドにアクセスできるクラスが必要です。iOS デモ アプリの例として [SimpleClientClass](https://github.com/PlayFab/PlayFabParty/blob/docs/iOS/PartySample/app/inc/SimpleClient.h) を示します。

```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

```

上記のオブジェクト ブリッジは、[NetworkManager.cpp](https://github.com/PlayFab/PlayFabParty/blob/docs/android/PartySampleNetworkCommon/lib/NetworkManager.cpp) を呼び出す純粋な C++ 実装ファイルによってバックアップされており、次にそれが Party API を呼び出します。

以下は、さまざまなレイヤーを示すサンプル スニペットです。

SimpleClient Objective-C インターフェースは、PlayFab Party を初期化するメソッドを公開します。

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

SimpleClient の実装には、ネットワーク マネージャーを介して Party API を呼び出す C++ オブジェクトへの参照も含まれます。

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

@interface SimpleClient ()

@end

@implementation SimpleClient

SimpleClientImpl* m_impl;
```

SimpleClientImpl は、以下のコード スニペットに示されているように、Party ネットワークの作成という主要な処理を行う C++ クラスです。

```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));
            });
    }
}
```

上記のコード スニペットでは、SimpleClient は NetworkManager::CreateAndConnectToNetwork() を呼び出し、次にそれが [Party.h](https://github.com/PlayFab/PlayFabParty/blob/docs/include/Party.h) で公開されている raw な Party API を呼び出します。

```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;
    }
}
```

同様の方法で、SimpleClient Objective-C インターフェース内の各メソッドが `SimpleClientImpl` と `NetworkManager` を介して Party API にマッピングされます。

## 解説

PlayFab Party がボイス チャットに使用される場合、アプリケーションにマイク アクセス権を付与する必要があります。これを行うには、アプリケーションの Info.plist ファイルに以下のプロパティを追加してください。

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

## 次のステップ

iOS または macOS アプリケーションに Party ライブラリを統合するためのプラットフォーム固有の手順を完了した後、PlayFab Party のセットアップを完了するために [PlayFab Party のクイックスタート](/services/playfab/multiplayer/networking/quickstart) を参照してください。


## Related topics

- [PlayFab Services SDK](/ja-jp/services/playfab/sdks/c/index.md)
- [SDK ライフサイクル](/ja-jp/services/playfab/sdks/c/lifecycle.md)
- [Linux getting started](/ja-jp/services/playfab/multiplayer/networking/linux-specific-requirements.md)
- [Android getting started](/ja-jp/services/playfab/multiplayer/networking/android-specific-requirements.md)
- [PlayFab Multiplayer C++ SDK リリース ノート](/ja-jp/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/lobby-and-matchmaking-release-notes.md)
