Project_WL/Assets/Editor/AutoBuild.cs

236 lines
10 KiB
C#

using System;
using System.IO;
using UnityEditor;
//using Google.Android.AppBundle.Editor.Internal;
#if UNITY_ANDROID
using UnityEditor.Android;
#else
using UnityEditor.iOS.Xcode;
using UnityEditor.iOS.Xcode.Extensions;
using Facebook.Unity.Settings;
#endif
using UnityEngine;
public static class AutoBuild
{
[MenuItem("AutoBuild/Set_AndroidKeyStore")]
static void Set_AndroidKeyStore()
{
PlayerSettings.Android.useCustomKeystore = true;
PlayerSettings.Android.keystoreName = "AndroidData/himminji.keystore";
PlayerSettings.Android.keyaliasName = "nerdnavis";
PlayerSettings.keystorePass = PlayerSettings.keyaliasPass = "himminji3#";
}
[MenuItem("AutoBuild/Set_AndroidKeyStore_OneStore")]
static void Set_AndroidKeyStore_OneStore()
{
PlayerSettings.Android.useCustomKeystore = true;
PlayerSettings.Android.keystoreName = "AndroidData/OnestoreLWS.keystore";
PlayerSettings.Android.keyaliasName = "fgb";
PlayerSettings.keystorePass = PlayerSettings.keyaliasPass = "fgb123!!";
}
static void Common(BuildTargetGroup _btg, BuildTarget _bt, bool _onestore = false)
{
PlayerSettings.applicationIdentifier = "com.nerdnavis.himminji";
EditorUserBuildSettings.SwitchActiveBuildTarget(_btg, _bt);
if (_bt == BuildTarget.Android)
{
PlayerSettings.Android.useAPKExpansionFiles = false;
File.WriteAllText("Assets/Resources/VersionCode.txt", PlayerSettings.Android.bundleVersionCode.ToString());
PlayerSettings.Android.targetArchitectures = AndroidArchitecture.ARMv7 | AndroidArchitecture.ARM64;
if (_onestore) Set_AndroidKeyStore_OneStore();
else Set_AndroidKeyStore();
}
else
{
File.WriteAllText("Assets/Resources/VersionCode.txt", PlayerSettings.iOS.buildNumber);
PlayerSettings.iOS.appleDeveloperTeamID = "788PYWMPC6";
PlayerSettings.iOS.appleEnableAutomaticSigning = true;
PlayerSettings.iOS.sdkVersion = iOSSdkVersion.DeviceSDK;
}
EditorUserBuildSettings.SwitchActiveBuildTargetAsync(_btg, _bt);
}
static void Show_BuildFolder(BuildTarget _bt)
{
if (_bt == BuildTarget.Android) System.Diagnostics.Process.Start("AndroidData");
else System.Diagnostics.Process.Start("IOSData");
}
static void BuildStart(string path, BuildTarget _bt)
{
BuildPipeline.BuildPlayer(EditorBuildSettings.scenes, path, _bt, BuildOptions.None);
Show_BuildFolder(_bt);
}
[MenuItem("AutoBuild/Build APK with KeyStore")]
static void Build_APK_with_KeyStore()
{
Common(BuildTargetGroup.Android, BuildTarget.Android);
var curVer = PlayerSettings.bundleVersion;
PlayerSettings.bundleVersion = "9.9.9";
EditorUserBuildSettings.buildAppBundle = false;
BuildStart("AndroidData/TestButler_" + Application.version + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".apk", BuildTarget.Android);
PlayerSettings.bundleVersion = curVer;
}
[MenuItem("AutoBuild/Build Live AAB")]
static void Build_AAB()
{
++PlayerSettings.Android.bundleVersionCode;
Common(BuildTargetGroup.Android, BuildTarget.Android);
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, "FGB_LIVE");
EditorUserBuildSettings.buildAppBundle = true;
if (EditorUtility.DisplayDialog("현재 버전", PlayerSettings.Android.bundleVersionCode.ToString(), "OK", "Not Build"))
{
//AppBundlePublisher.Build();
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, "");
Show_BuildFolder(BuildTarget.Android);
}
}
[MenuItem("AutoBuild/Build Test AAB")]
static void Build_Test_AAB()
{
++PlayerSettings.Android.bundleVersionCode;
Common(BuildTargetGroup.Android, BuildTarget.Android);
EditorUserBuildSettings.buildAppBundle = true;
if (EditorUtility.DisplayDialog("현재 버전", PlayerSettings.Android.bundleVersionCode.ToString(), "OK", "Not Build"))
{
//AppBundlePublisher.Build();
Show_BuildFolder(BuildTarget.Android);
}
}
[MenuItem("AutoBuild/Build_APK_with_OneStore")]
static void Build_APK_with_OneStore()
{
Common(BuildTargetGroup.Android, BuildTarget.Android, true);
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, new string[] { "FGB_OneStore", "FGB_LIVE" });
EditorUserBuildSettings.buildAppBundle = false;
BuildStart("AndroidData/OneStoreLWS_" + Application.version + "_" + PlayerSettings.Android.bundleVersionCode + ".apk", BuildTarget.Android);
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, "");
}
[MenuItem("AutoBuild/Build_APK_with_OneStore Test")]
static void Build_APK_with_OneStore_Test()
{
Common(BuildTargetGroup.Android, BuildTarget.Android, true);
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, "FGB_OneStore");
EditorUserBuildSettings.buildAppBundle = false;
BuildStart("AndroidData/OneStoreLWSTest_" + Application.version + "_" + PlayerSettings.Android.bundleVersionCode + ".apk", BuildTarget.Android);
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, "");
}
#if UNITY_IOS
[MenuItem("AutoBuild/IOS Xcode")]
static void Build_IOS_Xcode()
{
PlayerSettings.iOS.buildNumber = (int.Parse(PlayerSettings.iOS.buildNumber) + 1).ToString();
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.iOS, "FGB_LIVE");
Common(BuildTargetGroup.iOS, BuildTarget.iOS);
BuildStart("IOSData/IOSXcodeLive_" + Application.version + "_" + PlayerSettings.iOS.buildNumber, BuildTarget.iOS);
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.iOS, "");
}
[MenuItem("AutoBuild/IOS Xcode Test")]
static void Build_IOS_Xcode_Test()
{
PlayerSettings.iOS.buildNumber = (int.Parse(PlayerSettings.iOS.buildNumber) + 1).ToString();
Common(BuildTargetGroup.iOS, BuildTarget.iOS);
BuildStart("IOSData/IOSSRDebugOn_" + Application.version + "_" + PlayerSettings.iOS.buildNumber, BuildTarget.iOS);
}
[MenuItem("AutoBuild/Test IOS Simulator")]
static void Build_Test_IOS_Simulator()
{
Common(BuildTargetGroup.iOS, BuildTarget.iOS);
PlayerSettings.iOS.sdkVersion = iOSSdkVersion.SimulatorSDK;
BuildStart("IOSData/IOSTestBuild_" + Application.version + "_" + PlayerSettings.iOS.buildNumber, BuildTarget.iOS);
}
[PostProcessBuild(1)]
static void OnPostProcessBuild(BuildTarget buildTarget, string path)
{
Debug.Log(buildTarget + " " + path);
if (buildTarget == BuildTarget.iOS)
{
//#if UNITY_IOS
var plistPath = Path.Combine(path, "Info.plist");
var plist = new PlistDocument();
plist.ReadFromFile(plistPath);
plist.root.SetBoolean("GADIsAdManagerApp", true);
plist.root.SetBoolean("FirebaseMessagingAutoInitEnabled", false);
plist.root.SetBoolean("FirebaseAppStoreReceiptURLCheckEnabled", false);
plist.root.SetBoolean("ITSAppUsesNonExemptEncryption", false);
// Add string setting
// SKAdNetwork IDs integration(for iOS14+)
var arraySKAdNetworkItems = plist.root.CreateArray("SKAdNetworkItems");
// for FAN
// https://developers.facebook.com/docs/audience-network/guides/SKAdNetwork
var dictSKAdNetworkIdentifier_FAN_1 = arraySKAdNetworkItems.AddDict();
dictSKAdNetworkIdentifier_FAN_1.SetString("SKAdNetworkIdentifier", "v9wttpbfk9.skadnetwork"); // FAN 1
var dictSKAdNetworkIdentifier_FAN_2 = arraySKAdNetworkItems.AddDict();
dictSKAdNetworkIdentifier_FAN_2.SetString("SKAdNetworkIdentifier", "n38lu8286q.skadnetwork"); // FAN 2
plist.root.SetString("FacebookAppID", FacebookSettings.AppId);
plist.root.SetString("FacebookDisplayName", Application.productName);
// Add URL Scheme
var array = plist.root.CreateArray("CFBundleURLTypes");
var urlDict = array.AddDict();
urlDict.SetString("CFBundleURLName", Application.identifier);
var urlInnerArray = urlDict.CreateArray("CFBundleURLSchemes");
urlInnerArray.AddString("fb" + FacebookSettings.AppId);
var googleiosurlscheme = urlDict.CreateArray("CFBundleURLSchemes");
googleiosurlscheme.AddString("com.googleusercontent.apps.107333004578-n74n1eaap2bgtg2od6ia1vk4ls5c139j");
var fbArray = plist.root.CreateArray("LSApplicationQueriesSchemes");
fbArray.AddString("fbapi");
fbArray.AddString("fb-messenger-api");
fbArray.AddString("fbauth2");
fbArray.AddString("fbshareextension");
plist.WriteToFile(plistPath);
// get project info
string pbxPath = PBXProject.GetPBXProjectPath(path);
var proj = new PBXProject();
proj.ReadFromFile(pbxPath);
var guid = proj.GetUnityMainTargetGuid();
var unitytest = proj.TargetGuidByName(PBXProject.GetUnityTestTargetName());
var unityframework = proj.GetUnityFrameworkTargetGuid();
proj.SetBuildProperty(guid, "ENABLE_BITCODE", "NO");
proj.SetBuildProperty(unitytest, "ENABLE_BITCODE", "NO");
proj.SetBuildProperty(unityframework, "ENABLE_BITCODE", "NO");
// Add Push framework
proj.AddFrameworkToProject(guid, "UserNotifications.framework", false);
proj.WriteToFile(pbxPath);
// get entitlements path
string[] idArray = Application.identifier.Split('.');
var entitlementsPath = $"Unity-iPhone/{idArray[idArray.Length - 1]}.entitlements";
// create capabilities manager
var capManager = new ProjectCapabilityManager(pbxPath, entitlementsPath, null, guid);
// Add necessary capabilities
capManager.AddPushNotifications(true);
capManager.AddSignInWithApple();
capManager.AddBackgroundModes(BackgroundModesOptions.RemoteNotifications);
// Write to file
capManager.WriteToFile();
}
//#endif
Debug.Log("OnPostProcessBuild end");
}
#endif
}