diff --git a/Editor/PostBuildProcess.meta b/Editor/GuruBuildSuit.meta
similarity index 77%
rename from Editor/PostBuildProcess.meta
rename to Editor/GuruBuildSuit.meta
index c8d6987..9b5b566 100644
--- a/Editor/PostBuildProcess.meta
+++ b/Editor/GuruBuildSuit.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: c2bda7db652148e7a73fd2179e22be09
+guid: 70312596ce564426aa363479bc5fd1f9
 folderAsset: yes
 DefaultImporter:
   externalObjects: {}
diff --git a/Editor/PostBuildProcess/AND_POST_PROGUARD.meta b/Editor/GuruBuildSuit/AND_POST_PROGUARD.meta
similarity index 100%
rename from Editor/PostBuildProcess/AND_POST_PROGUARD.meta
rename to Editor/GuruBuildSuit/AND_POST_PROGUARD.meta
diff --git a/Editor/PostBuildProcess/AND_POST_PROGUARD/UserProguardHelper.cs b/Editor/GuruBuildSuit/AND_POST_PROGUARD/UserProguardHelper.cs
similarity index 100%
rename from Editor/PostBuildProcess/AND_POST_PROGUARD/UserProguardHelper.cs
rename to Editor/GuruBuildSuit/AND_POST_PROGUARD/UserProguardHelper.cs
diff --git a/Editor/PostBuildProcess/AND_POST_PROGUARD/UserProguardHelper.cs.meta b/Editor/GuruBuildSuit/AND_POST_PROGUARD/UserProguardHelper.cs.meta
similarity index 100%
rename from Editor/PostBuildProcess/AND_POST_PROGUARD/UserProguardHelper.cs.meta
rename to Editor/GuruBuildSuit/AND_POST_PROGUARD/UserProguardHelper.cs.meta
diff --git a/Editor/GuruBuildSuit/IOS_POST_AD.meta b/Editor/GuruBuildSuit/IOS_POST_AD.meta
new file mode 100644
index 0000000..5f34755
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_AD.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b460e9873d8bf445da1764952f4f966c
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Editor/GuruBuildSuit/IOS_POST_AD/IOSPostBuild_SKAdNetwork.cs b/Editor/GuruBuildSuit/IOS_POST_AD/IOSPostBuild_SKAdNetwork.cs
new file mode 100644
index 0000000..d27c34f
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_AD/IOSPostBuild_SKAdNetwork.cs
@@ -0,0 +1,74 @@
+#if UNITY_IOS
+namespace Guru.Editor
+{
+	using System.Collections.Generic;
+	using System.IO;
+	using UnityEditor;
+	using UnityEditor.Callbacks;
+	using UnityEditor.iOS.Xcode;
+	using UnityEngine;
+	
+	/// 
+	/// SKAdNetwork 注入逻辑
+	/// 
+	public static class IOSPostBuild_SKAdNetwork
+	{
+		private static List NETWORK_IDENTIFIER_ARRAY = new List();
+		public static readonly string SKADNetworkIdentifier = "SKAdNetworkIdentifier";
+		
+		private static readonly char DIR_CHAR = Path.DirectorySeparatorChar;
+		public static readonly string OS_PLATFORM_LOCATION = $"Assets/Guru/GuruBuildTool/Editor/IOS_POST_AD/";
+		
+		[PostProcessBuild(10)]
+		private static void OnPostProcessBuild(BuildTarget buildTarget, string path)
+		{
+			if (buildTarget != BuildTarget.iOS)
+			{
+				return;
+			}
+			
+			var plistPath = Path.Combine(path, "Info.plist");
+			var plist = new PlistDocument();
+			plist.ReadFromFile(plistPath);
+			
+			//设置SKAdNetworkItems
+			ReadSKADNetworkPlistFile();
+			var plistElementArray = plist.root.CreateArray("SKAdNetworkItems");
+			AddPlatformADNetworkIdentifier(plistElementArray, NETWORK_IDENTIFIER_ARRAY);
+			plist.WriteToFile(plistPath);
+		}
+		
+		public static void ReadSKADNetworkPlistFile()
+		{
+			string plistPath = $"{Application.dataPath}/../{OS_PLATFORM_LOCATION}/SKADNetwork.plist";
+			var plist = new PlistDocument();
+			plist.ReadFromFile(plistPath);
+			var skADNetworksArr = plist.root["SKAdNetworkItems"].AsArray();
+			if (skADNetworksArr != null)
+			{
+				foreach (var plistElement in skADNetworksArr.values)
+				{
+					var adNetworkValue = plistElement.AsDict()[SKADNetworkIdentifier].AsString();
+					if(!NETWORK_IDENTIFIER_ARRAY.Contains(adNetworkValue))
+						NETWORK_IDENTIFIER_ARRAY.Add(adNetworkValue);
+				}
+			}
+		}
+		
+		private static void AddPlatformADNetworkIdentifier(PlistElementArray plistElementArray, List arrays)
+		{
+			foreach (var value in arrays)
+			{
+				PlistArrayAddDict(plistElementArray, value);
+			}
+		}
+		
+		private static void PlistArrayAddDict(PlistElementArray plistElementArray, string value)
+		{
+			plistElementArray.AddDict().SetString(SKADNetworkIdentifier, value);
+		}
+	}
+}
+
+
+#endif
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/IOS_POST_AD/IOSPostBuild_SKAdNetwork.cs.meta b/Editor/GuruBuildSuit/IOS_POST_AD/IOSPostBuild_SKAdNetwork.cs.meta
new file mode 100644
index 0000000..5860789
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_AD/IOSPostBuild_SKAdNetwork.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: be1ddc59e4ac2416f8174a5611f0c98a
+timeCreated: 1632375624
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/IOS_POST_AD/SKADNetwork.plist b/Editor/GuruBuildSuit/IOS_POST_AD/SKADNetwork.plist
new file mode 100644
index 0000000..50309fe
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_AD/SKADNetwork.plist
@@ -0,0 +1,925 @@
+
+
+
+    
+        SKAdNetworkItems
+        
+            
+                SKAdNetworkIdentifier
+                cstr6suwn9.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                4fzdc2evr5.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                4pfyvq9l8r.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                2fnua5tdw4.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                ydx93a7ass.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                5a6flpkh64.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                p78axxw29g.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                v72qych5uu.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                ludvb6z3bs.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                cp8zw746q7.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                3sh42y64q3.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                c6k4g5qg8m.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                s39g8k73mm.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                3qy4746246.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                f38h382jlk.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                hs6bdukanm.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                v4nxqhlyqp.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                wzmmz9fp6w.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                yclnxrl5pm.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                t38b2kh725.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                7ug5zh24hu.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                gta9lk7p23.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                vutu7akeur.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                y5ghdn5j9k.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                n6fk4nfna4.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                v9wttpbfk9.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                n38lu8286q.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                47vhws6wlr.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                kbd757ywx3.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                9t245vhmpl.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                eh6m2bh4zr.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                a2p9lx4jpn.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                22mmun2rn5.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                4468km3ulz.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                2u9pt9hc89.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                8s468mfl3y.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                klf5c3l5u5.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                ppxm28t8ap.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                ecpz2srf59.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                uw77j35x4d.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                pwa73g5rt2.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                mlmmfzh3r3.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                578prtvx9j.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                4dzt52r2t5.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                e5fvkxwrpn.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                8c4e2ghe7u.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                zq492l623r.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                3rd42ekr43.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                3qcr597p9d.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                238da6jt44.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                24t9a8vw3c.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                24zw6aqk47.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                252b5q8x7y.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                275upjj5gd.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                294l99pt4k.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                32z4fx6l9h.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                3l6bd9hu43.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                424m5254lk.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                44jx6755aq.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                44n7hlldy6.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                488r3q3dtq.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                4mn522wn87.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                4w7y6s5ca2.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                523jb4fst2.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                52fl2v3hgk.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                54nzkqm89y.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                5l3tpt7t6e.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                5lm9lj6jb7.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                5tjdwbrq8w.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                6964rsfnh4.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                6g9af3uyq4.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                6p4ks3rnbw.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                6v7lgmsu45.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                6xzpu9s2p8.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                737z793b9f.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                74b6s63p6l.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                79pbpufp6p.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                7fmhfwg9en.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                7rz58n8ntl.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                84993kbrcf.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                89z7zv988g.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                8m87ys6875.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                8r8llnkz5a.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                97r2b46745.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                9b89h5y424.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                9nlqeag3gk.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                9rd848q2bz.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                9vvzujtq5s.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                9yg77x724h.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                a7xqa6mtl2.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                a8cz6cu7e5.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                av6w8kgt66.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                b9bk5wbcq9.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                bxvub5ada5.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                c3frkrj4fj.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                cg4yq2srnc.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                cj5566h2ga.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                cs644xg564.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                dbu4b84rxf.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                dkc879ngq3.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                dzg6xy7pwj.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                ejvt5qm6ak.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                f73kdq92p3.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                f7s53z58qe.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                feyaarzu9v.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                g28c52eehv.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                g2y4y55b64.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                ggvn48r87g.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                glqzh8vgby.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                gta8lk7p23.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                hb56zgv37p.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                hdw39hrw9y.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                k674qkevps.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                kbmxgpxpgc.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                krvm3zuq6h.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                lr83yxwka7.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                m297p6643m.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                m5mvw97r93.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                m8dbw4sv7c.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                mls7yz5dvl.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                mp6xlyr22a.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                mtkv5xtk9e.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                n66cz3y3bx.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                n9x2a789qt.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                nzq8sh4pbs.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                prcb7njmu6.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                pwdxu55a5a.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                qqp299437r.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                r45fhb6rf7.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                rvh3l7un93.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                rx5hdcabgc.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                s69wq72ugq.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                su67r6k2v3.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                tl55sbb4fm.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                u679fj5vs4.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                v79kvwwj4g.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                vcra2ehyfk.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                w9q455wk68.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                wg4vff78zm.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                x44k69ngh6.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                x5l83yy675.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                x8jxxk4ff5.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                x8uqf25wch.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                xy9t38ct57.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                y45688jllp.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                zmvfpc5aq8.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                t6d3zquu66.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                9g2aggbj52.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                h65wbv5k3f.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                gvn48r87g.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                bvpn9ufa9b.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                hjevpa356n.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                6yxyv74ff7.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                mqn7fxpca7.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                7953jerfzd.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                qu637u8glc.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                g6gcrrvk4p.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                nu4557a4je.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                cj5566h2ga.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                gvmwg8q7h5.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                pu4na253f3.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                yrqqpx2mcb.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                z4gj7hsk7h.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                z959bm4gru.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                bd757ywx3.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                33r6p7g8nc.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                g69uk9uh2b.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                633vhxswh4.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                tmhh9296z4.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                zh3b7bxvad.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                xmn954pzmp.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                79w64w269u.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                d7g9azk84q.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                866k9ut3g3.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                2q884k2j68.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                gfat3222tu.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                pd25vrrwzn.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                y755zyxw56.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                qlbq5gtkt8.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                67369282zy.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                899vrgt9g8.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                mj797d8u6f.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                88k8774x49.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                t3b3f7n3x8.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                c7g47wypnu.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                z5b3gh5ugf.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                dd3a75yxkv.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                h5jmj969g5.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                dr774724x4.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                t7ky8fmwkd.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                fz2k2k5tej.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                w28pnjg2k4.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                2rq3zucswp.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                vc83br9sjg.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                eqhxz8m8av.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                7k3cvf297u.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                7tnzynbdc7.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                l6nv3x923s.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                h8vml93bkz.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                uzqba5354d.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                8qiegk9qfv.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                xx9sdjej2w.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                au67k4efj4.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                dmv22haz9p.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                7fbxrn65az.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                b55w3d8y8z.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                v7896pgt74.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                5ghnmfs3dh.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                627r9wr2y5.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                sczv5946wb.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                8w3np9l82g.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                nrt9jy4kw9.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                dn942472g5.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                cad8qz2s3j.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                r26jy69rpl.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                jb7bn6koa5.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                fkak3gfpt6.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                2tdux39lx8.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                3cgn6rq224.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                nfqy3847ph.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                dticjx1a9i.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                9wsyqb3ku7.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                x5854y7y24.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                6qx585k4p6.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                l93v5h6a4m.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                axh5283zss.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                5mv394q32t.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                ln5gz23vtd.skadnetwork
+            
+            
+                SKAdNetworkIdentifier
+                x2jnk7ly8j.skadnetwork
+            
+        
+    
+
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/IOS_POST_AD/SKADNetwork.plist.meta b/Editor/GuruBuildSuit/IOS_POST_AD/SKADNetwork.plist.meta
new file mode 100644
index 0000000..71f52a2
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_AD/SKADNetwork.plist.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e15412105e424ee0934897a153640a34
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Editor/GuruBuildSuit/IOS_POST_FIREBASE.meta b/Editor/GuruBuildSuit/IOS_POST_FIREBASE.meta
new file mode 100644
index 0000000..110f497
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_FIREBASE.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 815571d7e09647a8b91951918d0feb7e
+timeCreated: 1699597324
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/IOS_POST_FIREBASE/IOSPostBuild.Firebase.DebugView.cs b/Editor/GuruBuildSuit/IOS_POST_FIREBASE/IOSPostBuild.Firebase.DebugView.cs
new file mode 100644
index 0000000..85ed4ab
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_FIREBASE/IOSPostBuild.Firebase.DebugView.cs
@@ -0,0 +1,110 @@
+#if UNITY_IOS
+
+namespace Guru.Editor
+{
+    using System.Collections.Generic;
+    using UnityEditor;
+    using UnityEditor.Callbacks;
+    using UnityEditor.iOS.Xcode;
+    using UnityEngine;
+    using System.IO;
+    using Enumerable = System.Linq.Enumerable;
+
+    /// 
+    /// Fireabse DebugView 开启参数注入
+    /// 
+    public class IOSPostBuild_FireabseDebugView
+    {
+        public static readonly string Tag = "[POST]";
+        private static readonly string CodeFixMark = "CODE_FIX_BY_GURU";
+        private static readonly string CodeCmdArgsFix = $"\t\t//--------- {CodeFixMark} --------------\n\t\tNSMutableArray *newArguments = [NSMutableArray arrayWithArray:[[NSProcessInfo processInfo] arguments]];\n\t\t[newArguments addObject:@\"-FIRAnalyticsDebugEnabled\"];\n\t\t[newArguments addObject:@\"-FIRDebugEnabled\"];\n\t\t[[NSProcessInfo processInfo] setValue:[newArguments copy] forKey:@\"arguments\"];";
+        private static readonly string CodeDidFinishedLaunch =
+            "(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:";
+
+        /// 
+        /// 需要在外部接口调用参数注入
+        /// 
+        public static bool EnableDebugView = false;  // 默认为False, 需要外部注入
+
+        [PostProcessBuild(1)]
+        public static void PostBuildXcodeArgs(BuildTarget target, string buildPath)
+        {
+            Debug.Log($"{Tag} --- Add Firebase debug args: {EnableDebugView}");
+            
+            if (target != BuildTarget.iOS) return;
+            if (!EnableDebugView) return;
+
+            AddLauncherArgsToSchema(buildPath);
+            InjectLaunchCode(buildPath);
+        }
+        
+        /// 
+        /// 添加启动参数到Scheme
+        /// 
+        /// 
+        private static void AddLauncherArgsToSchema(string buildPath)
+        {
+            string schemePath = buildPath + "/Unity-iPhone.xcodeproj/xcshareddata/xcschemes/Unity-iPhone.xcscheme";
+
+            var xcscheme = new XcScheme();
+            xcscheme.ReadFromFile(schemePath);
+
+            xcscheme.SetMetalValidationOnRun(XcScheme.MetalValidation.Extended);
+            xcscheme.SetFrameCaptureModeOnRun(XcScheme.FrameCaptureMode.Metal);
+            xcscheme.AddArgumentPassedOnLaunch("-FIRDebugEnabled");
+
+            xcscheme.WriteToFile(schemePath);
+        }
+        
+        /// 
+        /// 注入命令行参数
+        /// 
+        /// 
+        private static void InjectLaunchCode(string buildPath)
+        {
+            string path = $"{buildPath}/Classes/UnityAppController.mm";
+
+            if (File.Exists(path))
+            {
+                List lines = Enumerable.ToList(File.ReadAllLines(path));
+                string line = "";
+                int idx = -1;
+                for (int i = 0; i < lines.Count; i++)
+                {
+                    line = lines[i];
+                    if (line.Contains(CodeDidFinishedLaunch))
+                    {
+                        // 找到注入行
+                        idx = i + 1;
+                        if (lines[idx].Contains("{"))
+                        {
+                            idx++;
+                        }
+                        if (lines[idx].Contains(@"::printf(""-> applicationDidFinishLaunching()\n"");"))
+                        {
+                            idx++;
+                        }
+
+                        if (lines[idx].Contains(CodeFixMark) || lines[idx+1].Contains(CodeFixMark))
+                        {
+                            Debug.Log($"{Tag} ---- code has already injected, skip... ");
+                            return;
+                        }
+                        
+                        break;
+                    }
+                }
+                lines.Insert(idx, CodeCmdArgsFix);
+                File.WriteAllLines(path, lines.ToArray());
+                Debug.Log($"{Tag} ---- code has success injected. path:\n{path}");
+            }
+            else
+            {
+                Debug.Log($"{Tag} ---- file not found: {path}, inject failed... ");
+            }
+        }
+
+    }
+}
+
+#endif
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/IOS_POST_FIREBASE/IOSPostBuild.Firebase.DebugView.cs.meta b/Editor/GuruBuildSuit/IOS_POST_FIREBASE/IOSPostBuild.Firebase.DebugView.cs.meta
new file mode 100644
index 0000000..6937a94
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_FIREBASE/IOSPostBuild.Firebase.DebugView.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 7f98aa3ce0d04b2d9f8442a0b288f27e
+timeCreated: 1699597308
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/IOS_POST_IPM.meta b/Editor/GuruBuildSuit/IOS_POST_IPM.meta
new file mode 100644
index 0000000..03754e6
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_IPM.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bf616a5ad654b418281c06863ad401eb
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Editor/GuruBuildSuit/IOS_POST_IPM/IOSPostProcessBuild.IPM.cs b/Editor/GuruBuildSuit/IOS_POST_IPM/IOSPostProcessBuild.IPM.cs
new file mode 100644
index 0000000..4b82ac2
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_IPM/IOSPostProcessBuild.IPM.cs
@@ -0,0 +1,215 @@
+#if UNITY_IOS
+
+namespace Guru.Editor
+{
+	using System.Collections.Generic;
+	using System.IO;
+	using UnityEditor;
+	using UnityEditor.Callbacks;
+	using UnityEditor.iOS.Xcode;
+	using UnityEditor.iOS.Xcode.Extensions;
+	using UnityEngine;
+	
+	public static class IOSPostProcessBuildIPM
+	{
+		public static readonly string DEFAULT_PROJECT_TARGET_NAME = "Unity-iPhone";
+		public static readonly string NOTIFICATION_SERVICE_EXTENSION_TARGET_NAME = "U3D2FCM-iOS";
+		public static readonly string NOTIFICATION_SERVICE_EXTENSION_OBJECTIVEC_FILENAME = "NotificationService";
+		
+		private static readonly char DIR_CHAR = Path.DirectorySeparatorChar;
+		public static readonly string OS_PLATFORM_LOCATION = $"Assets/Guru/GuruBuildTool/Editor/IOS_POST_IPM/";
+		private static readonly string SKADNetworkIdentifier = "SKAdNetworkIdentifier";
+		private static List NETWORK_IDENTIFIER_ARRAY = new List();
+		
+		private enum EntitlementOptions {
+			AppGroups,
+		}
+		
+		private static readonly string[] FRAMEWORKS_MAIN_TO_ADD = {
+		};
+		
+		private static readonly string[] FRAMEWORKS_UNITY_FRAMEWORK_TO_ADD = {
+			"GameKit.framework",
+		};
+		
+		private static readonly string[] FRAMEWORKS_FCM_TO_ADD = {
+			"UserNotifications.framework",
+			"UIKit.framework",
+		};
+
+		[PostProcessBuild(1)]
+		private static void OnPostProcessBuild(BuildTarget buildTarget, string path)
+		{
+			if (buildTarget != BuildTarget.iOS)
+			{
+				return;
+			}
+			
+			var projectPath = PBXProject.GetPBXProjectPath(path);
+			var project = new PBXProject();
+			project.ReadFromString(File.ReadAllText(projectPath));
+			
+			var mainTargetName = GetPBXProjectTargetName(project);
+			var mainTargetGUID = GetPBXProjectTargetGUID(project);
+			var unityFrameworkGUID = GetPBXProjectUnityFrameworkGUID(project);
+			
+			foreach(var framework in FRAMEWORKS_MAIN_TO_ADD) {
+				project.AddFrameworkToProject(mainTargetGUID, framework, false);
+			}
+        
+			foreach(var framework in FRAMEWORKS_UNITY_FRAMEWORK_TO_ADD) {
+				project.AddFrameworkToProject(unityFrameworkGUID, framework, false);
+			}
+			
+			ModifyPlistFile(path);
+			
+			// 关闭Bitode
+			project.SetBuildProperty(mainTargetGUID, "ENABLE_BITCODE", "NO");
+			project.SetBuildProperty(unityFrameworkGUID, "ENABLE_BITCODE", "NO");
+
+			// 添加 UnityFramework 版本号
+			project.SetBuildProperty(unityFrameworkGUID, "CURRENT_PROJECT_VERSION", PlayerSettings.bundleVersion);
+			project.SetBuildProperty(unityFrameworkGUID, "MARKETING_VERSION", PlayerSettings.iOS.buildNumber);
+
+			AddOrUpdateEntitlements(path, project, mainTargetGUID, mainTargetName,
+				new HashSet
+				{
+					EntitlementOptions.AppGroups
+				});
+			
+			// AddNotificationServiceExtension(project ,path); // <--- 无需添加Extension了
+			
+			project.WriteToFile(projectPath);
+			var contents = File.ReadAllText(projectPath);
+			project.ReadFromString(contents);
+			
+			// Add push notifications as a capability on the main app target
+			AddPushCapability(project, path, mainTargetGUID, mainTargetName);
+
+			project.SetBuildProperty(unityFrameworkGUID, "GCC_ENABLE_OBJC_EXCEPTIONS", "YES");
+			project.SetBuildProperty(mainTargetGUID, "GCC_ENABLE_OBJC_EXCEPTIONS", "YES");
+			File.WriteAllText(projectPath, project.WriteToString());
+		}
+		
+		private static void ModifyPlistFile(string pathToBuildProject)
+		{
+			var plistPath = Path.Combine(pathToBuildProject, "Info.plist");
+			var plist = new PlistDocument();
+			plist.ReadFromFile(plistPath);
+			//设置Google AD GADApplicationIdentifier
+			plist.root.SetString("NSCalendarsUsageDescription", "Store calendar events from ads");
+			// plist.root.SetString("GADApplicationIdentifier", "ca-app-pub-2436733915645843~7788635385");
+			// plist.root.SetString("FacebookClientToken", "2414c9079473645856a5ef6b8ac95cf6");
+			// plist.root.SetString("FacebookDisplayName", PlayerSettings.productName);
+			//设置Xcode的Att弹窗配置
+			plist.root.SetString("NSUserTrackingUsageDescription","By allowing tracking, we'll be able to better tailor ads served to you on this game.");
+			//设置SKAdNetworkItems
+			// ReadSKADNetworkPlistFile();
+			// var plistElementArray = plist.root.CreateArray("SKAdNetworkItems");
+			// AddPlatformADNetworkIdentifier(plistElementArray, NETWORK_IDENTIFIER_ARRAY);
+			
+			// 设置合规出口证明
+			plist.root.SetBoolean("ITSAppUsesNonExemptEncryption", false);
+
+			var root = plist.root.values;
+			PlistElement atsRoot;
+			root.TryGetValue("NSAppTransportSecurity", out atsRoot);
+
+			if (atsRoot == null || atsRoot.GetType() != typeof(PlistElementDict))
+			{
+				atsRoot = plist.root.CreateDict("NSAppTransportSecurity");
+				atsRoot.AsDict().SetBoolean("NSAllowsArbitraryLoads", true);
+			}
+
+			var atsRootDict = atsRoot.AsDict().values;
+			if (atsRootDict.ContainsKey("NSAllowsArbitraryLoadsInWebContent"))
+			{
+				atsRootDict.Remove("NSAllowsArbitraryLoadsInWebContent");
+			}
+        
+			plist.WriteToFile(plistPath);
+		}
+		
+		#region 纯功能函数
+		
+		private static void AddOrUpdateEntitlements(string path, PBXProject project, string targetGUI,
+			string targetName, HashSet options)
+		{
+			string entitlementPath = GetEntitlementsPath(path, project, targetGUI, targetName);
+			var entitlements = new PlistDocument();
+
+			// Check if the file already exisits and read it
+			if (File.Exists(entitlementPath)) {
+				entitlements.ReadFromFile(entitlementPath);
+			}
+
+			// TOOD: This can be updated to use project.AddCapability() in the future
+			if (options.Contains(EntitlementOptions.AppGroups) && entitlements.root["com.apple.security.application-groups"] == null) {
+				var groups = entitlements.root.CreateArray("com.apple.security.application-groups");
+				groups.AddString("group." + PlayerSettings.applicationIdentifier);
+			}
+
+			entitlements.WriteToFile(entitlementPath);
+
+			// Copy the entitlement file to the xcode project
+			var entitlementFileName = Path.GetFileName(entitlementPath);
+			var relativeDestination = targetName + "/" + entitlementFileName;
+
+			// Add the pbx configs to include the entitlements files on the project
+			project.AddFile(relativeDestination, entitlementFileName);
+			project.AddBuildProperty(targetGUI, "CODE_SIGN_ENTITLEMENTS", relativeDestination);
+		}
+		
+		private static void AddPushCapability(PBXProject project, string path, string targetGUID, string targetName)
+		{
+			var projectPath = PBXProject.GetPBXProjectPath(path);
+			//project.AddCapability(targetGUID, PBXCapabilityType.PushNotifications);
+			//project.AddCapability(targetGUID, PBXCapabilityType.BackgroundModes);
+
+			var entitlementsPath = GetEntitlementsPath(path, project, targetGUID, targetName);
+			// NOTE: ProjectCapabilityManager's 4th constructor param requires Unity 2019.3+
+			var projCapability = new ProjectCapabilityManager(projectPath, entitlementsPath, targetName);
+			//projCapability.AddBackgroundModes(BackgroundModesOptions.BackgroundFetch);
+			//projCapability.AddBackgroundModes(BackgroundModesOptions.RemoteNotifications);
+			projCapability.AddPushNotifications(false);
+			projCapability.WriteToFile();
+		}
+
+		
+		private static string GetPBXProjectTargetName(PBXProject project)
+		{
+			// var projectUUID = project.GetUnityMainTargetGuid();
+			// return project.GetBuildPhaseName(projectUUID);
+			// The above always returns null, using a static value for now.
+			return DEFAULT_PROJECT_TARGET_NAME;
+		}
+    
+		private static string GetPBXProjectTargetGUID(PBXProject project)
+		{
+			return project.GetUnityMainTargetGuid();
+		}
+
+		private static string GetPBXProjectUnityFrameworkGUID(PBXProject project)
+		{
+			return project.GetUnityFrameworkTargetGuid();
+		}
+    
+		private static string GetEntitlementsPath(string path, PBXProject project, string targetGUI, string targetName)
+		{
+			// Check if there is already an eltitlements file configured in the Xcode project
+			var relativeEntitlementPath = project.GetBuildPropertyForConfig(targetGUI, "CODE_SIGN_ENTITLEMENTS");
+			if (relativeEntitlementPath != null) {
+				var entitlementPath = path + DIR_CHAR + relativeEntitlementPath;
+				if (File.Exists(entitlementPath)) {
+					return entitlementPath;
+				}
+			}
+
+			// No existing file, use a new name
+			return path + DIR_CHAR + targetName + DIR_CHAR + targetName + ".entitlements";
+		}
+		#endregion
+	}
+}
+
+#endif
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/IOS_POST_IPM/IOSPostProcessBuild.IPM.cs.meta b/Editor/GuruBuildSuit/IOS_POST_IPM/IOSPostProcessBuild.IPM.cs.meta
new file mode 100644
index 0000000..3f7b736
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_IPM/IOSPostProcessBuild.IPM.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 963cba5e4a074d208e7d9343acb547dc
+timeCreated: 1632375624
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/IOS_POST_IPM/Info.plist b/Editor/GuruBuildSuit/IOS_POST_IPM/Info.plist
new file mode 100644
index 0000000..e3488ab
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_IPM/Info.plist
@@ -0,0 +1,31 @@
+
+
+
+  
+    CFBundleDevelopmentRegion
+    $(DEVELOPMENT_LANGUAGE)
+    CFBundleDisplayName
+    U3D2FCM-iOS
+    CFBundleExecutable
+    $(EXECUTABLE_NAME)
+    CFBundleIdentifier
+    $(PRODUCT_BUNDLE_IDENTIFIER)
+    CFBundleInfoDictionaryVersion
+    6.0
+    CFBundleName
+    $(PRODUCT_NAME)
+    CFBundlePackageType
+    $(PRODUCT_BUNDLE_PACKAGE_TYPE)
+    CFBundleShortVersionString
+    1.1.0
+    CFBundleVersion
+    8
+    NSExtension
+    
+      NSExtensionPointIdentifier
+      com.apple.usernotifications.service
+      NSExtensionPrincipalClass
+      NotificationService
+    
+  
+
diff --git a/Editor/GuruBuildSuit/IOS_POST_IPM/Info.plist.meta b/Editor/GuruBuildSuit/IOS_POST_IPM/Info.plist.meta
new file mode 100644
index 0000000..c46018d
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_IPM/Info.plist.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: c76614c2deb1e4591a5f2f0d5cdfabf7
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Editor/GuruBuildSuit/IOS_POST_IPM/NotificationService.h b/Editor/GuruBuildSuit/IOS_POST_IPM/NotificationService.h
new file mode 100644
index 0000000..a820f01
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_IPM/NotificationService.h
@@ -0,0 +1,12 @@
+//
+//  NotificationService.h
+//  U3D2FCM-iOS
+//
+//  Created by Xiaohang Yang on 2021/1/28.
+//
+
+#import 
+
+@interface NotificationService : UNNotificationServiceExtension
+
+@end
diff --git a/Editor/GuruBuildSuit/IOS_POST_IPM/NotificationService.h.meta b/Editor/GuruBuildSuit/IOS_POST_IPM/NotificationService.h.meta
new file mode 100644
index 0000000..0e29d59
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_IPM/NotificationService.h.meta
@@ -0,0 +1,27 @@
+fileFormatVersion: 2
+guid: 45e43a2e87043417d8f83185b71b4199
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 1
+      settings:
+        DefaultValueInitialized: true
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Editor/GuruBuildSuit/IOS_POST_IPM/NotificationService.m b/Editor/GuruBuildSuit/IOS_POST_IPM/NotificationService.m
new file mode 100644
index 0000000..b70bbaf
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_IPM/NotificationService.m
@@ -0,0 +1,122 @@
+//
+//  NotificationService.m
+//  U3D2FCM
+//
+//  Created by Michael on 2020/11/27.
+//
+
+#import "NotificationService.h"
+#import 
+#import 
+
+ 
+@interface NotificationService ()
+
+@property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);
+@property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;
+
+@end
+
+
+
+@implementation NotificationService
+
+
+- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
+    self.contentHandler = contentHandler;
+    self.bestAttemptContent = [request.content mutableCopy];
+    
+    NSLog(@"EventPush-NotificationService-didReceiveNotificationRequest");
+
+    NSString *packageName = @"";
+    NSArray *arr = [[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIdentifier"] componentsSeparatedByString:@"."];
+    for(int i=0;i
+    /// 针对AmazonSDK iOS平台构建后
+    /// BitCode报错的问题
+    /// 
+    public class IOSPostProcessBuild_PodFix
+    {
+
+        /// 
+        /// 添加内容
+        /// 
+        private static readonly string MOD_SCRIPT = @"#Compile bugs fixed by HuYufei 2023-11-16
+post_install do |installer|
+    installer.pods_project.targets.each do |target|
+        target.build_configurations.each do |config|
+            config.build_settings['ENABLE_BITCODE'] = 'NO'
+            config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
+	        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
+	        xcconfig_path = config.base_configuration_reference.real_path
+            xcconfig = File.read(xcconfig_path)
+            xcconfig_mod = xcconfig.gsub(/DT_TOOLCHAIN_DIR/, ""TOOLCHAIN_DIR"")
+            File.open(xcconfig_path, ""w"") { |file| file << xcconfig_mod }
+        end
+    end
+end";
+
+        /// 
+        /// 构建操作
+        /// 构建顺序 45-50 可以保证执行时序在MAX 自身生成podfile之后, 注入需要的逻辑
+        /// AmazonSDK使用了45, 工具设为46,确保后发执行
+        /// 
+        /// 
+        /// 
+        [PostProcessBuild(46)]
+        private static void OnPostProcessBuild(BuildTarget target, string projPath)
+        {
+            if (target != BuildTarget.iOS)
+                return;
+
+            string podPath = Path.Combine(projPath, "Podfile");
+            if (File.Exists(podPath))
+            {
+                bool needFix = false;
+                string content = File.ReadAllText(podPath);
+                if (!content.Contains("#BITCODE"))
+                {
+                    content = content + "\n" + MOD_SCRIPT;
+                    File.WriteAllText(podPath, content);
+                    Debug.Log($"=== Fix Pods BitCode bug ===");
+                }
+
+
+            }
+            else
+            {
+                Debug.LogError($"=== POD not exists, exit pod hook...===");
+            }
+        }
+
+    }
+}
+
+#endif
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/IOS_POST_POD/IOSPostProcessBuild.PodFix.cs.meta b/Editor/GuruBuildSuit/IOS_POST_POD/IOSPostProcessBuild.PodFix.cs.meta
new file mode 100644
index 0000000..c7b3082
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_POD/IOSPostProcessBuild.PodFix.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7418e71e42e99424c9df47a84b05b37c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Editor/GuruBuildSuit/IOS_POST_SWIFT.meta b/Editor/GuruBuildSuit/IOS_POST_SWIFT.meta
new file mode 100644
index 0000000..0b11a80
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_SWIFT.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a78e5d32ead914b3f9f0a718da8594ea
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Editor/GuruBuildSuit/IOS_POST_SWIFT/IOSPostBuild.Swift.cs b/Editor/GuruBuildSuit/IOS_POST_SWIFT/IOSPostBuild.Swift.cs
new file mode 100644
index 0000000..1584e81
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_SWIFT/IOSPostBuild.Swift.cs
@@ -0,0 +1,53 @@
+#if UNITY_IOS
+using UnityEditor;
+using UnityEditor.iOS.Xcode;
+using UnityEditor.Callbacks;
+using UnityEngine;
+
+namespace Guru
+{
+    /// 
+    /// SWIFT语言支持
+    /// 
+    public class IOSPostBuildSwift
+    {
+        [PostProcessBuild(40)]
+        public static void OnPostProcessBuild(BuildTarget target, string buildPath)
+        {
+            if (target != BuildTarget.iOS) return;
+            
+            Debug.Log($"--- Add Swift support to project: {buildPath}");
+            
+            // 更新Swift语言支持
+            AddSwiftSupport(buildPath);
+        }
+        
+        /// 
+        /// 添加Swift Support
+        /// 
+        /// 
+        private static void AddSwiftSupport(string buildPath)
+        {
+            var projectPath = PBXProject.GetPBXProjectPath(buildPath);
+            var project = new PBXProject();
+            project.ReadFromFile(projectPath);
+            var mainTargetGuid = project.GetUnityMainTargetGuid();
+            var frameworkTargetGuid = project.GetUnityFrameworkTargetGuid();
+        
+            // 关闭BitCode
+            project.SetBuildProperty(mainTargetGuid, "ENABLE_BITCODE", "NO");
+            project.SetBuildProperty(frameworkTargetGuid, "ENABLE_BITCODE", "NO");
+            
+            // 添加搜索路径
+            project.AddBuildProperty(frameworkTargetGuid, "LD_RUNPATH_SEARCH_PATHS", "/usr/lib/swift");
+            
+            // 设置主项目的SWIFT构建支持
+            project.SetBuildProperty(mainTargetGuid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "YES");
+            
+            
+            project.WriteToFile(projectPath);
+        }
+    }
+}
+
+#endif
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/IOS_POST_SWIFT/IOSPostBuild.Swift.cs.meta b/Editor/GuruBuildSuit/IOS_POST_SWIFT/IOSPostBuild.Swift.cs.meta
new file mode 100644
index 0000000..42e20c6
--- /dev/null
+++ b/Editor/GuruBuildSuit/IOS_POST_SWIFT/IOSPostBuild.Swift.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 661b372db3634542856a44e37664649c
+timeCreated: 1673406971
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/SDK_Tracker.meta b/Editor/GuruBuildSuit/SDK_Tracker.meta
new file mode 100644
index 0000000..b9b3711
--- /dev/null
+++ b/Editor/GuruBuildSuit/SDK_Tracker.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: a0af2d1a3be34a4cb6101bd2a40b4c36
+timeCreated: 1705373808
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/SDK_Tracker/AndroidGradleOutputDeps.cs b/Editor/GuruBuildSuit/SDK_Tracker/AndroidGradleOutputDeps.cs
new file mode 100644
index 0000000..3ec7fb5
--- /dev/null
+++ b/Editor/GuruBuildSuit/SDK_Tracker/AndroidGradleOutputDeps.cs
@@ -0,0 +1,28 @@
+#if UNITY_ANDROID
+
+using System;
+using System.Collections.Generic;
+using UnityEditor.Android;
+using UnityEngine;
+using Debug=UnityEngine.Debug;
+
+namespace Guru.Editor
+{
+    public class AndroidGradleOutputDeps: IPostGenerateGradleAndroidProject
+    {
+        public int callbackOrder => 1;
+        
+        /// 
+        /// 生成Android项目后执行逻辑
+        /// 
+        /// 
+        public void OnPostGenerateGradleAndroidProject(string buildPath)
+        {
+            Debug.Log($"---- Android Projct start build {buildPath}");
+            DepsOutputHelper.InstallAndRun(buildPath);
+        }
+    }
+}
+
+
+#endif
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/SDK_Tracker/AndroidGradleOutputDeps.cs.meta b/Editor/GuruBuildSuit/SDK_Tracker/AndroidGradleOutputDeps.cs.meta
new file mode 100644
index 0000000..9d5ee77
--- /dev/null
+++ b/Editor/GuruBuildSuit/SDK_Tracker/AndroidGradleOutputDeps.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: f8b64715449c4f23a7781dc15f5d38fe
+timeCreated: 1702349739
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/SDK_Tracker/DepsOutputHelper.cs b/Editor/GuruBuildSuit/SDK_Tracker/DepsOutputHelper.cs
new file mode 100644
index 0000000..26fd794
--- /dev/null
+++ b/Editor/GuruBuildSuit/SDK_Tracker/DepsOutputHelper.cs
@@ -0,0 +1,142 @@
+namespace Guru.Editor
+{
+    using System;
+    using UnityEditor;
+    using System.Diagnostics;
+    using System.IO;
+    using UnityEngine;
+    using Debug=UnityEngine.Debug;
+    using System.Collections.Generic;
+    
+    public class DepsOutputHelper
+    {
+        public static readonly string DepsScriptName = "deps.sh";
+        public static readonly string EnvScriptName = ".deps_env";
+        private static string _scriptFilePath = String.Empty;
+        public static string ScriptFilePath
+        {
+            get
+            {
+                if(string.IsNullOrEmpty(_scriptFilePath))
+                    _scriptFilePath = GetScriptFilePath();
+                return _scriptFilePath;
+            }
+        }
+        /// 
+        /// 获取脚本路径
+        /// 
+        /// 
+        private static string GetScriptFilePath()
+        {
+            string sc = string.Empty;
+            var guids = AssetDatabase.FindAssets($"{nameof(DepsOutputHelper)} t:script");
+            if (guids.Length > 0)
+            {
+                sc = AssetDatabase.GUIDToAssetPath(guids[0]);
+                var fpath = $"{Directory.GetParent(sc).FullName}/files/{DepsScriptName}";
+                if(File.Exists(fpath)) return fpath;
+            }
+            return string.Empty;
+        }
+
+        /// 
+        /// 执行脚本
+        /// 
+        /// 
+        /// 
+        public static void CallDepsScript(string workpath, string cmd = "")
+        {
+            if (string.IsNullOrEmpty(cmd)) cmd = DepsScriptName;
+            RunShellCmd(workpath, cmd);
+            Debug.Log($"---- running command: {cmd} is over -----");
+        }
+
+        // 运行命令
+        public static void RunShellCmd(string workpath, string cmd)
+        {
+            //------ 启动命令 --------
+            Process p = new Process();
+            p.StartInfo.WorkingDirectory = workpath;
+            p.StartInfo.FileName = "/bin/bash";
+            p.StartInfo.Arguments = cmd;
+            p.StartInfo.UseShellExecute = false;
+            p.StartInfo.RedirectStandardOutput = true;
+            p.Start();
+            var log = p.StandardOutput.ReadToEnd();
+            p.WaitForExit();
+            Debug.Log(log);
+        }
+
+        // 设置ENV文件
+        private static void SetupEnvScript(string projPath, string depauditPath = "")
+        {
+            string buildName = $"1.0.0-00000000";
+            string platform = $"editor";
+            string dir = projPath;
+            
+#if UNITY_ANDROID
+            buildName = $"{Application.version}-{PlayerSettings.Android.bundleVersionCode}";
+            platform = "android";
+#elif UNITY_IOS
+            buildName = $"{Application.version}-{PlayerSettings.iOS.buildNumber}";
+            platform = "ios";
+#endif
+            List lines = new List()
+            {
+                $"export BUILD_NAME={buildName}",
+                $"export APP_NAME=\"{PlayerSettings.productName}\"",
+                $"export APP_ID={Application.identifier}",
+                $"export PLATFORM={platform}",
+                $"export DIR={dir}",
+            };
+            
+            if (!string.IsNullOrEmpty(depauditPath))
+            {
+                // 本地调试, 需要工具路径
+                lines.Add($"export depaudit={depauditPath}");
+            }
+            
+            File.WriteAllLines($"{projPath}/{EnvScriptName}", lines.ToArray());
+        }
+
+        /// 
+        /// 安装和运行依赖输出器
+        /// 
+        /// 
+        public static void InstallAndRun(string buildPath)
+        {
+            if (string.IsNullOrEmpty(ScriptFilePath) || !File.Exists(ScriptFilePath))
+            {
+                Debug.LogError($"--- deps script file not found, skip output deps...");
+                return;
+            }
+            
+            string projPath = buildPath;
+#if UNITY_ANDROID
+            projPath = Directory.GetParent(buildPath).FullName;
+#elif UNITY_IOS
+            //TBD
+#endif
+            //---- Setup Env ----
+            SetupEnvScript(projPath);
+            
+            //---- Setup Deps ----
+            string to = $"{projPath}/{DepsScriptName}";
+            if (File.Exists(to)) File.Delete(to);
+            FileUtil.CopyFileOrDirectory(ScriptFilePath, to); //拷贝脚本
+            
+            try
+            {
+                Debug.Log($"=== Output build deps data ===");
+                CallDepsScript(projPath);
+            }
+            catch (Exception ex)
+            {
+                Debug.LogError(ex);
+                Debug.Log($"=== Output pods deps failed: {ex}");
+            }
+            
+        }
+        
+    }
+}
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/SDK_Tracker/DepsOutputHelper.cs.meta b/Editor/GuruBuildSuit/SDK_Tracker/DepsOutputHelper.cs.meta
new file mode 100644
index 0000000..195ee39
--- /dev/null
+++ b/Editor/GuruBuildSuit/SDK_Tracker/DepsOutputHelper.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 831ffddddd78421b8597eac6367fd920
+timeCreated: 1702366162
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/SDK_Tracker/IOSXcodeOutputDeps.cs b/Editor/GuruBuildSuit/SDK_Tracker/IOSXcodeOutputDeps.cs
new file mode 100644
index 0000000..3bd3125
--- /dev/null
+++ b/Editor/GuruBuildSuit/SDK_Tracker/IOSXcodeOutputDeps.cs
@@ -0,0 +1,36 @@
+#if UNITY_IOS
+
+using System.IO;
+using UnityEditor;
+using UnityEditor.Callbacks;
+using UnityEngine;
+
+namespace Guru.Editor
+{
+    public class IOSXcodeOutputDeps
+    {
+        // 
+        /// 构建操作
+        /// 构建顺序 45-50 可以保证执行时序在MAX 自身生成podfile之后, 注入需要的逻辑
+        /// AmazonSDK使用了45, 工具设为 > 45, 确保后发执行
+        /// 
+        /// 
+        /// 
+        [PostProcessBuild(1000)]
+        private static void OnPostProcessBuild(BuildTarget target, string projPath)
+        {
+            string podlock = Path.Combine(projPath, "Podfile.lock");
+            if (File.Exists(podlock))
+            {
+                DepsOutputHelper.InstallAndRun(projPath);
+            }
+            else
+            {
+                Debug.LogError($"=== POD install not success, exit deps hook...===");
+            }
+        }
+    }
+}
+
+
+#endif
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/SDK_Tracker/IOSXcodeOutputDeps.cs.meta b/Editor/GuruBuildSuit/SDK_Tracker/IOSXcodeOutputDeps.cs.meta
new file mode 100644
index 0000000..2ed4742
--- /dev/null
+++ b/Editor/GuruBuildSuit/SDK_Tracker/IOSXcodeOutputDeps.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: b2e00c5d9f49480988f78c88fc9d2bac
+timeCreated: 1702365324
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/SDK_Tracker/files.meta b/Editor/GuruBuildSuit/SDK_Tracker/files.meta
new file mode 100644
index 0000000..b2306c1
--- /dev/null
+++ b/Editor/GuruBuildSuit/SDK_Tracker/files.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: d7b67912d7d245e0bf67086a8e2f395a
+timeCreated: 1702349190
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/SDK_Tracker/files/deps.sh b/Editor/GuruBuildSuit/SDK_Tracker/files/deps.sh
new file mode 100644
index 0000000..1e71899
--- /dev/null
+++ b/Editor/GuruBuildSuit/SDK_Tracker/files/deps.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+GRADLE_VERSION=6.7.1
+
+export PATH="~/.gradle/${GRADLE_VERSION}:$PATH"
+export PATH="~/.gradle/${GRADLE_VERSION}/bin:$PATH"
+export GURU_BIN="~/dev/flutter/guru_app/tools/bin"
+export PATH="$GURU_BIN:$PATH"
+
+source .deps_env
+
+echo "--- BuildName: ${BUILD_NAME}"
+echo "--- AppName: ${APP_NAME}"
+echo "--- APP_ID: ${APP_ID}"
+echo "--- Platform: ${PLATFORM}"
+echo "--- DIR: ${DIR}"
+
+
+if [ "${PLATFORM}" = "android" ]; then
+    gradle w
+fi
+
+echo "----- collect deps start-----"
+
+depaudit --platform "${PLATFORM}" --dir "${DIR}" --build_version "${BUILD_NAME}" --app_name "${APP_NAME}" --app_id "${APP_ID}" --engine unity
+
+echo "----- collect deps over -----"
+
+if [ "${PLATFORM}" = "android" ]; then
+  
+  if [ -f ${DIR}/gradlew ]; then
+      ${DIR}/gradlew --stop
+      echo "***************** deps collect success! *****************"
+  else
+      echo "***************** gradlew not found, deps collect failed! *****************"
+  fi
+  
+else
+  echo "***************** deps collect success! *****************"
+fi
\ No newline at end of file
diff --git a/Editor/GuruBuildSuit/SDK_Tracker/files/deps.sh.meta b/Editor/GuruBuildSuit/SDK_Tracker/files/deps.sh.meta
new file mode 100644
index 0000000..cba9769
--- /dev/null
+++ b/Editor/GuruBuildSuit/SDK_Tracker/files/deps.sh.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: d43d22568540f49378be159486b4e1d3
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: