Sometime O365 SharePoint Online will not allow uninstall app hosted. It will give you error as “Some things went wrong” or “Unable to Uninstall” and gives you message something like e-Discovery or retention polity contact Administrator.

Such case if you try to deploy app using Visual Studio then you will get error:

here 2 errors will display

Script to Uninstall:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")
Function Get-ClientContext([string]$Url,[string]$UserName,[string]$Password)
{
    $SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force
    $context = New-Object Microsoft.SharePoint.Client.ClientContext($Url)
    $context.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName, $SecurePassword)
    return $context
}

Function Uninstall-AppInstance([Microsoft.SharePoint.Client.ClientContext]$Context,[Guid]$AppInstanceId)
{
    $appInst = $Context.Web.GetAppInstanceById($AppInstanceId)
    $appInst.Uninstall()
    $context.ExecuteQuery()
 }

$UserName = "rijwan@sharepoint.com"
$Password = Read-Host -Prompt "Enter the password"    
$Url = "https://rijwan.sharepoint.com/"
$AppInstanceid = New-Object Guid("XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")  #specify App Instance Id here

$context = Get-ClientContext -Url $Url -UserName $UserName -Password $Password
Uninstall-AppInstance -Context $context -AppInstanceId $AppInstanceid
$context.Dispose()

How to get App Instance Id:

Click on App setting (…)AppID.png

Click Details of App

Check the URL: (Ex: https://rijwan.sharepoint.com/sites/appdev/_layouts/15/AppMonitoringDetails.aspx?AppInstanceId=ccf0108c-f95c-489f-91fe-b1345a7f27de)

App Instance ID: ccf0108c-f95c-489f-91fe-b1345a7f27de

This way we can get App Instance ID and using above PS script let us delete app.