Aucune description
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

NGPostProcessBuild.cs 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. using System.IO;
  2. using UnityEditor;
  3. using UnityEngine;
  4. #if UNITY_IOS
  5. using UnityEditor.Callbacks;
  6. using UnityEditor.iOS.Xcode;
  7. #endif
  8. namespace NativeGalleryNamespace
  9. {
  10. [System.Serializable]
  11. public class Settings
  12. {
  13. private const string SAVE_PATH = "ProjectSettings/NativeGallery.json";
  14. public bool AutomatedSetup = true;
  15. public string PhotoLibraryUsageDescription = "The app requires access to Photos to interact with it.";
  16. public string PhotoLibraryAdditionsUsageDescription = "The app requires access to Photos to save media to it.";
  17. public bool DontAskLimitedPhotosPermissionAutomaticallyOnIos14 = true; // See: https://mackuba.eu/2020/07/07/photo-library-changes-ios-14/
  18. private static Settings m_instance = null;
  19. public static Settings Instance
  20. {
  21. get
  22. {
  23. if( m_instance == null )
  24. {
  25. try
  26. {
  27. if( File.Exists( SAVE_PATH ) )
  28. m_instance = JsonUtility.FromJson<Settings>( File.ReadAllText( SAVE_PATH ) );
  29. else
  30. m_instance = new Settings();
  31. }
  32. catch( System.Exception e )
  33. {
  34. Debug.LogException( e );
  35. m_instance = new Settings();
  36. }
  37. }
  38. return m_instance;
  39. }
  40. }
  41. public void Save()
  42. {
  43. File.WriteAllText( SAVE_PATH, JsonUtility.ToJson( this, true ) );
  44. }
  45. [SettingsProvider]
  46. public static SettingsProvider CreatePreferencesGUI()
  47. {
  48. return new SettingsProvider( "Project/yasirkula/Native Gallery", SettingsScope.Project )
  49. {
  50. guiHandler = ( searchContext ) => PreferencesGUI(),
  51. keywords = new System.Collections.Generic.HashSet<string>() { "Native", "Gallery", "Android", "iOS" }
  52. };
  53. }
  54. public static void PreferencesGUI()
  55. {
  56. EditorGUI.BeginChangeCheck();
  57. Instance.AutomatedSetup = EditorGUILayout.Toggle( "Automated Setup", Instance.AutomatedSetup );
  58. EditorGUI.BeginDisabledGroup( !Instance.AutomatedSetup );
  59. Instance.PhotoLibraryUsageDescription = EditorGUILayout.DelayedTextField( "Photo Library Usage Description", Instance.PhotoLibraryUsageDescription );
  60. Instance.PhotoLibraryAdditionsUsageDescription = EditorGUILayout.DelayedTextField( "Photo Library Additions Usage Description", Instance.PhotoLibraryAdditionsUsageDescription );
  61. Instance.DontAskLimitedPhotosPermissionAutomaticallyOnIos14 = EditorGUILayout.Toggle( new GUIContent( "Don't Ask Limited Photos Permission Automatically", "See: https://mackuba.eu/2020/07/07/photo-library-changes-ios-14/. It's recommended to keep this setting enabled" ), Instance.DontAskLimitedPhotosPermissionAutomaticallyOnIos14 );
  62. EditorGUI.EndDisabledGroup();
  63. if( EditorGUI.EndChangeCheck() )
  64. Instance.Save();
  65. }
  66. }
  67. public class NGPostProcessBuild
  68. {
  69. #if UNITY_IOS
  70. [PostProcessBuild( 1 )]
  71. public static void OnPostprocessBuild( BuildTarget target, string buildPath )
  72. {
  73. if( !Settings.Instance.AutomatedSetup )
  74. return;
  75. if( target == BuildTarget.iOS )
  76. {
  77. string pbxProjectPath = PBXProject.GetPBXProjectPath( buildPath );
  78. string plistPath = Path.Combine( buildPath, "Info.plist" );
  79. PBXProject pbxProject = new PBXProject();
  80. pbxProject.ReadFromFile( pbxProjectPath );
  81. string targetGUID = pbxProject.GetUnityFrameworkTargetGuid();
  82. pbxProject.AddFrameworkToProject( targetGUID, "PhotosUI.framework", true );
  83. pbxProject.AddFrameworkToProject( targetGUID, "Photos.framework", false );
  84. pbxProject.AddFrameworkToProject( targetGUID, "MobileCoreServices.framework", false );
  85. pbxProject.AddFrameworkToProject( targetGUID, "ImageIO.framework", false );
  86. File.WriteAllText( pbxProjectPath, pbxProject.WriteToString() );
  87. PlistDocument plist = new PlistDocument();
  88. plist.ReadFromString( File.ReadAllText( plistPath ) );
  89. PlistElementDict rootDict = plist.root;
  90. if( !string.IsNullOrEmpty( Settings.Instance.PhotoLibraryUsageDescription ) )
  91. rootDict.SetString( "NSPhotoLibraryUsageDescription", Settings.Instance.PhotoLibraryUsageDescription );
  92. if( !string.IsNullOrEmpty( Settings.Instance.PhotoLibraryAdditionsUsageDescription ) )
  93. rootDict.SetString( "NSPhotoLibraryAddUsageDescription", Settings.Instance.PhotoLibraryAdditionsUsageDescription );
  94. if( Settings.Instance.DontAskLimitedPhotosPermissionAutomaticallyOnIos14 )
  95. rootDict.SetBoolean( "PHPhotoLibraryPreventAutomaticLimitedAccessAlert", true );
  96. File.WriteAllText( plistPath, plist.WriteToString() );
  97. }
  98. }
  99. #endif
  100. }
  101. }