yunque9/wb_unity_pro/Assets/Editor/XCodeAPI/Scripts/XCodeProjectMod.cs

97 lines
4.3 KiB
C#
Raw Normal View History

using UnityEngine;
#if UNITY_IPHONE
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
using System.Collections.Generic;
using System.IO;
#endif
public class XCodeProjectMod : MonoBehaviour
{
#if UNITY_IPHONE
private const string SETTING_DATA_PATH = "Assets/Editor/XCodeAPI/Setting/XcodeProjectSetting.asset";
[PostProcessBuild]
private static void OnPostprocessBuild(BuildTarget buildTarget, string buildPath)
{
Debug.LogError("ios工程==========================================");
if (buildTarget != BuildTarget.iOS)
return;
PBXProject pbxProject = null;
XcodeProjectSetting setting = null;
string pbxProjPath = PBXProject.GetPBXProjectPath(buildPath);
string targetGuid = null;
Debug.Log("开始设置.XCodeProj");
setting = AssetDatabase.LoadAssetAtPath<XcodeProjectSetting>(SETTING_DATA_PATH);
pbxProject = new PBXProject();
pbxProject.ReadFromString(File.ReadAllText(pbxProjPath));
targetGuid = pbxProject.GetUnityFrameworkTargetGuid();
pbxProject.SetBuildProperty(targetGuid, XcodeProjectSetting.ENABLE_BITCODE_KEY, setting.EnableBitCode ? "YES" : "NO");
pbxProject.SetBuildProperty(targetGuid, XcodeProjectSetting.DEVELOPMENT_TEAM, setting.DevelopmentTeam);
pbxProject.SetBuildProperty(targetGuid, XcodeProjectSetting.GCC_ENABLE_CPP_EXCEPTIONS, setting.EnableCppEcceptions ? "YES" : "NO");
pbxProject.SetBuildProperty(targetGuid, XcodeProjectSetting.GCC_ENABLE_CPP_RTTI, setting.EnableCppRtti ? "YES" : "NO");
pbxProject.SetBuildProperty(targetGuid, XcodeProjectSetting.GCC_ENABLE_OBJC_EXCEPTIONS, setting.EnableObjcExceptions ? "YES" : "NO");
var sign_type = setting.SignType.ToString();
foreach (XcodeProjectSetting.SignIdentity si in setting.SignIdentityList)
{
if (si.name == sign_type)
{
pbxProject.SetBuildProperty(targetGuid, "CODE_SIGN_IDENTITY", si.codeSign);
pbxProject.SetBuildProperty(targetGuid, "PROVISIONING_PROFILE", si.profile);
pbxProject.SetBuildProperty(targetGuid, "PROVISIONING_PROFILE_SPECIFIER", si.profileSpecifier);
break;
}
}
// if (!string.IsNullOrEmpty(setting.CopyDirectoryPath))
// DirectoryProcessor.CopyAndAddBuildToXcode(pbxProject, targetGuid, setting.CopyDirectoryPath, buildPath, "");
//编译器标记Compiler flags
foreach (XcodeProjectSetting.CompilerFlagsSet compilerFlagsSet in setting.CompilerFlagsSetList)
{
foreach (string targetPath in compilerFlagsSet.TargetPathList)
{
if (!pbxProject.ContainsFileByProjectPath(targetPath))
continue;
string fileGuid = pbxProject.FindFileGuidByProjectPath(targetPath);
List<string> flagsList = pbxProject.GetCompileFlagsForFile(targetGuid, fileGuid);
flagsList.Add(compilerFlagsSet.Flags);
pbxProject.SetCompileFlagsForFile(targetGuid, fileGuid, flagsList);
}
}
//引用内部框架
foreach (string framework in setting.FrameworkList)
{
pbxProject.AddFrameworkToProject(targetGuid, framework, false);
}
//引用.tbd文件
foreach (string tbd in setting.TbdList)
{
pbxProject.AddFileToBuild(targetGuid, pbxProject.AddFile("usr/lib/" + tbd, "Frameworks/" + tbd, PBXSourceTree.Sdk));
}
//设置OTHER_LDFLAGS
pbxProject.UpdateBuildProperty(targetGuid, XcodeProjectSetting.LINKER_FLAG_KEY, setting.LinkerFlagArray, null);
//设置Framework Search Paths
pbxProject.UpdateBuildProperty(targetGuid, XcodeProjectSetting.FRAMEWORK_SEARCH_PATHS_KEY, setting.FrameworkSearchPathArray, null);
File.WriteAllText(pbxProjPath, pbxProject.WriteToString());
//已经存在的文件,拷贝替换
foreach (XcodeProjectSetting.CopeFiles file in setting.CopeFilesList)
{
Debug.Log(Application.dataPath + file.sourcePath + " " + buildPath + file.copyPath);
File.Copy(Application.dataPath + file.sourcePath, buildPath + file.copyPath, true);
}
//设置Plist
InfoPlistProcessor.SetInfoPlist(buildPath, setting);
}
#endif
}