99 lines
3.7 KiB
C#
99 lines
3.7 KiB
C#
#if UNITY_IOS && UNITY_2017_1_OR_NEWER
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
using UnityEditor.Callbacks;
|
|
using UnityEditor.iOS.Xcode;
|
|
using UnityEditor.iOS.Xcode.Extensions;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Copyright 2012-2022 RenderHeads Ltd. All rights reserved.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
namespace RenderHeads.Media.AVProMovieCapture.Editor
|
|
{
|
|
public class PostProcessBuild_iOS
|
|
{
|
|
[PostProcessBuild]
|
|
public static void ModifyProject(BuildTarget buildTarget, string path)
|
|
{
|
|
if (buildTarget != BuildTarget.iOS)
|
|
return;
|
|
|
|
string projectPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
|
|
PBXProject project = new PBXProject();
|
|
project.ReadFromFile(projectPath);
|
|
|
|
#if UNITY_2019_3_OR_NEWER
|
|
string targetGuid = project.GetUnityMainTargetGuid();
|
|
#else
|
|
string targetGuid = project.TargetGuidByName(PBXProject.GetUnityTargetName());
|
|
#endif
|
|
string fileGuid = project.FindFileGuidByProjectPath("Frameworks/Plugins/RenderHeads/AVProMovieCapture/Runtime/Plugins/iOS/AVProMovieCapture.framework");
|
|
if (fileGuid != null)
|
|
{
|
|
PBXProjectExtensions.AddFileToEmbedFrameworks(project, targetGuid, fileGuid);
|
|
}
|
|
else
|
|
{
|
|
Debug.LogWarning("Failed to find AVProMovieCapture.framework in the generated project. You will need to manually set AVProMovieCapture.framework to 'Embed & Sign' in the Xcode project's framework list.");
|
|
}
|
|
project.SetBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", "$(inherited) @executable_path/Frameworks");
|
|
project.WriteToFile(projectPath);
|
|
}
|
|
|
|
[PostProcessBuild]
|
|
public static void ModfifyPlist(BuildTarget buildTarget, string path)
|
|
{
|
|
if (buildTarget != BuildTarget.iOS)
|
|
return;
|
|
|
|
string plistPath = Path.Combine(path, "Info.plist");
|
|
if (!File.Exists(plistPath))
|
|
{
|
|
Debug.LogWarning(@"Unable to locate Info.plist, you may need to add the following keys yourself:
|
|
NSPhotoLibraryUsageDescription,
|
|
NSPhotoLibraryAddUsageDescription");
|
|
return;
|
|
}
|
|
|
|
Debug.Log("Modifying the Info.plist file at: " + plistPath);
|
|
|
|
PlistDocument plist = new PlistDocument();
|
|
plist.ReadFromFile(plistPath);
|
|
|
|
PlistElementDict rootDict = plist.root;
|
|
|
|
// Enable file sharing so that files can be pulled off of the device with iTunes
|
|
rootDict.SetBoolean("UIFileSharingEnabled", true);
|
|
// Enable this so that the files app can access the captured movies
|
|
rootDict.SetBoolean("LSSupportsOpeningDocumentsInPlace", true);
|
|
|
|
SerializedObject settings = Settings.GetSerializedSettings();
|
|
|
|
SerializedProperty propPhotoLibraryUsageDescription = settings.FindProperty("_photoLibraryUsageDescription");
|
|
string photoLibraryUsageDescription = propPhotoLibraryUsageDescription.stringValue;
|
|
if (photoLibraryUsageDescription != null && photoLibraryUsageDescription.Length > 0)
|
|
{
|
|
Debug.Log("Adding 'NSPhotoLibraryUsageDescription' to Info.plist");
|
|
rootDict.SetString("NSPhotoLibraryUsageDescription", photoLibraryUsageDescription);
|
|
}
|
|
|
|
SerializedProperty propPhotoLibraryAddUsageDescription = settings.FindProperty("_photoLibraryAddUsageDescription");
|
|
string photoLibraryAddUsageDescription = propPhotoLibraryAddUsageDescription.stringValue;
|
|
if (photoLibraryAddUsageDescription != null && photoLibraryAddUsageDescription.Length > 0)
|
|
{
|
|
Debug.Log("Adding 'NSPhotoLibraryAddUsageDescription' to Info.plist");
|
|
rootDict.SetString("NSPhotoLibraryAddUsageDescription", photoLibraryAddUsageDescription);
|
|
}
|
|
|
|
File.WriteAllText(plistPath, plist.WriteToString());
|
|
|
|
Debug.Log("Finished modifying the Info.plist");
|
|
}
|
|
}
|
|
}
|
|
#endif // UNITY_IOS && UNITY_2017_1_OR_NEWER
|