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