diff --git a/Editor/GuruBuildSuit/IOS_POST_PRIVACYINFO.meta b/Editor/GuruBuildSuit/IOS_POST_PRIVACYINFO.meta new file mode 100644 index 0000000..759d5fa --- /dev/null +++ b/Editor/GuruBuildSuit/IOS_POST_PRIVACYINFO.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7c29eec7a52a4f8a9e8638eaa0985442 +timeCreated: 1715317220 \ No newline at end of file diff --git a/Editor/GuruBuildSuit/IOS_POST_PRIVACYINFO/IOSPostProcessBuild_PrivacyInfo.cs b/Editor/GuruBuildSuit/IOS_POST_PRIVACYINFO/IOSPostProcessBuild_PrivacyInfo.cs new file mode 100644 index 0000000..e717315 --- /dev/null +++ b/Editor/GuruBuildSuit/IOS_POST_PRIVACYINFO/IOSPostProcessBuild_PrivacyInfo.cs @@ -0,0 +1,93 @@ +#if UNITY_IOS + +namespace Guru.Editor +{ + using UnityEditor; + using UnityEditor.Callbacks; + using UnityEngine; + using UnityEditor.iOS.Xcode; + using System; + using System.IO; + + public class IOSPostProcessBuild_PrivacyInfo + { + private const string XCPrivacyInfo = "PrivacyInfo.xcprivacy"; + private const string DefaultWorkdir = "Guru/BuildTools/Editor/IOS_POST_PRIVACYINFO"; + private const string SourceFileName = "PrivacyInfo.plist"; + private static string IosPrivacyInfoPath => $"{Application.dataPath}/Plugins/iOS/{SourceFileName}"; + + [PostProcessBuild(200)] + public static void OnPostProcessBuild(BuildTarget target, string buildPath) + { + if (target == BuildTarget.iOS) + { + AddPrivacyInfo(buildPath); + } + } + + /// + /// 向 XCode 添加隐私清单文件 + /// + /// + private static void AddPrivacyInfo(string buildPath) + { + if (CheckEvn()) + { + var xcprojPath = PBXProject.GetPBXProjectPath(buildPath); + var xcproj = new PBXProject(); + xcproj.ReadFromFile(xcprojPath); + + var dest = $"{buildPath}/{XCPrivacyInfo}"; + FileUtil.ReplaceFile(IosPrivacyInfoPath, dest); + + var mainTarget = xcproj.GetUnityMainTargetGuid(); + var guid = xcproj.AddFile(dest,$"{XCPrivacyInfo}", PBXSourceTree.Source); + + xcproj.AddFileToBuild(mainTarget, guid); + xcproj.WriteToFile(xcprojPath); + } + else + { + Debug.LogError("Inject iOS PrivacyInfo failed!"); + } + } + + /// + /// 工作目录 + /// + /// + private static string GetWorkdir() + { + var guids = AssetDatabase.FindAssets($"{nameof(IOSPostProcessBuild_PrivacyInfo)}"); + if (guids.Length > 0) + { + var path = AssetDatabase.GUIDToAssetPath(guids[0]); + var dir = Directory.GetParent(path).FullName; + if (Directory.Exists(dir)) return dir; + } + return DefaultWorkdir; + } + + /// + /// 检查环境 + /// + private static bool CheckEvn() + { + if (File.Exists(IosPrivacyInfoPath)) return true; + + var workdir = GetWorkdir(); + var source = $"{workdir}/{SourceFileName}"; + if (File.Exists(source)) + { + FileUtil.ReplaceFile(source, IosPrivacyInfoPath); + return true; + } + + Debug.LogError($"--- PrivacyInfo.plist not found,Check file path:{source}"); + return false; + } + + } +} + +#endif \ No newline at end of file diff --git a/Editor/GuruBuildSuit/IOS_POST_PRIVACYINFO/IOSPostProcessBuild_PrivacyInfo.cs.meta b/Editor/GuruBuildSuit/IOS_POST_PRIVACYINFO/IOSPostProcessBuild_PrivacyInfo.cs.meta new file mode 100644 index 0000000..1ce3469 --- /dev/null +++ b/Editor/GuruBuildSuit/IOS_POST_PRIVACYINFO/IOSPostProcessBuild_PrivacyInfo.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3405624b18974efa8564223e50bf0c55 +timeCreated: 1713372443 \ No newline at end of file diff --git a/Editor/GuruBuildSuit/IOS_POST_PRIVACYINFO/PrivacyInfo.plist b/Editor/GuruBuildSuit/IOS_POST_PRIVACYINFO/PrivacyInfo.plist new file mode 100644 index 0000000..a8f14c5 --- /dev/null +++ b/Editor/GuruBuildSuit/IOS_POST_PRIVACYINFO/PrivacyInfo.plist @@ -0,0 +1,158 @@ + + + + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + https://consent.adjust.com + https://consent.adjust.net.in + https://consent.adjust.world + https://consent.adjust.cn + https://consent.eu.adjust.com + https://consent.tr.adjust.com + https://consent.us.adjust.com + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + + + + NSPrivacyCollectedDataTypes + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeDeviceID + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeAdvertisingData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising + NSPrivacyCollectedDataTypePurposeDeveloperAdvertising + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeProductInteraction + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + NSPrivacyCollectedDataTypePurposeAppFunctionality + NSPrivacyCollectedDataTypePurposeProductPersonalization + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeOtherDataTypes + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising + NSPrivacyCollectedDataTypePurposeAnalytics + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeCrashData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + NSPrivacyCollectedDataTypePurposeAnalytics + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeOtherUsageData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeAdvertisingData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeDeviceID + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeUserID + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising + + + + + diff --git a/Editor/GuruBuildSuit/IOS_POST_PRIVACYINFO/PrivacyInfo.plist.meta b/Editor/GuruBuildSuit/IOS_POST_PRIVACYINFO/PrivacyInfo.plist.meta new file mode 100644 index 0000000..b785519 --- /dev/null +++ b/Editor/GuruBuildSuit/IOS_POST_PRIVACYINFO/PrivacyInfo.plist.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f04c7fe558ae4a1bbb278ed19c5be0f2 +timeCreated: 1715315327 \ No newline at end of file