Merge branch 'main' into dev

This commit is contained in:
uncor3
2026-02-25 08:02:43 +00:00
11 changed files with 353 additions and 16 deletions
+4 -3
View File
@@ -11,9 +11,10 @@ assignees: ''
A clear and concise description of what the bug is.
**OS and iDevice info (please complete the following information):**
- Version [e.g. 22]
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- iDescriptor Version [e.g. v2.0.0]
- Device: [e.g. iPhone 14 - iOS26]
- Is it the AppImage version ? (Linux only): [Yes/No]
- OS: [e.g. Windows 11, macOS 14, Arch Linux]
**To Reproduce**
Steps to reproduce the behavior:
+1 -1
View File
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.16)
project(iDescriptor VERSION 0.2.0 LANGUAGES CXX)
project(iDescriptor VERSION 0.3.0 LANGUAGES CXX)
if(WIN32)
set(PKG_CONFIG_EXECUTABLE "C:/msys64/mingw64/bin/pkg-config.exe" CACHE FILEPATH "" FORCE)
+38 -11
View File
@@ -76,7 +76,7 @@
Open the `.dmg` and drag iDescriptor to Applications.
<br/>
After moving the app to Applications, run the code below
After moving the app to Applications, run the code below
<br/>
```shell
@@ -111,14 +111,28 @@ make sure to do "sudo pacman -Syu" otherwise it's not going to find libimobilede
<img src="./resources/repo/crossplatform.png"><br/>
</p>
</br>
</br>
</br>
## Good News!
### iDescriptor v0.4.0 will feature **WIRELESS CONNECTION** support!
Learn more about our roadmap [here](#roadmap).
</br>
</br>
</br>
## Features
### Connection
| Feature | Status | Notes |
| --------------------------- | -------------------- | --------------------------------------------- |
| USB Connection | ✅ Implemented | Fully supported on Windows, macOS, and Linux. |
| Wireless Connection (WiFi) | ⚠️ Under development | - |
| Feature | Status | Notes |
| ------------------- | -------------------- | ------------------------------------------------------------- |
| USB Connection | ✅ Implemented | Fully supported on Windows, macOS, and Linux. |
| Wireless Connection | ⚠️ Under Development | Currently under development, planned to be released in v0.4.0 |
### Tools
@@ -249,16 +263,18 @@ You might get this pop-up on any platform this is because this app uses secure b
## Become a Sponsor
Please support us at <a href="https://opencollective.com/idescriptor">
<div style="flex-direction: row; align-items: center; display: flex; gap: 10px;">
<span>You can become a sponsor from GitHub Sponsors or</span> <a href="https://opencollective.com/idescriptor">
<img src="https://img.shields.io/badge/OpenCollective-1F87FF?style=for-the-badge&logo=OpenCollective&logoColor=white" alt="AppImage"/>
</a>
</div>
## Thanks
- [libimobiledevice](https://libimobiledevice.org/)
- [ipatool](https://github.com/majd/ipatool) - We use a modified version [here](https://github.com/uncor3/libipatool-go)
- [QSimpleUpdater](https://github.com/alex-spataru/QSimpleUpdater) - We use a modified version [here](https://github.com/uncor3/ZUpdater)
- [airplay](https://github.com/rcarmo/RPiPlay) - We use a modified version [here](https://github.com/uncor3/airplay)
- [UxPlay (for AirPlay)](https://github.com/FDH2/UxPlay) - We use a modified version [here](https://github.com/iDescriptor/uxplay)
## Linux Udev Rules
@@ -283,13 +299,24 @@ sudo udevadm trigger
Contributions are welcome!
You can check the source code in some places we have TODOs and FIXMEs that you can work on.
We actively develop on dev branch, so please base your pull requests off of that branch.
For example
You can also send a pr to main branch but it should be something related to building, publish to some package manager or documentation.
- [Photos.sqlite](https://github.com/iDescriptor/iDescriptor/blob/main/src/gallerywidget.cpp)
## Roadmap
Or if you'd like to introduce new features, feel free to open an issue or a pull request!
**Planned Features for v0.4.0:**
- Migrate to idevice-rs `99% done`
- Wireless Connection Support `DONE`
- Install IPA files directly from the app
- Virtual Location Support for iOS 17 and above
- Complete iOS 26 Support
- Migrate to UCRT for better performance and stability `Windows`
- New UI/UX improvements
- Read gallery from Photos.sqlite (maybe delayed to v0.5.0)
**You can always become a sponsor/donate to request/prioritize a feature or speed up the development process!**
## Damaged Error on macOS
+9
View File
@@ -0,0 +1,9 @@
# default.nix - for backwards compatibility with nix-build
(import (
fetchTarball {
url = "https://github.com/edolstra/flake-compat/archive/master.tar.gz";
sha256 = "0yqfa6rx8md81bcn4szfp0hjq2f3h9i8zjzhqqyfqdkrj5559nmw";
}
) {
src = ./.;
}).defaultNix
Generated
+27
View File
@@ -0,0 +1,27 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1770197578,
"narHash": "sha256-AYqlWrX09+HvGs8zM6ebZ1pwUqjkfpnv8mewYwAo+iM=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}
+95
View File
@@ -0,0 +1,95 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
};
outputs = { self, nixpkgs }:
let
forAllSystems = nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" ];
in
{
packages = forAllSystems (system: {
default = nixpkgs.legacyPackages.${system}.callPackage ./nix/package.nix { };
});
apps = forAllSystems (system: {
default = {
type = "app";
program = "${self.packages.${system}.default}/bin/idescriptor";
};
});
devShells = forAllSystems (system:
let pkgs = nixpkgs.legacyPackages.${system};
in {
default = pkgs.mkShell {
nativeBuildInputs = with pkgs; [
cmake
pkg-config
go
qt6.wrapQtAppsHook
copyDesktopItems
];
buildInputs = with pkgs; [
qt6.qtbase
qt6.qtdeclarative
qt6.qtmultimedia
qt6.qtserialport
qt6.qtpositioning
qt6.qtlocation
lxqt.qtermwidget
qrencode
libheif
libde265
x265
libirecovery
libssh
ffmpeg
pugixml
avahi
avahi-compat
libimobiledevice
libirecovery
libplist
usbmuxd
libzip
openssl
];
cmakeFlags = [
"-DCMAKE_BUILD_TYPE=Release"
"-DCMAKE_INSTALL_PREFIX=${placeholder "out"}"
"-DPACKAGE_MANAGER_MANAGED=ON"
"-DPACKAGE_MANAGER_HINT=nix"
];
};
});
nixosModules.default = { config, lib, pkgs, ... }:
let
cfg = config.programs.idescriptor;
idescriptorPkg = self.packages.${pkgs.system}.default;
in
{
imports = [ ./nix/nixos-module.nix ];
config = lib.mkIf cfg.enable {
programs.idescriptor.package = lib.mkDefault idescriptorPkg;
};
};
homeManagerModules.default = { config, lib, pkgs, ... }:
let
cfg = config.programs.idescriptor;
idescriptorPkg = self.packages.${pkgs.system}.default;
in
{
imports = [ ./nix/hm-module.nix ];
config = lib.mkIf cfg.enable {
programs.idescriptor.package = lib.mkDefault idescriptorPkg;
};
};
};
}
+22
View File
@@ -0,0 +1,22 @@
{ config, lib, ... }:
with lib;
let
cfg = config.programs.idescriptor;
in
{
options.programs.idescriptor = {
enable = mkEnableOption "iDescriptor program";
package = mkOption {
type = types.package;
defaultText = literalExpression "pkgs.idescriptor";
description = "The iDescriptor package to use";
};
};
config = mkIf cfg.enable {
home.packages = [ cfg.package ];
};
}
+22
View File
@@ -0,0 +1,22 @@
{ config, lib, ... }:
with lib;
let
cfg = config.programs.idescriptor;
in
{
options.programs.idescriptor = {
enable = mkEnableOption "iDescriptor program";
package = mkOption {
type = types.package;
defaultText = literalExpression "pkgs.idescriptor";
description = "The iDescriptor package to use";
};
};
config = mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
};
}
+125
View File
@@ -0,0 +1,125 @@
{
pkgs,
...
}:
pkgs.stdenv.mkDerivation rec {
pname = "idescriptor";
version = "0.2.0";
src = pkgs.fetchFromGitHub {
owner = "iDescriptor";
repo = "iDescriptor";
rev = "v${version}";
hash = "sha256-p6iJP4duesUiYEH8pgGgX5GOdaOhaAegPPphBaXU4VM=";
fetchSubmodules = true;
};
goModules = (pkgs.stdenv.mkDerivation {
name = "${pname}-${version}-go-modules";
inherit src;
nativeBuildInputs = with pkgs; [ go ];
configurePhase = ''
export GOPATH="$TMPDIR/go"
export GOCACHE="$TMPDIR/go-cache"
export HOME="$TMPDIR"
cd lib/ipatool-go
'';
buildPhase = ''
go mod download
'';
installPhase = ''
mkdir -p $out
cp -r --reflink=auto $GOPATH/pkg/mod $out/
'';
outputHashMode = "recursive";
outputHashAlgo = "sha256";
outputHash = "sha256-CmthXlyxbWRqAY4gFLshx7VGAdbQlySm4y6mWFdxdUI=";
});
nativeBuildInputs = with pkgs; [
cmake
pkg-config
go
qt6.wrapQtAppsHook
libimobiledevice
libirecovery
usbmuxd
copyDesktopItems
];
buildInputs = with pkgs; [
qt6.qtbase
qt6.qtdeclarative
qt6.qtmultimedia
qt6.qtserialport
qt6.qtpositioning
qt6.qtlocation
qt6.qtwayland
lxqt.qtermwidget
qrencode
libheif
libde265
x265
libssh
ffmpeg
pugixml
avahi
avahi-compat
libplist
libzip
openssl
];
cmakeFlags = [
"-DCMAKE_BUILD_TYPE=Release"
"-DCMAKE_INSTALL_PREFIX=${placeholder "out"}"
"-DPACKAGE_MANAGER_MANAGED=ON"
"-DPACKAGE_MANAGER_HINT=nix"
];
preBuild = ''
export HOME=$TMPDIR
export GOCACHE=$TMPDIR/go-cache
export GOPATH=$TMPDIR/go
# Copy Go modules to writable location
mkdir -p $GOPATH/pkg
cp -r --reflink=auto ${goModules}/mod $GOPATH/pkg/
chmod -R +w $GOPATH/pkg/mod
export GOMODCACHE=$GOPATH/pkg/mod
export GOPROXY=off
'';
desktopItems = [
(pkgs.makeDesktopItem {
name = "iDescriptor";
exec = "iDescriptor";
icon = "idescriptor";
desktopName = "iDescriptor";
comment = "Cross-platform iDevice management tool";
categories = [ "System" "Utility" ];
})
];
postInstall = ''
# Install icon
install -Dm644 $src/resources/icons/app-icon/icon.png \
$out/share/icons/hicolor/256x256/apps/idescriptor.png
'';
meta = with pkgs.lib; {
description = "Free, open-source, cross-platform iDevice management tool";
homepage = "https://github.com/iDescriptor/iDescriptor";
license = licenses.agpl3Only;
maintainers = [ fn3x ];
platforms = platforms.unix;
mainProgram = "iDescriptor";
};
}
+9
View File
@@ -0,0 +1,9 @@
# shell.nix - for backwards compatibility with nix-shell
(import (
fetchTarball {
url = "https://github.com/edolstra/flake-compat/archive/master.tar.gz";
sha256 = "0bi4cpqmwpqkv2ikml4ryh14j5l9bl1f16wfixa97h6yvk7ik9aw";
}
) {
src = ./.;
}).shellNix