Patchup Update
This commit is contained in:
parent
8722fe8312
commit
dbcdd12520
10 changed files with 160 additions and 104 deletions
|
@ -8,13 +8,25 @@ 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" />
|
|
||||||
</startup>
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
<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>
|
||||||
|
@ -25,6 +26,7 @@
|
||||||
<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>
|
||||||
|
@ -34,6 +36,46 @@
|
||||||
<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">
|
||||||
|
@ -99,6 +141,9 @@
|
||||||
<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,9 +7,12 @@
|
||||||
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>
|
||||||
<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"/>
|
<Menu VerticalAlignment="Top" 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="installNewAppButton" Header="_Install new" IsEnabled="False" Click="Event_installNewAppButton_Click" Height="24"/>
|
||||||
<GroupBox Header="Installed Apps" Margin="10,35,10,250">
|
<MenuItem x:Name="removeSelectedAppButton" Header="Remove selecte_d" IsEnabled="False" Click="Event_removeSelectedAppButton_Click" Height="24"/>
|
||||||
|
<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>
|
||||||
|
@ -22,7 +25,7 @@
|
||||||
</ListView>
|
</ListView>
|
||||||
</Grid>
|
</Grid>
|
||||||
</GroupBox>
|
</GroupBox>
|
||||||
<GroupBox Header="Log" Margin="10,0,10,10" VerticalAlignment="Bottom" Height="235">
|
<GroupBox Header="Log" Margin="10,0,10,10" VerticalAlignment="Bottom" Height="230">
|
||||||
<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>
|
||||||
|
@ -33,7 +36,5 @@
|
||||||
</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,6 +7,8 @@ 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;
|
||||||
|
@ -27,6 +29,7 @@ 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 = "";
|
||||||
|
@ -79,10 +82,7 @@ namespace AppManager
|
||||||
new Action(
|
new Action(
|
||||||
delegate ()
|
delegate ()
|
||||||
{
|
{
|
||||||
logListBox.Items.Add("Device disconnected.");
|
Log("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,14 +100,11 @@ namespace AppManager
|
||||||
new Action(
|
new Action(
|
||||||
delegate ()
|
delegate ()
|
||||||
{
|
{
|
||||||
logListBox.Items.Add("Connecting to device...");
|
Log("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, "absl").ThrowOnError();
|
lockdown.lockdownd_client_new_with_handshake(deviceHandle, out lockdownHandle, "AppManager").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();
|
||||||
|
@ -120,18 +117,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(
|
||||||
delegate ()
|
async 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;
|
||||||
|
@ -139,19 +136,14 @@ namespace AppManager
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
deviceUDID = "";
|
deviceUDID = "";
|
||||||
Dispatcher.Invoke(
|
Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(
|
||||||
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)";
|
||||||
logListBox.Items.Add($"Could not connect to device: {ex.Message}");
|
Log($"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
|
||||||
|
@ -171,12 +163,19 @@ namespace AppManager
|
||||||
|
|
||||||
openIPAFile.ShowDialog();
|
openIPAFile.ShowDialog();
|
||||||
|
|
||||||
ipaPath = openIPAFile.FileName;
|
string origIpaPath = 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;
|
||||||
|
}
|
||||||
|
|
||||||
logListBox.Items.Add($"Attempting install of {ipaPath}");
|
Log($"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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,22 +183,21 @@ namespace AppManager
|
||||||
{
|
{
|
||||||
selectedBundleID = ((DeviceApp)installedAppsListView.SelectedItem).CFBundleIdentifier;
|
selectedBundleID = ((DeviceApp)installedAppsListView.SelectedItem).CFBundleIdentifier;
|
||||||
|
|
||||||
logListBox.Items.Add($"Attempting removal of of {selectedBundleID}");
|
Log($"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)
|
||||||
{
|
{
|
||||||
Task.Run(new Action(GetAppsThread));
|
Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(
|
||||||
|
async delegate ()
|
||||||
|
{
|
||||||
|
await Task.Run(new Action(GetAppsThread));
|
||||||
|
}
|
||||||
|
));
|
||||||
installedAppsListView.ItemsSource = null;
|
installedAppsListView.ItemsSource = null;
|
||||||
installedAppsListView.ItemsSource = appList;
|
installedAppsListView.ItemsSource = appList;
|
||||||
logListBox.Items.Add("Refreshed.");
|
Log("Refreshed.");
|
||||||
var border = (Border)VisualTreeHelper.GetChild(logListBox, 0);
|
|
||||||
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
|
||||||
scrollViewer.ScrollToBottom();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RemoveAppThread()
|
private void RemoveAppThread()
|
||||||
|
@ -223,19 +221,18 @@ namespace AppManager
|
||||||
if (line == null || line.Trim() == "") line = proc.StandardError.ReadLine();
|
if (line == null || line.Trim() == "") line = proc.StandardError.ReadLine();
|
||||||
Dispatcher.Invoke(() =>
|
Dispatcher.Invoke(() =>
|
||||||
{
|
{
|
||||||
logListBox.Items.Add(line);
|
Log(line);
|
||||||
var border = (Border)VisualTreeHelper.GetChild(logListBox, 0);
|
|
||||||
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
|
||||||
scrollViewer.ScrollToBottom();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Dispatcher.Invoke(() =>
|
Dispatcher.Invoke(() =>
|
||||||
{
|
{
|
||||||
logListBox.Items.Add($"Process ended with code {proc.ExitCode} {(proc.ExitCode == 0 ? "(Success)" : "")}");
|
Log($"Process ended with code {proc.ExitCode} {(proc.ExitCode == 0 ? "(Success)" : "")}");
|
||||||
var border = (Border)VisualTreeHelper.GetChild(logListBox, 0);
|
Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(
|
||||||
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
async delegate ()
|
||||||
scrollViewer.ScrollToBottom();
|
{
|
||||||
Task.Run(new Action(GetAppsThread));
|
await Task.Run(new Action(GetAppsThread));
|
||||||
|
}
|
||||||
|
));
|
||||||
installedAppsListView.ItemsSource = null;
|
installedAppsListView.ItemsSource = null;
|
||||||
installedAppsListView.ItemsSource = appList;
|
installedAppsListView.ItemsSource = appList;
|
||||||
});
|
});
|
||||||
|
@ -262,22 +259,26 @@ namespace AppManager
|
||||||
if (line == null || line.Trim() == "") line = proc.StandardError.ReadLine();
|
if (line == null || line.Trim() == "") line = proc.StandardError.ReadLine();
|
||||||
Dispatcher.Invoke(() =>
|
Dispatcher.Invoke(() =>
|
||||||
{
|
{
|
||||||
logListBox.Items.Add(line);
|
Log(line);
|
||||||
var border = (Border)VisualTreeHelper.GetChild(logListBox, 0);
|
|
||||||
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
|
||||||
scrollViewer.ScrollToBottom();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Dispatcher.Invoke(() =>
|
Dispatcher.Invoke(() =>
|
||||||
{
|
{
|
||||||
logListBox.Items.Add($"Process ended with code {proc.ExitCode} {(proc.ExitCode == 0 ? "(Success)" : "")}");
|
Log($"Process ended with code {proc.ExitCode} {(proc.ExitCode == 0 ? "(Success)" : "")}");
|
||||||
var border = (Border)VisualTreeHelper.GetChild(logListBox, 0);
|
Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(
|
||||||
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
async delegate ()
|
||||||
scrollViewer.ScrollToBottom();
|
{
|
||||||
Task.Run(new Action(GetAppsThread));
|
await 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()
|
||||||
|
@ -309,6 +310,14 @@ 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
|
||||||
|
|
44
AppManager/Properties/Resources.Designer.cs
generated
44
AppManager/Properties/Resources.Designer.cs
generated
|
@ -8,10 +8,10 @@
|
||||||
// </auto-generated>
|
// </auto-generated>
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
namespace AppManager.Properties
|
namespace AppManager.Properties {
|
||||||
{
|
using System;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -19,51 +19,43 @@ 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", "4.0.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.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 {
|
||||||
get
|
if (object.ReferenceEquals(resourceMan, null)) {
|
||||||
{
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
return resourceMan;
|
return resourceMan;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Overrides the current thread's CurrentUICulture property for all
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||||
/// 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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
22
AppManager/Properties/Settings.Designer.cs
generated
22
AppManager/Properties/Settings.Designer.cs
generated
|
@ -8,21 +8,17 @@
|
||||||
// </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", "11.0.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.9.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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
BIN
AppManager/appmanager.ico
Normal file
BIN
AppManager/appmanager.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 138 KiB |
2
LICENSE
2
LICENSE
|
@ -1,6 +1,6 @@
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2022 KawaiiZenbo
|
Copyright (c) 2022-2024 KawaiiZenbo
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
|
@ -3,9 +3,10 @@ GUI for ideviceinstaller for Windows
|
||||||
This program does NOT sideload applications used for jailbreaking devices (Phoenix, h3lix, Unc0ver, Electra)
|
This program does NOT sideload applications used for jailbreaking devices (Phoenix, h3lix, Unc0ver, Electra)
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
iOS Device (iOS 2 through 15 should work)
|
iOS Device (iOS 2 through 17 should work)
|
||||||
|
AppSync (if installing unsigned/cracked apps)
|
||||||
Windows 7 or newer
|
Windows 7 or newer
|
||||||
.NET Framework 4.5 or newer
|
.NET Framework 4.5 or newer
|
||||||
iTunes 10 or newer (NOT from Microsoft store)
|
iTunes 10 or newer (NOT from Microsoft store, ensure Apple Devices is not installed)
|
||||||
|
|
||||||

|

|
||||||
|
|
Loading…
Add table
Reference in a new issue