public static void OnPostprocessiOSBuild(BuildTarget target, string iBuiltProjectPath) { UtilsLog.Info("PostProcessor", "OnPostprocessiOSBuild()::Target:{0} ProPath:{1}", target.ToString(), iBuiltProjectPath); #if UNITY_EDITOR if (target != BuildTarget.iOS) { return; } const string funcBlock = "PostProcessor.OnPostprocessiOSBuild()"; BuildLogger.OpenBlock(funcBlock); const string TargetProjectName = "Unity-iPhone"; BuildSettings _buildSetting = BuildSettings.GetInstance(BuildSettings.AssetFileDir); if (null == _buildSetting) { return; } // 取得设定情报列表 XCSettingItem[] settings = _buildSetting.GetXCSettingInfo(TargetProjectName); if ((settings == null) || (settings.Length <= 0)) { BuildLogger.CloseBlock(); return; } string pbxprojPath = PBXProject.GetPBXProjectPath(iBuiltProjectPath); PBXProject project = new PBXProject(); project.ReadFromString(File.ReadAllText(pbxprojPath)); string targetGUID = project.TargetGuidByName(TargetProjectName); // BuildMode(debug/release/store) string debugConfigGUID = project.BuildConfigByName(targetGUID, "Debug"); string releaseConfigGUID = project.BuildConfigByName(targetGUID, "Release"); foreach (XCSettingItem item in settings) { switch (item.Type) { case TXCSettingInfoType.ReplaceSource: { foreach (string value in item.Value.LValue) { ReplaceSource(iBuiltProjectPath, value); BuildLogger.LogMessage("Replace Source {0} -> {1}", value, iBuiltProjectPath); } } break; case TXCSettingInfoType.FrameWorks: { foreach (string frameWork in item.Value.LValue) { #if UNITY_2017_1_OR_NEWER if (project.ContainsFramework(targetGUID, frameWork) == false) { #else if (project.HasFramework(frameWork) == false) { #endif project.AddFrameworkToProject(targetGUID, frameWork, false); BuildLogger.LogMessage("Add FrameWork -> {0}", frameWork); } } } break; case TXCSettingInfoType.Libraries: { foreach (string library in item.Value.LValue) { string fileGuid = project.AddFile("usr/lib/" + library, "Frameworks/" + library, PBXSourceTree.Sdk); project.AddFileToBuild(targetGUID, fileGuid); BuildLogger.LogMessage("Add Library -> {0}", library); } } break; case TXCSettingInfoType.IncludeFiles: { foreach (string file in item.Value.LValue) { string addFilePath = null; PreSetFileToProject(iBuiltProjectPath, file, ref addFilePath); if (string.IsNullOrEmpty(addFilePath) == false) { string fileGUID = project.AddFile(addFilePath, addFilePath, PBXSourceTree.Source); project.AddFileToBuild(targetGUID, fileGUID); BuildLogger.LogMessage("Add File -> {0}", file); } } } break; case TXCSettingInfoType.IncludeFolders: { foreach (string folder in item.Value.LValue) { string copyTo = null; string addDirReference = null; PreSetFolderToProject(iBuiltProjectPath, folder, ref copyTo, ref addDirReference); if ((string.IsNullOrEmpty(copyTo) == false) && (string.IsNullOrEmpty(addDirReference) == false)) { project.AddFolderReference(copyTo, addDirReference, PBXSourceTree.Source); BuildLogger.LogMessage("Add Folder -> {0}", folder); } } } break; case TXCSettingInfoType.Bool: { // Debug if (TXCBool.Yes == item.Debug.BValue) { project.SetBuildPropertyForConfig(debugConfigGUID, item.Key, "YES"); } else { project.SetBuildPropertyForConfig(debugConfigGUID, item.Key, "NO"); } BuildLogger.LogMessage("Add Bool(Debug) -> Key:{0} Value:{1}", item.Key, item.Debug.BValue.ToString()); // Release if (TXCBool.Yes == item.Release.BValue) { project.SetBuildPropertyForConfig(releaseConfigGUID, item.Key, "YES"); } else { project.SetBuildPropertyForConfig(releaseConfigGUID, item.Key, "NO"); } BuildLogger.LogMessage("Add Bool(Release) -> Key:{0} Value:{1}", item.Key, item.Release.BValue.ToString()); } break; case TXCSettingInfoType.String: { // Debug project.SetBuildPropertyForConfig(debugConfigGUID, item.Key, item.Debug.SValue); BuildLogger.LogMessage("Add String(Debug) -> Key:{0} Value:{1}", item.Key, item.Debug.SValue); // Release project.SetBuildPropertyForConfig(releaseConfigGUID, item.Key, item.Release.SValue); BuildLogger.LogMessage("Add String(Release) -> Key:{0} Value:{1}", item.Key, item.Release.SValue); } break; case TXCSettingInfoType.List: { // Debug foreach (string value in item.Debug.LValue) { project.AddBuildPropertyForConfig(debugConfigGUID, item.Key, value); BuildLogger.LogMessage("Add List(Debug) -> Key:{0} Item:{1}", item.Key, value); } // Release foreach (string value in item.Release.LValue) { project.AddBuildPropertyForConfig(releaseConfigGUID, item.Key, value); BuildLogger.LogMessage("Add List(Release) -> Key:{0} Item:{1}", item.Key, value); } } break; default: break; } } File.WriteAllText(pbxprojPath, project.WriteToString()); BuildLogger.CloseBlock(); #endif }