73 lines
2.0 KiB
C#

#if UNITY_IOS
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
using System.IO;
namespace Klak.Ndi.Editor {
// Xcode project file modifier for iOS support
public class PbxModifier
{
[PostProcessBuild]
public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
{
if (buildTarget == BuildTarget.iOS)
{
ModifyProjectFile(path);
ModifyPlistFile(path);
}
}
static void ModifyProjectFile(string basePath)
{
var path = PBXProject.GetPBXProjectPath(basePath);
var proj = new PBXProject();
proj.ReadFromFile(path);
var target = proj.GetUnityFrameworkTargetGuid();
var libPath = "/Library/NDI\\ SDK\\ for\\ Apple/lib/iOS";
proj.AddBuildProperty(target, "LIBRARY_SEARCH_PATHS", libPath);
proj.AddFrameworkToProject(target, "Accelerate.framework", false);
proj.AddFrameworkToProject(target, "VideoToolbox.framework", false);
proj.AddFrameworkToProject(target, "libndi_ios.a", false);
proj.WriteToFile(path);
}
static void ModifyPlistFile(string basePath)
{
var path = Path.Combine(basePath, "Info.plist");
var plist = new PlistDocument();
plist.ReadFromFile(path);
var root = plist.root;
// Bonjour service list
{
var key = "NSBonjourServices";
if (root.values.ContainsKey(key))
root.values[key].AsArray().AddString("_ndi._tcp");
else
root.CreateArray(key).AddString("_ndi._tcp");
}
// LAN usage description
{
var key = "NSLocalNetworkUsageDescription";
var desc = "NDI requires device discovery capability " +
"on the networks you use.";
if (!root.values.ContainsKey(key)) root.SetString(key, desc);
}
plist.WriteToFile(path);
}
}
} // namespace Klak.Ndi.Editor
#endif