Compare commits
No commits in common. "main" and "1.0" have entirely different histories.
11 changed files with 101 additions and 192 deletions
|
@ -8,25 +8,13 @@ EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
Debug|x64 = Debug|x64
|
|
||||||
Debug|x86 = Debug|x86
|
|
||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
Release|x64 = Release|x64
|
|
||||||
Release|x86 = Release|x86
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{D9BE1C6C-1FC3-427E-A9EC-E2D8246C18EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{D9BE1C6C-1FC3-427E-A9EC-E2D8246C18EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{D9BE1C6C-1FC3-427E-A9EC-E2D8246C18EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{D9BE1C6C-1FC3-427E-A9EC-E2D8246C18EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{D9BE1C6C-1FC3-427E-A9EC-E2D8246C18EB}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{D9BE1C6C-1FC3-427E-A9EC-E2D8246C18EB}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{D9BE1C6C-1FC3-427E-A9EC-E2D8246C18EB}.Debug|x86.ActiveCfg = Debug|x86
|
|
||||||
{D9BE1C6C-1FC3-427E-A9EC-E2D8246C18EB}.Debug|x86.Build.0 = Debug|x86
|
|
||||||
{D9BE1C6C-1FC3-427E-A9EC-E2D8246C18EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{D9BE1C6C-1FC3-427E-A9EC-E2D8246C18EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{D9BE1C6C-1FC3-427E-A9EC-E2D8246C18EB}.Release|Any CPU.Build.0 = Release|Any CPU
|
{D9BE1C6C-1FC3-427E-A9EC-E2D8246C18EB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{D9BE1C6C-1FC3-427E-A9EC-E2D8246C18EB}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{D9BE1C6C-1FC3-427E-A9EC-E2D8246C18EB}.Release|x64.Build.0 = Release|x64
|
|
||||||
{D9BE1C6C-1FC3-427E-A9EC-E2D8246C18EB}.Release|x86.ActiveCfg = Release|x86
|
|
||||||
{D9BE1C6C-1FC3-427E-A9EC-E2D8246C18EB}.Release|x86.Build.0 = Release|x86
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<configuration>
|
<configuration>
|
||||||
<startup>
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
|
||||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup>
|
</startup>
|
||||||
</configuration>
|
</configuration>
|
|
@ -15,7 +15,6 @@
|
||||||
<Deterministic>true</Deterministic>
|
<Deterministic>true</Deterministic>
|
||||||
<NuGetPackageImportStamp>
|
<NuGetPackageImportStamp>
|
||||||
</NuGetPackageImportStamp>
|
</NuGetPackageImportStamp>
|
||||||
<TargetFrameworkProfile />
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
@ -26,7 +25,6 @@
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
@ -36,46 +34,6 @@
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup>
|
|
||||||
<ApplicationIcon>appmanager.ico</ApplicationIcon>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<OutputPath>bin\x64\Debug\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
|
||||||
<LangVersion>7.3</LangVersion>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
|
||||||
<OutputPath>bin\x64\Release\</OutputPath>
|
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
|
||||||
<LangVersion>7.3</LangVersion>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<LangVersion>7.3</LangVersion>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
|
||||||
<OutputPath>bin\x86\Release\</OutputPath>
|
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<LangVersion>7.3</LangVersion>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="iMobileDevice-net, Version=1.3.0.0, Culture=neutral, PublicKeyToken=040ae19651fac98a, processorArchitecture=MSIL">
|
<Reference Include="iMobileDevice-net, Version=1.3.0.0, Culture=neutral, PublicKeyToken=040ae19651fac98a, processorArchitecture=MSIL">
|
||||||
|
@ -141,9 +99,6 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="App.config" />
|
<None Include="App.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<Resource Include="appmanager.ico" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<Import Project="..\packages\iMobileDevice-net.1.3.17\build\net45\iMobileDevice-net.targets" Condition="Exists('..\packages\iMobileDevice-net.1.3.17\build\net45\iMobileDevice-net.targets')" />
|
<Import Project="..\packages\iMobileDevice-net.1.3.17\build\net45\iMobileDevice-net.targets" Condition="Exists('..\packages\iMobileDevice-net.1.3.17\build\net45\iMobileDevice-net.targets')" />
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
|
|
|
@ -7,12 +7,9 @@
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
Title="AppManager (No device)" Height="550" Width="450" MinHeight="550" MinWidth="450" Loaded="Event_window_Loaded">
|
Title="AppManager (No device)" Height="550" Width="450" MinHeight="550" MinWidth="450" Loaded="Event_window_Loaded">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Menu VerticalAlignment="Top" Height="24">
|
<Button x:Name="installNewAppButton" Content="Install new" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="20" Width="75" IsEnabled="False" Click="Event_installNewAppButton_Click"/>
|
||||||
<MenuItem x:Name="installNewAppButton" Header="_Install new" IsEnabled="False" Click="Event_installNewAppButton_Click" Height="24"/>
|
<Button x:Name="removeSelectedAppButton" Content="Remove selected" HorizontalAlignment="Left" Margin="90,10,0,0" VerticalAlignment="Top" Height="20" Width="100" IsEnabled="False" Click="Event_removeSelectedAppButton_Click"/>
|
||||||
<MenuItem x:Name="removeSelectedAppButton" Header="Remove selecte_d" IsEnabled="False" Click="Event_removeSelectedAppButton_Click" Height="24"/>
|
<GroupBox Header="Installed Apps" Margin="10,35,10,250">
|
||||||
<MenuItem x:Name="refreshAppListButton" Header="_Refresh List" IsEnabled="False" Click="Event_refreshAppListButton_Click" Height="24"/>
|
|
||||||
</Menu>
|
|
||||||
<GroupBox Header="Installed Apps" Margin="10,29,10,245">
|
|
||||||
<Grid>
|
<Grid>
|
||||||
<ListView x:Name="installedAppsListView" d:ItemsSource="{d:SampleData ItemCount=5}">
|
<ListView x:Name="installedAppsListView" d:ItemsSource="{d:SampleData ItemCount=5}">
|
||||||
<ListView.View>
|
<ListView.View>
|
||||||
|
@ -25,7 +22,7 @@
|
||||||
</ListView>
|
</ListView>
|
||||||
</Grid>
|
</Grid>
|
||||||
</GroupBox>
|
</GroupBox>
|
||||||
<GroupBox Header="Log" Margin="10,0,10,10" VerticalAlignment="Bottom" Height="230">
|
<GroupBox Header="Log" Margin="10,0,10,10" VerticalAlignment="Bottom" Height="235">
|
||||||
<Grid>
|
<Grid>
|
||||||
<ListBox x:Name="logListBox" d:ItemsSource="{d:SampleData ItemCount=5}" FontFamily="Lucida Console">
|
<ListBox x:Name="logListBox" d:ItemsSource="{d:SampleData ItemCount=5}" FontFamily="Lucida Console">
|
||||||
<ListBox.ItemTemplate>
|
<ListBox.ItemTemplate>
|
||||||
|
@ -36,5 +33,7 @@
|
||||||
</ListBox>
|
</ListBox>
|
||||||
</Grid>
|
</Grid>
|
||||||
</GroupBox>
|
</GroupBox>
|
||||||
|
<Button x:Name="refreshAppListButton" Content="Refresh List" HorizontalAlignment="Left" Margin="195,10,0,0" VerticalAlignment="Top" Height="20" Width="75" IsEnabled="False" Click="Event_refreshAppListButton_Click"/>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</Window>
|
</Window>
|
||||||
|
|
|
@ -7,8 +7,6 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Timers;
|
using System.Timers;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
|
@ -29,7 +27,6 @@ namespace AppManager
|
||||||
private string deviceName;
|
private string deviceName;
|
||||||
private string deviceVersion;
|
private string deviceVersion;
|
||||||
private string deviceUDID = "";
|
private string deviceUDID = "";
|
||||||
bool madeTempFile = false;
|
|
||||||
|
|
||||||
private string ipaPath = "";
|
private string ipaPath = "";
|
||||||
private string selectedBundleID = "";
|
private string selectedBundleID = "";
|
||||||
|
@ -82,7 +79,10 @@ namespace AppManager
|
||||||
new Action(
|
new Action(
|
||||||
delegate ()
|
delegate ()
|
||||||
{
|
{
|
||||||
Log("Device disconnected.");
|
logListBox.Items.Add("Device disconnected.");
|
||||||
|
var border = (Border)VisualTreeHelper.GetChild(logListBox, 0);
|
||||||
|
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
||||||
|
scrollViewer.ScrollToBottom();
|
||||||
installedAppsListView.ItemsSource = null;
|
installedAppsListView.ItemsSource = null;
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
|
@ -100,11 +100,14 @@ namespace AppManager
|
||||||
new Action(
|
new Action(
|
||||||
delegate ()
|
delegate ()
|
||||||
{
|
{
|
||||||
Log("Connecting to device...");
|
logListBox.Items.Add("Connecting to device...");
|
||||||
|
var border = (Border)VisualTreeHelper.GetChild(logListBox, 0);
|
||||||
|
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
||||||
|
scrollViewer.ScrollToBottom();
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
idevice.idevice_new(out deviceHandle, udids[0]).ThrowOnError();
|
idevice.idevice_new(out deviceHandle, udids[0]).ThrowOnError();
|
||||||
lockdown.lockdownd_client_new_with_handshake(deviceHandle, out lockdownHandle, "AppManager").ThrowOnError();
|
lockdown.lockdownd_client_new_with_handshake(deviceHandle, out lockdownHandle, "absl").ThrowOnError();
|
||||||
|
|
||||||
// get device info
|
// get device info
|
||||||
lockdown.lockdownd_get_device_name(lockdownHandle, out deviceName).ThrowOnError();
|
lockdown.lockdownd_get_device_name(lockdownHandle, out deviceName).ThrowOnError();
|
||||||
|
@ -117,18 +120,18 @@ namespace AppManager
|
||||||
|
|
||||||
deviceUDID = udids[0];
|
deviceUDID = udids[0];
|
||||||
|
|
||||||
|
Task.Run(new Action(GetAppsThread));
|
||||||
|
|
||||||
Dispatcher.Invoke(
|
Dispatcher.Invoke(
|
||||||
System.Windows.Threading.DispatcherPriority.Normal,
|
System.Windows.Threading.DispatcherPriority.Normal,
|
||||||
new Action(
|
new Action(
|
||||||
async delegate ()
|
delegate ()
|
||||||
{
|
{
|
||||||
|
installedAppsListView.ItemsSource = appList;
|
||||||
window.Title = $"AppManager ({deviceName}, {deviceType}, iOS {deviceVersion})";
|
window.Title = $"AppManager ({deviceName}, {deviceType}, iOS {deviceVersion})";
|
||||||
installNewAppButton.IsEnabled = true;
|
installNewAppButton.IsEnabled = true;
|
||||||
removeSelectedAppButton.IsEnabled = true;
|
removeSelectedAppButton.IsEnabled = true;
|
||||||
refreshAppListButton.IsEnabled = true;
|
refreshAppListButton.IsEnabled = true;
|
||||||
await Task.Run(new Action(GetAppsThread));
|
|
||||||
installedAppsListView.ItemsSource = null;
|
|
||||||
installedAppsListView.ItemsSource = appList;
|
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
gotDeviceInfo = true;
|
gotDeviceInfo = true;
|
||||||
|
@ -136,14 +139,19 @@ namespace AppManager
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
deviceUDID = "";
|
deviceUDID = "";
|
||||||
Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(
|
Dispatcher.Invoke(
|
||||||
|
System.Windows.Threading.DispatcherPriority.Normal,
|
||||||
|
new Action(
|
||||||
delegate ()
|
delegate ()
|
||||||
{
|
{
|
||||||
installNewAppButton.IsEnabled = false;
|
installNewAppButton.IsEnabled = false;
|
||||||
removeSelectedAppButton.IsEnabled = false;
|
removeSelectedAppButton.IsEnabled = false;
|
||||||
refreshAppListButton.IsEnabled = false;
|
refreshAppListButton.IsEnabled = false;
|
||||||
window.Title = $"AppManager (No device)";
|
window.Title = $"AppManager (No device)";
|
||||||
Log($"Could not connect to device: {ex.Message}");
|
logListBox.Items.Add($"Could not connect to device: {ex.Message}");
|
||||||
|
var border = (Border)VisualTreeHelper.GetChild(logListBox, 0);
|
||||||
|
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
||||||
|
scrollViewer.ScrollToBottom();
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
gotDeviceInfo = false; // never should matter but just in case
|
gotDeviceInfo = false; // never should matter but just in case
|
||||||
|
@ -163,19 +171,12 @@ namespace AppManager
|
||||||
|
|
||||||
openIPAFile.ShowDialog();
|
openIPAFile.ShowDialog();
|
||||||
|
|
||||||
string origIpaPath = openIPAFile.FileName;
|
ipaPath = openIPAFile.FileName;
|
||||||
string fixedIpaPath = Regex.Replace(origIpaPath, @"[^\u0000-\u007F]+", "_");
|
|
||||||
if (origIpaPath == fixedIpaPath) { ipaPath = origIpaPath; madeTempFile = false; }
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Log("Filename contains invalid characters. Making duplicate");
|
|
||||||
madeTempFile = true;
|
|
||||||
Debug.WriteLine(origIpaPath);
|
|
||||||
File.Copy(origIpaPath, fixedIpaPath);
|
|
||||||
ipaPath = fixedIpaPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
Log($"Attempting install of {ipaPath}");
|
logListBox.Items.Add($"Attempting install of {ipaPath}");
|
||||||
|
var border = (Border)VisualTreeHelper.GetChild(logListBox, 0);
|
||||||
|
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
||||||
|
scrollViewer.ScrollToBottom();
|
||||||
Task.Run(new Action(InstallAppThread));
|
Task.Run(new Action(InstallAppThread));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,21 +184,22 @@ namespace AppManager
|
||||||
{
|
{
|
||||||
selectedBundleID = ((DeviceApp)installedAppsListView.SelectedItem).CFBundleIdentifier;
|
selectedBundleID = ((DeviceApp)installedAppsListView.SelectedItem).CFBundleIdentifier;
|
||||||
|
|
||||||
Log($"Attempting removal of of {selectedBundleID}");
|
logListBox.Items.Add($"Attempting removal of of {selectedBundleID}");
|
||||||
|
var border = (Border)VisualTreeHelper.GetChild(logListBox, 0);
|
||||||
|
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
||||||
|
scrollViewer.ScrollToBottom();
|
||||||
Task.Run(new Action(RemoveAppThread));
|
Task.Run(new Action(RemoveAppThread));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Event_refreshAppListButton_Click(object sender, RoutedEventArgs e)
|
private void Event_refreshAppListButton_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(
|
Task.Run(new Action(GetAppsThread));
|
||||||
async delegate ()
|
|
||||||
{
|
|
||||||
await Task.Run(new Action(GetAppsThread));
|
|
||||||
}
|
|
||||||
));
|
|
||||||
installedAppsListView.ItemsSource = null;
|
installedAppsListView.ItemsSource = null;
|
||||||
installedAppsListView.ItemsSource = appList;
|
installedAppsListView.ItemsSource = appList;
|
||||||
Log("Refreshed.");
|
logListBox.Items.Add("Refreshed.");
|
||||||
|
var border = (Border)VisualTreeHelper.GetChild(logListBox, 0);
|
||||||
|
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
||||||
|
scrollViewer.ScrollToBottom();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RemoveAppThread()
|
private void RemoveAppThread()
|
||||||
|
@ -221,18 +223,19 @@ namespace AppManager
|
||||||
if (line == null || line.Trim() == "") line = proc.StandardError.ReadLine();
|
if (line == null || line.Trim() == "") line = proc.StandardError.ReadLine();
|
||||||
Dispatcher.Invoke(() =>
|
Dispatcher.Invoke(() =>
|
||||||
{
|
{
|
||||||
Log(line);
|
logListBox.Items.Add(line);
|
||||||
|
var border = (Border)VisualTreeHelper.GetChild(logListBox, 0);
|
||||||
|
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
||||||
|
scrollViewer.ScrollToBottom();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Dispatcher.Invoke(() =>
|
Dispatcher.Invoke(() =>
|
||||||
{
|
{
|
||||||
Log($"Process ended with code {proc.ExitCode} {(proc.ExitCode == 0 ? "(Success)" : "")}");
|
logListBox.Items.Add($"Process ended with code {proc.ExitCode} {(proc.ExitCode == 0 ? "(Success)" : "")}");
|
||||||
Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(
|
var border = (Border)VisualTreeHelper.GetChild(logListBox, 0);
|
||||||
async delegate ()
|
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
||||||
{
|
scrollViewer.ScrollToBottom();
|
||||||
await Task.Run(new Action(GetAppsThread));
|
Task.Run(new Action(GetAppsThread));
|
||||||
}
|
|
||||||
));
|
|
||||||
installedAppsListView.ItemsSource = null;
|
installedAppsListView.ItemsSource = null;
|
||||||
installedAppsListView.ItemsSource = appList;
|
installedAppsListView.ItemsSource = appList;
|
||||||
});
|
});
|
||||||
|
@ -259,26 +262,22 @@ namespace AppManager
|
||||||
if (line == null || line.Trim() == "") line = proc.StandardError.ReadLine();
|
if (line == null || line.Trim() == "") line = proc.StandardError.ReadLine();
|
||||||
Dispatcher.Invoke(() =>
|
Dispatcher.Invoke(() =>
|
||||||
{
|
{
|
||||||
Log(line);
|
logListBox.Items.Add(line);
|
||||||
|
var border = (Border)VisualTreeHelper.GetChild(logListBox, 0);
|
||||||
|
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
||||||
|
scrollViewer.ScrollToBottom();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Dispatcher.Invoke(() =>
|
Dispatcher.Invoke(() =>
|
||||||
{
|
{
|
||||||
Log($"Process ended with code {proc.ExitCode} {(proc.ExitCode == 0 ? "(Success)" : "")}");
|
logListBox.Items.Add($"Process ended with code {proc.ExitCode} {(proc.ExitCode == 0 ? "(Success)" : "")}");
|
||||||
Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(
|
var border = (Border)VisualTreeHelper.GetChild(logListBox, 0);
|
||||||
async delegate ()
|
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
||||||
{
|
scrollViewer.ScrollToBottom();
|
||||||
await Task.Run(new Action(GetAppsThread));
|
Task.Run(new Action(GetAppsThread));
|
||||||
}
|
|
||||||
));
|
|
||||||
installedAppsListView.ItemsSource = null;
|
installedAppsListView.ItemsSource = null;
|
||||||
installedAppsListView.ItemsSource = appList;
|
installedAppsListView.ItemsSource = appList;
|
||||||
});
|
});
|
||||||
if (madeTempFile)
|
|
||||||
{
|
|
||||||
File.Delete(ipaPath);
|
|
||||||
madeTempFile = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GetAppsThread()
|
private void GetAppsThread()
|
||||||
|
@ -310,14 +309,6 @@ namespace AppManager
|
||||||
}
|
}
|
||||||
proc.WaitForExit();
|
proc.WaitForExit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Log(string msg)
|
|
||||||
{
|
|
||||||
logListBox.Items.Add(msg);
|
|
||||||
var border = (Border)VisualTreeHelper.GetChild(logListBox, 0);
|
|
||||||
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
|
||||||
scrollViewer.ScrollToBottom();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class DeviceApp
|
public class DeviceApp
|
||||||
|
|
30
AppManager/Properties/Resources.Designer.cs
generated
30
AppManager/Properties/Resources.Designer.cs
generated
|
@ -8,8 +8,8 @@
|
||||||
// </auto-generated>
|
// </auto-generated>
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
namespace AppManager.Properties {
|
namespace AppManager.Properties
|
||||||
using System;
|
{
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -19,26 +19,31 @@ namespace AppManager.Properties {
|
||||||
// class via a tool like ResGen or Visual Studio.
|
// class via a tool like ResGen or Visual Studio.
|
||||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
// with the /str option, or rebuild your VS project.
|
// with the /str option, or rebuild your VS project.
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
internal class Resources {
|
internal class Resources
|
||||||
|
{
|
||||||
|
|
||||||
private static global::System.Resources.ResourceManager resourceMan;
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
internal Resources() {
|
internal Resources()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns the cached ResourceManager instance used by this class.
|
/// Returns the cached ResourceManager instance used by this class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
internal static global::System.Resources.ResourceManager ResourceManager
|
||||||
get {
|
{
|
||||||
if (object.ReferenceEquals(resourceMan, null)) {
|
get
|
||||||
|
{
|
||||||
|
if ((resourceMan == null))
|
||||||
|
{
|
||||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AppManager.Properties.Resources", typeof(Resources).Assembly);
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AppManager.Properties.Resources", typeof(Resources).Assembly);
|
||||||
resourceMan = temp;
|
resourceMan = temp;
|
||||||
}
|
}
|
||||||
|
@ -51,11 +56,14 @@ namespace AppManager.Properties {
|
||||||
/// resource lookups using this strongly typed resource class.
|
/// resource lookups using this strongly typed resource class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
internal static global::System.Globalization.CultureInfo Culture {
|
internal static global::System.Globalization.CultureInfo Culture
|
||||||
get {
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
return resourceCulture;
|
return resourceCulture;
|
||||||
}
|
}
|
||||||
set {
|
set
|
||||||
|
{
|
||||||
resourceCulture = value;
|
resourceCulture = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
14
AppManager/Properties/Settings.Designer.cs
generated
14
AppManager/Properties/Settings.Designer.cs
generated
|
@ -8,17 +8,21 @@
|
||||||
// </auto-generated>
|
// </auto-generated>
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
namespace AppManager.Properties {
|
namespace AppManager.Properties
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.9.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
|
||||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
|
||||||
|
{
|
||||||
|
|
||||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
|
||||||
public static Settings Default {
|
public static Settings Default
|
||||||
get {
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
return defaultInstance;
|
return defaultInstance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 138 KiB |
21
LICENSE
21
LICENSE
|
@ -1,21 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2022-2024 KawaiiZenbo
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
15
README.md
15
README.md
|
@ -1,15 +0,0 @@
|
||||||
# AppManager
|
|
||||||
GUI for ideviceinstaller for Windows
|
|
||||||
This program does NOT sideload applications used for jailbreaking devices (Phoenix, h3lix, Unc0ver, Electra)
|
|
||||||
|
|
||||||
## Requirements
|
|
||||||
iOS Device (iOS 2 and up should work)
|
|
||||||
AppSync (if installing unsigned/cracked apps)
|
|
||||||
Windows 7 or newer
|
|
||||||
.NET Framework 4.5 or newer
|
|
||||||
iTunes 10 or newer (NOT from Microsoft store, ensure Apple Devices is not installed)
|
|
||||||
|
|
||||||
If you find this tool useful, please consider donating to us on Ko-Fi
|
|
||||||
https://ko-fi.com/kawaiizenbo
|
|
||||||
|
|
||||||

|
|
BIN
images/new.png
BIN
images/new.png
Binary file not shown.
Before Width: | Height: | Size: 27 KiB |
Loading…
Add table
Reference in a new issue