347 lines
15 KiB
C#
347 lines
15 KiB
C#
using System.IO;
|
|
using UnityEditor;
|
|
using UnityEditor.Callbacks;
|
|
#if UNITY_ANDROID
|
|
#elif UNITY_IOS
|
|
using UnityEditor.iOS.Xcode;
|
|
using UnityEditor.iOS.Xcode.Extensions;
|
|
using Facebook.Unity.Settings;
|
|
#endif
|
|
using UnityEngine;
|
|
|
|
public static class AutoBuild
|
|
{
|
|
static void Common(BuildTargetGroup _btg, BuildTarget _bt)
|
|
{
|
|
PlayerSettings.applicationIdentifier = "com.fgb.randomgfgostop";
|
|
EditorUserBuildSettings.SwitchActiveBuildTarget(_btg, _bt);
|
|
|
|
if (_bt == BuildTarget.Android)
|
|
{
|
|
PlayerSettings.Android.splitApplicationBinary = false;
|
|
File.WriteAllText("Assets/Resources/VersionCode.txt", PlayerSettings.Android.bundleVersionCode.ToString());
|
|
PlayerSettings.Android.targetArchitectures = AndroidArchitecture.ARMv7 | AndroidArchitecture.ARM64;
|
|
}
|
|
else
|
|
{
|
|
File.WriteAllText("Assets/Resources/VersionCode.txt", PlayerSettings.iOS.buildNumber);
|
|
PlayerSettings.iOS.appleDeveloperTeamID = "788PYWMPC6"; // 필굿밴디츠
|
|
//PlayerSettings.iOS.appleDeveloperTeamID = "A9997B8HR5"; // 나인탭
|
|
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);
|
|
}
|
|
#if UNITY_ANDROID
|
|
[MenuItem("AutoBuild/EmptySymbol")]
|
|
static void EmptySymbol()
|
|
{
|
|
PlayerSettings.SetScriptingDefineSymbols(UnityEditor.Build.NamedBuildTarget.Android, "");
|
|
}
|
|
[MenuItem("AutoBuild/Set_AndroidKeyStore")]
|
|
static void Set_AndroidKeyStore()
|
|
{
|
|
PlayerSettings.Android.useCustomKeystore = true;
|
|
PlayerSettings.Android.keystoreName = "AndroidData/RandomGFGoStop.keystore";
|
|
PlayerSettings.Android.keyaliasName = "fgb";
|
|
PlayerSettings.Android.keystorePass = PlayerSettings.Android.keyaliasPass = "fgb123!!";
|
|
}
|
|
[MenuItem("AutoBuild/Set_OneStoreKeyStore")]
|
|
static void Set_OneStoreKeyStore()
|
|
{
|
|
PlayerSettings.Android.useCustomKeystore = true;
|
|
PlayerSettings.Android.keystoreName = "AndroidData/RandomGFGoStop_One.keystore";
|
|
PlayerSettings.Android.keyaliasName = "fgb";
|
|
PlayerSettings.Android.keystorePass = PlayerSettings.Android.keyaliasPass = "fgb123!!";
|
|
}
|
|
[MenuItem("AutoBuild/Build APK with KeyStore")]
|
|
static void Build_APK_with_KeyStore()
|
|
{
|
|
Common(BuildTargetGroup.Android, BuildTarget.Android);
|
|
Set_AndroidKeyStore();
|
|
//PlayerSettings.Android.minSdkVersion = AndroidSdkVersions.AndroidApiLevel23;
|
|
|
|
var curVer = PlayerSettings.bundleVersion;
|
|
PlayerSettings.bundleVersion = "9.9.9";
|
|
EditorUserBuildSettings.buildAppBundle = false;
|
|
BuildStart("AndroidData/GoStop_Test_" + Application.version + "_(" + PlayerSettings.Android.bundleVersionCode + ").apk", BuildTarget.Android);
|
|
PlayerSettings.bundleVersion = curVer;
|
|
}
|
|
[MenuItem("AutoBuild/Build APK with KeyStore (OneStore)")]
|
|
static void Build_APK_OneStore()
|
|
{
|
|
Common(BuildTargetGroup.Android, BuildTarget.Android);
|
|
Set_OneStoreKeyStore();
|
|
//PlayerSettings.Android.minSdkVersion = AndroidSdkVersions.AndroidApiLevel23;
|
|
|
|
PlayerSettings.SetScriptingDefineSymbols(UnityEditor.Build.NamedBuildTarget.Android, "OneStore");
|
|
EditorUserBuildSettings.buildAppBundle = false;
|
|
BuildStart("AndroidData/GoStop_Test_" + Application.version + "_(" + PlayerSettings.Android.bundleVersionCode + ").apk", BuildTarget.Android);
|
|
EmptySymbol();
|
|
}
|
|
[MenuItem("AutoBuild/Build Live AAB")]
|
|
static void Build_AAB()
|
|
{
|
|
++PlayerSettings.Android.bundleVersionCode;
|
|
Common(BuildTargetGroup.Android, BuildTarget.Android);
|
|
Set_AndroidKeyStore();
|
|
|
|
PlayerSettings.SetScriptingDefineSymbols(UnityEditor.Build.NamedBuildTarget.Android, "");
|
|
EditorUserBuildSettings.buildAppBundle = true;
|
|
BuildStart("AndroidData/GoStop_Live_" + Application.version + "_(" + PlayerSettings.Android.bundleVersionCode + ").aab", BuildTarget.Android);
|
|
EmptySymbol();
|
|
//if (EditorUtility.DisplayDialog("라이브 빌드", "현재 버전 : " + PlayerSettings.bundleVersion + " " + PlayerSettings.Android.bundleVersionCode.ToString(), "OK", "Not Build"))
|
|
// AppBundlePublisher.Build();
|
|
}
|
|
[MenuItem("AutoBuild/Build Live AAB (OneStore)")]
|
|
static void Build_AAB_OneStore()
|
|
{
|
|
++PlayerSettings.Android.bundleVersionCode;
|
|
Common(BuildTargetGroup.Android, BuildTarget.Android);
|
|
Set_OneStoreKeyStore();
|
|
|
|
PlayerSettings.SetScriptingDefineSymbols(UnityEditor.Build.NamedBuildTarget.Android, "");
|
|
EditorUserBuildSettings.buildAppBundle = true;
|
|
BuildStart("AndroidData/GoStop_Live_OneStore" + Application.version + "_(" + PlayerSettings.Android.bundleVersionCode + ").aab", BuildTarget.Android);
|
|
EmptySymbol();
|
|
//if (EditorUtility.DisplayDialog("라이브 빌드", "현재 버전 : " + PlayerSettings.bundleVersion + " " + PlayerSettings.Android.bundleVersionCode.ToString(), "OK", "Not Build"))
|
|
// AppBundlePublisher.Build();
|
|
}
|
|
#endif
|
|
#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);
|
|
}
|
|
#endif
|
|
|
|
[PostProcessBuild(1)]
|
|
static void OnPostProcessBuild(BuildTarget buildTarget, string path)
|
|
{
|
|
if (buildTarget == BuildTarget.iOS)
|
|
{
|
|
#if UNITY_IOS
|
|
Debug.Log("OnPostProcessBuild : " + path);
|
|
|
|
var plistPath = Path.Combine(path, "Info.plist");
|
|
var plist = new PlistDocument();
|
|
plist.ReadFromFile(plistPath);
|
|
|
|
PlistElementDict allowsDict = plist.root.CreateDict("NSAppTransportSecurity");
|
|
allowsDict.SetBoolean("NSAllowsArbitraryLoads", true);
|
|
PlistElementDict exceptionsDict = allowsDict.CreateDict("NSExceptionDomains");
|
|
PlistElementDict domainDict = exceptionsDict.CreateDict("amazonaws.com");
|
|
domainDict.SetBoolean("NSExceptionAllowsInsecureHTTPLoads", true);
|
|
domainDict.SetBoolean("NSIncludesSubdomains", true);
|
|
domainDict = exceptionsDict.CreateDict("inonotebook.iptime.org");
|
|
domainDict.SetBoolean("NSExceptionAllowsInsecureHTTPLoads", true);
|
|
domainDict.SetBoolean("NSIncludesSubdomains", true);
|
|
|
|
plist.root.SetBoolean("GADIsAdManagerApp", true);
|
|
plist.root.SetBoolean("FirebaseMessagingAutoInitEnabled", false);
|
|
plist.root.SetBoolean("FirebaseAppStoreReceiptURLCheckEnabled", false);
|
|
plist.root.SetBoolean("ITSAppUsesNonExemptEncryption", false);
|
|
plist.root.SetString("NSAdvertisingAttributionReportEndpoint", "https://appsflyer-skadnetwork.com/");
|
|
|
|
// Add string setting
|
|
// SKAdNetwork IDs integration(for iOS14+)
|
|
var arraySKAdNetworkItems = plist.root.CreateArray("SKAdNetworkItems");
|
|
foreach (string id in SKAdNetworkIdentifiers)
|
|
{
|
|
var dict = arraySKAdNetworkItems.AddDict();
|
|
dict.SetString("SKAdNetworkIdentifier", id);
|
|
}
|
|
|
|
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.AddBuildProperty(guid, "OTHER_LDFLAGS", "-lc++");
|
|
proj.SetBuildProperty(guid, "ENABLE_BITCODE", "NO");
|
|
proj.SetBuildProperty(guid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "YES");
|
|
proj.SetBuildProperty(unitytest, "ENABLE_BITCODE", "NO");
|
|
proj.SetBuildProperty(unityframework, "ENABLE_BITCODE", "NO");
|
|
proj.SetBuildProperty(unityframework, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "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();
|
|
|
|
Debug.Log("OnPostProcessBuild end");
|
|
#endif
|
|
}
|
|
}
|
|
[PostProcessBuild(45)]//must be between 40 and 50 to ensure that it's not overriden by Podfile generation (40) and that it's added before "pod install" (50)
|
|
public static void FixPodFile(BuildTarget buildTarget, string buildPath)
|
|
{
|
|
if (buildTarget != BuildTarget.iOS)
|
|
{
|
|
return;
|
|
}
|
|
Debug.Log("FixPodFile");
|
|
using (StreamWriter sw = File.AppendText(buildPath + "/Podfile"))
|
|
{
|
|
sw.WriteLine("post_install do |installer|");
|
|
sw.WriteLine("installer.generated_projects.each do |project|");
|
|
sw.WriteLine("project.targets.each do |target|");
|
|
sw.WriteLine("target.build_configurations.each do |config|");
|
|
sw.WriteLine("config.build_settings[\"DEVELOPMENT_TEAM\"] = \"788PYWMPC6\"");
|
|
sw.WriteLine("end\nend\nend\nend");
|
|
}
|
|
|
|
//string podfilePath = Path.Combine(buildPath, "Podfile");
|
|
//if (File.Exists(podfilePath))
|
|
//{
|
|
// string[] lines = File.ReadAllLines(podfilePath);
|
|
// for (int i = 0; i < lines.Length; i++)
|
|
// {
|
|
// if (lines[i].Contains("Firebase/Auth"))
|
|
// lines[i] = " pod 'Firebase/Auth', '10.28.1'";
|
|
// else if (lines[i].Contains("GoogleSignIn"))
|
|
// lines[i] = " pod 'GoogleSignIn', '5.0.0'";
|
|
// else if (lines[i].Contains("GTMSessionFetcher/Core'"))
|
|
// lines[i] = " pod 'GTMSessionFetcher/Core'', '2.1'";
|
|
// }
|
|
// File.WriteAllLines(podfilePath, lines);
|
|
//}
|
|
}
|
|
|
|
private static readonly string[] SKAdNetworkIdentifiers = new string[]
|
|
{
|
|
"v9wttpbfk9.skadnetwork",
|
|
"n38lu8286q.skadnetwork",
|
|
"su67r6k2v3.skadnetwork",
|
|
"9t245vhmpl.skadnetwork",
|
|
"m8dbw4sv7c.skadnetwork",
|
|
"tl55sbb4fm.skadnetwork",
|
|
"wzmmz9fp6w.skadnetwork",
|
|
"4fzdc2evr5.skadnetwork",
|
|
"294l99pt4k.skadnetwork",
|
|
"4w7y6s5ca2.skadnetwork",
|
|
"7ug5zh24hu.skadnetwork",
|
|
"5l3tpt7t6e.skadnetwork",
|
|
"t38b2kh725.skadnetwork",
|
|
"c6k4g5qg8m.skadnetwork",
|
|
"wg4vff78zm.skadnetwork",
|
|
"v72qych5uu.skadnetwork",
|
|
"mp6xlyr22a.skadnetwork",
|
|
"cstr6suwn9.skadnetwork",
|
|
"4pfyvq9l8r.skadnetwork",
|
|
"w9q455wk68.skadnetwork",
|
|
"44jx6755aq.skadnetwork",
|
|
"k6y4y55b64.skadnetwork",
|
|
"8s468mfl3y.skadnetwork",
|
|
"mlmmfzh3r3.skadnetwork",
|
|
"4dzt52r2t5.skadnetwork",
|
|
"ydx93a7ass.skadnetwork",
|
|
"3qy4746246.skadnetwork",
|
|
"prcb7njmu6.skadnetwork",
|
|
"v79kvwwj4g.skadnetwork",
|
|
"glqzh8vgby.skadnetwork",
|
|
"s39g8k73mm.skadnetwork",
|
|
"238da6jt44.skadnetwork",
|
|
"424m5254lk.skadnetwork",
|
|
"5a6flpkh64.skadnetwork",
|
|
"hs6bdukanm.skadnetwork",
|
|
"x44k69ngh6.skadnetwork",
|
|
"a8cz6cu7e5.skadnetwork",
|
|
"488r3q3dtq.skadnetwork",
|
|
"32z4fx6l9h.skadnetwork",
|
|
"22mmun2rn5.skadnetwork",
|
|
"3rd42ekr43.skadnetwork",
|
|
"6yxyv74ff7.skadnetwork",
|
|
"ppxm28t8ap.skadnetwork",
|
|
"lr83yxwka7.skadnetwork",
|
|
"578prtvx9j.skadnetwork",
|
|
"a2p9lx4jpn.skadnetwork",
|
|
"av6w8kgt66.skadnetwork",
|
|
"4468km3ulz.skadnetwork",
|
|
"9rd848q2bz.skadnetwork",
|
|
"5lm9lj6jb7.skadnetwork",
|
|
"f7s53z58qe.skadnetwork",
|
|
"k674qkevps.skadnetwork",
|
|
"kbd757ywx3.skadnetwork",
|
|
"yclnxrl5pm.skadnetwork",
|
|
"zq492l623r.skadnetwork",
|
|
"zmvfpc5aq8.skadnetwork",
|
|
"f73kdq92p3.skadnetwork",
|
|
"f38h382jlk.skadnetwork",
|
|
"2u9pt9hc89.skadnetwork",
|
|
"5tjdwbrq8w.skadnetwork",
|
|
"3sh42y64q3.skadnetwork",
|
|
"9nlqeag3gk.skadnetwork"
|
|
};
|
|
} |