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

97 lines
4.3 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
}