Exemplo n.º 1
0
        public static void OnCocoaPodsReady(BuildTarget buildTarget, string buildPath)
        {
            if (buildTarget != BuildTarget.iOS)
            {
                return;
            }

            var editorSettings            = CASEditorSettings.Load();
            var needLocalizeUserTracking  = IsNeedLocalizeUserTrackingDescription(editorSettings);
            var needEmbedDynamicLibraries = IsNeedEmbedDynamicLibraries();

            if (!needEmbedDynamicLibraries && !needLocalizeUserTracking)
            {
                return;
            }

            var    project = OpenXCode(buildPath);
            string mainTargetGuid;
            string frameworkTargetGuid;

            GetTargetsGUID(project, out mainTargetGuid, out frameworkTargetGuid);
            if (needLocalizeUserTracking)
            {
                LocalizeUserTrackingDescription(buildPath, project, mainTargetGuid, editorSettings);
            }

            if (needEmbedDynamicLibraries)
            {
                var depManager = DependencyManager.Create(BuildTarget.iOS, Audience.Mixed, true);
                EmbedDynamicLibrariesIfNeeded(buildPath, project, mainTargetGuid, depManager);
            }

            SaveXCode(project, buildPath);
        }
Exemplo n.º 2
0
        [PostProcessBuild(47)]  //must be between 40 and 50 to ensure that it's not overriden by Podfile generation (40) and that it's added before "pod install" (50)
        public static void MainPostprocess(BuildTarget target, string buildPath)
        {
            if (target != BuildTarget.iOS)
            {
                return;
            }

            // Init Settings can be null
            var initSettings   = CASEditorUtils.GetSettingsAsset(BuildTarget.iOS, false);
            var editorSettings = CASEditorSettings.Load();
            var depManager     = DependencyManager.Create(BuildTarget.iOS, Audience.Mixed, true);

            string        plistPath = Path.Combine(buildPath, "Info.plist");
            PlistDocument plist     = new PlistDocument();

            plist.ReadFromFile(plistPath);

            UpdateGADDelayMeasurement(plist, editorSettings);
            UpdateGADAppId(plist, initSettings, depManager);
            UpdateSKAdNetworksInfo(plist);
            UpdateLSApplicationQueriesSchames(plist);
            UpdateAppTransportSecuritySettings(plist);
            SetAttributionReportEndpoint(plist, editorSettings);
            SetDefaultUserTrackingDescription(plist, editorSettings);

            File.WriteAllText(plistPath, plist.WriteToString());

            var    project = OpenXCode(buildPath);
            string mainTargetGuid;
            string frameworkTargetGuid;

            GetTargetsGUID(project, out mainTargetGuid, out frameworkTargetGuid);

            EnableSwiftLibraries(buildPath, project, mainTargetGuid, frameworkTargetGuid);
            CopyRawSettingsFile(buildPath, project, mainTargetGuid, initSettings);
            SetExecutablePath(buildPath, project, mainTargetGuid, depManager);

            SaveXCode(project, buildPath);

            if (editorSettings.generateIOSDeepLinksForPromo)
            {
                ApplyCrosspromoDynamicLinks(buildPath, mainTargetGuid, initSettings, depManager);
            }

#if UNITY_2019_3_OR_NEWER
            UpdatePodfileForUnity2019(buildPath);
#endif
            Debug.Log(CASEditorUtils.logTag + "Postrocess Build done.");
        }
 public static void ConfigureProjectForTargetPlatform()
 {
     try
     {
         var target = EditorUserBuildSettings.activeBuildTarget;
         CASPreprocessBuild.ConfigureProject(target, CASEditorSettings.Load());
         if (target == BuildTarget.Android)
         {
             TryResolveAndroidDependencies();
         }
         EditorUtility.ClearProgressBar();
         EditorUtility.DisplayDialog("Configure project",
                                     "CAS Plugin has successfully applied all required configurations to your project.",
                                     "Ok");
     }
     finally
     {
         EditorUtility.ClearProgressBar();
     }
 }
        public static string GetNewVersionOrNull(string repo, string currVersion, bool force)
        {
            try
            {
                string newVerStr = null;
                if (!force)
                {
                    var editorSettings = CASEditorSettings.Load();
                    if (!editorSettings.autoCheckForUpdatesEnabled)
                    {
                        return(null);
                    }

                    if (!HasTimePassed(editorLatestVersionTimestampPrefs + repo, 1, false))
                    {
                        newVerStr = EditorPrefs.GetString(editorLatestVersionPrefs + repo);
                    }
                }

                if (string.IsNullOrEmpty(newVerStr))
                {
                    newVerStr = GetLatestVersion(repo, currVersion);
                }
                if (newVerStr != null && newVerStr != currVersion && !currVersion.Contains("-RC"))
                {
                    var currVer = new System.Version(currVersion);
                    var newVer  = new System.Version(newVerStr);
                    if (currVer < newVer)
                    {
                        return(newVerStr);
                    }
                }
            }
            catch (Exception e)
            {
                Debug.LogException(e);
            }
            return(null);
        }
Exemplo n.º 5
0
        private void InitEditorSettingsProperties()
        {
            editorSettingsObj = new SerializedObject(CASEditorSettings.Load(true));
            autoCheckForUpdatesEnabledProp = editorSettingsObj.FindProperty("autoCheckForUpdatesEnabled");
            delayAppMeasurementGADInitProp = editorSettingsObj.FindProperty("delayAppMeasurementGADInit");
            buildPreprocessEnabledProp     = editorSettingsObj.FindProperty("buildPreprocessEnabled");
            updateGradlePluginVersionProp  = editorSettingsObj.FindProperty("updateGradlePluginVersion");
            multiDexEnabledProp            = editorSettingsObj.FindProperty("multiDexEnabled");
            exoPlayerIncludedProp          = editorSettingsObj.FindProperty("exoPlayerIncluded");
            permissionAdIdRemovedProp      = editorSettingsObj.FindProperty("permissionAdIdRemoved");

            mostPopularCountryOfUsersProp = editorSettingsObj.FindProperty("mostPopularCountryOfUsers");
            attributionReportEndpointProp = editorSettingsObj.FindProperty("attributionReportEndpoint");

            userTrackingUsageDescriptionProp = editorSettingsObj.FindProperty("userTrackingUsageDescription");

            userTrackingList = new ReorderableList(editorSettingsObj, userTrackingUsageDescriptionProp, true, true, true, true)
            {
                drawHeaderCallback  = DrawNSTrackingListHeader,
                drawElementCallback = DrawNSTrackingListElement,
                onCanRemoveCallback = DisabledRemoveLastItemFromList,
            };
        }
        public void OnPreprocessBuild(BuildTarget target, string path)
        {
#endif
            if (target != BuildTarget.Android && target != BuildTarget.iOS)
            {
                return;
            }
            try
            {
                var editorSettings = CASEditorSettings.Load();
                if (editorSettings.buildPreprocessEnabled)
                {
                    ConfigureProject(target, editorSettings);
                    EditorUtility.DisplayProgressBar("Hold on", "Prepare components...", 0.95f);
                }
            }
            catch (Exception e)
            {
                // If no errors are found then there is no need to clear the progress for the user.
                EditorUtility.ClearProgressBar();
                throw e;
            }
        }
 public static bool isUseAdvertiserIdLimited()
 {
     return(CASEditorSettings.Load().permissionAdIdRemoved);
 }
        internal static string DownloadRemoteSettings(string managerID, BuildTarget platform, CASInitSettings settings, DependencyManager deps)
        {
            const string title = "Update CAS remote settings";

            var editorSettings = CASEditorSettings.Load();

            #region Create request URL
            #region Hash
            var managerIdBytes = new UTF8Encoding().GetBytes(managerID);
            var suffix         = new byte[] { 48, 77, 101, 68, 105, 65, 116, 73, 111, 78, 104, 65, 115, 72 };
            if (platform == BuildTarget.iOS)
            {
                suffix[0] = 49;
            }
            var sourceBytes = new byte[managerID.Length + suffix.Length];
            Array.Copy(managerIdBytes, 0, sourceBytes, 0, managerIdBytes.Length);
            Array.Copy(suffix, 0, sourceBytes, managerIdBytes.Length, suffix.Length);

            var           hashBytes   = new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(sourceBytes);
            StringBuilder hashBuilder = new StringBuilder();
            for (int i = 0; i < hashBytes.Length; i++)
            {
                hashBuilder.Append(Convert.ToString(hashBytes[i], 16).PadLeft(2, '0'));
            }
            var hash = hashBuilder.ToString().PadLeft(32, '0');
            #endregion

            var urlBuilder = new StringBuilder("https://psvpromo.psvgamestudio.com/Scr/cas.php?platform=")
                             .Append(platform == BuildTarget.Android ? 0 : 1)
                             .Append("&bundle=").Append(UnityWebRequest.EscapeURL(managerID))
                             .Append("&hash=").Append(hash)
                             .Append("&lang=").Append(SystemLanguage.English)
                             .Append("&appDev=2")
                             .Append("&appV=").Append(PlayerSettings.bundleVersion)
                             .Append("&coppa=").Append(( int )settings.defaultAudienceTagged)
                             .Append("&adTypes=").Append(( int )settings.allowedAdFlags)
                             .Append("&nets=").Append(DependencyManager.GetActiveMediationPattern(deps))
                             .Append("&orient=").Append(Utils.GetOrientationId())
                             .Append("&framework=Unity_").Append(Application.unityVersion);
            if (deps != null)
            {
                var buildCode = deps.GetInstalledBuildCode();
                if (buildCode > 0)
                {
                    urlBuilder.Append("&sdk=").Append(buildCode);
                }
            }
            if (string.IsNullOrEmpty(editorSettings.mostPopularCountryOfUsers))
            {
                urlBuilder.Append("&country=").Append("US");
            }
            else
            {
                urlBuilder.Append("&country=").Append(editorSettings.mostPopularCountryOfUsers);
            }
            if (platform == BuildTarget.Android)
            {
                urlBuilder.Append("&appVC=").Append(PlayerSettings.Android.bundleVersionCode);
            }

            #endregion

            using (var loader = UnityWebRequest.Get(urlBuilder.ToString()))
            {
                try
                {
                    loader.SendWebRequest();
                    while (!loader.isDone)
                    {
                        if (EditorUtility.DisplayCancelableProgressBar(title, managerID,
                                                                       Mathf.Repeat(( float )EditorApplication.timeSinceStartup * 0.2f, 1.0f)))
                        {
                            loader.Dispose();
                            throw new Exception("Update CAS Settings canceled");
                        }
                    }
                    if (string.IsNullOrEmpty(loader.error))
                    {
                        var content = loader.downloadHandler.text.Trim();
                        if (string.IsNullOrEmpty(content))
                        {
                            throw new Exception("ManagerID [" + managerID + "] is not registered in CAS.");
                        }

                        EditorUtility.DisplayProgressBar(title, "Write CAS settings", 0.7f);
                        var data = JsonUtility.FromJson <AdmobAppIdData>(content);
                        Utils.WriteToFile(content, Utils.GetNativeSettingsPath(platform, managerID));
                        return(data.admob_app_id);
                    }
                    throw new Exception("Server response " + loader.responseCode + ": " + loader.error);
                }
                finally
                {
                    EditorUtility.ClearProgressBar();
                }
            }
        }