diff --git a/.gitignore b/.gitignore
index 6efde05..276eae3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,6 @@
# This .gitignore file should be placed at the root of your Unity project directory
#
-# Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore
+# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore
#
/[Ll]ibrary/
/[Tt]emp/
@@ -8,16 +8,20 @@
/[Bb]uild/
/[Bb]uilds/
/[Ll]ogs/
+/[Uu]ser[Ss]ettings/
+
+# MemoryCaptures can get excessive in size.
+# They also could contain extremely sensitive data
/[Mm]emoryCaptures/
-# Never ignore Asset meta data
-!/[Aa]ssets/**/*.meta
+# Recordings can get excessive in size
+/[Rr]ecordings/
# Uncomment this line if you wish to ignore the asset store tools plugin
# /[Aa]ssets/AssetStoreTools*
# Autogenerated Jetbrains Rider plugin
-[Aa]ssets/Plugins/Editor/JetBrains*
+/[Aa]ssets/Plugins/Editor/JetBrains*
# Visual Studio cache directory
.vs/
@@ -53,8 +57,45 @@ sysinfo.txt
# Builds
*.apk
+*.aab
*.unitypackage
+*.app
# Crashlytics generated file
crashlytics-build.properties
+# Packed Addressables
+/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin*
+
+# Temporary auto-generated Android Assets
+/[Aa]ssets/[Ss]treamingAssets/aa.meta
+/[Aa]ssets/[Ss]treamingAssets/aa/*
+
+/automation/
+/build/
+/download_artifacts_test_output/
+/test_output/
+/gradle.properties
+/.vscode/
+.vsconfig
+
+.gradle/
+
+/plugin/Assembly-CSharp-Editor.csproj
+/plugin/Assets/PlayServicesResolver/Editor/JarResolverLib.dll
+/plugin/Assets/Plugins/
+/plugin/Assets/Plugins.meta
+/plugin/Assets/StyleCop.Cache
+/plugin/Assets/StyleCop.Cache.meta
+/plugin/Library/
+/plugin/ProjectSettings/
+/plugin/Temp/
+/plugin/obj/
+/plugin/plugin.sln
+/plugin/plugin.userprefs
+/source/ExportUnityPackage/__pycache__/
+
+/source/.idea/
+/unity_dlls/
+
+.DS_Store
\ No newline at end of file
diff --git a/Assets/Editor/PostBuildProcessor.cs b/Assets/Editor/PostBuildProcessor.cs
index 547adcf..f9d6c1d 100644
--- a/Assets/Editor/PostBuildProcessor.cs
+++ b/Assets/Editor/PostBuildProcessor.cs
@@ -3,50 +3,149 @@
using UnityEditor;
using UnityEditor.Callbacks;
using System.Collections;
+using System.Xml;
+using System.Xml.Serialization;
+using System.Collections.Generic;
using UnityEditor.iOS.Xcode;
using System.IO;
+using System;
-public class PostBuildProcessor : MonoBehaviour {
+namespace TapResearch {
-#if UNITY_CLOUD_BUILD
- public static void OnPostprocessBuildiOS (string exportPath) {
- PostprocessBuild (BuildTarget.iPhone, exportPath);
- }
-#endif
+ public class PostProcessIOS : MonoBehaviour {
+
+ //---------------------------------------------------------------------------------------------
+ [PostProcessBuildAttribute(45)]
+ private static void OnPostProcessBuildiOS_45(BuildTarget target, string buildPath) {
- [PostProcessBuild]
- public static void OnPostprocessBuild (BuildTarget buildTarget, string path) {
- if (buildTarget != BuildTarget.iOS) {
- Debug.LogWarning ("Build target is not iOS. Postprocess build will not run.");
- return;
+ if (target == BuildTarget.iOS) {
+ //Debug.Log("(45) runtime version: " + Application.unityVersion);
+
+ #if !UNITY_CLOUD_BUILD
+ string podFileName = buildPath + "/Podfile";
+ PostprocessBuild(target, buildPath);
+ #endif
+ }
}
-#if !UNITY_CLOUD_BUILD
- PostprocessBuild (buildTarget, path);
-#endif
-
- }
+ //---------------------------------------------------------------------------------------------
+ // This is called after the Cocoapod has been "installed"
+ [PostProcessBuildAttribute(9999)]
+ private static void OnPostProcessBuildiOS_9999(BuildTarget target, string buildPath) {
+
+ if (target == BuildTarget.iOS) {
+ //Debug.Log("(9999) runtime version: " + Application.unityVersion);
+
+ #if !UNITY_CLOUD_BUILD
+ string podFileName = buildPath + "/Podfile";
+ AddFrameworkToProjectEmbeddedList(target, buildPath);
+ #endif
+ }
+ }
+
+ private const string XCFRAMEWORK_ORIGIN_PATH = "Pods/TapResearch";
+ private const string XCFRAMEWORK_NAME = "TapResearchSDK.xcframework";
+
+ private const string FRAMEWORK_TARGET_PATH = "Frameworks";
+
+ private const string FRAMEWORK_ORIGIN_PATH = "Pods/TapResearch";
+ private const string FRAMEWORK_NAME = "TapResearchSDK.framework";
+
+ //---------------------------------------------------------------------------------------------
+ private static void AddFrameworkToProjectEmbeddedList(BuildTarget buildTarget, string path) {
+
+ //Debug.Log("AddFrameworkToProjectEmbeddedList -----------------------------------------------------------");
+ string projectPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
+ PBXProject project = new PBXProject();
+ project.ReadFromString(File.ReadAllText(projectPath));
- private static void PostprocessBuild (BuildTarget buildTarget, string path) {
- Debug.Log ("PostprocessBuild");
+ #if (UNITY_2019_3_OR_NEWER)
+ string target = project.GetUnityMainTargetGuid();
+ #else
+ string target = project.TargetGuidByName("Unity-iPhone");
+ #endif
- string projectPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
- PBXProject project = new PBXProject ();
- project.ReadFromString (File.ReadAllText (projectPath));
+ // add the framework to the project and enable 'Embed & Sign' for it
+ string sourcePath;
+ string destPath;
+ if (Application.unityVersion.Contains("2018")) {
+ sourcePath = path + "/" + FRAMEWORK_ORIGIN_PATH + "/" + XCFRAMEWORK_NAME + "/ios-arm64_armv7/" + FRAMEWORK_NAME;
+ destPath = path + "/" + FRAMEWORK_TARGET_PATH + "/" + FRAMEWORK_NAME;
+ }
+ else {
+ sourcePath = path + "/" + XCFRAMEWORK_ORIGIN_PATH + "/" + XCFRAMEWORK_NAME;
+ destPath = path + "/" + FRAMEWORK_TARGET_PATH + "/" + XCFRAMEWORK_NAME;
+ }
- string target = project.TargetGuidByName ("Unity-iPhone");
+ Debug.Log(" starting copy from " + sourcePath + " to " + destPath);
+ CopyDirectory(sourcePath, destPath);
+ string fileGuid = project.AddFile(destPath, destPath);
+ Debug.Log("FILE GUID = " + fileGuid);
+ UnityEditor.iOS.Xcode.Extensions.PBXProjectExtensions.AddFileToEmbedFrameworks(project, target, fileGuid);
- // Required Frameworks
- project.AddFrameworkToProject (target, "SystemConfiguration.framework", false);
- project.AddFrameworkToProject (target, "Security.framework", false);
- project.AddFrameworkToProject (target, "AdSupport.framework", false);
- project.AddFrameworkToProject (target, "MobileCoreServices.framework", false);
+ File.WriteAllText(projectPath, project.WriteToString());
+ }
+
+ //---------------------------------------------------------------------------------------------
+ private static void PostprocessBuild(BuildTarget buildTarget, string path) {
+
+ //Debug.Log("PostprocessBuild -----------------------------------------------------------");
+ //Debug.Log("buildPath = " + path);
+
+ string projectPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
+ PBXProject project = new PBXProject();
+ project.ReadFromString(File.ReadAllText(projectPath));
+
+ #if (UNITY_2019_3_OR_NEWER)
+ string target = project.GetUnityMainTargetGuid();
+ #else
+ string target = project.TargetGuidByName("Unity-iPhone");
+ #endif
+
+ // Required Frameworks
+ project.AddFrameworkToProject(target, "SystemConfiguration.framework", false);
+ project.AddFrameworkToProject(target, "Security.framework", false);
+ project.AddFrameworkToProject(target, "AdSupport.framework", false);
+ project.AddFrameworkToProject(target, "CoreServices.framework", false);
- // Required Linker Flags
- project.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC");
+ // Required Linker Flags
+ project.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC");
+ project.AddBuildProperty(target, "SWIFT_COMPILATION_MODE", "wholemodule");
+
+ //Debug.Log("Getting SWIFT_VERSION");
+ string swiftVersion = project.GetBuildPropertyForAnyConfig(target, "SWIFT_VERSION");
+ //Debug.Log("SWIFT_VERSION = " + swiftVersion);
+ if (swiftVersion == null || swiftVersion.Length == 0) {
+ //Debug.Log("Adding SWIFT_VERSION = 5");
+ project.AddBuildProperty(target, "SWIFT_VERSION", "5");
+ }
+ else {
+ //Debug.Log("Setting SWIFT_VERSION = 5");
+ project.SetBuildProperty(target, "SWIFT_VERSION", "5");
+ }
+
+ File.WriteAllText(projectPath, project.WriteToString());
+ }
+
+ //---------------------------------------------------------------------------------------------
+ private static void CopyDirectory(string sourcePath, string destPath) {
+
+ //Debug.Log("copy from " + sourcePath + " to " + destPath);
+ if (!Directory.Exists(destPath)) {
+ Directory.CreateDirectory(destPath);
+ }
+
+ foreach (string file in Directory.GetFiles(sourcePath)) {
+ if (!file.Contains(".meta")) {
+ File.Copy(file, Path.Combine(destPath, Path.GetFileName(file)));
+ }
+ }
+ foreach (string dir in Directory.GetDirectories(sourcePath)) {
+ CopyDirectory(dir, Path.Combine(destPath, Path.GetFileName(dir)));
+ }
+ }
+ }
- File.WriteAllText (projectPath, project.WriteToString ());
- }
}
#endif
diff --git a/Assets/Editor/TapResearchDependencies.xml b/Assets/Editor/TapResearchDependencies.xml
new file mode 100644
index 0000000..6fbeb7a
--- /dev/null
+++ b/Assets/Editor/TapResearchDependencies.xml
@@ -0,0 +1,21 @@
+
+
+
+
+ https://artifactory.tools.tapresearch.io/artifactory/tapresearch-android-sdk
+ https://maven.google.com
+
+
+
+
+
+
+
+
+
+ https://github.com/CocoaPods/Specs.git
+
+
+
+
+
diff --git a/Assets/Editor/TapResearchDependencies.xml.meta b/Assets/Editor/TapResearchDependencies.xml.meta
new file mode 100644
index 0000000..e650459
--- /dev/null
+++ b/Assets/Editor/TapResearchDependencies.xml.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: d8a44069c2ae74610b5b9427de7c6359
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ExternalDependencyManager.meta b/Assets/ExternalDependencyManager.meta
new file mode 100644
index 0000000..cad133c
--- /dev/null
+++ b/Assets/ExternalDependencyManager.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 3a5a853ae64ab4d498e5e62e8e005ec1
+folderAsset: yes
+timeCreated: 1594237844
+licenseType: Free
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ExternalDependencyManager/Editor.meta b/Assets/ExternalDependencyManager/Editor.meta
new file mode 100644
index 0000000..f5c8375
--- /dev/null
+++ b/Assets/ExternalDependencyManager/Editor.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: d0d8d9b22978340a7a4de2bc68a0c8b3
+folderAsset: yes
+timeCreated: 1594237844
+licenseType: Free
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ExternalDependencyManager/Editor/CHANGELOG.md b/Assets/ExternalDependencyManager/Editor/CHANGELOG.md
new file mode 100755
index 0000000..1a61700
--- /dev/null
+++ b/Assets/ExternalDependencyManager/Editor/CHANGELOG.md
@@ -0,0 +1,1228 @@
+# Version 1.2.156 - June 10, 2020
+* All: Described EDM4U analytics data usage in readme.
+* Android Resolver: Fixed that the generated local repo assets contains
+ redundent labels which are causing Version Handler to failed while
+ uninstalling packages.
+* Android Resolver: Fixed that the repo url injected into mainTemplate.gradle
+ is incorrect when Unity is configured to export gradle project.
+* Android Resolver: Limited to only create local Maven repo when the source
+ repo contains ".srcaar" file.
+
+# Version 1.2.155 - May 14, 2020
+* All: Fixed compiler error when build with Unity 5.4 or below due to the
+ usage of Rect.zero.
+* All: Ignore cases when checking command line arguments.
+
+# Version 1.2.154 - May 14, 2020
+* All: Make each MultiSelectWindow for different purposes to have its own
+ unique window.
+* All: Replace all dialog with DialogWindow which is implemented from
+ EditorWindow.
+* Package Manager Resolver: Clarify how manifest.json will be changed in Package
+ Manager Resolver window.
+
+# Version 1.2.153 - Apr 24, 2020
+* Android Resolver: Fixed an exception when repainting the Android resolution
+ window in Unity 2019.3.x.
+
+# Version 1.2.152 - Apr 17, 2020
+* Version Handler: Fixed exception when waiting for enabled editor DLLs to
+ load.
+* Android Resolver: Fixed regression when using a Custom Gradle Template
+ on Windows.
+
+# Version 1.2.151 - Apr 16, 2020
+## Bug Fixes
+* Version Handler: When waiting for newly enabled editor DLLs to load, ignore
+ all DLLs that do not have a file-system location.
+* Android Resolver: Fixed resolution when using a Custom Gradle Template with
+ libraries stored in a local maven repository distributed with a plugin
+ installed with the Unity Package Manager.
+
+# Version 1.2.150 - Apr 9, 2020
+## Bug Fixes
+* All: The new packaging script when run on MacOS was generating a
+ .unitypackage archive that could not be read by Unity on Windows.
+ This release simply repackages the plugin with tar/gzip to fix the problem.
+
+# Version 1.2.149 - Apr 8, 2020
+## Bug Fixes
+* Package Manager Resolver: Fixed spurious error message when resuming
+ migration after installing a UPM package.
+
+# Version 1.2.148 - Apr 8, 2020
+## Bug Fixes
+* Package Manager Resolver: Fixed an exception when resuming migration
+ after installing a UPM package.
+
+# Version 1.2.147 - Apr 8, 2020
+## Bug Fixes
+* Version Handler: Fixed alias traversal bug which caused problems when
+ migrating from installed .unitypackage files to UPM packages.
+
+# Version 1.2.146 - Apr 8, 2020
+## Bug Fixes
+* Version Handler: Fixed exception in manifest parsing when a manifest is
+ detected with no aliases.
+
+# Version 1.2.145 - Apr 2, 2020
+## New Features
+* Package Manager Resolver: Added a method to migrate Version Handler
+ managed packages installed via `.unitypackage` to Unity Package Manager
+ packages. This is initially used to migrate the External Dependency Manager
+ to UPM.
+
+## Changes
+* All: Verbose logging is now no longer automatically enabled in batch mode
+ across all components. Instead logging can be configured using each
+ component's verbose logging setting or by using the `-gvh_log_debug` command
+ line flag when starting Unity.
+* Version Handler: Sped up version handler updates when the app domain isn't
+ reloaded.
+
+## Bug Fixes
+* Version Handler: Fixed the display of the obsolete files clean up dialog
+ when the asset database refreshes.
+* Version Handler: Improved reliability of callback from
+ the VersionHandler.UpdateCompleteMethods event when an asset database
+ refresh occurs.
+* Version Handler: Fixed duplicate exportPath labels when 'Assets/' is the
+ root of paths assigned to files.
+* Version Handler: Handle empty lines in manifest files.
+
+# Version 1.2.144 - Mar 23, 2020
+## Changed
+* iOS Resolver: Removed the ability to configure the Xcode target a Cocoapod
+ is added to.
+
+## Bug Fixes
+* iOS Resolver: Reverted support for adding Cocoapods to multiple targets as
+ it caused a regression (exception thrown during post-build step) in some
+ versions of Unity.
+
+# Version 1.2.143 - Mar 20, 2020
+## Bug Fixes
+* Android Resolver: Fixed caching of resolution state which was causing
+ the resolver to always run when no dependencies had changed.
+
+# Version 1.2.142 - Mar 19, 2020
+## Changes
+* Package Manager Resolver: Enabled auto-add by default.
+
+# Version 1.2.141 - Mar 19, 2020
+## Bug Fixes
+* Fixed a bug when retrieving project settings. If a plugin was configured
+ to fetch project settings, if a setting was fetched (e.g "foo") and this
+ setting existed in the system settings but not the project settings the
+ system value would override the default value leading to unexpected
+ behavior.
+* Fixed a warning when caching web request classes in Unity 5.6.
+
+# Version 1.2.140 - Mar 19, 2020
+## Bug Fixes
+* Fixed measurement reporting in Unity 5.x.
+* Version Handler: Fixed NullReferenceException when an asset doesn't have
+ an AssetImporter.
+
+# Version 1.2.139 - Mar 18, 2020
+## Changed
+* Added documentation to the built plugin.
+
+# Version 1.2.138 - Mar 17, 2020
+## New Features
+* Package Manager Resolver: Added the Package Manager Resolver
+ component that allows developers to easily boostrap Unity Package Manager
+ (UPM) registry addition using unitypackage plugins.
+* Version Handler: Added a window that allows plugins to managed by the
+ Version Handler to be uninstalled.
+* Version Handler: Added support for displaying installed plugins.
+* Version Handler: Added support for moving files in plugins to their install
+ locations (if the plugin has been configured to support this).
+* iOS Resolver: Added the ability to configure the Xcode target a Cocoapod is
+ added to.
+
+## Bug Fixes
+* Fixed upgrade from version 1.2.137 and below after the plugin rename to
+ EDM4U broke the upgrade process.
+* Android Resolver: Worked around PlayerSettings.Android.targetSdkVersion
+ returning empty names for some values in 2019.x.
+* Version Handler: Fixed the display of the obsolete files clean up window.
+* Version Handler: Fixed managed file check when assets are modified in the
+ project after plugin import.
+
+# Version 1.2.137 - Mar 6, 2020
+## Changed
+* Renamed package to External Package Manager for Unity (EDM4U).
+ We changed this to reflect what this plugin is doing today which is far more
+ than the original scope which just consisted of importing jar files from the
+ Android SDK maven repository.
+ Scripts that used to pull `play-services-resolver*.unitypackage` will now have
+ to request `external-dependency-manager*.unitypackage` instead.
+ We'll still be shipping a `play-services-resolver*_manifest.txt` file to
+ handle upgrading from older versions of the plugin.
+
+## New Features
+* All Components: Added reporting of usage so that we can remotely detect
+ errors and target improvements.
+* Android Resolver: Added support for *Dependencies.xml files in Unity Package
+ Manager packages.
+* iOS Resolver: Added support for *Dependencies.xml files in Unity Package
+ Manager packages.
+
+## Bug Fixes
+* Version Handler: Disabled attempts to disable asset metadata modification
+ when assets are in a Unity Package Manager managed package.
+
+# Version 1.2.136 - Feb 19, 2019
+## Bug Fixes
+* Android Resolver: Fixed OpenJDK path discovery in Unity 2019.3.1.
+
+# Version 1.2.135 - Dec 5, 2019
+## Bug Fixes
+* All Components: Fixed stack overflow when loading project settings.
+
+# Version 1.2.134 - Dec 4, 2019
+## Bug Fixes
+* All Components: Fixed an issue which caused project settings to be cleared
+ when running in batch mode.
+
+# Version 1.2.133 - Nov 18, 2019
+## Bug Fixes
+* All Components: Failure to save project settings will now report an error
+ to the log rather than throwing an exception.
+
+# Version 1.2.132 - Nov 11, 2019
+## Bug Fixes
+* Android Resolver: Worked around expansion of DIR_UNITYPROJECT on Windows
+ breaking Gradle builds when used as part of a file URI.
+* Android Resolver: mainTemplate.gradle is only written if it needs to be
+ modified.
+
+# Version 1.2.131 - Oct 29, 2019
+## Bug Fixes
+* Version Handler: Improved execution of events on the main thread in batch
+ mode.
+* Version Handler: Improved log level configuration at startup.
+* Version Handler: Improved performance of class lookup in deferred method
+ calls.
+* Version Handler: Fixed rename to enable / disable for editor assets.
+* iOS Resolver: Improved log level configuration at startup.
+* Android Resolver: Improved local maven repo path reference in
+ mainTemplate.gradle using DIR_UNITYPROJECT. DIR_UNITYPROJECT by Unity
+ to point to the local filesystem path of the Unity project when Unity
+ generates the Gradle project.
+
+# Version 1.2.130 - Oct 23, 2019
+## New Features
+* iOS Resolver: Added support for modifying the Podfile before `pod install`
+ is executed.
+
+## Bug Fixes
+* Version Handler: Fixed invalid classname error when calling
+ `VersionHandler.UpdateVersionedAssets()`.
+
+# Version 1.2.129 - Oct 2, 2019
+## Bug Fixes
+* iOS Resolver: Changed Cocoapod integration in Unity 2019.3+ to
+ only add Pods to the UnityFramework target.
+
+# Version 1.2.128 - Oct 1, 2019
+## Bug Fixes
+* iOS Resolver: Fixed Cocoapod project integration mode with Unity
+ 2019.3+.
+
+# Version 1.2.127 - Sep 30, 2019
+## Changes
+* Android Resolver: All Android Resolver settings File paths are now
+ serialized with POSIX directory separators.
+
+# Version 1.2.126 - Sep 27, 2019
+## Changes
+* Android Resolver: File paths are now serialized with POSIX directory
+ separators.
+## Bug Fixes
+* Android Resolver: Fixed resolution when the parent directory of a Unity
+ project contains a Gradle project (i.e `settings.gradle` file).
+
+# Version 1.2.125 - Sep 23, 2019
+## Bug Fixes
+* All components: Silenced a warning about not being able to set the console
+ encoding to UTF8.
+* Android Resolver: Worked around broken AndroidSDKTools class in some
+ versions of Unity.
+* iOS Resolver: Fixed iOS target SDK version check
+* Version Handler: Changed clean up obsolete files window so that it doesn't
+ exceed the screen size.
+
+# Version 1.2.124 - Jul 28, 2019
+## Bug Fixes
+* All components: Fixed regression with source control integration when using
+ Unity 2019.1+.
+
+# Version 1.2.123 - Jul 23, 2019
+## New Features
+* All components: Source control integration for project settings.
+## Changes
+* Android Resolver: Removed AAR cache as it now makes little difference to
+ incremental resolution performance.
+* Android Resolver: Improved embedded resource management so that embedded
+ resources should upgrade when the plugin is updated without restarting
+ the Unity editor.
+## Bug Fixes
+* Version Handler: Fixed InvokeMethod() and InvokeStaticMethod() when calling
+ methods that have interface typed arguments.
+
+# Version 1.2.122 - Jul 2, 2019
+## Bug Fixes
+* iOS Resolver: Worked around Unity not loading the iOS Resolver DLL as it
+ referenced the Xcode extension in a public interface. The iOS Resolver
+ DLL still references the Xcode extension internally and just handles
+ missing type exceptions dynamically.
+
+# Version 1.2.121 - Jun 27, 2019
+## Bug Fixes
+* Android Resolver: Fixed warning about missing Packages folder when loading
+ XML dependencies files in versions of Unity without the package manager.
+* Android Resolver: Fixed resolution window progress bar exceeding 100%.
+* Android Resolver: If AndroidX is detected in the set of resolved libraries,
+ the user will be prompted to enable the Jetifier.
+* Android Resolver: Improved text splitting in text area windows.
+* iOS Resolver: Added support for Unity's breaking changes to the Xcode API
+ in 2019.3.+. Cocoapods are now added to build targets, Unity-iPhone and
+ UnityFramework in Unity 2019.3+.
+
+# Version 1.2.120 - Jun 26, 2019
+## New Features
+* Android Resolver: Added support for loading *Dependencies.xml files from
+ Unity Package Manager packages.
+* Android Resolver: Resolution window is now closed if resolution runs as
+ a pre-build step.
+* iOS Resolver: Added support for loading *Dependencies.xml files from
+ Unity Package Manager packages.
+## Bug Fixes
+* Android Resolver: Fixed generation of relative repo paths when using
+ mainTemplate.gradle resolver.
+* Android Resolver: Fixed copy of .srcaar to .aar files in repos embedded in a
+ project when a project path has characters (e.g whitespace) that are escaped
+ during conversion to URIs.
+* Android Resolver: Fixed auto-resolution always running if the Android SDK
+ is managed by Unity Hub.
+
+# Version 1.2.119 - Jun 19, 2019
+## Bug Fixes
+* Android Resolver: Fixed error reported when using Jetifier integration
+ in Unity 2018+ if the target SDK is set to "highest installed".
+
+# Version 1.2.118 - Jun 18, 2019
+## New Features
+* Android Resolver: Added initial
+ [Jetifier](https://developer.android.com/studio/command-line/jetifier)
+ integration which simplifies
+ [migration](ttps://developer.android.com/jetpack/androidx/migrate)
+ to Jetpack ([AndroidX](https://developer.android.com/jetpack/androidx))
+ libraries in cases where all dependencies are managed by the Android
+ Resolver.
+ This can be enabled via the `Use Jetifier` option in the
+ `Assets > Play Services Resolver > Android Resolver > Settings` menu.
+ Caveats:
+ - If your project contains legacy Android Support Library .jar and .aar
+ files, these files will need to be removed and replaced with references to
+ artifacts on Maven via `*Dependencies.xml` files so that the Jetifier
+ can map them to Jetpack (AndroidX) libraries.
+ For example, remove the file `support-v4-27.0.2.jar` and replace it with
+ `` in a
+ `*Dependencies.xml` file.
+ - If your project contains .jar or .aar files that use the legacy Android
+ Support Libraries, these will need to be moved into a local Maven repo
+ [See this guide](https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html)
+ and then these files should be removed from your Unity project and instead
+ referenced via `*Dependencies.xml` files so that the Jetifier can
+ patch them to reference the Jetpack lirbaries.
+
+## Bug Fixes
+* Android Resolver: Disabled version locking of com.android.support:multidex
+ does not use the same versioning scheme as other legacy Android support
+ libraries.
+* Version Handler: Made Google.VersionHandler.dll's asset GUID stable across
+ releases. This faciliates error-free import into projects where
+ Google.VersionHandler.dll is moved from the default install location.
+
+# Version 1.2.117 - Jun 12, 2019
+## Bug Fixes
+* Android Resolver: Fix copying of .srcaar to .aar files for
+ mainTemplate.gradle resolution. PluginImporter configuration was previously
+ not being applied to .aar files unless the Unity project was saved.
+
+# Version 1.2.116 - Jun 7, 2019
+## Bug Fixes
+* Android Resolver: Fixed resolution of Android dependencies without version
+ specifiers.
+* Android Resolver: Fixed Maven repo not found warning in Android Resolver.
+* Android Resolver: Fixed Android Player directory not found exception in
+ Unity 2019.x when the Android Player isn't installed.
+
+# Version 1.2.115 - May 28, 2019
+## Bug Fixes
+* Android Resolver: Fixed exception due to Unity 2019.3.0a4 removing
+ x86 from the set of supported ABIs.
+
+# Version 1.2.114 - May 27, 2019
+## New Features
+* Android Resolver: Added support for ABI stripping when using
+ mainTemplate.gradle. This only works with AARs stored in repos
+ on the local filesystem.
+
+# Version 1.2.113 - May 24, 2019
+## New Features
+* Android Resolver: If local repos are moved, the plugin will search the
+ project for matching directories in an attempt to correct the error.
+* Version Handler: Files can be now targeted to multiple build targets
+ using multiple "gvh_" asset labels.
+## Bug Fixes
+* Android Resolver: "implementation" or "compile" are now added correctly
+ to mainTemplate.gradle in Unity versions prior to 2019.
+
+# Version 1.2.112 - May 22, 2019
+## New Features
+* Android Resolver: Added option to disable addition of dependencies to
+ mainTemplate.gradle.
+ See `Assets > Play Services Resolver > Android Resolver > Settings`.
+* Android Resolver: Made paths to local maven repositories in
+ mainTemplate.gradle relative to the Unity project when a project is not
+ being exported.
+## Bug Fixes
+* Android Resolver: Fixed builds with mainTemplate.gradle integration in
+ Unity 2019.
+* Android Resolver: Changed dependency inclusion in mainTemplate.gradle to
+ use "implementation" or "compile" depending upon the version of Gradle
+ included with Unity.
+* Android Resolver: Gracefully handled exceptions if the console encoding
+ can't be modified.
+* Android Resolver: Now gracefully fails if the AndroidPlayer directory
+ can't be found.
+
+# Version 1.2.111 - May 9, 2019
+## Bug Fixes
+* Version Handler: Fixed invocation of methods with named arguments.
+* Version Handler: Fixed occasional hang when the editor is compiling
+ while activating plugins.
+
+# Version 1.2.110 - May 7, 2019
+## Bug Fixes
+* Android Resolver: Fixed inclusion of some srcaar artifacts in builds with
+ Gradle builds when using mainTemplate.gradle.
+
+# Version 1.2.109 - May 6, 2019
+## New Features:
+* Added links to documentation from menu.
+* Android Resolver: Added option to auto-resolve Android libraries on build.
+* Android Resolver: Added support for packaging specs of Android libraries.
+* Android Resolver: Pop up a window when displaying Android dependencies.
+
+## Bug Fixes
+* Android Resolver: Support for Unity 2019 Android SDK and JDK install locations
+* Android Resolver: e-enable AAR explosion if internal builds are enabled.
+* Android Resolver: Gracefully handle exceptions on file deletion.
+* Android Resolver: Fixed Android Resolver log spam on load.
+* Android Resolver: Fixed save of Android Resolver PromptBeforeAutoResolution
+ setting.
+* Android Resolver: Fixed AAR processing failure when an AAR without
+ classes.jar is found.
+* Android Resolver: Removed use of EditorUtility.DisplayProgressBar which
+ was occasionally left displayed when resolution had completed.
+* Version Handler: Fixed asset rename to disable when a disabled file exists.
+
+# Version 1.2.108 - May 3, 2019
+## Bug Fixes:
+* Version Handler: Fixed occasional hang on startup.
+
+# Version 1.2.107 - May 3, 2019
+## New Features:
+* Version Handler: Added support for enabling / disabling assets that do not
+ support the PluginImporter, based upon build target selection.
+* Android Resolver: Added support for the global specification of maven repos.
+* iOS Resolver: Added support for the global specification of Cocoapod sources.
+
+# Version 1.2.106 - May 1, 2019
+## New Features
+* iOS Resolver: Added support for development pods in Xcode project integration
+ mode.
+* iOS Resolver: Added support for source pods with resources in Xcode project
+ integration mode.
+
+# Version 1.2.105 - Apr 30, 2019
+## Bug fixes
+* Android Resolver: Fixed reference to Java tool path in logs.
+* Android and iOS Resolvers: Changed command line execution to emit a warning
+ rather than throwing an exception and failing, when it is not possible to
+ change the console input and output encoding to UTF-8.
+* Android Resolver: Added menu option and API to delete resolved libraries.
+* Android Resolver: Added menu option and API to log the repos and libraries
+ currently included in the project.
+* Android Resolver: If Plugins/Android/mainTemplate.gradle file is present and
+ Gradle is selected as the build type, resolution will simply patch the file
+ with Android dependencies specified by plugins in the project.
+
+# Version 1.2.104 - Apr 10, 2019
+## Bug Fixes
+* Android Resolver: Changed Android ABI selection method from using whitelisted
+ Unity versions to type availability. This fixes an exception on resolution
+ in some versions of Unity 2017.4.
+
+# Version 1.2.103 - Apr 2, 2019
+## Bug Fixes
+* Android Resolver: Whitelisted Unity 2017.4 and above with ARM64 support.
+* Android Resolver: Fixed Java version check to work with Java SE 12 and above.
+
+# Version 1.2.102 - Feb 13, 2019
+## Bug Fixes
+* Android Resolver: Fixed the text overflow on the Android Resolver
+ prompt before initial run to fit inside the buttons for
+ smaller screens.
+
+# Version 1.2.101 - Feb 12, 2019
+## New Features
+* Android Resolver: Prompt the user before the resolver runs for the
+ first time and allow the user to elect to disable from the prompt.
+* Android Resolver: Change popup warning when resolver is disabled
+ to be a console warning.
+
+# Version 1.2.100 - Jan 25, 2019
+## Bug Fixes
+* Android Resolver: Fixed AAR processing sometimes failing on Windows
+ due to file permissions.
+
+# Version 1.2.99 - Jan 23, 2019
+## Bug Fixes
+* Android Resolver: Improved performance of project property polling.
+* Version Handler: Fixed callback of VersionHandler.UpdateCompleteMethods
+ when the update process is complete.
+
+# Version 1.2.98 - Jan 9, 2019
+## New Features
+* iOS Resolver: Pod declaration properties can now be set via XML pod
+ references. For example, this can enable pods for a subset of build
+ configurations.
+## Bug Fixes
+* iOS Resolver: Fixed incremental builds after local pods support caused
+ regression in 1.2.96.
+
+# Version 1.2.97 - Dec 17, 2018
+## Bug Fixes
+* Android Resolver: Reduced memory allocation for logic that monitors build
+ settings when auto-resolution is enabled. If auto-resolution is disabled,
+ almost all build settings are no longer polled for changes.
+
+# Version 1.2.96 - Dec 17, 2018
+## Bug Fixes
+* Android Resolver: Fixed repacking of AARs to exclude .meta files.
+* Android Resolver: Only perform auto-resolution on the first scene while
+ building.
+* Android Resolver: Fixed parsing of version ranges that include whitespace.
+* iOS Resolver: Added support for local development pods.
+* Version Handler: Fixed Version Handler failing to rename some files.
+
+# Version 1.2.95 - Oct 23, 2018
+## Bug Fixes:
+* Android Resolver: Fixed auto-resolution running in a loop in some scenarios.
+
+# Version 1.2.94 - Oct 22, 2018
+## Bug Fixes
+* iOS Resolver: Added support for PODS_TARGET_SRCROOT in source Cocoapods.
+
+# Version 1.2.93 - Oct 22, 2018
+## Bug Fixes
+* Android Resolver: Fixed removal of Android libraries on auto-resolution when
+ `*Dependencies.xml` files are deleted.
+
+# Version 1.2.92 - Oct 2, 2018
+## Bug Fixes
+* Android Resolver: Worked around auto-resolution hang on Windows if
+ resolution starts before compilation is finished.
+
+# Version 1.2.91 - Sep 27, 2018
+## Bug Fixes
+* Android Resolver: Fixed Android Resolution when the selected build target
+ isn't Android.
+* Added C# assembly symbols the plugin to simplify debugging bug reports.
+
+# Version 1.2.90 - Sep 21, 2018
+## Bug Fixes
+* Android Resolver: Fixed transitive dependency selection of version locked
+ packages.
+
+# Version 1.2.89 - Aug 31, 2018
+## Bug Fixes
+* Fixed FileLoadException in ResolveUnityEditoriOSXcodeExtension an assembly
+ can't be loaded.
+
+# Version 1.2.88 - Aug 29, 2018
+## Changed
+* Improved reporting of resolution attempts and conflicts found in the Android
+ Resolver.
+## Bug Fixes
+* iOS Resolver now correctly handles sample code in CocoaPods. Previously it
+ would add all sample code to the project when using project level
+ integration.
+* Android Resolver now correctly handles Gradle conflict resolution when the
+ resolution results in a package that is compatible with all requested
+ dependencies.
+
+# Version 1.2.87 - Aug 23, 2018
+## Bug Fixes
+* Fixed Android Resolver "Processing AARs" dialog getting stuck in Unity 5.6.
+
+# Version 1.2.86 - Aug 22, 2018
+## Bug Fixes
+* Fixed Android Resolver exception in OnPostProcessScene() when the Android
+ platform isn't selected.
+
+# Version 1.2.85 - Aug 17, 2018
+## Changes
+* Added support for synchronous resolution in the Android Resolver.
+ PlayServicesResolver.ResolveSync() now performs resolution synchronously.
+* Auto-resolution in the Android Resolver now results in synchronous resolution
+ of Android dependencies before the Android application build starts via
+ UnityEditor.Callbacks.PostProcessSceneAttribute.
+
+# Version 1.2.84 - Aug 16, 2018
+## Bug Fixes
+* Fixed Android Resolver crash when the AndroidResolverDependencies.xml
+ file can't be written.
+* Reduced log spam when a conflicting Android library is pinned to a
+ specific version.
+
+# Version 1.2.83 - Aug 15, 2018
+## Bug Fixes
+* Fixed Android Resolver failures due to an in-accessible AAR / JAR explode
+ cache file. If the cache can't be read / written the resolver now continues
+ with reduced performance following recompilation / DLL reloads.
+* Fixed incorrect version number in plugin manifest on install.
+ This was a minor issue since the version handler rewrote the metadata
+ after installation.
+
+# Version 1.2.82 - Aug 14, 2018
+## Changed
+* Added support for alphanumeric versions in the Android Resolver.
+
+## Bug Fixes
+* Fixed Android Resolver selection of latest duplicated library.
+* Fixed Android Resolver conflict resolution when version locked and non-version
+ locked dependencies are specified.
+* Fixed Android Resolver conflict resolution when non-existent artifacts are
+ referenced.
+
+# Version 1.2.81 - Aug 9, 2018
+## Bug Fixes
+* Fixed editor error that would occur when when
+ `PlayerSettings.Android.targetArchitectures` was set to
+ `AndroidArchitecture.All`.
+
+# Version 1.2.80 - Jul 24, 2018
+## Bug Fixes
+* Fixed project level settings incorrectly falling back to system wide settings
+ when default property values were set.
+
+# Version 1.2.79 - Jul 23, 2018
+## Bug Fixes
+* Fixed AndroidManifest.xml patching on Android Resolver load in Unity 2018.x.
+
+# Version 1.2.78 - Jul 19, 2018
+## Changed
+* Added support for overriding conflicting dependencies.
+
+# Version 1.2.77 - Jul 19, 2018
+## Changed
+* Android Resolver now supports Unity's 2018 ABI filter (i.e arm64-v8a).
+* Reduced Android Resolver build option polling frequency.
+* Disabled Android Resolver auto-resolution in batch mode. Users now need
+ to explicitly kick off resolution through the API.
+* All Android Resolver and Version Handler dialogs are now disabled in batch
+ mode.
+* Verbose logging for all plugins is now enabled by default in batch mode.
+* Version Handler bootstrapper has been improved to no longer call
+ UpdateComplete multiple times. However, since Unity can still reload the
+ app domain after plugins have been enabled, users still need to store their
+ plugin state to persistent storage to handle reloads.
+
+## Bug Fixes
+* Android Resolver no longer incorrectly adds MANIFEST.MF files to AARs.
+* Android Resolver auto-resolution jobs are now unscheduled when an explicit
+ resolve job is started.
+
+# Version 1.2.76 - Jul 16, 2018
+## Bug Fixes
+* Fixed variable replacement in AndroidManifest.xml files in the Android
+ Resolver.
+ Version 1.2.75 introduced a regression which caused all variable replacement
+ to replace the *entire* property value rather than the component of the
+ property that referenced a variable. For example,
+ given "applicationId = com.my.app", "${applicationId}.foo" would be
+ incorrectly expanded as "com.my.app" rather than "com.my.app.foo". This
+ resulted in numerous issues for Android builds where content provider
+ initialization would fail and services may not start.
+
+## Changed
+* Gradle prebuild experimental feature has been removed from the Android
+ Resolver. The feature has been broken for some time and added around 8MB
+ to the plugin size.
+* Added better support for execution of plugin components in batch mode.
+ In batch mode UnityEditor.update is sometimes never called - like when a
+ single method is executed - so the new job scheduler will execute all jobs
+ synchronously from the main thread.
+
+# Version 1.2.75 - Jun 20, 2018
+## New Features
+* Android Resolver now monitors the Android SDK path when
+ auto-resolution is enabled and triggers resolution when the path is
+ modified.
+
+## Changed
+* Android auto-resolution is now delayed by 3 seconds when the following build
+ settings are changed:
+ - Target ABI.
+ - Gradle build vs. internal build.
+ - Project export.
+* Added a progress bar display when AARs are being processed during Android
+ resolution.
+
+## Bug Fixes
+* Fixed incorrect Android package version selection when a mix of
+ version-locked and non-version-locked packages are specified.
+* Fixed non-deterministic Android package version selection to select
+ the highest version of a specified package rather than the last
+ package specification passed to the Gradle resolution script.
+
+# Version 1.2.74 - Jun 19, 2018
+## New Features
+* Added workaround for broken AndroidManifest.xml variable replacement in
+ Unity 2018.x. By default ${applicationId} variables will be replaced by
+ the bundle ID in the Plugins/Android/AndroidManifest.xml file. The
+ behavior can be disabled via the Android Resolver settings menu.
+
+# Version 1.2.73 - May 30, 2018
+## Bug Fixes
+* Fixed spurious warning message about missing Android plugins directory on
+ Windows.
+
+# Version 1.2.72 - May 23, 2018
+## Bug Fixes
+* Fixed spurious warning message about missing Android plugins directory.
+
+# Version 1.2.71 - May 10, 2018
+## Bug Fixes
+* Fixed resolution of Android dependencies when the `Assets/Plugins/Android`
+ directory is named in a different case e.g `Assets/plugins/Android`.
+
+# Version 1.2.70 - May 7, 2018
+## Bug Fixes
+* Fixed bitcode flag being ignored for iOS pods.
+
+# Version 1.2.69 - May 7, 2018
+## Bug Fixes
+* Fixed escaping of local repository paths in Android Resolver.
+
+# Version 1.2.68 - May 3, 2018
+## Changes
+* Added support for granular builds of Google Play Services.
+
+# Version 1.2.67 - May 1, 2018
+## Changes
+* Improved support for iOS source-only pods in Unity 5.5 and below.
+
+# Version 1.2.66 - April 27, 2018
+## Bug Fixes
+* Fixed Version Handler renaming of Linux libraries with hyphens in filenames.
+ Previously, libraries named Foo-1.2.3.so were not being renamed to
+ libFoo-1.2.3.so on Linux which could break native library loading on some
+ versions of Unity.
+
+# Version 1.2.65 - April 26, 2018
+## Bug Fixes
+* Fix CocoaPods casing in logs and comments.
+
+# Version 1.2.64 - Mar 16, 2018
+## Bug Fixes
+* Fixed bug in download_artifacts.gradle (used by Android Resolver) which
+ reported a failure if required artifacts already exist.
+
+# Version 1.2.63 - Mar 15, 2018
+## Bug Fixes
+* Fixed iOS Resolver include search paths taking precedence over system headers
+ when using project level resolution.
+* Fixed iOS Resolver includes relative to library root, when using project level
+ resolution.
+
+# Version 1.2.62 - Mar 12, 2018
+## Changes
+* Improved error reporting when a file can't be moved to trash by the
+ Version Handler.
+## Bug Fixes
+* Fixed Android Resolver throwing NullReferenceException when the Android SDK
+ path isn't set.
+* Fixed Version Handler renaming files with underscores if the
+ "Rename to Canonical Filenames" setting is enabled.
+
+# Version 1.2.61 - Jan 22, 2018
+## Bug Fixes
+* Fixed Android Resolver reporting non-existent conflicting dependencies when
+ Gradle build system is enabled.
+
+# Version 1.2.60 - Jan 12, 2018
+## Changes
+* Added support for Maven / Ivy version specifications for Android packages.
+* Added support for Android SNAPSHOT packages.
+
+## Bug Fixes
+* Fixed Openjdk version check.
+* Fixed non-deterministic Android package resolution when two packages contain
+ an artifact with the same name.
+
+# Version 1.2.59 - Oct 19, 2017
+## Bug Fixes
+* Fixed execution of Android Gradle resolution script when it's located
+ in a path with whitespace.
+
+# Version 1.2.58 - Oct 19, 2017
+## Changes
+* Removed legacy resolution method from Android Resolver.
+ It is now only possible to use the Gradle or Gradle prebuild resolution
+ methods.
+
+# Version 1.2.57 - Oct 18, 2017
+## Bug Fixes
+* Updated Gradle wrapper to 4.2.1 to fix issues using Gradle with the
+ latest Openjdk.
+* Android Gradle resolution now also uses gradle.properties to pass
+ parameters to Gradle in an attempt to workaround problems with
+ command line argument parsing on Windows 10.
+
+# Version 1.2.56 - Oct 12, 2017
+## Bug Fixes
+* Fixed Gradle artifact download with non-version locked artifacts.
+* Changed iOS resolver to only load dependencies at build time.
+
+# Version 1.2.55 - Oct 4, 2017
+## Bug Fixes
+* Force Android Resolution when the "Install Android Packages" setting changes.
+
+# Version 1.2.54 - Oct 4, 2017
+## Bug Fixes
+* Fixed execution of command line tools on Windows when the path to the tool
+ contains a single quote (apostrophe). In this case we fallback to executing
+ the tool via the system shell.
+
+# Version 1.2.53 - Oct 2, 2017
+## New Features
+* Changed Android Resolver "resolution complete" dialog so that it now displays
+ failures.
+* Android Resolver now detects conflicting libraries that it does not manage
+ warning the user if they're newer than the managed libraries and prompting
+ the user to clean them up if they're older or at the same version.
+
+## Bug Fixes
+* Improved Android Resolver auto-resolution speed.
+* Fixed bug in the Gradle Android Resolver which would result in resolution
+ succeeding when some dependencies are not found.
+
+# Version 1.2.52 - Sep 25, 2017
+## New Features
+* Changed Android Resolver's Gradle resolution to resolve conflicting
+ dependencies across Google Play services and Android Support library packages.
+
+# Version 1.2.51 - Sep 20, 2017
+## Changes
+* Changed iOS Resolver to execute the CocoaPods "pod" command via the shell
+ by default. Some developers customize their shell environment to use
+ custom ssh certs to access internal git repositories that host pods so
+ executing "pod" via the shell will work for these scenarios.
+ The drawback of executing "pod" via the shell could potentially cause
+ users problems if they break their shell environment. Though users who
+ customize their shell environments will be able to resolve these issues.
+
+# Version 1.2.50 - Sep 18, 2017
+## New Features
+* Added option to disable the Gradle daemon in the Android Resolver.
+ This daemon is now disabled by default as some users are getting into a state
+ where multiple daemon instances are being spawned when changing dependencies
+ which eventually results in Android resolution failing until all daemon
+ processes are manually killed.
+
+## Bug Fixes
+* Android resolution is now always executed if the user declines the update
+ of their Android SDK. This ensure users can continue to use out of date
+ Android SDK packages if they desire.
+
+# Version 1.2.49 - Sep 18, 2017
+## Bug Fixes
+* Removed modulemap parsing in iOS Resolver.
+ The framework *.modulemap did not need to be parsed by the iOS Resolver
+ when injecting Cocoapods into a Xcode project. Simply adding a modular
+ framework to a Xcode project results in Xcode's Clang parsing the associated
+ modulemap and injecting any compile and link flags into the build process.
+
+# Version 1.2.48 - Sep 12, 2017
+## New Features
+* Changed settings to be per-project by default.
+
+## Bug Fixes
+* Added Google maven repository to fix GradlePrebuild resolution with Google
+ components.
+* Fixed Android Resolution failure with spaces in paths.
+
+# Version 1.2.47 - Aug 29, 2017
+## New Features
+* Android and iOS dependencies can now be specified using *Dependencies.xml
+ files. This is now the preferred method for registering dependencies,
+ we may remove the API for dependency addition in future.
+* Added "Reset to Defaults" button to each settings dialog to restore default
+ settings.
+* Android Resolver now validates the configured JDK is new enough to build
+ recently released Android libraries.
+## Bug Fixes
+* Fixed a bug that caused dependencies with the "LATEST" version specification
+ to be ignored when using the Gradle mode of the Android Resolver.
+* Fixed a race condition when running Android Resolution.
+* Fixed Android Resolver logging if a PlayServicesSupport instance is created
+ with no logging enabled before the Android Resolver is initialized.
+* Fixed iOS resolver dialog in Unity 4.
+* Fixed iOS Cocoapod Xcode project integration in Unity 4.
+
+# Version 1.2.46 - Aug 22, 2017
+## Bug Fixes
+* GradlePrebuild Android resolver on Windows now correctly locates dependent
+ data files.
+
+# Version 1.2.45 - Aug 22, 2017
+## Bug Fixes
+* Improved Android package auto-resolution and fixed clean up of stale
+ dependencies when using Gradle dependency resolution.
+
+# Version 1.2.44 - Aug 21, 2017
+## Bug Fixes
+* Enabled autoresolution for Gradle Prebuild.
+* Made the command line dialog windows have selectable text.
+* Fixed incorrect "Android Settings" dialog disabled groups.
+* Updated PlayServicesResolver android platform detection to use the package
+ manager instead of the 'android' tool.
+* UnityCompat reflection methods 'GetAndroidPlatform' and
+ 'GetAndroidBuildToolsVersion' are now Obsolete due to dependence on the
+ obsolete 'android' build tool.
+
+# Version 1.2.43 - Aug 18, 2017
+## Bug Fixes
+* Fixed Gradle resolution in the Android Resolver when running
+ PlayServicesResolver.Resolve() in parallel or spawning multiple
+ resolutions before the previous resolve completed.
+
+# Version 1.2.42 - Aug 17, 2017
+## Bug Fixes
+* Fixed Xcode project level settings not being applied by IOS Resolver when
+ Xcode project pod integration is enabled.
+
+# Version 1.2.41 - Aug 15, 2017
+## Bug Fixes
+* IOS Resolver's Xcode workspace pod integration is now disabled when Unity
+ Cloud Build is detected. Unity Cloud Build does not follow the same build
+ process as the Unity editor and fails to open the generated xcworkspace at
+ this time.
+
+# Version 1.2.40 - Aug 15, 2017
+## Bug Fixes
+* Moved Android Resolver Gradle Prebuild scripts into Google.JarResolver.dll.
+ They are now extracted from the DLL when required.
+* AARs / JARs are now cleaned up when switching the Android resolution
+ strategy.
+
+# Version 1.2.39 - Aug 10, 2017
+## New Features
+* Android Resolver now supports resolution with Gradle. This enables support
+ for non-local artifacts.
+## Bug Fixes
+* Android Resolver's Gradle Prebuild now uses Android build tools to determine
+ the Android platform tools version rather than relying upon internal Unity
+ APIs.
+* Android Resolver's Gradle Prebuild now correctly strips binaries that are
+ not required for the target ABI.
+
+# Version 1.2.38 - Aug 7, 2017
+## Bug Fixes
+* Fixed an issue in VersionHandler where disabled targets are ignored if
+ the "Any Platform" flag is set on a plugin DLL.
+
+# Version 1.2.37 - Aug 3, 2017
+## New Features
+* Exposed GooglePlayServices.PlayServicesResolver.Resolve() so that it's
+ possible for a script to be notified when AAR / Jar resolution is complete.
+ This makes it easier to setup a project to build from the command line.
+
+# Version 1.2.36 - Aug 3, 2017
+## New Features
+* VersionHandler.UpdateCompleteMethods allows a user to provide a list of
+ methods to be called when VersionHandlerImpl has completed an update.
+ This makes it easier to import a plugin and wait for VersionHandler to
+ execute prior executing a build.
+
+# Version 1.2.35 - Jul 28, 2017
+## New Features
+* VersionHandler will now rename Linux libraries so they can target Unity
+ versions that require different file naming. Libraries need to be labelled
+ gvh_linuxlibname-${basename} in order to be considered for renaming.
+ e.g gvh\_linuxlibname-MyLib will be named MyLib.so in Unity 5.5 and below and
+ libMyLib.so in Unity 5.6 and above.
+
+# Version 1.2.34 - Jul 28, 2017
+## Bug Fixes
+* Made VersionHandler bootstrap module more robust when calling static
+ methods before the implementation DLL is loaded.
+
+# Version 1.2.33 - Jul 27, 2017
+## New Features
+* Added a bootstrap module for VersionHandler so the implementation
+ of the VersionHandler module can be versioned without resulting in
+ a compile error when imported at different versions across multiple
+ plugins.
+
+# Version 1.2.32 - Jul 20, 2017
+## New Features
+* Added support for build target selection based upon .NET framework
+ version in the VersionHandler.
+ When applying either gvh\_dotnet-3.5 or gvh\_dotnet-4.5 labels to
+ assets, the VersionHandler will only enable the asset for the
+ specified set of build targets when the matching .NET framework version
+ is selected in Unity 2017's project settings. This allows assets
+ to be provided in a plugin that need to differ based upon .NET version.
+
+# Version 1.2.31 - Jul 5, 2017
+## Bug Fixes
+* Force expansion of AARs with native components when using Unity 2017
+ with the internal build system. In contrast to Unity 5.x, Unity 2017's
+ internal build system does not include native libraries included in AARs.
+ Forcing expansion of AARs with native components generates an
+ Ant / Eclipse project for each AAR which is correctly included by Unity
+ 2017's internal build system.
+
+# Version 1.2.30 - Jul 5, 2017
+## Bug Fixes
+* Fixed Cocoapods being installed when the build target isn't iOS.
+* Added support for malformed AARs with missing classes.jar.
+
+# Version 1.2.29 - Jun 16, 2017
+## New Features
+* Added support for the Android sdkmanager tool.
+
+# Version 1.2.28 - Jun 8, 2017
+## Bug Fixes
+* Fixed non-shell command line execution (regression from
+ Cocoapod installation patch).
+
+# Version 1.2.27 - Jun 7, 2017
+## Bug Fixes
+* Added support for stdout / stderr redirection when executing
+ commands in shell mode.
+ This fixes CocoaPod tool installation when shell mode is
+ enabled.
+* Fixed incremental builds when additional sources are specified
+ in the Podfile.
+
+# Version 1.2.26 - Jun 7, 2017
+## Bug Fixes
+* Fixed a crash when importing Version Handler into Unity 4.7.x.
+
+# Version 1.2.25 - Jun 7, 2017
+## Bug Fixes
+* Fixed an issue in the Jar Resolver which incorrectly notified
+ event handlers of bundle ID changes when the currently selected
+ (not active) build target changed in Unity 5.6 and above.
+
+# Version 1.2.24 - Jun 6, 2017
+## New Features
+* Added option to control file renaming in Version Handler settings.
+ Disabling file renaming (default option) significantly increases
+ the speed of file version management operations with the downside
+ that any files that are referenced directly by canonical filename
+ rather than asset ID will no longer be valid.
+* Improved logging in the Version Handler.
+## Bug Fixes
+* Fixed an issue in the Version Handler which caused it to not
+ re-enable plugins when re-importing a custom package with disabled
+ version managed files.
+
+# Version 1.2.23 - May 26, 2017
+## Bug Fixes
+* Fixed a bug with gradle prebuild resolver on windows.
+
+# Version 1.2.22 - May 19, 2017
+## Bug Fixes
+* Fixed a bug in the iOS resolver with incremental builds.
+* Fixed misdetection of Cocoapods support with Unity beta 5.6.
+
+# Version 1.2.21 - May 8, 2017
+## Bug Fixes
+* Fix for https://github.com/googlesamples/unity-jar-resolver/issues/48
+ Android dependency version number parsing when "-alpha" (etc.) are
+ included in dependency (AAR / JAR) versions.
+
+# Version 1.2.20 - May 8, 2017
+## Bug Fixes
+* Attempted to fix
+ https://github.com/googlesamples/unity-jar-resolver/issues/48
+ where a NullReferenceException could occur if a target file does not
+ have a valid version string.
+
+# Version 1.2.19 - May 4, 2017
+## Bug Fixes
+* Fixed Jar Resolver exploding and deleting AAR files it isn't managing.
+
+# Version 1.2.18 - May 4, 2017
+## New Features
+* Added support for preserving Unity pods such as when GVR is enabled.
+
+# Version 1.2.17 - Apr 20, 2017
+## Bug Fixes
+* Fixed auto-resolution when an Android application ID is modified.
+
+# Version 1.2.16 - Apr 17, 2017
+## Bug Fixes
+* Fixed Unity version number parsing on machines with a locale that uses
+ "," for decimal points.
+* Fixed null reference exception if JDK path isn't set.
+
+# Version 1.2.15 - Mar 17, 2017
+## New Features
+* Added warning when the Jar Resolver's background resolution is disabled.
+## Bug Fixes
+* Fixed support of AARs with native libraries when using Gradle.
+* Fixed extra repository paths when resolving dependencies.
+
+# Version 1.2.14 - Mar 7, 2017
+## New Features
+* Added experimental Android resolution using Gradle.
+ This alternative resolver supports proguard stripping with Unity's
+ internal build system.
+* Added Android support for single ABI builds when using AARs include
+ native libraries.
+* Disabled Android resolution on changes to all .cs and .js files.
+ File patterns that are monitored for auto-resolution can be added
+ using PlayServicesResolver.AddAutoResolutionFilePatterns().
+* Added tracking of resolved AARs and JARs so they can be cleaned up
+ if they're no longer referenced by a project.
+* Added persistence of AAR / JAR version replacement for each Unity
+ session.
+* Added settings dialog to the iOS resolver.
+* Integrated Cocoapod tool installation in the iOS resolver.
+* Added option to run pod tool via the shell.
+## Bug Fixes
+* Fixed build of some source Cocoapods (e.g Protobuf).
+* VersionHandler no longer prompts to delete obsolete manifests.
+* iOS resolver handles Cocoapod installation when using Ruby < 2.2.2.
+* Added workaround for package version selection when including
+ Google Play Services on Android.
+* Fixed support for pods that reference static libraries.
+* Fixed support for resource-only pods.
+
+# Version 1.2.12 - Feb 14, 2017
+## Bug Fixes
+* Fixed re-explosion of AARs when the bundle ID is modified.
+
+# Version 1.2.11 - Jan 30, 2017
+## New Features
+* Added support for Android Studio builds.
+* Added support for native (C/C++) shared libraries in AARs.
+
+# Version 1.2.10 - Jan 11, 2017
+## Bug Fixes
+* Fixed SDK manager path retrieval.
+* Also, report stderr when it's not possible to run the "pod" tool.
+* Handle exceptions thrown by Unity.Cecil on asset rename
+* Fixed IOSResolver to handle PlayerSettings.iOS.targetOSVersionString
+
+# Version 1.2.9 - Dec 7, 2016
+## Bug Fixes
+* Improved error reporting when "pod repo update" fails.
+* Added detection of xml format xcode projects generated by old Cocoapods
+ installations.
+
+# Version 1.2.8 - Dec 6, 2016
+## Bug Fixes
+* Increased speed of JarResolver resolution.
+* Fixed JarResolver caches getting out of sync with requested dependencies
+ by removing the caches.
+* Fixed JarResolver explode cache always being rewritten even when no
+ dependencies change.
+
+# Version 1.2.7 - Dec 2, 2016
+## Bug Fixes
+* Fixed VersionHandler build errors with Unity 5.5, due to the constantly
+ changing BuildTarget enum.
+* Added support for Unity configured JDK Path rather than requiring
+ JAVA_HOME to be set in the Jar Resolver.
+
+# Version 1.2.6 - Nov 15, 2016
+## Bug Fixes
+* Fixed IOSResolver errors when iOS support is not installed.
+* Added fallback to "pod" executable search which queries the Ruby Gems
+ package manager for the binary install location.
+
+# Version 1.2.5 - Nov 3, 2016
+## Bug Fixes
+* Added crude support for source only Cocoapods to the IOSResolver.
+
+# Version 1.2.4 - Oct 27, 2016
+## Bug Fixes
+* Automated resolution of out of date pod repositories.
+
+# Version 1.2.3 - Oct 25, 2016
+## Bug Fixes
+* Fixed exception when reporting conflicting dependencies.
+
+# Version 1.2.2 - Oct 17, 2016
+## Bug Fixes
+* Fixed issue working with Unity 5.5
+* Fixed issue with PlayServicesResolver corrupting other iOS dependencies.
+* Updated build script to use Unity distributed tools for building.
+
+# Version 1.2.1 - Jul 25, 2016
+## Bug Fixes
+* Removed 1.2 Resolver and hardcoded whitelist of AARs to expand.
+* Improved error reporting when the "jar" executable can't be found.
+* Removed the need to set JAVA_HOME if "jar" is in the user's path.
+* Fixed spurious copying of partially matching AARs.
+* Changed resolver to only copy / expand when source AARs change.
+* Auto-resolution of dependencies is now performed when the Android
+ build target is selected.
+
+## New Features
+* Expand AARs that contain manifests with variable expansion like
+ ${applicationId}.
+* Added optional logging in the JarResolverLib module.
+* Integration with the Android SDK manager for dependencies that
+ declare required Android SDK packages.
+
+# Version 1.2.0 - May 11 2016
+## Bug Fixes
+* Handles resolving dependencies when the artifacts are split across 2 repos.
+* #4 Misdetecting version for versions like 1.2-alpha. These are now string
+ compared if alphanumeric
+* Removed resolver creation via reflection since it did not work all the time.
+ Now a resolver needs to be loaded externally (which is existing behavior).
+
+## New Features
+* Expose PlayServicesResolver properties to allow for script access.
+* Explodes firebase-common and firebase-measurement aar files to support
+ ${applicationId} substitution.
+
+# Version 1.1.1 - 25 Feb 2016
+## Bug Fixes
+* #1 Spaces in project path not handled when exploding Aar file.
+* #2 Script compilation error: TypeLoadException.
+
+# Version 1.1.0 - 5 Feb 2016
+## New Features
+* Adds friendly alert when JAVA_HOME is not set on Windows platforms.
+* Adds flag for disabling background resolution.
+* Expands play-services-measurement and replaces ${applicationId} with the
+ bundle Id.
+
+ ## Bug Fixes
+* Fixes infinite loop of resolution triggered by resolution.
diff --git a/Assets/ExternalDependencyManager/Editor/CHANGELOG.md.meta b/Assets/ExternalDependencyManager/Editor/CHANGELOG.md.meta
new file mode 100644
index 0000000..ed63ecc
--- /dev/null
+++ b/Assets/ExternalDependencyManager/Editor/CHANGELOG.md.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: d67e36cf70144eeeb62948707545ecfd
+labels:
+- gvh
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.156.dll b/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.156.dll
new file mode 100755
index 0000000..e45b5cf
Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.156.dll differ
diff --git a/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.156.dll.meta b/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.156.dll.meta
new file mode 100644
index 0000000..17aa971
--- /dev/null
+++ b/Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.156.dll.meta
@@ -0,0 +1,38 @@
+fileFormatVersion: 2
+guid: f87eb93c55814d53b99e4d9d248b0ccd
+labels:
+- gvh
+- gvh_version-1.2.156
+- gvhp_exportpath-ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.156.dll
+- gvhp_targets-editor
+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
+ - first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.156.dll b/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.156.dll
new file mode 100755
index 0000000..e193547
Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.156.dll differ
diff --git a/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.156.dll.meta b/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.156.dll.meta
new file mode 100644
index 0000000..3de9e36
--- /dev/null
+++ b/Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.156.dll.meta
@@ -0,0 +1,38 @@
+fileFormatVersion: 2
+guid: 1ac9a5458b3649f2b2544f6c1509a9f1
+labels:
+- gvh
+- gvh_version-1.2.156
+- gvhp_exportpath-ExternalDependencyManager/Editor/Google.JarResolver_v1.2.156.dll
+- gvhp_targets-editor
+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
+ - first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.156.dll b/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.156.dll
new file mode 100755
index 0000000..4c7b04b
Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.156.dll differ
diff --git a/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.156.dll.meta b/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.156.dll.meta
new file mode 100644
index 0000000..4bcf361
--- /dev/null
+++ b/Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.156.dll.meta
@@ -0,0 +1,38 @@
+fileFormatVersion: 2
+guid: be364d7e90834242b6f90a4ed5d63875
+labels:
+- gvh
+- gvh_version-1.2.156
+- gvhp_exportpath-ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.156.dll
+- gvhp_targets-editor
+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
+ - first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll
new file mode 100755
index 0000000..62f55d5
Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll differ
diff --git a/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.meta b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.meta
new file mode 100644
index 0000000..5cded88
--- /dev/null
+++ b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.meta
@@ -0,0 +1,36 @@
+fileFormatVersion: 2
+guid: bb6999c8a5ce4ba99688ec579babe5b7
+labels:
+- gvh
+- gvh_version-1.2.156
+- gvhp_exportpath-ExternalDependencyManager/Editor/Google.VersionHandler.dll
+- gvhp_targets-editor
+timeCreated: 1480838400
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 1
+ settings:
+ DefaultValueInitialized: true
+ - first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.156.dll b/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.156.dll
new file mode 100755
index 0000000..c07d6ad
Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.156.dll differ
diff --git a/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.156.dll.meta b/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.156.dll.meta
new file mode 100644
index 0000000..143ea88
--- /dev/null
+++ b/Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.156.dll.meta
@@ -0,0 +1,38 @@
+fileFormatVersion: 2
+guid: 63b5d32abe5545acbe44c1a4d3bb0ade
+labels:
+- gvh
+- gvh_version-1.2.156
+- gvhp_exportpath-ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.156.dll
+- gvhp_targets-editor
+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
+ - first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ExternalDependencyManager/Editor/GoogleRegistries.xml b/Assets/ExternalDependencyManager/Editor/GoogleRegistries.xml
new file mode 100755
index 0000000..efd69e2
--- /dev/null
+++ b/Assets/ExternalDependencyManager/Editor/GoogleRegistries.xml
@@ -0,0 +1,11 @@
+
+
+
+
+ com.google
+
+
+
diff --git a/Assets/ExternalDependencyManager/Editor/GoogleRegistries.xml.meta b/Assets/ExternalDependencyManager/Editor/GoogleRegistries.xml.meta
new file mode 100644
index 0000000..c54d894
--- /dev/null
+++ b/Assets/ExternalDependencyManager/Editor/GoogleRegistries.xml.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 81e43a9734ee4e3d8d85776f1b564bd3
+labels:
+- gumpr_registries
+- gvh
+- gvh_version-1.2.156
+- gvhp_exportpath-ExternalDependencyManager/Editor/GoogleRegistries.xml
+timeCreated: 1583806049
+licenseType: Pro
+TextScriptImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ExternalDependencyManager/Editor/LICENSE b/Assets/ExternalDependencyManager/Editor/LICENSE
new file mode 100755
index 0000000..6258cc4
--- /dev/null
+++ b/Assets/ExternalDependencyManager/Editor/LICENSE
@@ -0,0 +1,245 @@
+Copyright (C) 2014 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+====================================================================================================
+This package uses MiniJSON
+
+Copyright (c) 2013 Calvin Rien
+
+Based on the JSON parser by Patrick van Bergen
+http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html
+
+Simplified it so that it doesn't throw exceptions
+and can be used in Unity iPhone with maximum code stripping.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Assets/ExternalDependencyManager/Editor/LICENSE.meta b/Assets/ExternalDependencyManager/Editor/LICENSE.meta
new file mode 100644
index 0000000..f94af0d
--- /dev/null
+++ b/Assets/ExternalDependencyManager/Editor/LICENSE.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 35a6726adf03479eb04b8c082346d551
+labels:
+- gvh
+- gvh_version-1.2.156
+- gvhp_exportpath-ExternalDependencyManager/Editor/LICENSE
+timeCreated: 1584567712
+licenseType: Pro
+TextScriptImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ExternalDependencyManager/Editor/README.md b/Assets/ExternalDependencyManager/Editor/README.md
new file mode 100755
index 0000000..d3894d7
--- /dev/null
+++ b/Assets/ExternalDependencyManager/Editor/README.md
@@ -0,0 +1,767 @@
+External Dependency Manager for Unity
+========
+
+# Overview
+
+The External Dependency Manager for Unity (EDM4U)
+(formerly Play Services Resolver / Jar Resolver) is intended to be used by any
+Unity plugin that requires:
+
+ * Android specific libraries (e.g
+ [AARs](https://developer.android.com/studio/projects/android-library.html)).
+ * iOS [CocoaPods](https://cocoapods.org/).
+ * Version management of transitive dependencies.
+ * Management of Package Manager (PM) Registries.
+
+Updated releases are available on
+[GitHub](https://github.com/googlesamples/unity-jar-resolver)
+
+# Background
+
+Many Unity plugins have dependencies upon Android specific libraries, iOS
+CocoaPods, and sometimes have transitive dependencies upon other Unity plugins.
+This causes the following problems:
+
+ * Integrating platform specific (e.g Android and iOS) libraries within a
+ Unity project can be complex and a burden on a Unity plugin maintainer.
+ * The process of resolving conflicting dependencies on platform specific
+ libraries is pushed to the developer attempting to use a Unity plugin.
+ The developer trying to use you plugin is very likely to give up when
+ faced with Android or iOS specific build errors.
+ * The process of resolving conflicting Unity plugins (due to shared Unity
+ plugin components) is pushed to the developer attempting to use your Unity
+ plugin. In an effort to resolve conflicts, the developer will very likely
+ attempt to resolve problems by deleting random files in your plugin,
+ report bugs when that doesn't work and finally give up.
+
+EDM provides solutions for each of these problems.
+
+## Android Dependency Management
+
+The *Android Resolver* component of this plugin will download and integrate
+Android library dependencies and handle any conflicts between plugins that share
+the same dependencies.
+
+Without the Android Resolver, typically Unity plugins bundle their AAR and
+JAR dependencies, e.g. a Unity plugin `SomePlugin` that requires the Google
+Play Games Android library would redistribute the library and its transitive
+dependencies in the folder `SomePlugin/Android/`. When a user imports
+`SomeOtherPlugin` that includes the same libraries (potentially at different
+versions) in `SomeOtherPlugin/Android/`, the developer using `SomePlugin` and
+`SomeOtherPlugin` will see an error when building for Android that can be hard
+to interpret.
+
+Using the Android Resolver to manage Android library dependencies:
+
+ * Solves Android library conflicts between plugins.
+ * Handles all of the various processing steps required to use Android
+ libraries (AARs, JARs) in Unity 4.x and above projects. Almost all
+ versions of Unity have - at best - partial support for AARs.
+ * (Experimental) Supports minification of included Java components without
+ exporting a project.
+
+## iOS Dependency Management
+
+The *iOS Resolver* component of this plugin integrates with
+[CocoaPods](https://cocoapods.org/) to download and integrate iOS libraries
+and frameworks into the Xcode project Unity generates when building for iOS.
+Using CocoaPods allows multiple plugins to utilize shared components without
+forcing developers to fix either duplicate or incompatible versions of
+libraries included through multiple Unity plugins in their project.
+
+## Package Manager Registry Setup
+
+The [Package Manager](https://docs.unity3d.com/Manual/Packages.html)
+(PM) makes use of [NPM](https://www.npmjs.com/) registry servers for package
+hosting and provides ways to discover, install, upgrade and uninstall packages.
+This makes it easier for developers to manage plugins within their projects.
+
+However, installing additional package registries requires a few manual steps
+that can potentially be error prone. The *Package Manager Resolver*
+component of this plugin integrates with
+[PM](https://docs.unity3d.com/Manual/Packages.html) to provide a way to
+auto-install PM package registries when a `.unitypackage` is installed which
+allows plugin maintainers to ship a `.unitypackage` that can provide access
+to their own PM registry server to make it easier for developers to
+manage their plugins.
+
+## Unity Plugin Version Management
+
+Finally, the *Version Handler* component of this plugin simplifies the process
+of managing transitive dependencies of Unity plugins and each plugin's upgrade
+process.
+
+For example, without the Version Handler plugin, if:
+
+ * Unity plugin `SomePlugin` includes `EDM4U` plugin at
+ version 1.1.
+ * Unity plugin `SomeOtherPlugin` includes `EDM4U`
+ plugin at version 1.2.
+
+The version of `EDM4U` included in the developer's project depends upon the
+order the developer imports `SomePlugin` or `SomeOtherPlugin`.
+
+This results in:
+
+ * `EDM4U` at version 1.2, if `SomePlugin` is imported then `SomeOtherPlugin`
+ is imported.
+ * `EDM4U` at version 1.1, if `SomeOtherPlugin` is imported then
+ `SomePlugin` is imported.
+
+The Version Handler solves the problem of managing transitive dependencies by:
+
+ * Specifying a set of packaging requirements that enable a plugin at
+ different versions to be imported into a Unity project.
+ * Providing activation logic that selects the latest version of a plugin
+ within a project.
+
+When using the Version Handler to manage `EDM4U` included in `SomePlugin` and
+`SomeOtherPlugin`, from the prior example, version 1.2 will always be the
+version activated in a developer's Unity project.
+
+Plugin creators are encouraged to adopt this library to ease integration for
+their customers. For more information about integrating EDM4U
+into your own plugin, see the [Plugin Redistribution](#plugin-redistribution)
+section of this document.
+
+# Analytics
+
+The External Dependency Manager for Unity plugin by default logs usage to Google
+Analytics. The purpose of the logging is to quantitatively measure the usage of
+functionality, to gather reports on integration failures and to inform future
+improvements to the developer experience of the External Dependency Manager
+plugin. Note that the analytics collected are limited to the scope of the EDM4U
+plugin’s usage.
+
+For details of what is logged, please refer to the usage of
+`EditorMeasurement.Report()` in the source code.
+
+# Requirements
+
+The *Android Resolver* and *iOS Resolver* components of the plugin only work
+with Unity version 4.6.8 or higher.
+
+The *Version Handler* component only works with Unity 5.x or higher as it
+depends upon the `PluginImporter` UnityEditor API.
+
+The *Package Manager Resolver* component only works with
+Unity 2018.4 or above, when
+[scoped registry](https://docs.unity3d.com/Manual/upm-scoped.html)
+support was added to the Package Manager.
+
+# Getting Started
+
+Before you import EDM4U into your plugin project, you first
+need to consider whether you intend to *redistribute* `EDM4U`
+along with your own plugin.
+
+## Plugin Redistribution
+
+If you're a plugin maintainer, redistributing `EDM4U` inside your own plugin
+will ease the integration process for your users, by resolving dependency
+conflicts between your plugin and other plugins in a user's project.
+
+If you wish to redistribute `EDM4U` inside your plugin,
+you **must** follow these steps when importing the
+`external-dependency-manager-*.unitypackage`, and when exporting your own plugin
+package:
+
+ 1. Import the `external-dependency-manager-*.unitypackage` into your plugin
+ project by
+ [running Unity from the command line](https://docs.unity3d.com/Manual/CommandLineArguments.html), ensuring that
+ you add the `-gvh_disable` option.
+ 1. Export your plugin by [running Unity from the command line](https://docs.unity3d.com/Manual/CommandLineArguments.html), ensuring that
+ you:
+ - Include the contents of the `Assets/PlayServicesResolver` directory.
+ - Add the `-gvh_disable` option.
+
+You **must** specify the `-gvh_disable` option in order for the Version
+Handler to work correctly!
+
+For example, the following command will import the
+`external-dependency-manager-1.2.46.0.unitypackage` into the project
+`MyPluginProject` and export the entire Assets folder to
+`MyPlugin.unitypackage`:
+
+```
+Unity -gvh_disable \
+ -batchmode \
+ -importPackage external-dependency-manager-1.2.46.0.unitypackage \
+ -projectPath MyPluginProject \
+ -exportPackage Assets MyPlugin.unitypackage \
+ -quit
+```
+
+### Background
+
+The *Version Handler* component relies upon deferring the load of editor DLLs
+so that it can run first and determine the latest version of a plugin component
+to activate. The build of `EDM4U` plugin has Unity asset metadata that is
+configured so that the editor components are not initially enabled when it's
+imported into a Unity project. To maintain this configuration when importing
+the `external-dependency-manager.unitypackage` into a Unity plugin project, you
+*must* specify the command line option `-gvh_disable` which will prevent the
+Version Handler component from running and changing the Unity asset metadata.
+
+# Android Resolver Usage
+
+The Android Resolver copies specified dependencies from local or remote Maven
+repositories into the Unity project when a user selects Android as the build
+target in the Unity editor.
+
+ 1. Add the `external-dependency-manager-*.unitypackage` to your plugin
+ project (assuming you are developing a plugin). If you are redistributing
+ EDM4U with your plugin, you **must** follow the
+ import steps in the [Getting Started](#getting-started) section!
+
+ 2. Copy and rename the
+ [SampleDependencies.xml](https://github.com/googlesamples/unity-jar-resolver/blob/master/sample/Assets/ExternalDependencyManager/Editor/SampleDependencies.xml)
+ file into your plugin and add the dependencies your plugin requires.
+
+ The XML file just needs to be under an `Editor` directory and match the
+ name `*Dependencies.xml`. For example,
+ `MyPlugin/Editor/MyPluginDependencies.xml`.
+
+ 3. Follow the steps in the [Getting Started](#getting-started)
+ section when you are exporting your plugin package.
+
+For example, to add the Google Play Games library
+(`com.google.android.gms:play-services-games` package) at version `9.8.0` to
+the set of a plugin's Android dependencies:
+
+```
+
+
+
+
+ extra-google-m2repository
+
+
+
+
+```
+
+The version specification (last component) supports:
+
+ * Specific versions e.g `9.8.0`
+ * Partial matches e.g `9.8.+` would match 9.8.0, 9.8.1 etc. choosing the most
+ recent version.
+ * Latest version using `LATEST` or `+`. We do *not* recommend using this
+ unless you're 100% sure the library you depend upon will not break your
+ Unity plugin in future.
+
+The above example specifies the dependency as a component of the Android SDK
+manager such that the Android SDK manager will be executed to install the
+package if it's not found. If your Android dependency is located on Maven
+central it's possible to specify the package simply using the `androidPackage`
+element:
+
+```
+
+
+
+
+
+```
+
+## Auto-resolution
+
+By default the Android Resolver automatically monitors the dependencies you have
+specified and the `Plugins/Android` folder of your Unity project. The
+resolution process runs when the specified dependencies are not present in your
+project.
+
+The *auto-resolution* process can be disabled via the
+`Assets > External Dependency Manager > Android Resolver > Settings` menu.
+
+Manual resolution can be performed using the following menu options:
+
+ * `Assets > External Dependency Manager > Android Resolver > Resolve`
+ * `Assets > External Dependency Manager > Android Resolver > Force Resolve`
+
+## Deleting libraries
+
+Resolved packages are tracked via asset labels by the Android Resolver.
+They can easily be deleted using the
+`Assets > External Dependency Manager > Android Resolver > Delete Resolved Libraries`
+menu item.
+
+## Android Manifest Variable Processing
+
+Some AAR files (for example play-services-measurement) contain variables that
+are processed by the Android Gradle plugin. Unfortunately, Unity does not
+perform the same processing when using Unity's Internal Build System, so the
+Android Resolver plugin handles known cases of this variable substitution
+by exploding the AAR into a folder and replacing `${applicationId}` with the
+`bundleID`.
+
+Disabling AAR explosion and therefore Android manifest processing can be done
+via the `Assets > External Dependency Manager > Android Resolver > Settings`
+menu. You may want to disable explosion of AARs if you're exporting a project
+to be built with Gradle / Android Studio.
+
+## ABI Stripping
+
+Some AAR files contain native libraries (.so files) for each ABI supported
+by Android. Unfortunately, when targeting a single ABI (e.g x86), Unity does
+not strip native libraries for unused ABIs. To strip unused ABIs, the Android
+Resolver plugin explodes an AAR into a folder and removes unused ABIs to
+reduce the built APK size. Furthermore, if native libraries are not stripped
+from an APK (e.g you have a mix of Unity's x86 library and some armeabi-v7a
+libraries) Android may attempt to load the wrong library for the current
+runtime ABI completely breaking your plugin when targeting some architectures.
+
+AAR explosion and therefore ABI stripping can be disabled via the
+`Assets > External Dependency Manager > Android Resolver > Settings` menu.
+You may want to disable explosion of AARs if you're exporting a project to be
+built with Gradle / Android Studio.
+
+## Resolution Strategies
+
+By default the Android Resolver will use Gradle to download dependencies prior
+to integrating them into a Unity project. This works with Unity's internal
+build system and Gradle / Android Studio project export.
+
+It's possible to change the resolution strategy via the
+`Assets > External Dependency Manager > Android Resolver > Settings` menu.
+
+### Download Artifacts with Gradle
+
+Using the default resolution strategy, the Android resolver executes the
+following operations:
+
+ - Remove the result of previous Android resolutions.
+ e.g Delete all files and directories labeled with "gpsr" under
+ `Plugins/Android` from the project.
+ - Collect the set of Android dependencies (libraries) specified by a
+ project's `*Dependencies.xml` files.
+ - Run `download_artifacts.gradle` with Gradle to resolve conflicts and,
+ if successful, download the set of resolved Android libraries (AARs, JARs).
+ - Process each AAR / JAR so that it can be used with the currently selected
+ Unity build system (e.g Internal vs. Gradle, Export vs. No Export).
+ This involves patching each reference to `applicationId` in the
+ AndroidManifest.xml with the project's bundle ID. This means resolution
+ must be run if the bundle ID is changed again.
+ - Move the processed AARs to `Plugins/Android` so they will be included when
+ Unity invokes the Android build.
+
+### Integrate into mainTemplate.gradle
+
+Unity 5.6 introduced support for customizing the `build.gradle` used to build
+Unity projects with Gradle. When the *Patch mainTemplate.gradle* setting is
+enabled, rather than downloading artifacts before the build, Android resolution
+results in the execution of the following operations:
+
+ - Remove the result of previous Android resolutions.
+ e.g Delete all files and directories labeled with "gpsr" under
+ `Plugins/Android` from the project and remove sections delimited with
+ `// Android Resolver * Start` and `// Android Resolver * End` lines.
+ - Collect the set of Android dependencies (libraries) specified by a
+ project's `*Dependencies.xml` files.
+ - Rename any `.srcaar` files in the build to `.aar` and exclude them from
+ being included directly by Unity in the Android build as
+ `mainTemplate.gradle` will be patched to include them instead from their
+ local maven repositories.
+ - Inject the required Gradle repositories into `mainTemplate.gradle` at the
+ line matching the pattern
+ `.*apply plugin: 'com\.android\.(application|library)'.*` or the section
+ starting at the line `// Android Resolver Repos Start`.
+ If you want to control the injection point in the file, the section
+ delimited by the lines `// Android Resolver Repos Start` and
+ `// Android Resolver Repos End` should be placed in the global scope
+ before the `dependencies` section.
+ - Inject the required Android dependencies (libraries) into
+ `mainTemplate.gradle` at the line matching the pattern `***DEPS***` or
+ the section starting at the line `// Android Resolver Dependencies Start`.
+ If you want to control the injection point in the file, the section
+ delimited by the lines `// Android Resolver Dependencies Start` and
+ `// Android Resolver Dependencies End` should be placed in the
+ `dependencies` section.
+ - Inject the packaging options logic, which excludes architecture specific
+ libraries based upon the selected build target, into `mainTemplate.gradle`
+ at the line matching the pattern `android +{` or the section starting at
+ the line `// Android Resolver Exclusions Start`.
+ If you want to control the injection point in the file, the section
+ delimited by the lines `// Android Resolver Exclusions Start` and
+ `// Android Resolver Exclusions End` should be placed in the global
+ scope before the `android` section.
+
+## Dependency Tracking
+
+The Android Resolver creates the
+`ProjectSettings/AndroidResolverDependencies.xml` to quickly determine the set
+of resolved dependencies in a project. This is used by the auto-resolution
+process to only run the expensive resolution process when necessary.
+
+## Displaying Dependencies
+
+It's possible to display the set of dependencies the Android Resolver
+would download and process in your project via the
+`Assets > External Dependency Manager > Android Resolver > Display Libraries`
+menu item.
+
+# iOS Resolver Usage
+
+The iOS resolver component of this plugin manages
+[CocoaPods](https://cocoapods.org/). A CocoaPods `Podfile` is generated and
+the `pod` tool is executed as a post build process step to add dependencies
+to the Xcode project exported by Unity.
+
+Dependencies for iOS are added by referring to CocoaPods.
+
+ 1. Add the `external-dependency-manager-*.unitypackage` to your plugin
+ project (assuming you are developing a plugin). If you are redistributing
+ EDM4U with your plugin, you **must** follow the
+ import steps in the [Getting Started](#getting-started) section!
+
+ 2. Copy and rename the
+ [SampleDependencies.xml](https://github.com/googlesamples/unity-jar-resolver/blob/master/sample/Assets/ExternalDependencyManager/Editor/SampleDependencies.xml)
+ file into your plugin and add the dependencies your plugin requires.
+
+ The XML file just needs to be under an `Editor` directory and match the
+ name `*Dependencies.xml`. For example,
+ `MyPlugin/Editor/MyPluginDependencies.xml`.
+
+ 3. Follow the steps in the [Getting Started](#getting-started)
+ section when you are exporting your plugin package.
+
+For example, to add the AdMob pod, version 7.0 or greater with bitcode enabled:
+
+```
+
+
+
+
+
+```
+
+## Integration Strategies
+
+The `CocoaPods` are either:
+ * Downloaded and injected into the Xcode project file directly, rather than
+ creating a separate xcworkspace. We call this `Xcode project` integration.
+ * If the Unity version supports opening a xcworkspace file, the `pod` tool
+ is used as intended to generate a xcworkspace which references the
+ CocoaPods. We call this `Xcode workspace` integration.
+
+The resolution strategy can be changed via the
+`Assets > External Dependency Manager > iOS Resolver > Settings` menu.
+
+### Appending text to generated Podfile
+In order to modify the generated Podfile you can create a script like this:
+```
+using System.IO;
+public class PostProcessIOS : MonoBehaviour {
+[PostProcessBuildAttribute(45)]//must be between 40 and 50 to ensure that it's not overriden by Podfile generation (40) and that it's added before "pod install" (50)
+private static void PostProcessBuild_iOS(BuildTarget target, string buildPath)
+{
+ if (target == BuildTarget.iOS)
+ {
+
+ using (StreamWriter sw = File.AppendText(buildPath + "/Podfile"))
+ {
+ //in this example I'm adding an app extension
+ sw.WriteLine("\ntarget 'NSExtension' do\n pod 'Firebase/Messaging', '6.6.0'\nend");
+ }
+ }
+}
+```
+
+# Package Manager Resolver Usage
+
+Adding registries to the
+[Package Manager](https://docs.unity3d.com/Manual/Packages.html)
+(PM) is a manual process. The Package Manager Resolver (PMR) component
+of this plugin makes it easy for plugin maintainers to distribute new PM
+registry servers and easy for plugin users to manage PM registry servers.
+
+## Adding Registries
+
+ 1. Add the `external-dependency-manager-*.unitypackage` to your plugin
+ project (assuming you are developing a plugin). If you are redistributing
+ EDM4U with your plugin, you **must** follow the
+ import steps in the [Getting Started](#getting-started) section!
+
+ 2. Copy and rename the
+ [SampleRegistries.xml](https://github.com/googlesamples/unity-jar-resolver/blob/master/sample/Assets/ExternalDependencyManager/Editor/sample/Assets/ExternalDependencyManager/Editor/SampleRegistries.xml)
+ file into your plugin and add the registries your plugin requires.
+
+ The XML file just needs to be under an `Editor` directory and match the
+ name `*Registries.xml` or labeled with `gumpr_registries`. For example,
+ `MyPlugin/Editor/MyPluginRegistries.xml`.
+
+ 3. Follow the steps in the [Getting Started](#getting-started)
+ section when you are exporting your plugin package.
+
+For example, to add a registry for plugins in the scope `com.coolstuff`:
+
+```
+
+
+
+ com.coolstuff
+
+
+
+```
+
+When PMR is loaded it will prompt the developer to add the registry to their
+project if it isn't already present in the `Packages/manifest.json` file.
+
+For more information, see Unity's documentation on
+[scoped package registries](https://docs.unity3d.com/Manual/upm-scoped.html).
+
+## Managing Registries
+
+It's possible to add and remove registries that are specified via PMR
+XML configuration files via the following menu options:
+
+* `Assets > External Dependency Manager > Package Manager Resolver >
+ Add Registries` will prompt the user with a window which allows them to
+ add registries discovered in the project to the Package Manager.
+* `Assets > External Dependency Manager > Package Manager Resolver >
+ Remove Registries` will prompt the user with a window which allows them to
+ remove registries discovered in the project from the Package Manager.
+* `Assets > External Dependency Manager > Package Manager Resolver >
+ Modify Registries` will prompt the user with a window which allows them to
+ add or remove registries discovered in the project.
+
+## Migration
+
+PMR can migrate Version Handler packages installed in the `Assets` folder
+to PM packages. This requires the plugins to implement the following:
+
+* `.unitypackage` must include a Version Handler manifests that describes
+ the components of the plugin. If the plugin has no dependencies
+ the manifest would just include the files in the plugin.
+* The PM package JSON provided by the registry must include a keyword
+ (in the `versions.VERSION.keyword` list) that maps the PM package
+ to a Version Handler package using the format
+ `vh-name:VERSION_HANDLER_MANIFEST_NAME` where `VERSION_HANDLER_MANIFEST_NAME`
+ is the name of the manifest defined in the `.unitypackage`. For
+ more information see the description of the `gvhp_manifestname` asset label
+ in the *Version Handler Usage* section.
+
+When using the `Assets > External Dependency Manager >
+Package Manager Resolver > Migrate Packages` menu option, PMR then
+will:
+
+* List all Version Handler manager packages in the project.
+* Search all available packages in the PM registries and fetch keywords
+ associated with each package parsing the Version Handler manifest names
+ for each package.
+* Map each installed Version Handler package to a PM package.
+* Prompt the user to migrate the discovered packages.
+* Perform package migration for all selected packages if the user clicks
+ the `Apply` button.
+
+## Configuration
+
+PMR can be configured via the `Assets > External Dependency Manager >
+Package Manager Resolver > Settings` menu option:
+
+* `Add package registries` when enabled, when the plugin loads or registry
+ configuration files change, this will prompt the user to add registries
+ that are not present in the Package Manager.
+* `Prompt to add package registries` will cause a developer to be prompted
+ with a window that will ask for confirmation before adding registries.
+ When this is disabled registries are added silently to the project.
+* `Prompt to migrate packages` will cause a developer to be prompted
+ with a window that will ask for confirmation before migrating packages
+ installed in the `Assets` directory to PM packages.
+* `Enable Analytics Reporting` when enabled, reports the use of the plugin
+ to the developers so they can make imrpovements.
+* `Verbose logging` when enabled prints debug information to the console
+ which can be useful when filing bug reports.
+
+# Version Handler Usage
+
+The Version Handler component of this plugin manages:
+
+* Shared Unity plugin dependencies.
+* Upgrading Unity plugins by cleaning up old files from previous versions.
+* Uninstallation of plugins that are distributed with manifest files.
+* Restoration of plugin assets to their original install locations if assets
+ are tagged with the `exportpath` label.
+
+Since the Version Handler needs to modify Unity asset metadata (`.meta` files),
+to enable / disable components, rename and delete asset files it does not
+work with Package Manager installed packages. It's still possible to
+include EDM4U in Package Manager packages, the Version Handler component
+simply won't do anything to PM plugins in this case.
+
+## Using Version Handler Managed Plugins
+
+If a plugin is imported at multiple different versions into a project, if
+the Version Handler is enabled, it will automatically check all managed
+assets to determine the set of assets that are out of date and assets that
+should be removed. To disable automatic checking managed assets disable
+the `Enable version management` option in the
+`Assets > External Dependency Manager > Version Handler > Settings` menu.
+
+If version management is disabled, it's possible to check managed assets
+manually using the
+`Assets > External Dependency Manager > Version Handler > Update` menu option.
+
+### Listing Managed Plugins
+
+Plugins managed by the Version Handler, those that ship with manifest files,
+can displayed using the `Assets > External Dependency Manager >
+Version Handler > Display Managed Packages` menu option. The list of plugins
+are written to the console window along with the set of files used by each
+plugin.
+
+### Uninstalling Managed Plugins
+
+Plugins managed by the Version Handler, those that ship with manifest files,
+can be removed using the `Assets > External Dependency Manager >
+Version Handler > Uninstall Managed Packages` menu option. This operation
+will display a window that allows a developer to select a set of plugins to
+remove which will remove all files owned by each plugin excluding those that
+are in use by other installed plugins.
+
+Files managed by the Version Handler, those labeled with the `gvh` asset label,
+can be checked to see whether anything needs to be upgraded, disabled or
+removed using the `Assets > External Dependency Manager >
+Version Handler > Update` menu option.
+
+### Restore Install Paths
+
+Some developers move assets around in their project which can make it
+harder for plugin maintainers to debug issues if this breaks Unity's
+[special folders](https://docs.unity3d.com/Manual/SpecialFolders.html) rules.
+If assets are labeled with their original install / export path
+(see `gvhp_exportpath` below), Version Handler can restore assets to their
+original locations when using the `Assets > External Dependency Manager >
+Version Handler > Move Files To Install Locations` menu option.
+
+### Settings
+
+Some behavior of the Version Handler can be configured via the
+`Assets > External Dependency Manager > Version Handler > Settings` menu
+option.
+
+* `Enable version management` controls whether the plugin should automatically
+ check asset versions and apply changes. If this is disabled the process
+ should be run manually when installing or upgrading managed plugins using
+ `Assets > External Dependency Manager > Version Handler > Update`.
+* `Rename to canonical filenames` is a legacy option that will rename files to
+ remove version numbers and other labels from filenames.
+* `Prompt for obsolete file deletion` enables the display of a window when
+ obsolete files are deleted allowing the developer to select which files to
+ delete and those to keep.
+* `Allow disabling files via renaming` controls whether obsolete or disabled
+ files should be disabled by renaming them to `myfilename_DISABLED`.
+ Renaming to disable files is required in some scenarios where Unity doesn't
+ support removing files from the build via the PluginImporter.
+* `Enable Analytics Reporting` enables / disables usage reporting to plugin
+ developers to improve the product.
+* `Verbose logging` enables _very_ noisy log output that is useful for
+ debugging while filing a bug report or building a new managed plugin.
+* `Use project settings` saves settings for the plugin in the project rather
+ than system-wide.
+
+## Redistributing a Managed Plugin
+
+The Version Handler employs a couple of methods for managing version
+selection, upgrade and removal of plugins.
+
+* Each plugin can ship with a manifest file that lists the files it includes.
+ This makes it possible for Version Handler to calculate the difference
+ in assets between the most recent release of a plugin and the previous
+ release installed in a project. If a files are removed the Version Handler
+ will prompt the user to clean up obsolete files.
+* Plugins can ship using assets with unique names, unique GUIDs and version
+ number labels. Version numbers can be attached to assets using labels or
+ added to the filename (e.g `myfile.txt` would be `myfile_version-x.y.z.txt).
+ This allows the Version Handler to determine which set of files are the
+ same file at different versions, select the most recent version and prompt
+ the developer to clean up old versions.
+
+Unity plugins can be managed by the Version Handler using the following steps:
+
+ 1. Add the `gvh` asset label to each asset (file) you want Version Handler
+ to manage.
+ 1. Add the `gvh_version-VERSION` label to each asset where `VERSION` is the
+ version of the plugin you're releasing (e.g 1.2.3).
+ 1. Add the `gvhp_exportpath-PATH` label to each asset where `PATH` is the
+ export path of the file when the `.unitypackage` is created. This is
+ used to track files if they're moved around in a project by developers.
+ 1. Optional: Add `gvh_targets-editor` label to each editor DLL in your
+ plugin and disable `editor` as a target platform for the DLL.
+ The Version Handler will enable the most recent version of this DLL when
+ the plugin is imported.
+ 1. Optional: If your plugin is included in other Unity plugins, you should
+ add the version number to each filename and change the GUID of each asset.
+ This allows multiple versions of your plugin to be imported into a Unity
+ project, with the Version Handler component activating only the most
+ recent version.
+ 1. Create a manifest text file named `MY_UNIQUE_PLUGIN_NAME_VERSION.txt`
+ that lists all the files in your plugin relative to the project root.
+ Then add the `gvh_manifest` label to the asset to indicate this file is
+ a plugin manifest.
+ 1. Optional: Add a `gvhp_manifestname-NAME` label to your manifest file
+ to provide a human readable name for your package. If this isn't provided
+ the name of the manifest file will be used as the package name.
+ NAME can match the pattern `[0-9]+[a-zA-Z -]' where a leading integer
+ will set the priority of the name where `0` is the highest priority
+ and preferably used as the display name. The lowest value (i.e highest
+ priority name) will be used as the display name and all other specified
+ names will be aliases of the display name. Aliases can refer to previous
+ names of the package allowing renaming across published versions.
+ 1. Redistribute EDM4U Unity plugin with your plugin.
+ See the [Plugin Redistribution](#plugin-redistribution) for the details.
+
+If you follow these steps:
+
+ * When users import a newer version of your plugin, files referenced by the
+ older version's manifest are cleaned up.
+ * The latest version of the plugin will be selected when users import
+ multiple packages that include your plugin, assuming the steps in
+ [Plugin Redistribution](#plugin-redistribution) are followed.
+
+# Building from Source
+
+To build this plugin from source you need the following tools installed:
+ * Unity (with iOS and Android modules installed)
+
+You can build the plugin by running the following from your shell
+(Linux / OSX):
+
+```
+./gradlew build
+```
+
+or Windows:
+
+```
+./gradlew.bat build
+```
+
+# Releasing
+
+Each time a new build of this plugin is checked into the source tree you
+need to do the following:
+
+ * Bump the plugin version variable `pluginVersion` in `build.gradle`
+ * Update `CHANGELOG.md` with the new version number and changes included in
+ the release.
+ * Build the release using `./gradlew release` which performs the following:
+ * Updates `external-dependency-manager-*.unitypackage`
+ * Copies the unpacked plugin to the `exploded` directory.
+ * Updates template metadata files in the `plugin` directory.
+ The GUIDs of all asset metadata is modified due to the version number
+ change. Each file within the plugin is versioned to allow multiple
+ versions of the plugin to be imported into a Unity project which allows
+ the most recent version to be activated by the Version Handler
+ component.
+ * Create release commit using `./gradlew gitCreateReleaseCommit` which
+ performs `git commit -a -m "description from CHANGELOG.md"`
+ * Once the release commit is merge, tag the release using
+ `./gradlew gitTagRelease` which performs the following:
+ * `git tag -a pluginVersion -m "version RELEASE"` to tag the release.
+ * Update tags on remote branch using `git push --tag REMOTE HEAD:master`
diff --git a/Assets/ExternalDependencyManager/Editor/README.md.meta b/Assets/ExternalDependencyManager/Editor/README.md.meta
new file mode 100644
index 0000000..48a39e8
--- /dev/null
+++ b/Assets/ExternalDependencyManager/Editor/README.md.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 11eb52f780284fd69194951ac46cb538
+labels:
+- gvh
+- gvh_version-1.2.156
+- gvhp_exportpath-ExternalDependencyManager/Editor/README.md
+timeCreated: 1584567712
+licenseType: Pro
+TextScriptImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.156_manifest.txt b/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.156_manifest.txt
new file mode 100755
index 0000000..06ece78
--- /dev/null
+++ b/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.156_manifest.txt
@@ -0,0 +1,14 @@
+Assets/ExternalDependencyManager/Editor/CHANGELOG.md
+Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.156.dll
+Assets/ExternalDependencyManager/Editor/Google.IOSResolver_v1.2.156.dll.mdb
+Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.156.dll
+Assets/ExternalDependencyManager/Editor/Google.JarResolver_v1.2.156.dll.mdb
+Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.156.dll
+Assets/ExternalDependencyManager/Editor/Google.PackageManagerResolver_v1.2.156.dll.mdb
+Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll
+Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb
+Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.156.dll
+Assets/ExternalDependencyManager/Editor/Google.VersionHandlerImpl_v1.2.156.dll.mdb
+Assets/ExternalDependencyManager/Editor/GoogleRegistries.xml
+Assets/ExternalDependencyManager/Editor/LICENSE
+Assets/ExternalDependencyManager/Editor/README.md
diff --git a/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.156_manifest.txt.meta b/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.156_manifest.txt.meta
new file mode 100644
index 0000000..f14964d
--- /dev/null
+++ b/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.156_manifest.txt.meta
@@ -0,0 +1,15 @@
+fileFormatVersion: 2
+guid: 12dc913e0ab84c37aa57b1cfc1a5f1a2
+labels:
+- gvh
+- gvh_manifest
+- gvh_version-1.2.156
+- gvhp_exportpath-ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.156_manifest.txt
+- gvhp_manifestname-0External Dependency Manager
+- gvhp_manifestname-play-services-resolver
+timeCreated: 1474401009
+licenseType: Pro
+TextScriptImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/Android/com.tapr.tapresearch-2.4.1.aar b/Assets/Plugins/Android/com.tapr.tapresearch-2.4.1.aar
new file mode 100644
index 0000000..8c66a35
Binary files /dev/null and b/Assets/Plugins/Android/com.tapr.tapresearch-2.4.1.aar differ
diff --git a/Assets/Plugins/Android/tapresearch.aar.meta b/Assets/Plugins/Android/com.tapr.tapresearch-2.4.1.aar.meta
similarity index 79%
rename from Assets/Plugins/Android/tapresearch.aar.meta
rename to Assets/Plugins/Android/com.tapr.tapresearch-2.4.1.aar.meta
index 6bc6372..4b08852 100644
--- a/Assets/Plugins/Android/tapresearch.aar.meta
+++ b/Assets/Plugins/Android/com.tapr.tapresearch-2.4.1.aar.meta
@@ -1,14 +1,17 @@
fileFormatVersion: 2
-guid: 7b813cdee821d4c9a804ee2ca97e0318
-timeCreated: 1520048712
-licenseType: Free
+guid: 1fb6ccdc7cd204ce9b16690e3cbff507
+labels:
+- gpsr
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
+ defineConstraints: []
isPreloaded: 0
isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
platformData:
- first:
Android: Android
diff --git a/Assets/Plugins/Android/com.tapr.unitybridge.tapresearch-2.4.1.aar b/Assets/Plugins/Android/com.tapr.unitybridge.tapresearch-2.4.1.aar
new file mode 100644
index 0000000..e63fa75
Binary files /dev/null and b/Assets/Plugins/Android/com.tapr.unitybridge.tapresearch-2.4.1.aar differ
diff --git a/Assets/Plugins/Android/unitybridge.aar.meta b/Assets/Plugins/Android/com.tapr.unitybridge.tapresearch-2.4.1.aar.meta
similarity index 79%
rename from Assets/Plugins/Android/unitybridge.aar.meta
rename to Assets/Plugins/Android/com.tapr.unitybridge.tapresearch-2.4.1.aar.meta
index 9b51500..8a94e49 100644
--- a/Assets/Plugins/Android/unitybridge.aar.meta
+++ b/Assets/Plugins/Android/com.tapr.unitybridge.tapresearch-2.4.1.aar.meta
@@ -1,14 +1,17 @@
fileFormatVersion: 2
-guid: 18771837d54f54485b64573364604b9a
-timeCreated: 1520048711
-licenseType: Free
+guid: 0a3f0abc67d5845d7a13ed66efb57456
+labels:
+- gpsr
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
+ defineConstraints: []
isPreloaded: 0
isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
platformData:
- first:
Android: Android
diff --git a/Assets/Plugins/Android/tapresearch.aar b/Assets/Plugins/Android/tapresearch.aar
deleted file mode 100644
index 6887c59..0000000
Binary files a/Assets/Plugins/Android/tapresearch.aar and /dev/null differ
diff --git a/Assets/Plugins/Android/unitybridge.aar b/Assets/Plugins/Android/unitybridge.aar
deleted file mode 100644
index 650a301..0000000
Binary files a/Assets/Plugins/Android/unitybridge.aar and /dev/null differ
diff --git a/Assets/Plugins/TapResearch.meta b/Assets/Plugins/TapResearch.meta
new file mode 100644
index 0000000..69be141
--- /dev/null
+++ b/Assets/Plugins/TapResearch.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: dd970d4383b944f33a26abf08e314c10
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/TapResearch/PlacementCustomParameter.cs b/Assets/Plugins/TapResearch/PlacementCustomParameter.cs
new file mode 100644
index 0000000..1221bbf
--- /dev/null
+++ b/Assets/Plugins/TapResearch/PlacementCustomParameter.cs
@@ -0,0 +1,74 @@
+using System;
+using UnityEngine;
+
+namespace TapResearch
+{
+ [Serializable]
+ public class PlacementCustomParameter
+ {
+ [SerializeField]
+ private string key;
+
+ [SerializeField]
+ private string value;
+
+ public string Key { get { return key; } }
+ public string Value { get { return value; } }
+
+ public PlacementCustomParameter(PlacementCustomParameterBuilder builder,
+ string key, string value)
+ {
+ if (builder == null)
+ throw new ArgumentNullException("The builder parameter can't be a null");
+ this.key = key;
+ this.value = value;
+ }
+
+ }
+
+ public class PlacementCustomParameterBuilder
+ {
+ private const int MAX_VALUE_LENGTH = 256;
+ private string _key;
+ private string _value;
+
+ public PlacementCustomParameterBuilder SetKey(string key)
+ {
+ _key = key;
+ return this;
+ }
+
+ public PlacementCustomParameterBuilder SetValue(string value)
+ {
+ _value = value;
+ return this;
+ }
+
+ public PlacementCustomParameter build()
+ {
+ ValidatePlacement();
+ return new PlacementCustomParameter(this, _key, _value);
+ }
+
+ private void ValidatePlacement()
+ {
+ if (_key == null)
+ {
+ throw new PlacementCustomParametersException("The parameter key can't be null");
+ }
+ else if (_key.Length == 0)
+ {
+ throw new PlacementCustomParametersException("The parameter key size can't be zero");
+ }
+ else if (_value == null)
+ {
+ throw new PlacementCustomParametersException("The parameter value can't be null");
+ }
+ else if (_key.Length > MAX_VALUE_LENGTH)
+ {
+ throw new PlacementCustomParametersException(String.Format("The prameter value "
+ + "length should be less than %d characters", MAX_VALUE_LENGTH));
+ }
+ }
+ }
+}
diff --git a/Assets/Plugins/TapResearch/PlacementCustomParameter.cs.meta b/Assets/Plugins/TapResearch/PlacementCustomParameter.cs.meta
new file mode 100644
index 0000000..9697031
--- /dev/null
+++ b/Assets/Plugins/TapResearch/PlacementCustomParameter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 45c82f4cbad8e4f6183e66798545a9b7
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/TapResearch/PlacementCustomParameters.cs b/Assets/Plugins/TapResearch/PlacementCustomParameters.cs
new file mode 100644
index 0000000..ac24f33
--- /dev/null
+++ b/Assets/Plugins/TapResearch/PlacementCustomParameters.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace TapResearch
+{
+ public class PlacementCustomParameters
+ {
+ private const int MAX_PASS_VALUES = 5;
+
+ [SerializeField]
+ private List ParameterList =
+ new List();
+
+ public List List {get{ return ParameterList; } }
+
+ public void AddParameter(PlacementCustomParameter customParameter)
+ {
+ if (ParameterList.Count < MAX_PASS_VALUES)
+ {
+ ParameterList.Add(customParameter);
+ }
+ else
+ {
+ throw new PlacementCustomParametersException(String.Format("The maximum number of "
+ + "parameters is %d", MAX_PASS_VALUES));
+ }
+ }
+
+ public string ToJson()
+ {
+ return JsonUtility.ToJson(this);
+ }
+ }
+
+}
+
+
diff --git a/Assets/Plugins/TapResearch/PlacementCustomParameters.cs.meta b/Assets/Plugins/TapResearch/PlacementCustomParameters.cs.meta
new file mode 100644
index 0000000..d0e0924
--- /dev/null
+++ b/Assets/Plugins/TapResearch/PlacementCustomParameters.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a5d36dfba53d24c26a78b1abf4d612f6
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/TapResearch/PlacementCustomParametersException.cs b/Assets/Plugins/TapResearch/PlacementCustomParametersException.cs
new file mode 100644
index 0000000..99a7b01
--- /dev/null
+++ b/Assets/Plugins/TapResearch/PlacementCustomParametersException.cs
@@ -0,0 +1,12 @@
+using System;
+public class PlacementCustomParametersException : Exception
+{
+ public PlacementCustomParametersException()
+ {
+ }
+
+ public PlacementCustomParametersException(string message)
+ : base(message)
+ {
+ }
+}
diff --git a/Assets/Plugins/TapResearch/PlacementCustomParametersException.cs.meta b/Assets/Plugins/TapResearch/PlacementCustomParametersException.cs.meta
new file mode 100644
index 0000000..ee0d9f9
--- /dev/null
+++ b/Assets/Plugins/TapResearch/PlacementCustomParametersException.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e9bf2992916fc463f8c3e2381e1e371d
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/TapResearch/TRPlacement.cs b/Assets/Plugins/TapResearch/TRPlacement.cs
new file mode 100644
index 0000000..bc35f1f
--- /dev/null
+++ b/Assets/Plugins/TapResearch/TRPlacement.cs
@@ -0,0 +1,68 @@
+using UnityEngine;
+using System;
+
+namespace TapResearch
+{
+#pragma warning disable 649
+
+ [Serializable]
+ public struct TRPlacement
+ {
+ [SerializeField]
+ private string placementIdentifier;
+
+ [SerializeField]
+ private string currencyName;
+
+ [SerializeField]
+ private string errorMessage;
+
+ [SerializeField]
+ private bool isSurveyWallAvailable;
+
+ [SerializeField]
+ private bool hasHotSurvey;
+
+ [SerializeField]
+ private int placementCode;
+
+ [SerializeField]
+ private int maxPayoutInCurrency;
+
+ [SerializeField]
+ private int minPayoutInCurrency;
+
+ [SerializeField]
+ private int maxSurveyLength;
+
+ [SerializeField]
+ private int minSurveyLength;
+
+ public const int PLACEMENT_CODE_SDK_NOT_READY = -1;
+
+ public string PlacementIdentifier { get { return placementIdentifier; } }
+ public string CurrencyName { get { return currencyName; } }
+ public string ErrorMessage { get { return errorMessage; } }
+ public bool IsSurveyWallAvailable { get { return isSurveyWallAvailable; } }
+ public bool HasHotSurvey { get { return hasHotSurvey; } }
+ public int PlacementCode { get { return placementCode; } }
+ public int MaxPayoutInCurrency { get { return maxPayoutInCurrency; } }
+ public int MinPayoutInCurrency { get { return minPayoutInCurrency; } }
+ public int MaxSurveyLength { get { return maxSurveyLength; } }
+ public int MinSurveyLength { get { return minSurveyLength; } }
+
+ public void ShowSurveyWall()
+ {
+ isSurveyWallAvailable = false;
+ TapResearchSDK.ShowSurveyWall(PlacementIdentifier);
+ }
+
+ public void ShowSurveyWall(PlacementCustomParameters customParameters)
+ {
+ isSurveyWallAvailable = false;
+ TapResearchSDK.ShowSurveyWall(PlacementIdentifier, customParameters);
+ }
+
+ }
+}
+
diff --git a/Assets/Plugins/TapResearch/TRPlacement.cs.meta b/Assets/Plugins/TapResearch/TRPlacement.cs.meta
new file mode 100644
index 0000000..e402daf
--- /dev/null
+++ b/Assets/Plugins/TapResearch/TRPlacement.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 80f4a8262bd7e45e693d4a8c0ee8d970
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/TapResearch/TRReward.cs b/Assets/Plugins/TapResearch/TRReward.cs
new file mode 100644
index 0000000..3556cc2
--- /dev/null
+++ b/Assets/Plugins/TapResearch/TRReward.cs
@@ -0,0 +1,35 @@
+using System;
+using UnityEngine;
+
+namespace TapResearch
+{
+#pragma warning disable 649
+ [Serializable]
+ public struct TRReward
+ {
+ [SerializeField]
+ private string transactionIdentifier;
+
+ [SerializeField]
+ private string currencyName;
+
+ [SerializeField]
+ private string placementIdentifier;
+
+ [SerializeField]
+ private int rewardAmount;
+
+ [SerializeField]
+ private int payoutEvent;
+
+ public string TransactionIdentifier { get { return transactionIdentifier; } }
+
+ public string CurrencyName { get { return currencyName; } }
+
+ public string PlacementIdentifier { get { return placementIdentifier; } }
+
+ public int RewardAmount { get { return rewardAmount; } }
+
+ public int PayoutEvent { get { return payoutEvent; } }
+ }
+}
diff --git a/Assets/Plugins/TapResearch/TRReward.cs.meta b/Assets/Plugins/TapResearch/TRReward.cs.meta
new file mode 100644
index 0000000..001f6c6
--- /dev/null
+++ b/Assets/Plugins/TapResearch/TRReward.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 78efff5d4d4344824b66dd09bb834ee7
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/TapResearch.cs b/Assets/Plugins/TapResearch/TapResearch.cs
similarity index 54%
rename from Assets/Plugins/TapResearch.cs
rename to Assets/Plugins/TapResearch/TapResearch.cs
index 4f59a8f..c1b5ebc 100644
--- a/Assets/Plugins/TapResearch.cs
+++ b/Assets/Plugins/TapResearch/TapResearch.cs
@@ -1,24 +1,28 @@
-using UnityEngine;
+using UnityEngine;
using System;
using System.Runtime.InteropServices;
+using System.Collections.Generic;
- public class TapResearch : MonoBehaviour {
+namespace TapResearch
+{
+ public class TapResearchSDK : MonoBehaviour
+ {
private static AndroidJavaClass _unityBridge;
- private const string version = "2.0.8";
+ private const string SdkVersion = "2.3.0";
// Make sure there is only one instance of TapResearch
- private static TapResearch _instance;
+ private static TapResearchSDK _instance;
// A game object must exist for us to pass messages from native to unity
private static void InitializeInstance()
{
if (_instance == null)
{
- _instance = FindObjectOfType (typeof(TapResearch)) as TapResearch;
+ _instance = FindObjectOfType(typeof(TapResearchSDK)) as TapResearchSDK;
if (_instance == null)
{
- _instance = new GameObject ("TapResearch").AddComponent ();
+ _instance = new GameObject("TapResearch").AddComponent();
}
}
}
@@ -28,26 +32,54 @@ private static void InitializeInstance()
public delegate void PlacementDelegate(TRPlacement placement);
public static PlacementDelegate OnPlacementReady;
- public delegate void TRRewardDelegate (TRReward reward);
- public static TRRewardDelegate OnReceiveReward;
+ public delegate void PlacementEventDelegate(TRPlacement placement);
+ public static PlacementEventDelegate OnPlacementEventReady;
+
+ public delegate void ExpiredPlacementDelegate(String expiredPlacement);
+ public static ExpiredPlacementDelegate OnPlacementEventUnavailable;
- public delegate void TRSurveyModalDelegate (TRPlacement placement);
+ public delegate void TRRewardDelegate(TRReward reward);
+ private static TRRewardDelegate _rewardDelegate;
+ public static TRRewardDelegate OnReceiveReward
+ {
+ get => _rewardDelegate;
+ set
+ {
+ _rewardDelegate = value;
+ }
+ }
+
+ public delegate void TRRewardCollectionDelegate(TRReward[] reward);
+ private static TRRewardCollectionDelegate _rewardCollectionDelegate;
+ public static TRRewardCollectionDelegate OnReceiveRewardCollection
+ {
+ get => _rewardCollectionDelegate;
+ set
+ {
+ SetReceiveRewardCollection(true);
+ _rewardCollectionDelegate = value;
+
+ }
+ }
+
+ public delegate void TRSurveyModalDelegate(TRPlacement placement);
public static TRSurveyModalDelegate OnSurveyWallOpened;
public static TRSurveyModalDelegate OnSurveyWallDismissed;
+
void Awake()
{
// Set name to allow unity to find this object when passing messages.
name = "TapResearch";
// Make sure this object persists across scenes
- DontDestroyOnLoad (transform.gameObject);
+ DontDestroyOnLoad(transform.gameObject);
}
void Start()
{
- DontDestroyOnLoad (transform.gameObject);
+ DontDestroyOnLoad(transform.gameObject);
}
public void OnTapResearchPlacementReady(string args)
@@ -68,7 +100,7 @@ public void TapResearchOnSurveyWallOpened(string args)
if (OnSurveyWallOpened != null)
{
var placement = JsonUtility.FromJson(args);
- OnSurveyWallOpened (placement);
+ OnSurveyWallOpened(placement);
}
}
@@ -76,9 +108,8 @@ public void TapResearchOnSurveyWallDismissed(string args)
{
if (OnSurveyWallDismissed != null)
{
- // var placement = new TRPlacement(args, _unityBridge);
- var placement = JsonUtility.FromJson(args);
- OnSurveyWallDismissed (placement);
+ var placement = JsonUtility.FromJson(args);
+ OnSurveyWallDismissed(placement);
}
}
@@ -88,38 +119,79 @@ public void OnTapResearchDidReceiveReward(string args)
return;
var reward = JsonUtility.FromJson(args);
- OnReceiveReward (reward);
+ OnReceiveReward(reward);
}
- #if UNITY_EDITOR || (!UNITY_IPHONE && !UNITY_ANDROID)
- static public void Configure(string apiToken)
- {
- Debug.LogWarning ("TapResearch will not work in the Unity editor.");
- InitializeInstance ();
- }
+ public void OnTapResearchDidReceiveRewardCollection(string args)
+ {
+ if (OnReceiveRewardCollection == null)
+ return;
- public static void InitPlacement(string placementIdentifier) { }
- public static void ShowSurveyWall(string placementIdentifier) { }
- public static void SetUniqueUserIdentifier (string userIdentifier) { }
- public static void SetDebugMode(bool debugMode) { }
- public static void SetNavigationBarColor(string hexColor) { }
- public static void SetNavigationBarText(string text) { }
- public static void SetNavigationBarTextColor(String hexColor) { }
+ var wrapper = JsonUtility.FromJson("{\"Rewards\":" + args + "}");
+ OnReceiveRewardCollection(wrapper.Rewards);
+ }
- #elif UNITY_IPHONE && !UNITY_EDITOR
+ public void OnTapResearchPlacementEventReady(string args)
+ {
+ Debug.Log("OnTapResearchPlacementEventReady");
+ if (OnPlacementEventReady != null)
+ {
+ Debug.Log("On placement ready called with args - " + args);
+ var placement = JsonUtility.FromJson(args);
+ Debug.Log(placement.PlacementIdentifier);
+ OnPlacementEventReady(placement);
+ }
+ }
+
+ public void OnTapResearchPlacementEventUnavailable(String args)
+ {
+ Debug.Log("OnTapResearchPlacementEventUnavailable" + args);
+ if (OnPlacementEventUnavailable == null) { return; }
+ OnPlacementEventUnavailable(args);
+ }
+
+ [Serializable]
+ private class TRRewardList
+ {
+ [SerializeField]
+ public TRReward[] Rewards;
+ }
+
+#if UNITY_EDITOR || (!UNITY_IPHONE && !UNITY_ANDROID)
+ static public void Configure(string apiToken)
+ {
+ Debug.LogWarning("TapResearch will not work in the Unity editor.");
+ InitializeInstance();
+ }
+
+ public static void ShowSurveyWall(string placementIdentifier) { }
+ public static void ShowSurveyWall(string placementIdentifier, PlacementCustomParameters customParameters) { }
+ public static void SetUniqueUserIdentifier(string userIdentifier) { }
+ public static void SetDebugMode(bool debugMode) { }
+ public static void SetNavigationBarColor(string hexColor) { }
+ public static void SetNavigationBarText(string text) { }
+ public static void SetNavigationBarTextColor(String hexColor) { }
+ public static void SetReceiveRewardCollection(Boolean receiveAsCollection) { }
+
+#elif UNITY_IPHONE && !UNITY_EDITOR
public static void Configure (string apiToken)
{
InitializeInstance ();
- TRIOSConfigure (apiToken, version);
+ TRIOSConfigure (apiToken, SdkVersion);
+ }
+
+ public static void ShowSurveyWall(String placementIdentifier, PlacementCustomParameters customParameters)
+ {
+ ShowSurveyWallWithParameters(placementIdentifier, JsonUtility.ToJson(customParameters));
}
[DllImport ("__Internal")]
- extern public static void TRIOSConfigure(string apiToken, string version);
- [DllImport ("__Internal")]
- extern public static void InitPlacement(string placementIdentifier);
+ extern public static void TRIOSConfigure(string apiToken, string SdkVersion);
[DllImport ("__Internal")]
extern public static void ShowSurveyWall(string placementIdentifier);
[DllImport ("__Internal")]
+ extern public static void ShowSurveyWallWithParameters(string placementIdentifier, string customParameters);
+ [DllImport ("__Internal")]
extern public static void SetUniqueUserIdentifier(string userIdentifier);
[DllImport ("__Internal")]
extern public static void SetNavigationBarColor(string hexColor);
@@ -127,15 +199,17 @@ public static void Configure (string apiToken)
extern public static void SetNavigationBarText(string text);
[DllImport("__Internal")]
extern public static void SetNavigationBarTextColor(String hexColor);
+ [DllImport("__Internal")]
+ extern public static void SetReceiveRewardCollection(Boolean receiveAsCollection);
- #elif UNITY_ANDROID && !UNITY_EDITOR
+#elif UNITY_ANDROID && !UNITY_EDITOR
private static bool _pluginInitialized = false;
private static AndroidJavaClass _unityPlayer;
public static void Configure (string apiToken) {
InitializeInstance ();
- AndroidConfigure (apiToken, version);
+ AndroidConfigure (apiToken, SdkVersion);
}
private static void InitializeAndroidPlugin()
@@ -164,14 +238,14 @@ private static void InitializeAndroidPlugin()
_pluginInitialized = true;
}
- private static void AndroidConfigure(string apiToken, string version)
+ private static void AndroidConfigure(string apiToken, string SdkVersion)
{
if (!_pluginInitialized)
{
InitializeAndroidPlugin ();
var javaActivity = _unityPlayer.GetStatic ("currentActivity");
- _unityBridge.CallStatic("configure", new object[]{apiToken, javaActivity, version});
+ _unityBridge.CallStatic("configure", new object[]{apiToken, javaActivity, SdkVersion});
}
}
@@ -182,16 +256,17 @@ private static bool isInitialized()
return _pluginInitialized;
}
- public static void InitPlacement(string placementIdentifier)
+ public static void ShowSurveyWall(string placementIdentifier)
{
- if (isInitialized())
- _unityBridge.CallStatic("initPlacement", new object[]{placementIdentifier});
+ if (isInitialized()) {
+ _unityBridge.CallStatic("showSurveyWall", placementIdentifier);
+ }
}
- public static void ShowSurveyWall(string placementIdentifier)
+ public static void ShowSurveyWall(string placementIdentifier, PlacementCustomParameters customParameters)
{
if (isInitialized()) {
- _unityBridge.CallStatic("showSurveyWall", placementIdentifier);
+ _unityBridge.CallStatic("showSurveyWall", placementIdentifier, JsonUtility.ToJson(customParameters));
}
}
@@ -225,88 +300,12 @@ public static void SetNavigationBarTextColor(string hexColor)
_unityBridge.CallStatic("setNavigationBarTextColor", hexColor);
}
-
- #endif
- }
-
-[Serializable]
-public class TRPlacement
-{
- [SerializeField]
- private string placementIdentifier;
-
- [SerializeField]
- private string currencyName;
-
- [SerializeField]
- private string errorMessage;
-
- [SerializeField]
- private bool isSurveyWallAvailable;
-
- [SerializeField]
- private bool hasHotSurvey;
-
- [SerializeField]
- private int placementCode;
-
- [SerializeField]
- private int maxPayoutInCurrency;
-
- [SerializeField]
- private int minPayoutInCurrency;
-
- [SerializeField]
- private int maxSurveyLength;
-
- [SerializeField]
- private int minSurveyLength;
-
- public const int PLACEMENT_CODE_SDK_NOT_READY = -1;
-
- public string PlacementIdentifier { get { return placementIdentifier; } }
- public string CurrencyName { get{ return currencyName; } }
- public string ErrorMessage { get {return errorMessage;} }
- public bool IsSurveyWallAvailable { get{ return isSurveyWallAvailable; } }
- public bool HasHotSurvey { get{ return hasHotSurvey; } }
- public int PlacementCode { get {return placementCode; } }
- public int MaxPayoutInCurrency { get { return maxPayoutInCurrency; } }
- public int MinPayoutInCurrency { get { return minPayoutInCurrency; } }
- public int MaxSurveyLength { get { return maxSurveyLength; } }
- public int MinSurveyLength { get { return minSurveyLength; } }
-
- public void ShowSurveyWall()
- {
- isSurveyWallAvailable = false;
- TapResearch.ShowSurveyWall(PlacementIdentifier);
+ public static void SetReceiveRewardCollection(Boolean receiveAsCollection){
+ if (isInitialized())
+ _unityBridge.CallStatic("setReceiveRewardCollection", receiveAsCollection);
}
-}
-
-[Serializable]
-public class TRReward
-{
- [SerializeField]
- private string transactionIdentifier;
-
- [SerializeField]
- private string currencyName;
-
- [SerializeField]
- private string placementIdentifier;
-
- [SerializeField]
- private int rewardAmount;
-
- [SerializeField]
- private int payoutEvent;
- public string TransactionIdentifier{ get {return transactionIdentifier;} }
-
- public string CurrencyName { get {return currencyName;} }
-
- public string PlacementIdentifier { get {return placementIdentifier;} }
-
- public int RewardAmount { get {return rewardAmount;} }
-
- public int PayoutEvent { get {return payoutEvent;} }
+#endif
+ }
}
+
diff --git a/Assets/Plugins/TapResearch.cs.meta b/Assets/Plugins/TapResearch/TapResearch.cs.meta
similarity index 69%
rename from Assets/Plugins/TapResearch.cs.meta
rename to Assets/Plugins/TapResearch/TapResearch.cs.meta
index af2daa5..9da1644 100644
--- a/Assets/Plugins/TapResearch.cs.meta
+++ b/Assets/Plugins/TapResearch/TapResearch.cs.meta
@@ -1,8 +1,7 @@
fileFormatVersion: 2
-guid: 9b939dce85a3c49ed8a1d285a67d36e7
-timeCreated: 1468470146
-licenseType: Free
+guid: 8366194caf68e4795a544a107976142b
MonoImporter:
+ externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
diff --git a/Assets/Plugins/iOS/TRSwiftEnabler.swift b/Assets/Plugins/iOS/TRSwiftEnabler.swift
new file mode 100644
index 0000000..3b1e5d8
--- /dev/null
+++ b/Assets/Plugins/iOS/TRSwiftEnabler.swift
@@ -0,0 +1,12 @@
+//
+// TRSwiftEnabler.swift
+// Unity-iPhone
+//
+// Created by Jeroen Verbeek on 9/27/21.
+//
+
+import Foundation
+
+class TRSwiftEnabler {
+
+}
diff --git a/Assets/Plugins/iOS/TRSwiftEnabler.swift.meta b/Assets/Plugins/iOS/TRSwiftEnabler.swift.meta
new file mode 100644
index 0000000..f93139c
--- /dev/null
+++ b/Assets/Plugins/iOS/TRSwiftEnabler.swift.meta
@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: 19401d67b50c54f03b55d881ead1ed70
+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: 0
+ settings:
+ DefaultValueInitialized: true
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 1
+ settings:
+ AddToEmbeddedBinaries: false
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/iOS/TRUnityBridge.mm b/Assets/Plugins/iOS/TRUnityBridge.mm
index 20d9e83..dc2d87d 100644
--- a/Assets/Plugins/iOS/TRUnityBridge.mm
+++ b/Assets/Plugins/iOS/TRUnityBridge.mm
@@ -7,45 +7,91 @@
//
#import
+#import
+#import
+#import
-@interface TRUnityDelegate : NSObject {
+BOOL receiveRewardCollection = NO;
+//MARK: - Delegate class for TapResearchSDK
+
+@interface TRUnityDelegate : NSObject {
}
+@property (readwrite, nonatomic) NSMutableDictionary *placements;
+
- (void)tapResearchDidReceiveReward:(TRReward *)reward;
- (void)tapResearchSurveyWallOpenedWithPlacement:(TRPlacement *)placement;
- (void)tapResearchSurveyWallDismissedWithPlacement:(TRPlacement *)placement;
@end
+
+//MARK: - Delegate class implementation for TapResearchSDK
+
+
@implementation TRUnityDelegate
-- (void)tapResearchDidReceiveReward:(TRReward *)reward;
-{
- NSDictionary *rewardDict = [TRSerilizationHelper dictionaryWithPropertiesOfObject: reward];
- NSString *jsonString = [TRSerilizationHelper jsonStringFromDictionary:rewardDict];
+- (void)tapResearchDidReceiveReward:(TRReward *)reward {
+
+ NSDictionary *rewardDict = [TRSerializationHelper dictionaryWithPropertiesOfObject: reward];
+ NSString *jsonString = [TRSerializationHelper jsonStringFromDictionary:rewardDict];
UnitySendMessage("TapResearch", "OnTapResearchDidReceiveReward", [jsonString UTF8String]);
}
-- (void)tapResearchSurveyWallOpenedWithPlacement:(TRPlacement *)placement;
-{
+- (void)tapResearchDidReceiveRewards:(NSArray*)rewards {
+
+ if (receiveRewardCollection) {
+ // Send an Array of rewards to Unity
+ NSMutableArray *values = [[NSMutableArray alloc] init];
+ for (TRReward *reward in rewards) {
+ NSDictionary *rewardDict = [TRSerializationHelper dictionaryWithPropertiesOfObject: reward];
+ [values addObject:rewardDict];
+ }
+ NSString *jsonString = [TRSerializationHelper jsonStringFromArray:values];
+ UnitySendMessage("TapResearch", "OnTapResearchDidReceiveRewardCollection", [jsonString UTF8String]);
+ }
+ else {
+ // Send the rewards one-by-one to Unity (existing functionality)
+ for (TRReward *reward in rewards) {
+ [self tapResearchDidReceiveReward:reward];
+ }
+ }
+}
+
+- (void)tapResearchSurveyWallOpenedWithPlacement:(TRPlacement *)placement {
[self sendPlacement:placement message:@"TapResearchOnSurveyWallOpened"];
}
-- (void)tapResearchSurveyWallDismissedWithPlacement:(TRPlacement *)placement;
-{
+- (void)tapResearchSurveyWallDismissedWithPlacement:(TRPlacement *)placement {
[self sendPlacement:placement message:@"TapResearchOnSurveyWallDismissed"];
}
-- (void)sendPlacement:(TRPlacement *)placement message:(NSString *)message
-{
- NSDictionary *placementDict = [TRSerilizationHelper dictionaryWithPropertiesOfObject:placement];
- NSString *jsonString = [TRSerilizationHelper jsonStringFromDictionary:placementDict];
+- (void)sendPlacement:(TRPlacement *)placement message:(NSString *)message {
+
+ NSDictionary *placementDict = [TRSerializationHelper dictionaryWithPropertiesOfObject:placement];
+ NSString *jsonString = [TRSerializationHelper jsonStringFromDictionary:placementDict];
UnitySendMessage("TapResearch", [message UTF8String], [jsonString UTF8String]);
}
+- (void)placementReady:(nonnull TRPlacement *)placement {
+
+ if (!self.placements) {
+ self.placements = [[NSMutableDictionary alloc] init];
+ }
+ [self.placements setObject:placement forKey:placement.placementIdentifier];
+ [self sendPlacement:placement message:@"OnTapResearchPlacementEventReady"];
+}
+
+- (void)placementUnavailable:(nonnull NSString *)placementId {
+ [self.placements removeObjectForKey:placementId];
+ UnitySendMessage("TapResearch", [@"OnTapResearchPlacementEventUnavailable" UTF8String], [placementId UTF8String]);
+}
+
@end
+//MARK: - C interfaces for Unity/C#
+
#include
using namespace std;
@@ -54,9 +100,9 @@ - (void)sendPlacement:(TRPlacement *)placement message:(NSString *)message
NSString *iOSToken;
TRUnityDelegate *iOSDelegate = nil;
BOOL configured = NO;
-NSMutableDictionary *placementsCache = [[NSMutableDictionary alloc]init];
UIColor *colorFromHexString(const char *hexColor) {
+
unsigned rgbValue = 0;
NSString *hexString = [NSString stringWithUTF8String:hexColor];
NSScanner *scanner = [NSScanner scannerWithString:hexString];
@@ -66,57 +112,103 @@ - (void)sendPlacement:(TRPlacement *)placement message:(NSString *)message
return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:1.0];
}
-
+//MARK: - Start of externals
extern "C" {
- void TRIOSConfigure(const char *apiToken, const char *version) {
- if (configured) return;
-
- iOSToken = [NSString stringWithUTF8String:apiToken];
- NSString *versionString = [NSString stringWithUTF8String:version];
- iOSDelegate = [[TRUnityDelegate alloc] init];
- [TapResearch initWithApiToken:iOSToken developmentPlatform:DEV_PLATFORM developmentPlatformVersion:versionString delegate:iOSDelegate];
- configured = YES;
- }
- void SetUniqueUserIdentifier(const char *userIdentifier) {
- NSString *identifier = [NSString stringWithUTF8String:userIdentifier];
- [TapResearch setUniqueUserIdentifier:identifier];
- }
+void TRIOSConfigure(const char *apiToken, const char *version) {
- void InitPlacement(const char *placementIdentifier) {
- NSString *placementIdentifierString = [NSString stringWithUTF8String:placementIdentifier];
- [TapResearch initPlacementWithIdentifier:placementIdentifierString placementBlock:^(TRPlacement *placement) {
- [placementsCache setObject:placement forKey:placement.placementIdentifier];
- NSDictionary *placementDict = [TRSerilizationHelper dictionaryWithPropertiesOfObject: placement];
- NSString *jsonString = [TRSerilizationHelper jsonStringFromDictionary:placementDict];
- UnitySendMessage("TapResearch", "OnTapResearchPlacementReady", [jsonString UTF8String]);
- }];
+ if (configured) {
+ return;
}
+ iOSToken = [NSString stringWithUTF8String:apiToken];
+ NSString *versionString = [NSString stringWithUTF8String:version];
+ iOSDelegate = [[TRUnityDelegate alloc] init];
+ [TapResearch initWithApiToken:iOSToken developmentPlatform:DEV_PLATFORM developmentPlatformVersion:versionString rewardDelegate:iOSDelegate placementDelegate:iOSDelegate];
+ configured = YES;
+}
- void ShowSurveyWall(const char* placementIdentifier) {
- NSString *placementIdentifierString = [NSString stringWithUTF8String:placementIdentifier];
- TRPlacement *placement = [placementsCache valueForKey:placementIdentifierString];
- if (placement) {
- [placement showSurveyWallWithDelegate:iOSDelegate];
- }
+void SetUniqueUserIdentifier(const char *userIdentifier) {
+
+ NSString *identifier = [NSString stringWithUTF8String:userIdentifier];
+ [TapResearch setUniqueUserIdentifier:identifier];
+}
+
+TRPlacementCustomParameterList *InitPlacementParameters(const char *customParameters) {
+
+ NSString *param = [NSString stringWithUTF8String:customParameters];
+ NSError *jsonError;
+ NSData *objectData = [param dataUsingEncoding:NSUTF8StringEncoding];
+ NSDictionary *json = [NSJSONSerialization JSONObjectWithData:objectData
+ options:NSJSONReadingMutableContainers
+ error:&jsonError];
+ NSArray *arr = [json objectForKey:@"ParameterList"];
+ TRPlacementCustomParameterList *parameterList = [[TRPlacementCustomParameterList alloc] init];
+ for(NSDictionary *dict in arr) {
+ TRPlacementCustomParameter *param = [TRPlacementCustomParameter new];
+ NSString *key = [dict objectForKey: @"key"];
+ NSString *value = [dict objectForKey: @"value"];
+ [[[[param builder] key: key] value: value] build];
+ [parameterList addParameter:param];
+ }
+
+ return parameterList;
+}
+
+void SetReceiveRewardCollection(int32_t receiveCollection) {
+ receiveRewardCollection = (BOOL)receiveCollection;
+}
+
+void ShowSurveyWall(const char* placementIdentifier) {
+
+ NSString *placementIdentifierString = [NSString stringWithUTF8String:placementIdentifier];
+ TRPlacement *placement = iOSDelegate.placements[placementIdentifierString];
+ if (placement) {
+ [placement showSurveyWallWithDelegate:iOSDelegate];
}
+}
- void SetNavigationBarColor(const char *hexColor) {
- if (!hexColor) return;
- UIColor *color = colorFromHexString(hexColor);
- [TapResearch setNavigationBarColor:color];
+void ShowSurveyWallWithParameters(const char* placementIdentifier, const char *customParameters) {
+
+ TRPlacementCustomParameterList *parameterList;
+ if(customParameters) {
+ parameterList = InitPlacementParameters(customParameters);
}
+
+ NSString *placementIdentifierString = [NSString stringWithUTF8String:placementIdentifier];
+ TRPlacement *placement = iOSDelegate.placements[placementIdentifierString];
+ if (placement) {
+ [placement showSurveyWallWithDelegate:iOSDelegate customParameters:parameterList];
+ }
+}
- void SetNavigationBarText(const char *text) {
- if (!text) return;
- NSString *titleText = [NSString stringWithUTF8String:text];
- [TapResearch setNavigationBarText:titleText];
+void SetNavigationBarColor(const char *hexColor) {
+
+ if (!hexColor) {
+ return;
}
+ UIColor *color = colorFromHexString(hexColor);
+ [TapResearch setNavigationBarColor:color];
+}
- void SetNavigationBarTextColor(const char *hexColor) {
- if (!hexColor) return;
- UIColor *color = colorFromHexString(hexColor);
- [TapResearch setNavigationBarTextColor:color];
+void SetNavigationBarText(const char *text) {
+
+ if (!text) {
+ return;
}
+ NSString *titleText = [NSString stringWithUTF8String:text];
+ [TapResearch setNavigationBarText:titleText];
+}
+void SetNavigationBarTextColor(const char *hexColor) {
+
+ if (!hexColor) {
+ return;
+ }
+ UIColor *color = colorFromHexString(hexColor);
+ [TapResearch setNavigationBarTextColor:color];
}
+
+//MARK: End of externals
+} /* End of externals */
+//MARK: -
+
diff --git a/Assets/Plugins/iOS/TRUnityBridge.mm.meta b/Assets/Plugins/iOS/TRUnityBridge.mm.meta
index 61fe278..fe6f1a6 100644
--- a/Assets/Plugins/iOS/TRUnityBridge.mm.meta
+++ b/Assets/Plugins/iOS/TRUnityBridge.mm.meta
@@ -1,33 +1,99 @@
fileFormatVersion: 2
guid: df7427f8958ec49d090faa3ada528957
-timeCreated: 1468470060
-licenseType: Free
PluginImporter:
+ externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
+ defineConstraints: []
isPreloaded: 0
isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
platformData:
- data:
- first:
- Any:
- second:
- enabled: 0
- settings: {}
- data:
- first:
- Editor: Editor
- second:
- enabled: 0
- settings:
- DefaultValueInitialized: true
- data:
- first:
- iPhone: iOS
- second:
- enabled: 1
- settings: {}
+ - first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux: 1
+ Exclude Linux64: 1
+ Exclude LinuxUniversal: 1
+ Exclude OSXUniversal: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 0
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Facebook: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Facebook: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Linux
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 1
+ settings:
+ AddToEmbeddedBinaries: false
+ CompileFlags:
+ FrameworkDependencies:
userData:
assetBundleName:
assetBundleVariant:
diff --git a/Assets/Resources.meta b/Assets/Resources.meta
new file mode 100644
index 0000000..f9f3980
--- /dev/null
+++ b/Assets/Resources.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 88ded455dc0a9410abfb5d04b1082f7a
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/BillingMode.json b/Assets/Resources/BillingMode.json
new file mode 100644
index 0000000..6f4bfb7
--- /dev/null
+++ b/Assets/Resources/BillingMode.json
@@ -0,0 +1 @@
+{"androidStore":"GooglePlay"}
\ No newline at end of file
diff --git a/Assets/Resources/BillingMode.json.meta b/Assets/Resources/BillingMode.json.meta
new file mode 100644
index 0000000..2d608d7
--- /dev/null
+++ b/Assets/Resources/BillingMode.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 5fe7f125ed01845c18c59d7af21a4bf5
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/TestButtonClick.cs b/Assets/TestButtonClick.cs
index bb6602f..63a15da 100644
--- a/Assets/TestButtonClick.cs
+++ b/Assets/TestButtonClick.cs
@@ -2,49 +2,71 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
+using System;
+using TapResearch;
-public class TestButtonClick : MonoBehaviour {
-
- public Button surveyButton;
- public TRPlacement myPlacement;
-
- // Use this for initialization
- void Start ()
- {
- surveyButton.gameObject.SetActive (false);
- TapResearch.Configure (API_TOKEN);
- TapResearch.SetUniqueUserIdentifier (UNIQUE_USER_IDENTIFIER);
- TapResearch.OnPlacementReady = this.OnPlacementReady;
- TapResearch.OnSurveyWallOpened = this.OnSurveyWallOpened;
- TapResearch.OnSurveyWallDismissed = this.OnSurveyWallDismissed;
- TapResearch.OnReceiveReward = this.OnDidReceiveReward;
- TapResearch.InitPlacement(PLACEMENT_IDENTIFIER);
- }
-
- public void OnButtonClick()
- {
- myPlacement.ShowSurveyWall();
- }
-
- void OnPlacementReady(TRPlacement placement)
- {
- myPlacement = placement;
- surveyButton.gameObject.SetActive(true);
- }
-
- void OnDidReceiveReward(TRReward reward)
- {
- Debug.Log ("You've earned " + reward.RewardAmount + " " + reward.CurrencyName + ". " + reward.TransactionIdentifier);
- }
-
- void OnSurveyWallOpened (TRPlacement placement)
- {
- Debug.Log ("Survey Modal Opened");
- }
-
- void OnSurveyWallDismissed (TRPlacement placement)
- {
- Debug.Log ("Survey Modal Dismissed");
- }
+public class TestButtonClick : MonoBehaviour
+{
+ public Button surveyButton;
+ private TRPlacement mainPlacement;
+
+ // Use this for initialization
+ void Awake()
+ {
+ surveyButton.enabled = false;
+ TapResearchSDK.Configure("");
+ TapResearchSDK.SetUniqueUserIdentifier("");
+ TapResearchSDK.OnSurveyWallOpened = this.OnSurveyModalOpened;
+ TapResearchSDK.OnSurveyWallDismissed = this.OnSurveyModalDismissed;
+ TapResearchSDK.OnReceiveRewardCollection = this.OnReceiveRewardCollection;
+ TapResearchSDK.OnReceiveReward = this.OnDidReceiveReward;
+ TapResearchSDK.OnPlacementEventUnavailable = this.OnPlacementEventUnavailable;
+ TapResearchSDK.OnPlacementEventReady = this.OnPlacementEventReady;
+ }
+
+ private void OnPlacementEventReady(TRPlacement placement)
+ {
+ surveyButton.enabled = true;
+ Debug.Log("Placement Received " + placement.PlacementIdentifier);
+ if (placement.PlacementCode != TRPlacement.PLACEMENT_CODE_SDK_NOT_READY)
+ {
+ mainPlacement = placement;
+ }
+ }
+
+ private void OnPlacementEventUnavailable(string expiredPlacement)
+ {
+ Debug.Log("Placement expired: " + expiredPlacement);
+ }
+
+ public void OnButtonClick()
+ {
+ Debug.Log("Button pressed: attmpting to show: " + mainPlacement.IsSurveyWallAvailable + " " + mainPlacement.PlacementIdentifier);
+ if (mainPlacement.IsSurveyWallAvailable)
+ mainPlacement.ShowSurveyWall();
+ }
+
+ void OnDidReceiveReward(TRReward reward)
+ {
+ Debug.Log("You've earned " + reward.RewardAmount + " " + reward.CurrencyName + ". " + reward.TransactionIdentifier);
+ }
+
+ void OnReceiveRewardCollection(TRReward[] rewards)
+ {
+ foreach (TRReward reward in rewards)
+ {
+ Debug.Log("Collection You've earned " + reward.RewardAmount + " " + reward.CurrencyName + ". " + reward.TransactionIdentifier);
+ }
+ }
+
+ void OnSurveyModalOpened(TRPlacement placement)
+ {
+ Debug.Log("Survey Modal Opened");
+ }
+
+ void OnSurveyModalDismissed(TRPlacement placement)
+ {
+ Debug.Log("Survey Modal Dismissed");
+ }
}
diff --git a/Assets/TestButtonClick.cs.meta b/Assets/TestButtonClick.cs.meta
index c6ede40..cf8c921 100644
--- a/Assets/TestButtonClick.cs.meta
+++ b/Assets/TestButtonClick.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
-guid: b4cfe661679e54421b591a074192a2f4
-timeCreated: 1499717238
+guid: 56e539869638349c0810fdc7db8c0201
+timeCreated: 1498769386
licenseType: Free
MonoImporter:
serializedVersion: 2
diff --git a/Assets/main_scene.unity b/Assets/main_scene.unity
index 47a3801..0e52c9c 100644
Binary files a/Assets/main_scene.unity and b/Assets/main_scene.unity differ
diff --git a/Packages/manifest.json b/Packages/manifest.json
index 73c0efb..eb5dbf1 100644
--- a/Packages/manifest.json
+++ b/Packages/manifest.json
@@ -1,12 +1,21 @@
{
"dependencies": {
- "com.unity.ads": "2.0.8",
- "com.unity.analytics": "3.2.2",
- "com.unity.collab-proxy": "1.2.15",
- "com.unity.package-manager-ui": "2.0.7",
- "com.unity.purchasing": "2.0.3",
- "com.unity.textmeshpro": "1.4.1",
+ "com.unity.2d.sprite": "1.0.0",
+ "com.unity.2d.tilemap": "1.0.0",
+ "com.unity.ads": "3.6.1",
+ "com.unity.analytics": "3.3.5",
+ "com.unity.collab-proxy": "1.2.16",
+ "com.unity.ide.rider": "1.2.1",
+ "com.unity.ide.vscode": "1.2.3",
+ "com.unity.multiplayer-hlapi": "1.0.8",
+ "com.unity.purchasing": "3.0.2",
+ "com.unity.test-framework": "1.1.24",
+ "com.unity.textmeshpro": "2.1.4",
+ "com.unity.timeline": "1.2.18",
+ "com.unity.ugui": "1.0.0",
+ "com.unity.xr.legacyinputhelpers": "2.1.7",
"com.unity.modules.ai": "1.0.0",
+ "com.unity.modules.androidjni": "1.0.0",
"com.unity.modules.animation": "1.0.0",
"com.unity.modules.assetbundle": "1.0.0",
"com.unity.modules.audio": "1.0.0",
@@ -36,5 +45,14 @@
"com.unity.modules.vr": "1.0.0",
"com.unity.modules.wind": "1.0.0",
"com.unity.modules.xr": "1.0.0"
- }
-}
+ },
+ "scopedRegistries": [
+ {
+ "name": "Game Package Registry by Google",
+ "url": "https://unityregistry-pa.googleapis.com",
+ "scopes": [
+ "com.google"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json
new file mode 100644
index 0000000..613dd28
--- /dev/null
+++ b/Packages/packages-lock.json
@@ -0,0 +1,386 @@
+{
+ "dependencies": {
+ "com.unity.2d.sprite": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.2d.tilemap": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.ads": {
+ "version": "3.6.1",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.ugui": "1.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.analytics": {
+ "version": "3.3.5",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.ugui": "1.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.collab-proxy": {
+ "version": "1.2.16",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {},
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.ext.nunit": {
+ "version": "1.0.6",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {},
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.ide.rider": {
+ "version": "1.2.1",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.test-framework": "1.1.1"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.ide.vscode": {
+ "version": "1.2.3",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {},
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.multiplayer-hlapi": {
+ "version": "1.0.8",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "nuget.mono-cecil": "0.1.6-preview"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.purchasing": {
+ "version": "3.0.2",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.ugui": "1.0.0",
+ "com.unity.modules.unityanalytics": "1.0.0",
+ "com.unity.modules.unitywebrequest": "1.0.0",
+ "com.unity.modules.jsonserialize": "1.0.0",
+ "com.unity.modules.androidjni": "1.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.test-framework": {
+ "version": "1.1.24",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.ext.nunit": "1.0.6",
+ "com.unity.modules.imgui": "1.0.0",
+ "com.unity.modules.jsonserialize": "1.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.textmeshpro": {
+ "version": "2.1.4",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.ugui": "1.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.timeline": {
+ "version": "1.2.18",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.modules.director": "1.0.0",
+ "com.unity.modules.animation": "1.0.0",
+ "com.unity.modules.audio": "1.0.0",
+ "com.unity.modules.particlesystem": "1.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.ugui": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.ui": "1.0.0",
+ "com.unity.modules.imgui": "1.0.0"
+ }
+ },
+ "com.unity.xr.legacyinputhelpers": {
+ "version": "2.1.7",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.modules.vr": "1.0.0",
+ "com.unity.modules.xr": "1.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "nuget.mono-cecil": {
+ "version": "0.1.6-preview",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {},
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.modules.ai": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.androidjni": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.animation": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.assetbundle": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.audio": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.cloth": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.physics": "1.0.0"
+ }
+ },
+ "com.unity.modules.director": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.audio": "1.0.0",
+ "com.unity.modules.animation": "1.0.0"
+ }
+ },
+ "com.unity.modules.imageconversion": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.imgui": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.jsonserialize": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.particlesystem": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.physics": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.physics2d": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.screencapture": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.imageconversion": "1.0.0"
+ }
+ },
+ "com.unity.modules.subsystems": {
+ "version": "1.0.0",
+ "depth": 1,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.jsonserialize": "1.0.0"
+ }
+ },
+ "com.unity.modules.terrain": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.terrainphysics": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.physics": "1.0.0",
+ "com.unity.modules.terrain": "1.0.0"
+ }
+ },
+ "com.unity.modules.tilemap": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.physics2d": "1.0.0"
+ }
+ },
+ "com.unity.modules.ui": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.uielements": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.imgui": "1.0.0",
+ "com.unity.modules.jsonserialize": "1.0.0"
+ }
+ },
+ "com.unity.modules.umbra": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.unityanalytics": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.unitywebrequest": "1.0.0",
+ "com.unity.modules.jsonserialize": "1.0.0"
+ }
+ },
+ "com.unity.modules.unitywebrequest": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.unitywebrequestassetbundle": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.assetbundle": "1.0.0",
+ "com.unity.modules.unitywebrequest": "1.0.0"
+ }
+ },
+ "com.unity.modules.unitywebrequestaudio": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.unitywebrequest": "1.0.0",
+ "com.unity.modules.audio": "1.0.0"
+ }
+ },
+ "com.unity.modules.unitywebrequesttexture": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.unitywebrequest": "1.0.0",
+ "com.unity.modules.imageconversion": "1.0.0"
+ }
+ },
+ "com.unity.modules.unitywebrequestwww": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.unitywebrequest": "1.0.0",
+ "com.unity.modules.unitywebrequestassetbundle": "1.0.0",
+ "com.unity.modules.unitywebrequestaudio": "1.0.0",
+ "com.unity.modules.audio": "1.0.0",
+ "com.unity.modules.assetbundle": "1.0.0",
+ "com.unity.modules.imageconversion": "1.0.0"
+ }
+ },
+ "com.unity.modules.vehicles": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.physics": "1.0.0"
+ }
+ },
+ "com.unity.modules.video": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.audio": "1.0.0",
+ "com.unity.modules.ui": "1.0.0",
+ "com.unity.modules.unitywebrequest": "1.0.0"
+ }
+ },
+ "com.unity.modules.vr": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.jsonserialize": "1.0.0",
+ "com.unity.modules.physics": "1.0.0",
+ "com.unity.modules.xr": "1.0.0"
+ }
+ },
+ "com.unity.modules.wind": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.xr": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.physics": "1.0.0",
+ "com.unity.modules.jsonserialize": "1.0.0",
+ "com.unity.modules.subsystems": "1.0.0"
+ }
+ }
+ }
+}
diff --git a/ProjectSettings/AndroidResolverDependencies.xml b/ProjectSettings/AndroidResolverDependencies.xml
new file mode 100644
index 0000000..794745c
--- /dev/null
+++ b/ProjectSettings/AndroidResolverDependencies.xml
@@ -0,0 +1,24 @@
+
+
+ com.tapr.unitybridge:tapresearch:2.4.1
+ com.tapr:tapresearch:2.4.1
+
+
+ Assets/Plugins/Android/com.tapr.tapresearch-2.4.1.aar
+ Assets/Plugins/Android/com.tapr.unitybridge.tapresearch-2.4.1.aar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset
index 310ba16..c4016a4 100644
Binary files a/ProjectSettings/GraphicsSettings.asset and b/ProjectSettings/GraphicsSettings.asset differ
diff --git a/ProjectSettings/GvhProjectSettings.xml b/ProjectSettings/GvhProjectSettings.xml
new file mode 100644
index 0000000..ac7de95
--- /dev/null
+++ b/ProjectSettings/GvhProjectSettings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ProjectSettings/PackageManagerSettings.asset b/ProjectSettings/PackageManagerSettings.asset
new file mode 100644
index 0000000..3fdb783
--- /dev/null
+++ b/ProjectSettings/PackageManagerSettings.asset
@@ -0,0 +1,45 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &1
+MonoBehaviour:
+ m_ObjectHideFlags: 61
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_ScopedRegistriesSettingsExpanded: 1
+ oneTimeWarningShown: 0
+ m_Registries:
+ - m_Id: main
+ m_Name:
+ m_Url: https://packages.unity.com
+ m_Scopes: []
+ m_IsDefault: 1
+ - m_Id: scoped:Game Package Registry by Google
+ m_Name: Game Package Registry by Google
+ m_Url: https://unityregistry-pa.googleapis.com
+ m_Scopes:
+ - com.google
+ m_IsDefault: 0
+ m_UserSelectedRegistryName:
+ m_UserAddingNewScopedRegistry: 0
+ m_RegistryInfoDraft:
+ m_ErrorMessage:
+ m_Original:
+ m_Id: scoped:Game Package Registry by Google
+ m_Name: Game Package Registry by Google
+ m_Url: https://unityregistry-pa.googleapis.com
+ m_Scopes:
+ - com.google
+ m_IsDefault: 0
+ m_Modified: 0
+ m_Name: Game Package Registry by Google
+ m_Url: https://unityregistry-pa.googleapis.com
+ m_Scopes:
+ - com.google
+ m_SelectedScopeIndex: 0
diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset
index ca8664c..983728f 100644
Binary files a/ProjectSettings/ProjectSettings.asset and b/ProjectSettings/ProjectSettings.asset differ
diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt
index 3f8e52f..ba35eb1 100644
--- a/ProjectSettings/ProjectVersion.txt
+++ b/ProjectSettings/ProjectVersion.txt
@@ -1 +1,2 @@
-m_EditorVersion: 2018.4.8f1
+m_EditorVersion: 2019.4.25f1
+m_EditorVersionWithRevision: 2019.4.25f1 (01a0494af254)
diff --git a/ProjectSettings/UnityConnectSettings.asset b/ProjectSettings/UnityConnectSettings.asset
index 08a6236..8b2cebb 100644
Binary files a/ProjectSettings/UnityConnectSettings.asset and b/ProjectSettings/UnityConnectSettings.asset differ
diff --git a/ProjectSettings/VersionControlSettings.asset b/ProjectSettings/VersionControlSettings.asset
new file mode 100644
index 0000000..dca2881
--- /dev/null
+++ b/ProjectSettings/VersionControlSettings.asset
@@ -0,0 +1,8 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!890905787 &1
+VersionControlSettings:
+ m_ObjectHideFlags: 0
+ m_Mode: Visible Meta Files
+ m_CollabEditorSettings:
+ inProgressEnabled: 1
diff --git a/ProjectSettings/XRSettings.asset b/ProjectSettings/XRSettings.asset
new file mode 100644
index 0000000..482590c
--- /dev/null
+++ b/ProjectSettings/XRSettings.asset
@@ -0,0 +1,10 @@
+{
+ "m_SettingKeys": [
+ "VR Device Disabled",
+ "VR Device User Alert"
+ ],
+ "m_SettingValues": [
+ "False",
+ "False"
+ ]
+}
\ No newline at end of file
diff --git a/README.md b/README.md
index 2e95a76..a66bd66 100644
--- a/README.md
+++ b/README.md
@@ -13,19 +13,17 @@ $ git clone git@github.com:TapResearch/unity-integration-demo.git
* If you want to see things in action make sure you add your Unity api token and a user identifier in `TestButtonClick.cs`
~~~~csharp
-
- @Override
- void Start ()
- {
- surveyButton.gameObject.SetActive (false);
- TapResearch.Configure ("");
- TapResearch.OnSurveyAvailable = this.OnSurveyAvailable;
- TapResearch.SetUniqueUserIdentifier ("");
- TapResearch.OnDidReceiveReward = this.OnDidReceiveReward;
- TapResearch.OnSurveyModalOpened = this.OnSurveyModalOpened;
- TapResearch.OnSurveyModalDismissed = this.OnSurveyModalDismissed;
- }
-
+ void Awake()
+ {
+ surveyButton.enabled = false;
+ TapResearchSDK.Configure("");
+ TapResearchSDK.SetUniqueUserIdentifier("");
+ TapResearchSDK.OnSurveyWallOpened = this.OnSurveyModalOpened;
+ TapResearchSDK.OnSurveyWallDismissed = this.OnSurveyModalDismissed;
+ TapResearchSDK.OnReceiveRewardCollection = this.OnReceiveRewardCollection;
+ TapResearchSDK.OnPlacementEventUnavailable = this.OnPlacementEventUnavailable;
+ TapResearchSDK.OnPlacementEventReady = this.OnPlacementEventReady;
+ }
~~~~
* Please note that the SDK only works for iOS or Android and not for the default player