Compare commits
No commits in common. "master" and "main" have entirely different histories.
5
.vscode/extensions.json
vendored
@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"recommendations": [
|
|
||||||
"visualstudiotoolsforunity.vstuc"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
10
.vscode/launch.json
vendored
@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"version": "0.2.0",
|
|
||||||
"configurations": [
|
|
||||||
{
|
|
||||||
"name": "Attach to Unity",
|
|
||||||
"type": "vstuc",
|
|
||||||
"request": "attach"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
55
.vscode/settings.json
vendored
@ -1,55 +0,0 @@
|
|||||||
{
|
|
||||||
"files.exclude": {
|
|
||||||
"**/.DS_Store": true,
|
|
||||||
"**/.git": true,
|
|
||||||
"**/.gitmodules": true,
|
|
||||||
"**/*.booproj": true,
|
|
||||||
"**/*.pidb": true,
|
|
||||||
"**/*.suo": true,
|
|
||||||
"**/*.user": true,
|
|
||||||
"**/*.userprefs": true,
|
|
||||||
"**/*.unityproj": true,
|
|
||||||
"**/*.dll": true,
|
|
||||||
"**/*.exe": true,
|
|
||||||
"**/*.pdf": true,
|
|
||||||
"**/*.mid": true,
|
|
||||||
"**/*.midi": true,
|
|
||||||
"**/*.wav": true,
|
|
||||||
"**/*.gif": true,
|
|
||||||
"**/*.ico": true,
|
|
||||||
"**/*.jpg": true,
|
|
||||||
"**/*.jpeg": true,
|
|
||||||
"**/*.png": true,
|
|
||||||
"**/*.psd": true,
|
|
||||||
"**/*.tga": true,
|
|
||||||
"**/*.tif": true,
|
|
||||||
"**/*.tiff": true,
|
|
||||||
"**/*.3ds": true,
|
|
||||||
"**/*.3DS": true,
|
|
||||||
"**/*.fbx": true,
|
|
||||||
"**/*.FBX": true,
|
|
||||||
"**/*.lxo": true,
|
|
||||||
"**/*.LXO": true,
|
|
||||||
"**/*.ma": true,
|
|
||||||
"**/*.MA": true,
|
|
||||||
"**/*.obj": true,
|
|
||||||
"**/*.OBJ": true,
|
|
||||||
"**/*.asset": true,
|
|
||||||
"**/*.cubemap": true,
|
|
||||||
"**/*.flare": true,
|
|
||||||
"**/*.mat": true,
|
|
||||||
"**/*.meta": true,
|
|
||||||
"**/*.prefab": true,
|
|
||||||
"**/*.unity": true,
|
|
||||||
"build/": true,
|
|
||||||
"Build/": true,
|
|
||||||
"Library/": true,
|
|
||||||
"library/": true,
|
|
||||||
"obj/": true,
|
|
||||||
"Obj/": true,
|
|
||||||
"ProjectSettings/": true,
|
|
||||||
"temp/": true,
|
|
||||||
"Temp/": true
|
|
||||||
},
|
|
||||||
"dotnet.defaultSolution": "Kill.sln"
|
|
||||||
}
|
|
||||||
@ -1,61 +0,0 @@
|
|||||||
ManifestFileVersion: 0
|
|
||||||
CRC: 519868969
|
|
||||||
Hashes:
|
|
||||||
AssetFileHash:
|
|
||||||
serializedVersion: 2
|
|
||||||
Hash: 1a86274d18d5c726e351f1a5c1d43eb6
|
|
||||||
TypeTreeHash:
|
|
||||||
serializedVersion: 2
|
|
||||||
Hash: 883544743a38c9822709974f4036d31b
|
|
||||||
IncrementalBuildHash:
|
|
||||||
serializedVersion: 2
|
|
||||||
Hash: 1a86274d18d5c726e351f1a5c1d43eb6
|
|
||||||
HashAppended: 0
|
|
||||||
ClassTypes:
|
|
||||||
- Class: 21
|
|
||||||
Script: {instanceID: 0}
|
|
||||||
- Class: 28
|
|
||||||
Script: {instanceID: 0}
|
|
||||||
- Class: 48
|
|
||||||
Script: {instanceID: 0}
|
|
||||||
- Class: 114
|
|
||||||
Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3}
|
|
||||||
- Class: 115
|
|
||||||
Script: {instanceID: 0}
|
|
||||||
- Class: 128
|
|
||||||
Script: {instanceID: 0}
|
|
||||||
SerializeReferenceClassIdentifiers:
|
|
||||||
- AssemblyName: Unity.TextMeshPro
|
|
||||||
ClassName: TMPro.FaceInfo_Legacy
|
|
||||||
- AssemblyName: Unity.TextMeshPro
|
|
||||||
ClassName: TMPro.FontAssetCreationSettings
|
|
||||||
- AssemblyName: Unity.TextMeshPro
|
|
||||||
ClassName: TMPro.KerningTable
|
|
||||||
- AssemblyName: Unity.TextMeshPro
|
|
||||||
ClassName: TMPro.TMP_Character
|
|
||||||
- AssemblyName: Unity.TextMeshPro
|
|
||||||
ClassName: TMPro.TMP_FontFeatureTable
|
|
||||||
- AssemblyName: Unity.TextMeshPro
|
|
||||||
ClassName: TMPro.TMP_FontWeightPair
|
|
||||||
- AssemblyName: Unity.TextMeshPro
|
|
||||||
ClassName: TMPro.TMP_GlyphAdjustmentRecord
|
|
||||||
- AssemblyName: Unity.TextMeshPro
|
|
||||||
ClassName: TMPro.TMP_GlyphPairAdjustmentRecord
|
|
||||||
- AssemblyName: Unity.TextMeshPro
|
|
||||||
ClassName: TMPro.TMP_GlyphValueRecord
|
|
||||||
- AssemblyName: UnityEngine.TextCoreFontEngineModule
|
|
||||||
ClassName: UnityEngine.TextCore.FaceInfo
|
|
||||||
- AssemblyName: UnityEngine.TextCoreFontEngineModule
|
|
||||||
ClassName: UnityEngine.TextCore.Glyph
|
|
||||||
- AssemblyName: UnityEngine.TextCoreFontEngineModule
|
|
||||||
ClassName: UnityEngine.TextCore.GlyphMetrics
|
|
||||||
- AssemblyName: UnityEngine.TextCoreFontEngineModule
|
|
||||||
ClassName: UnityEngine.TextCore.GlyphRect
|
|
||||||
Assets:
|
|
||||||
- Assets/Res/common/LiberationSans SDF - Drop Shadow.mat
|
|
||||||
- Assets/Res/common/TMP_SDF-Mobile.shader
|
|
||||||
- Assets/Res/common/LiberationSans SDF - Fallback.asset
|
|
||||||
- Assets/Res/common/LiberationSans SDF - Outline.mat
|
|
||||||
- Assets/Res/common/LiberationSans SDF.asset
|
|
||||||
- Assets/Res/common/LiberationSans.ttf
|
|
||||||
Dependencies: []
|
|
||||||
@ -1,20 +0,0 @@
|
|||||||
ManifestFileVersion: 0
|
|
||||||
CRC: 1149703830
|
|
||||||
Hashes:
|
|
||||||
AssetFileHash:
|
|
||||||
serializedVersion: 2
|
|
||||||
Hash: 6af47f76cfb19551b1f54d022da3da3f
|
|
||||||
TypeTreeHash:
|
|
||||||
serializedVersion: 2
|
|
||||||
Hash: 5ad585dd02dfb5016c0dad519eab8f49
|
|
||||||
IncrementalBuildHash:
|
|
||||||
serializedVersion: 2
|
|
||||||
Hash: 6af47f76cfb19551b1f54d022da3da3f
|
|
||||||
HashAppended: 0
|
|
||||||
ClassTypes:
|
|
||||||
- Class: 49
|
|
||||||
Script: {instanceID: 0}
|
|
||||||
SerializeReferenceClassIdentifiers: []
|
|
||||||
Assets:
|
|
||||||
- Assets/Res/language/language.json
|
|
||||||
Dependencies: []
|
|
||||||
@ -1,24 +0,0 @@
|
|||||||
{
|
|
||||||
"assetbundles": [
|
|
||||||
{
|
|
||||||
"name": "common.ab",
|
|
||||||
"size": 375790,
|
|
||||||
"md5": "4d9de98dff4d7f29ce6b281743eb8673"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "language.ab",
|
|
||||||
"size": 961,
|
|
||||||
"md5": "15e5836eb9aa3275be2f32caa4f704a6"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ui_common.ab",
|
|
||||||
"size": 913863,
|
|
||||||
"md5": "cf948997a8111be129cdd80d57484bdf"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ui_homepage.ab",
|
|
||||||
"size": 910680,
|
|
||||||
"md5": "580503034dd2d3cdf9083d820d5bfa7f"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,48 +0,0 @@
|
|||||||
ManifestFileVersion: 0
|
|
||||||
CRC: 2072654758
|
|
||||||
Hashes:
|
|
||||||
AssetFileHash:
|
|
||||||
serializedVersion: 2
|
|
||||||
Hash: 2b019cadf8853734cc044e46d37e92fb
|
|
||||||
TypeTreeHash:
|
|
||||||
serializedVersion: 2
|
|
||||||
Hash: 4b2936d0f21a2af19463887e206f3c2e
|
|
||||||
IncrementalBuildHash:
|
|
||||||
serializedVersion: 2
|
|
||||||
Hash: 2b019cadf8853734cc044e46d37e92fb
|
|
||||||
HashAppended: 0
|
|
||||||
ClassTypes:
|
|
||||||
- Class: 1
|
|
||||||
Script: {instanceID: 0}
|
|
||||||
- Class: 21
|
|
||||||
Script: {instanceID: 0}
|
|
||||||
- Class: 28
|
|
||||||
Script: {instanceID: 0}
|
|
||||||
- Class: 114
|
|
||||||
Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
|
||||||
- Class: 114
|
|
||||||
Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3}
|
|
||||||
- Class: 114
|
|
||||||
Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
|
||||||
- Class: 114
|
|
||||||
Script: {fileID: 11500000, guid: 89f1d49b50a31514787b4e268b1c73bb, type: 3}
|
|
||||||
- Class: 115
|
|
||||||
Script: {instanceID: 0}
|
|
||||||
- Class: 213
|
|
||||||
Script: {instanceID: 0}
|
|
||||||
- Class: 222
|
|
||||||
Script: {instanceID: 0}
|
|
||||||
- Class: 224
|
|
||||||
Script: {instanceID: 0}
|
|
||||||
SerializeReferenceClassIdentifiers:
|
|
||||||
- AssemblyName: Unity.TextMeshPro
|
|
||||||
ClassName: TMPro.VertexGradient
|
|
||||||
- AssemblyName: UnityEngine.CoreModule
|
|
||||||
ClassName: UnityEngine.Events.PersistentCallGroup
|
|
||||||
- AssemblyName: UnityEngine.UI
|
|
||||||
ClassName: UnityEngine.UI.MaskableGraphic/CullStateChangedEvent
|
|
||||||
Assets:
|
|
||||||
- Assets/Res/ui/common/MainPage.prefab
|
|
||||||
- Assets/Res/ui/common/20251028-160437 1.jpg
|
|
||||||
Dependencies:
|
|
||||||
- D:/unity_project/Kill/AssetBundles/windows/common.ab
|
|
||||||
@ -1,22 +0,0 @@
|
|||||||
ManifestFileVersion: 0
|
|
||||||
CRC: 1383609765
|
|
||||||
Hashes:
|
|
||||||
AssetFileHash:
|
|
||||||
serializedVersion: 2
|
|
||||||
Hash: 06ddb5d0fe828b8889d08c744d7738a4
|
|
||||||
TypeTreeHash:
|
|
||||||
serializedVersion: 2
|
|
||||||
Hash: 2d8df09e698f722ada1caa03d3413830
|
|
||||||
IncrementalBuildHash:
|
|
||||||
serializedVersion: 2
|
|
||||||
Hash: 06ddb5d0fe828b8889d08c744d7738a4
|
|
||||||
HashAppended: 0
|
|
||||||
ClassTypes:
|
|
||||||
- Class: 28
|
|
||||||
Script: {instanceID: 0}
|
|
||||||
- Class: 213
|
|
||||||
Script: {instanceID: 0}
|
|
||||||
SerializeReferenceClassIdentifiers: []
|
|
||||||
Assets:
|
|
||||||
- Assets/Res/ui/homepage/20251028-160437.jpg
|
|
||||||
Dependencies: []
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
ManifestFileVersion: 0
|
|
||||||
CRC: 2612218489
|
|
||||||
AssetBundleManifest:
|
|
||||||
AssetBundleInfos:
|
|
||||||
Info_0:
|
|
||||||
Name: ui_homepage.ab
|
|
||||||
Dependencies: {}
|
|
||||||
Info_1:
|
|
||||||
Name: common.ab
|
|
||||||
Dependencies: {}
|
|
||||||
Info_2:
|
|
||||||
Name: language.ab
|
|
||||||
Dependencies: {}
|
|
||||||
Info_3:
|
|
||||||
Name: ui_common.ab
|
|
||||||
Dependencies:
|
|
||||||
Dependency_0: common.ab
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 0a9fa7b4632335d4cae7c88566a33e53
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 5bc04eb2b2f57664ea5597742a830853
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,315 +0,0 @@
|
|||||||
%YAML 1.1
|
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
|
||||||
--- !u!114 &11400000
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 2
|
|
||||||
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: 11500000, guid: b592865877cb54284a5d1d88aec9cfbb, type: 3}
|
|
||||||
m_Name: Simulator Provider Settings
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
m_Logging: 1
|
|
||||||
m_AutomaticPerformanceModeEnabled: 1
|
|
||||||
m_EnableBoostOnStartup: 1
|
|
||||||
m_StatsLoggingFrequencyInFrames: 50
|
|
||||||
m_IndexerSettings:
|
|
||||||
m_Active: 1
|
|
||||||
m_ThermalActionDelay: 10
|
|
||||||
m_PerformanceActionDelay: 4
|
|
||||||
m_ScalerSettings:
|
|
||||||
m_AdaptiveFramerate:
|
|
||||||
m_Name: Adaptive Framerate
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 2
|
|
||||||
m_Target: 7
|
|
||||||
m_MaxLevel: 45
|
|
||||||
m_MinBound: 15
|
|
||||||
m_MaxBound: 60
|
|
||||||
m_AdaptiveResolution:
|
|
||||||
m_Name: Adaptive Resolution
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 0
|
|
||||||
m_Target: 6
|
|
||||||
m_MaxLevel: 9
|
|
||||||
m_MinBound: 0.5
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveBatching:
|
|
||||||
m_Name: Adaptive Batching
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 1
|
|
||||||
m_Target: 1
|
|
||||||
m_MaxLevel: 1
|
|
||||||
m_MinBound: 0
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveLOD:
|
|
||||||
m_Name: Adaptive LOD
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 2
|
|
||||||
m_Target: 2
|
|
||||||
m_MaxLevel: 3
|
|
||||||
m_MinBound: 0.4
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveLut:
|
|
||||||
m_Name: Adaptive Lut
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 1
|
|
||||||
m_Target: 3
|
|
||||||
m_MaxLevel: 1
|
|
||||||
m_MinBound: 0
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveMSAA:
|
|
||||||
m_Name: Adaptive MSAA
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 1
|
|
||||||
m_Target: 6
|
|
||||||
m_MaxLevel: 2
|
|
||||||
m_MinBound: 0
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveShadowCascade:
|
|
||||||
m_Name: Adaptive Shadow Cascade
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 1
|
|
||||||
m_Target: 3
|
|
||||||
m_MaxLevel: 2
|
|
||||||
m_MinBound: 0
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveShadowDistance:
|
|
||||||
m_Name: Adaptive Shadow Distance
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 0
|
|
||||||
m_Target: 2
|
|
||||||
m_MaxLevel: 3
|
|
||||||
m_MinBound: 0.15
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveShadowmapResolution:
|
|
||||||
m_Name: Adaptive Shadowmap Resolution
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 0
|
|
||||||
m_Target: 2
|
|
||||||
m_MaxLevel: 3
|
|
||||||
m_MinBound: 0.15
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveShadowQuality:
|
|
||||||
m_Name: Adaptive Shadow Quality
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 2
|
|
||||||
m_Target: 3
|
|
||||||
m_MaxLevel: 3
|
|
||||||
m_MinBound: 0
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveSorting:
|
|
||||||
m_Name: Adaptive Sorting
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 1
|
|
||||||
m_Target: 1
|
|
||||||
m_MaxLevel: 1
|
|
||||||
m_MinBound: 0
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveTransparency:
|
|
||||||
m_Name: Adaptive Transparency
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 2
|
|
||||||
m_Target: 2
|
|
||||||
m_MaxLevel: 1
|
|
||||||
m_MinBound: 0
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveViewDistance:
|
|
||||||
m_Name: Adaptive View Distance
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 2
|
|
||||||
m_Target: 2
|
|
||||||
m_MaxLevel: 40
|
|
||||||
m_MinBound: 50
|
|
||||||
m_MaxBound: 1000
|
|
||||||
m_AdaptivePhysics:
|
|
||||||
m_Name: Adaptive Physics
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 0
|
|
||||||
m_Target: 1
|
|
||||||
m_MaxLevel: 5
|
|
||||||
m_MinBound: 0.5
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveDecals:
|
|
||||||
m_Name: Adaptive Decals
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 1
|
|
||||||
m_Target: 2
|
|
||||||
m_MaxLevel: 20
|
|
||||||
m_MinBound: 0.01
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveLayerCulling:
|
|
||||||
m_Name: Adaptive Layer Culling
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 1
|
|
||||||
m_Target: 1
|
|
||||||
m_MaxLevel: 40
|
|
||||||
m_MinBound: 0.01
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_scalerProfileList:
|
|
||||||
- m_AdaptiveFramerate:
|
|
||||||
m_Name: Adaptive Framerate
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 2
|
|
||||||
m_Target: 7
|
|
||||||
m_MaxLevel: 45
|
|
||||||
m_MinBound: 15
|
|
||||||
m_MaxBound: 60
|
|
||||||
m_AdaptiveResolution:
|
|
||||||
m_Name: Adaptive Resolution
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 0
|
|
||||||
m_Target: 6
|
|
||||||
m_MaxLevel: 9
|
|
||||||
m_MinBound: 0.5
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveBatching:
|
|
||||||
m_Name: Adaptive Batching
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 1
|
|
||||||
m_Target: 1
|
|
||||||
m_MaxLevel: 1
|
|
||||||
m_MinBound: 0
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveLOD:
|
|
||||||
m_Name: Adaptive LOD
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 2
|
|
||||||
m_Target: 2
|
|
||||||
m_MaxLevel: 3
|
|
||||||
m_MinBound: 0.4
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveLut:
|
|
||||||
m_Name: Adaptive Lut
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 1
|
|
||||||
m_Target: 3
|
|
||||||
m_MaxLevel: 1
|
|
||||||
m_MinBound: 0
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveMSAA:
|
|
||||||
m_Name: Adaptive MSAA
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 1
|
|
||||||
m_Target: 6
|
|
||||||
m_MaxLevel: 2
|
|
||||||
m_MinBound: 0
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveShadowCascade:
|
|
||||||
m_Name: Adaptive Shadow Cascade
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 1
|
|
||||||
m_Target: 3
|
|
||||||
m_MaxLevel: 2
|
|
||||||
m_MinBound: 0
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveShadowDistance:
|
|
||||||
m_Name: Adaptive Shadow Distance
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 0
|
|
||||||
m_Target: 2
|
|
||||||
m_MaxLevel: 3
|
|
||||||
m_MinBound: 0.15
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveShadowmapResolution:
|
|
||||||
m_Name: Adaptive Shadowmap Resolution
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 0
|
|
||||||
m_Target: 2
|
|
||||||
m_MaxLevel: 3
|
|
||||||
m_MinBound: 0.15
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveShadowQuality:
|
|
||||||
m_Name: Adaptive Shadow Quality
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 2
|
|
||||||
m_Target: 3
|
|
||||||
m_MaxLevel: 3
|
|
||||||
m_MinBound: 0
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveSorting:
|
|
||||||
m_Name: Adaptive Sorting
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 1
|
|
||||||
m_Target: 1
|
|
||||||
m_MaxLevel: 1
|
|
||||||
m_MinBound: 0
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveTransparency:
|
|
||||||
m_Name: Adaptive Transparency
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 2
|
|
||||||
m_Target: 2
|
|
||||||
m_MaxLevel: 1
|
|
||||||
m_MinBound: 0
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveViewDistance:
|
|
||||||
m_Name: Adaptive View Distance
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 2
|
|
||||||
m_Target: 2
|
|
||||||
m_MaxLevel: 40
|
|
||||||
m_MinBound: 50
|
|
||||||
m_MaxBound: 1000
|
|
||||||
m_AdaptivePhysics:
|
|
||||||
m_Name: Adaptive Physics
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 0
|
|
||||||
m_Target: 1
|
|
||||||
m_MaxLevel: 5
|
|
||||||
m_MinBound: 0.5
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveDecals:
|
|
||||||
m_Name: Adaptive Decals
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 1
|
|
||||||
m_Target: 2
|
|
||||||
m_MaxLevel: 20
|
|
||||||
m_MinBound: 0.01
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_AdaptiveLayerCulling:
|
|
||||||
m_Name: Adaptive Layer Culling
|
|
||||||
m_Enabled: 0
|
|
||||||
m_Scale: 1
|
|
||||||
m_VisualImpact: 1
|
|
||||||
m_Target: 1
|
|
||||||
m_MaxLevel: 40
|
|
||||||
m_MinBound: 0.01
|
|
||||||
m_MaxBound: 1
|
|
||||||
m_Name: Default Scaler Profile
|
|
||||||
m_DefaultScalerProfilerIndex: 0
|
|
||||||
k_AssetVersion: 2
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 258b4824146500b4f91dd700571fb796
|
|
||||||
NativeFormatImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
mainObjectFileID: 11400000
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: a9016d0407dfba74fa9be25acdd326dd
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 685576562c6e3324b90ef9fc936c9c3b
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
Before Width: | Height: | Size: 134 B |
@ -1,68 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: dc218b335b1d14cd5ae532f65042d829
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Editor Default Resources/Firebase/fb_analytics.png
|
|
||||||
timeCreated: 1473376337
|
|
||||||
licenseType: Pro
|
|
||||||
TextureImporter:
|
|
||||||
fileIDToRecycleName: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
mipmaps:
|
|
||||||
mipMapMode: 0
|
|
||||||
enableMipMap: 0
|
|
||||||
linearTexture: 1
|
|
||||||
correctGamma: 0
|
|
||||||
fadeOut: 0
|
|
||||||
borderMipMap: 0
|
|
||||||
mipMapFadeDistanceStart: 1
|
|
||||||
mipMapFadeDistanceEnd: 3
|
|
||||||
bumpmap:
|
|
||||||
convertToNormalMap: 0
|
|
||||||
externalNormalMap: 0
|
|
||||||
heightScale: 0.25
|
|
||||||
normalMapFilter: 0
|
|
||||||
isReadable: 0
|
|
||||||
grayScaleToAlpha: 0
|
|
||||||
generateCubemap: 0
|
|
||||||
cubemapConvolution: 0
|
|
||||||
cubemapConvolutionSteps: 7
|
|
||||||
cubemapConvolutionExponent: 1.5
|
|
||||||
seamlessCubemap: 0
|
|
||||||
textureFormat: -1
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureSettings:
|
|
||||||
filterMode: -1
|
|
||||||
aniso: 1
|
|
||||||
mipBias: -1
|
|
||||||
wrapMode: 1
|
|
||||||
nPOTScale: 0
|
|
||||||
lightmap: 0
|
|
||||||
rGBM: 0
|
|
||||||
compressionQuality: 50
|
|
||||||
allowsAlphaSplitting: 0
|
|
||||||
spriteMode: 0
|
|
||||||
spriteExtrude: 1
|
|
||||||
spriteMeshType: 1
|
|
||||||
alignment: 0
|
|
||||||
spritePivot:
|
|
||||||
x: 0.5
|
|
||||||
y: 0.5
|
|
||||||
spriteBorder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
w: 0
|
|
||||||
spritePixelsToUnits: 100
|
|
||||||
alphaIsTransparency: 1
|
|
||||||
textureType: 2
|
|
||||||
buildTargetSettings: []
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
spritePackingTag:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
Before Width: | Height: | Size: 136 B |
@ -1,68 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 9fe4b3bd3b7d2477dac92fb7429d1d1b
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Editor Default Resources/Firebase/fb_analytics_dark.png
|
|
||||||
timeCreated: 1472679008
|
|
||||||
licenseType: Pro
|
|
||||||
TextureImporter:
|
|
||||||
fileIDToRecycleName: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
mipmaps:
|
|
||||||
mipMapMode: 0
|
|
||||||
enableMipMap: 0
|
|
||||||
linearTexture: 1
|
|
||||||
correctGamma: 0
|
|
||||||
fadeOut: 0
|
|
||||||
borderMipMap: 0
|
|
||||||
mipMapFadeDistanceStart: 1
|
|
||||||
mipMapFadeDistanceEnd: 3
|
|
||||||
bumpmap:
|
|
||||||
convertToNormalMap: 0
|
|
||||||
externalNormalMap: 0
|
|
||||||
heightScale: 0.25
|
|
||||||
normalMapFilter: 0
|
|
||||||
isReadable: 0
|
|
||||||
grayScaleToAlpha: 0
|
|
||||||
generateCubemap: 0
|
|
||||||
cubemapConvolution: 0
|
|
||||||
cubemapConvolutionSteps: 7
|
|
||||||
cubemapConvolutionExponent: 1.5
|
|
||||||
seamlessCubemap: 0
|
|
||||||
textureFormat: -1
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureSettings:
|
|
||||||
filterMode: -1
|
|
||||||
aniso: 1
|
|
||||||
mipBias: -1
|
|
||||||
wrapMode: 1
|
|
||||||
nPOTScale: 0
|
|
||||||
lightmap: 0
|
|
||||||
rGBM: 0
|
|
||||||
compressionQuality: 50
|
|
||||||
allowsAlphaSplitting: 0
|
|
||||||
spriteMode: 0
|
|
||||||
spriteExtrude: 1
|
|
||||||
spriteMeshType: 1
|
|
||||||
alignment: 0
|
|
||||||
spritePivot:
|
|
||||||
x: 0.5
|
|
||||||
y: 0.5
|
|
||||||
spriteBorder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
w: 0
|
|
||||||
spritePixelsToUnits: 100
|
|
||||||
alphaIsTransparency: 1
|
|
||||||
textureType: 2
|
|
||||||
buildTargetSettings: []
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
spritePackingTag:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
Before Width: | Height: | Size: 295 B |
@ -1,68 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 394b3ec4d60c24476a12e4ba696d9e5d
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Editor Default Resources/Firebase/fb_auth.png
|
|
||||||
timeCreated: 1473376335
|
|
||||||
licenseType: Pro
|
|
||||||
TextureImporter:
|
|
||||||
fileIDToRecycleName: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
mipmaps:
|
|
||||||
mipMapMode: 0
|
|
||||||
enableMipMap: 0
|
|
||||||
linearTexture: 1
|
|
||||||
correctGamma: 0
|
|
||||||
fadeOut: 0
|
|
||||||
borderMipMap: 0
|
|
||||||
mipMapFadeDistanceStart: 1
|
|
||||||
mipMapFadeDistanceEnd: 3
|
|
||||||
bumpmap:
|
|
||||||
convertToNormalMap: 0
|
|
||||||
externalNormalMap: 0
|
|
||||||
heightScale: 0.25
|
|
||||||
normalMapFilter: 0
|
|
||||||
isReadable: 0
|
|
||||||
grayScaleToAlpha: 0
|
|
||||||
generateCubemap: 0
|
|
||||||
cubemapConvolution: 0
|
|
||||||
cubemapConvolutionSteps: 7
|
|
||||||
cubemapConvolutionExponent: 1.5
|
|
||||||
seamlessCubemap: 0
|
|
||||||
textureFormat: -1
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureSettings:
|
|
||||||
filterMode: -1
|
|
||||||
aniso: 1
|
|
||||||
mipBias: -1
|
|
||||||
wrapMode: 1
|
|
||||||
nPOTScale: 0
|
|
||||||
lightmap: 0
|
|
||||||
rGBM: 0
|
|
||||||
compressionQuality: 50
|
|
||||||
allowsAlphaSplitting: 0
|
|
||||||
spriteMode: 0
|
|
||||||
spriteExtrude: 1
|
|
||||||
spriteMeshType: 1
|
|
||||||
alignment: 0
|
|
||||||
spritePivot:
|
|
||||||
x: 0.5
|
|
||||||
y: 0.5
|
|
||||||
spriteBorder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
w: 0
|
|
||||||
spritePixelsToUnits: 100
|
|
||||||
alphaIsTransparency: 1
|
|
||||||
textureType: 2
|
|
||||||
buildTargetSettings: []
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
spritePackingTag:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
Before Width: | Height: | Size: 305 B |
@ -1,68 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 3a9e1ef6287664c389bb09e2ac1b23b7
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Editor Default Resources/Firebase/fb_auth_dark.png
|
|
||||||
timeCreated: 1472679008
|
|
||||||
licenseType: Pro
|
|
||||||
TextureImporter:
|
|
||||||
fileIDToRecycleName: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
mipmaps:
|
|
||||||
mipMapMode: 0
|
|
||||||
enableMipMap: 0
|
|
||||||
linearTexture: 1
|
|
||||||
correctGamma: 0
|
|
||||||
fadeOut: 0
|
|
||||||
borderMipMap: 0
|
|
||||||
mipMapFadeDistanceStart: 1
|
|
||||||
mipMapFadeDistanceEnd: 3
|
|
||||||
bumpmap:
|
|
||||||
convertToNormalMap: 0
|
|
||||||
externalNormalMap: 0
|
|
||||||
heightScale: 0.25
|
|
||||||
normalMapFilter: 0
|
|
||||||
isReadable: 0
|
|
||||||
grayScaleToAlpha: 0
|
|
||||||
generateCubemap: 0
|
|
||||||
cubemapConvolution: 0
|
|
||||||
cubemapConvolutionSteps: 7
|
|
||||||
cubemapConvolutionExponent: 1.5
|
|
||||||
seamlessCubemap: 0
|
|
||||||
textureFormat: -1
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureSettings:
|
|
||||||
filterMode: -1
|
|
||||||
aniso: 1
|
|
||||||
mipBias: -1
|
|
||||||
wrapMode: 1
|
|
||||||
nPOTScale: 0
|
|
||||||
lightmap: 0
|
|
||||||
rGBM: 0
|
|
||||||
compressionQuality: 50
|
|
||||||
allowsAlphaSplitting: 0
|
|
||||||
spriteMode: 0
|
|
||||||
spriteExtrude: 1
|
|
||||||
spriteMeshType: 1
|
|
||||||
alignment: 0
|
|
||||||
spritePivot:
|
|
||||||
x: 0.5
|
|
||||||
y: 0.5
|
|
||||||
spriteBorder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
w: 0
|
|
||||||
spritePixelsToUnits: 100
|
|
||||||
alphaIsTransparency: 1
|
|
||||||
textureType: 2
|
|
||||||
buildTargetSettings: []
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
spritePackingTag:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
Before Width: | Height: | Size: 510 B |
@ -1,68 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 837e8e1f35e334e81931d0857680cebf
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Editor Default Resources/Firebase/fb_cloud_messaging.png
|
|
||||||
timeCreated: 1473376336
|
|
||||||
licenseType: Pro
|
|
||||||
TextureImporter:
|
|
||||||
fileIDToRecycleName: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
mipmaps:
|
|
||||||
mipMapMode: 0
|
|
||||||
enableMipMap: 0
|
|
||||||
linearTexture: 1
|
|
||||||
correctGamma: 0
|
|
||||||
fadeOut: 0
|
|
||||||
borderMipMap: 0
|
|
||||||
mipMapFadeDistanceStart: 1
|
|
||||||
mipMapFadeDistanceEnd: 3
|
|
||||||
bumpmap:
|
|
||||||
convertToNormalMap: 0
|
|
||||||
externalNormalMap: 0
|
|
||||||
heightScale: 0.25
|
|
||||||
normalMapFilter: 0
|
|
||||||
isReadable: 0
|
|
||||||
grayScaleToAlpha: 0
|
|
||||||
generateCubemap: 0
|
|
||||||
cubemapConvolution: 0
|
|
||||||
cubemapConvolutionSteps: 7
|
|
||||||
cubemapConvolutionExponent: 1.5
|
|
||||||
seamlessCubemap: 0
|
|
||||||
textureFormat: -1
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureSettings:
|
|
||||||
filterMode: -1
|
|
||||||
aniso: 1
|
|
||||||
mipBias: -1
|
|
||||||
wrapMode: 1
|
|
||||||
nPOTScale: 0
|
|
||||||
lightmap: 0
|
|
||||||
rGBM: 0
|
|
||||||
compressionQuality: 50
|
|
||||||
allowsAlphaSplitting: 0
|
|
||||||
spriteMode: 0
|
|
||||||
spriteExtrude: 1
|
|
||||||
spriteMeshType: 1
|
|
||||||
alignment: 0
|
|
||||||
spritePivot:
|
|
||||||
x: 0.5
|
|
||||||
y: 0.5
|
|
||||||
spriteBorder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
w: 0
|
|
||||||
spritePixelsToUnits: 100
|
|
||||||
alphaIsTransparency: 1
|
|
||||||
textureType: 2
|
|
||||||
buildTargetSettings: []
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
spritePackingTag:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
Before Width: | Height: | Size: 521 B |
@ -1,68 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 20c5b8a1f82cb4aadb77ca20683d2a6e
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Editor Default Resources/Firebase/fb_cloud_messaging_dark.png
|
|
||||||
timeCreated: 1472679008
|
|
||||||
licenseType: Pro
|
|
||||||
TextureImporter:
|
|
||||||
fileIDToRecycleName: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
mipmaps:
|
|
||||||
mipMapMode: 0
|
|
||||||
enableMipMap: 0
|
|
||||||
linearTexture: 1
|
|
||||||
correctGamma: 0
|
|
||||||
fadeOut: 0
|
|
||||||
borderMipMap: 0
|
|
||||||
mipMapFadeDistanceStart: 1
|
|
||||||
mipMapFadeDistanceEnd: 3
|
|
||||||
bumpmap:
|
|
||||||
convertToNormalMap: 0
|
|
||||||
externalNormalMap: 0
|
|
||||||
heightScale: 0.25
|
|
||||||
normalMapFilter: 0
|
|
||||||
isReadable: 0
|
|
||||||
grayScaleToAlpha: 0
|
|
||||||
generateCubemap: 0
|
|
||||||
cubemapConvolution: 0
|
|
||||||
cubemapConvolutionSteps: 7
|
|
||||||
cubemapConvolutionExponent: 1.5
|
|
||||||
seamlessCubemap: 0
|
|
||||||
textureFormat: -1
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureSettings:
|
|
||||||
filterMode: -1
|
|
||||||
aniso: 1
|
|
||||||
mipBias: -1
|
|
||||||
wrapMode: 1
|
|
||||||
nPOTScale: 0
|
|
||||||
lightmap: 0
|
|
||||||
rGBM: 0
|
|
||||||
compressionQuality: 50
|
|
||||||
allowsAlphaSplitting: 0
|
|
||||||
spriteMode: 0
|
|
||||||
spriteExtrude: 1
|
|
||||||
spriteMeshType: 1
|
|
||||||
alignment: 0
|
|
||||||
spritePivot:
|
|
||||||
x: 0.5
|
|
||||||
y: 0.5
|
|
||||||
spriteBorder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
w: 0
|
|
||||||
spritePixelsToUnits: 100
|
|
||||||
alphaIsTransparency: 1
|
|
||||||
textureType: 2
|
|
||||||
buildTargetSettings: []
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
spritePackingTag:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
Before Width: | Height: | Size: 253 B |
@ -1,68 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 415eaec414af14d11955222a282aca08
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Editor Default Resources/Firebase/fb_config.png
|
|
||||||
timeCreated: 1473376335
|
|
||||||
licenseType: Pro
|
|
||||||
TextureImporter:
|
|
||||||
fileIDToRecycleName: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
mipmaps:
|
|
||||||
mipMapMode: 0
|
|
||||||
enableMipMap: 0
|
|
||||||
linearTexture: 1
|
|
||||||
correctGamma: 0
|
|
||||||
fadeOut: 0
|
|
||||||
borderMipMap: 0
|
|
||||||
mipMapFadeDistanceStart: 1
|
|
||||||
mipMapFadeDistanceEnd: 3
|
|
||||||
bumpmap:
|
|
||||||
convertToNormalMap: 0
|
|
||||||
externalNormalMap: 0
|
|
||||||
heightScale: 0.25
|
|
||||||
normalMapFilter: 0
|
|
||||||
isReadable: 0
|
|
||||||
grayScaleToAlpha: 0
|
|
||||||
generateCubemap: 0
|
|
||||||
cubemapConvolution: 0
|
|
||||||
cubemapConvolutionSteps: 7
|
|
||||||
cubemapConvolutionExponent: 1.5
|
|
||||||
seamlessCubemap: 0
|
|
||||||
textureFormat: -1
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureSettings:
|
|
||||||
filterMode: -1
|
|
||||||
aniso: 1
|
|
||||||
mipBias: -1
|
|
||||||
wrapMode: 1
|
|
||||||
nPOTScale: 0
|
|
||||||
lightmap: 0
|
|
||||||
rGBM: 0
|
|
||||||
compressionQuality: 50
|
|
||||||
allowsAlphaSplitting: 0
|
|
||||||
spriteMode: 0
|
|
||||||
spriteExtrude: 1
|
|
||||||
spriteMeshType: 1
|
|
||||||
alignment: 0
|
|
||||||
spritePivot:
|
|
||||||
x: 0.5
|
|
||||||
y: 0.5
|
|
||||||
spriteBorder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
w: 0
|
|
||||||
spritePixelsToUnits: 100
|
|
||||||
alphaIsTransparency: 1
|
|
||||||
textureType: 2
|
|
||||||
buildTargetSettings: []
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
spritePackingTag:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
Before Width: | Height: | Size: 253 B |
@ -1,68 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 0ad9ef5fff5524355a9670c90a99cbba
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Editor Default Resources/Firebase/fb_config_dark.png
|
|
||||||
timeCreated: 1472679008
|
|
||||||
licenseType: Pro
|
|
||||||
TextureImporter:
|
|
||||||
fileIDToRecycleName: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
mipmaps:
|
|
||||||
mipMapMode: 0
|
|
||||||
enableMipMap: 0
|
|
||||||
linearTexture: 1
|
|
||||||
correctGamma: 0
|
|
||||||
fadeOut: 0
|
|
||||||
borderMipMap: 0
|
|
||||||
mipMapFadeDistanceStart: 1
|
|
||||||
mipMapFadeDistanceEnd: 3
|
|
||||||
bumpmap:
|
|
||||||
convertToNormalMap: 0
|
|
||||||
externalNormalMap: 0
|
|
||||||
heightScale: 0.25
|
|
||||||
normalMapFilter: 0
|
|
||||||
isReadable: 0
|
|
||||||
grayScaleToAlpha: 0
|
|
||||||
generateCubemap: 0
|
|
||||||
cubemapConvolution: 0
|
|
||||||
cubemapConvolutionSteps: 7
|
|
||||||
cubemapConvolutionExponent: 1.5
|
|
||||||
seamlessCubemap: 0
|
|
||||||
textureFormat: -1
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureSettings:
|
|
||||||
filterMode: -1
|
|
||||||
aniso: 1
|
|
||||||
mipBias: -1
|
|
||||||
wrapMode: 1
|
|
||||||
nPOTScale: 0
|
|
||||||
lightmap: 0
|
|
||||||
rGBM: 0
|
|
||||||
compressionQuality: 50
|
|
||||||
allowsAlphaSplitting: 0
|
|
||||||
spriteMode: 0
|
|
||||||
spriteExtrude: 1
|
|
||||||
spriteMeshType: 1
|
|
||||||
alignment: 0
|
|
||||||
spritePivot:
|
|
||||||
x: 0.5
|
|
||||||
y: 0.5
|
|
||||||
spriteBorder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
w: 0
|
|
||||||
spritePixelsToUnits: 100
|
|
||||||
alphaIsTransparency: 1
|
|
||||||
textureType: 2
|
|
||||||
buildTargetSettings: []
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
spritePackingTag:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
Before Width: | Height: | Size: 454 B |
@ -1,68 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 008a5e76206e49f9b06d8ba144aabb38
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Editor Default Resources/Firebase/fb_crashlytics.png
|
|
||||||
timeCreated: 1473376335
|
|
||||||
licenseType: Pro
|
|
||||||
TextureImporter:
|
|
||||||
fileIDToRecycleName: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
mipmaps:
|
|
||||||
mipMapMode: 0
|
|
||||||
enableMipMap: 0
|
|
||||||
linearTexture: 1
|
|
||||||
correctGamma: 0
|
|
||||||
fadeOut: 0
|
|
||||||
borderMipMap: 0
|
|
||||||
mipMapFadeDistanceStart: 1
|
|
||||||
mipMapFadeDistanceEnd: 3
|
|
||||||
bumpmap:
|
|
||||||
convertToNormalMap: 0
|
|
||||||
externalNormalMap: 0
|
|
||||||
heightScale: 0.25
|
|
||||||
normalMapFilter: 0
|
|
||||||
isReadable: 0
|
|
||||||
grayScaleToAlpha: 0
|
|
||||||
generateCubemap: 0
|
|
||||||
cubemapConvolution: 0
|
|
||||||
cubemapConvolutionSteps: 7
|
|
||||||
cubemapConvolutionExponent: 1.5
|
|
||||||
seamlessCubemap: 0
|
|
||||||
textureFormat: -1
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureSettings:
|
|
||||||
filterMode: -1
|
|
||||||
aniso: 1
|
|
||||||
mipBias: -1
|
|
||||||
wrapMode: 1
|
|
||||||
nPOTScale: 0
|
|
||||||
lightmap: 0
|
|
||||||
rGBM: 0
|
|
||||||
compressionQuality: 50
|
|
||||||
allowsAlphaSplitting: 0
|
|
||||||
spriteMode: 0
|
|
||||||
spriteExtrude: 1
|
|
||||||
spriteMeshType: 1
|
|
||||||
alignment: 0
|
|
||||||
spritePivot:
|
|
||||||
x: 0.5
|
|
||||||
y: 0.5
|
|
||||||
spriteBorder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
w: 0
|
|
||||||
spritePixelsToUnits: 100
|
|
||||||
alphaIsTransparency: 1
|
|
||||||
textureType: 2
|
|
||||||
buildTargetSettings: []
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
spritePackingTag:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
Before Width: | Height: | Size: 471 B |
@ -1,68 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 214009068900439da4a9cded17d58090
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Editor Default Resources/Firebase/fb_crashlytics_dark.png
|
|
||||||
timeCreated: 1472679008
|
|
||||||
licenseType: Pro
|
|
||||||
TextureImporter:
|
|
||||||
fileIDToRecycleName: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
mipmaps:
|
|
||||||
mipMapMode: 0
|
|
||||||
enableMipMap: 0
|
|
||||||
linearTexture: 1
|
|
||||||
correctGamma: 0
|
|
||||||
fadeOut: 0
|
|
||||||
borderMipMap: 0
|
|
||||||
mipMapFadeDistanceStart: 1
|
|
||||||
mipMapFadeDistanceEnd: 3
|
|
||||||
bumpmap:
|
|
||||||
convertToNormalMap: 0
|
|
||||||
externalNormalMap: 0
|
|
||||||
heightScale: 0.25
|
|
||||||
normalMapFilter: 0
|
|
||||||
isReadable: 0
|
|
||||||
grayScaleToAlpha: 0
|
|
||||||
generateCubemap: 0
|
|
||||||
cubemapConvolution: 0
|
|
||||||
cubemapConvolutionSteps: 7
|
|
||||||
cubemapConvolutionExponent: 1.5
|
|
||||||
seamlessCubemap: 0
|
|
||||||
textureFormat: -1
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureSettings:
|
|
||||||
filterMode: -1
|
|
||||||
aniso: 1
|
|
||||||
mipBias: -1
|
|
||||||
wrapMode: 1
|
|
||||||
nPOTScale: 0
|
|
||||||
lightmap: 0
|
|
||||||
rGBM: 0
|
|
||||||
compressionQuality: 50
|
|
||||||
allowsAlphaSplitting: 0
|
|
||||||
spriteMode: 0
|
|
||||||
spriteExtrude: 1
|
|
||||||
spriteMeshType: 1
|
|
||||||
alignment: 0
|
|
||||||
spritePivot:
|
|
||||||
x: 0.5
|
|
||||||
y: 0.5
|
|
||||||
spriteBorder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
w: 0
|
|
||||||
spritePixelsToUnits: 100
|
|
||||||
alphaIsTransparency: 1
|
|
||||||
textureType: 2
|
|
||||||
buildTargetSettings: []
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
spritePackingTag:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
Before Width: | Height: | Size: 248 B |
@ -1,69 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 3eea7b558c67b48e18acf3c278392e3d
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Editor Default Resources/Firebase/fb_database.png
|
|
||||||
timeCreated: 1476203961
|
|
||||||
licenseType: Free
|
|
||||||
TextureImporter:
|
|
||||||
fileIDToRecycleName: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
mipmaps:
|
|
||||||
mipMapMode: 0
|
|
||||||
enableMipMap: 1
|
|
||||||
linearTexture: 0
|
|
||||||
correctGamma: 0
|
|
||||||
fadeOut: 0
|
|
||||||
borderMipMap: 0
|
|
||||||
mipMapFadeDistanceStart: 1
|
|
||||||
mipMapFadeDistanceEnd: 3
|
|
||||||
bumpmap:
|
|
||||||
convertToNormalMap: 0
|
|
||||||
externalNormalMap: 0
|
|
||||||
heightScale: 0.25
|
|
||||||
normalMapFilter: 0
|
|
||||||
isReadable: 0
|
|
||||||
grayScaleToAlpha: 0
|
|
||||||
generateCubemap: 0
|
|
||||||
cubemapConvolution: 0
|
|
||||||
cubemapConvolutionSteps: 7
|
|
||||||
cubemapConvolutionExponent: 1.5
|
|
||||||
seamlessCubemap: 0
|
|
||||||
textureFormat: -1
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureSettings:
|
|
||||||
filterMode: -1
|
|
||||||
aniso: -1
|
|
||||||
mipBias: -1
|
|
||||||
wrapMode: -1
|
|
||||||
nPOTScale: 1
|
|
||||||
lightmap: 0
|
|
||||||
rGBM: 0
|
|
||||||
compressionQuality: 50
|
|
||||||
allowsAlphaSplitting: 0
|
|
||||||
spriteMode: 0
|
|
||||||
spriteExtrude: 1
|
|
||||||
spriteMeshType: 1
|
|
||||||
alignment: 0
|
|
||||||
spritePivot:
|
|
||||||
x: 0.5
|
|
||||||
y: 0.5
|
|
||||||
spriteBorder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
w: 0
|
|
||||||
spritePixelsToUnits: 100
|
|
||||||
alphaIsTransparency: 0
|
|
||||||
spriteTessellationDetail: -1
|
|
||||||
textureType: -1
|
|
||||||
buildTargetSettings: []
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
spritePackingTag:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
Before Width: | Height: | Size: 268 B |
@ -1,69 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 9f6bfa9d8aefb40dc92461c372c73b0f
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Editor Default Resources/Firebase/fb_database_dark.png
|
|
||||||
timeCreated: 1476203949
|
|
||||||
licenseType: Free
|
|
||||||
TextureImporter:
|
|
||||||
fileIDToRecycleName: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
mipmaps:
|
|
||||||
mipMapMode: 0
|
|
||||||
enableMipMap: 1
|
|
||||||
linearTexture: 0
|
|
||||||
correctGamma: 0
|
|
||||||
fadeOut: 0
|
|
||||||
borderMipMap: 0
|
|
||||||
mipMapFadeDistanceStart: 1
|
|
||||||
mipMapFadeDistanceEnd: 3
|
|
||||||
bumpmap:
|
|
||||||
convertToNormalMap: 0
|
|
||||||
externalNormalMap: 0
|
|
||||||
heightScale: 0.25
|
|
||||||
normalMapFilter: 0
|
|
||||||
isReadable: 0
|
|
||||||
grayScaleToAlpha: 0
|
|
||||||
generateCubemap: 0
|
|
||||||
cubemapConvolution: 0
|
|
||||||
cubemapConvolutionSteps: 7
|
|
||||||
cubemapConvolutionExponent: 1.5
|
|
||||||
seamlessCubemap: 0
|
|
||||||
textureFormat: -1
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureSettings:
|
|
||||||
filterMode: -1
|
|
||||||
aniso: -1
|
|
||||||
mipBias: -1
|
|
||||||
wrapMode: -1
|
|
||||||
nPOTScale: 1
|
|
||||||
lightmap: 0
|
|
||||||
rGBM: 0
|
|
||||||
compressionQuality: 50
|
|
||||||
allowsAlphaSplitting: 0
|
|
||||||
spriteMode: 0
|
|
||||||
spriteExtrude: 1
|
|
||||||
spriteMeshType: 1
|
|
||||||
alignment: 0
|
|
||||||
spritePivot:
|
|
||||||
x: 0.5
|
|
||||||
y: 0.5
|
|
||||||
spriteBorder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
w: 0
|
|
||||||
spritePixelsToUnits: 100
|
|
||||||
alphaIsTransparency: 0
|
|
||||||
spriteTessellationDetail: -1
|
|
||||||
textureType: -1
|
|
||||||
buildTargetSettings: []
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
spritePackingTag:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
Before Width: | Height: | Size: 449 B |
@ -1,68 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 953367231f9e3e22e70e5d1c91a40fe5
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Editor Default Resources/Firebase/fb_functions.png
|
|
||||||
timeCreated: 1473376335
|
|
||||||
licenseType: Pro
|
|
||||||
TextureImporter:
|
|
||||||
fileIDToRecycleName: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
mipmaps:
|
|
||||||
mipMapMode: 0
|
|
||||||
enableMipMap: 0
|
|
||||||
linearTexture: 1
|
|
||||||
correctGamma: 0
|
|
||||||
fadeOut: 0
|
|
||||||
borderMipMap: 0
|
|
||||||
mipMapFadeDistanceStart: 1
|
|
||||||
mipMapFadeDistanceEnd: 3
|
|
||||||
bumpmap:
|
|
||||||
convertToNormalMap: 0
|
|
||||||
externalNormalMap: 0
|
|
||||||
heightScale: 0.25
|
|
||||||
normalMapFilter: 0
|
|
||||||
isReadable: 0
|
|
||||||
grayScaleToAlpha: 0
|
|
||||||
generateCubemap: 0
|
|
||||||
cubemapConvolution: 0
|
|
||||||
cubemapConvolutionSteps: 7
|
|
||||||
cubemapConvolutionExponent: 1.5
|
|
||||||
seamlessCubemap: 0
|
|
||||||
textureFormat: -1
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureSettings:
|
|
||||||
filterMode: -1
|
|
||||||
aniso: 1
|
|
||||||
mipBias: -1
|
|
||||||
wrapMode: 1
|
|
||||||
nPOTScale: 0
|
|
||||||
lightmap: 0
|
|
||||||
rGBM: 0
|
|
||||||
compressionQuality: 50
|
|
||||||
allowsAlphaSplitting: 0
|
|
||||||
spriteMode: 0
|
|
||||||
spriteExtrude: 1
|
|
||||||
spriteMeshType: 1
|
|
||||||
alignment: 0
|
|
||||||
spritePivot:
|
|
||||||
x: 0.5
|
|
||||||
y: 0.5
|
|
||||||
spriteBorder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
w: 0
|
|
||||||
spritePixelsToUnits: 100
|
|
||||||
alphaIsTransparency: 1
|
|
||||||
textureType: 2
|
|
||||||
buildTargetSettings: []
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
spritePackingTag:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
Before Width: | Height: | Size: 464 B |
@ -1,68 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: b5aa3e4f7432e1c5698417cc13f85271
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Editor Default Resources/Firebase/fb_functions_dark.png
|
|
||||||
timeCreated: 1472679008
|
|
||||||
licenseType: Pro
|
|
||||||
TextureImporter:
|
|
||||||
fileIDToRecycleName: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
mipmaps:
|
|
||||||
mipMapMode: 0
|
|
||||||
enableMipMap: 0
|
|
||||||
linearTexture: 1
|
|
||||||
correctGamma: 0
|
|
||||||
fadeOut: 0
|
|
||||||
borderMipMap: 0
|
|
||||||
mipMapFadeDistanceStart: 1
|
|
||||||
mipMapFadeDistanceEnd: 3
|
|
||||||
bumpmap:
|
|
||||||
convertToNormalMap: 0
|
|
||||||
externalNormalMap: 0
|
|
||||||
heightScale: 0.25
|
|
||||||
normalMapFilter: 0
|
|
||||||
isReadable: 0
|
|
||||||
grayScaleToAlpha: 0
|
|
||||||
generateCubemap: 0
|
|
||||||
cubemapConvolution: 0
|
|
||||||
cubemapConvolutionSteps: 7
|
|
||||||
cubemapConvolutionExponent: 1.5
|
|
||||||
seamlessCubemap: 0
|
|
||||||
textureFormat: -1
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureSettings:
|
|
||||||
filterMode: -1
|
|
||||||
aniso: 1
|
|
||||||
mipBias: -1
|
|
||||||
wrapMode: 1
|
|
||||||
nPOTScale: 0
|
|
||||||
lightmap: 0
|
|
||||||
rGBM: 0
|
|
||||||
compressionQuality: 50
|
|
||||||
allowsAlphaSplitting: 0
|
|
||||||
spriteMode: 0
|
|
||||||
spriteExtrude: 1
|
|
||||||
spriteMeshType: 1
|
|
||||||
alignment: 0
|
|
||||||
spritePivot:
|
|
||||||
x: 0.5
|
|
||||||
y: 0.5
|
|
||||||
spriteBorder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
w: 0
|
|
||||||
spritePixelsToUnits: 100
|
|
||||||
alphaIsTransparency: 1
|
|
||||||
textureType: 2
|
|
||||||
buildTargetSettings: []
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
spritePackingTag:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
Before Width: | Height: | Size: 306 B |
@ -1,78 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 573eb851c99f948f4bf2de49322bfd53
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Editor Default Resources/Firebase/fb_storage.png
|
|
||||||
timeCreated: 1481243899
|
|
||||||
licenseType: Pro
|
|
||||||
TextureImporter:
|
|
||||||
fileIDToRecycleName: {}
|
|
||||||
serializedVersion: 4
|
|
||||||
mipmaps:
|
|
||||||
mipMapMode: 0
|
|
||||||
enableMipMap: 1
|
|
||||||
sRGBTexture: 1
|
|
||||||
linearTexture: 0
|
|
||||||
fadeOut: 0
|
|
||||||
borderMipMap: 0
|
|
||||||
mipMapFadeDistanceStart: 1
|
|
||||||
mipMapFadeDistanceEnd: 3
|
|
||||||
bumpmap:
|
|
||||||
convertToNormalMap: 0
|
|
||||||
externalNormalMap: 0
|
|
||||||
heightScale: 0.25
|
|
||||||
normalMapFilter: 0
|
|
||||||
isReadable: 0
|
|
||||||
grayScaleToAlpha: 0
|
|
||||||
generateCubemap: 6
|
|
||||||
cubemapConvolution: 0
|
|
||||||
seamlessCubemap: 0
|
|
||||||
textureFormat: 1
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureSettings:
|
|
||||||
filterMode: -1
|
|
||||||
aniso: -1
|
|
||||||
mipBias: -1
|
|
||||||
wrapMode: -1
|
|
||||||
nPOTScale: 1
|
|
||||||
lightmap: 0
|
|
||||||
compressionQuality: 50
|
|
||||||
spriteMode: 0
|
|
||||||
spriteExtrude: 1
|
|
||||||
spriteMeshType: 1
|
|
||||||
alignment: 0
|
|
||||||
spritePivot:
|
|
||||||
x: 0.5
|
|
||||||
y: 0.5
|
|
||||||
spriteBorder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
w: 0
|
|
||||||
spritePixelsToUnits: 100
|
|
||||||
alphaUsage: 1
|
|
||||||
alphaIsTransparency: 0
|
|
||||||
spriteTessellationDetail: -1
|
|
||||||
textureType: 0
|
|
||||||
textureShape: 1
|
|
||||||
maxTextureSizeSet: 0
|
|
||||||
compressionQualitySet: 0
|
|
||||||
textureFormatSet: 0
|
|
||||||
platformSettings:
|
|
||||||
- buildTarget: DefaultTexturePlatform
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureFormat: -1
|
|
||||||
textureCompression: 1
|
|
||||||
compressionQuality: 50
|
|
||||||
crunchedCompression: 0
|
|
||||||
allowsAlphaSplitting: 0
|
|
||||||
overridden: 0
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
spritePackingTag:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
Before Width: | Height: | Size: 304 B |
@ -1,78 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 2955864b938094f579ea9902b65ac10c
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Editor Default Resources/Firebase/fb_storage_dark.png
|
|
||||||
timeCreated: 1481243898
|
|
||||||
licenseType: Pro
|
|
||||||
TextureImporter:
|
|
||||||
fileIDToRecycleName: {}
|
|
||||||
serializedVersion: 4
|
|
||||||
mipmaps:
|
|
||||||
mipMapMode: 0
|
|
||||||
enableMipMap: 1
|
|
||||||
sRGBTexture: 1
|
|
||||||
linearTexture: 0
|
|
||||||
fadeOut: 0
|
|
||||||
borderMipMap: 0
|
|
||||||
mipMapFadeDistanceStart: 1
|
|
||||||
mipMapFadeDistanceEnd: 3
|
|
||||||
bumpmap:
|
|
||||||
convertToNormalMap: 0
|
|
||||||
externalNormalMap: 0
|
|
||||||
heightScale: 0.25
|
|
||||||
normalMapFilter: 0
|
|
||||||
isReadable: 0
|
|
||||||
grayScaleToAlpha: 0
|
|
||||||
generateCubemap: 6
|
|
||||||
cubemapConvolution: 0
|
|
||||||
seamlessCubemap: 0
|
|
||||||
textureFormat: 1
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureSettings:
|
|
||||||
filterMode: -1
|
|
||||||
aniso: -1
|
|
||||||
mipBias: -1
|
|
||||||
wrapMode: -1
|
|
||||||
nPOTScale: 1
|
|
||||||
lightmap: 0
|
|
||||||
compressionQuality: 50
|
|
||||||
spriteMode: 0
|
|
||||||
spriteExtrude: 1
|
|
||||||
spriteMeshType: 1
|
|
||||||
alignment: 0
|
|
||||||
spritePivot:
|
|
||||||
x: 0.5
|
|
||||||
y: 0.5
|
|
||||||
spriteBorder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
w: 0
|
|
||||||
spritePixelsToUnits: 100
|
|
||||||
alphaUsage: 1
|
|
||||||
alphaIsTransparency: 0
|
|
||||||
spriteTessellationDetail: -1
|
|
||||||
textureType: 0
|
|
||||||
textureShape: 1
|
|
||||||
maxTextureSizeSet: 0
|
|
||||||
compressionQualitySet: 0
|
|
||||||
textureFormatSet: 0
|
|
||||||
platformSettings:
|
|
||||||
- buildTarget: DefaultTexturePlatform
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureFormat: -1
|
|
||||||
textureCompression: 1
|
|
||||||
compressionQuality: 50
|
|
||||||
crunchedCompression: 0
|
|
||||||
allowsAlphaSplitting: 0
|
|
||||||
overridden: 0
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
spritePackingTag:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
Before Width: | Height: | Size: 2.6 KiB |
@ -1,68 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 9f058f25e8e2d47cfb894951d4d7e48a
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Editor Default Resources/Firebase/firebase_lockup.png
|
|
||||||
timeCreated: 1473376336
|
|
||||||
licenseType: Pro
|
|
||||||
TextureImporter:
|
|
||||||
fileIDToRecycleName: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
mipmaps:
|
|
||||||
mipMapMode: 0
|
|
||||||
enableMipMap: 0
|
|
||||||
linearTexture: 1
|
|
||||||
correctGamma: 0
|
|
||||||
fadeOut: 0
|
|
||||||
borderMipMap: 0
|
|
||||||
mipMapFadeDistanceStart: 1
|
|
||||||
mipMapFadeDistanceEnd: 3
|
|
||||||
bumpmap:
|
|
||||||
convertToNormalMap: 0
|
|
||||||
externalNormalMap: 0
|
|
||||||
heightScale: 0.25
|
|
||||||
normalMapFilter: 0
|
|
||||||
isReadable: 0
|
|
||||||
grayScaleToAlpha: 0
|
|
||||||
generateCubemap: 0
|
|
||||||
cubemapConvolution: 0
|
|
||||||
cubemapConvolutionSteps: 7
|
|
||||||
cubemapConvolutionExponent: 1.5
|
|
||||||
seamlessCubemap: 0
|
|
||||||
textureFormat: -1
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureSettings:
|
|
||||||
filterMode: -1
|
|
||||||
aniso: 1
|
|
||||||
mipBias: -1
|
|
||||||
wrapMode: 1
|
|
||||||
nPOTScale: 0
|
|
||||||
lightmap: 0
|
|
||||||
rGBM: 0
|
|
||||||
compressionQuality: 50
|
|
||||||
allowsAlphaSplitting: 0
|
|
||||||
spriteMode: 0
|
|
||||||
spriteExtrude: 1
|
|
||||||
spriteMeshType: 1
|
|
||||||
alignment: 0
|
|
||||||
spritePivot:
|
|
||||||
x: 0.5
|
|
||||||
y: 0.5
|
|
||||||
spriteBorder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
w: 0
|
|
||||||
spritePixelsToUnits: 100
|
|
||||||
alphaIsTransparency: 1
|
|
||||||
textureType: 2
|
|
||||||
buildTargetSettings: []
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
spritePackingTag:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
Before Width: | Height: | Size: 2.7 KiB |
@ -1,68 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: b93330fc8ea08407dbc514b5101afa14
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Editor Default Resources/Firebase/firebase_lockup_dark.png
|
|
||||||
timeCreated: 1472601251
|
|
||||||
licenseType: Pro
|
|
||||||
TextureImporter:
|
|
||||||
fileIDToRecycleName: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
mipmaps:
|
|
||||||
mipMapMode: 0
|
|
||||||
enableMipMap: 0
|
|
||||||
linearTexture: 1
|
|
||||||
correctGamma: 0
|
|
||||||
fadeOut: 0
|
|
||||||
borderMipMap: 0
|
|
||||||
mipMapFadeDistanceStart: 1
|
|
||||||
mipMapFadeDistanceEnd: 3
|
|
||||||
bumpmap:
|
|
||||||
convertToNormalMap: 0
|
|
||||||
externalNormalMap: 0
|
|
||||||
heightScale: 0.25
|
|
||||||
normalMapFilter: 0
|
|
||||||
isReadable: 0
|
|
||||||
grayScaleToAlpha: 0
|
|
||||||
generateCubemap: 0
|
|
||||||
cubemapConvolution: 0
|
|
||||||
cubemapConvolutionSteps: 7
|
|
||||||
cubemapConvolutionExponent: 1.5
|
|
||||||
seamlessCubemap: 0
|
|
||||||
textureFormat: -1
|
|
||||||
maxTextureSize: 2048
|
|
||||||
textureSettings:
|
|
||||||
filterMode: -1
|
|
||||||
aniso: 1
|
|
||||||
mipBias: -1
|
|
||||||
wrapMode: 1
|
|
||||||
nPOTScale: 0
|
|
||||||
lightmap: 0
|
|
||||||
rGBM: 0
|
|
||||||
compressionQuality: 50
|
|
||||||
allowsAlphaSplitting: 0
|
|
||||||
spriteMode: 0
|
|
||||||
spriteExtrude: 1
|
|
||||||
spriteMeshType: 1
|
|
||||||
alignment: 0
|
|
||||||
spritePivot:
|
|
||||||
x: 0.5
|
|
||||||
y: 0.5
|
|
||||||
spriteBorder:
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
z: 0
|
|
||||||
w: 0
|
|
||||||
spritePixelsToUnits: 100
|
|
||||||
alphaIsTransparency: 1
|
|
||||||
textureType: 2
|
|
||||||
buildTargetSettings: []
|
|
||||||
spriteSheet:
|
|
||||||
serializedVersion: 2
|
|
||||||
sprites: []
|
|
||||||
outline: []
|
|
||||||
spritePackingTag:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 9a2df797eb7ea8e44843144af9429b99
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 6d8e2e3178665be488e481c57be9527e
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,42 +0,0 @@
|
|||||||
%YAML 1.1
|
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
|
||||||
--- !u!114 &11400000
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
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: 11500000, guid: 0863bf92b4fcc45b0b9267325249bf0f, type: 3}
|
|
||||||
m_Name: NotificationSettings
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
toolbarInt: 0
|
|
||||||
iOSNotificationEditorSettingsValues:
|
|
||||||
keys:
|
|
||||||
- UnityNotificationRequestAuthorizationOnAppLaunch
|
|
||||||
- UnityNotificationDefaultAuthorizationOptions
|
|
||||||
- UnityAddRemoteNotificationCapability
|
|
||||||
- UnityNotificationRequestAuthorizationForRemoteNotificationsOnAppLaunch
|
|
||||||
- UnityRemoteNotificationForegroundPresentationOptions
|
|
||||||
- UnityUseAPSReleaseEnvironment
|
|
||||||
- UnityUseLocationNotificationTrigger
|
|
||||||
values:
|
|
||||||
- True
|
|
||||||
- 7
|
|
||||||
- False
|
|
||||||
- False
|
|
||||||
- -1
|
|
||||||
- False
|
|
||||||
- False
|
|
||||||
AndroidNotificationEditorSettingsValues:
|
|
||||||
keys:
|
|
||||||
- UnityNotificationAndroidRescheduleOnDeviceRestart
|
|
||||||
- UnityNotificationAndroidUseCustomActivity
|
|
||||||
- UnityNotificationAndroidCustomActivityString
|
|
||||||
values:
|
|
||||||
- False
|
|
||||||
- False
|
|
||||||
- com.unity3d.player.UnityPlayerActivity
|
|
||||||
TrackedResourceAssets: []
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 45a04f37e0f48c744acc0874c4a8918a
|
|
||||||
NativeFormatImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
mainObjectFileID: 0
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: cf7266eb17a26af48ad8c9b635f1531c
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 5d4dd117147a881469012109b09c9f86
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 13a1a7f6db81d1543a565614a179ee0a
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,38 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: e2d7ea0845de4cf984265d2a444b7aa4
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-1.2.186
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.dll
|
|
||||||
- gvhp_targets-editor
|
|
||||||
timeCreated: 1480838400
|
|
||||||
PluginImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
iconMap: {}
|
|
||||||
executionOrder: {}
|
|
||||||
isPreloaded: 0
|
|
||||||
isOverridable: 0
|
|
||||||
validateReferences: 0
|
|
||||||
platformData:
|
|
||||||
- first:
|
|
||||||
Any:
|
|
||||||
second:
|
|
||||||
enabled: 0
|
|
||||||
settings: {}
|
|
||||||
- first:
|
|
||||||
Editor: Editor
|
|
||||||
second:
|
|
||||||
enabled: 0
|
|
||||||
settings:
|
|
||||||
DefaultValueInitialized: true
|
|
||||||
- first:
|
|
||||||
Windows Store Apps: WindowsStoreApps
|
|
||||||
second:
|
|
||||||
enabled: 0
|
|
||||||
settings:
|
|
||||||
CPU: AnyCPU
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,37 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: fa49a85d4ba140a0ae21528ed12d174c
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-1.2.186
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.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: 0
|
|
||||||
settings:
|
|
||||||
DefaultValueInitialized: true
|
|
||||||
- first:
|
|
||||||
Windows Store Apps: WindowsStoreApps
|
|
||||||
second:
|
|
||||||
enabled: 0
|
|
||||||
settings:
|
|
||||||
CPU: AnyCPU
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,37 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: d8bb10c56a0147bc855a6296778e025e
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-1.2.186
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.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: 0
|
|
||||||
settings:
|
|
||||||
DefaultValueInitialized: true
|
|
||||||
- first:
|
|
||||||
Windows Store Apps: WindowsStoreApps
|
|
||||||
second:
|
|
||||||
enabled: 0
|
|
||||||
settings:
|
|
||||||
CPU: AnyCPU
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,39 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 5980a684c61d42fbb6b74e2eb3477016
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-1.2.186
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.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:
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: aba4ee01c6d145f7bf2d944d892f709a
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-1.2.186
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-ExternalDependencyManager/Editor/CHANGELOG.md
|
|
||||||
timeCreated: 1584567712
|
|
||||||
licenseType: Pro
|
|
||||||
TextScriptImporter:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,37 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: f7632a50b10045458c53a5ddf7b6d238
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-1.2.186
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- 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:
|
|
||||||
@ -1,245 +0,0 @@
|
|||||||
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.
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: ae8b2bc8d1ac4ad48f0ab2b2e7ac75fb
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-1.2.186
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-ExternalDependencyManager/Editor/LICENSE
|
|
||||||
timeCreated: 1584567712
|
|
||||||
licenseType: Pro
|
|
||||||
TextScriptImporter:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,903 +0,0 @@
|
|||||||
# External Dependency Manager for Unity
|
|
||||||
|
|
||||||
[](https://openupm.com/packages/com.google.external-dependency-manager/)
|
|
||||||
[](https://openupm.com/packages/com.google.external-dependency-manager/)
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
|
|
||||||
The External Dependency Manager for Unity (EDM4U) (formerly Play Services
|
|
||||||
Resolver/Jar Resolver) is intended to be used by any Unity package or user 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
|
|
||||||
|
|
||||||
If you want to add and use iOS/Android dependencies directly in your project,
|
|
||||||
then you should to install EDM4U in your project.
|
|
||||||
|
|
||||||
If you are a package user and the plugin you are using depends on EDM4U, *and*
|
|
||||||
the package does not include EDM4U as a package dependency already, then you
|
|
||||||
should to install EDM4U in your project.
|
|
||||||
|
|
||||||
If you are a UPM package maintainer and your package requires EDM4U, then you
|
|
||||||
should add EDM4U as a
|
|
||||||
[package dependency](https://docs.unity3d.com/2019.3/Documentation/Manual/upm-dependencies.html)
|
|
||||||
in your package manifest (`package.json`):
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"dependencies": {
|
|
||||||
"com.google.external-dependency-manager": "1.2.178"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
You should still install EDM4U to test out the package during development.
|
|
||||||
|
|
||||||
If you are a legacy `.unitypackage` package maintainer and your package requires
|
|
||||||
EDM4U, please ask the user to install EDM4U separately. You should install EDM4U
|
|
||||||
to test out the package during development.
|
|
||||||
|
|
||||||
Updated releases are available on
|
|
||||||
[GitHub](https://github.com/googlesamples/unity-jar-resolver)
|
|
||||||
|
|
||||||
## 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
|
|
||||||
|
|
||||||
Check out [troubleshooting](troubleshooting-faq.md) if you need help.
|
|
||||||
|
|
||||||
### Install via OpenUPM
|
|
||||||
|
|
||||||
EDM4U is available on
|
|
||||||
[OpenUPM](https://openupm.com/packages/com.google.external-dependency-manager/):
|
|
||||||
|
|
||||||
```shell
|
|
||||||
openupm add com.google.external-dependency-manager
|
|
||||||
```
|
|
||||||
|
|
||||||
### Install via git URL
|
|
||||||
1. Open Package Manager
|
|
||||||
2. Click on the + icon on the top left corner of the "Package Manager" screen
|
|
||||||
3. Click on "Install package from git url..."
|
|
||||||
4. Paste: https://github.com/googlesamples/unity-jar-resolver.git?path=upm
|
|
||||||
|
|
||||||
### Install via Google APIs for Unity
|
|
||||||
|
|
||||||
EDM4U is available both in UPM and legacy `.unitypackage` formats on
|
|
||||||
[Google APIs for Unity](https://developers.google.com/unity/archive#external_dependency_manager_for_unity).
|
|
||||||
|
|
||||||
You may install the UPM version (.tgz) as a
|
|
||||||
[local UPM package](https://docs.unity3d.com/Manual/upm-ui-local.html).
|
|
||||||
|
|
||||||
You can also install EDM4U in your project as a `.unitypackage`. This is not
|
|
||||||
recommended due to potential conflicts.
|
|
||||||
|
|
||||||
### Conflict Resolution
|
|
||||||
|
|
||||||
For historical reasons, a package maintainer may choose to embed EDM4U in their
|
|
||||||
package for ease of installation. This will create a conflict when you try to
|
|
||||||
install EDM4U with the steps above, or with another package with embedded EDM4U.
|
|
||||||
If your project imported a `.unitypackage` that has a copy of EDM4U embedded in
|
|
||||||
it, you may safely delete it from your Assets folder. If your project depends on
|
|
||||||
another UPM package with EDM4U, please reach out to the package maintainer and
|
|
||||||
ask them to replace it with a dependency to this package. In the meantime, you
|
|
||||||
can workaround the issue by copying the package to your Packages folder (to
|
|
||||||
create an
|
|
||||||
[embedded package](https://docs.unity3d.com/Manual/upm-concepts.html#Embedded))
|
|
||||||
and perform the steps yourself to avoid a dependency conflict.
|
|
||||||
|
|
||||||
### Config file
|
|
||||||
|
|
||||||
To start adding dependencies to your project, 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 project requires.
|
|
||||||
|
|
||||||
The XML file needs to be under an `Editor` directory and match the name
|
|
||||||
`*Dependencies.xml`. For example, `MyPlugin/Editor/MyPluginDependencies.xml`.
|
|
||||||
|
|
||||||
## Usages
|
|
||||||
|
|
||||||
### Android Resolver
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
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:
|
|
||||||
|
|
||||||
```xml
|
|
||||||
<dependencies>
|
|
||||||
<androidPackages>
|
|
||||||
<androidPackage spec="com.google.android.gms:play-services-games:9.8.0">
|
|
||||||
<androidSdkPackageIds>
|
|
||||||
<androidSdkPackageId>extra-google-m2repository</androidSdkPackageId>
|
|
||||||
</androidSdkPackageIds>
|
|
||||||
</androidPackage>
|
|
||||||
</androidPackages>
|
|
||||||
</dependencies>
|
|
||||||
```
|
|
||||||
|
|
||||||
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:
|
|
||||||
|
|
||||||
```xml
|
|
||||||
<dependencies>
|
|
||||||
<androidPackages>
|
|
||||||
<androidPackage spec="com.google.api-client:google-api-client-android:1.22.0" />
|
|
||||||
</androidPackages>
|
|
||||||
</dependencies>
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 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 again if the bundle ID has changed.
|
|
||||||
|
|
||||||
- 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
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
For example, to add the AdMob pod, version 7.0 or greater with bitcode enabled:
|
|
||||||
|
|
||||||
```xml
|
|
||||||
<dependencies>
|
|
||||||
<iosPods>
|
|
||||||
<iosPod name="Google-Mobile-Ads-SDK" version="~> 7.0" bitcodeEnabled="true"
|
|
||||||
minTargetSdk="6.0" addToAllTargets="false" />
|
|
||||||
</iosPods>
|
|
||||||
</dependencies>
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 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:
|
|
||||||
|
|
||||||
```csharp
|
|
||||||
using System.IO;
|
|
||||||
|
|
||||||
using UnityEditor;
|
|
||||||
using UnityEditor.Callbacks;
|
|
||||||
using UnityEngine;
|
|
||||||
|
|
||||||
public class PostProcessIOS : MonoBehaviour
|
|
||||||
{
|
|
||||||
// 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).
|
|
||||||
[PostProcessBuildAttribute(45)]
|
|
||||||
private static void PostProcessBuild_iOS(BuildTarget target, string buildPath)
|
|
||||||
{
|
|
||||||
if (target == BuildTarget.iOS)
|
|
||||||
{
|
|
||||||
using (StreamWriter sw = File.AppendText(buildPath + "/Podfile"))
|
|
||||||
{
|
|
||||||
// E.g. add an app extension
|
|
||||||
sw.WriteLine("\ntarget 'NSExtension' do\n pod 'Firebase/Messaging', '6.6.0'\nend");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Package Manager Resolver
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
For example, to add a registry for plugins in the scope `com.coolstuff`:
|
|
||||||
|
|
||||||
```xml
|
|
||||||
<registries>
|
|
||||||
<registry name="Cool Stuff"
|
|
||||||
url="https://unityregistry.coolstuff.com"
|
|
||||||
termsOfService="https://coolstuff.com/unityregistry/terms"
|
|
||||||
privacyPolicy="https://coolstuff.com/unityregistry/privacy">
|
|
||||||
<scopes>
|
|
||||||
<scope>com.coolstuff</scope>
|
|
||||||
</scopes>
|
|
||||||
</registry>
|
|
||||||
</registries>
|
|
||||||
```
|
|
||||||
|
|
||||||
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](#version-handler)
|
|
||||||
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
|
|
||||||
|
|
||||||
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) section for 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.
|
|
||||||
|
|
||||||
## 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 your 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.
|
|
||||||
|
|
||||||
EDM4U 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.
|
|
||||||
|
|
||||||
## Plugin Redistribution
|
|
||||||
|
|
||||||
If you are a package maintainer and your package depends on EDM4U, it is highly
|
|
||||||
recommended to use the UPM format and add EDM4U as a dependency. If you must
|
|
||||||
include it in your `.unitypackage`, redistributing `EDM4U` inside your own
|
|
||||||
plugin might ease the integration process for your users.
|
|
||||||
|
|
||||||
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` and
|
|
||||||
`Assets/ExternalDependencyManager` 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`:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
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.
|
|
||||||
|
|
||||||
## Building from Source
|
|
||||||
|
|
||||||
To build this plugin from source you need the following tools installed: * Unity
|
|
||||||
2021 and below (with iOS and Android modules installed) * Java 11
|
|
||||||
|
|
||||||
You can build the plugin by running the following from your shell (Linux / OSX):
|
|
||||||
|
|
||||||
```shell
|
|
||||||
./gradlew build
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
or Windows:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
./gradlew.bat build
|
|
||||||
```
|
|
||||||
|
|
||||||
If Java 11 is not your default Java command, add
|
|
||||||
`-Dorg.gradle.java.home=<PATH_TO_JAVA_HOME>` to the command above.
|
|
||||||
|
|
||||||
## Testing
|
|
||||||
|
|
||||||
You can run the tests by running the following from your shell (Linux / OSX):
|
|
||||||
|
|
||||||
```shell
|
|
||||||
./gradlew test
|
|
||||||
```
|
|
||||||
|
|
||||||
or Windows:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
./gradlew.bat test
|
|
||||||
```
|
|
||||||
|
|
||||||
The following properties can be set to narrow down the tests to run or change
|
|
||||||
the test run behavior.
|
|
||||||
|
|
||||||
* `INTERACTIVE_MODE_TESTS_ENABLED` - Default to `1`. Set to `1` to enable
|
|
||||||
interactive mode tests, which requires GPU on the machine. Otherwise, only
|
|
||||||
run tests in the batch mode.
|
|
||||||
* `INCLUDE_TEST_TYPES` - Default to empty string, which means to include every
|
|
||||||
type of the test. To narrow down the types of test to run, set this
|
|
||||||
properties with a list of case-insensitive type strings separated by comma.
|
|
||||||
For instance, `-PINCLUDE_TEST_TYPES="Python,NUnit"` means to include only
|
|
||||||
Python tests and NUnit tests. See `TestTypeEnum` in `build.gradle` for
|
|
||||||
available options.
|
|
||||||
* `EXCLUDE_TEST_TYPES` - Default to empty string, which means to exclude none.
|
|
||||||
To add types of tests to exclude, set this properties with a list of
|
|
||||||
case-insensitive type strings separated by comma. For instance,
|
|
||||||
`-PEXCLUDE_TEST_TYPES="Python,NUnit"` means to exclude Python tests and
|
|
||||||
NUnit tests. See `TestTypeEnum` in `build.gradle` for available options.
|
|
||||||
* `INCLUDE_TEST_MODULES` - Default to empty string, which means to include the
|
|
||||||
tests for every modules. To narrow down modules to test, set this properties
|
|
||||||
with a list of case-insensitive module strings separated by comma. For
|
|
||||||
instance, `-PINCLUDE_TEST_MODULES="Tool,AndroidResolver"` means to run tests
|
|
||||||
for tools and Android Resolver only. See `TestModuleEnum` in `build.gradle`
|
|
||||||
for available options.
|
|
||||||
* `EXCLUDE_TEST_MODULES` - Default to empty string, which means to exclude
|
|
||||||
none. To add modules to exclude, set this properties with a list of
|
|
||||||
case-insensitive module strings separated by comma. For instance,
|
|
||||||
`-PEXCLUDE_TEST_MODULES="Tool,AndroidResolver"` means to run tests for any
|
|
||||||
modules other than tools and Android Resolver. See `TestModuleEnum` in
|
|
||||||
`build.gradle` for available options.
|
|
||||||
* `EXCLUDE_TESTS` - Default to empty string, which means to exclude none. To
|
|
||||||
add tests to exclude, set this properties with a list of case-insensitive
|
|
||||||
test names separated by comma. For instance,
|
|
||||||
`-PEXCLUDE_TESTS="testGenGuids,testDownloadArtifacts"` means to run tests
|
|
||||||
except the tests with name of `testGenGuids` and `testDownloadArtifacts`.
|
|
||||||
* `CONTINUE_ON_FAIL_FOR_TESTS_ENABLED` - Default to `1`. Set to `1` to
|
|
||||||
continue running the next test when the current one fails. Otherwise, the
|
|
||||||
build script stops whenever any test fails.
|
|
||||||
|
|
||||||
For instance, by running the following command, it only runs the Unity
|
|
||||||
integration tests that does not requires GPU, but exclude tests for Android
|
|
||||||
Resolver module and iOS Resolver module.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
./gradlew test \
|
|
||||||
-PINTERACTIVE_MODE_TESTS_ENABLED=0 \
|
|
||||||
-PINCLUDE_TEST_TYPES="Integration" \
|
|
||||||
-PEXCLUDE_TEST_MODULES="AndroidResolver,iOSResolver"
|
|
||||||
```
|
|
||||||
|
|
||||||
## 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`
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 77919e84cef8419ab4b725fc16e83d52
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-1.2.186
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-ExternalDependencyManager/Editor/README.md
|
|
||||||
timeCreated: 1584567712
|
|
||||||
licenseType: Pro
|
|
||||||
TextScriptImporter:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.dll
|
|
||||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.pdb
|
|
||||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.dll
|
|
||||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.pdb
|
|
||||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.dll
|
|
||||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.pdb
|
|
||||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.dll
|
|
||||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.pdb
|
|
||||||
Assets/ExternalDependencyManager/Editor/CHANGELOG.md
|
|
||||||
Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll
|
|
||||||
Assets/ExternalDependencyManager/Editor/Google.VersionHandler.pdb
|
|
||||||
Assets/ExternalDependencyManager/Editor/LICENSE
|
|
||||||
Assets/ExternalDependencyManager/Editor/README.md
|
|
||||||
@ -1,16 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: c9a3138961c74d99b7046b783112fceb
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_manifest
|
|
||||||
- gvh_version-1.2.186
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.186_manifest.txt
|
|
||||||
- gvhp_manifestname-0External Dependency Manager
|
|
||||||
- gvhp_manifestname-play-services-resolver
|
|
||||||
timeCreated: 1474401009
|
|
||||||
licenseType: Pro
|
|
||||||
TextScriptImporter:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 1e5f5b064cc3edf478e3770ee2be098a
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 53972d64beba76449921725629957d5a
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,24 +0,0 @@
|
|||||||
<!-- Copyright (C) 2019 Google Inc. All Rights Reserved.
|
|
||||||
|
|
||||||
FirebaseApp iOS and Android Dependencies.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<iosPods>
|
|
||||||
<iosPod name="Firebase/Core" version="12.4.0" minTargetSdk="15.0">
|
|
||||||
</iosPod>
|
|
||||||
</iosPods>
|
|
||||||
<androidPackages>
|
|
||||||
<androidPackage spec="com.google.firebase:firebase-common:22.0.1">
|
|
||||||
</androidPackage>
|
|
||||||
<androidPackage spec="com.google.firebase:firebase-analytics:23.0.0">
|
|
||||||
</androidPackage>
|
|
||||||
<androidPackage spec="com.google.android.gms:play-services-base:18.9.0">
|
|
||||||
</androidPackage>
|
|
||||||
<androidPackage spec="com.google.firebase:firebase-app-unity:13.5.0">
|
|
||||||
<repositories>
|
|
||||||
<repository>Assets/Firebase/m2repository</repository>
|
|
||||||
</repositories>
|
|
||||||
</androidPackage>
|
|
||||||
</androidPackages>
|
|
||||||
</dependencies>
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 9b63af95d9364af4a3d8ce58738b6223
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Firebase/Editor/AppDependencies.xml
|
|
||||||
timeCreated: 1480838400
|
|
||||||
DefaultImporter:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,22 +0,0 @@
|
|||||||
<!-- Copyright (C) 2019 Google Inc. All Rights Reserved.
|
|
||||||
|
|
||||||
FirebaseAuth iOS and Android Dependencies.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<iosPods>
|
|
||||||
<iosPod name="Firebase/Auth" version="12.4.0" minTargetSdk="15.0">
|
|
||||||
</iosPod>
|
|
||||||
</iosPods>
|
|
||||||
<androidPackages>
|
|
||||||
<androidPackage spec="com.google.firebase:firebase-auth:24.0.1">
|
|
||||||
</androidPackage>
|
|
||||||
<androidPackage spec="com.google.firebase:firebase-analytics:23.0.0">
|
|
||||||
</androidPackage>
|
|
||||||
<androidPackage spec="com.google.firebase:firebase-auth-unity:13.5.0">
|
|
||||||
<repositories>
|
|
||||||
<repository>Assets/Firebase/m2repository</repository>
|
|
||||||
</repositories>
|
|
||||||
</androidPackage>
|
|
||||||
</androidPackages>
|
|
||||||
</dependencies>
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 2bec2bf8d84d4997ba2dd66263781f3d
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Firebase/Editor/AuthDependencies.xml
|
|
||||||
timeCreated: 1480838400
|
|
||||||
DefaultImporter:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,83 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 9f2edbf81053418f879076c05f816dc2
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_targets-editor
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Firebase/Editor/Firebase.Editor.dll
|
|
||||||
timeCreated: 1480838400
|
|
||||||
PluginImporter:
|
|
||||||
serializedVersion: 1
|
|
||||||
iconMap: {}
|
|
||||||
executionOrder: {}
|
|
||||||
isPreloaded: 0
|
|
||||||
platformData:
|
|
||||||
Android:
|
|
||||||
enabled: 0
|
|
||||||
settings:
|
|
||||||
CPU: AnyCPU
|
|
||||||
Any:
|
|
||||||
enabled: 0
|
|
||||||
settings: {}
|
|
||||||
Editor:
|
|
||||||
enabled: 0
|
|
||||||
settings:
|
|
||||||
CPU: AnyCPU
|
|
||||||
DefaultValueInitialized: true
|
|
||||||
OS: AnyOS
|
|
||||||
Linux:
|
|
||||||
enabled: 0
|
|
||||||
settings:
|
|
||||||
CPU: None
|
|
||||||
Linux64:
|
|
||||||
enabled: 0
|
|
||||||
settings:
|
|
||||||
CPU: None
|
|
||||||
LinuxUniversal:
|
|
||||||
enabled: 0
|
|
||||||
settings:
|
|
||||||
CPU: None
|
|
||||||
OSXIntel:
|
|
||||||
enabled: 0
|
|
||||||
settings:
|
|
||||||
CPU: None
|
|
||||||
OSXIntel64:
|
|
||||||
enabled: 0
|
|
||||||
settings:
|
|
||||||
CPU: None
|
|
||||||
OSXUniversal:
|
|
||||||
enabled: 0
|
|
||||||
settings:
|
|
||||||
CPU: None
|
|
||||||
Web:
|
|
||||||
enabled: 0
|
|
||||||
settings: {}
|
|
||||||
WebStreamed:
|
|
||||||
enabled: 0
|
|
||||||
settings: {}
|
|
||||||
Win:
|
|
||||||
enabled: 0
|
|
||||||
settings:
|
|
||||||
CPU: None
|
|
||||||
Win64:
|
|
||||||
enabled: 0
|
|
||||||
settings:
|
|
||||||
CPU: None
|
|
||||||
WindowsStoreApps:
|
|
||||||
enabled: 0
|
|
||||||
settings:
|
|
||||||
CPU: AnyCPU
|
|
||||||
iOS:
|
|
||||||
enabled: 0
|
|
||||||
settings:
|
|
||||||
CompileFlags:
|
|
||||||
FrameworkDependencies:
|
|
||||||
tvOS:
|
|
||||||
enabled: 0
|
|
||||||
settings:
|
|
||||||
CompileFlags:
|
|
||||||
FrameworkDependencies:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
validateReferences: 0
|
|
||||||
@ -1,69 +0,0 @@
|
|||||||
Assets/Editor Default Resources/Firebase/fb_analytics.png
|
|
||||||
Assets/Editor Default Resources/Firebase/fb_analytics_dark.png
|
|
||||||
Assets/Editor Default Resources/Firebase/fb_auth.png
|
|
||||||
Assets/Editor Default Resources/Firebase/fb_auth_dark.png
|
|
||||||
Assets/Editor Default Resources/Firebase/fb_cloud_messaging.png
|
|
||||||
Assets/Editor Default Resources/Firebase/fb_cloud_messaging_dark.png
|
|
||||||
Assets/Editor Default Resources/Firebase/fb_config.png
|
|
||||||
Assets/Editor Default Resources/Firebase/fb_config_dark.png
|
|
||||||
Assets/Editor Default Resources/Firebase/fb_crashlytics.png
|
|
||||||
Assets/Editor Default Resources/Firebase/fb_crashlytics_dark.png
|
|
||||||
Assets/Editor Default Resources/Firebase/fb_database.png
|
|
||||||
Assets/Editor Default Resources/Firebase/fb_database_dark.png
|
|
||||||
Assets/Editor Default Resources/Firebase/fb_functions.png
|
|
||||||
Assets/Editor Default Resources/Firebase/fb_functions_dark.png
|
|
||||||
Assets/Editor Default Resources/Firebase/fb_storage.png
|
|
||||||
Assets/Editor Default Resources/Firebase/fb_storage_dark.png
|
|
||||||
Assets/Editor Default Resources/Firebase/firebase_lockup.png
|
|
||||||
Assets/Editor Default Resources/Firebase/firebase_lockup_dark.png
|
|
||||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.dll
|
|
||||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.pdb
|
|
||||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.dll
|
|
||||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.pdb
|
|
||||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.dll
|
|
||||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.pdb
|
|
||||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.dll
|
|
||||||
Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.pdb
|
|
||||||
Assets/ExternalDependencyManager/Editor/CHANGELOG.md
|
|
||||||
Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll
|
|
||||||
Assets/ExternalDependencyManager/Editor/Google.VersionHandler.pdb
|
|
||||||
Assets/ExternalDependencyManager/Editor/LICENSE
|
|
||||||
Assets/ExternalDependencyManager/Editor/README.md
|
|
||||||
Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.186_manifest.txt
|
|
||||||
Assets/Firebase/Editor/AppDependencies.xml
|
|
||||||
Assets/Firebase/Editor/AuthDependencies.xml
|
|
||||||
Assets/Firebase/Editor/Firebase.Editor.dll
|
|
||||||
Assets/Firebase/Editor/Firebase.Editor.pdb
|
|
||||||
Assets/Firebase/Editor/generate_xml_from_google_services_json.exe
|
|
||||||
Assets/Firebase/Editor/generate_xml_from_google_services_json.py
|
|
||||||
Assets/Firebase/Editor/network_request.exe
|
|
||||||
Assets/Firebase/Editor/network_request.py
|
|
||||||
Assets/Firebase/Plugins/Firebase.App.dll
|
|
||||||
Assets/Firebase/Plugins/Firebase.App.pdb
|
|
||||||
Assets/Firebase/Plugins/Firebase.Auth.dll
|
|
||||||
Assets/Firebase/Plugins/Firebase.Auth.pdb
|
|
||||||
Assets/Firebase/Plugins/Firebase.Platform.dll
|
|
||||||
Assets/Firebase/Plugins/Firebase.Platform.pdb
|
|
||||||
Assets/Firebase/Plugins/Firebase.TaskExtension.dll
|
|
||||||
Assets/Firebase/Plugins/Firebase.TaskExtension.pdb
|
|
||||||
Assets/Firebase/Plugins/Google.MiniJson.dll
|
|
||||||
Assets/Firebase/Plugins/iOS/Firebase.App.dll
|
|
||||||
Assets/Firebase/Plugins/iOS/Firebase.App.pdb
|
|
||||||
Assets/Firebase/Plugins/iOS/Firebase.Auth.dll
|
|
||||||
Assets/Firebase/Plugins/iOS/Firebase.Auth.pdb
|
|
||||||
Assets/Firebase/Plugins/x86_64/FirebaseCppApp-13_5_0.bundle
|
|
||||||
Assets/Firebase/Plugins/x86_64/FirebaseCppApp-13_5_0.dll
|
|
||||||
Assets/Firebase/Plugins/x86_64/FirebaseCppApp-13_5_0.so
|
|
||||||
Assets/Firebase/Plugins/x86_64/FirebaseCppAuth.bundle
|
|
||||||
Assets/Firebase/Plugins/x86_64/FirebaseCppAuth.dll
|
|
||||||
Assets/Firebase/Plugins/x86_64/FirebaseCppAuth.so
|
|
||||||
Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/13.5.0/firebase-app-unity-13.5.0.pom
|
|
||||||
Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/13.5.0/firebase-app-unity-13.5.0.srcaar
|
|
||||||
Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/maven-metadata.xml
|
|
||||||
Assets/Firebase/m2repository/com/google/firebase/firebase-auth-unity/13.5.0/firebase-auth-unity-13.5.0.pom
|
|
||||||
Assets/Firebase/m2repository/com/google/firebase/firebase-auth-unity/13.5.0/firebase-auth-unity-13.5.0.srcaar
|
|
||||||
Assets/Firebase/m2repository/com/google/firebase/firebase-auth-unity/maven-metadata.xml
|
|
||||||
Assets/Plugins/iOS/Firebase/libFirebaseCppApp.a
|
|
||||||
Assets/Plugins/iOS/Firebase/libFirebaseCppAuth.a
|
|
||||||
Assets/Plugins/tvOS/Firebase/libFirebaseCppApp.a
|
|
||||||
Assets/Plugins/tvOS/Firebase/libFirebaseCppAuth.a
|
|
||||||
@ -1,10 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 3e97068970864d50998f7b1767d8d303
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_manifest
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Firebase/Editor/FirebaseAuth_version-13.5.0_manifest.txt
|
|
||||||
- gvhp_manifestname-0Firebase Authentication
|
|
||||||
- gvhp_manifestname-1FirebaseAuth
|
|
||||||
timeCreated: 0
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: ae88c0972b7448b5b36def1716f1d711
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Firebase/Editor/generate_xml_from_google_services_json.exe
|
|
||||||
timeCreated: 1480838400
|
|
||||||
DefaultImporter:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,498 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
|
|
||||||
# Copyright 2016 Google LLC
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
"""Stand-alone implementation of the Gradle Firebase plugin.
|
|
||||||
|
|
||||||
Converts the services json file to xml:
|
|
||||||
https://googleplex-android.googlesource.com/platform/tools/base/+/studio-master-dev/build-system/google-services/src/main/groovy/com/google/gms/googleservices
|
|
||||||
"""
|
|
||||||
|
|
||||||
__author__ = 'Wouter van Oortmerssen'
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import ctypes
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import platform
|
|
||||||
import sys
|
|
||||||
from xml.etree import ElementTree
|
|
||||||
|
|
||||||
if platform.system().lower() == 'windows':
|
|
||||||
import ctypes.wintypes # pylint: disable=g-import-not-at-top
|
|
||||||
|
|
||||||
# Map Python 2's unicode method to encode a string as bytes in python 3.
|
|
||||||
try:
|
|
||||||
unicode('') # See whether unicode class is available (Python < 3)
|
|
||||||
except NameError:
|
|
||||||
unicode = str # pylint: disable=redefined-builtin,invalid-name
|
|
||||||
|
|
||||||
# Input filename if it isn't set.
|
|
||||||
DEFAULT_INPUT_FILENAME = 'app/google-services.json'
|
|
||||||
# Output filename if it isn't set.
|
|
||||||
DEFAULT_OUTPUT_FILENAME = 'res/values/googleservices.xml'
|
|
||||||
# Input filename for .plist files, if it isn't set.
|
|
||||||
DEFAULT_PLIST_INPUT_FILENAME = 'GoogleService-Info.plist'
|
|
||||||
# Output filename for .json files, if it isn't set.
|
|
||||||
DEFAULT_JSON_OUTPUT_FILENAME = 'google-services-desktop.json'
|
|
||||||
|
|
||||||
OAUTH_CLIENT_TYPE_ANDROID_APP = 1
|
|
||||||
OAUTH_CLIENT_TYPE_WEB = 3
|
|
||||||
|
|
||||||
|
|
||||||
def read_xml_value(xml_node):
|
|
||||||
"""Utility method for reading values from the plist XML.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
xml_node: An ElementTree node, that contains a value.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
The value of the node, or None, if it could not be read.
|
|
||||||
"""
|
|
||||||
if xml_node.tag == 'string':
|
|
||||||
return xml_node.text
|
|
||||||
elif xml_node.tag == 'integer':
|
|
||||||
return int(xml_node.text)
|
|
||||||
elif xml_node.tag == 'real':
|
|
||||||
return float(xml_node.text)
|
|
||||||
elif xml_node.tag == 'false':
|
|
||||||
return 0
|
|
||||||
elif xml_node.tag == 'true':
|
|
||||||
return 1
|
|
||||||
else:
|
|
||||||
# other types of input are ignored. (data, dates, arrays, etc.)
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def construct_plist_dictionary(xml_root):
|
|
||||||
"""Constructs a dictionary of values based on the contents of a plist file.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
xml_root: An ElementTree node, that represents the root of the xml file
|
|
||||||
that is to be parsed. (Which should be a dictionary containing
|
|
||||||
key-value pairs of the properties that need to be extracted.)
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
A dictionary, containing key-value pairs for all (supported) entries in the
|
|
||||||
node.
|
|
||||||
"""
|
|
||||||
xml_dict = xml_root.find('dict')
|
|
||||||
|
|
||||||
if xml_dict is None:
|
|
||||||
return None
|
|
||||||
|
|
||||||
plist_dict = {}
|
|
||||||
i = 0
|
|
||||||
while i < len(xml_dict):
|
|
||||||
if xml_dict[i].tag == 'key':
|
|
||||||
key = xml_dict[i].text
|
|
||||||
i += 1
|
|
||||||
if i < len(xml_dict):
|
|
||||||
value = read_xml_value(xml_dict[i])
|
|
||||||
if value is not None:
|
|
||||||
plist_dict[key] = value
|
|
||||||
i += 1
|
|
||||||
|
|
||||||
return plist_dict
|
|
||||||
|
|
||||||
|
|
||||||
def update_dict_keys(key_map, input_dict):
|
|
||||||
"""Creates a dict from input_dict with the same values but new keys.
|
|
||||||
|
|
||||||
Two dictionaries are passed to this function: the key_map that represents a
|
|
||||||
mapping of source keys to destination keys, and the input_dict that is the
|
|
||||||
dictionary that is to be duplicated, replacing any key that matches a source
|
|
||||||
key with a destination key. Source keys that are not present in the
|
|
||||||
input_dict will not have their destination key represented in the result.
|
|
||||||
|
|
||||||
In other words, if key_map is `{'old': 'new', 'foo': 'bar'}`, and input_dict
|
|
||||||
is `{'old': 10}`, the result will be `{'new': 10}`.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
key_map (dict): A dictionary of strings to strings that maps source keys to
|
|
||||||
destination keys.
|
|
||||||
input_dict (dict): The dictionary of string keys to any value type, which
|
|
||||||
is to be duplicated, replacing source keys with the corresponding
|
|
||||||
destination keys from key_map.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
dict: A new dictionary with updated keys.
|
|
||||||
"""
|
|
||||||
return {
|
|
||||||
new_key: input_dict[old_key]
|
|
||||||
for (old_key, new_key) in key_map.items()
|
|
||||||
if old_key in input_dict
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def construct_google_services_json(xml_dict):
|
|
||||||
"""Constructs a google services json file from a dictionary.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
xml_dict: A dictionary of all the key/value pairs that are needed for the
|
|
||||||
output json file.
|
|
||||||
Returns:
|
|
||||||
A string representing the output json file.
|
|
||||||
"""
|
|
||||||
|
|
||||||
try:
|
|
||||||
json_struct = {
|
|
||||||
'project_info':
|
|
||||||
update_dict_keys(
|
|
||||||
{
|
|
||||||
'GCM_SENDER_ID': 'project_number',
|
|
||||||
'DATABASE_URL': 'firebase_url',
|
|
||||||
'PROJECT_ID': 'project_id',
|
|
||||||
'STORAGE_BUCKET': 'storage_bucket'
|
|
||||||
}, xml_dict),
|
|
||||||
'client': [{
|
|
||||||
'client_info': {
|
|
||||||
'mobilesdk_app_id': xml_dict['GOOGLE_APP_ID'],
|
|
||||||
'android_client_info': {
|
|
||||||
'package_name': xml_dict['BUNDLE_ID']
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'api_key': [{
|
|
||||||
'current_key': xml_dict['API_KEY']
|
|
||||||
}],
|
|
||||||
'services': {
|
|
||||||
'analytics_service': {
|
|
||||||
'status': xml_dict['IS_ANALYTICS_ENABLED']
|
|
||||||
},
|
|
||||||
'appinvite_service': {
|
|
||||||
'status': xml_dict['IS_APPINVITE_ENABLED']
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},],
|
|
||||||
'configuration_version':
|
|
||||||
'1'
|
|
||||||
}
|
|
||||||
# OAuth client is optional, but include it if present.
|
|
||||||
if 'CLIENT_ID' in xml_dict:
|
|
||||||
json_struct['client'][0]['oauth_client'] = [{
|
|
||||||
'client_id': xml_dict['CLIENT_ID'],
|
|
||||||
}]
|
|
||||||
return json.dumps(json_struct, indent=2)
|
|
||||||
except KeyError as e:
|
|
||||||
sys.stderr.write('Could not find key in plist file: [%s]\n' % (e.args[0]))
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def convert_plist_to_json(plist_string, input_filename):
|
|
||||||
"""Converts an input plist string into a .json file and saves it.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
plist_string: The contents of the loaded plist file.
|
|
||||||
|
|
||||||
input_filename: The file name that the plist data was read from.
|
|
||||||
Returns:
|
|
||||||
the converted string, or None if there were errors.
|
|
||||||
"""
|
|
||||||
|
|
||||||
try:
|
|
||||||
root = ElementTree.fromstring(plist_string)
|
|
||||||
except ElementTree.ParseError:
|
|
||||||
sys.stderr.write('Error parsing file %s.\n'
|
|
||||||
'It does not appear to be valid XML.\n' % (input_filename))
|
|
||||||
return None
|
|
||||||
|
|
||||||
plist_dict = construct_plist_dictionary(root)
|
|
||||||
if plist_dict is None:
|
|
||||||
sys.stderr.write('In file %s, could not locate a top-level \'dict\' '
|
|
||||||
'element.\n'
|
|
||||||
'File format should be plist XML, with a top-level '
|
|
||||||
'dictionary containing project settings as key-value '
|
|
||||||
'pairs.\n' % (input_filename))
|
|
||||||
return None
|
|
||||||
|
|
||||||
json_string = construct_google_services_json(plist_dict)
|
|
||||||
return json_string
|
|
||||||
|
|
||||||
|
|
||||||
def gen_string(parent, name, text):
|
|
||||||
"""Generate one <string /> element and put into the list of keeps.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
parent: The object that will hold the string.
|
|
||||||
name: The name to store the string under.
|
|
||||||
text: The text of the string.
|
|
||||||
"""
|
|
||||||
if text:
|
|
||||||
prev = parent.get('tools:keep', '')
|
|
||||||
if prev:
|
|
||||||
prev += ','
|
|
||||||
parent.set('tools:keep', prev + '@string/' + name)
|
|
||||||
child = ElementTree.SubElement(parent, 'string', {
|
|
||||||
'name': name,
|
|
||||||
'translatable': 'false'
|
|
||||||
})
|
|
||||||
child.text = text
|
|
||||||
|
|
||||||
|
|
||||||
def indent(elem, level=0):
|
|
||||||
"""Recurse through XML tree and add indentation.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
elem: The element to recurse over
|
|
||||||
level: The current indentation level.
|
|
||||||
"""
|
|
||||||
i = '\n' + level*' '
|
|
||||||
if elem is not None:
|
|
||||||
if not elem.text or not elem.text.strip():
|
|
||||||
elem.text = i + ' '
|
|
||||||
if not elem.tail or not elem.tail.strip():
|
|
||||||
elem.tail = i
|
|
||||||
for elem in elem:
|
|
||||||
indent(elem, level+1)
|
|
||||||
if not elem.tail or not elem.tail.strip():
|
|
||||||
elem.tail = i
|
|
||||||
else:
|
|
||||||
if level and (not elem.tail or not elem.tail.strip()):
|
|
||||||
elem.tail = i
|
|
||||||
|
|
||||||
|
|
||||||
def argv_as_unicode_win32():
|
|
||||||
"""Returns unicode command line arguments on windows.
|
|
||||||
"""
|
|
||||||
|
|
||||||
get_command_line_w = ctypes.cdll.kernel32.GetCommandLineW
|
|
||||||
get_command_line_w.restype = ctypes.wintypes.LPCWSTR
|
|
||||||
|
|
||||||
# CommandLineToArgvW parses the Unicode command line
|
|
||||||
command_line_to_argv_w = ctypes.windll.shell32.CommandLineToArgvW
|
|
||||||
command_line_to_argv_w.argtypes = [
|
|
||||||
ctypes.wintypes.LPCWSTR,
|
|
||||||
ctypes.POINTER(ctypes.c_int)
|
|
||||||
]
|
|
||||||
command_line_to_argv_w.restype = ctypes.POINTER(
|
|
||||||
ctypes.wintypes.LPWSTR)
|
|
||||||
|
|
||||||
argc = ctypes.c_int(0)
|
|
||||||
argv = command_line_to_argv_w(get_command_line_w(), argc)
|
|
||||||
|
|
||||||
# Strip the python executable from the arguments if it exists
|
|
||||||
# (It would be listed as the first argument on the windows command line, but
|
|
||||||
# not in the arguments to the python script)
|
|
||||||
sys_argv_len = len(sys.argv)
|
|
||||||
return [unicode(argv[i]) for i in
|
|
||||||
range(argc.value - sys_argv_len, argc.value)]
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
parser = argparse.ArgumentParser(
|
|
||||||
description=((
|
|
||||||
'Converts a Firebase %s into %s similar to the Gradle plugin, or '
|
|
||||||
'converts a Firebase %s into a %s suitible for use on desktop apps.' %
|
|
||||||
(DEFAULT_INPUT_FILENAME, DEFAULT_OUTPUT_FILENAME,
|
|
||||||
DEFAULT_PLIST_INPUT_FILENAME, DEFAULT_JSON_OUTPUT_FILENAME))))
|
|
||||||
parser.add_argument('-i', help='Override input file name',
|
|
||||||
metavar='FILE', required=False)
|
|
||||||
parser.add_argument('-o', help='Override destination file name',
|
|
||||||
metavar='FILE', required=False)
|
|
||||||
parser.add_argument('-p', help=('Package ID to select within the set of '
|
|
||||||
'packages in the input file. If this is '
|
|
||||||
'not specified, the first package in the '
|
|
||||||
'input file is selected.'))
|
|
||||||
parser.add_argument('-l', help=('List all package IDs referenced by the '
|
|
||||||
'input file. If this is specified, '
|
|
||||||
'the output file is not created.'),
|
|
||||||
action='store_true', default=False, required=False)
|
|
||||||
parser.add_argument('-f', help=('Print project fields from the input file '
|
|
||||||
'in the form \'name=value\\n\' for each '
|
|
||||||
'field. If this is specified, the output '
|
|
||||||
'is not created.'),
|
|
||||||
action='store_true', default=False, required=False)
|
|
||||||
parser.add_argument(
|
|
||||||
'--plist',
|
|
||||||
help=(
|
|
||||||
'Specifies a plist file to convert to a JSON configuration file. '
|
|
||||||
'If this is enabled, the script will expect a .plist file as input, '
|
|
||||||
'which it will convert into %s file. The output file is '
|
|
||||||
'*not* suitable for use with Firebase on Android.' %
|
|
||||||
(DEFAULT_JSON_OUTPUT_FILENAME)),
|
|
||||||
action='store_true',
|
|
||||||
default=False,
|
|
||||||
required=False)
|
|
||||||
|
|
||||||
# python 2 on Windows doesn't handle unicode arguments well, so we need to
|
|
||||||
# pre-process the command line arguments before trying to parse them.
|
|
||||||
if platform.system() == 'Windows':
|
|
||||||
sys.argv = argv_as_unicode_win32()
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
if args.plist:
|
|
||||||
input_filename = DEFAULT_PLIST_INPUT_FILENAME
|
|
||||||
output_filename = DEFAULT_JSON_OUTPUT_FILENAME
|
|
||||||
else:
|
|
||||||
input_filename = DEFAULT_INPUT_FILENAME
|
|
||||||
output_filename = DEFAULT_OUTPUT_FILENAME
|
|
||||||
|
|
||||||
if args.i:
|
|
||||||
# Encode the input string (type unicode) as a normal string (type str)
|
|
||||||
# using the 'utf-8' encoding so that it can be worked with the same as
|
|
||||||
# input names from other sources (like the defaults).
|
|
||||||
input_filename_raw = args.i.encode('utf-8')
|
|
||||||
# Decode the filename to a unicode string using the 'utf-8' encoding to
|
|
||||||
# properly handle filepaths with unicode characters in them.
|
|
||||||
input_filename = input_filename_raw.decode('utf-8')
|
|
||||||
|
|
||||||
if args.o:
|
|
||||||
output_filename = args.o
|
|
||||||
|
|
||||||
with open(input_filename, 'r') as ifile:
|
|
||||||
file_string = ifile.read()
|
|
||||||
|
|
||||||
json_string = None
|
|
||||||
if args.plist:
|
|
||||||
json_string = convert_plist_to_json(file_string, input_filename)
|
|
||||||
if json_string is None:
|
|
||||||
return 1
|
|
||||||
jsobj = json.loads(json_string)
|
|
||||||
else:
|
|
||||||
jsobj = json.loads(file_string)
|
|
||||||
|
|
||||||
root = ElementTree.Element('resources')
|
|
||||||
root.set('xmlns:tools', 'http://schemas.android.com/tools')
|
|
||||||
|
|
||||||
project_info = jsobj.get('project_info')
|
|
||||||
if project_info:
|
|
||||||
gen_string(root, 'firebase_database_url', project_info.get('firebase_url'))
|
|
||||||
gen_string(root, 'gcm_defaultSenderId', project_info.get('project_number'))
|
|
||||||
gen_string(root, 'google_storage_bucket',
|
|
||||||
project_info.get('storage_bucket'))
|
|
||||||
gen_string(root, 'project_id', project_info.get('project_id'))
|
|
||||||
|
|
||||||
if args.f:
|
|
||||||
if not project_info:
|
|
||||||
sys.stderr.write('No project info found in %s.' % input_filename)
|
|
||||||
return 1
|
|
||||||
for field, value in sorted(project_info.items()):
|
|
||||||
sys.stdout.write('%s=%s\n' % (field, value))
|
|
||||||
return 0
|
|
||||||
|
|
||||||
packages = set()
|
|
||||||
client_list = jsobj.get('client')
|
|
||||||
if client_list:
|
|
||||||
# Search for the user specified package in the file.
|
|
||||||
selected_package_name = ''
|
|
||||||
selected_client = client_list[0]
|
|
||||||
find_package_name = args.p
|
|
||||||
for client in client_list:
|
|
||||||
package_name = client.get('client_info', {}).get(
|
|
||||||
'android_client_info', {}).get('package_name', '')
|
|
||||||
if not package_name:
|
|
||||||
package_name = client.get('oauth_client', {}).get(
|
|
||||||
'android_info', {}).get('package_name', '')
|
|
||||||
if package_name:
|
|
||||||
if not selected_package_name:
|
|
||||||
selected_package_name = package_name
|
|
||||||
selected_client = client
|
|
||||||
if package_name == find_package_name:
|
|
||||||
selected_package_name = package_name
|
|
||||||
selected_client = client
|
|
||||||
packages.add(package_name)
|
|
||||||
|
|
||||||
if args.p and selected_package_name != find_package_name:
|
|
||||||
sys.stderr.write('No packages found in %s which match the package '
|
|
||||||
'name %s\n'
|
|
||||||
'\n'
|
|
||||||
'Found the following:\n'
|
|
||||||
'%s\n' % (input_filename, find_package_name,
|
|
||||||
'\n'.join(packages)))
|
|
||||||
return 1
|
|
||||||
|
|
||||||
client_api_key = selected_client.get('api_key')
|
|
||||||
if client_api_key:
|
|
||||||
client_api_key0 = client_api_key[0]
|
|
||||||
gen_string(root, 'google_api_key', client_api_key0.get('current_key'))
|
|
||||||
gen_string(root, 'google_crash_reporting_api_key',
|
|
||||||
client_api_key0.get('current_key'))
|
|
||||||
|
|
||||||
client_info = selected_client.get('client_info')
|
|
||||||
if client_info:
|
|
||||||
gen_string(root, 'google_app_id', client_info.get('mobilesdk_app_id'))
|
|
||||||
|
|
||||||
# Only include the first matching OAuth client ID per type.
|
|
||||||
client_id_web_parsed = False
|
|
||||||
client_id_android_parsed = False
|
|
||||||
|
|
||||||
oauth_client_list = selected_client.get('oauth_client')
|
|
||||||
if oauth_client_list:
|
|
||||||
for oauth_client in oauth_client_list:
|
|
||||||
client_type = oauth_client.get('client_type')
|
|
||||||
client_id = oauth_client.get('client_id')
|
|
||||||
if not (client_type and client_id): continue
|
|
||||||
if (client_type == OAUTH_CLIENT_TYPE_WEB and
|
|
||||||
not client_id_web_parsed):
|
|
||||||
gen_string(root, 'default_web_client_id', client_id)
|
|
||||||
client_id_web_parsed = True
|
|
||||||
if (client_type == OAUTH_CLIENT_TYPE_ANDROID_APP and
|
|
||||||
not client_id_android_parsed):
|
|
||||||
gen_string(root, 'default_android_client_id', client_id)
|
|
||||||
client_id_android_parsed = True
|
|
||||||
|
|
||||||
services = selected_client.get('services')
|
|
||||||
if services:
|
|
||||||
ads_service = services.get('ads_service')
|
|
||||||
if ads_service:
|
|
||||||
gen_string(root, 'test_banner_ad_unit_id',
|
|
||||||
ads_service.get('test_banner_ad_unit_id'))
|
|
||||||
gen_string(root, 'test_interstitial_ad_unit_id',
|
|
||||||
ads_service.get('test_interstitial_ad_unit_id'))
|
|
||||||
analytics_service = services.get('analytics_service')
|
|
||||||
if analytics_service:
|
|
||||||
analytics_property = analytics_service.get('analytics_property')
|
|
||||||
if analytics_property:
|
|
||||||
gen_string(root, 'ga_trackingId',
|
|
||||||
analytics_property.get('tracking_id'))
|
|
||||||
# enable this once we have an example if this service being present
|
|
||||||
# in the json data:
|
|
||||||
maps_service_enabled = False
|
|
||||||
if maps_service_enabled:
|
|
||||||
maps_service = services.get('maps_service')
|
|
||||||
if maps_service:
|
|
||||||
maps_api_key = maps_service.get('api_key')
|
|
||||||
if maps_api_key:
|
|
||||||
for k in range(0, len(maps_api_key)):
|
|
||||||
# generates potentially multiple of these keys, which is
|
|
||||||
# the same behavior as the java plugin.
|
|
||||||
gen_string(root, 'google_maps_key',
|
|
||||||
maps_api_key[k].get('maps_api_key'))
|
|
||||||
|
|
||||||
tree = ElementTree.ElementTree(root)
|
|
||||||
|
|
||||||
indent(root)
|
|
||||||
|
|
||||||
if args.l:
|
|
||||||
for package in sorted(packages):
|
|
||||||
if package:
|
|
||||||
sys.stdout.write(package + '\n')
|
|
||||||
else:
|
|
||||||
path = os.path.dirname(output_filename)
|
|
||||||
|
|
||||||
if path and not os.path.exists(path):
|
|
||||||
os.makedirs(path)
|
|
||||||
|
|
||||||
if not args.plist:
|
|
||||||
tree.write(output_filename, 'utf-8', True)
|
|
||||||
else:
|
|
||||||
with open(output_filename, 'w') as ofile:
|
|
||||||
ofile.write(json_string)
|
|
||||||
|
|
||||||
return 0
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.exit(main())
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 8f18ed76c0f04ce0a65736104f913ef8
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Firebase/Editor/generate_xml_from_google_services_json.py
|
|
||||||
timeCreated: 1480838400
|
|
||||||
DefaultImporter:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: d3cd5d0a941c4cdc8ab4b1b684b05191
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Firebase/Editor/network_request.exe
|
|
||||||
timeCreated: 1480838400
|
|
||||||
DefaultImporter:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,416 +0,0 @@
|
|||||||
# Copyright 2019 Google LLC
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
"""Wrapper script which makes a network request.
|
|
||||||
|
|
||||||
Basic Usage: network_request.py post
|
|
||||||
--url <url>
|
|
||||||
--header <header> (optional, support multiple)
|
|
||||||
--body <body> (optional)
|
|
||||||
--timeout <secs> (optional)
|
|
||||||
--verbose (optional)
|
|
||||||
"""
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import inspect
|
|
||||||
import logging
|
|
||||||
import socket
|
|
||||||
import sys
|
|
||||||
|
|
||||||
# pylint: disable=g-import-not-at-top
|
|
||||||
# pylint: disable=g-importing-member
|
|
||||||
try:
|
|
||||||
from six.moves.http_client import HTTPSConnection
|
|
||||||
from six.moves.http_client import HTTPConnection
|
|
||||||
from six.moves.http_client import HTTPException
|
|
||||||
except ImportError:
|
|
||||||
from http.client import HTTPSConnection
|
|
||||||
from http.client import HTTPConnection
|
|
||||||
from http.client import HTTPException
|
|
||||||
|
|
||||||
try:
|
|
||||||
from six.moves.urllib.parse import urlparse
|
|
||||||
except ImportError:
|
|
||||||
from urllib.parse import urlparse
|
|
||||||
# pylint: enable=g-import-not-at-top
|
|
||||||
# pylint: enable=g-importing-member
|
|
||||||
|
|
||||||
# Set up logger as soon as possible
|
|
||||||
formatter = logging.Formatter('[%(levelname)s] %(message)s')
|
|
||||||
|
|
||||||
handler = logging.StreamHandler(stream=sys.stdout)
|
|
||||||
handler.setFormatter(formatter)
|
|
||||||
handler.setLevel(logging.INFO)
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
logger.addHandler(handler)
|
|
||||||
logger.setLevel(logging.INFO)
|
|
||||||
|
|
||||||
# Custom exit codes for known issues.
|
|
||||||
# System exit codes in python are valid from 0 - 256, so we will map some common
|
|
||||||
# ones here to understand successes and failures.
|
|
||||||
# Uses lower ints to not collide w/ HTTP status codes that the script may return
|
|
||||||
EXIT_CODE_SUCCESS = 0
|
|
||||||
EXIT_CODE_SYS_ERROR = 1
|
|
||||||
EXIT_CODE_INVALID_REQUEST_VALUES = 2
|
|
||||||
EXIT_CODE_GENERIC_HTTPLIB_ERROR = 3
|
|
||||||
EXIT_CODE_HTTP_TIMEOUT = 4
|
|
||||||
EXIT_CODE_HTTP_REDIRECT_ERROR = 5
|
|
||||||
EXIT_CODE_HTTP_NOT_FOUND_ERROR = 6
|
|
||||||
EXIT_CODE_HTTP_SERVER_ERROR = 7
|
|
||||||
EXIT_CODE_HTTP_UNKNOWN_ERROR = 8
|
|
||||||
|
|
||||||
MAX_EXIT_CODE = 8
|
|
||||||
|
|
||||||
# All used http verbs
|
|
||||||
POST = 'POST'
|
|
||||||
|
|
||||||
|
|
||||||
def unwrap_kwarg_namespace(func):
|
|
||||||
"""Transform a Namespace object from argparse into proper args and kwargs.
|
|
||||||
|
|
||||||
For a function that will be delegated to from argparse, inspect all of the
|
|
||||||
argments and extract them from the Namespace object.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
func: the function that we are wrapping to modify behavior
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a new function that unwraps all of the arguments in a namespace and then
|
|
||||||
delegates to the passed function with those args.
|
|
||||||
"""
|
|
||||||
# When we move to python 3, getfullargspec so that we can tell the
|
|
||||||
# difference between args and kwargs -- then this could be used for functions
|
|
||||||
# that have both args and kwargs
|
|
||||||
if 'getfullargspec' in dir(inspect):
|
|
||||||
argspec = inspect.getfullargspec(func)
|
|
||||||
else:
|
|
||||||
argspec = inspect.getargspec(func) # Python 2 compatibility.
|
|
||||||
|
|
||||||
def wrapped(argparse_namespace=None, **kwargs):
|
|
||||||
"""Take a Namespace object and map it to kwargs.
|
|
||||||
|
|
||||||
Inspect the argspec of the passed function. Loop over all the args that
|
|
||||||
are present in the function and try to map them by name to arguments in the
|
|
||||||
namespace. For keyword arguments, we do not require that they be present
|
|
||||||
in the Namespace.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
argparse_namespace: an arparse.Namespace object, the result of calling
|
|
||||||
argparse.ArgumentParser().parse_args()
|
|
||||||
**kwargs: keyword arguments that may be passed to the original function
|
|
||||||
Returns:
|
|
||||||
The return of the wrapped function from the parent.
|
|
||||||
|
|
||||||
Raises:
|
|
||||||
ValueError in the event that an argument is passed to the cli that is not
|
|
||||||
in the set of named kwargs
|
|
||||||
"""
|
|
||||||
if not argparse_namespace:
|
|
||||||
return func(**kwargs)
|
|
||||||
|
|
||||||
reserved_namespace_keywords = ['func']
|
|
||||||
new_kwargs = {}
|
|
||||||
|
|
||||||
args = argspec.args or []
|
|
||||||
for arg_name in args:
|
|
||||||
passed_value = getattr(argparse_namespace, arg_name, None)
|
|
||||||
if passed_value is not None:
|
|
||||||
new_kwargs[arg_name] = passed_value
|
|
||||||
|
|
||||||
for namespace_key in vars(argparse_namespace).keys():
|
|
||||||
# ignore namespace keywords that have been set not passed in via cli
|
|
||||||
if namespace_key in reserved_namespace_keywords:
|
|
||||||
continue
|
|
||||||
|
|
||||||
# make sure that we haven't passed something we should be processing
|
|
||||||
if namespace_key not in args:
|
|
||||||
raise ValueError('CLI argument "{}" does not match any argument in '
|
|
||||||
'function {}'.format(namespace_key, func.__name__))
|
|
||||||
|
|
||||||
return func(**new_kwargs)
|
|
||||||
|
|
||||||
wrapped.__name__ = func.__name__
|
|
||||||
return wrapped
|
|
||||||
|
|
||||||
|
|
||||||
class NetworkRequest(object):
|
|
||||||
"""A container for an network request object.
|
|
||||||
|
|
||||||
This class holds on to all of the attributes necessary for making a
|
|
||||||
network request via httplib.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, url, method, headers, body, timeout):
|
|
||||||
self.url = url.lower()
|
|
||||||
self.parsed_url = urlparse(self.url)
|
|
||||||
self.method = method
|
|
||||||
self.headers = headers
|
|
||||||
self.body = body
|
|
||||||
self.timeout = timeout
|
|
||||||
self.is_secure_connection = self.is_secure_connection()
|
|
||||||
|
|
||||||
def execute_request(self):
|
|
||||||
""""Execute the request, and get a response.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
an HttpResponse object from httplib
|
|
||||||
"""
|
|
||||||
if self.is_secure_connection:
|
|
||||||
conn = HTTPSConnection(self.get_hostname(), timeout=self.timeout)
|
|
||||||
else:
|
|
||||||
conn = HTTPConnection(self.get_hostname(), timeout=self.timeout)
|
|
||||||
|
|
||||||
conn.request(self.method, self.url, self.body, self.headers)
|
|
||||||
response = conn.getresponse()
|
|
||||||
return response
|
|
||||||
|
|
||||||
def get_hostname(self):
|
|
||||||
"""Return the hostname for the url."""
|
|
||||||
return self.parsed_url.netloc
|
|
||||||
|
|
||||||
def is_secure_connection(self):
|
|
||||||
"""Checks for a secure connection of https.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
True if the scheme is "https"; False if "http"
|
|
||||||
|
|
||||||
Raises:
|
|
||||||
ValueError when the scheme does not match http or https
|
|
||||||
"""
|
|
||||||
scheme = self.parsed_url.scheme
|
|
||||||
|
|
||||||
if scheme == 'http':
|
|
||||||
return False
|
|
||||||
elif scheme == 'https':
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
raise ValueError('The url scheme is not "http" nor "https"'
|
|
||||||
': {}'.format(scheme))
|
|
||||||
|
|
||||||
|
|
||||||
def parse_colon_delimited_options(option_args):
|
|
||||||
"""Parses a key value from a string.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
option_args: Key value string delimited by a color, ex: ("key:value")
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
Return an array with the key as the first element and value as the second
|
|
||||||
|
|
||||||
Raises:
|
|
||||||
ValueError: If the key value option is not formatted correctly
|
|
||||||
"""
|
|
||||||
options = {}
|
|
||||||
|
|
||||||
if not option_args:
|
|
||||||
return options
|
|
||||||
|
|
||||||
for single_arg in option_args:
|
|
||||||
values = single_arg.split(':')
|
|
||||||
if len(values) != 2:
|
|
||||||
raise ValueError('An option arg must be a single key/value pair '
|
|
||||||
'delimited by a colon - ex: "thing_key:thing_value"')
|
|
||||||
|
|
||||||
key = values[0].strip()
|
|
||||||
value = values[1].strip()
|
|
||||||
options[key] = value
|
|
||||||
|
|
||||||
return options
|
|
||||||
|
|
||||||
|
|
||||||
def make_request(request):
|
|
||||||
"""Makes a synchronous network request and return the HTTP status code.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
request: a well formulated request object
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
The HTTP status code of the network request.
|
|
||||||
'1' maps to invalid request headers.
|
|
||||||
"""
|
|
||||||
|
|
||||||
logger.info('Sending network request -')
|
|
||||||
logger.info('\tUrl: %s', request.url)
|
|
||||||
logger.debug('\tMethod: %s', request.method)
|
|
||||||
logger.debug('\tHeaders: %s', request.headers)
|
|
||||||
logger.debug('\tBody: %s', request.body)
|
|
||||||
|
|
||||||
try:
|
|
||||||
response = request.execute_request()
|
|
||||||
except socket.timeout:
|
|
||||||
logger.exception(
|
|
||||||
'Timed out post request to %s in %d seconds for request body: %s',
|
|
||||||
request.url, request.timeout, request.body)
|
|
||||||
return EXIT_CODE_HTTP_TIMEOUT
|
|
||||||
except (HTTPException, socket.error):
|
|
||||||
logger.exception(
|
|
||||||
'Encountered generic exception in posting to %s with request body %s',
|
|
||||||
request.url, request.body)
|
|
||||||
return EXIT_CODE_GENERIC_HTTPLIB_ERROR
|
|
||||||
|
|
||||||
status = response.status
|
|
||||||
headers = response.getheaders()
|
|
||||||
logger.info('Received Network response -')
|
|
||||||
logger.info('\tStatus code: %d', status)
|
|
||||||
logger.debug('\tResponse headers: %s', headers)
|
|
||||||
|
|
||||||
if status < 200 or status > 299:
|
|
||||||
logger.error('Request (%s) failed with status code %d\n', request.url,
|
|
||||||
status)
|
|
||||||
|
|
||||||
# If we wanted this script to support get, we need to
|
|
||||||
# figure out what mechanism we intend for capturing the response
|
|
||||||
return status
|
|
||||||
|
|
||||||
|
|
||||||
@unwrap_kwarg_namespace
|
|
||||||
def post(url=None, header=None, body=None, timeout=5, verbose=False):
|
|
||||||
"""Sends a post request.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
url: The url of the request
|
|
||||||
header: A list of headers for the request
|
|
||||||
body: The body for the request
|
|
||||||
timeout: Timeout in seconds for the request
|
|
||||||
verbose: Should debug logs be displayed
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
Return an array with the key as the first element and value as the second
|
|
||||||
"""
|
|
||||||
|
|
||||||
if verbose:
|
|
||||||
handler.setLevel(logging.DEBUG)
|
|
||||||
logger.setLevel(logging.DEBUG)
|
|
||||||
|
|
||||||
try:
|
|
||||||
logger.info('Parsing headers: %s', header)
|
|
||||||
headers = parse_colon_delimited_options(header)
|
|
||||||
except ValueError:
|
|
||||||
logging.exception('Could not parse the parameters with "--header": %s',
|
|
||||||
header)
|
|
||||||
return EXIT_CODE_INVALID_REQUEST_VALUES
|
|
||||||
|
|
||||||
try:
|
|
||||||
request = NetworkRequest(url, POST, headers, body, float(timeout))
|
|
||||||
except ValueError:
|
|
||||||
logger.exception('Invalid request values passed into the script.')
|
|
||||||
return EXIT_CODE_INVALID_REQUEST_VALUES
|
|
||||||
|
|
||||||
status = make_request(request)
|
|
||||||
|
|
||||||
# View exit code after running to get the http status code: 'echo $?'
|
|
||||||
return status
|
|
||||||
|
|
||||||
|
|
||||||
def get_argsparser():
|
|
||||||
"""Returns the argument parser.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
Argument parser for the script.
|
|
||||||
"""
|
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(
|
|
||||||
description='The script takes in the arguments of a network request. '
|
|
||||||
'The network request is sent and the http status code will be'
|
|
||||||
'returned as the exit code.')
|
|
||||||
subparsers = parser.add_subparsers(help='Commands:')
|
|
||||||
post_parser = subparsers.add_parser(
|
|
||||||
post.__name__, help='{} help'.format(post.__name__))
|
|
||||||
post_parser.add_argument(
|
|
||||||
'--url',
|
|
||||||
help='Request url. Ex: https://www.google.com/somePath/',
|
|
||||||
required=True,
|
|
||||||
dest='url')
|
|
||||||
post_parser.add_argument(
|
|
||||||
'--header',
|
|
||||||
help='Request headers as a space delimited list of key '
|
|
||||||
'value pairs. Ex: "key1:value1 key2:value2"',
|
|
||||||
action='append',
|
|
||||||
required=False,
|
|
||||||
dest='header')
|
|
||||||
post_parser.add_argument(
|
|
||||||
'--body',
|
|
||||||
help='The body of the network request',
|
|
||||||
required=True,
|
|
||||||
dest='body')
|
|
||||||
post_parser.add_argument(
|
|
||||||
'--timeout',
|
|
||||||
help='The timeout in seconds',
|
|
||||||
default=10.0,
|
|
||||||
required=False,
|
|
||||||
dest='timeout')
|
|
||||||
post_parser.add_argument(
|
|
||||||
'--verbose',
|
|
||||||
help='Should verbose logging be outputted',
|
|
||||||
action='store_true',
|
|
||||||
default=False,
|
|
||||||
required=False,
|
|
||||||
dest='verbose')
|
|
||||||
post_parser.set_defaults(func=post)
|
|
||||||
return parser
|
|
||||||
|
|
||||||
|
|
||||||
def map_http_status_to_exit_code(status_code):
|
|
||||||
"""Map an http status code to the appropriate exit code.
|
|
||||||
|
|
||||||
Exit codes in python are valid from 0-256, so we want to map these to
|
|
||||||
predictable exit codes within range.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
status_code: the input status code that was output from the network call
|
|
||||||
function
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
One of our valid exit codes declared at the top of the file or a generic
|
|
||||||
unknown error code
|
|
||||||
"""
|
|
||||||
if status_code <= MAX_EXIT_CODE:
|
|
||||||
return status_code
|
|
||||||
|
|
||||||
if status_code > 199 and status_code < 300:
|
|
||||||
return EXIT_CODE_SUCCESS
|
|
||||||
|
|
||||||
if status_code == 302:
|
|
||||||
return EXIT_CODE_HTTP_REDIRECT_ERROR
|
|
||||||
|
|
||||||
if status_code == 404:
|
|
||||||
return EXIT_CODE_HTTP_NOT_FOUND_ERROR
|
|
||||||
|
|
||||||
if status_code > 499:
|
|
||||||
return EXIT_CODE_HTTP_SERVER_ERROR
|
|
||||||
|
|
||||||
return EXIT_CODE_HTTP_UNKNOWN_ERROR
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
"""Main function to run the program.
|
|
||||||
|
|
||||||
Parse system arguments and delegate to the appropriate function.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
A status code - either an http status code or a custom error code
|
|
||||||
"""
|
|
||||||
parser = get_argsparser()
|
|
||||||
subparser_action = parser.parse_args()
|
|
||||||
try:
|
|
||||||
return subparser_action.func(subparser_action)
|
|
||||||
except ValueError:
|
|
||||||
logger.exception('Invalid arguments passed.')
|
|
||||||
parser.print_help(sys.stderr)
|
|
||||||
return EXIT_CODE_INVALID_REQUEST_VALUES
|
|
||||||
return EXIT_CODE_GENERIC_HTTPLIB_ERROR
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
exit_code = map_http_status_to_exit_code(main())
|
|
||||||
sys.exit(exit_code)
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: e6e32fecbfd44fab946fa160e4861924
|
|
||||||
labels:
|
|
||||||
- gvh
|
|
||||||
- gvh_version-13.5.0
|
|
||||||
- gvhp_exportpath-Firebase/Editor/network_request.py
|
|
||||||
timeCreated: 1480838400
|
|
||||||
DefaultImporter:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 22ba32cc9f2150046acd0c2bba0f5c86
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||