in Unity3D when building to an iOS Xcode project,
how to perfectly automate all three of
Solution must have only the most modern 2019 syntax and variations, as this has changed slightly in Unity over the years.
Build the Xcode projectDepending on your versions of Unity and Xcode, you may be able to select Build and Run instead. In this instance, Unity will automatically open the built project in Xcode and run it on a connected device, if possible.
Open Unity, go to File > Build Settings, and select Switch Platform on the bottom of the window. Unity will start making the switch, once it is finished, the Unity icon will appear next to the iOS icon and the Build option will be activated.
Fixed code for Unity 2019.3:
// filename BuildPostProcessor.cs
// put it in a folder Assets/Editor/
using System.IO;
using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
public class BuildPostProcessor
{
[PostProcessBuild]
public static void ChangeXcodePlist(BuildTarget buildTarget, string path)
{
if (buildTarget == BuildTarget.iOS)
{
string plistPath = path + "/Info.plist";
PlistDocument plist = new PlistDocument();
plist.ReadFromFile(plistPath);
PlistElementDict rootDict = plist.root;
Debug.Log(">> Automation, plist ... <<");
// example of changing a value:
// rootDict.SetString("CFBundleVersion", "6.6.6");
// example of adding a boolean key...
// < key > ITSAppUsesNonExemptEncryption </ key > < false />
rootDict.SetBoolean("ITSAppUsesNonExemptEncryption", false);
File.WriteAllText(plistPath, plist.WriteToString());
}
}
[PostProcessBuildAttribute(1)]
public static void OnPostProcessBuild(BuildTarget target, string path)
{
if (target == BuildTarget.iOS)
{
PBXProject project = new PBXProject();
string sPath = PBXProject.GetPBXProjectPath(path);
project.ReadFromFile(sPath);
string g = project.GetUnityFrameworkTargetGuid();
ModifyFrameworksSettings(project, g);
// modify frameworks and settings as desired
File.WriteAllText(sPath, project.WriteToString());
}
}
static void ModifyFrameworksSettings(PBXProject project, string g)
{
// add hella frameworks
Debug.Log(">> Automation, Frameworks... <<");
project.AddFrameworkToProject(g, "blah.framework", false);
project.AddFrameworkToProject(g, "libz.tbd", false);
// go insane with build settings
Debug.Log(">> Automation, Settings... <<");
project.AddBuildProperty(g,
"LIBRARY_SEARCH_PATHS",
"../blahblah/lib");
project.AddBuildProperty(g,
"OTHER_LDFLAGS",
"-lsblah -lbz2");
// note that, due to some Apple shoddyness, you usually need to turn this off
// to allow the project to ARCHIVE correctly (ie, when sending to testflight):
project.AddBuildProperty(g,
"ENABLE_BITCODE",
"false");
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With