# AddCapability(string, PBXCapabilityType, string, bool)

> Adds a target capability to the Xcode project.

## Definition

* **Type:** Method
* **Namespace:** [UnityEditor.iOS.Xcode](/engine/6000.7/script-reference/unityeditor/ios/xcode.md)
* **Assembly:** UnityEditor.iOS.Extensions.Xcode

```csharp
public bool AddCapability(string targetGuid, PBXCapabilityType capability, string entitlementsFilePath = null, bool addOptionalFramework = false)
```

### Parameters

**** (\[string]\(https\://learn.microsoft.com/dotnet/api/system.string)): The GUID of the target, such as the one returned by [PBXProject.GetUnityFrameworkTargetGuid](/engine/6000.7/script-reference/unityeditor/ios/xcode/pbxproject/getunityframeworktargetguid.md).**** (\[PBXCapabilityType]\(/engine/6000.7/script-reference/unityeditor/ios/xcode/pbxcapabilitytype)): The capability to enable.**** (\[string]\(https\://learn.microsoft.com/dotnet/api/system.string)): Path to the entitlements file to be used for this capability. Information regarding the contents of entitlements files can be found in [Apple Documentation](https://developer.apple.com/library/content/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/AboutEntitlements.html)**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Set this to true to indicate that this capability requires additional frameworks. Set it to false if no additional frameworks are required.

### Returns

| Type                                                          | Description                                    |
| ------------------------------------------------------------- | ---------------------------------------------- |
| [bool](https://learn.microsoft.com/dotnet/api/system.boolean) | True if the capability was successfully added. |

### Remarks

This enables behavior based on the capability type. Some capabilities require additional setup within Xcode. For more control over the specific settings of capability, use the [ProjectCapabilityManager](/engine/6000.7/script-reference/unityeditor/ios/xcode/projectcapabilitymanager.md) class.

### Examples

```csharp
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;

public class Sample_AddCapability  
{
    [PostProcessBuild]
    public static void OnPostprocessBuild(BuildTarget buildTarget, string pathToBuiltProject)
    {

        // Stop processing if build target is not iOS
        if (buildTarget != BuildTarget.iOS)
            return;

        // Initialize PBXProject
        string projectPath = PBXProject.GetPBXProjectPath(pathToBuiltProject);

        PBXProject pbxProject = new PBXProject();
        pbxProject.ReadFromFile(projectPath);

        // Get GUIDs for UnityFramework and Main targets
        string mainTargetGuid = pbxProject.GetUnityMainTargetGuid();
        string unityFrameworkTargetGuid = pbxProject.GetUnityFrameworkTargetGuid();


        // Create an entitlements file for your capability
        string entitlementsFileName = "Example.entitlements";

        PlistDocument plistDocument = new PlistDocument();
        plistDocument.Create();

        PlistElementDict rootDict = plistDocument.root;
        rootDict.SetString("com.apple.developer.applesignin", "Default");

        plistDocument.WriteToFile(Path.Combine(pathToBuiltProject, entitlementsFileName));

        // Add 'Sign in with Apple' capability to the proejct with the entitlements file specified
        pbxProject.AddCapability(mainTargetGuid, PBXCapabilityType.SignInWithApple, entitlementsFileName);

        // Apply changes to the pbxproj file
        pbxProject.WriteToFile(projectPath);
    }

}
```
