This is the script I use to add iphone-ipad-minimum-performance-a12 to info plist in Xcode when you build your game in Unity. It makes sure to append iphone-ipad-minimum-performance-a12 to the UIRequiredDeviceCapabilities array instead of overwriting it if it already contains other items - in my case, metal and arm64. I haven’t confirmed it yet on a. non a12 device but in Xcode I can see its automatically and correctly appended it to the UIRequiredDeviceCapabilities array.
using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
using System.IO;
using System.Collections.Generic;
public class BuildHelper : MonoBehaviour
{
#if UNITY_IOS
[PostProcessBuild]
static void OnPostprocessBuild(BuildTarget buildTarget, string path)
{
// Read plist
var plistPath = Path.Combine(path, "Info.plist");
var plist = new PlistDocument();
plist.ReadFromFile(plistPath);
// Update value
PlistElementDict rootDict = plist.root;
rootDict.SetString("NSPhotoLibraryAddUsageDescription", "${PRODUCT_NAME} save screenshots");
// Ensure UIRequiredDeviceCapabilities is an array
PlistElementArray capabilitiesArray;
if (rootDict["UIRequiredDeviceCapabilities"] != null)
{
// If it's not an array, convert it to one
var existingElement = rootDict["UIRequiredDeviceCapabilities"];
if (existingElement is PlistElementArray array)
{
capabilitiesArray = array;
}
else
{
// Create a new array and add the existing single value to it
capabilitiesArray = rootDict.CreateArray("UIRequiredDeviceCapabilities");
capabilitiesArray.AddString(existingElement.AsString());
}
}
else
{
// Create a new array if it doesn't exist
capabilitiesArray = rootDict.CreateArray("UIRequiredDeviceCapabilities");
}
// Add "iphone-ipad-minimum-performance-a12" if it's not already in the array
if (!capabilitiesArray.values.Exists(x => x.AsString() == "iphone-ipad-minimum-performance-a12"))
{
capabilitiesArray.AddString("iphone-ipad-minimum-performance-a12");
}
// Write plist
File.WriteAllText(plistPath, plist.WriteToString());
}
#endif
}