update: 添加中台对应的 iOS 构建管线
parent
bdb15cdf1d
commit
ffd2b7da21
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c2bda7db652148e7a73fd2179e22be09
|
||||
guid: 70312596ce564426aa363479bc5fd1f9
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b460e9873d8bf445da1764952f4f966c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -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;
|
||||
|
||||
/// <summary>
|
||||
/// SKAdNetwork 注入逻辑
|
||||
/// </summary>
|
||||
public static class IOSPostBuild_SKAdNetwork
|
||||
{
|
||||
private static List<string> NETWORK_IDENTIFIER_ARRAY = new List<string>();
|
||||
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<string> arrays)
|
||||
{
|
||||
foreach (var value in arrays)
|
||||
{
|
||||
PlistArrayAddDict(plistElementArray, value);
|
||||
}
|
||||
}
|
||||
|
||||
private static void PlistArrayAddDict(PlistElementArray plistElementArray, string value)
|
||||
{
|
||||
plistElementArray.AddDict().SetString(SKADNetworkIdentifier, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: be1ddc59e4ac2416f8174a5611f0c98a
|
||||
timeCreated: 1632375624
|
||||
|
|
@ -0,0 +1,925 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SKAdNetworkItems</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>cstr6suwn9.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>4fzdc2evr5.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>4pfyvq9l8r.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>2fnua5tdw4.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>ydx93a7ass.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>5a6flpkh64.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>p78axxw29g.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>v72qych5uu.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>ludvb6z3bs.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>cp8zw746q7.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>3sh42y64q3.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>c6k4g5qg8m.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>s39g8k73mm.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>3qy4746246.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>f38h382jlk.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>hs6bdukanm.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>v4nxqhlyqp.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>wzmmz9fp6w.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>yclnxrl5pm.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>t38b2kh725.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>7ug5zh24hu.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>gta9lk7p23.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>vutu7akeur.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>y5ghdn5j9k.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>n6fk4nfna4.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>v9wttpbfk9.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>n38lu8286q.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>47vhws6wlr.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>kbd757ywx3.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>9t245vhmpl.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>eh6m2bh4zr.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>a2p9lx4jpn.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>22mmun2rn5.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>4468km3ulz.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>2u9pt9hc89.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>8s468mfl3y.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>klf5c3l5u5.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>ppxm28t8ap.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>ecpz2srf59.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>uw77j35x4d.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>pwa73g5rt2.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>mlmmfzh3r3.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>578prtvx9j.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>4dzt52r2t5.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>e5fvkxwrpn.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>8c4e2ghe7u.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>zq492l623r.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>3rd42ekr43.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>3qcr597p9d.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>238da6jt44.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>24t9a8vw3c.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>24zw6aqk47.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>252b5q8x7y.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>275upjj5gd.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>294l99pt4k.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>32z4fx6l9h.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>3l6bd9hu43.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>424m5254lk.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>44jx6755aq.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>44n7hlldy6.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>488r3q3dtq.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>4mn522wn87.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>4w7y6s5ca2.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>523jb4fst2.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>52fl2v3hgk.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>54nzkqm89y.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>5l3tpt7t6e.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>5lm9lj6jb7.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>5tjdwbrq8w.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>6964rsfnh4.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>6g9af3uyq4.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>6p4ks3rnbw.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>6v7lgmsu45.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>6xzpu9s2p8.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>737z793b9f.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>74b6s63p6l.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>79pbpufp6p.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>7fmhfwg9en.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>7rz58n8ntl.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>84993kbrcf.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>89z7zv988g.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>8m87ys6875.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>8r8llnkz5a.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>97r2b46745.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>9b89h5y424.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>9nlqeag3gk.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>9rd848q2bz.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>9vvzujtq5s.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>9yg77x724h.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>a7xqa6mtl2.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>a8cz6cu7e5.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>av6w8kgt66.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>b9bk5wbcq9.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>bxvub5ada5.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>c3frkrj4fj.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>cg4yq2srnc.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>cj5566h2ga.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>cs644xg564.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>dbu4b84rxf.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>dkc879ngq3.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>dzg6xy7pwj.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>ejvt5qm6ak.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>f73kdq92p3.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>f7s53z58qe.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>feyaarzu9v.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>g28c52eehv.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>g2y4y55b64.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>ggvn48r87g.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>glqzh8vgby.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>gta8lk7p23.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>hb56zgv37p.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>hdw39hrw9y.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>k674qkevps.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>kbmxgpxpgc.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>krvm3zuq6h.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>lr83yxwka7.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>m297p6643m.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>m5mvw97r93.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>m8dbw4sv7c.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>mls7yz5dvl.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>mp6xlyr22a.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>mtkv5xtk9e.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>n66cz3y3bx.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>n9x2a789qt.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>nzq8sh4pbs.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>prcb7njmu6.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>pwdxu55a5a.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>qqp299437r.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>r45fhb6rf7.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>rvh3l7un93.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>rx5hdcabgc.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>s69wq72ugq.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>su67r6k2v3.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>tl55sbb4fm.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>u679fj5vs4.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>v79kvwwj4g.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>vcra2ehyfk.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>w9q455wk68.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>wg4vff78zm.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>x44k69ngh6.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>x5l83yy675.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>x8jxxk4ff5.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>x8uqf25wch.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>xy9t38ct57.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>y45688jllp.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>zmvfpc5aq8.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>t6d3zquu66.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>9g2aggbj52.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>h65wbv5k3f.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>gvn48r87g.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>bvpn9ufa9b.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>hjevpa356n.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>6yxyv74ff7.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>mqn7fxpca7.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>7953jerfzd.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>qu637u8glc.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>g6gcrrvk4p.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>nu4557a4je.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>cj5566h2ga.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>gvmwg8q7h5.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>pu4na253f3.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>yrqqpx2mcb.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>z4gj7hsk7h.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>z959bm4gru.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>bd757ywx3.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>33r6p7g8nc.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>g69uk9uh2b.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>633vhxswh4.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>tmhh9296z4.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>zh3b7bxvad.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>xmn954pzmp.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>79w64w269u.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>d7g9azk84q.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>866k9ut3g3.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>2q884k2j68.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>gfat3222tu.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>pd25vrrwzn.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>y755zyxw56.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>qlbq5gtkt8.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>67369282zy.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>899vrgt9g8.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>mj797d8u6f.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>88k8774x49.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>t3b3f7n3x8.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>c7g47wypnu.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>z5b3gh5ugf.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>dd3a75yxkv.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>h5jmj969g5.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>dr774724x4.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>t7ky8fmwkd.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>fz2k2k5tej.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>w28pnjg2k4.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>2rq3zucswp.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>vc83br9sjg.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>eqhxz8m8av.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>7k3cvf297u.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>7tnzynbdc7.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>l6nv3x923s.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>h8vml93bkz.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>uzqba5354d.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>8qiegk9qfv.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>xx9sdjej2w.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>au67k4efj4.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>dmv22haz9p.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>7fbxrn65az.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>b55w3d8y8z.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>v7896pgt74.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>5ghnmfs3dh.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>627r9wr2y5.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>sczv5946wb.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>8w3np9l82g.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>nrt9jy4kw9.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>dn942472g5.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>cad8qz2s3j.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>r26jy69rpl.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>jb7bn6koa5.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>fkak3gfpt6.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>2tdux39lx8.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>3cgn6rq224.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>nfqy3847ph.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>dticjx1a9i.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>9wsyqb3ku7.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>x5854y7y24.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>6qx585k4p6.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>l93v5h6a4m.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>axh5283zss.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>5mv394q32t.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>ln5gz23vtd.skadnetwork</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>x2jnk7ly8j.skadnetwork</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e15412105e424ee0934897a153640a34
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 815571d7e09647a8b91951918d0feb7e
|
||||
timeCreated: 1699597324
|
||||
|
|
@ -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;
|
||||
|
||||
/// <summary>
|
||||
/// Fireabse DebugView 开启参数注入
|
||||
/// </summary>
|
||||
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:";
|
||||
|
||||
/// <summary>
|
||||
/// 需要在外部接口调用参数注入
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加启动参数到Scheme
|
||||
/// </summary>
|
||||
/// <param name="buildPath"></param>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 注入命令行参数
|
||||
/// </summary>
|
||||
/// <param name="buildPath"></param>
|
||||
private static void InjectLaunchCode(string buildPath)
|
||||
{
|
||||
string path = $"{buildPath}/Classes/UnityAppController.mm";
|
||||
|
||||
if (File.Exists(path))
|
||||
{
|
||||
List<string> 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} <color=orange>---- code has already injected, skip... </color>");
|
||||
return;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
lines.Insert(idx, CodeCmdArgsFix);
|
||||
File.WriteAllLines(path, lines.ToArray());
|
||||
Debug.Log($"{Tag} <color=#88ff00>---- code has success injected.</color> path:\n{path}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log($"{Tag} <color=red>---- file not found: {path}, inject failed... </color>");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 7f98aa3ce0d04b2d9f8442a0b288f27e
|
||||
timeCreated: 1699597308
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: bf616a5ad654b418281c06863ad401eb
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -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<string> NETWORK_IDENTIFIER_ARRAY = new List<string>();
|
||||
|
||||
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>
|
||||
{
|
||||
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<EntitlementOptions> 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
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 963cba5e4a074d208e7d9343acb547dc
|
||||
timeCreated: 1632375624
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>U3D2FCM-iOS</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>8</string>
|
||||
<key>NSExtension</key>
|
||||
<dict>
|
||||
<key>NSExtensionPointIdentifier</key>
|
||||
<string>com.apple.usernotifications.service</string>
|
||||
<key>NSExtensionPrincipalClass</key>
|
||||
<string>NotificationService</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c76614c2deb1e4591a5f2f0d5cdfabf7
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
//
|
||||
// NotificationService.h
|
||||
// U3D2FCM-iOS
|
||||
//
|
||||
// Created by Xiaohang Yang on 2021/1/28.
|
||||
//
|
||||
|
||||
#import <UserNotifications/UserNotifications.h>
|
||||
|
||||
@interface NotificationService : UNNotificationServiceExtension
|
||||
|
||||
@end
|
||||
|
|
@ -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:
|
||||
|
|
@ -0,0 +1,122 @@
|
|||
//
|
||||
// NotificationService.m
|
||||
// U3D2FCM
|
||||
//
|
||||
// Created by Michael on 2020/11/27.
|
||||
//
|
||||
|
||||
#import "NotificationService.h"
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
|
||||
@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<arr.count-1;i++){
|
||||
if(i==arr.count-2){
|
||||
packageName = [packageName stringByAppendingString:arr[i]];
|
||||
}else{
|
||||
packageName = [packageName stringByAppendingString: [NSString stringWithFormat:@"%@.",arr[i]]];
|
||||
}
|
||||
}
|
||||
NSLog(@"EventPush-NotificationService-packageName: %@", packageName);
|
||||
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName: [NSString stringWithFormat: @"group.%@", packageName]];
|
||||
NSString *appCountry= [defaults stringForKey:@"appCountry"];
|
||||
NSString *appIdentifier = [defaults stringForKey:@"appIdentifier"];
|
||||
NSString *appVersion = [defaults stringForKey:@"appVersion"];
|
||||
NSString *deviceCountry = [defaults stringForKey:@"deviceCountry"];
|
||||
NSString *deviceId = [defaults stringForKey:@"deviceId"];
|
||||
NSString *deviceToken = [defaults stringForKey:@"deviceToken"];
|
||||
NSString *eventUrl = [defaults stringForKey:@"eventUrl"];
|
||||
NSString *IPM_X_APP_ID = [defaults stringForKey:@"IPM_X_APP_ID"];
|
||||
NSString *IPM_TOKEN = [defaults stringForKey:@"IPM_TOKEN"];
|
||||
NSString *IPM_UID = [defaults stringForKey:@"IPM_UID"];
|
||||
|
||||
//timezone
|
||||
NSTimeZone *zone = [NSTimeZone localTimeZone];
|
||||
NSString *timezone = [zone name];
|
||||
//model
|
||||
UIDevice *currentDevice = [UIDevice currentDevice];
|
||||
NSString *model = [currentDevice model];
|
||||
//language
|
||||
NSArray *languageArray = [NSLocale preferredLanguages];
|
||||
NSString *language = [languageArray objectAtIndex:0];
|
||||
//locale
|
||||
NSLocale *localeObj = [NSLocale currentLocale];
|
||||
NSString *locale = [localeObj localeIdentifier];
|
||||
|
||||
NSDate *currentDate = [[NSDate alloc] init];
|
||||
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
|
||||
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
|
||||
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
|
||||
NSString *appEventTime = [dateFormatter stringFromDate:currentDate];
|
||||
|
||||
NSString *deviceData = [NSString stringWithFormat: @"{\"androidId\":null,\"appCountry\":\"%@\",\"appIdentifier\":\"%@\",\"appVersion\":\"%@\",\"brand\":null,\"deviceCoordinates\":{\"latitude\":0,\"longitude\":0},\"deviceCountry\":\"%@\",\"deviceId\":\"%@\",\"deviceToken\":\"%@\",\"deviceType\":\"iOS\",\"gpsCoordinates\":{\"latitude\":0,\"longitude\":0},\"groups\":null,\"language\":\"%@\",\"locale\":\"%@\",\"model\":\"%@\",\"pushDeviceType\":\"iOS\",\"pushNotificationEnable\":true,\"pushNotifications\":null,\"pushType\":\"FCM\",\"timezone\":\"%@\",\"uid\":\"%@\"}", appCountry,appIdentifier,appVersion,deviceCountry,deviceId,deviceToken,language,locale,model,timezone,IPM_UID];
|
||||
NSString *postData = [NSString stringWithFormat: @"{\"appEventTime\":\"%@\",\"deviceData\":%@, \"eventType\":\"DeviceReceive\",\"serverParams\":\"{\\\"itemIndex\\\":0,\\\"pushEventId\\\":\\\"test123\\\",\\\"serverPushTime\\\":\\\"2020-11-27T08:48:39Z\\\",\\\"silent\\\":true,\\\"taskName\\\":\\\"pushTest-dof\\\"}\" }",appEventTime,deviceData];
|
||||
|
||||
|
||||
NSLog(@"EventPush-NotificationService-PlayerPrefs: %@", postData);
|
||||
NSLog(@"EventPush-NotificationService-eventUrl: %@", eventUrl);
|
||||
|
||||
NSURL *url = [NSURL URLWithString:eventUrl];
|
||||
NSMutableURLRequest *httpRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
|
||||
NSData *requestData = [postData dataUsingEncoding:NSUTF8StringEncoding];
|
||||
[httpRequest setHTTPMethod:@"POST"];
|
||||
[httpRequest setValue:IPM_X_APP_ID forHTTPHeaderField:@"X-APP-ID"];
|
||||
[httpRequest setValue:IPM_TOKEN forHTTPHeaderField:@"X-ACCESS-TOKEN"];
|
||||
[httpRequest setValue:IPM_UID forHTTPHeaderField:@"X-UID"];
|
||||
[httpRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
|
||||
|
||||
[httpRequest setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
|
||||
[httpRequest setHTTPBody: requestData];
|
||||
|
||||
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
|
||||
NSURLSession *session = [NSURLSession sessionWithConfiguration:config];
|
||||
__block NSURLSessionDataTask *task = [session dataTaskWithRequest:httpRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
|
||||
if (error!=nil)
|
||||
{
|
||||
[task suspend];
|
||||
}
|
||||
else
|
||||
{
|
||||
NSString *requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
|
||||
NSLog(@"EventPush-NotificationService-response: %@", requestReply);
|
||||
[task suspend];
|
||||
}
|
||||
}];
|
||||
[task resume];
|
||||
|
||||
// Modify the notification content here...
|
||||
//self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title];
|
||||
|
||||
self.contentHandler(self.bestAttemptContent);
|
||||
}
|
||||
|
||||
- (void)serviceExtensionTimeWillExpire {
|
||||
// Called just before the extension will be terminated by the system.
|
||||
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
|
||||
self.contentHandler(self.bestAttemptContent);
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 280f79c00824a4499a2ef446aa7d00ca
|
||||
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:
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: a605997850a6a4ee79efe04dbacff91b
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
#if UNITY_IOS
|
||||
|
||||
namespace Guru.Editor
|
||||
{
|
||||
using System.IO;
|
||||
using UnityEditor;
|
||||
using UnityEditor.Callbacks;
|
||||
using Debug = UnityEngine.Debug;
|
||||
|
||||
/// <summary>
|
||||
/// 针对AmazonSDK iOS平台构建后
|
||||
/// BitCode报错的问题
|
||||
/// </summary>
|
||||
public class IOSPostProcessBuild_PodFix
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 添加内容
|
||||
/// </summary>
|
||||
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";
|
||||
|
||||
/// <summary>
|
||||
/// 构建操作
|
||||
/// 构建顺序 45-50 可以保证执行时序在MAX 自身生成podfile之后, 注入需要的逻辑
|
||||
/// AmazonSDK使用了45, 工具设为46,确保后发执行
|
||||
/// </summary>
|
||||
/// <param name="target"></param>
|
||||
/// <param name="projPath"></param>
|
||||
[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($"<color=#88ff00>=== Fix Pods BitCode bug ===</color>");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError($"=== POD not exists, exit pod hook...===");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 7418e71e42e99424c9df47a84b05b37c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: a78e5d32ead914b3f9f0a718da8594ea
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
#if UNITY_IOS
|
||||
using UnityEditor;
|
||||
using UnityEditor.iOS.Xcode;
|
||||
using UnityEditor.Callbacks;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Guru
|
||||
{
|
||||
/// <summary>
|
||||
/// SWIFT语言支持
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加Swift Support
|
||||
/// </summary>
|
||||
/// <param name="buildPath"></param>
|
||||
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
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 661b372db3634542856a44e37664649c
|
||||
timeCreated: 1673406971
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: a0af2d1a3be34a4cb6101bd2a40b4c36
|
||||
timeCreated: 1705373808
|
||||
|
|
@ -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;
|
||||
|
||||
/// <summary>
|
||||
/// 生成Android项目后执行逻辑
|
||||
/// </summary>
|
||||
/// <param name="buildPath"></param>
|
||||
public void OnPostGenerateGradleAndroidProject(string buildPath)
|
||||
{
|
||||
Debug.Log($"<color=#88ff00>---- Android Projct start build {buildPath}</color>");
|
||||
DepsOutputHelper.InstallAndRun(buildPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f8b64715449c4f23a7781dc15f5d38fe
|
||||
timeCreated: 1702349739
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取脚本路径
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 执行脚本
|
||||
/// </summary>
|
||||
/// <param name="projPath"></param>
|
||||
/// <param name="cmd"></param>
|
||||
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<string> lines = new List<string>()
|
||||
{
|
||||
$"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());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 安装和运行依赖输出器
|
||||
/// </summary>
|
||||
/// <param name="buildPath"></param>
|
||||
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}");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 831ffddddd78421b8597eac6367fd920
|
||||
timeCreated: 1702366162
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
#if UNITY_IOS
|
||||
|
||||
using System.IO;
|
||||
using UnityEditor;
|
||||
using UnityEditor.Callbacks;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Guru.Editor
|
||||
{
|
||||
public class IOSXcodeOutputDeps
|
||||
{
|
||||
// <summary>
|
||||
/// 构建操作
|
||||
/// 构建顺序 45-50 可以保证执行时序在MAX 自身生成podfile之后, 注入需要的逻辑
|
||||
/// AmazonSDK使用了45, 工具设为 > 45, 确保后发执行
|
||||
/// </summary>
|
||||
/// <param name="target"></param>
|
||||
/// <param name="projPath"></param>
|
||||
[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
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b2e00c5d9f49480988f78c88fc9d2bac
|
||||
timeCreated: 1702365324
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d7b67912d7d245e0bf67086a8e2f395a
|
||||
timeCreated: 1702349190
|
||||
|
|
@ -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
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d43d22568540f49378be159486b4e1d3
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Loading…
Reference in New Issue