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/Test_himminji_" + 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 }