コード例 #1
0
        private void UpdatePluginPlatforms(ApplicationSettings.Features _supportedFeatures)
        {
            foreach (PluginImporter plugin in PluginImporter.GetAllImporters())
            {
                if (plugin == null || Path.IsPathRooted(plugin.assetPath))                          // Skip null or inbuilt plugins
                {
                    continue;
                }

                string filename = Path.GetFileName(plugin.assetPath);

                if (plugin.assetPath.Contains(Constants.kAndroidPluginsPath))
                {
                    // Debug.Log("[Updating Plugin Properties] " + plugin.assetPath);
                    if (filename.Equals(Constants.kTwitterLibraryName))
                    {
                        plugin.SetCompatibleWithAnyPlatform(false);
                        plugin.SetCompatibleWithPlatform(BuildTarget.Android, _supportedFeatures.UsesTwitter);
                    }

                    if (filename.Equals(Constants.kYoutubeLibraryName))
                    {
                        plugin.SetCompatibleWithAnyPlatform(false);
                        plugin.SetCompatibleWithPlatform(BuildTarget.Android, _supportedFeatures.UsesMediaLibrary);
                    }
                }
            }
        }
コード例 #2
0
        private static void ProcessFeatureSpecificOperations()
        {
            // Remove NP temp folder
            if (Directory.Exists(kRelativePathNativePluginsSDKFolder))
            {
                IOExtensions.AssignPermissionRecursively(kRelativePathNativePluginsSDKFolder, FileAttributes.Normal);
                Directory.Delete(kRelativePathNativePluginsSDKFolder, true);
            }

            // Create temp folder to place extracted files
            Directory.CreateDirectory(kRelativePathNativePluginsSDKFolder);

            // Add player settings info to receipt verification code
            ApplicationSettings.Features _supportedFeatures = NPSettings.Application.SupportedFeatures;

            if (_supportedFeatures.UsesBilling)
            {
                AddBuildInfoToReceiptVerificationManger();
            }

            // Decompress zip files and add it to project
            if (_supportedFeatures.UsesTwitter)
            {
                DecompressTwitterSDKFiles();
            }
        }
コード例 #3
0
        private void UpdateResourcesBasedOnFeaturesUsage()
        {
            ApplicationSettings.Features      _supportedFeatures      = m_applicationSettings.SupportedFeatures;
            ApplicationSettings.AddonServices _supportedAddOnServices = m_applicationSettings.SupportedAddonServices;

            UpdateJARFile(_supportedFeatures.UsesAddressBook, Constants.kAddressBookJARName);
            UpdateJARFile(_supportedFeatures.UsesBilling, Constants.kBillingJARName);
            UpdateJARFile(_supportedFeatures.UsesBilling, Constants.kBillingAmazonJARName);
            UpdateJARFile(_supportedFeatures.UsesCloudServices, Constants.kCloudServicesJARName);
            UpdateJARFile(_supportedFeatures.UsesGameServices, Constants.kGameServicesJARName);
            UpdateJARFile(_supportedFeatures.UsesMediaLibrary, Constants.kMediaLibraryJARName);
            UpdateJARFile(_supportedFeatures.UsesNotificationService, Constants.kNotificationJARName);
            UpdateJARFile(_supportedFeatures.UsesNetworkConnectivity, Constants.kNetworkConnectivityJARName);
            UpdateJARFile(_supportedFeatures.UsesSharing, Constants.kSharingJARName);
            UpdateJARFile(_supportedFeatures.UsesTwitter, Constants.kSocialNetworkTwitterJARName);
            UpdateJARFile(_supportedFeatures.UsesWebView, Constants.kWebviewJARName);

            //External Additional Support
            UpdateJARFile(_supportedAddOnServices.UsesSoomlaGrow, Constants.kSoomlaIntegrationJARName);
            UpdateJARFile(_supportedFeatures.UsesNotificationService || NPSettings.Utility.Android.ModifiesApplicationBadge, Constants.kExternalNotificationLibJARName);                    // For Shortcut Badger

#if     (UNITY_5 || UNITY_2017_1_OR_NEWER)
            // Update external libraries/plugins properties
            UpdatePluginPlatforms(_supportedFeatures);
#endif
        }
コード例 #4
0
        private void UpdatePluginResources()
        {
            ApplicationSettings.Features _supportedFeatures = m_applicationSettings.SupportedFeatures;

            // Update JAR files
            UpdateJARFile(_supportedFeatures.UsesBilling, Constants.kBillingInterfaceJARName, Constants.kDisabledBillingWarning);

            // Copy required assets
            CopyNotificationAssets();
        }
コード例 #5
0
        private static void ProcessFeatureSpecificOperations()
        {
            ApplicationSettings.Features _supportedFeatures = NPSettings.Application.SupportedFeatures;

            if (_supportedFeatures.UsesBilling)
            {
                AddBuildInfoToReceiptVerificationManger();
            }

            // Decompress zip files and add it to project
            if (_supportedFeatures.UsesTwitter)
            {
                DecompressTwitterFrameworkFiles();
            }
        }
コード例 #6
0
ファイル: NPSettings.cs プロジェクト: Gamepie/Split.Up
        private void UpdateDefineSymbols()
        {
            foreach (BuildTargetGroup _curBuildTargetGroup in buildTargetGroups)
            {
                string[]      _curDefineSymbols = UnityPlayerSettings.GetScriptingDefineSymbolsForGroup(_curBuildTargetGroup).Split(defineSeperators, StringSplitOptions.RemoveEmptyEntries);
                List <string> _newDefineSymbols = new List <string>(_curDefineSymbols);

                // Asset type
#pragma warning disable
                if (kIsFullVersion)
                {
                    if (_newDefineSymbols.Contains(kLiteVersionMacro))
                    {
                        _newDefineSymbols.Remove(kLiteVersionMacro);
                    }
                }
                else
                {
                    if (!_newDefineSymbols.Contains(kLiteVersionMacro))
                    {
                        _newDefineSymbols.Add(kLiteVersionMacro);
                    }
                }
#pragma warning restore

                ApplicationSettings.Features      _supportedFeatures      = m_applicationSettings.SupportedFeatures;
                ApplicationSettings.AddonServices _supportedAddonServices = m_applicationSettings.SupportedAddonServices;

                // Regarding supported features
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesAddressBook, kMacroAddressBook);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesBilling, kMacroBilling);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesCloudServices, kMacroCloudServices);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesGameServices, kMacroGameServices);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesMediaLibrary, kMacroMediaLibrary);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesNetworkConnectivity, kMacroNetworkConnectivity);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesNotificationService, kMacroNotificationService);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesSharing, kMacroSharin);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesTwitter, kMacroTwitter);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesWebView, kMacroWebView);

                // Regarding supported addon features
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedAddonServices.UsesSoomlaGrow, kMacroSoomlaGrowService);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedAddonServices.UsesOneSignal, kMacroOneSignalService);

                // Now save these changes
                UnityPlayerSettings.SetScriptingDefineSymbolsForGroup(_curBuildTargetGroup, string.Join(";", _newDefineSymbols.ToArray()));
            }
        }
コード例 #7
0
ファイル: PostProcessBuild.cs プロジェクト: georgex1/rednit
//		{
//			"Fabric": {
//				"APIKey": "{0}",
//				"Kits": [
//				    {
//					"KitInfo": {
//						"consumerKey": "",
//						"consumerSecret": ""
//					},
//					"KitName": "Twitter"
//				    }
//				    ]
//			}
//		}

        private static void ModifyInfoPlist(string _buildPath)
        {
            ApplicationSettings.Features _supportedFeatures = NPSettings.Application.SupportedFeatures;

            if (!(_supportedFeatures.UsesTwitter || _supportedFeatures.UsesGameServices))
            {
                return;
            }

            string _path2InfoPlist           = Path.Combine(_buildPath, kInfoPlistFileRelativePath);
            string _path2InfoPlistBackupFile = Path.Combine(_buildPath, kInfoPlistBackupFileRelativePath);
            Plist  _infoPlist = Plist.LoadPlistAtPath(_path2InfoPlist);

            // Create backup
            _infoPlist.Save(_path2InfoPlistBackupFile);

            // Adding twitter settings
            if (_supportedFeatures.UsesTwitter)
            {
                TwitterSettings _twitterSettings      = NPSettings.SocialNetworkSettings.TwitterSettings;
                string          _fabricJsonStr        = string.Format(kFabricKitJsonStringFormat, _twitterSettings.ConsumerKey);
                IDictionary     _fabricJsonDictionary = JSONUtility.FromJSON(_fabricJsonStr) as IDictionary;

                // Add fabric
                _infoPlist.AddValue(kFabricKitRootKey, _fabricJsonDictionary[kFabricKitRootKey] as IDictionary);
            }

            // Adding gamecenter settings
            if (_supportedFeatures.UsesGameServices)
            {
                IList _deviceCapablitiesList = _infoPlist.GetKeyPathValue(kDeviceCapablitiesKey) as IList;

                if (_deviceCapablitiesList == null)
                {
                    _deviceCapablitiesList = new List <string>();
                }

                if (!_deviceCapablitiesList.Contains("gamekit"))
                {
                    _deviceCapablitiesList.Add("gamekit");
                }

                _infoPlist.AddValue(kDeviceCapablitiesKey, _deviceCapablitiesList);
            }

            // Save
            _infoPlist.Save(_path2InfoPlist);
        }
コード例 #8
0
        private void UpdateJARFilesBasedOnFeaturesUsage()
        {
            ApplicationSettings.Features      _supportedFeatures      = m_applicationSettings.SupportedFeatures;
            ApplicationSettings.AddonServices _supportedAddOnServices = m_applicationSettings.SupportedAddonServices;

            UpdateJARFile(_supportedFeatures.UsesAddressBook, Constants.kAddressBookJARName);
            UpdateJARFile(_supportedFeatures.UsesBilling, Constants.kBillingJARName);
            UpdateJARFile(_supportedFeatures.UsesCloudServices, Constants.kCloudServicesJARName);
            UpdateJARFile(_supportedFeatures.UsesGameServices, Constants.kGameServicesJARName);
            UpdateJARFile(_supportedFeatures.UsesMediaLibrary, Constants.kMediaLibraryJARName);
            UpdateJARFile(_supportedFeatures.UsesNotificationService, Constants.kNotificationJARName);
            UpdateJARFile(_supportedFeatures.UsesNetworkConnectivity, Constants.kNetworkConnectivityJARName);
            UpdateJARFile(_supportedFeatures.UsesSharing, Constants.kSharingJARName);
            UpdateJARFile(_supportedFeatures.UsesTwitter, Constants.kSocialNetworkTwitterJARName);
            UpdateJARFile(_supportedFeatures.UsesWebView, Constants.kWebviewJARName);
            UpdateJARFile(_supportedAddOnServices.UsesSoomlaGrow, Constants.kSoomlaIntegrationJARName);
        }
コード例 #9
0
		public NPAndroidManifestGenerator ()
		{
			m_supportedFeatures	= NPSettings.Application.SupportedFeatures;
		}
コード例 #10
0
        private void UpdateDefineSymbols()
        {
            ApplicationSettings.Features      _supportedFeatures      = m_applicationSettings.SupportedFeatures;
            ApplicationSettings.AddonServices _supportedAddonServices = m_applicationSettings.SupportedAddonServices;

#if UNITY_ANDROID
            if (_supportedFeatures.UsesCloudServices && !_supportedFeatures.UsesGameServices)
            {
                string _error = "Cloud Services on Android needs Game Services feature to be enabled. Please enable Game Services now.";
                Debug.LogWarning("[Cross Platform Native Plugins] " + _error);
                EditorUtility.DisplayDialog("Cross Platform Native Plugins - Alert", _error, "Ok");
            }

#if USES_BILLING
            if (string.IsNullOrEmpty(NPSettings.Billing.Android.PublicKey))
            {
                string _error = "Please specify Public key in Billing Settings for using Billing feature. You can get this key from Google Play Developer Console -> Your App -> Development & Tools -> Services & API -> Licensing & in-app billing.";
                Debug.LogWarning("[Cross Platform Native Plugins] " + _error);
            }
#endif
#endif

            foreach (BuildTargetGroup _curBuildTargetGroup in buildTargetGroups)
            {
                string[]      _curDefineSymbols = UnityPlayerSettings.GetScriptingDefineSymbolsForGroup(_curBuildTargetGroup).Split(defineSeperators, StringSplitOptions.RemoveEmptyEntries);
                List <string> _newDefineSymbols = new List <string>(_curDefineSymbols);

                // Asset type
#pragma warning disable
                if (kIsFullVersion)
                {
                    if (_newDefineSymbols.Contains(kLiteVersionMacro))
                    {
                        _newDefineSymbols.Remove(kLiteVersionMacro);
                    }
                }
                else
                {
                    if (!_newDefineSymbols.Contains(kLiteVersionMacro))
                    {
                        _newDefineSymbols.Add(kLiteVersionMacro);
                    }
                }
#pragma warning restore

                // Regarding supported features
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesAddressBook, kMacroAddressBook);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesBilling, kMacroBilling);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesCloudServices, kMacroCloudServices);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesGameServices, kMacroGameServices);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesMediaLibrary, kMacroMediaLibrary);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesNetworkConnectivity, kMacroNetworkConnectivity);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesNotificationService, kMacroNotificationService);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesSharing, kMacroSharin);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesTwitter, kMacroTwitter);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedFeatures.UsesWebView, kMacroWebView);

                // Regarding supported addon features
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedAddonServices.UsesSoomlaGrow, kMacroSoomlaGrowService);
                AddOrRemoveFeatureDefineSymbol(_newDefineSymbols, _supportedAddonServices.UsesOneSignal, kMacroOneSignalService);

                // Now save these changes
                UnityPlayerSettings.SetScriptingDefineSymbolsForGroup(_curBuildTargetGroup, string.Join(";", _newDefineSymbols.ToArray()));
            }
        }
コード例 #11
0
//		{
//			"Fabric": {
//				"APIKey": "{0}",
//				"Kits": [
//				    {
//					"KitInfo": {
//						"consumerKey": "",
//						"consumerSecret": ""
//					},
//					"KitName": "Twitter"
//				    }
//				    ]
//			}
//		}

        private static void ModifyInfoPlist(string _buildPath)
        {
            ApplicationSettings.Features _supportedFeatures  = NPSettings.Application.SupportedFeatures;
            Dictionary <string, object>  _newPermissionsDict = new Dictionary <string, object>();

            // Add twitter info
#if USES_TWITTER
            {
                const string    _kFabricKitRootKey    = "Fabric";
                TwitterSettings _twitterSettings      = NPSettings.SocialNetworkSettings.TwitterSettings;
                string          _fabricJsonStr        = string.Format(kFabricKitJsonStringFormat, _twitterSettings.ConsumerKey);
                IDictionary     _fabricJsonDictionary = (IDictionary)JSONUtility.FromJSON(_fabricJsonStr);

                // Add fabric
                _newPermissionsDict[_kFabricKitRootKey] = _fabricJsonDictionary[_kFabricKitRootKey];
            }
#endif

            // Add background process details
#if USES_NOTIFICATION_SERVICE && USES_ONE_SIGNAL
            const string _kUIBackgroundModesKey = "UIBackgroundModes";
            IList        _backgroundModesList   = (IList)infoPlist.GetKeyPathValue(_kUIBackgroundModesKey);

            if (_backgroundModesList == null)
            {
                _backgroundModesList = new List <string>();
            }

            const string _kRemoteNotificationProcess = "remote-notification";

            if (!_backgroundModesList.Contains(_kRemoteNotificationProcess))
            {
                _backgroundModesList.Add(_kRemoteNotificationProcess);
            }

            _newPermissionsDict[_kUIBackgroundModesKey] = _backgroundModesList;
#endif

            // Device capablities addition
            if (_supportedFeatures.UsesGameServices)
            {
                const string _kDeviceCapablitiesKey = "UIRequiredDeviceCapabilities";
                const string _kGameKitKey           = "gamekit";
                IList        _deviceCapablitiesList = (IList)infoPlist.GetKeyPathValue(_kDeviceCapablitiesKey);

                if (_deviceCapablitiesList == null)
                {
                    _deviceCapablitiesList = new List <string>();
                }

                if (!_deviceCapablitiesList.Contains(_kGameKitKey))
                {
                    _deviceCapablitiesList.Add(_kGameKitKey);
                }

                _newPermissionsDict[_kDeviceCapablitiesKey] = _deviceCapablitiesList;
            }

            // Query scheme related key inclusion
            if (_supportedFeatures.UsesSharing)
            {
                const string _kQuerySchemesKey   = "LSApplicationQueriesSchemes";
                const string _kWhatsAppKey       = "whatsapp";
                IList        _queriesSchemesList = (IList)infoPlist.GetKeyPathValue(_kQuerySchemesKey);

                if (_queriesSchemesList == null)
                {
                    _queriesSchemesList = new List <string>();
                }

                if (!_queriesSchemesList.Contains(_kWhatsAppKey))
                {
                    _queriesSchemesList.Add(_kWhatsAppKey);
                }

                _newPermissionsDict[_kQuerySchemesKey] = _queriesSchemesList;
            }

            // Apple transport security
            if (_supportedFeatures.UsesNetworkConnectivity || _supportedFeatures.UsesWebView)
            {
                const string _kATSKey               = "NSAppTransportSecurity";
                const string _karbitraryLoadsKey    = "NSAllowsArbitraryLoads";
                IDictionary  _transportSecurityDict = (IDictionary)infoPlist.GetKeyPathValue(_kATSKey);

                if (_transportSecurityDict == null)
                {
                    _transportSecurityDict = new Dictionary <string, object>();
                }

                _transportSecurityDict[_karbitraryLoadsKey] = true;
                _newPermissionsDict[_kATSKey] = _transportSecurityDict;
            }

            if (_newPermissionsDict.Count == 0)
            {
                return;
            }

            // First create a backup of old data
            string _infoPlistBackupSavePath = GetInfoPlistBackupFilePath(_buildPath);

            infoPlist.Save(_infoPlistBackupSavePath);

            // Now add new permissions
            foreach (string _key in _newPermissionsDict.Keys)
            {
                infoPlist.AddValue(_key, _newPermissionsDict[_key]);
            }

            // Save these changes
            string _infoPlistSavePath = GetInfoPlistFilePath(_buildPath);

            infoPlist.Save(_infoPlistSavePath);
        }
コード例 #12
0
        private static void     GenerateXcodeModFiles()
        {
            string _xcodeModDataCollectionText = File.ReadAllText(kRelativePathXcodeModDataCollectionFile);

            if (_xcodeModDataCollectionText == null)
            {
                return;
            }

            IDictionary _xcodeModDataCollectionDict = JSONUtility.FromJSON(_xcodeModDataCollectionText) as IDictionary;

            ApplicationSettings.Features      _supportedFeatures      = NPSettings.Application.SupportedFeatures;
            ApplicationSettings.AddonServices _supportedAddonServices = NPSettings.Application.SupportedAddonServices;

            // Create mod file related to supported features
            ExtractAndSerializeXcodeModInfo(_xcodeModDataCollectionDict, kModKeyCommon, kRelativePathIOSNativeCodeFolder);

            if (_supportedFeatures.UsesAddressBook)
            {
                ExtractAndSerializeXcodeModInfo(_xcodeModDataCollectionDict, kModKeyAddressBook, kRelativePathIOSNativeCodeFolder);
            }

            if (_supportedFeatures.UsesBilling)
            {
                ExtractAndSerializeXcodeModInfo(_xcodeModDataCollectionDict, kModKeyBilling, kRelativePathIOSNativeCodeFolder);
            }

            if (_supportedFeatures.UsesCloudServices)
            {
                ExtractAndSerializeXcodeModInfo(_xcodeModDataCollectionDict, kModKeyCloudServices, kRelativePathIOSNativeCodeFolder);
            }

            if (_supportedFeatures.UsesGameServices)
            {
                ExtractAndSerializeXcodeModInfo(_xcodeModDataCollectionDict, kModKeyGameServices, kRelativePathIOSNativeCodeFolder);
            }

            if (_supportedFeatures.UsesMediaLibrary)
            {
                ExtractAndSerializeXcodeModInfo(_xcodeModDataCollectionDict, kModKeyMediaLibrary, kRelativePathIOSNativeCodeFolder);
            }

            if (_supportedFeatures.UsesNetworkConnectivity)
            {
                ExtractAndSerializeXcodeModInfo(_xcodeModDataCollectionDict, kModKeyNetworkConnectivity, kRelativePathIOSNativeCodeFolder);
            }

            if (_supportedFeatures.UsesNotificationService)
            {
                ExtractAndSerializeXcodeModInfo(_xcodeModDataCollectionDict, kModKeyNotification, kRelativePathIOSNativeCodeFolder);
            }

            if (_supportedFeatures.UsesSharing)
            {
                ExtractAndSerializeXcodeModInfo(_xcodeModDataCollectionDict, kModKeySharing, kRelativePathIOSNativeCodeFolder);
            }

            if (_supportedFeatures.UsesTwitter)
            {
                ExtractAndSerializeXcodeModInfo(_xcodeModDataCollectionDict, kModKeyTwitter, kRelativePathIOSNativeCodeFolder);
                ExtractAndSerializeXcodeModInfo(_xcodeModDataCollectionDict, kModKeyTwitterSDK, kRelativePathNativePluginsSDKFolder);
            }

            if (_supportedFeatures.UsesWebView)
            {
                ExtractAndSerializeXcodeModInfo(_xcodeModDataCollectionDict, kModKeyWebView, kRelativePathIOSNativeCodeFolder);
            }

            // Create mod file related to supported addon features
            if (_supportedAddonServices.UsesSoomlaGrow)
            {
                ExtractAndSerializeXcodeModInfo(_xcodeModDataCollectionDict, kModKeySoomlaGrow, kRelativePathIOSNativeCodeFolder);
            }
        }
コード例 #13
0
 public NPAndroidManifestGenerator()
 {
     m_supportedFeatures = NPSettings.Application.SupportedFeatures;
 }
コード例 #14
0
//		{
//			"Fabric": {
//				"APIKey": "{0}",
//				"Kits": [
//				    {
//					"KitInfo": {
//						"consumerKey": "",
//						"consumerSecret": ""
//					},
//					"KitName": "Twitter"
//				    }
//				    ]
//			}
//		}

        private static void ModifyInfoPlist(string _buildPath)
        {
            Debug.Log("[PostProcessBuild] : ModifyInfoPlist : " + _buildPath);

            ApplicationSettings _applicationSettings = NPSettings.Application;

            ApplicationSettings.Features _supportedFeatures  = NPSettings.Application.SupportedFeatures;
            Dictionary <string, object>  _newPermissionsDict = new Dictionary <string, object>();

#if USES_TWITTER
            // Add twitter info
            if (_supportedFeatures.UsesTwitter)
            {
                const string _kFabricKitRootKey = "Fabric";

                TwitterSettings _twitterSettings = NPSettings.SocialNetworkSettings.TwitterSettings;
                string          _fabricJsonStr   = string.Format(kFabricKitJsonStringFormat, _twitterSettings.ConsumerKey);

                IDictionary _fabricJsonDictionary = (IDictionary)JSONUtility.FromJSON(_fabricJsonStr);
                _newPermissionsDict[_kFabricKitRootKey] = _fabricJsonDictionary[_kFabricKitRootKey];
            }
#endif

            // Add permissions
            if (_supportedFeatures.UsesNotificationService)
            {
#if !UNITY_4
                if (_supportedFeatures.NotificationService.usesRemoteNotification)
                {
                    const string _kUIBackgroundModesKey      = "UIBackgroundModes";
                    const string _kRemoteNotificationProcess = "remote-notification";

                    IList _backgroundModesList = (IList)infoPlist.GetKeyPathValue(_kUIBackgroundModesKey);
                    if (_backgroundModesList == null)
                    {
                        _backgroundModesList = new List <string>();
                    }

                    if (!_backgroundModesList.Contains(_kRemoteNotificationProcess))
                    {
                        _backgroundModesList.Add(_kRemoteNotificationProcess);
                    }

                    _newPermissionsDict[_kUIBackgroundModesKey] = _backgroundModesList;
                }
#endif
            }

            if (_supportedFeatures.UsesGameServices)
            {
                const string _kDeviceCapablitiesKey = "UIRequiredDeviceCapabilities";
                const string _kGameKitKey           = "gamekit";

                IList _deviceCapablitiesList = (IList)infoPlist.GetKeyPathValue(_kDeviceCapablitiesKey);
                if (_deviceCapablitiesList == null)
                {
                    _deviceCapablitiesList = new List <string>();
                }

                if (!_deviceCapablitiesList.Contains(_kGameKitKey))
                {
                    _deviceCapablitiesList.Add(_kGameKitKey);
                }

                _newPermissionsDict[_kDeviceCapablitiesKey] = _deviceCapablitiesList;
            }

            if (_supportedFeatures.UsesSharing)
            {
                const string _kQuerySchemesKey = "LSApplicationQueriesSchemes";
                const string _kWhatsAppKey     = "whatsapp";

                IList _queriesSchemesList = (IList)infoPlist.GetKeyPathValue(_kQuerySchemesKey);
                if (_queriesSchemesList == null)
                {
                    _queriesSchemesList = new List <string>();
                }

                if (!_queriesSchemesList.Contains(_kWhatsAppKey))
                {
                    _queriesSchemesList.Add(_kWhatsAppKey);
                }

                _newPermissionsDict[_kQuerySchemesKey] = _queriesSchemesList;
            }

            if (_supportedFeatures.UsesNetworkConnectivity || _supportedFeatures.UsesWebView)
            {
                const string _kATSKey            = "NSAppTransportSecurity";
                const string _karbitraryLoadsKey = "NSAllowsArbitraryLoads";

                IDictionary _transportSecurityDict = (IDictionary)infoPlist.GetKeyPathValue(_kATSKey);
                if (_transportSecurityDict == null)
                {
                    _transportSecurityDict = new Dictionary <string, object>();
                }

                _transportSecurityDict[_karbitraryLoadsKey] = true;
                _newPermissionsDict[_kATSKey] = _transportSecurityDict;
            }

            // Add privacy info
            const string _kPermissionContacts           = "NSContactsUsageDescription";
            const string _kPermissionCamera             = "NSCameraUsageDescription";
            const string _kPermissionPhotoLibrary       = "NSPhotoLibraryUsageDescription";
            const string _kPermissionModifyPhotoLibrary = "NSPhotoLibraryAddUsageDescription";

            if (_supportedFeatures.UsesAddressBook)
            {
                _newPermissionsDict[_kPermissionContacts] = _applicationSettings.IOS.AddressBookUsagePermissionDescription;
            }

            if (_supportedFeatures.UsesMediaLibrary)
            {
                if (_supportedFeatures.MediaLibrary.usesCamera)
                {
                    _newPermissionsDict[_kPermissionCamera] = _applicationSettings.IOS.CameraUsagePermissionDescription;
                }

                if (_supportedFeatures.MediaLibrary.usesPhotoAlbum)
                {
                    _newPermissionsDict [_kPermissionPhotoLibrary]       = _applicationSettings.IOS.PhotoAlbumUsagePermissionDescription;
                    _newPermissionsDict [_kPermissionModifyPhotoLibrary] = _applicationSettings.IOS.PhotoAlbumModifyUsagePermissionDescription;
                }
            }

            if (_newPermissionsDict.Count == 0)
            {
                return;
            }

            // Create a backup of old plist
            string _infoPlistBackupSavePath = GetInfoPlistBackupFilePath(_buildPath);
            infoPlist.Save(_infoPlistBackupSavePath);

            // Save the plist with new permissions
            foreach (string _key in _newPermissionsDict.Keys)
            {
                infoPlist.AddValue(_key, _newPermissionsDict[_key]);
            }

            string _infoPlistSavePath = GetInfoPlistFilePath(_buildPath);
            infoPlist.Save(_infoPlistSavePath);
        }