├── ProjectSettings ├── ProjectVersion.txt ├── ClusterInputManager.asset ├── EditorBuildSettings.asset ├── NetworkManager.asset ├── TimeManager.asset ├── AudioManager.asset ├── EditorSettings.asset ├── TagManager.asset ├── DynamicsManager.asset ├── UnityConnectSettings.asset ├── NavMeshAreas.asset ├── Physics2DSettings.asset ├── GraphicsSettings.asset ├── QualitySettings.asset ├── InputManager.asset └── ProjectSettings.asset ├── Assets ├── Plugins │ ├── libOverride_iOS.a │ ├── DeepLink.cs.meta │ ├── DeepLink.cs │ └── libOverride_iOS.a.meta ├── Fonts │ ├── Source Sans Pro (Black).ttf │ ├── Source Sans Pro (Light).ttf │ ├── Source Sans Pro (Black).ttf.meta │ └── Source Sans Pro (Light).ttf.meta ├── Scene.unity.meta ├── Editor.meta ├── Fonts.meta ├── Plugins.meta ├── Editor │ ├── BuildPostProcessor.cs.meta │ └── BuildPostProcessor.cs └── Scene.unity ├── README.md ├── OSX └── Override_OSX │ ├── Override_OSX.xcodeproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ └── eppz.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ ├── xcuserdata │ │ └── eppz.xcuserdatad │ │ │ └── xcschemes │ │ │ ├── xcschememanagement.plist │ │ │ ├── Override_OSX.xcscheme │ │ │ └── Override_OSX_Sandbox.xcscheme │ └── project.pbxproj │ ├── Override_OSX_Sandbox │ ├── main.m │ ├── PlayerAppDelegate.h │ ├── PlayerAppDelegate.m │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ └── Info.plist │ └── Override_OSX │ ├── Info.plist │ ├── OverrideAppDelegate.h │ ├── DeepLink.h │ ├── DeepLink_C++.mm │ ├── UnityString_C++.mm │ ├── Override_OSX.h │ ├── OverrideAppDelegate.m │ ├── DeepLink.m │ ├── Override_OSX.m │ ├── EPPZSwizzler.h │ └── EPPZSwizzler.m ├── iOS └── Override_iOS │ ├── Override_iOS.xcodeproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ └── eppz.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ ├── xcuserdata │ │ └── eppz.xcuserdatad │ │ │ └── xcschemes │ │ │ ├── xcschememanagement.plist │ │ │ └── Override_iOS.xcscheme │ └── project.pbxproj │ └── Override_iOS │ ├── Override_iOS.h │ ├── DeepLink.h │ ├── DeepLink_C++.mm │ ├── UnityString_C++.mm │ ├── DeepLink.m │ ├── OverrideAppDelegate.h │ ├── Override_iOS.m │ ├── OverrideAppDelegate.m │ ├── EPPZSwizzler.h │ └── EPPZSwizzler.m ├── .gitignore └── .vscode └── settings.json /ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 5.5.0f3 2 | -------------------------------------------------------------------------------- /Assets/Plugins/libOverride_iOS.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Geri-Borbas/Unity.Blog.Override_App_Delegate/HEAD/Assets/Plugins/libOverride_iOS.a -------------------------------------------------------------------------------- /Assets/Fonts/Source Sans Pro (Black).ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Geri-Borbas/Unity.Blog.Override_App_Delegate/HEAD/Assets/Fonts/Source Sans Pro (Black).ttf -------------------------------------------------------------------------------- /Assets/Fonts/Source Sans Pro (Light).ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Geri-Borbas/Unity.Blog.Override_App_Delegate/HEAD/Assets/Fonts/Source Sans Pro (Light).ttf -------------------------------------------------------------------------------- /ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: [] 8 | -------------------------------------------------------------------------------- /ProjectSettings/NetworkManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!149 &1 4 | NetworkManager: 5 | m_ObjectHideFlags: 0 6 | m_DebugLevel: 0 7 | m_Sendrate: 15 8 | m_AssetToPrefab: {} 9 | -------------------------------------------------------------------------------- /Assets/Scene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4fe2f98d156ca4350a406cabe7a6211d 3 | timeCreated: 1494083627 4 | licenseType: Free 5 | DefaultImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7dc963aa0d490424ab072c2683066aaa 3 | folderAsset: yes 4 | timeCreated: 1494104982 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Fonts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 71d873eab432942269c3cdbf9fd1c4a9 3 | folderAsset: yes 4 | timeCreated: 1494083432 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 00075ab2458b2420b9ff0f15cc0dea12 3 | folderAsset: yes 4 | timeCreated: 1494086407 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Example project for **Override app delegate in Unity for iOS and OSX** tutorial series. Read (much) more on [**Override app delegate in Unity for iOS and OSX (1/4)** Plugin workflow](http://eppz.eu/blog/override-app-delegate-unity-ios-osx-1/). 2 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /iOS/Override_iOS/Override_iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.02 7 | Maximum Allowed Timestep: 0.33333334 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX.xcodeproj/project.xcworkspace/xcuserdata/eppz.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Geri-Borbas/Unity.Blog.Override_App_Delegate/HEAD/OSX/Override_OSX/Override_OSX.xcodeproj/project.xcworkspace/xcuserdata/eppz.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /iOS/Override_iOS/Override_iOS.xcodeproj/project.xcworkspace/xcuserdata/eppz.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Geri-Borbas/Unity.Blog.Override_App_Delegate/HEAD/iOS/Override_iOS/Override_iOS.xcodeproj/project.xcworkspace/xcuserdata/eppz.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Assets/Plugins/DeepLink.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cb73512c827624a5b8aa148dd5d9d973 3 | timeCreated: 1494106901 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Editor/BuildPostProcessor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 95478fae7b9f349a5ae64a64b516eda9 3 | timeCreated: 1494104998 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | m_Volume: 1 7 | Rolloff Scale: 1 8 | Doppler Factor: 1 9 | Default Speaker Mode: 2 10 | m_SampleRate: 0 11 | m_DSPBufferSize: 0 12 | m_VirtualVoiceCount: 512 13 | m_RealVoiceCount: 32 14 | m_SpatializerPlugin: 15 | m_DisableAudio: 0 16 | m_VirtualizeEffects: 1 17 | -------------------------------------------------------------------------------- /ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 3 7 | m_ExternalVersionControlSupport: Hidden Meta Files 8 | m_SerializationMode: 2 9 | m_DefaultBehaviorMode: 0 10 | m_SpritePackerMode: 2 11 | m_SpritePackerPaddingPower: 1 12 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd 13 | m_ProjectGenerationRootNamespace: 14 | m_UserGeneratedProjectSuffix: 15 | -------------------------------------------------------------------------------- /ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: [] 7 | layers: 8 | - Default 9 | - TransparentFX 10 | - Ignore Raycast 11 | - 12 | - Water 13 | - UI 14 | - 15 | - 16 | - 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | m_SortingLayers: 41 | - name: Default 42 | uniqueID: 0 43 | locked: 0 44 | -------------------------------------------------------------------------------- /iOS/Override_iOS/Override_iOS.xcodeproj/xcuserdata/eppz.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Override_iOS.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 552856311EBE63180043CD02 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Assets/Fonts/Source Sans Pro (Black).ttf.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 379e1cda5590e45b892c512af4992e73 3 | timeCreated: 1494083439 4 | licenseType: Free 5 | TrueTypeFontImporter: 6 | serializedVersion: 4 7 | fontSize: 16 8 | forceTextureCase: -2 9 | characterSpacing: 0 10 | characterPadding: 1 11 | includeFontData: 1 12 | fontName: Source Sans Pro 13 | fontNames: 14 | - Source Sans Pro (Black) 15 | fallbackFontReferences: 16 | - {fileID: 12800000, guid: eaf6ebecc70a24a08bcf6fdfd75e4af7, type: 3} 17 | customCharacters: 18 | fontRenderingMode: 0 19 | ascentCalculationMode: 1 20 | userData: 21 | assetBundleName: 22 | assetBundleVariant: 23 | -------------------------------------------------------------------------------- /Assets/Fonts/Source Sans Pro (Light).ttf.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: eaf6ebecc70a24a08bcf6fdfd75e4af7 3 | timeCreated: 1494083473 4 | licenseType: Free 5 | TrueTypeFontImporter: 6 | serializedVersion: 4 7 | fontSize: 16 8 | forceTextureCase: -2 9 | characterSpacing: 0 10 | characterPadding: 1 11 | includeFontData: 1 12 | fontName: Source Sans Pro 13 | fontNames: 14 | - Source Sans Pro (Light) 15 | fallbackFontReferences: 16 | - {fileID: 12800000, guid: 379e1cda5590e45b892c512af4992e73, type: 3} 17 | customCharacters: 18 | fontRenderingMode: 0 19 | ascentCalculationMode: 1 20 | userData: 21 | assetBundleName: 22 | assetBundleVariant: 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.gitignore.io 2 | 3 | # Unity 4 | Library/ 5 | Temp/ 6 | obj/ 7 | Build/ 8 | Builds/ 9 | 10 | /Library/ 11 | /Temp/ 12 | /obj/ 13 | /Build/ 14 | /Builds/ 15 | 16 | # Additions from http://answers.unity3d.com/questions/408802/help-with-using-git-for-version-control.html 17 | # Metadata can go as long as set Visible Meta Files http://docs.unity3d.com/Manual/ExternalVersionControlSystemSupport.html 18 | 19 | # Autogenerated VS/MD solution and project files 20 | *.csproj 21 | *.unityproj 22 | *.sln 23 | *.suo 24 | *.tmp 25 | *.user 26 | *.userprefs 27 | *.pidb 28 | *.booproj 29 | 30 | # Unity3D generated meta files 31 | *.pidb.meta 32 | 33 | # Unity3D Generated File On Crash Reports 34 | sysinfo.txt 35 | 36 | # OSX 37 | .DS_Store 38 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX_Sandbox/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2017 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import 15 | 16 | int main(int argc, const char * argv[]) { 17 | return NSApplicationMain(argc, argv); 18 | } 19 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX_Sandbox/PlayerAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2017 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import 15 | 16 | 17 | @interface PlayerAppDelegate : NSObject 18 | @end 19 | 20 | -------------------------------------------------------------------------------- /ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 3 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_SleepThreshold: 0.005 11 | m_DefaultContactOffset: 0.01 12 | m_DefaultSolverIterations: 6 13 | m_DefaultSolverVelocityIterations: 1 14 | m_QueriesHitBackfaces: 0 15 | m_QueriesHitTriggers: 1 16 | m_EnableAdaptiveForce: 0 17 | m_EnablePCM: 1 18 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 19 | -------------------------------------------------------------------------------- /ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | m_Enabled: 0 7 | m_TestMode: 0 8 | m_TestEventUrl: 9 | m_TestConfigUrl: 10 | CrashReportingSettings: 11 | m_EventUrl: https://perf-events.cloud.unity3d.com/api/events/crashes 12 | m_Enabled: 0 13 | m_CaptureEditorExceptions: 1 14 | UnityPurchasingSettings: 15 | m_Enabled: 0 16 | m_TestMode: 0 17 | UnityAnalyticsSettings: 18 | m_Enabled: 0 19 | m_InitializeOnStartup: 1 20 | m_TestMode: 0 21 | m_TestEventUrl: 22 | m_TestConfigUrl: 23 | UnityAdsSettings: 24 | m_Enabled: 0 25 | m_InitializeOnStartup: 1 26 | m_TestMode: 0 27 | m_EnabledPlatforms: 4294967295 28 | m_IosGameId: 29 | m_AndroidGameId: 30 | -------------------------------------------------------------------------------- /iOS/Override_iOS/Override_iOS/Override_iOS.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2017 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import 15 | #import 16 | #import "EPPZSwizzler.h" 17 | #import "OverrideAppDelegate.h" 18 | 19 | 20 | @interface Override_iOS : NSObject 21 | @end 22 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX.xcodeproj/xcuserdata/eppz.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Override_OSX.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | Override_OSX_Sandbox.xcscheme 13 | 14 | orderHint 15 | 1 16 | 17 | 18 | SuppressBuildableAutocreation 19 | 20 | 554696A21EC32084005DE88B 21 | 22 | primary 23 | 24 | 25 | 554696D21EC32723005DE88B 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX_Sandbox/PlayerAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2017 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import "PlayerAppDelegate.h" 15 | 16 | 17 | @interface PlayerAppDelegate () 18 | @end 19 | 20 | 21 | @implementation PlayerAppDelegate 22 | 23 | 24 | -(void)applicationDidFinishLaunching:(NSNotification*) notification 25 | { return; } 26 | 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /iOS/Override_iOS/Override_iOS/DeepLink.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2017 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import 15 | 16 | 17 | @interface DeepLink : NSObject 18 | 19 | 20 | @property (nonatomic, strong) NSString *URL; 21 | @property (nonatomic, strong) NSString *sourceAppliaction; 22 | @property (nonatomic, strong) id annotation; 23 | 24 | +(DeepLink*)instance; 25 | -(void)reset; 26 | 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSHumanReadableCopyright 24 | Copyright © 2017 eppz!. All rights reserved. 25 | NSPrincipalClass 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX/OverrideAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2016 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import 15 | #import 16 | #import "Override_OSX.h" 17 | #import "DeepLink.h" 18 | 19 | 20 | @interface OverrideAppDelegate : NSObject 21 | 22 | 23 | -(void)applicationDidFinishLaunching:(NSNotification*) notification; 24 | -(void)_original_saved_by_Override_applicationDidFinishLaunching:(NSNotification*) notification; 25 | 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX/DeepLink.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2017 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import 15 | 16 | 17 | @interface DeepLink : NSObject 18 | 19 | 20 | @property (nonatomic, strong) NSString *URL; 21 | @property (nonatomic, strong) NSString *sourceAppliaction; 22 | @property (nonatomic, strong) id annotation; 23 | 24 | +(DeepLink*)instance; 25 | -(void)reset; 26 | -(void)handleGetURLEvent:(NSAppleEventDescriptor*) event 27 | withReplyEvent:(NSAppleEventDescriptor*) replyEvent; 28 | 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX/DeepLink_C++.mm: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2017 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import "UnityString_C++.mm" 15 | #import "DeepLink.h" 16 | 17 | 18 | extern "C" 19 | { 20 | 21 | 22 | void DeepLink_Reset() 23 | { return [[DeepLink instance] reset]; } 24 | 25 | const char* DeepLink_GetURL() 26 | { return UnityStringFromNSString([[DeepLink instance] URL]); } 27 | 28 | const char* DeepLink_GetSourceApplication() 29 | { return UnityStringFromNSString([[DeepLink instance] sourceAppliaction]); } 30 | 31 | 32 | } 33 | 34 | -------------------------------------------------------------------------------- /iOS/Override_iOS/Override_iOS/DeepLink_C++.mm: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2017 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import "UnityString_C++.mm" 15 | #import "DeepLink.h" 16 | 17 | 18 | extern "C" 19 | { 20 | 21 | 22 | void DeepLink_Reset() 23 | { return [[DeepLink instance] reset]; } 24 | 25 | const char* DeepLink_GetURL() 26 | { return UnityStringFromNSString([[DeepLink instance] URL]); } 27 | 28 | const char* DeepLink_GetSourceApplication() 29 | { return UnityStringFromNSString([[DeepLink instance] sourceAppliaction]); } 30 | 31 | 32 | } 33 | 34 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX/UnityString_C++.mm: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2016 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import 15 | 16 | 17 | const char* UnityStringFromNSString(NSString* string) 18 | { 19 | const char* cString = string.UTF8String; 20 | char* _unityString = (char*)malloc(strlen(cString) + 1); 21 | strcpy(_unityString, cString); 22 | return _unityString; 23 | } 24 | 25 | NSString* NSStringFromUnityString(const char* unityString_) 26 | { 27 | if (unityString_ == nil) return [NSString new]; 28 | return [NSString stringWithUTF8String:unityString_]; 29 | } -------------------------------------------------------------------------------- /iOS/Override_iOS/Override_iOS/UnityString_C++.mm: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2016 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import 15 | 16 | 17 | const char* UnityStringFromNSString(NSString* string) 18 | { 19 | const char* cString = string.UTF8String; 20 | char* _unityString = (char*)malloc(strlen(cString) + 1); 21 | strcpy(_unityString, cString); 22 | return _unityString; 23 | } 24 | 25 | NSString* NSStringFromUnityString(const char* unityString_) 26 | { 27 | if (unityString_ == nil) return [NSString new]; 28 | return [NSString stringWithUTF8String:unityString_]; 29 | } -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX_Sandbox/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "mac", 5 | "size" : "16x16", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "mac", 10 | "size" : "16x16", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "mac", 15 | "size" : "32x32", 16 | "scale" : "1x" 17 | }, 18 | { 19 | "idiom" : "mac", 20 | "size" : "32x32", 21 | "scale" : "2x" 22 | }, 23 | { 24 | "idiom" : "mac", 25 | "size" : "128x128", 26 | "scale" : "1x" 27 | }, 28 | { 29 | "idiom" : "mac", 30 | "size" : "128x128", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "idiom" : "mac", 35 | "size" : "256x256", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "mac", 40 | "size" : "256x256", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "mac", 45 | "size" : "512x512", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "mac", 50 | "size" : "512x512", 51 | "scale" : "2x" 52 | } 53 | ], 54 | "info" : { 55 | "version" : 1, 56 | "author" : "xcode" 57 | } 58 | } -------------------------------------------------------------------------------- /ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | -------------------------------------------------------------------------------- /iOS/Override_iOS/Override_iOS/DeepLink.m: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2017 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import "DeepLink.h" 15 | 16 | 17 | __strong DeepLink *_instance; 18 | 19 | 20 | @implementation DeepLink 21 | 22 | 23 | +(void)load 24 | { 25 | NSLog(@"[DeepLink load]"); 26 | _instance = [DeepLink new]; 27 | } 28 | 29 | +(DeepLink*)instance 30 | { return _instance; } 31 | 32 | -(instancetype)init 33 | { 34 | self = [super init]; 35 | if (self) [self reset]; 36 | return self; 37 | } 38 | 39 | -(void)reset 40 | { 41 | self.URL = [NSString new]; 42 | self.sourceAppliaction = [NSString new]; 43 | self.annotation = [NSDictionary new]; 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX/Override_OSX.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2017 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import 15 | #import 16 | #import 17 | 18 | //! Project version number for Override_OSX. 19 | FOUNDATION_EXPORT double Override_OSXVersionNumber; 20 | 21 | //! Project version string for Override_OSX. 22 | FOUNDATION_EXPORT const unsigned char Override_OSXVersionString[]; 23 | 24 | // In this header, you should import all the public headers of your framework using statements like #import 25 | 26 | #import "EPPZSwizzler.h" 27 | #import "OverrideAppDelegate.h" 28 | 29 | 30 | @interface Override_OSX : NSObject 31 | @end 32 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX/OverrideAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2016 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import "OverrideAppDelegate.h" 15 | 16 | 17 | @implementation OverrideAppDelegate 18 | 19 | 20 | #pragma mark Override implementations 21 | 22 | -(void)applicationDidFinishLaunching:(NSNotification*) notification 23 | { 24 | NSLog(@"[OverrideAppDelegate applicationDidFinishLaunching:%@]", notification); 25 | return [self _original_saved_by_Override_applicationDidFinishLaunching:notification]; 26 | } 27 | 28 | 29 | #pragma mark Original implementation placeholders 30 | 31 | -(void)_original_saved_by_Override_applicationDidFinishLaunching:(NSNotification*) notification 32 | { return; } 33 | 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /Assets/Plugins/DeepLink.cs: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2016 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | using UnityEngine; 15 | using UnityEngine.UI; 16 | using System.Runtime.InteropServices; 17 | 18 | 19 | public class DeepLink : MonoBehaviour 20 | { 21 | 22 | 23 | public Text label; 24 | 25 | 26 | #if !UNITY_EDITOR && (UNITY_IOS || UNITY_STANDALONE_OSX) 27 | 28 | [DllImport("__Internal")] 29 | static extern void DeepLink_Reset(); 30 | 31 | [DllImport("__Internal")] 32 | static extern string DeepLink_GetURL(); 33 | 34 | [DllImport("__Internal")] 35 | static extern string DeepLink_GetSourceApplication(); 36 | 37 | 38 | void Update() 39 | { 40 | if (DeepLink_GetURL() == "") return; 41 | label.text = DeepLink_GetURL().Replace("override://", ""); 42 | DeepLink_Reset(); 43 | } 44 | 45 | #endif 46 | 47 | 48 | } 49 | -------------------------------------------------------------------------------- /ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Gravity: {x: 0, y: -9.81} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_VelocityIterations: 8 10 | m_PositionIterations: 3 11 | m_VelocityThreshold: 1 12 | m_MaxLinearCorrection: 0.2 13 | m_MaxAngularCorrection: 8 14 | m_MaxTranslationSpeed: 100 15 | m_MaxRotationSpeed: 360 16 | m_MinPenetrationForPenalty: 0.01 17 | m_BaumgarteScale: 0.2 18 | m_BaumgarteTimeOfImpactScale: 0.75 19 | m_TimeToSleep: 0.5 20 | m_LinearSleepTolerance: 0.01 21 | m_AngularSleepTolerance: 2 22 | m_QueriesHitTriggers: 1 23 | m_QueriesStartInColliders: 1 24 | m_ChangeStopsCallbacks: 0 25 | m_AlwaysShowColliders: 0 26 | m_ShowColliderSleep: 1 27 | m_ShowColliderContacts: 0 28 | m_ShowColliderAABB: 0 29 | m_ContactArrowScale: 0.2 30 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 31 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 32 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 33 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 34 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 35 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX_Sandbox/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleURLTypes 24 | 25 | 26 | CFBundleTypeRole 27 | Editor 28 | CFBundleURLSchemes 29 | 30 | overridesandbox 31 | 32 | 33 | 34 | CFBundleVersion 35 | 1 36 | LSMinimumSystemVersion 37 | $(MACOSX_DEPLOYMENT_TARGET) 38 | NSHumanReadableCopyright 39 | Copyright © 2017 eppz!. All rights reserved. 40 | NSMainStoryboardFile 41 | Main 42 | NSPrincipalClass 43 | NSApplication 44 | 45 | 46 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.exclude": 3 | { 4 | "**/.DS_Store":true, 5 | "**/.git":true, 6 | "**/.gitignore":true, 7 | "**/.gitmodules":true, 8 | "**/*.booproj":true, 9 | "**/*.pidb":true, 10 | "**/*.suo":true, 11 | "**/*.user":true, 12 | "**/*.userprefs":true, 13 | "**/*.unityproj":true, 14 | "**/*.dll":true, 15 | "**/*.exe":true, 16 | "**/*.pdf":true, 17 | "**/*.mid":true, 18 | "**/*.midi":true, 19 | "**/*.wav":true, 20 | "**/*.gif":true, 21 | "**/*.ico":true, 22 | "**/*.jpg":true, 23 | "**/*.jpeg":true, 24 | "**/*.png":true, 25 | "**/*.psd":true, 26 | "**/*.tga":true, 27 | "**/*.tif":true, 28 | "**/*.tiff":true, 29 | "**/*.3ds":true, 30 | "**/*.3DS":true, 31 | "**/*.fbx":true, 32 | "**/*.FBX":true, 33 | "**/*.lxo":true, 34 | "**/*.LXO":true, 35 | "**/*.ma":true, 36 | "**/*.MA":true, 37 | "**/*.obj":true, 38 | "**/*.OBJ":true, 39 | "**/*.asset":true, 40 | "**/*.cubemap":true, 41 | "**/*.flare":true, 42 | "**/*.mat":true, 43 | "**/*.meta":true, 44 | "**/*.prefab":true, 45 | "**/*.unity":true, 46 | "build/":true, 47 | "Build/":true, 48 | "Library/":true, 49 | "library/":true, 50 | "obj/":true, 51 | "Obj/":true, 52 | "ProjectSettings/":true, 53 | "temp/":true, 54 | "Temp/":true 55 | } 56 | } -------------------------------------------------------------------------------- /Assets/Plugins/libOverride_iOS.a.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5663d422986504565bc7072197d5eb6c 3 | timeCreated: 1494101504 4 | licenseType: Free 5 | PluginImporter: 6 | serializedVersion: 1 7 | iconMap: {} 8 | executionOrder: {} 9 | isPreloaded: 0 10 | isOverridable: 0 11 | platformData: 12 | Android: 13 | enabled: 0 14 | settings: 15 | CPU: ARMv7 16 | Any: 17 | enabled: 0 18 | settings: 19 | Exclude Android: 1 20 | Exclude Editor: 1 21 | Exclude Linux: 1 22 | Exclude Linux64: 1 23 | Exclude LinuxUniversal: 1 24 | Exclude OSXIntel: 1 25 | Exclude OSXIntel64: 1 26 | Exclude OSXUniversal: 1 27 | Exclude Win: 1 28 | Exclude Win64: 1 29 | Exclude iOS: 0 30 | Editor: 31 | enabled: 0 32 | settings: 33 | CPU: AnyCPU 34 | DefaultValueInitialized: true 35 | OS: AnyOS 36 | Linux: 37 | enabled: 0 38 | settings: 39 | CPU: x86 40 | Linux64: 41 | enabled: 0 42 | settings: 43 | CPU: x86_64 44 | LinuxUniversal: 45 | enabled: 0 46 | settings: 47 | CPU: None 48 | OSXIntel: 49 | enabled: 0 50 | settings: 51 | CPU: AnyCPU 52 | OSXIntel64: 53 | enabled: 0 54 | settings: 55 | CPU: AnyCPU 56 | OSXUniversal: 57 | enabled: 0 58 | settings: 59 | CPU: None 60 | Win: 61 | enabled: 0 62 | settings: 63 | CPU: AnyCPU 64 | Win64: 65 | enabled: 0 66 | settings: 67 | CPU: AnyCPU 68 | iOS: 69 | enabled: 1 70 | settings: 71 | CompileFlags: 72 | FrameworkDependencies: 73 | userData: 74 | assetBundleName: 75 | assetBundleVariant: 76 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX/DeepLink.m: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2017 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import "DeepLink.h" 15 | 16 | 17 | __strong DeepLink *_instance; 18 | 19 | 20 | @implementation DeepLink 21 | 22 | 23 | +(void)load 24 | { 25 | NSLog(@"[DeepLink load]"); 26 | _instance = [DeepLink new]; 27 | [[NSAppleEventManager sharedAppleEventManager] setEventHandler:_instance 28 | andSelector:@selector(handleGetURLEvent:withReplyEvent:) 29 | forEventClass:kInternetEventClass 30 | andEventID:kAEGetURL]; 31 | } 32 | 33 | +(DeepLink*)instance 34 | { return _instance; } 35 | 36 | -(instancetype)init 37 | { 38 | self = [super init]; 39 | if (self) [self reset]; 40 | return self; 41 | } 42 | 43 | -(void)reset 44 | { 45 | self.URL = [NSString new]; 46 | self.sourceAppliaction = [NSString new]; 47 | self.annotation = [NSDictionary new]; 48 | } 49 | 50 | -(void)handleGetURLEvent:(NSAppleEventDescriptor*) event withReplyEvent:(NSAppleEventDescriptor*) replyEvent 51 | { 52 | NSLog(@"[DeepLink handleGetURLEvent:%@ withReplyEvent:%@]", event, replyEvent); 53 | self.URL = [event paramDescriptorForKeyword:keyDirectObject].stringValue; 54 | NSLog(@"[[DeepLink URL] %@]", self.URL); 55 | } 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /iOS/Override_iOS/Override_iOS/OverrideAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2016 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import 15 | #import 16 | #import "Override_iOS.h" 17 | #import "DeepLink.h" 18 | 19 | 20 | @interface OverrideAppDelegate : NSObject 21 | 22 | 23 | -(BOOL)application:(UIApplication*) application didFinishLaunchingWithOptions:(NSDictionary*) launchOptions; 24 | -(BOOL)application:(UIApplication*) application 25 | openURL:(NSURL*) url 26 | options:(NSDictionary*) options; 27 | -(BOOL)application:(UIApplication*) application 28 | openURL:(NSURL*) url 29 | sourceApplication:(NSString*) sourceApplication 30 | annotation:(id) annotation; 31 | 32 | -(BOOL)_original_saved_by_Override_application:(UIApplication*) application 33 | didFinishLaunchingWithOptions:(NSDictionary*) launchOptions; 34 | -(BOOL)_original_saved_by_Override_application:(UIApplication*) application 35 | openURL:(NSURL*) url 36 | options:(NSDictionary*) options; 37 | -(BOOL)_original_saved_by_Override_application:(UIApplication*) application 38 | openURL:(NSURL*) url 39 | sourceApplication:(NSString*) sourceApplication 40 | annotation:(id) annotation; 41 | 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX/Override_OSX.m: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2017 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import "Override_OSX.h" 15 | 16 | 17 | @implementation Override_OSX 18 | 19 | 20 | +(void)load 21 | { 22 | NSLog(@"[Override_OSX load]"); 23 | [self swizzle]; 24 | } 25 | 26 | +(void)swizzle 27 | { 28 | NSLog(@"[Override_OSX swizzle]"); 29 | [self replaceAppDelegateMethod:@selector(applicationDidFinishLaunching:) 30 | fromClass:OverrideAppDelegate.class 31 | savingOriginalTo:@selector(_original_saved_by_Override_applicationDidFinishLaunching:)]; 32 | 33 | } 34 | 35 | +(void)replaceAppDelegateMethod:(SEL) unitySelector 36 | fromClass:(Class) overrideAppDelegate 37 | savingOriginalTo:(SEL) savingOriginalSelector 38 | { 39 | // The Unity base app controller class (the class name stored in `AppControllerClassName`). 40 | Class unityAppDelegate = NSClassFromString(@"PlayerAppDelegate"); 41 | 42 | // See log messages for the sake of this tutorial. 43 | [EPPZSwizzler setLogging:YES]; 44 | 45 | // Add empty placholder to Unity app delegate. 46 | [EPPZSwizzler addInstanceMethod:savingOriginalSelector 47 | toClass:unityAppDelegate 48 | fromClass:overrideAppDelegate]; 49 | 50 | // Save the original Unity app delegate implementation into. 51 | [EPPZSwizzler swapInstanceMethod:savingOriginalSelector 52 | withInstanceMethod:unitySelector 53 | ofClass:unityAppDelegate]; 54 | 55 | // Replace Unity app delegate with ours. 56 | [EPPZSwizzler replaceInstanceMethod:unitySelector 57 | ofClass:unityAppDelegate 58 | fromClass:overrideAppDelegate]; 59 | } 60 | 61 | 62 | @end 63 | -------------------------------------------------------------------------------- /ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 9 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_AlwaysIncludedShaders: 32 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 33 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} 34 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} 35 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} 36 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} 37 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 38 | - {fileID: 10782, guid: 0000000000000000f000000000000000, type: 0} 39 | m_PreloadedShaders: [] 40 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 41 | type: 0} 42 | m_TierSettings_Tier1: 43 | renderingPath: 1 44 | useCascadedShadowMaps: 1 45 | m_TierSettings_Tier2: 46 | renderingPath: 1 47 | useCascadedShadowMaps: 1 48 | m_TierSettings_Tier3: 49 | renderingPath: 1 50 | useCascadedShadowMaps: 1 51 | m_DefaultRenderingPath: 1 52 | m_DefaultMobileRenderingPath: 1 53 | m_TierSettings: [] 54 | m_LightmapStripping: 0 55 | m_FogStripping: 0 56 | m_LightmapKeepPlain: 1 57 | m_LightmapKeepDirCombined: 1 58 | m_LightmapKeepDirSeparate: 1 59 | m_LightmapKeepDynamicPlain: 1 60 | m_LightmapKeepDynamicDirCombined: 1 61 | m_LightmapKeepDynamicDirSeparate: 1 62 | m_FogKeepLinear: 1 63 | m_FogKeepExp: 1 64 | m_FogKeepExp2: 1 65 | -------------------------------------------------------------------------------- /Assets/Editor/BuildPostProcessor.cs: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2017 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | using System.IO; 15 | using UnityEngine; 16 | using UnityEditor; 17 | using UnityEditor.Callbacks; 18 | using UnityEditor.iOS.Xcode; 19 | 20 | 21 | public class BuildPostProcessor 22 | { 23 | 24 | 25 | [PostProcessBuildAttribute(1)] 26 | public static void OnPostProcessBuild(BuildTarget target, string path) 27 | { 28 | if (target == BuildTarget.iOS) 29 | { 30 | // Read. 31 | string projectPath = PBXProject.GetPBXProjectPath(path); 32 | PBXProject project = new PBXProject(); 33 | project.ReadFromString(File.ReadAllText(projectPath)); 34 | string targetName = PBXProject.GetUnityTargetName(); 35 | string projectTarget = project.TargetGuidByName(targetName); 36 | 37 | AddFrameworks(project, projectTarget); 38 | 39 | // Write. 40 | File.WriteAllText(projectPath, project.WriteToString()); 41 | } 42 | 43 | if (target == BuildTarget.StandaloneOSXIntel || 44 | target == BuildTarget.StandaloneOSXIntel64 || 45 | target == BuildTarget.StandaloneOSXUniversal) 46 | { 47 | // Read. 48 | string plistDocumentPath = path + "/Contents/Info.plist"; 49 | PlistDocument plistDocument = new PlistDocument(); 50 | plistDocument.ReadFromString(File.ReadAllText(plistDocumentPath)); 51 | PlistElementDict rootElement = plistDocument.root; 52 | 53 | // Add scheme. 54 | PlistElementDict urlSchemeArrayElement = rootElement.CreateArray("CFBundleURLTypes").AddDict(); 55 | urlSchemeArrayElement.SetString("CFBundleURLName", ""); 56 | urlSchemeArrayElement.CreateArray("CFBundleURLSchemes").AddString("override"); 57 | 58 | // Write. 59 | File.WriteAllText(plistDocumentPath, plistDocument.WriteToString()); 60 | } 61 | } 62 | 63 | static void AddFrameworks(PBXProject project, string target) 64 | { 65 | // Add `-ObjC` to "Other Linker Flags". 66 | project.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC"); 67 | } 68 | } -------------------------------------------------------------------------------- /iOS/Override_iOS/Override_iOS/Override_iOS.m: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2017 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import "Override_iOS.h" 15 | 16 | 17 | @implementation Override_iOS 18 | 19 | 20 | +(void)load 21 | { 22 | NSLog(@"[Override_iOS load]"); 23 | [self swizzle]; 24 | } 25 | 26 | +(void)swizzle 27 | { 28 | NSLog(@"[Override_iOS swizzle]"); 29 | [self replaceAppDelegateMethod:@selector(application:didFinishLaunchingWithOptions:) 30 | fromClass:OverrideAppDelegate.class 31 | savingOriginalTo:@selector(_original_saved_by_Override_application:didFinishLaunchingWithOptions:)]; 32 | 33 | [self replaceAppDelegateMethod:@selector(application:openURL:options:) 34 | fromClass:OverrideAppDelegate.class 35 | savingOriginalTo:@selector(_original_saved_by_Override_application:openURL:options:)]; 36 | 37 | [self replaceAppDelegateMethod:@selector(application:openURL:sourceApplication:annotation:) 38 | fromClass:OverrideAppDelegate.class 39 | savingOriginalTo:@selector(_original_saved_by_Override_application:openURL:sourceApplication:annotation:)]; 40 | } 41 | 42 | +(void)replaceAppDelegateMethod:(SEL) unitySelector 43 | fromClass:(Class) overrideAppDelegate 44 | savingOriginalTo:(SEL) savingOriginalSelector 45 | { 46 | // The Unity base app controller class (the class name stored in `AppControllerClassName`). 47 | Class unityAppDelegate = NSClassFromString(@"UnityAppController"); 48 | 49 | // See log messages for the sake of this tutorial. 50 | [EPPZSwizzler setLogging:YES]; 51 | 52 | // Add empty placholder to Unity app delegate. 53 | [EPPZSwizzler addInstanceMethod:savingOriginalSelector 54 | toClass:unityAppDelegate 55 | fromClass:overrideAppDelegate]; 56 | 57 | // Save the original Unity app delegate implementation into. 58 | [EPPZSwizzler swapInstanceMethod:savingOriginalSelector 59 | withInstanceMethod:unitySelector 60 | ofClass:unityAppDelegate]; 61 | 62 | // Replace Unity app delegate with ours. 63 | [EPPZSwizzler replaceInstanceMethod:unitySelector 64 | ofClass:unityAppDelegate 65 | fromClass:overrideAppDelegate]; 66 | } 67 | 68 | 69 | @end 70 | -------------------------------------------------------------------------------- /iOS/Override_iOS/Override_iOS.xcodeproj/xcuserdata/eppz.xcuserdatad/xcschemes/Override_iOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 70 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX.xcodeproj/xcuserdata/eppz.xcuserdatad/xcschemes/Override_OSX.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 70 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /iOS/Override_iOS/Override_iOS/OverrideAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2016 eppz! mobile, Gergely Borbás (SP) 3 | // 4 | // http://www.twitter.com/_eppz 5 | // 6 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 7 | // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 8 | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 9 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 10 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 11 | // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | // 13 | 14 | #import "OverrideAppDelegate.h" 15 | 16 | 17 | @implementation OverrideAppDelegate 18 | 19 | 20 | #pragma mark Override implementations 21 | 22 | -(BOOL)application:(UIApplication*) application didFinishLaunchingWithOptions:(NSDictionary*) launchOptions 23 | { 24 | NSLog(@"[OverrideAppDelegate application:%@ didFinishLaunchingWithOptions:%@]", application, launchOptions); 25 | return [self _original_saved_by_Override_application:application 26 | didFinishLaunchingWithOptions:launchOptions]; 27 | } 28 | 29 | -(BOOL)application:(UIApplication*) application 30 | openURL:(NSURL*) url 31 | options:(NSDictionary*) options 32 | { 33 | NSLog(@"[OverrideAppDelegate application:%@ openURL:%@ options:%@]", application, url, options); 34 | [DeepLink instance].URL = url.absoluteString; 35 | [DeepLink instance].sourceAppliaction = options[UIApplicationOpenURLOptionsSourceApplicationKey]; 36 | [DeepLink instance].annotation = options[UIApplicationOpenURLOptionsAnnotationKey]; 37 | return [self _original_saved_by_Override_application:application 38 | openURL:url 39 | options:options]; 40 | } 41 | 42 | -(BOOL)application:(UIApplication*) application 43 | openURL:(NSURL*) url 44 | sourceApplication:(NSString*) sourceApplication 45 | annotation:(id) annotation 46 | { 47 | NSLog(@"[OverrideAppDelegate application:%@ openURL:%@ sourceApplication:%@ annotation:%@]", application, url, sourceApplication, annotation); 48 | [DeepLink instance].URL = url.absoluteString; 49 | [DeepLink instance].sourceAppliaction = sourceApplication; 50 | [DeepLink instance].annotation = annotation; 51 | return [self _original_saved_by_Override_application:application 52 | openURL:url 53 | sourceApplication:sourceApplication 54 | annotation:(annotation) ? annotation : [NSDictionary new]]; 55 | } 56 | 57 | 58 | #pragma mark Original implementation placeholders 59 | 60 | -(BOOL)_original_saved_by_Override_application:(UIApplication*) application 61 | didFinishLaunchingWithOptions:(NSDictionary*) launchOptions 62 | { return YES; } 63 | 64 | 65 | -(BOOL)_original_saved_by_Override_application:(UIApplication*) application 66 | openURL:(NSURL*) url 67 | options:(NSDictionary*) options 68 | { return YES; } 69 | 70 | 71 | -(BOOL)_original_saved_by_Override_application:(UIApplication*) application 72 | openURL:(NSURL*) url 73 | sourceApplication:(NSString*) sourceApplication 74 | annotation:(id) annotation 75 | { return YES; } 76 | 77 | 78 | @end 79 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX.xcodeproj/xcuserdata/eppz.xcuserdatad/xcschemes/Override_OSX_Sandbox.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 5 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Fastest 11 | pixelLightCount: 0 12 | shadows: 0 13 | shadowResolution: 0 14 | shadowProjection: 1 15 | shadowCascades: 1 16 | shadowDistance: 15 17 | shadowNearPlaneOffset: 3 18 | shadowCascade2Split: 0.33333334 19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 20 | blendWeights: 1 21 | textureQuality: 1 22 | anisotropicTextures: 0 23 | antiAliasing: 0 24 | softParticles: 0 25 | softVegetation: 0 26 | realtimeReflectionProbes: 0 27 | billboardsFaceCameraPosition: 0 28 | vSyncCount: 0 29 | lodBias: 0.3 30 | maximumLODLevel: 0 31 | particleRaycastBudget: 4 32 | asyncUploadTimeSlice: 2 33 | asyncUploadBufferSize: 4 34 | excludedTargetPlatforms: [] 35 | - serializedVersion: 2 36 | name: Fast 37 | pixelLightCount: 0 38 | shadows: 0 39 | shadowResolution: 0 40 | shadowProjection: 1 41 | shadowCascades: 1 42 | shadowDistance: 20 43 | shadowNearPlaneOffset: 3 44 | shadowCascade2Split: 0.33333334 45 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 46 | blendWeights: 2 47 | textureQuality: 0 48 | anisotropicTextures: 0 49 | antiAliasing: 0 50 | softParticles: 0 51 | softVegetation: 0 52 | realtimeReflectionProbes: 0 53 | billboardsFaceCameraPosition: 0 54 | vSyncCount: 0 55 | lodBias: 0.4 56 | maximumLODLevel: 0 57 | particleRaycastBudget: 16 58 | asyncUploadTimeSlice: 2 59 | asyncUploadBufferSize: 4 60 | excludedTargetPlatforms: [] 61 | - serializedVersion: 2 62 | name: Simple 63 | pixelLightCount: 1 64 | shadows: 1 65 | shadowResolution: 0 66 | shadowProjection: 1 67 | shadowCascades: 1 68 | shadowDistance: 20 69 | shadowNearPlaneOffset: 3 70 | shadowCascade2Split: 0.33333334 71 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 72 | blendWeights: 2 73 | textureQuality: 0 74 | anisotropicTextures: 1 75 | antiAliasing: 0 76 | softParticles: 0 77 | softVegetation: 0 78 | realtimeReflectionProbes: 0 79 | billboardsFaceCameraPosition: 0 80 | vSyncCount: 1 81 | lodBias: 0.7 82 | maximumLODLevel: 0 83 | particleRaycastBudget: 64 84 | asyncUploadTimeSlice: 2 85 | asyncUploadBufferSize: 4 86 | excludedTargetPlatforms: [] 87 | - serializedVersion: 2 88 | name: Good 89 | pixelLightCount: 2 90 | shadows: 2 91 | shadowResolution: 1 92 | shadowProjection: 1 93 | shadowCascades: 2 94 | shadowDistance: 40 95 | shadowNearPlaneOffset: 3 96 | shadowCascade2Split: 0.33333334 97 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 98 | blendWeights: 2 99 | textureQuality: 0 100 | anisotropicTextures: 1 101 | antiAliasing: 0 102 | softParticles: 0 103 | softVegetation: 1 104 | realtimeReflectionProbes: 1 105 | billboardsFaceCameraPosition: 1 106 | vSyncCount: 1 107 | lodBias: 1 108 | maximumLODLevel: 0 109 | particleRaycastBudget: 256 110 | asyncUploadTimeSlice: 2 111 | asyncUploadBufferSize: 4 112 | excludedTargetPlatforms: [] 113 | - serializedVersion: 2 114 | name: Beautiful 115 | pixelLightCount: 3 116 | shadows: 2 117 | shadowResolution: 2 118 | shadowProjection: 1 119 | shadowCascades: 2 120 | shadowDistance: 70 121 | shadowNearPlaneOffset: 3 122 | shadowCascade2Split: 0.33333334 123 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 124 | blendWeights: 4 125 | textureQuality: 0 126 | anisotropicTextures: 2 127 | antiAliasing: 2 128 | softParticles: 1 129 | softVegetation: 1 130 | realtimeReflectionProbes: 1 131 | billboardsFaceCameraPosition: 1 132 | vSyncCount: 1 133 | lodBias: 1.5 134 | maximumLODLevel: 0 135 | particleRaycastBudget: 1024 136 | asyncUploadTimeSlice: 2 137 | asyncUploadBufferSize: 4 138 | excludedTargetPlatforms: [] 139 | - serializedVersion: 2 140 | name: Fantastic 141 | pixelLightCount: 4 142 | shadows: 2 143 | shadowResolution: 2 144 | shadowProjection: 1 145 | shadowCascades: 4 146 | shadowDistance: 150 147 | shadowNearPlaneOffset: 3 148 | shadowCascade2Split: 0.33333334 149 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 150 | blendWeights: 4 151 | textureQuality: 0 152 | anisotropicTextures: 2 153 | antiAliasing: 2 154 | softParticles: 1 155 | softVegetation: 1 156 | realtimeReflectionProbes: 1 157 | billboardsFaceCameraPosition: 1 158 | vSyncCount: 1 159 | lodBias: 2 160 | maximumLODLevel: 0 161 | particleRaycastBudget: 4096 162 | asyncUploadTimeSlice: 2 163 | asyncUploadBufferSize: 4 164 | excludedTargetPlatforms: [] 165 | m_PerPlatformDefaultQuality: 166 | Android: 2 167 | Nintendo 3DS: 5 168 | PS4: 5 169 | PSM: 5 170 | PSP2: 2 171 | Samsung TV: 2 172 | Standalone: 5 173 | Tizen: 2 174 | Web: 5 175 | WebGL: 3 176 | WiiU: 5 177 | Windows Store Apps: 5 178 | XboxOne: 5 179 | iPhone: 2 180 | tvOS: 5 181 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX/EPPZSwizzler.h: -------------------------------------------------------------------------------- 1 | // 2 | // EPPZSwizzler.h 3 | // eppz!swizzler 4 | // 5 | // Created by Borbás Geri on 27/02/14 6 | // Copyright (c) 2013 eppz! development, LLC. 7 | // 8 | // follow http://www.twitter.com/_eppz 9 | // 10 | // 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: 11 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 12 | // 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. 13 | // 14 | 15 | #import 16 | #import 17 | 18 | 19 | typedef enum 20 | { 21 | assign = OBJC_ASSOCIATION_ASSIGN, 22 | nonatomic_retain = OBJC_ASSOCIATION_RETAIN_NONATOMIC, 23 | nonatomic_copy = OBJC_ASSOCIATION_COPY_NONATOMIC, 24 | retain = OBJC_ASSOCIATION_RETAIN, 25 | copy = OBJC_ASSOCIATION_COPY 26 | } EPPZSwizzlerProperryAssociationPolicy; 27 | 28 | 29 | @interface EPPZSwizzler : NSObject 30 | 31 | 32 | #pragma mark - Logging 33 | 34 | 35 | /*! Toggle swizzling logs. */ 36 | +(void)setLogging:(BOOL) isOn; 37 | 38 | /*! Used for unit testing. */ 39 | +(NSString*)latestErrorMessage; 40 | 41 | 42 | #pragma mark - Method swizzlers 43 | 44 | 45 | /*! 46 | 47 | Swaps instance method implementations. 48 | 49 | @param oneSelector A selector to swap its implementation. 50 | @param otherSelector Another selector to swap implementation with. 51 | @param class The class to operate on. 52 | 53 | */ 54 | +(void)swapInstanceMethod:(SEL) oneSelector 55 | withInstanceMethod:(SEL) otherSelector 56 | ofClass:(Class) _class; 57 | 58 | 59 | /*! 60 | 61 | Swaps class method implementations. 62 | 63 | @param oneSelector A selector to swap its implementation. 64 | @param otherSelector Another selector to swap implementation with. 65 | @param class The class to operate on. 66 | 67 | */ 68 | +(void)swapClassMethod:(SEL) oneSelector 69 | withClassMethod:(SEL) otherSelector 70 | ofClass:(Class) _class; 71 | 72 | 73 | /*! 74 | 75 | Replace class method implementation with implementation 76 | picked from another class (for the same method). Does nothing 77 | if the method is not implemented already on the target class. 78 | 79 | @param selector Selector to replace in target class, and to look for in source class. 80 | @param targetClass Class to operate on. 81 | @param sourceClass Class the implementation is picked from. 82 | 83 | */ 84 | +(void)replaceClassMethod:(SEL) selector 85 | ofClass:(Class) targetClass 86 | fromClass:(Class) sourceClass; 87 | 88 | 89 | /*! 90 | 91 | Replace instance method implementation with implementation 92 | picked from another class (for the same method). Does nothing 93 | if the method is not implemented already on the target class. 94 | 95 | @param selector Selector to replace in target class, and to look for in source class. 96 | @param targetClass Class to operate on. 97 | @param sourceClass Class the implementation is picked from. 98 | 99 | */ 100 | +(void)replaceInstanceMethod:(SEL) selector 101 | ofClass:(Class) targetClass 102 | fromClass:(Class) sourceClass; 103 | 104 | 105 | /*! 106 | 107 | Add class method implementation with implementation 108 | picked from another class (for the same method). Does 109 | nothing if the method already exist on the target class. 110 | 111 | @param selector Selector to replace in target class, and to look for in source class. 112 | @param targetClass Class to operate on. 113 | @param sourceClass Class the implementation is picked from. 114 | 115 | */ 116 | +(void)addClassMethod:(SEL) selector 117 | toClass:(Class) targetClass 118 | fromClass:(Class) sourceClass; 119 | 120 | 121 | /*! 122 | 123 | Add instance method implementation with implementation 124 | picked from another class (for the same method). Does 125 | nothing if the method already exist on the target class. 126 | 127 | @param selector Selector to replace in target class, and to look for in source class. 128 | @param targetClass Class to operate on. 129 | @param sourceClass Class the implementation is picked from. 130 | 131 | */ 132 | +(void)addInstanceMethod:(SEL) selector 133 | toClass:(Class) targetClass 134 | fromClass:(Class) sourceClass; 135 | 136 | 137 | #pragma mark - Property swizzlers 138 | 139 | 140 | /*! 141 | 142 | Add property picked from another class (for the same method). 143 | Does nothing if the method already exist on the target class. 144 | 145 | @param propertyName Name of the property to look for in source class. 146 | @param targetClass Class to operate on. 147 | @param sourceClass Class the property is picked from. 148 | 149 | */ 150 | +(void)addPropertyNamed:(NSString*) propertyName 151 | toClass:(Class) targetClass 152 | fromClass:(Class) sourceClass; 153 | 154 | 155 | /*! 156 | 157 | Creates (synthesizes) a property for the given class with the 158 | given properties. 159 | 160 | As it uses associated object API under the hood, you can only 161 | synthesize object properties (for now). 162 | 163 | To preserve IDE consistency, you may define 164 | the property in the class interface, or in a category for class, 165 | then mark property as \@dynamic in the implementation (like 166 | Core Data NSManagedObject properties). 167 | 168 | @param propertyName Name for the property to be created. 169 | @param kind Class to represent the kind of the property to be created. 170 | @param targetClass Class to operate on. 171 | 172 | */ 173 | +(void)synthesizePropertyNamed:(NSString*) propertyName 174 | ofKind:(Class) kind 175 | forClass:(Class) targetClass 176 | withPolicy:(EPPZSwizzlerProperryAssociationPolicy) policy; 177 | 178 | 179 | @end 180 | -------------------------------------------------------------------------------- /iOS/Override_iOS/Override_iOS/EPPZSwizzler.h: -------------------------------------------------------------------------------- 1 | // 2 | // EPPZSwizzler.h 3 | // eppz!swizzler 4 | // 5 | // Created by Borbás Geri on 27/02/14 6 | // Copyright (c) 2013 eppz! development, LLC. 7 | // 8 | // follow http://www.twitter.com/_eppz 9 | // 10 | // 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: 11 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 12 | // 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. 13 | // 14 | 15 | #import 16 | #import 17 | 18 | 19 | typedef enum 20 | { 21 | assign = OBJC_ASSOCIATION_ASSIGN, 22 | nonatomic_retain = OBJC_ASSOCIATION_RETAIN_NONATOMIC, 23 | nonatomic_copy = OBJC_ASSOCIATION_COPY_NONATOMIC, 24 | retain = OBJC_ASSOCIATION_RETAIN, 25 | copy = OBJC_ASSOCIATION_COPY 26 | } EPPZSwizzlerProperryAssociationPolicy; 27 | 28 | 29 | @interface EPPZSwizzler : NSObject 30 | 31 | 32 | #pragma mark - Logging 33 | 34 | 35 | /*! Toggle swizzling logs. */ 36 | +(void)setLogging:(BOOL) isOn; 37 | 38 | /*! Used for unit testing. */ 39 | +(NSString*)latestErrorMessage; 40 | 41 | 42 | #pragma mark - Method swizzlers 43 | 44 | 45 | /*! 46 | 47 | Swaps instance method implementations. 48 | 49 | @param oneSelector A selector to swap its implementation. 50 | @param otherSelector Another selector to swap implementation with. 51 | @param class The class to operate on. 52 | 53 | */ 54 | +(void)swapInstanceMethod:(SEL) oneSelector 55 | withInstanceMethod:(SEL) otherSelector 56 | ofClass:(Class) _class; 57 | 58 | 59 | /*! 60 | 61 | Swaps class method implementations. 62 | 63 | @param oneSelector A selector to swap its implementation. 64 | @param otherSelector Another selector to swap implementation with. 65 | @param class The class to operate on. 66 | 67 | */ 68 | +(void)swapClassMethod:(SEL) oneSelector 69 | withClassMethod:(SEL) otherSelector 70 | ofClass:(Class) _class; 71 | 72 | 73 | /*! 74 | 75 | Replace class method implementation with implementation 76 | picked from another class (for the same method). Does nothing 77 | if the method is not implemented already on the target class. 78 | 79 | @param selector Selector to replace in target class, and to look for in source class. 80 | @param targetClass Class to operate on. 81 | @param sourceClass Class the implementation is picked from. 82 | 83 | */ 84 | +(void)replaceClassMethod:(SEL) selector 85 | ofClass:(Class) targetClass 86 | fromClass:(Class) sourceClass; 87 | 88 | 89 | /*! 90 | 91 | Replace instance method implementation with implementation 92 | picked from another class (for the same method). Does nothing 93 | if the method is not implemented already on the target class. 94 | 95 | @param selector Selector to replace in target class, and to look for in source class. 96 | @param targetClass Class to operate on. 97 | @param sourceClass Class the implementation is picked from. 98 | 99 | */ 100 | +(void)replaceInstanceMethod:(SEL) selector 101 | ofClass:(Class) targetClass 102 | fromClass:(Class) sourceClass; 103 | 104 | 105 | /*! 106 | 107 | Add class method implementation with implementation 108 | picked from another class (for the same method). Does 109 | nothing if the method already exist on the target class. 110 | 111 | @param selector Selector to replace in target class, and to look for in source class. 112 | @param targetClass Class to operate on. 113 | @param sourceClass Class the implementation is picked from. 114 | 115 | */ 116 | +(void)addClassMethod:(SEL) selector 117 | toClass:(Class) targetClass 118 | fromClass:(Class) sourceClass; 119 | 120 | 121 | /*! 122 | 123 | Add instance method implementation with implementation 124 | picked from another class (for the same method). Does 125 | nothing if the method already exist on the target class. 126 | 127 | @param selector Selector to replace in target class, and to look for in source class. 128 | @param targetClass Class to operate on. 129 | @param sourceClass Class the implementation is picked from. 130 | 131 | */ 132 | +(void)addInstanceMethod:(SEL) selector 133 | toClass:(Class) targetClass 134 | fromClass:(Class) sourceClass; 135 | 136 | 137 | #pragma mark - Property swizzlers 138 | 139 | 140 | /*! 141 | 142 | Add property picked from another class (for the same method). 143 | Does nothing if the method already exist on the target class. 144 | 145 | @param propertyName Name of the property to look for in source class. 146 | @param targetClass Class to operate on. 147 | @param sourceClass Class the property is picked from. 148 | 149 | */ 150 | +(void)addPropertyNamed:(NSString*) propertyName 151 | toClass:(Class) targetClass 152 | fromClass:(Class) sourceClass; 153 | 154 | 155 | /*! 156 | 157 | Creates (synthesizes) a property for the given class with the 158 | given properties. 159 | 160 | As it uses associated object API under the hood, you can only 161 | synthesize object properties (for now). 162 | 163 | To preserve IDE consistency, you may define 164 | the property in the class interface, or in a category for class, 165 | then mark property as \@dynamic in the implementation (like 166 | Core Data NSManagedObject properties). 167 | 168 | @param propertyName Name for the property to be created. 169 | @param kind Class to represent the kind of the property to be created. 170 | @param targetClass Class to operate on. 171 | 172 | */ 173 | +(void)synthesizePropertyNamed:(NSString*) propertyName 174 | ofKind:(Class) kind 175 | forClass:(Class) targetClass 176 | withPolicy:(EPPZSwizzlerProperryAssociationPolicy) policy; 177 | 178 | 179 | @end 180 | -------------------------------------------------------------------------------- /ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Axes: 8 | - serializedVersion: 3 9 | m_Name: Horizontal 10 | descriptiveName: 11 | descriptiveNegativeName: 12 | negativeButton: left 13 | positiveButton: right 14 | altNegativeButton: a 15 | altPositiveButton: d 16 | gravity: 3 17 | dead: 0.001 18 | sensitivity: 3 19 | snap: 1 20 | invert: 0 21 | type: 0 22 | axis: 0 23 | joyNum: 0 24 | - serializedVersion: 3 25 | m_Name: Vertical 26 | descriptiveName: 27 | descriptiveNegativeName: 28 | negativeButton: down 29 | positiveButton: up 30 | altNegativeButton: s 31 | altPositiveButton: w 32 | gravity: 3 33 | dead: 0.001 34 | sensitivity: 3 35 | snap: 1 36 | invert: 0 37 | type: 0 38 | axis: 0 39 | joyNum: 0 40 | - serializedVersion: 3 41 | m_Name: Fire1 42 | descriptiveName: 43 | descriptiveNegativeName: 44 | negativeButton: 45 | positiveButton: left ctrl 46 | altNegativeButton: 47 | altPositiveButton: mouse 0 48 | gravity: 1000 49 | dead: 0.001 50 | sensitivity: 1000 51 | snap: 0 52 | invert: 0 53 | type: 0 54 | axis: 0 55 | joyNum: 0 56 | - serializedVersion: 3 57 | m_Name: Fire2 58 | descriptiveName: 59 | descriptiveNegativeName: 60 | negativeButton: 61 | positiveButton: left alt 62 | altNegativeButton: 63 | altPositiveButton: mouse 1 64 | gravity: 1000 65 | dead: 0.001 66 | sensitivity: 1000 67 | snap: 0 68 | invert: 0 69 | type: 0 70 | axis: 0 71 | joyNum: 0 72 | - serializedVersion: 3 73 | m_Name: Fire3 74 | descriptiveName: 75 | descriptiveNegativeName: 76 | negativeButton: 77 | positiveButton: left shift 78 | altNegativeButton: 79 | altPositiveButton: mouse 2 80 | gravity: 1000 81 | dead: 0.001 82 | sensitivity: 1000 83 | snap: 0 84 | invert: 0 85 | type: 0 86 | axis: 0 87 | joyNum: 0 88 | - serializedVersion: 3 89 | m_Name: Jump 90 | descriptiveName: 91 | descriptiveNegativeName: 92 | negativeButton: 93 | positiveButton: space 94 | altNegativeButton: 95 | altPositiveButton: 96 | gravity: 1000 97 | dead: 0.001 98 | sensitivity: 1000 99 | snap: 0 100 | invert: 0 101 | type: 0 102 | axis: 0 103 | joyNum: 0 104 | - serializedVersion: 3 105 | m_Name: Mouse X 106 | descriptiveName: 107 | descriptiveNegativeName: 108 | negativeButton: 109 | positiveButton: 110 | altNegativeButton: 111 | altPositiveButton: 112 | gravity: 0 113 | dead: 0 114 | sensitivity: 0.1 115 | snap: 0 116 | invert: 0 117 | type: 1 118 | axis: 0 119 | joyNum: 0 120 | - serializedVersion: 3 121 | m_Name: Mouse Y 122 | descriptiveName: 123 | descriptiveNegativeName: 124 | negativeButton: 125 | positiveButton: 126 | altNegativeButton: 127 | altPositiveButton: 128 | gravity: 0 129 | dead: 0 130 | sensitivity: 0.1 131 | snap: 0 132 | invert: 0 133 | type: 1 134 | axis: 1 135 | joyNum: 0 136 | - serializedVersion: 3 137 | m_Name: Mouse ScrollWheel 138 | descriptiveName: 139 | descriptiveNegativeName: 140 | negativeButton: 141 | positiveButton: 142 | altNegativeButton: 143 | altPositiveButton: 144 | gravity: 0 145 | dead: 0 146 | sensitivity: 0.1 147 | snap: 0 148 | invert: 0 149 | type: 1 150 | axis: 2 151 | joyNum: 0 152 | - serializedVersion: 3 153 | m_Name: Horizontal 154 | descriptiveName: 155 | descriptiveNegativeName: 156 | negativeButton: 157 | positiveButton: 158 | altNegativeButton: 159 | altPositiveButton: 160 | gravity: 0 161 | dead: 0.19 162 | sensitivity: 1 163 | snap: 0 164 | invert: 0 165 | type: 2 166 | axis: 0 167 | joyNum: 0 168 | - serializedVersion: 3 169 | m_Name: Vertical 170 | descriptiveName: 171 | descriptiveNegativeName: 172 | negativeButton: 173 | positiveButton: 174 | altNegativeButton: 175 | altPositiveButton: 176 | gravity: 0 177 | dead: 0.19 178 | sensitivity: 1 179 | snap: 0 180 | invert: 1 181 | type: 2 182 | axis: 1 183 | joyNum: 0 184 | - serializedVersion: 3 185 | m_Name: Fire1 186 | descriptiveName: 187 | descriptiveNegativeName: 188 | negativeButton: 189 | positiveButton: joystick button 0 190 | altNegativeButton: 191 | altPositiveButton: 192 | gravity: 1000 193 | dead: 0.001 194 | sensitivity: 1000 195 | snap: 0 196 | invert: 0 197 | type: 0 198 | axis: 0 199 | joyNum: 0 200 | - serializedVersion: 3 201 | m_Name: Fire2 202 | descriptiveName: 203 | descriptiveNegativeName: 204 | negativeButton: 205 | positiveButton: joystick button 1 206 | altNegativeButton: 207 | altPositiveButton: 208 | gravity: 1000 209 | dead: 0.001 210 | sensitivity: 1000 211 | snap: 0 212 | invert: 0 213 | type: 0 214 | axis: 0 215 | joyNum: 0 216 | - serializedVersion: 3 217 | m_Name: Fire3 218 | descriptiveName: 219 | descriptiveNegativeName: 220 | negativeButton: 221 | positiveButton: joystick button 2 222 | altNegativeButton: 223 | altPositiveButton: 224 | gravity: 1000 225 | dead: 0.001 226 | sensitivity: 1000 227 | snap: 0 228 | invert: 0 229 | type: 0 230 | axis: 0 231 | joyNum: 0 232 | - serializedVersion: 3 233 | m_Name: Jump 234 | descriptiveName: 235 | descriptiveNegativeName: 236 | negativeButton: 237 | positiveButton: joystick button 3 238 | altNegativeButton: 239 | altPositiveButton: 240 | gravity: 1000 241 | dead: 0.001 242 | sensitivity: 1000 243 | snap: 0 244 | invert: 0 245 | type: 0 246 | axis: 0 247 | joyNum: 0 248 | - serializedVersion: 3 249 | m_Name: Submit 250 | descriptiveName: 251 | descriptiveNegativeName: 252 | negativeButton: 253 | positiveButton: return 254 | altNegativeButton: 255 | altPositiveButton: joystick button 0 256 | gravity: 1000 257 | dead: 0.001 258 | sensitivity: 1000 259 | snap: 0 260 | invert: 0 261 | type: 0 262 | axis: 0 263 | joyNum: 0 264 | - serializedVersion: 3 265 | m_Name: Submit 266 | descriptiveName: 267 | descriptiveNegativeName: 268 | negativeButton: 269 | positiveButton: enter 270 | altNegativeButton: 271 | altPositiveButton: space 272 | gravity: 1000 273 | dead: 0.001 274 | sensitivity: 1000 275 | snap: 0 276 | invert: 0 277 | type: 0 278 | axis: 0 279 | joyNum: 0 280 | - serializedVersion: 3 281 | m_Name: Cancel 282 | descriptiveName: 283 | descriptiveNegativeName: 284 | negativeButton: 285 | positiveButton: escape 286 | altNegativeButton: 287 | altPositiveButton: joystick button 1 288 | gravity: 1000 289 | dead: 0.001 290 | sensitivity: 1000 291 | snap: 0 292 | invert: 0 293 | type: 0 294 | axis: 0 295 | joyNum: 0 296 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX/EPPZSwizzler.m: -------------------------------------------------------------------------------- 1 | // 2 | // EPPZSwizzler.m 3 | // eppz!swizzler 4 | // 5 | // Created by Borbás Geri on 27/02/14 6 | // Copyright (c) 2013 eppz! development, LLC. 7 | // 8 | // follow http://www.twitter.com/_eppz 9 | // 10 | // 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: 11 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 12 | // 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. 13 | // 14 | 15 | #import "EPPZSwizzler.h" 16 | 17 | 18 | #define log(...) [self log:[NSString stringWithFormat:__VA_ARGS__]] 19 | #define error(...) [self error:[NSString stringWithFormat:__VA_ARGS__]] 20 | 21 | 22 | static BOOL _eppzSwizzlerLogging; 23 | static NSString *_eppzSwizzlerLatestErrorMessage; 24 | 25 | 26 | static char associationKeyKey; 27 | 28 | 29 | @interface EPPZSwizzler () 30 | +(NSString*)setterMethodNameForPropertyName:(NSString*) propertyName; 31 | @end 32 | 33 | 34 | @implementation EPPZSwizzler 35 | 36 | 37 | 38 | #pragma mark - Logging 39 | 40 | +(void)setLogging:(BOOL) isOn 41 | { _eppzSwizzlerLogging = isOn; } 42 | 43 | +(void)log:(NSString*) message 44 | { 45 | if (_eppzSwizzlerLogging == NO) return; // Checks 46 | NSLog(@"%@", message); // Show 47 | } 48 | 49 | +(void)error:(NSString*) errorMessage 50 | { 51 | _eppzSwizzlerLatestErrorMessage = errorMessage; // Reference 52 | 53 | if (_eppzSwizzlerLogging == NO) return; // Checks 54 | NSLog(@"%@", errorMessage); // Show 55 | } 56 | 57 | +(NSString*)latestErrorMessage 58 | { return _eppzSwizzlerLatestErrorMessage; } 59 | 60 | 61 | #pragma mark - Method swizzlers 62 | 63 | +(void)swapInstanceMethod:(SEL) oneSelector 64 | withInstanceMethod:(SEL) otherSelector 65 | ofClass:(Class) class 66 | { 67 | // Get methods. 68 | Method oneMethod = class_getInstanceMethod(class, oneSelector); 69 | Method otherMethod = class_getInstanceMethod(class, otherSelector); 70 | 71 | // Checks. 72 | if (oneMethod == nil) 73 | { error(@"Instance method `%@` not found on class %@", NSStringFromSelector(oneSelector), class); return; }; 74 | if (otherMethod == nil) 75 | { error(@"Instance method `%@` not found on class %@", NSStringFromSelector(otherSelector), class); return; }; 76 | 77 | // Exchange. 78 | method_exchangeImplementations(oneMethod, otherMethod); 79 | 80 | log(@"Exchanged instance method `%@` with `%@` in %@", NSStringFromSelector(oneSelector), NSStringFromSelector(otherSelector), class); 81 | } 82 | 83 | +(void)swapClassMethod:(SEL) oneSelector 84 | withClassMethod:(SEL) otherSelector 85 | ofClass:(Class) class 86 | { 87 | // Get methods. 88 | Method oneMethod = class_getClassMethod(class, oneSelector); 89 | Method otherMethod = class_getClassMethod(class, otherSelector); 90 | 91 | // Checks. 92 | if (oneMethod == nil) 93 | { error(@"Class method `%@` not found on class %@", NSStringFromSelector(oneSelector), class); return; }; 94 | if (otherMethod == nil) 95 | { error(@"Class method `%@` not found on class %@", NSStringFromSelector(otherSelector), class); return; }; 96 | 97 | // Exchange. 98 | method_exchangeImplementations(oneMethod, otherMethod); 99 | 100 | log(@"Exchanged class method `%@` with `%@` in %@", NSStringFromSelector(oneSelector), NSStringFromSelector(otherSelector), class); 101 | } 102 | 103 | +(void)replaceClassMethod:(SEL) selector 104 | ofClass:(Class) targetClass 105 | fromClass:(Class) sourceClass 106 | { 107 | // Get methods. 108 | Method targetMethod = class_getClassMethod(targetClass, selector); 109 | Method sourceMethod = class_getClassMethod(sourceClass, selector); 110 | 111 | // Checks. 112 | if (sourceMethod == nil) 113 | { error(@"Class method `%@` not found on source class %@", NSStringFromSelector(selector), sourceClass); return; }; 114 | 115 | if (targetMethod == nil) 116 | { error(@"Class method `%@` not found on target class %@", NSStringFromSelector(selector), targetClass); return; }; 117 | 118 | // Replace target method. 119 | IMP previousTargetMethod = method_setImplementation(targetMethod, 120 | method_getImplementation(sourceMethod)); 121 | 122 | log(@"Replaced method `%@` of %@ from %@ with %@", NSStringFromSelector(selector), sourceClass, targetClass, (previousTargetMethod) ? @"success" : @"error"); 123 | } 124 | 125 | +(void)replaceInstanceMethod:(SEL) selector 126 | ofClass:(Class) targetClass 127 | fromClass:(Class) sourceClass 128 | { 129 | // Get methods. 130 | Method targetMethod = class_getInstanceMethod(targetClass, selector); 131 | Method sourceMethod = class_getInstanceMethod(sourceClass, selector); 132 | 133 | // Checks. 134 | if (sourceMethod == nil) 135 | { error(@"Instance method `%@` not found on source class %@", NSStringFromSelector(selector), sourceClass); return; }; 136 | 137 | if (targetMethod == nil) 138 | { error(@"Instance method `%@` not found on target class %@", NSStringFromSelector(selector), targetClass); return; }; 139 | 140 | // Replace target method. 141 | IMP previousTargetMethod = method_setImplementation(targetMethod, 142 | method_getImplementation(sourceMethod)); 143 | 144 | log(@"Replaced instance method `%@` of %@ from %@ with %@", NSStringFromSelector(selector), sourceClass, targetClass, (previousTargetMethod) ? @"success" : @"error"); 145 | } 146 | 147 | +(void)addClassMethod:(SEL) selector 148 | toClass:(Class) targetClass 149 | fromClass:(Class) sourceClass 150 | { 151 | 152 | // Get methods. 153 | Method method = class_getClassMethod(sourceClass, selector); 154 | 155 | // Checks. 156 | if (method == nil) 157 | { error(@"Class method `%@` not found on source class %@", NSStringFromSelector(selector), sourceClass); return; }; 158 | 159 | targetClass = object_getClass((id)targetClass); 160 | BOOL success = class_addMethod(targetClass, 161 | selector, 162 | method_getImplementation(method), 163 | method_getTypeEncoding(method)); 164 | 165 | log(@"Added class method `%@` of %@ to %@ with %@", NSStringFromSelector(selector), sourceClass, targetClass, (success) ? @"success" : @"error"); 166 | } 167 | 168 | +(void)addInstanceMethod:(SEL) selector 169 | toClass:(Class) targetClass 170 | fromClass:(Class) sourceClass 171 | { 172 | [self addInstanceMethod:selector 173 | toClass:targetClass 174 | fromClass:sourceClass 175 | as:selector]; 176 | } 177 | 178 | +(void)addInstanceMethod:(SEL) selector 179 | toClass:(Class) targetClass 180 | fromClass:(Class) sourceClass 181 | as:(SEL) targetSelector 182 | { 183 | // Get method. 184 | Method method = class_getInstanceMethod(sourceClass, selector); 185 | 186 | // Checks. 187 | if (method == nil) 188 | { error(@"Instance method `%@` not found on source class %@", NSStringFromSelector(selector), sourceClass); return; }; 189 | 190 | // Add method. 191 | BOOL success = class_addMethod(targetClass, 192 | targetSelector, 193 | method_getImplementation(method), 194 | method_getTypeEncoding(method)); 195 | 196 | log(@"Added instance method `%@` of %@ to %@ with %@", NSStringFromSelector(selector), sourceClass, targetClass, (success) ? @"success" : @"error"); 197 | } 198 | 199 | 200 | #pragma mark - Property swizzlers 201 | 202 | +(NSString*)setterMethodNameForPropertyName:(NSString*) propertyName 203 | { 204 | // Checks. 205 | if (propertyName.length == 0) return propertyName; 206 | 207 | NSString *firstChar = [[propertyName substringToIndex:1] capitalizedString]; 208 | NSString *andTheRest = [propertyName substringFromIndex:1]; 209 | return [NSString stringWithFormat:@"set%@%@:", firstChar, andTheRest]; 210 | } 211 | 212 | +(void)addPropertyNamed:(NSString*) propertyName 213 | toClass:(Class) targetClass 214 | fromClass:(Class) sourceClass 215 | { 216 | // Get property. 217 | const char *name = propertyName.UTF8String; 218 | objc_property_t property = class_getProperty(sourceClass, name); 219 | unsigned int attributesCount = 0; 220 | objc_property_attribute_t *attributes = property_copyAttributeList(property, &attributesCount); 221 | 222 | // Checks. 223 | if (property == nil) 224 | { error(@"Property `%@` not found on source class %@", propertyName, sourceClass); return; }; 225 | 226 | // Add (or replace) property. 227 | BOOL success = class_addProperty(targetClass, name, attributes, attributesCount); 228 | if (success == NO) 229 | { 230 | class_replaceProperty(targetClass, name, attributes, attributesCount); 231 | log(@"Replaced property `%@` of %@ to %@ with %@", propertyName, sourceClass, targetClass, (success) ? @"success" : @"error"); 232 | } 233 | else 234 | { log(@"Added property `%@` of %@ to %@ with %@", propertyName, sourceClass, targetClass, (success) ? @"success" : @"error"); } 235 | 236 | // Add getter. 237 | [self addInstanceMethod:NSSelectorFromString(propertyName) toClass:targetClass fromClass:sourceClass]; 238 | 239 | // Add setter. 240 | NSString *setterMethodName = [self setterMethodNameForPropertyName:propertyName]; 241 | [self addInstanceMethod:NSSelectorFromString(setterMethodName) toClass:targetClass fromClass:sourceClass]; 242 | } 243 | 244 | +(void)synthesizePropertyNamed:(NSString*) propertyName 245 | ofKind:(Class) kind 246 | forClass:(Class) targetClass 247 | withPolicy:(EPPZSwizzlerProperryAssociationPolicy) policy 248 | { 249 | // Get type encoding. 250 | const char *typeEncoding = @encode(typeof(kind)); 251 | 252 | // Associate the key for the property to the class itself. 253 | NSString *keyObject = [NSString stringWithFormat:@"%@Key", propertyName]; 254 | void *key = (__bridge void*)keyObject; 255 | objc_setAssociatedObject(targetClass, &associationKeyKey, keyObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 256 | 257 | // Getter implementation. 258 | IMP getterImplementation = imp_implementationWithBlock(^(id self) 259 | { return (id)objc_getAssociatedObject(self, key); }); 260 | 261 | // Setter implementation. 262 | IMP setterImplementation = imp_implementationWithBlock(^(id self, id value) 263 | { objc_setAssociatedObject(self, key, value, policy); }); 264 | 265 | // Add getter. 266 | BOOL success = class_addMethod(targetClass, 267 | NSSelectorFromString(propertyName), 268 | getterImplementation, 269 | typeEncoding); 270 | 271 | log(@"Added synthesized getter `%@` to %@ with %@", propertyName, targetClass, (success) ? @"success" : @"error"); 272 | 273 | // Add setter. 274 | NSString *setterMethodName = [self setterMethodNameForPropertyName:propertyName]; 275 | success = class_addMethod(targetClass, 276 | NSSelectorFromString(setterMethodName), 277 | setterImplementation, 278 | typeEncoding); 279 | 280 | log(@"Added synthesized setter `%@` to %@ with %@", setterMethodName, targetClass, (success) ? @"success" : @"error"); 281 | } 282 | 283 | 284 | 285 | @end 286 | -------------------------------------------------------------------------------- /iOS/Override_iOS/Override_iOS/EPPZSwizzler.m: -------------------------------------------------------------------------------- 1 | // 2 | // EPPZSwizzler.m 3 | // eppz!swizzler 4 | // 5 | // Created by Borbás Geri on 27/02/14 6 | // Copyright (c) 2013 eppz! development, LLC. 7 | // 8 | // follow http://www.twitter.com/_eppz 9 | // 10 | // 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: 11 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 12 | // 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. 13 | // 14 | 15 | #import "EPPZSwizzler.h" 16 | 17 | 18 | #define log(...) [self log:[NSString stringWithFormat:__VA_ARGS__]] 19 | #define error(...) [self error:[NSString stringWithFormat:__VA_ARGS__]] 20 | 21 | 22 | static BOOL _eppzSwizzlerLogging; 23 | static NSString *_eppzSwizzlerLatestErrorMessage; 24 | 25 | 26 | static char associationKeyKey; 27 | 28 | 29 | @interface EPPZSwizzler () 30 | +(NSString*)setterMethodNameForPropertyName:(NSString*) propertyName; 31 | @end 32 | 33 | 34 | @implementation EPPZSwizzler 35 | 36 | 37 | 38 | #pragma mark - Logging 39 | 40 | +(void)setLogging:(BOOL) isOn 41 | { _eppzSwizzlerLogging = isOn; } 42 | 43 | +(void)log:(NSString*) message 44 | { 45 | if (_eppzSwizzlerLogging == NO) return; // Checks 46 | NSLog(@"%@", message); // Show 47 | } 48 | 49 | +(void)error:(NSString*) errorMessage 50 | { 51 | _eppzSwizzlerLatestErrorMessage = errorMessage; // Reference 52 | 53 | if (_eppzSwizzlerLogging == NO) return; // Checks 54 | NSLog(@"%@", errorMessage); // Show 55 | } 56 | 57 | +(NSString*)latestErrorMessage 58 | { return _eppzSwizzlerLatestErrorMessage; } 59 | 60 | 61 | #pragma mark - Method swizzlers 62 | 63 | +(void)swapInstanceMethod:(SEL) oneSelector 64 | withInstanceMethod:(SEL) otherSelector 65 | ofClass:(Class) class 66 | { 67 | // Get methods. 68 | Method oneMethod = class_getInstanceMethod(class, oneSelector); 69 | Method otherMethod = class_getInstanceMethod(class, otherSelector); 70 | 71 | // Checks. 72 | if (oneMethod == nil) 73 | { error(@"Instance method `%@` not found on class %@", NSStringFromSelector(oneSelector), class); return; }; 74 | if (otherMethod == nil) 75 | { error(@"Instance method `%@` not found on class %@", NSStringFromSelector(otherSelector), class); return; }; 76 | 77 | // Exchange. 78 | method_exchangeImplementations(oneMethod, otherMethod); 79 | 80 | log(@"Exchanged instance method `%@` with `%@` in %@", NSStringFromSelector(oneSelector), NSStringFromSelector(otherSelector), class); 81 | } 82 | 83 | +(void)swapClassMethod:(SEL) oneSelector 84 | withClassMethod:(SEL) otherSelector 85 | ofClass:(Class) class 86 | { 87 | // Get methods. 88 | Method oneMethod = class_getClassMethod(class, oneSelector); 89 | Method otherMethod = class_getClassMethod(class, otherSelector); 90 | 91 | // Checks. 92 | if (oneMethod == nil) 93 | { error(@"Class method `%@` not found on class %@", NSStringFromSelector(oneSelector), class); return; }; 94 | if (otherMethod == nil) 95 | { error(@"Class method `%@` not found on class %@", NSStringFromSelector(otherSelector), class); return; }; 96 | 97 | // Exchange. 98 | method_exchangeImplementations(oneMethod, otherMethod); 99 | 100 | log(@"Exchanged class method `%@` with `%@` in %@", NSStringFromSelector(oneSelector), NSStringFromSelector(otherSelector), class); 101 | } 102 | 103 | +(void)replaceClassMethod:(SEL) selector 104 | ofClass:(Class) targetClass 105 | fromClass:(Class) sourceClass 106 | { 107 | // Get methods. 108 | Method targetMethod = class_getClassMethod(targetClass, selector); 109 | Method sourceMethod = class_getClassMethod(sourceClass, selector); 110 | 111 | // Checks. 112 | if (sourceMethod == nil) 113 | { error(@"Class method `%@` not found on source class %@", NSStringFromSelector(selector), sourceClass); return; }; 114 | 115 | if (targetMethod == nil) 116 | { error(@"Class method `%@` not found on target class %@", NSStringFromSelector(selector), targetClass); return; }; 117 | 118 | // Replace target method. 119 | IMP previousTargetMethod = method_setImplementation(targetMethod, 120 | method_getImplementation(sourceMethod)); 121 | 122 | log(@"Replaced method `%@` of %@ from %@ with %@", NSStringFromSelector(selector), sourceClass, targetClass, (previousTargetMethod) ? @"success" : @"error"); 123 | } 124 | 125 | +(void)replaceInstanceMethod:(SEL) selector 126 | ofClass:(Class) targetClass 127 | fromClass:(Class) sourceClass 128 | { 129 | // Get methods. 130 | Method targetMethod = class_getInstanceMethod(targetClass, selector); 131 | Method sourceMethod = class_getInstanceMethod(sourceClass, selector); 132 | 133 | // Checks. 134 | if (sourceMethod == nil) 135 | { error(@"Instance method `%@` not found on source class %@", NSStringFromSelector(selector), sourceClass); return; }; 136 | 137 | if (targetMethod == nil) 138 | { error(@"Instance method `%@` not found on target class %@", NSStringFromSelector(selector), targetClass); return; }; 139 | 140 | // Replace target method. 141 | IMP previousTargetMethod = method_setImplementation(targetMethod, 142 | method_getImplementation(sourceMethod)); 143 | 144 | log(@"Replaced instance method `%@` of %@ from %@ with %@", NSStringFromSelector(selector), sourceClass, targetClass, (previousTargetMethod) ? @"success" : @"error"); 145 | } 146 | 147 | +(void)addClassMethod:(SEL) selector 148 | toClass:(Class) targetClass 149 | fromClass:(Class) sourceClass 150 | { 151 | 152 | // Get methods. 153 | Method method = class_getClassMethod(sourceClass, selector); 154 | 155 | // Checks. 156 | if (method == nil) 157 | { error(@"Class method `%@` not found on source class %@", NSStringFromSelector(selector), sourceClass); return; }; 158 | 159 | targetClass = object_getClass((id)targetClass); 160 | BOOL success = class_addMethod(targetClass, 161 | selector, 162 | method_getImplementation(method), 163 | method_getTypeEncoding(method)); 164 | 165 | log(@"Added class method `%@` of %@ to %@ with %@", NSStringFromSelector(selector), sourceClass, targetClass, (success) ? @"success" : @"error"); 166 | } 167 | 168 | +(void)addInstanceMethod:(SEL) selector 169 | toClass:(Class) targetClass 170 | fromClass:(Class) sourceClass 171 | { 172 | [self addInstanceMethod:selector 173 | toClass:targetClass 174 | fromClass:sourceClass 175 | as:selector]; 176 | } 177 | 178 | +(void)addInstanceMethod:(SEL) selector 179 | toClass:(Class) targetClass 180 | fromClass:(Class) sourceClass 181 | as:(SEL) targetSelector 182 | { 183 | // Get method. 184 | Method method = class_getInstanceMethod(sourceClass, selector); 185 | 186 | // Checks. 187 | if (method == nil) 188 | { error(@"Instance method `%@` not found on source class %@", NSStringFromSelector(selector), sourceClass); return; }; 189 | 190 | // Add method. 191 | BOOL success = class_addMethod(targetClass, 192 | targetSelector, 193 | method_getImplementation(method), 194 | method_getTypeEncoding(method)); 195 | 196 | log(@"Added instance method `%@` of %@ to %@ with %@", NSStringFromSelector(selector), sourceClass, targetClass, (success) ? @"success" : @"error"); 197 | } 198 | 199 | 200 | #pragma mark - Property swizzlers 201 | 202 | +(NSString*)setterMethodNameForPropertyName:(NSString*) propertyName 203 | { 204 | // Checks. 205 | if (propertyName.length == 0) return propertyName; 206 | 207 | NSString *firstChar = [[propertyName substringToIndex:1] capitalizedString]; 208 | NSString *andTheRest = [propertyName substringFromIndex:1]; 209 | return [NSString stringWithFormat:@"set%@%@:", firstChar, andTheRest]; 210 | } 211 | 212 | +(void)addPropertyNamed:(NSString*) propertyName 213 | toClass:(Class) targetClass 214 | fromClass:(Class) sourceClass 215 | { 216 | // Get property. 217 | const char *name = propertyName.UTF8String; 218 | objc_property_t property = class_getProperty(sourceClass, name); 219 | unsigned int attributesCount = 0; 220 | objc_property_attribute_t *attributes = property_copyAttributeList(property, &attributesCount); 221 | 222 | // Checks. 223 | if (property == nil) 224 | { error(@"Property `%@` not found on source class %@", propertyName, sourceClass); return; }; 225 | 226 | // Add (or replace) property. 227 | BOOL success = class_addProperty(targetClass, name, attributes, attributesCount); 228 | if (success == NO) 229 | { 230 | class_replaceProperty(targetClass, name, attributes, attributesCount); 231 | log(@"Replaced property `%@` of %@ to %@ with %@", propertyName, sourceClass, targetClass, (success) ? @"success" : @"error"); 232 | } 233 | else 234 | { log(@"Added property `%@` of %@ to %@ with %@", propertyName, sourceClass, targetClass, (success) ? @"success" : @"error"); } 235 | 236 | // Add getter. 237 | [self addInstanceMethod:NSSelectorFromString(propertyName) toClass:targetClass fromClass:sourceClass]; 238 | 239 | // Add setter. 240 | NSString *setterMethodName = [self setterMethodNameForPropertyName:propertyName]; 241 | [self addInstanceMethod:NSSelectorFromString(setterMethodName) toClass:targetClass fromClass:sourceClass]; 242 | } 243 | 244 | +(void)synthesizePropertyNamed:(NSString*) propertyName 245 | ofKind:(Class) kind 246 | forClass:(Class) targetClass 247 | withPolicy:(EPPZSwizzlerProperryAssociationPolicy) policy 248 | { 249 | // Get type encoding. 250 | const char *typeEncoding = @encode(__typeof__(kind)); 251 | 252 | // Associate the key for the property to the class itself. 253 | NSString *keyObject = [NSString stringWithFormat:@"%@Key", propertyName]; 254 | void *key = (__bridge void*)keyObject; 255 | objc_setAssociatedObject(targetClass, &associationKeyKey, keyObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 256 | 257 | // Getter implementation. 258 | IMP getterImplementation = imp_implementationWithBlock(^(id self) 259 | { return (id)objc_getAssociatedObject(self, key); }); 260 | 261 | // Setter implementation. 262 | IMP setterImplementation = imp_implementationWithBlock(^(id self, id value) 263 | { objc_setAssociatedObject(self, key, value, policy); }); 264 | 265 | // Add getter. 266 | BOOL success = class_addMethod(targetClass, 267 | NSSelectorFromString(propertyName), 268 | getterImplementation, 269 | typeEncoding); 270 | 271 | log(@"Added synthesized getter `%@` to %@ with %@", propertyName, targetClass, (success) ? @"success" : @"error"); 272 | 273 | // Add setter. 274 | NSString *setterMethodName = [self setterMethodNameForPropertyName:propertyName]; 275 | success = class_addMethod(targetClass, 276 | NSSelectorFromString(setterMethodName), 277 | setterImplementation, 278 | typeEncoding); 279 | 280 | log(@"Added synthesized setter `%@` to %@ with %@", setterMethodName, targetClass, (success) ? @"success" : @"error"); 281 | } 282 | 283 | 284 | 285 | @end 286 | -------------------------------------------------------------------------------- /iOS/Override_iOS/Override_iOS.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 552856361EBE63190043CD02 /* Override_iOS.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 552856351EBE63190043CD02 /* Override_iOS.h */; }; 11 | 5528563F1EBE652C0043CD02 /* libOverride_iOS.a in CopyFiles */ = {isa = PBXBuildFile; fileRef = 552856321EBE63180043CD02 /* libOverride_iOS.a */; }; 12 | 554BE3B71EBE779F00EB767C /* UnityString_C++.mm in Sources */ = {isa = PBXBuildFile; fileRef = 554BE3B61EBE779F00EB767C /* UnityString_C++.mm */; }; 13 | 554BE3BD1EBE7DDC00EB767C /* libOverride_iOS.a in CopyFiles */ = {isa = PBXBuildFile; fileRef = 552856321EBE63180043CD02 /* libOverride_iOS.a */; }; 14 | 55526F331EBFF1D300A02158 /* Override_iOS.m in Sources */ = {isa = PBXBuildFile; fileRef = 552856371EBE63190043CD02 /* Override_iOS.m */; }; 15 | 559CA6E91EC27F1800492DC3 /* DeepLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 559CA6E81EC27F1800492DC3 /* DeepLink.m */; }; 16 | 559CA6EC1EC281EF00492DC3 /* DeepLink_C++.mm in Sources */ = {isa = PBXBuildFile; fileRef = 559CA6EB1EC281EF00492DC3 /* DeepLink_C++.mm */; }; 17 | 55D086B31EC1EFEC00974E70 /* EPPZSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = 55D086B11EC1EFEC00974E70 /* EPPZSwizzler.m */; }; 18 | 55D086B61EC1F54700974E70 /* OverrideAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 55D086B51EC1F54700974E70 /* OverrideAppDelegate.m */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXCopyFilesBuildPhase section */ 22 | 552856301EBE63180043CD02 /* CopyFiles */ = { 23 | isa = PBXCopyFilesBuildPhase; 24 | buildActionMask = 2147483647; 25 | dstPath = "include/$(PRODUCT_NAME)"; 26 | dstSubfolderSpec = 16; 27 | files = ( 28 | 552856361EBE63190043CD02 /* Override_iOS.h in CopyFiles */, 29 | ); 30 | runOnlyForDeploymentPostprocessing = 0; 31 | }; 32 | 5528563E1EBE64F50043CD02 /* CopyFiles */ = { 33 | isa = PBXCopyFilesBuildPhase; 34 | buildActionMask = 2147483647; 35 | dstPath = "~/Projects/Unity/Blog/Override_App_Delegate/Assets/Plugins"; 36 | dstSubfolderSpec = 0; 37 | files = ( 38 | 5528563F1EBE652C0043CD02 /* libOverride_iOS.a in CopyFiles */, 39 | ); 40 | runOnlyForDeploymentPostprocessing = 0; 41 | }; 42 | 554BE3BC1EBE7DD100EB767C /* CopyFiles */ = { 43 | isa = PBXCopyFilesBuildPhase; 44 | buildActionMask = 2147483647; 45 | dstPath = "~/Projects/Unity/Blog/Override_App_Delegate/Build/iOS/Override/Libraries/Plugins"; 46 | dstSubfolderSpec = 0; 47 | files = ( 48 | 554BE3BD1EBE7DDC00EB767C /* libOverride_iOS.a in CopyFiles */, 49 | ); 50 | runOnlyForDeploymentPostprocessing = 0; 51 | }; 52 | /* End PBXCopyFilesBuildPhase section */ 53 | 54 | /* Begin PBXFileReference section */ 55 | 552856321EBE63180043CD02 /* libOverride_iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libOverride_iOS.a; sourceTree = BUILT_PRODUCTS_DIR; }; 56 | 552856351EBE63190043CD02 /* Override_iOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Override_iOS.h; sourceTree = ""; }; 57 | 552856371EBE63190043CD02 /* Override_iOS.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Override_iOS.m; sourceTree = ""; }; 58 | 554BE3B61EBE779F00EB767C /* UnityString_C++.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "UnityString_C++.mm"; sourceTree = ""; }; 59 | 559CA6E71EC27F1800492DC3 /* DeepLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeepLink.h; sourceTree = ""; }; 60 | 559CA6E81EC27F1800492DC3 /* DeepLink.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DeepLink.m; sourceTree = ""; }; 61 | 559CA6EB1EC281EF00492DC3 /* DeepLink_C++.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DeepLink_C++.mm"; sourceTree = ""; }; 62 | 55D086B11EC1EFEC00974E70 /* EPPZSwizzler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EPPZSwizzler.m; sourceTree = ""; }; 63 | 55D086B21EC1EFEC00974E70 /* EPPZSwizzler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EPPZSwizzler.h; sourceTree = ""; }; 64 | 55D086B41EC1F54700974E70 /* OverrideAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OverrideAppDelegate.h; sourceTree = ""; }; 65 | 55D086B51EC1F54700974E70 /* OverrideAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OverrideAppDelegate.m; sourceTree = ""; }; 66 | /* End PBXFileReference section */ 67 | 68 | /* Begin PBXFrameworksBuildPhase section */ 69 | 5528562F1EBE63180043CD02 /* Frameworks */ = { 70 | isa = PBXFrameworksBuildPhase; 71 | buildActionMask = 2147483647; 72 | files = ( 73 | ); 74 | runOnlyForDeploymentPostprocessing = 0; 75 | }; 76 | /* End PBXFrameworksBuildPhase section */ 77 | 78 | /* Begin PBXGroup section */ 79 | 552856291EBE63180043CD02 = { 80 | isa = PBXGroup; 81 | children = ( 82 | 552856341EBE63180043CD02 /* Override_iOS */, 83 | 552856331EBE63180043CD02 /* Products */, 84 | ); 85 | sourceTree = ""; 86 | }; 87 | 552856331EBE63180043CD02 /* Products */ = { 88 | isa = PBXGroup; 89 | children = ( 90 | 552856321EBE63180043CD02 /* libOverride_iOS.a */, 91 | ); 92 | name = Products; 93 | sourceTree = ""; 94 | }; 95 | 552856341EBE63180043CD02 /* Override_iOS */ = { 96 | isa = PBXGroup; 97 | children = ( 98 | 55D086AD1EC1EFBF00974E70 /* eppz! swizzler */, 99 | 552856351EBE63190043CD02 /* Override_iOS.h */, 100 | 552856371EBE63190043CD02 /* Override_iOS.m */, 101 | 554BE3B61EBE779F00EB767C /* UnityString_C++.mm */, 102 | 55D086B41EC1F54700974E70 /* OverrideAppDelegate.h */, 103 | 55D086B51EC1F54700974E70 /* OverrideAppDelegate.m */, 104 | 559CA6E71EC27F1800492DC3 /* DeepLink.h */, 105 | 559CA6E81EC27F1800492DC3 /* DeepLink.m */, 106 | 559CA6EB1EC281EF00492DC3 /* DeepLink_C++.mm */, 107 | ); 108 | path = Override_iOS; 109 | sourceTree = ""; 110 | }; 111 | 55D086AD1EC1EFBF00974E70 /* eppz! swizzler */ = { 112 | isa = PBXGroup; 113 | children = ( 114 | 55D086B21EC1EFEC00974E70 /* EPPZSwizzler.h */, 115 | 55D086B11EC1EFEC00974E70 /* EPPZSwizzler.m */, 116 | ); 117 | name = "eppz! swizzler"; 118 | sourceTree = ""; 119 | }; 120 | /* End PBXGroup section */ 121 | 122 | /* Begin PBXNativeTarget section */ 123 | 552856311EBE63180043CD02 /* Override_iOS */ = { 124 | isa = PBXNativeTarget; 125 | buildConfigurationList = 5528563B1EBE63190043CD02 /* Build configuration list for PBXNativeTarget "Override_iOS" */; 126 | buildPhases = ( 127 | 5528562E1EBE63180043CD02 /* Sources */, 128 | 5528562F1EBE63180043CD02 /* Frameworks */, 129 | 552856301EBE63180043CD02 /* CopyFiles */, 130 | 5528563E1EBE64F50043CD02 /* CopyFiles */, 131 | 554BE3BC1EBE7DD100EB767C /* CopyFiles */, 132 | ); 133 | buildRules = ( 134 | ); 135 | dependencies = ( 136 | ); 137 | name = Override_iOS; 138 | productName = Override_iOS; 139 | productReference = 552856321EBE63180043CD02 /* libOverride_iOS.a */; 140 | productType = "com.apple.product-type.library.static"; 141 | }; 142 | /* End PBXNativeTarget section */ 143 | 144 | /* Begin PBXProject section */ 145 | 5528562A1EBE63180043CD02 /* Project object */ = { 146 | isa = PBXProject; 147 | attributes = { 148 | LastUpgradeCheck = 0730; 149 | ORGANIZATIONNAME = "eppz!"; 150 | TargetAttributes = { 151 | 552856311EBE63180043CD02 = { 152 | CreatedOnToolsVersion = 7.3.1; 153 | }; 154 | }; 155 | }; 156 | buildConfigurationList = 5528562D1EBE63180043CD02 /* Build configuration list for PBXProject "Override_iOS" */; 157 | compatibilityVersion = "Xcode 3.2"; 158 | developmentRegion = English; 159 | hasScannedForEncodings = 0; 160 | knownRegions = ( 161 | en, 162 | ); 163 | mainGroup = 552856291EBE63180043CD02; 164 | productRefGroup = 552856331EBE63180043CD02 /* Products */; 165 | projectDirPath = ""; 166 | projectRoot = ""; 167 | targets = ( 168 | 552856311EBE63180043CD02 /* Override_iOS */, 169 | ); 170 | }; 171 | /* End PBXProject section */ 172 | 173 | /* Begin PBXSourcesBuildPhase section */ 174 | 5528562E1EBE63180043CD02 /* Sources */ = { 175 | isa = PBXSourcesBuildPhase; 176 | buildActionMask = 2147483647; 177 | files = ( 178 | 55526F331EBFF1D300A02158 /* Override_iOS.m in Sources */, 179 | 559CA6E91EC27F1800492DC3 /* DeepLink.m in Sources */, 180 | 554BE3B71EBE779F00EB767C /* UnityString_C++.mm in Sources */, 181 | 55D086B31EC1EFEC00974E70 /* EPPZSwizzler.m in Sources */, 182 | 55D086B61EC1F54700974E70 /* OverrideAppDelegate.m in Sources */, 183 | 559CA6EC1EC281EF00492DC3 /* DeepLink_C++.mm in Sources */, 184 | ); 185 | runOnlyForDeploymentPostprocessing = 0; 186 | }; 187 | /* End PBXSourcesBuildPhase section */ 188 | 189 | /* Begin XCBuildConfiguration section */ 190 | 552856391EBE63190043CD02 /* Debug */ = { 191 | isa = XCBuildConfiguration; 192 | buildSettings = { 193 | ALWAYS_SEARCH_USER_PATHS = NO; 194 | CLANG_ANALYZER_NONNULL = YES; 195 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 196 | CLANG_CXX_LIBRARY = "libc++"; 197 | CLANG_ENABLE_MODULES = YES; 198 | CLANG_ENABLE_OBJC_ARC = YES; 199 | CLANG_WARN_BOOL_CONVERSION = YES; 200 | CLANG_WARN_CONSTANT_CONVERSION = YES; 201 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 202 | CLANG_WARN_EMPTY_BODY = YES; 203 | CLANG_WARN_ENUM_CONVERSION = YES; 204 | CLANG_WARN_INT_CONVERSION = YES; 205 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 206 | CLANG_WARN_UNREACHABLE_CODE = YES; 207 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 208 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 209 | COPY_PHASE_STRIP = NO; 210 | DEBUG_INFORMATION_FORMAT = dwarf; 211 | ENABLE_STRICT_OBJC_MSGSEND = YES; 212 | ENABLE_TESTABILITY = YES; 213 | GCC_C_LANGUAGE_STANDARD = gnu99; 214 | GCC_DYNAMIC_NO_PIC = NO; 215 | GCC_NO_COMMON_BLOCKS = YES; 216 | GCC_OPTIMIZATION_LEVEL = 0; 217 | GCC_PREPROCESSOR_DEFINITIONS = ( 218 | "DEBUG=1", 219 | "$(inherited)", 220 | ); 221 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 222 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 223 | GCC_WARN_UNDECLARED_SELECTOR = YES; 224 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 225 | GCC_WARN_UNUSED_FUNCTION = YES; 226 | GCC_WARN_UNUSED_VARIABLE = YES; 227 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 228 | MTL_ENABLE_DEBUG_INFO = YES; 229 | ONLY_ACTIVE_ARCH = YES; 230 | SDKROOT = iphoneos; 231 | }; 232 | name = Debug; 233 | }; 234 | 5528563A1EBE63190043CD02 /* Release */ = { 235 | isa = XCBuildConfiguration; 236 | buildSettings = { 237 | ALWAYS_SEARCH_USER_PATHS = NO; 238 | CLANG_ANALYZER_NONNULL = YES; 239 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 240 | CLANG_CXX_LIBRARY = "libc++"; 241 | CLANG_ENABLE_MODULES = YES; 242 | CLANG_ENABLE_OBJC_ARC = YES; 243 | CLANG_WARN_BOOL_CONVERSION = YES; 244 | CLANG_WARN_CONSTANT_CONVERSION = YES; 245 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 246 | CLANG_WARN_EMPTY_BODY = YES; 247 | CLANG_WARN_ENUM_CONVERSION = YES; 248 | CLANG_WARN_INT_CONVERSION = YES; 249 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 250 | CLANG_WARN_UNREACHABLE_CODE = YES; 251 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 252 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 253 | COPY_PHASE_STRIP = NO; 254 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 255 | ENABLE_NS_ASSERTIONS = NO; 256 | ENABLE_STRICT_OBJC_MSGSEND = YES; 257 | GCC_C_LANGUAGE_STANDARD = gnu99; 258 | GCC_NO_COMMON_BLOCKS = YES; 259 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 260 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 261 | GCC_WARN_UNDECLARED_SELECTOR = YES; 262 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 263 | GCC_WARN_UNUSED_FUNCTION = YES; 264 | GCC_WARN_UNUSED_VARIABLE = YES; 265 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 266 | MTL_ENABLE_DEBUG_INFO = NO; 267 | SDKROOT = iphoneos; 268 | VALIDATE_PRODUCT = YES; 269 | }; 270 | name = Release; 271 | }; 272 | 5528563C1EBE63190043CD02 /* Debug */ = { 273 | isa = XCBuildConfiguration; 274 | buildSettings = { 275 | OTHER_LDFLAGS = "-ObjC"; 276 | PRODUCT_NAME = "$(TARGET_NAME)"; 277 | SKIP_INSTALL = YES; 278 | }; 279 | name = Debug; 280 | }; 281 | 5528563D1EBE63190043CD02 /* Release */ = { 282 | isa = XCBuildConfiguration; 283 | buildSettings = { 284 | OTHER_LDFLAGS = "-ObjC"; 285 | PRODUCT_NAME = "$(TARGET_NAME)"; 286 | SKIP_INSTALL = YES; 287 | }; 288 | name = Release; 289 | }; 290 | /* End XCBuildConfiguration section */ 291 | 292 | /* Begin XCConfigurationList section */ 293 | 5528562D1EBE63180043CD02 /* Build configuration list for PBXProject "Override_iOS" */ = { 294 | isa = XCConfigurationList; 295 | buildConfigurations = ( 296 | 552856391EBE63190043CD02 /* Debug */, 297 | 5528563A1EBE63190043CD02 /* Release */, 298 | ); 299 | defaultConfigurationIsVisible = 0; 300 | defaultConfigurationName = Release; 301 | }; 302 | 5528563B1EBE63190043CD02 /* Build configuration list for PBXNativeTarget "Override_iOS" */ = { 303 | isa = XCConfigurationList; 304 | buildConfigurations = ( 305 | 5528563C1EBE63190043CD02 /* Debug */, 306 | 5528563D1EBE63190043CD02 /* Release */, 307 | ); 308 | defaultConfigurationIsVisible = 0; 309 | defaultConfigurationName = Release; 310 | }; 311 | /* End XCConfigurationList section */ 312 | }; 313 | rootObject = 5528562A1EBE63180043CD02 /* Project object */; 314 | } 315 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 10 7 | productGUID: bbb21ae8808d448b3842f82ea376e56f 8 | AndroidProfiler: 0 9 | defaultScreenOrientation: 4 10 | targetDevice: 2 11 | useOnDemandResources: 0 12 | accelerometerFrequency: 60 13 | companyName: eppz! mobile, SP 14 | productName: Override 15 | defaultCursor: {fileID: 0} 16 | cursorHotspot: {x: 0, y: 0} 17 | m_SplashScreenBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21176471, a: 1} 18 | m_ShowUnitySplashScreen: 1 19 | m_ShowUnitySplashLogo: 1 20 | m_SplashScreenOverlayOpacity: 1 21 | m_SplashScreenAnimation: 1 22 | m_SplashScreenLogoStyle: 1 23 | m_SplashScreenDrawMode: 0 24 | m_SplashScreenBackgroundAnimationZoom: 1 25 | m_SplashScreenLogoAnimationZoom: 1 26 | m_SplashScreenBackgroundLandscapeAspect: 1 27 | m_SplashScreenBackgroundPortraitAspect: 1 28 | m_SplashScreenBackgroundLandscapeUvs: 29 | serializedVersion: 2 30 | x: 0 31 | y: 0 32 | width: 1 33 | height: 1 34 | m_SplashScreenBackgroundPortraitUvs: 35 | serializedVersion: 2 36 | x: 0 37 | y: 0 38 | width: 1 39 | height: 1 40 | m_SplashScreenLogos: [] 41 | m_SplashScreenBackgroundLandscape: {fileID: 0} 42 | m_SplashScreenBackgroundPortrait: {fileID: 0} 43 | m_VirtualRealitySplashScreen: {fileID: 0} 44 | m_HolographicTrackingLossScreen: {fileID: 0} 45 | defaultScreenWidth: 1024 46 | defaultScreenHeight: 768 47 | defaultScreenWidthWeb: 960 48 | defaultScreenHeightWeb: 600 49 | m_StereoRenderingPath: 0 50 | m_ActiveColorSpace: 0 51 | m_MTRendering: 1 52 | m_MobileMTRendering: 0 53 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 54 | iosShowActivityIndicatorOnLoading: -1 55 | androidShowActivityIndicatorOnLoading: -1 56 | tizenShowActivityIndicatorOnLoading: -1 57 | iosAppInBackgroundBehavior: 0 58 | displayResolutionDialog: 1 59 | iosAllowHTTPDownload: 1 60 | allowedAutorotateToPortrait: 1 61 | allowedAutorotateToPortraitUpsideDown: 1 62 | allowedAutorotateToLandscapeRight: 1 63 | allowedAutorotateToLandscapeLeft: 1 64 | useOSAutorotation: 1 65 | use32BitDisplayBuffer: 1 66 | disableDepthAndStencilBuffers: 0 67 | defaultIsFullScreen: 1 68 | defaultIsNativeResolution: 1 69 | runInBackground: 0 70 | captureSingleScreen: 0 71 | muteOtherAudioSources: 0 72 | Prepare IOS For Recording: 0 73 | submitAnalytics: 1 74 | usePlayerLog: 1 75 | bakeCollisionMeshes: 0 76 | forceSingleInstance: 0 77 | resizableWindow: 0 78 | useMacAppStoreValidation: 0 79 | gpuSkinning: 0 80 | graphicsJobs: 0 81 | xboxPIXTextureCapture: 0 82 | xboxEnableAvatar: 0 83 | xboxEnableKinect: 0 84 | xboxEnableKinectAutoTracking: 0 85 | xboxEnableFitness: 0 86 | visibleInBackground: 0 87 | allowFullscreenSwitch: 1 88 | macFullscreenMode: 2 89 | d3d9FullscreenMode: 1 90 | d3d11FullscreenMode: 1 91 | xboxSpeechDB: 0 92 | xboxEnableHeadOrientation: 0 93 | xboxEnableGuest: 0 94 | xboxEnablePIXSampling: 0 95 | n3dsDisableStereoscopicView: 0 96 | n3dsEnableSharedListOpt: 1 97 | n3dsEnableVSync: 0 98 | uiUse16BitDepthBuffer: 0 99 | ignoreAlphaClear: 0 100 | xboxOneResolution: 0 101 | xboxOneMonoLoggingLevel: 0 102 | xboxOneLoggingLevel: 1 103 | videoMemoryForVertexBuffers: 0 104 | psp2PowerMode: 0 105 | psp2AcquireBGM: 1 106 | wiiUTVResolution: 0 107 | wiiUGamePadMSAA: 1 108 | wiiUSupportsNunchuk: 0 109 | wiiUSupportsClassicController: 0 110 | wiiUSupportsBalanceBoard: 0 111 | wiiUSupportsMotionPlus: 0 112 | wiiUSupportsProController: 0 113 | wiiUAllowScreenCapture: 1 114 | wiiUControllerCount: 0 115 | m_SupportedAspectRatios: 116 | 4:3: 1 117 | 5:4: 1 118 | 16:10: 1 119 | 16:9: 1 120 | Others: 1 121 | bundleIdentifier: com.eppz.Override 122 | bundleVersion: 1.4 123 | preloadedAssets: [] 124 | metroInputSource: 0 125 | m_HolographicPauseOnTrackingLoss: 1 126 | xboxOneDisableKinectGpuReservation: 0 127 | protectGraphicsMemory: 0 128 | AndroidBundleVersionCode: 1 129 | AndroidMinSdkVersion: 9 130 | AndroidPreferredInstallLocation: 1 131 | aotOptions: 132 | apiCompatibilityLevel: 2 133 | stripEngineCode: 1 134 | iPhoneStrippingLevel: 0 135 | iPhoneScriptCallOptimization: 0 136 | iPhoneBuildNumber: 0 137 | ForceInternetPermission: 0 138 | ForceSDCardPermission: 0 139 | CreateWallpaper: 0 140 | APKExpansionFiles: 0 141 | preloadShaders: 0 142 | StripUnusedMeshComponents: 0 143 | VertexChannelCompressionMask: 144 | serializedVersion: 2 145 | m_Bits: 238 146 | iPhoneSdkVersion: 989 147 | iOSTargetOSVersionString: 7.0 148 | tvOSSdkVersion: 0 149 | tvOSRequireExtendedGameController: 0 150 | tvOSTargetOSVersionString: 151 | uIPrerenderedIcon: 0 152 | uIRequiresPersistentWiFi: 0 153 | uIRequiresFullScreen: 1 154 | uIStatusBarHidden: 1 155 | uIExitOnSuspend: 0 156 | uIStatusBarStyle: 0 157 | iPhoneSplashScreen: {fileID: 0} 158 | iPhoneHighResSplashScreen: {fileID: 0} 159 | iPhoneTallHighResSplashScreen: {fileID: 0} 160 | iPhone47inSplashScreen: {fileID: 0} 161 | iPhone55inPortraitSplashScreen: {fileID: 0} 162 | iPhone55inLandscapeSplashScreen: {fileID: 0} 163 | iPadPortraitSplashScreen: {fileID: 0} 164 | iPadHighResPortraitSplashScreen: {fileID: 0} 165 | iPadLandscapeSplashScreen: {fileID: 0} 166 | iPadHighResLandscapeSplashScreen: {fileID: 0} 167 | appleTVSplashScreen: {fileID: 0} 168 | tvOSSmallIconLayers: [] 169 | tvOSLargeIconLayers: [] 170 | tvOSTopShelfImageLayers: [] 171 | tvOSTopShelfImageWideLayers: [] 172 | iOSLaunchScreenType: 0 173 | iOSLaunchScreenPortrait: {fileID: 0} 174 | iOSLaunchScreenLandscape: {fileID: 0} 175 | iOSLaunchScreenBackgroundColor: 176 | serializedVersion: 2 177 | rgba: 0 178 | iOSLaunchScreenFillPct: 100 179 | iOSLaunchScreenSize: 100 180 | iOSLaunchScreenCustomXibPath: 181 | iOSLaunchScreeniPadType: 0 182 | iOSLaunchScreeniPadImage: {fileID: 0} 183 | iOSLaunchScreeniPadBackgroundColor: 184 | serializedVersion: 2 185 | rgba: 0 186 | iOSLaunchScreeniPadFillPct: 100 187 | iOSLaunchScreeniPadSize: 100 188 | iOSLaunchScreeniPadCustomXibPath: 189 | iOSDeviceRequirements: [] 190 | iOSURLSchemes: 191 | - override 192 | iOSBackgroundModes: 0 193 | iOSMetalForceHardShadows: 0 194 | appleDeveloperTeamID: 195 | AndroidTargetDevice: 0 196 | AndroidSplashScreenScale: 0 197 | androidSplashScreen: {fileID: 0} 198 | AndroidKeystoreName: 199 | AndroidKeyaliasName: 200 | AndroidTVCompatibility: 1 201 | AndroidIsGame: 1 202 | androidEnableBanner: 1 203 | m_AndroidBanners: 204 | - width: 320 205 | height: 180 206 | banner: {fileID: 0} 207 | androidGamepadSupportLevel: 0 208 | resolutionDialogBanner: {fileID: 0} 209 | m_BuildTargetIcons: [] 210 | m_BuildTargetBatching: [] 211 | m_BuildTargetGraphicsAPIs: [] 212 | m_BuildTargetVRSettings: [] 213 | openGLRequireES31: 0 214 | openGLRequireES31AEP: 0 215 | webPlayerTemplate: APPLICATION:Default 216 | m_TemplateCustomTags: {} 217 | wiiUTitleID: 0005000011000000 218 | wiiUGroupID: 00010000 219 | wiiUCommonSaveSize: 4096 220 | wiiUAccountSaveSize: 2048 221 | wiiUOlvAccessKey: 0 222 | wiiUTinCode: 0 223 | wiiUJoinGameId: 0 224 | wiiUJoinGameModeMask: 0000000000000000 225 | wiiUCommonBossSize: 0 226 | wiiUAccountBossSize: 0 227 | wiiUAddOnUniqueIDs: [] 228 | wiiUMainThreadStackSize: 3072 229 | wiiULoaderThreadStackSize: 1024 230 | wiiUSystemHeapSize: 128 231 | wiiUTVStartupScreen: {fileID: 0} 232 | wiiUGamePadStartupScreen: {fileID: 0} 233 | wiiUDrcBufferDisabled: 0 234 | wiiUProfilerLibPath: 235 | actionOnDotNetUnhandledException: 1 236 | enableInternalProfiler: 0 237 | logObjCUncaughtExceptions: 1 238 | enableCrashReportAPI: 0 239 | cameraUsageDescription: 240 | locationUsageDescription: 241 | microphoneUsageDescription: 242 | XboxTitleId: 243 | XboxImageXexPath: 244 | XboxSpaPath: 245 | XboxGenerateSpa: 0 246 | XboxDeployKinectResources: 0 247 | XboxSplashScreen: {fileID: 0} 248 | xboxEnableSpeech: 0 249 | xboxAdditionalTitleMemorySize: 0 250 | xboxDeployKinectHeadOrientation: 0 251 | xboxDeployKinectHeadPosition: 0 252 | ps4NPAgeRating: 12 253 | ps4NPTitleSecret: 254 | ps4NPTrophyPackPath: 255 | ps4ParentalLevel: 1 256 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 257 | ps4Category: 0 258 | ps4MasterVersion: 01.00 259 | ps4AppVersion: 01.00 260 | ps4AppType: 0 261 | ps4ParamSfxPath: 262 | ps4VideoOutPixelFormat: 0 263 | ps4VideoOutInitialWidth: 1920 264 | ps4VideoOutReprojectionRate: 120 265 | ps4PronunciationXMLPath: 266 | ps4PronunciationSIGPath: 267 | ps4BackgroundImagePath: 268 | ps4StartupImagePath: 269 | ps4SaveDataImagePath: 270 | ps4SdkOverride: 271 | ps4BGMPath: 272 | ps4ShareFilePath: 273 | ps4ShareOverlayImagePath: 274 | ps4PrivacyGuardImagePath: 275 | ps4NPtitleDatPath: 276 | ps4RemotePlayKeyAssignment: -1 277 | ps4RemotePlayKeyMappingDir: 278 | ps4PlayTogetherPlayerCount: 0 279 | ps4EnterButtonAssignment: 1 280 | ps4ApplicationParam1: 0 281 | ps4ApplicationParam2: 0 282 | ps4ApplicationParam3: 0 283 | ps4ApplicationParam4: 0 284 | ps4DownloadDataSize: 0 285 | ps4GarlicHeapSize: 2048 286 | ps4Passcode: BlQ9wQj99nsQzldVI5ZuGXbEWRK5RhRX 287 | ps4UseDebugIl2cppLibs: 0 288 | ps4pnSessions: 1 289 | ps4pnPresence: 1 290 | ps4pnFriends: 1 291 | ps4pnGameCustomData: 1 292 | playerPrefsSupport: 0 293 | restrictedAudioUsageRights: 0 294 | ps4UseResolutionFallback: 0 295 | ps4ReprojectionSupport: 0 296 | ps4UseAudio3dBackend: 0 297 | ps4SocialScreenEnabled: 0 298 | ps4ScriptOptimizationLevel: 3 299 | ps4Audio3dVirtualSpeakerCount: 14 300 | ps4attribCpuUsage: 0 301 | ps4PatchPkgPath: 302 | ps4PatchLatestPkgPath: 303 | ps4PatchChangeinfoPath: 304 | ps4PatchDayOne: 0 305 | ps4attribUserManagement: 0 306 | ps4attribMoveSupport: 0 307 | ps4attrib3DSupport: 0 308 | ps4attribShareSupport: 0 309 | ps4attribExclusiveVR: 0 310 | ps4disableAutoHideSplash: 0 311 | ps4IncludedModules: [] 312 | monoEnv: 313 | psp2Splashimage: {fileID: 0} 314 | psp2NPTrophyPackPath: 315 | psp2NPSupportGBMorGJP: 0 316 | psp2NPAgeRating: 12 317 | psp2NPTitleDatPath: 318 | psp2NPCommsID: 319 | psp2NPCommunicationsID: 320 | psp2NPCommsPassphrase: 321 | psp2NPCommsSig: 322 | psp2ParamSfxPath: 323 | psp2ManualPath: 324 | psp2LiveAreaGatePath: 325 | psp2LiveAreaBackroundPath: 326 | psp2LiveAreaPath: 327 | psp2LiveAreaTrialPath: 328 | psp2PatchChangeInfoPath: 329 | psp2PatchOriginalPackage: 330 | psp2PackagePassword: dCdG5nG5azdNMK66MuCV6GXi5xr84P2R 331 | psp2KeystoneFile: 332 | psp2MemoryExpansionMode: 0 333 | psp2DRMType: 0 334 | psp2StorageType: 0 335 | psp2MediaCapacity: 0 336 | psp2DLCConfigPath: 337 | psp2ThumbnailPath: 338 | psp2BackgroundPath: 339 | psp2SoundPath: 340 | psp2TrophyCommId: 341 | psp2TrophyPackagePath: 342 | psp2PackagedResourcesPath: 343 | psp2SaveDataQuota: 10240 344 | psp2ParentalLevel: 1 345 | psp2ShortTitle: Not Set 346 | psp2ContentID: IV0000-ABCD12345_00-0123456789ABCDEF 347 | psp2Category: 0 348 | psp2MasterVersion: 01.00 349 | psp2AppVersion: 01.00 350 | psp2TVBootMode: 0 351 | psp2EnterButtonAssignment: 2 352 | psp2TVDisableEmu: 0 353 | psp2AllowTwitterDialog: 1 354 | psp2Upgradable: 0 355 | psp2HealthWarning: 0 356 | psp2UseLibLocation: 0 357 | psp2InfoBarOnStartup: 0 358 | psp2InfoBarColor: 0 359 | psp2UseDebugIl2cppLibs: 0 360 | psmSplashimage: {fileID: 0} 361 | splashScreenBackgroundSourceLandscape: {fileID: 0} 362 | splashScreenBackgroundSourcePortrait: {fileID: 0} 363 | spritePackerPolicy: 364 | webGLMemorySize: 256 365 | webGLExceptionSupport: 1 366 | webGLDataCaching: 0 367 | webGLDebugSymbols: 0 368 | webGLEmscriptenArgs: 369 | webGLModulesDirectory: 370 | webGLTemplate: APPLICATION:Default 371 | webGLAnalyzeBuildSize: 0 372 | webGLUseEmbeddedResources: 0 373 | webGLUseWasm: 0 374 | webGLCompressionFormat: 1 375 | scriptingDefineSymbols: {} 376 | platformArchitecture: {} 377 | scriptingBackend: {} 378 | incrementalIl2cppBuild: {} 379 | additionalIl2CppArgs: 380 | m_RenderingPath: 1 381 | m_MobileRenderingPath: 1 382 | metroPackageName: Override_App_Delegate 383 | metroPackageVersion: 384 | metroCertificatePath: 385 | metroCertificatePassword: 386 | metroCertificateSubject: 387 | metroCertificateIssuer: 388 | metroCertificateNotAfter: 0000000000000000 389 | metroApplicationDescription: Override_App_Delegate 390 | wsaImages: {} 391 | metroTileShortName: 392 | metroCommandLineArgsFile: 393 | metroTileShowName: 0 394 | metroMediumTileShowName: 0 395 | metroLargeTileShowName: 0 396 | metroWideTileShowName: 0 397 | metroDefaultTileSize: 1 398 | metroTileForegroundText: 2 399 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 400 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, 401 | a: 1} 402 | metroSplashScreenUseBackgroundColor: 0 403 | platformCapabilities: {} 404 | metroFTAName: 405 | metroFTAFileTypes: [] 406 | metroProtocolName: 407 | metroCompilationOverrides: 1 408 | tizenProductDescription: 409 | tizenProductURL: 410 | tizenSigningProfileName: 411 | tizenGPSPermissions: 0 412 | tizenMicrophonePermissions: 0 413 | tizenDeploymentTarget: 414 | tizenDeploymentTargetType: 0 415 | tizenMinOSVersion: 0 416 | n3dsUseExtSaveData: 0 417 | n3dsCompressStaticMem: 1 418 | n3dsExtSaveDataNumber: 0x12345 419 | n3dsStackSize: 131072 420 | n3dsTargetPlatform: 2 421 | n3dsRegion: 7 422 | n3dsMediaSize: 0 423 | n3dsLogoStyle: 3 424 | n3dsTitle: GameName 425 | n3dsProductCode: 426 | n3dsApplicationId: 0xFF3FF 427 | stvDeviceAddress: 428 | stvProductDescription: 429 | stvProductAuthor: 430 | stvProductAuthorEmail: 431 | stvProductLink: 432 | stvProductCategory: 0 433 | XboxOneProductId: 434 | XboxOneUpdateKey: 435 | XboxOneSandboxId: 436 | XboxOneContentId: 437 | XboxOneTitleId: 438 | XboxOneSCId: 439 | XboxOneGameOsOverridePath: 440 | XboxOnePackagingOverridePath: 441 | XboxOneAppManifestOverridePath: 442 | XboxOnePackageEncryption: 0 443 | XboxOnePackageUpdateGranularity: 2 444 | XboxOneDescription: 445 | XboxOneLanguage: 446 | - enus 447 | XboxOneCapability: [] 448 | XboxOneGameRating: {} 449 | XboxOneIsContentPackage: 0 450 | XboxOneEnableGPUVariability: 0 451 | XboxOneSockets: {} 452 | XboxOneSplashScreen: {fileID: 0} 453 | XboxOneAllowedProductIds: [] 454 | XboxOnePersistentLocalStorageSize: 0 455 | vrEditorSettings: {} 456 | cloudServicesEnabled: {} 457 | cloudProjectId: 458 | projectName: 459 | organizationId: 460 | cloudEnabled: 0 461 | -------------------------------------------------------------------------------- /Assets/Scene.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 7 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 0 28 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} 29 | m_HaloStrength: 0.5 30 | m_FlareStrength: 1 31 | m_FlareFadeSpeed: 3 32 | m_HaloTexture: {fileID: 0} 33 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 34 | m_DefaultReflectionMode: 0 35 | m_DefaultReflectionResolution: 128 36 | m_ReflectionBounces: 1 37 | m_ReflectionIntensity: 1 38 | m_CustomReflection: {fileID: 0} 39 | m_Sun: {fileID: 0} 40 | m_IndirectSpecularColor: {r: 0.44659364, g: 0.4964301, b: 0.5748256, a: 1} 41 | --- !u!157 &3 42 | LightmapSettings: 43 | m_ObjectHideFlags: 0 44 | serializedVersion: 7 45 | m_GIWorkflowMode: 0 46 | m_GISettings: 47 | serializedVersion: 2 48 | m_BounceScale: 1 49 | m_IndirectOutputScale: 1 50 | m_AlbedoBoost: 1 51 | m_TemporalCoherenceThreshold: 1 52 | m_EnvironmentLightingMode: 0 53 | m_EnableBakedLightmaps: 1 54 | m_EnableRealtimeLightmaps: 1 55 | m_LightmapEditorSettings: 56 | serializedVersion: 4 57 | m_Resolution: 2 58 | m_BakeResolution: 40 59 | m_TextureWidth: 1024 60 | m_TextureHeight: 1024 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_Padding: 2 66 | m_LightmapParameters: {fileID: 0} 67 | m_LightmapsBakeMode: 1 68 | m_TextureCompression: 1 69 | m_DirectLightInLightProbes: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_LightingDataAsset: {fileID: 0} 75 | m_RuntimeCPUUsage: 25 76 | --- !u!196 &4 77 | NavMeshSettings: 78 | serializedVersion: 2 79 | m_ObjectHideFlags: 0 80 | m_BuildSettings: 81 | serializedVersion: 2 82 | agentTypeID: 0 83 | agentRadius: 0.5 84 | agentHeight: 2 85 | agentSlope: 45 86 | agentClimb: 0.4 87 | ledgeDropHeight: 0 88 | maxJumpAcrossDistance: 0 89 | minRegionArea: 2 90 | manualCellSize: 0 91 | cellSize: 0.16666667 92 | accuratePlacement: 0 93 | m_NavMeshData: {fileID: 0} 94 | --- !u!1 &413933673 95 | GameObject: 96 | m_ObjectHideFlags: 0 97 | m_PrefabParentObject: {fileID: 0} 98 | m_PrefabInternal: {fileID: 0} 99 | serializedVersion: 5 100 | m_Component: 101 | - component: {fileID: 413933677} 102 | - component: {fileID: 413933676} 103 | - component: {fileID: 413933675} 104 | - component: {fileID: 413933674} 105 | m_Layer: 5 106 | m_Name: Canvas 107 | m_TagString: Untagged 108 | m_Icon: {fileID: 0} 109 | m_NavMeshLayer: 0 110 | m_StaticEditorFlags: 0 111 | m_IsActive: 1 112 | --- !u!114 &413933674 113 | MonoBehaviour: 114 | m_ObjectHideFlags: 0 115 | m_PrefabParentObject: {fileID: 0} 116 | m_PrefabInternal: {fileID: 0} 117 | m_GameObject: {fileID: 413933673} 118 | m_Enabled: 1 119 | m_EditorHideFlags: 0 120 | m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 121 | m_Name: 122 | m_EditorClassIdentifier: 123 | m_IgnoreReversedGraphics: 1 124 | m_BlockingObjects: 0 125 | m_BlockingMask: 126 | serializedVersion: 2 127 | m_Bits: 4294967295 128 | --- !u!114 &413933675 129 | MonoBehaviour: 130 | m_ObjectHideFlags: 0 131 | m_PrefabParentObject: {fileID: 0} 132 | m_PrefabInternal: {fileID: 0} 133 | m_GameObject: {fileID: 413933673} 134 | m_Enabled: 1 135 | m_EditorHideFlags: 0 136 | m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 137 | m_Name: 138 | m_EditorClassIdentifier: 139 | m_UiScaleMode: 0 140 | m_ReferencePixelsPerUnit: 100 141 | m_ScaleFactor: 1 142 | m_ReferenceResolution: {x: 800, y: 600} 143 | m_ScreenMatchMode: 0 144 | m_MatchWidthOrHeight: 0 145 | m_PhysicalUnit: 3 146 | m_FallbackScreenDPI: 96 147 | m_DefaultSpriteDPI: 96 148 | m_DynamicPixelsPerUnit: 1 149 | --- !u!223 &413933676 150 | Canvas: 151 | m_ObjectHideFlags: 0 152 | m_PrefabParentObject: {fileID: 0} 153 | m_PrefabInternal: {fileID: 0} 154 | m_GameObject: {fileID: 413933673} 155 | m_Enabled: 1 156 | serializedVersion: 2 157 | m_RenderMode: 1 158 | m_Camera: {fileID: 559747474} 159 | m_PlaneDistance: 100 160 | m_PixelPerfect: 0 161 | m_ReceivesEvents: 1 162 | m_OverrideSorting: 0 163 | m_OverridePixelPerfect: 0 164 | m_SortingBucketNormalizedSize: 0 165 | m_SortingLayerID: 0 166 | m_SortingOrder: 0 167 | m_TargetDisplay: 0 168 | --- !u!224 &413933677 169 | RectTransform: 170 | m_ObjectHideFlags: 0 171 | m_PrefabParentObject: {fileID: 0} 172 | m_PrefabInternal: {fileID: 0} 173 | m_GameObject: {fileID: 413933673} 174 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 175 | m_LocalPosition: {x: 0, y: 0, z: 0} 176 | m_LocalScale: {x: 0, y: 0, z: 0} 177 | m_Children: 178 | - {fileID: 1851320517} 179 | - {fileID: 965650478} 180 | m_Father: {fileID: 0} 181 | m_RootOrder: 2 182 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 183 | m_AnchorMin: {x: 0, y: 0} 184 | m_AnchorMax: {x: 0, y: 0} 185 | m_AnchoredPosition: {x: 0, y: 0} 186 | m_SizeDelta: {x: 0, y: 0} 187 | m_Pivot: {x: 0, y: 0} 188 | --- !u!1 &559747473 189 | GameObject: 190 | m_ObjectHideFlags: 0 191 | m_PrefabParentObject: {fileID: 0} 192 | m_PrefabInternal: {fileID: 0} 193 | serializedVersion: 5 194 | m_Component: 195 | - component: {fileID: 559747478} 196 | - component: {fileID: 559747474} 197 | - component: {fileID: 559747477} 198 | - component: {fileID: 559747476} 199 | - component: {fileID: 559747475} 200 | m_Layer: 0 201 | m_Name: Main Camera 202 | m_TagString: MainCamera 203 | m_Icon: {fileID: 0} 204 | m_NavMeshLayer: 0 205 | m_StaticEditorFlags: 0 206 | m_IsActive: 1 207 | --- !u!20 &559747474 208 | Camera: 209 | m_ObjectHideFlags: 0 210 | m_PrefabParentObject: {fileID: 0} 211 | m_PrefabInternal: {fileID: 0} 212 | m_GameObject: {fileID: 559747473} 213 | m_Enabled: 1 214 | serializedVersion: 2 215 | m_ClearFlags: 1 216 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} 217 | m_NormalizedViewPortRect: 218 | serializedVersion: 2 219 | x: 0 220 | y: 0 221 | width: 1 222 | height: 1 223 | near clip plane: 0.3 224 | far clip plane: 1000 225 | field of view: 60 226 | orthographic: 0 227 | orthographic size: 5 228 | m_Depth: -1 229 | m_CullingMask: 230 | serializedVersion: 2 231 | m_Bits: 4294967295 232 | m_RenderingPath: -1 233 | m_TargetTexture: {fileID: 0} 234 | m_TargetDisplay: 0 235 | m_TargetEye: 3 236 | m_HDR: 0 237 | m_OcclusionCulling: 1 238 | m_StereoConvergence: 10 239 | m_StereoSeparation: 0.022 240 | m_StereoMirrorMode: 0 241 | --- !u!81 &559747475 242 | AudioListener: 243 | m_ObjectHideFlags: 0 244 | m_PrefabParentObject: {fileID: 0} 245 | m_PrefabInternal: {fileID: 0} 246 | m_GameObject: {fileID: 559747473} 247 | m_Enabled: 1 248 | --- !u!124 &559747476 249 | Behaviour: 250 | m_ObjectHideFlags: 0 251 | m_PrefabParentObject: {fileID: 0} 252 | m_PrefabInternal: {fileID: 0} 253 | m_GameObject: {fileID: 559747473} 254 | m_Enabled: 1 255 | --- !u!92 &559747477 256 | Behaviour: 257 | m_ObjectHideFlags: 0 258 | m_PrefabParentObject: {fileID: 0} 259 | m_PrefabInternal: {fileID: 0} 260 | m_GameObject: {fileID: 559747473} 261 | m_Enabled: 1 262 | --- !u!4 &559747478 263 | Transform: 264 | m_ObjectHideFlags: 0 265 | m_PrefabParentObject: {fileID: 0} 266 | m_PrefabInternal: {fileID: 0} 267 | m_GameObject: {fileID: 559747473} 268 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 269 | m_LocalPosition: {x: 0, y: 1, z: -10} 270 | m_LocalScale: {x: 1, y: 1, z: 1} 271 | m_Children: [] 272 | m_Father: {fileID: 0} 273 | m_RootOrder: 0 274 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 275 | --- !u!1 &965650477 276 | GameObject: 277 | m_ObjectHideFlags: 0 278 | m_PrefabParentObject: {fileID: 0} 279 | m_PrefabInternal: {fileID: 0} 280 | serializedVersion: 5 281 | m_Component: 282 | - component: {fileID: 965650478} 283 | - component: {fileID: 965650480} 284 | - component: {fileID: 965650479} 285 | m_Layer: 5 286 | m_Name: Bottom 287 | m_TagString: Untagged 288 | m_Icon: {fileID: 0} 289 | m_NavMeshLayer: 0 290 | m_StaticEditorFlags: 0 291 | m_IsActive: 1 292 | --- !u!224 &965650478 293 | RectTransform: 294 | m_ObjectHideFlags: 0 295 | m_PrefabParentObject: {fileID: 0} 296 | m_PrefabInternal: {fileID: 0} 297 | m_GameObject: {fileID: 965650477} 298 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 299 | m_LocalPosition: {x: 0, y: 0, z: 0} 300 | m_LocalScale: {x: 1, y: 1, z: 1} 301 | m_Children: [] 302 | m_Father: {fileID: 413933677} 303 | m_RootOrder: 1 304 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 305 | m_AnchorMin: {x: 0.1, y: 0.1} 306 | m_AnchorMax: {x: 0.9, y: 0.4} 307 | m_AnchoredPosition: {x: 0, y: 0} 308 | m_SizeDelta: {x: 154, y: 204} 309 | m_Pivot: {x: 0.5, y: 0.5} 310 | --- !u!114 &965650479 311 | MonoBehaviour: 312 | m_ObjectHideFlags: 0 313 | m_PrefabParentObject: {fileID: 0} 314 | m_PrefabInternal: {fileID: 0} 315 | m_GameObject: {fileID: 965650477} 316 | m_Enabled: 1 317 | m_EditorHideFlags: 0 318 | m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 319 | m_Name: 320 | m_EditorClassIdentifier: 321 | m_Material: {fileID: 0} 322 | m_Color: {r: 0.9058824, g: 1, b: 1, a: 1} 323 | m_RaycastTarget: 1 324 | m_OnCullStateChanged: 325 | m_PersistentCalls: 326 | m_Calls: [] 327 | m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, 328 | Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 329 | m_FontData: 330 | m_Font: {fileID: 12800000, guid: eaf6ebecc70a24a08bcf6fdfd75e4af7, type: 3} 331 | m_FontSize: 260 332 | m_FontStyle: 0 333 | m_BestFit: 0 334 | m_MinSize: 1 335 | m_MaxSize: 300 336 | m_Alignment: 4 337 | m_AlignByGeometry: 0 338 | m_RichText: 1 339 | m_HorizontalOverflow: 0 340 | m_VerticalOverflow: 0 341 | m_LineSpacing: 0.8 342 | m_Text: 343 | --- !u!222 &965650480 344 | CanvasRenderer: 345 | m_ObjectHideFlags: 0 346 | m_PrefabParentObject: {fileID: 0} 347 | m_PrefabInternal: {fileID: 0} 348 | m_GameObject: {fileID: 965650477} 349 | --- !u!1 &1209443202 350 | GameObject: 351 | m_ObjectHideFlags: 0 352 | m_PrefabParentObject: {fileID: 0} 353 | m_PrefabInternal: {fileID: 0} 354 | serializedVersion: 5 355 | m_Component: 356 | - component: {fileID: 1209443204} 357 | - component: {fileID: 1209443203} 358 | m_Layer: 0 359 | m_Name: DeepLink 360 | m_TagString: Untagged 361 | m_Icon: {fileID: 0} 362 | m_NavMeshLayer: 0 363 | m_StaticEditorFlags: 0 364 | m_IsActive: 1 365 | --- !u!114 &1209443203 366 | MonoBehaviour: 367 | m_ObjectHideFlags: 0 368 | m_PrefabParentObject: {fileID: 0} 369 | m_PrefabInternal: {fileID: 0} 370 | m_GameObject: {fileID: 1209443202} 371 | m_Enabled: 1 372 | m_EditorHideFlags: 0 373 | m_Script: {fileID: 11500000, guid: cb73512c827624a5b8aa148dd5d9d973, type: 3} 374 | m_Name: 375 | m_EditorClassIdentifier: 376 | label: {fileID: 965650479} 377 | --- !u!4 &1209443204 378 | Transform: 379 | m_ObjectHideFlags: 0 380 | m_PrefabParentObject: {fileID: 0} 381 | m_PrefabInternal: {fileID: 0} 382 | m_GameObject: {fileID: 1209443202} 383 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 384 | m_LocalPosition: {x: 0, y: 0, z: 0} 385 | m_LocalScale: {x: 1, y: 1, z: 1} 386 | m_Children: [] 387 | m_Father: {fileID: 0} 388 | m_RootOrder: 4 389 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 390 | --- !u!1 &1288652115 391 | GameObject: 392 | m_ObjectHideFlags: 0 393 | m_PrefabParentObject: {fileID: 0} 394 | m_PrefabInternal: {fileID: 0} 395 | serializedVersion: 5 396 | m_Component: 397 | - component: {fileID: 1288652118} 398 | - component: {fileID: 1288652117} 399 | - component: {fileID: 1288652116} 400 | m_Layer: 0 401 | m_Name: EventSystem 402 | m_TagString: Untagged 403 | m_Icon: {fileID: 0} 404 | m_NavMeshLayer: 0 405 | m_StaticEditorFlags: 0 406 | m_IsActive: 1 407 | --- !u!114 &1288652116 408 | MonoBehaviour: 409 | m_ObjectHideFlags: 0 410 | m_PrefabParentObject: {fileID: 0} 411 | m_PrefabInternal: {fileID: 0} 412 | m_GameObject: {fileID: 1288652115} 413 | m_Enabled: 1 414 | m_EditorHideFlags: 0 415 | m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 416 | m_Name: 417 | m_EditorClassIdentifier: 418 | m_HorizontalAxis: Horizontal 419 | m_VerticalAxis: Vertical 420 | m_SubmitButton: Submit 421 | m_CancelButton: Cancel 422 | m_InputActionsPerSecond: 10 423 | m_RepeatDelay: 0.5 424 | m_ForceModuleActive: 0 425 | --- !u!114 &1288652117 426 | MonoBehaviour: 427 | m_ObjectHideFlags: 0 428 | m_PrefabParentObject: {fileID: 0} 429 | m_PrefabInternal: {fileID: 0} 430 | m_GameObject: {fileID: 1288652115} 431 | m_Enabled: 1 432 | m_EditorHideFlags: 0 433 | m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 434 | m_Name: 435 | m_EditorClassIdentifier: 436 | m_FirstSelected: {fileID: 0} 437 | m_sendNavigationEvents: 1 438 | m_DragThreshold: 5 439 | --- !u!4 &1288652118 440 | Transform: 441 | m_ObjectHideFlags: 0 442 | m_PrefabParentObject: {fileID: 0} 443 | m_PrefabInternal: {fileID: 0} 444 | m_GameObject: {fileID: 1288652115} 445 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 446 | m_LocalPosition: {x: 0, y: 0, z: 0} 447 | m_LocalScale: {x: 1, y: 1, z: 1} 448 | m_Children: [] 449 | m_Father: {fileID: 0} 450 | m_RootOrder: 3 451 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 452 | --- !u!1 &1485557121 453 | GameObject: 454 | m_ObjectHideFlags: 0 455 | m_PrefabParentObject: {fileID: 0} 456 | m_PrefabInternal: {fileID: 0} 457 | serializedVersion: 5 458 | m_Component: 459 | - component: {fileID: 1485557123} 460 | - component: {fileID: 1485557122} 461 | m_Layer: 0 462 | m_Name: Directional Light 463 | m_TagString: Untagged 464 | m_Icon: {fileID: 0} 465 | m_NavMeshLayer: 0 466 | m_StaticEditorFlags: 0 467 | m_IsActive: 1 468 | --- !u!108 &1485557122 469 | Light: 470 | m_ObjectHideFlags: 0 471 | m_PrefabParentObject: {fileID: 0} 472 | m_PrefabInternal: {fileID: 0} 473 | m_GameObject: {fileID: 1485557121} 474 | m_Enabled: 1 475 | serializedVersion: 7 476 | m_Type: 1 477 | m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} 478 | m_Intensity: 1 479 | m_Range: 10 480 | m_SpotAngle: 30 481 | m_CookieSize: 10 482 | m_Shadows: 483 | m_Type: 2 484 | m_Resolution: -1 485 | m_CustomResolution: -1 486 | m_Strength: 1 487 | m_Bias: 0.05 488 | m_NormalBias: 0.4 489 | m_NearPlane: 0.2 490 | m_Cookie: {fileID: 0} 491 | m_DrawHalo: 0 492 | m_Flare: {fileID: 0} 493 | m_RenderMode: 0 494 | m_CullingMask: 495 | serializedVersion: 2 496 | m_Bits: 4294967295 497 | m_Lightmapping: 4 498 | m_AreaSize: {x: 1, y: 1} 499 | m_BounceIntensity: 1 500 | m_ShadowRadius: 0 501 | m_ShadowAngle: 0 502 | --- !u!4 &1485557123 503 | Transform: 504 | m_ObjectHideFlags: 0 505 | m_PrefabParentObject: {fileID: 0} 506 | m_PrefabInternal: {fileID: 0} 507 | m_GameObject: {fileID: 1485557121} 508 | m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} 509 | m_LocalPosition: {x: 0, y: 3, z: 0} 510 | m_LocalScale: {x: 1, y: 1, z: 1} 511 | m_Children: [] 512 | m_Father: {fileID: 0} 513 | m_RootOrder: 1 514 | m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} 515 | --- !u!1 &1851320516 516 | GameObject: 517 | m_ObjectHideFlags: 0 518 | m_PrefabParentObject: {fileID: 0} 519 | m_PrefabInternal: {fileID: 0} 520 | serializedVersion: 5 521 | m_Component: 522 | - component: {fileID: 1851320517} 523 | - component: {fileID: 1851320519} 524 | - component: {fileID: 1851320518} 525 | m_Layer: 5 526 | m_Name: Top 527 | m_TagString: Untagged 528 | m_Icon: {fileID: 0} 529 | m_NavMeshLayer: 0 530 | m_StaticEditorFlags: 0 531 | m_IsActive: 1 532 | --- !u!224 &1851320517 533 | RectTransform: 534 | m_ObjectHideFlags: 0 535 | m_PrefabParentObject: {fileID: 0} 536 | m_PrefabInternal: {fileID: 0} 537 | m_GameObject: {fileID: 1851320516} 538 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 539 | m_LocalPosition: {x: 0, y: 0, z: 0} 540 | m_LocalScale: {x: 0.999978, y: 0.999978, z: 0.999978} 541 | m_Children: [] 542 | m_Father: {fileID: 413933677} 543 | m_RootOrder: 0 544 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 545 | m_AnchorMin: {x: 0.1, y: 0.6} 546 | m_AnchorMax: {x: 0.9, y: 0.9} 547 | m_AnchoredPosition: {x: 0.5, y: 0} 548 | m_SizeDelta: {x: 153, y: 204} 549 | m_Pivot: {x: 0.5, y: 0.5} 550 | --- !u!114 &1851320518 551 | MonoBehaviour: 552 | m_ObjectHideFlags: 0 553 | m_PrefabParentObject: {fileID: 0} 554 | m_PrefabInternal: {fileID: 0} 555 | m_GameObject: {fileID: 1851320516} 556 | m_Enabled: 1 557 | m_EditorHideFlags: 0 558 | m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 559 | m_Name: 560 | m_EditorClassIdentifier: 561 | m_Material: {fileID: 0} 562 | m_Color: {r: 0.2647059, g: 0.25108135, b: 0.23940313, a: 1} 563 | m_RaycastTarget: 1 564 | m_OnCullStateChanged: 565 | m_PersistentCalls: 566 | m_Calls: [] 567 | m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, 568 | Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 569 | m_FontData: 570 | m_Font: {fileID: 12800000, guid: 379e1cda5590e45b892c512af4992e73, type: 3} 571 | m_FontSize: 148 572 | m_FontStyle: 0 573 | m_BestFit: 0 574 | m_MinSize: 1 575 | m_MaxSize: 259 576 | m_Alignment: 4 577 | m_AlignByGeometry: 0 578 | m_RichText: 1 579 | m_HorizontalOverflow: 0 580 | m_VerticalOverflow: 0 581 | m_LineSpacing: 0.8 582 | m_Text: Deep link 583 | --- !u!222 &1851320519 584 | CanvasRenderer: 585 | m_ObjectHideFlags: 0 586 | m_PrefabParentObject: {fileID: 0} 587 | m_PrefabInternal: {fileID: 0} 588 | m_GameObject: {fileID: 1851320516} 589 | -------------------------------------------------------------------------------- /OSX/Override_OSX/Override_OSX.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 554696B01EC3213E005DE88B /* EPPZSwizzler.h in Headers */ = {isa = PBXBuildFile; fileRef = 554696AE1EC3213E005DE88B /* EPPZSwizzler.h */; }; 11 | 554696B11EC3213E005DE88B /* EPPZSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = 554696AF1EC3213E005DE88B /* EPPZSwizzler.m */; }; 12 | 554696C71EC3234F005DE88B /* Override_OSX.h in Headers */ = {isa = PBXBuildFile; fileRef = 554696BF1EC3234F005DE88B /* Override_OSX.h */; }; 13 | 554696C81EC3234F005DE88B /* Override_OSX.m in Sources */ = {isa = PBXBuildFile; fileRef = 554696C01EC3234F005DE88B /* Override_OSX.m */; }; 14 | 554696CA1EC3234F005DE88B /* OverrideAppDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 554696C21EC3234F005DE88B /* OverrideAppDelegate.h */; }; 15 | 554696CB1EC3234F005DE88B /* OverrideAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 554696C31EC3234F005DE88B /* OverrideAppDelegate.m */; }; 16 | 554696CC1EC3234F005DE88B /* DeepLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 554696C41EC3234F005DE88B /* DeepLink.h */; }; 17 | 554696CD1EC3234F005DE88B /* DeepLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 554696C51EC3234F005DE88B /* DeepLink.m */; }; 18 | 554696CE1EC3234F005DE88B /* DeepLink_C++.mm in Sources */ = {isa = PBXBuildFile; fileRef = 554696C61EC3234F005DE88B /* DeepLink_C++.mm */; }; 19 | 554696D71EC32723005DE88B /* PlayerAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 554696D61EC32723005DE88B /* PlayerAppDelegate.m */; }; 20 | 554696DA1EC32723005DE88B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 554696D91EC32723005DE88B /* main.m */; }; 21 | 554696DF1EC32723005DE88B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 554696DE1EC32723005DE88B /* Assets.xcassets */; }; 22 | 554696E21EC32723005DE88B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 554696E01EC32723005DE88B /* Main.storyboard */; }; 23 | 554696E71EC32739005DE88B /* Override_OSX.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 554696A31EC32084005DE88B /* Override_OSX.framework */; }; 24 | 554696ED1EC33CC3005DE88B /* Override_OSX.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 554696A31EC32084005DE88B /* Override_OSX.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 25 | 5594AD731EC3877B00BC205C /* Override_OSX.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 554696A31EC32084005DE88B /* Override_OSX.framework */; }; 26 | /* End PBXBuildFile section */ 27 | 28 | /* Begin PBXContainerItemProxy section */ 29 | 554696E81EC32741005DE88B /* PBXContainerItemProxy */ = { 30 | isa = PBXContainerItemProxy; 31 | containerPortal = 5546969A1EC32084005DE88B /* Project object */; 32 | proxyType = 1; 33 | remoteGlobalIDString = 554696A21EC32084005DE88B; 34 | remoteInfo = Override_OSX; 35 | }; 36 | /* End PBXContainerItemProxy section */ 37 | 38 | /* Begin PBXCopyFilesBuildPhase section */ 39 | 554696EC1EC33CC1005DE88B /* CopyFiles */ = { 40 | isa = PBXCopyFilesBuildPhase; 41 | buildActionMask = 2147483647; 42 | dstPath = ""; 43 | dstSubfolderSpec = 10; 44 | files = ( 45 | 554696ED1EC33CC3005DE88B /* Override_OSX.framework in CopyFiles */, 46 | ); 47 | runOnlyForDeploymentPostprocessing = 0; 48 | }; 49 | 5594AD721EC3876900BC205C /* CopyFiles */ = { 50 | isa = PBXCopyFilesBuildPhase; 51 | buildActionMask = 2147483647; 52 | dstPath = "~/Projects/Unity/Blog/Override_App_Delegate/Build/OSX/Override.app/Contents/Frameworks"; 53 | dstSubfolderSpec = 0; 54 | files = ( 55 | 5594AD731EC3877B00BC205C /* Override_OSX.framework in CopyFiles */, 56 | ); 57 | runOnlyForDeploymentPostprocessing = 0; 58 | }; 59 | /* End PBXCopyFilesBuildPhase section */ 60 | 61 | /* Begin PBXFileReference section */ 62 | 554696A31EC32084005DE88B /* Override_OSX.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Override_OSX.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 63 | 554696A81EC32085005DE88B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 64 | 554696AE1EC3213E005DE88B /* EPPZSwizzler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EPPZSwizzler.h; sourceTree = ""; }; 65 | 554696AF1EC3213E005DE88B /* EPPZSwizzler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EPPZSwizzler.m; sourceTree = ""; }; 66 | 554696BF1EC3234F005DE88B /* Override_OSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Override_OSX.h; sourceTree = ""; }; 67 | 554696C01EC3234F005DE88B /* Override_OSX.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Override_OSX.m; sourceTree = ""; }; 68 | 554696C11EC3234F005DE88B /* UnityString_C++.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "UnityString_C++.mm"; sourceTree = ""; }; 69 | 554696C21EC3234F005DE88B /* OverrideAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OverrideAppDelegate.h; sourceTree = ""; }; 70 | 554696C31EC3234F005DE88B /* OverrideAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OverrideAppDelegate.m; sourceTree = ""; }; 71 | 554696C41EC3234F005DE88B /* DeepLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeepLink.h; sourceTree = ""; }; 72 | 554696C51EC3234F005DE88B /* DeepLink.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DeepLink.m; sourceTree = ""; }; 73 | 554696C61EC3234F005DE88B /* DeepLink_C++.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DeepLink_C++.mm"; sourceTree = ""; }; 74 | 554696D31EC32723005DE88B /* Override_OSX_Sandbox.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Override_OSX_Sandbox.app; sourceTree = BUILT_PRODUCTS_DIR; }; 75 | 554696D51EC32723005DE88B /* PlayerAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PlayerAppDelegate.h; sourceTree = ""; }; 76 | 554696D61EC32723005DE88B /* PlayerAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PlayerAppDelegate.m; sourceTree = ""; }; 77 | 554696D91EC32723005DE88B /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 78 | 554696DE1EC32723005DE88B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 79 | 554696E11EC32723005DE88B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 80 | 554696E31EC32723005DE88B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 81 | /* End PBXFileReference section */ 82 | 83 | /* Begin PBXFrameworksBuildPhase section */ 84 | 5546969F1EC32084005DE88B /* Frameworks */ = { 85 | isa = PBXFrameworksBuildPhase; 86 | buildActionMask = 2147483647; 87 | files = ( 88 | ); 89 | runOnlyForDeploymentPostprocessing = 0; 90 | }; 91 | 554696D01EC32723005DE88B /* Frameworks */ = { 92 | isa = PBXFrameworksBuildPhase; 93 | buildActionMask = 2147483647; 94 | files = ( 95 | 554696E71EC32739005DE88B /* Override_OSX.framework in Frameworks */, 96 | ); 97 | runOnlyForDeploymentPostprocessing = 0; 98 | }; 99 | /* End PBXFrameworksBuildPhase section */ 100 | 101 | /* Begin PBXGroup section */ 102 | 554696991EC32084005DE88B = { 103 | isa = PBXGroup; 104 | children = ( 105 | 554696A51EC32084005DE88B /* Override_OSX */, 106 | 554696D41EC32723005DE88B /* Override_OSX_Sandbox */, 107 | 554696A41EC32084005DE88B /* Products */, 108 | ); 109 | sourceTree = ""; 110 | }; 111 | 554696A41EC32084005DE88B /* Products */ = { 112 | isa = PBXGroup; 113 | children = ( 114 | 554696A31EC32084005DE88B /* Override_OSX.framework */, 115 | 554696D31EC32723005DE88B /* Override_OSX_Sandbox.app */, 116 | ); 117 | name = Products; 118 | sourceTree = ""; 119 | }; 120 | 554696A51EC32084005DE88B /* Override_OSX */ = { 121 | isa = PBXGroup; 122 | children = ( 123 | 554696B21EC32145005DE88B /* eppz! swizzler */, 124 | 554696BF1EC3234F005DE88B /* Override_OSX.h */, 125 | 554696C01EC3234F005DE88B /* Override_OSX.m */, 126 | 554696C11EC3234F005DE88B /* UnityString_C++.mm */, 127 | 554696C21EC3234F005DE88B /* OverrideAppDelegate.h */, 128 | 554696C31EC3234F005DE88B /* OverrideAppDelegate.m */, 129 | 554696C41EC3234F005DE88B /* DeepLink.h */, 130 | 554696C51EC3234F005DE88B /* DeepLink.m */, 131 | 554696C61EC3234F005DE88B /* DeepLink_C++.mm */, 132 | 554696A81EC32085005DE88B /* Info.plist */, 133 | ); 134 | path = Override_OSX; 135 | sourceTree = ""; 136 | }; 137 | 554696B21EC32145005DE88B /* eppz! swizzler */ = { 138 | isa = PBXGroup; 139 | children = ( 140 | 554696AE1EC3213E005DE88B /* EPPZSwizzler.h */, 141 | 554696AF1EC3213E005DE88B /* EPPZSwizzler.m */, 142 | ); 143 | name = "eppz! swizzler"; 144 | sourceTree = ""; 145 | }; 146 | 554696D41EC32723005DE88B /* Override_OSX_Sandbox */ = { 147 | isa = PBXGroup; 148 | children = ( 149 | 554696D51EC32723005DE88B /* PlayerAppDelegate.h */, 150 | 554696D61EC32723005DE88B /* PlayerAppDelegate.m */, 151 | 554696DE1EC32723005DE88B /* Assets.xcassets */, 152 | 554696E01EC32723005DE88B /* Main.storyboard */, 153 | 554696E31EC32723005DE88B /* Info.plist */, 154 | 554696D81EC32723005DE88B /* Supporting Files */, 155 | ); 156 | path = Override_OSX_Sandbox; 157 | sourceTree = ""; 158 | }; 159 | 554696D81EC32723005DE88B /* Supporting Files */ = { 160 | isa = PBXGroup; 161 | children = ( 162 | 554696D91EC32723005DE88B /* main.m */, 163 | ); 164 | name = "Supporting Files"; 165 | sourceTree = ""; 166 | }; 167 | /* End PBXGroup section */ 168 | 169 | /* Begin PBXHeadersBuildPhase section */ 170 | 554696A01EC32084005DE88B /* Headers */ = { 171 | isa = PBXHeadersBuildPhase; 172 | buildActionMask = 2147483647; 173 | files = ( 174 | 554696B01EC3213E005DE88B /* EPPZSwizzler.h in Headers */, 175 | 554696CC1EC3234F005DE88B /* DeepLink.h in Headers */, 176 | 554696C71EC3234F005DE88B /* Override_OSX.h in Headers */, 177 | 554696CA1EC3234F005DE88B /* OverrideAppDelegate.h in Headers */, 178 | ); 179 | runOnlyForDeploymentPostprocessing = 0; 180 | }; 181 | /* End PBXHeadersBuildPhase section */ 182 | 183 | /* Begin PBXNativeTarget section */ 184 | 554696A21EC32084005DE88B /* Override_OSX */ = { 185 | isa = PBXNativeTarget; 186 | buildConfigurationList = 554696AB1EC32085005DE88B /* Build configuration list for PBXNativeTarget "Override_OSX" */; 187 | buildPhases = ( 188 | 5546969E1EC32084005DE88B /* Sources */, 189 | 5546969F1EC32084005DE88B /* Frameworks */, 190 | 554696A01EC32084005DE88B /* Headers */, 191 | 554696A11EC32084005DE88B /* Resources */, 192 | 5594AD721EC3876900BC205C /* CopyFiles */, 193 | 55793FA01EC3C7C7001269F5 /* ShellScript */, 194 | ); 195 | buildRules = ( 196 | ); 197 | dependencies = ( 198 | ); 199 | name = Override_OSX; 200 | productName = Override_OSX; 201 | productReference = 554696A31EC32084005DE88B /* Override_OSX.framework */; 202 | productType = "com.apple.product-type.framework"; 203 | }; 204 | 554696D21EC32723005DE88B /* Override_OSX_Sandbox */ = { 205 | isa = PBXNativeTarget; 206 | buildConfigurationList = 554696E41EC32723005DE88B /* Build configuration list for PBXNativeTarget "Override_OSX_Sandbox" */; 207 | buildPhases = ( 208 | 554696CF1EC32723005DE88B /* Sources */, 209 | 554696D01EC32723005DE88B /* Frameworks */, 210 | 554696D11EC32723005DE88B /* Resources */, 211 | 554696EC1EC33CC1005DE88B /* CopyFiles */, 212 | ); 213 | buildRules = ( 214 | ); 215 | dependencies = ( 216 | 554696E91EC32741005DE88B /* PBXTargetDependency */, 217 | ); 218 | name = Override_OSX_Sandbox; 219 | productName = Override_OSX_Sandbox; 220 | productReference = 554696D31EC32723005DE88B /* Override_OSX_Sandbox.app */; 221 | productType = "com.apple.product-type.application"; 222 | }; 223 | /* End PBXNativeTarget section */ 224 | 225 | /* Begin PBXProject section */ 226 | 5546969A1EC32084005DE88B /* Project object */ = { 227 | isa = PBXProject; 228 | attributes = { 229 | LastUpgradeCheck = 0730; 230 | ORGANIZATIONNAME = "eppz!"; 231 | TargetAttributes = { 232 | 554696A21EC32084005DE88B = { 233 | CreatedOnToolsVersion = 7.3.1; 234 | }; 235 | 554696D21EC32723005DE88B = { 236 | CreatedOnToolsVersion = 7.3.1; 237 | }; 238 | }; 239 | }; 240 | buildConfigurationList = 5546969D1EC32084005DE88B /* Build configuration list for PBXProject "Override_OSX" */; 241 | compatibilityVersion = "Xcode 3.2"; 242 | developmentRegion = English; 243 | hasScannedForEncodings = 0; 244 | knownRegions = ( 245 | en, 246 | Base, 247 | ); 248 | mainGroup = 554696991EC32084005DE88B; 249 | productRefGroup = 554696A41EC32084005DE88B /* Products */; 250 | projectDirPath = ""; 251 | projectRoot = ""; 252 | targets = ( 253 | 554696A21EC32084005DE88B /* Override_OSX */, 254 | 554696D21EC32723005DE88B /* Override_OSX_Sandbox */, 255 | ); 256 | }; 257 | /* End PBXProject section */ 258 | 259 | /* Begin PBXResourcesBuildPhase section */ 260 | 554696A11EC32084005DE88B /* Resources */ = { 261 | isa = PBXResourcesBuildPhase; 262 | buildActionMask = 2147483647; 263 | files = ( 264 | ); 265 | runOnlyForDeploymentPostprocessing = 0; 266 | }; 267 | 554696D11EC32723005DE88B /* Resources */ = { 268 | isa = PBXResourcesBuildPhase; 269 | buildActionMask = 2147483647; 270 | files = ( 271 | 554696DF1EC32723005DE88B /* Assets.xcassets in Resources */, 272 | 554696E21EC32723005DE88B /* Main.storyboard in Resources */, 273 | ); 274 | runOnlyForDeploymentPostprocessing = 0; 275 | }; 276 | /* End PBXResourcesBuildPhase section */ 277 | 278 | /* Begin PBXShellScriptBuildPhase section */ 279 | 55793FA01EC3C7C7001269F5 /* ShellScript */ = { 280 | isa = PBXShellScriptBuildPhase; 281 | buildActionMask = 2147483647; 282 | files = ( 283 | ); 284 | inputPaths = ( 285 | ); 286 | outputPaths = ( 287 | ); 288 | runOnlyForDeploymentPostprocessing = 0; 289 | shellPath = /bin/sh; 290 | shellScript = "optool install -c load -p \"@executable_path/../Frameworks/Override_OSX.framework/Versions/A/Override_OSX\" -t ~/Projects/Unity/Blog/Override_App_Delegate/Build/OSX/Override.app/Contents/MacOS/Override"; 291 | }; 292 | /* End PBXShellScriptBuildPhase section */ 293 | 294 | /* Begin PBXSourcesBuildPhase section */ 295 | 5546969E1EC32084005DE88B /* Sources */ = { 296 | isa = PBXSourcesBuildPhase; 297 | buildActionMask = 2147483647; 298 | files = ( 299 | 554696CB1EC3234F005DE88B /* OverrideAppDelegate.m in Sources */, 300 | 554696CE1EC3234F005DE88B /* DeepLink_C++.mm in Sources */, 301 | 554696B11EC3213E005DE88B /* EPPZSwizzler.m in Sources */, 302 | 554696CD1EC3234F005DE88B /* DeepLink.m in Sources */, 303 | 554696C81EC3234F005DE88B /* Override_OSX.m in Sources */, 304 | ); 305 | runOnlyForDeploymentPostprocessing = 0; 306 | }; 307 | 554696CF1EC32723005DE88B /* Sources */ = { 308 | isa = PBXSourcesBuildPhase; 309 | buildActionMask = 2147483647; 310 | files = ( 311 | 554696DA1EC32723005DE88B /* main.m in Sources */, 312 | 554696D71EC32723005DE88B /* PlayerAppDelegate.m in Sources */, 313 | ); 314 | runOnlyForDeploymentPostprocessing = 0; 315 | }; 316 | /* End PBXSourcesBuildPhase section */ 317 | 318 | /* Begin PBXTargetDependency section */ 319 | 554696E91EC32741005DE88B /* PBXTargetDependency */ = { 320 | isa = PBXTargetDependency; 321 | target = 554696A21EC32084005DE88B /* Override_OSX */; 322 | targetProxy = 554696E81EC32741005DE88B /* PBXContainerItemProxy */; 323 | }; 324 | /* End PBXTargetDependency section */ 325 | 326 | /* Begin PBXVariantGroup section */ 327 | 554696E01EC32723005DE88B /* Main.storyboard */ = { 328 | isa = PBXVariantGroup; 329 | children = ( 330 | 554696E11EC32723005DE88B /* Base */, 331 | ); 332 | name = Main.storyboard; 333 | sourceTree = ""; 334 | }; 335 | /* End PBXVariantGroup section */ 336 | 337 | /* Begin XCBuildConfiguration section */ 338 | 554696A91EC32085005DE88B /* Debug */ = { 339 | isa = XCBuildConfiguration; 340 | buildSettings = { 341 | ALWAYS_SEARCH_USER_PATHS = NO; 342 | CLANG_ANALYZER_NONNULL = YES; 343 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 344 | CLANG_CXX_LIBRARY = "libc++"; 345 | CLANG_ENABLE_MODULES = YES; 346 | CLANG_ENABLE_OBJC_ARC = YES; 347 | CLANG_WARN_BOOL_CONVERSION = YES; 348 | CLANG_WARN_CONSTANT_CONVERSION = YES; 349 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 350 | CLANG_WARN_EMPTY_BODY = YES; 351 | CLANG_WARN_ENUM_CONVERSION = YES; 352 | CLANG_WARN_INT_CONVERSION = YES; 353 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 354 | CLANG_WARN_UNREACHABLE_CODE = YES; 355 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 356 | CODE_SIGN_IDENTITY = "-"; 357 | COPY_PHASE_STRIP = NO; 358 | CURRENT_PROJECT_VERSION = 1; 359 | DEBUG_INFORMATION_FORMAT = dwarf; 360 | ENABLE_STRICT_OBJC_MSGSEND = YES; 361 | ENABLE_TESTABILITY = YES; 362 | GCC_C_LANGUAGE_STANDARD = gnu99; 363 | GCC_DYNAMIC_NO_PIC = NO; 364 | GCC_NO_COMMON_BLOCKS = YES; 365 | GCC_OPTIMIZATION_LEVEL = 0; 366 | GCC_PREPROCESSOR_DEFINITIONS = ( 367 | "DEBUG=1", 368 | "$(inherited)", 369 | ); 370 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 371 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 372 | GCC_WARN_UNDECLARED_SELECTOR = YES; 373 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 374 | GCC_WARN_UNUSED_FUNCTION = YES; 375 | GCC_WARN_UNUSED_VARIABLE = YES; 376 | MACOSX_DEPLOYMENT_TARGET = 10.11; 377 | MTL_ENABLE_DEBUG_INFO = YES; 378 | ONLY_ACTIVE_ARCH = YES; 379 | SDKROOT = macosx; 380 | VERSIONING_SYSTEM = "apple-generic"; 381 | VERSION_INFO_PREFIX = ""; 382 | }; 383 | name = Debug; 384 | }; 385 | 554696AA1EC32085005DE88B /* Release */ = { 386 | isa = XCBuildConfiguration; 387 | buildSettings = { 388 | ALWAYS_SEARCH_USER_PATHS = NO; 389 | CLANG_ANALYZER_NONNULL = YES; 390 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 391 | CLANG_CXX_LIBRARY = "libc++"; 392 | CLANG_ENABLE_MODULES = YES; 393 | CLANG_ENABLE_OBJC_ARC = YES; 394 | CLANG_WARN_BOOL_CONVERSION = YES; 395 | CLANG_WARN_CONSTANT_CONVERSION = YES; 396 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 397 | CLANG_WARN_EMPTY_BODY = YES; 398 | CLANG_WARN_ENUM_CONVERSION = YES; 399 | CLANG_WARN_INT_CONVERSION = YES; 400 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 401 | CLANG_WARN_UNREACHABLE_CODE = YES; 402 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 403 | CODE_SIGN_IDENTITY = "-"; 404 | COPY_PHASE_STRIP = NO; 405 | CURRENT_PROJECT_VERSION = 1; 406 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 407 | ENABLE_NS_ASSERTIONS = NO; 408 | ENABLE_STRICT_OBJC_MSGSEND = YES; 409 | GCC_C_LANGUAGE_STANDARD = gnu99; 410 | GCC_NO_COMMON_BLOCKS = YES; 411 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 412 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 413 | GCC_WARN_UNDECLARED_SELECTOR = YES; 414 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 415 | GCC_WARN_UNUSED_FUNCTION = YES; 416 | GCC_WARN_UNUSED_VARIABLE = YES; 417 | MACOSX_DEPLOYMENT_TARGET = 10.11; 418 | MTL_ENABLE_DEBUG_INFO = NO; 419 | SDKROOT = macosx; 420 | VERSIONING_SYSTEM = "apple-generic"; 421 | VERSION_INFO_PREFIX = ""; 422 | }; 423 | name = Release; 424 | }; 425 | 554696AC1EC32085005DE88B /* Debug */ = { 426 | isa = XCBuildConfiguration; 427 | buildSettings = { 428 | COMBINE_HIDPI_IMAGES = YES; 429 | DEFINES_MODULE = YES; 430 | DYLIB_COMPATIBILITY_VERSION = 1; 431 | DYLIB_CURRENT_VERSION = 1; 432 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 433 | FRAMEWORK_VERSION = A; 434 | INFOPLIST_FILE = Override_OSX/Info.plist; 435 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 436 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; 437 | PRODUCT_BUNDLE_IDENTIFIER = "com.eppz.Override-OSX"; 438 | PRODUCT_NAME = "$(TARGET_NAME)"; 439 | SKIP_INSTALL = YES; 440 | }; 441 | name = Debug; 442 | }; 443 | 554696AD1EC32085005DE88B /* Release */ = { 444 | isa = XCBuildConfiguration; 445 | buildSettings = { 446 | COMBINE_HIDPI_IMAGES = YES; 447 | DEFINES_MODULE = YES; 448 | DYLIB_COMPATIBILITY_VERSION = 1; 449 | DYLIB_CURRENT_VERSION = 1; 450 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 451 | FRAMEWORK_VERSION = A; 452 | INFOPLIST_FILE = Override_OSX/Info.plist; 453 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 454 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; 455 | PRODUCT_BUNDLE_IDENTIFIER = "com.eppz.Override-OSX"; 456 | PRODUCT_NAME = "$(TARGET_NAME)"; 457 | SKIP_INSTALL = YES; 458 | }; 459 | name = Release; 460 | }; 461 | 554696E51EC32723005DE88B /* Debug */ = { 462 | isa = XCBuildConfiguration; 463 | buildSettings = { 464 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 465 | COMBINE_HIDPI_IMAGES = YES; 466 | INFOPLIST_FILE = Override_OSX_Sandbox/Info.plist; 467 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; 468 | PRODUCT_BUNDLE_IDENTIFIER = "com.eppz.Override-OSX-Sandbox"; 469 | PRODUCT_NAME = "$(TARGET_NAME)"; 470 | }; 471 | name = Debug; 472 | }; 473 | 554696E61EC32723005DE88B /* Release */ = { 474 | isa = XCBuildConfiguration; 475 | buildSettings = { 476 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 477 | COMBINE_HIDPI_IMAGES = YES; 478 | INFOPLIST_FILE = Override_OSX_Sandbox/Info.plist; 479 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; 480 | PRODUCT_BUNDLE_IDENTIFIER = "com.eppz.Override-OSX-Sandbox"; 481 | PRODUCT_NAME = "$(TARGET_NAME)"; 482 | }; 483 | name = Release; 484 | }; 485 | /* End XCBuildConfiguration section */ 486 | 487 | /* Begin XCConfigurationList section */ 488 | 5546969D1EC32084005DE88B /* Build configuration list for PBXProject "Override_OSX" */ = { 489 | isa = XCConfigurationList; 490 | buildConfigurations = ( 491 | 554696A91EC32085005DE88B /* Debug */, 492 | 554696AA1EC32085005DE88B /* Release */, 493 | ); 494 | defaultConfigurationIsVisible = 0; 495 | defaultConfigurationName = Release; 496 | }; 497 | 554696AB1EC32085005DE88B /* Build configuration list for PBXNativeTarget "Override_OSX" */ = { 498 | isa = XCConfigurationList; 499 | buildConfigurations = ( 500 | 554696AC1EC32085005DE88B /* Debug */, 501 | 554696AD1EC32085005DE88B /* Release */, 502 | ); 503 | defaultConfigurationIsVisible = 0; 504 | defaultConfigurationName = Release; 505 | }; 506 | 554696E41EC32723005DE88B /* Build configuration list for PBXNativeTarget "Override_OSX_Sandbox" */ = { 507 | isa = XCConfigurationList; 508 | buildConfigurations = ( 509 | 554696E51EC32723005DE88B /* Debug */, 510 | 554696E61EC32723005DE88B /* Release */, 511 | ); 512 | defaultConfigurationIsVisible = 0; 513 | defaultConfigurationName = Release; 514 | }; 515 | /* End XCConfigurationList section */ 516 | }; 517 | rootObject = 5546969A1EC32084005DE88B /* Project object */; 518 | } 519 | --------------------------------------------------------------------------------