From a0998bf2362d03abc93c4fd96b22c0aa6e714d72 Mon Sep 17 00:00:00 2001 From: "Art P." Date: Mon, 22 Dec 2025 18:46:32 +0400 Subject: [PATCH 01/12] feat(nix): added modules and packages --- default.nix | 9 ++++ flake.lock | 27 ++++++++++ flake.nix | 92 ++++++++++++++++++++++++++++++++ nix/hm-module.nix | 22 ++++++++ nix/nixos-module.nix | 22 ++++++++ nix/package.nix | 122 +++++++++++++++++++++++++++++++++++++++++++ shell.nix | 9 ++++ 7 files changed, 303 insertions(+) create mode 100644 default.nix create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 nix/hm-module.nix create mode 100644 nix/nixos-module.nix create mode 100644 nix/package.nix create mode 100644 shell.nix diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..f716e78 --- /dev/null +++ b/default.nix @@ -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 = "0bi4cpqmwpqkv2ikml4ryh14j5l9bl1f16wfixa97h6yvk7ik9aw"; + } +) { + src = ./.; +}).defaultNix diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..39dd656 --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1766309749, + "narHash": "sha256-3xY8CZ4rSnQ0NqGhMKAy5vgC+2IVK0NoVEzDoOh4DA4=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..33635f6 --- /dev/null +++ b/flake.nix @@ -0,0 +1,92 @@ +{ + 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" + ]; + }; + }); + + 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; + }; + }; + }; +} diff --git a/nix/hm-module.nix b/nix/hm-module.nix new file mode 100644 index 0000000..dd1533b --- /dev/null +++ b/nix/hm-module.nix @@ -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 ]; + }; +} diff --git a/nix/nixos-module.nix b/nix/nixos-module.nix new file mode 100644 index 0000000..e16e62a --- /dev/null +++ b/nix/nixos-module.nix @@ -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 ]; + }; +} diff --git a/nix/package.nix b/nix/package.nix new file mode 100644 index 0000000..f6be7f3 --- /dev/null +++ b/nix/package.nix @@ -0,0 +1,122 @@ +{ +pkgs, +... +}: + +pkgs.stdenv.mkDerivation rec { + pname = "idescriptor"; + version = "0.1.2"; + + src = pkgs.fetchFromGitHub { + owner = "iDescriptor"; + repo = "iDescriptor"; + rev = "v${version}"; + hash = "sha256-pj/8PCZUTPu28MQd3zL8ceDsQy4+55348ZOCpiQaiEo="; + 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 + 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" + ]; + + 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"; + }; +} diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..3073748 --- /dev/null +++ b/shell.nix @@ -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 From befcd052396c0613082a72b95a8106624d3da805 Mon Sep 17 00:00:00 2001 From: "Art P." Date: Mon, 5 Jan 2026 15:01:17 +0400 Subject: [PATCH 02/12] fix(nix): added missing cmake flags --- flake.nix | 3 +++ nix/package.nix | 3 +++ 2 files changed, 6 insertions(+) diff --git a/flake.nix b/flake.nix index 33635f6..e115c65 100644 --- a/flake.nix +++ b/flake.nix @@ -59,6 +59,9 @@ cmakeFlags = [ "-DCMAKE_BUILD_TYPE=Release" + "-DCMAKE_INSTALL_PREFIX=${placeholder "out"}" + "-DPACKAGE_MANAGER_MANAGED=ON" + "-DPACKAGE_MANAGER_HINT=nix" ]; }; }); diff --git a/nix/package.nix b/nix/package.nix index f6be7f3..8c3c146 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -78,6 +78,9 @@ pkgs.stdenv.mkDerivation rec { cmakeFlags = [ "-DCMAKE_BUILD_TYPE=Release" + "-DCMAKE_INSTALL_PREFIX=${placeholder "out"}" + "-DPACKAGE_MANAGER_MANAGED=ON" + "-DPACKAGE_MANAGER_HINT=nix" ]; preBuild = '' From 7f6b9539bcda8ce3f49cddc56e9d5b9df1a1f62e Mon Sep 17 00:00:00 2001 From: "Art P." Date: Mon, 5 Jan 2026 15:01:33 +0400 Subject: [PATCH 03/12] fix(nix): fix for flake-compat hash --- default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default.nix b/default.nix index f716e78..3c438de 100644 --- a/default.nix +++ b/default.nix @@ -2,7 +2,7 @@ (import ( fetchTarball { url = "https://github.com/edolstra/flake-compat/archive/master.tar.gz"; - sha256 = "0bi4cpqmwpqkv2ikml4ryh14j5l9bl1f16wfixa97h6yvk7ik9aw"; + sha256 = "0yqfa6rx8md81bcn4szfp0hjq2f3h9i8zjzhqqyfqdkrj5559nmw"; } ) { src = ./.; From 7d8db90340cf2ea63f4fd26078d547739bbb6ed2 Mon Sep 17 00:00:00 2001 From: uncor3 Date: Sun, 1 Feb 2026 00:48:25 +0000 Subject: [PATCH 04/12] update README,md --- README.md | 45 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 4abae7c..24b9ee3 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ Open the `.dmg` and drag iDescriptor to Applications.
- After moving the app to Applications, run the code below +After moving the app to Applications, run the code below
```shell @@ -105,14 +105,28 @@ make sure to do "sudo pacman -Syu" otherwise it's not going to find libimobilede

+
+
+
+ +## Good News! + +### iDescriptor v0.3.0 will feature **WIRELESS CONNECTION** support! + +Learn more about our roadmap [here](#roadmap). + +
+
+
+ ## Features ### Connection -| Feature | Status | Notes | -| --------------------------- | -------------------- | --------------------------------------------- | -| USB Connection | ✅ Implemented | Fully supported on Windows, macOS, and Linux. | -| Wireless Connection (Wi‑Fi) | ⚠️ To be implemented | - | +| 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.3.0 | ### Tools @@ -277,13 +291,26 @@ 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) -Or if you'd like to introduce new features, feel free to open an issue or a pull request! +## Roadmap + +**Planned Features for v0.3.0:** + +- Migrato 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.4.0) + + +**You can always become a sponsor/donate to request/prioritize a feature or speed up the development process!** ## Damaged Error on macOS From 758981f91de2da97867cc8a15aa8aaf155e9e04f Mon Sep 17 00:00:00 2001 From: uncor3 Date: Sun, 1 Feb 2026 00:53:45 +0000 Subject: [PATCH 05/12] update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 24b9ee3..990e6da 100644 --- a/README.md +++ b/README.md @@ -257,9 +257,11 @@ You might get this pop-up on any platform this is because this app uses secure b ## Become a Sponsor -Please support us at + ## Thanks From a9311f09187431fd56da6cfc29446d8bba7eb2b5 Mon Sep 17 00:00:00 2001 From: uncor3 Date: Sun, 1 Feb 2026 02:44:32 +0000 Subject: [PATCH 06/12] Fix typo in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 990e6da..22877e2 100644 --- a/README.md +++ b/README.md @@ -302,7 +302,7 @@ You can also send a pr to main branch but it should be something related to buil **Planned Features for v0.3.0:** -- Migrato idevice-rs `99% done` +- 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 From b7fe2198fc83ff5214af7c780c4a6d128ed066e2 Mon Sep 17 00:00:00 2001 From: "Art P." Date: Sat, 7 Feb 2026 05:42:48 +0400 Subject: [PATCH 07/12] chore(deps): bumped version to 0.2.0 --- flake.lock | 6 +++--- nix/package.nix | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/flake.lock b/flake.lock index 39dd656..f75f263 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1766309749, - "narHash": "sha256-3xY8CZ4rSnQ0NqGhMKAy5vgC+2IVK0NoVEzDoOh4DA4=", + "lastModified": 1770197578, + "narHash": "sha256-AYqlWrX09+HvGs8zM6ebZ1pwUqjkfpnv8mewYwAo+iM=", "owner": "nixos", "repo": "nixpkgs", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", "type": "github" }, "original": { diff --git a/nix/package.nix b/nix/package.nix index 8c3c146..8c8af1c 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -5,13 +5,13 @@ pkgs, pkgs.stdenv.mkDerivation rec { pname = "idescriptor"; - version = "0.1.2"; + version = "0.2.0"; src = pkgs.fetchFromGitHub { owner = "iDescriptor"; repo = "iDescriptor"; rev = "v${version}"; - hash = "sha256-pj/8PCZUTPu28MQd3zL8ceDsQy4+55348ZOCpiQaiEo="; + hash = "sha256-p6iJP4duesUiYEH8pgGgX5GOdaOhaAegPPphBaXU4VM="; fetchSubmodules = true; }; @@ -47,6 +47,9 @@ pkgs.stdenv.mkDerivation rec { pkg-config go qt6.wrapQtAppsHook + libimobiledevice + libirecovery + usbmuxd copyDesktopItems ]; @@ -57,21 +60,18 @@ pkgs.stdenv.mkDerivation rec { qt6.qtserialport qt6.qtpositioning qt6.qtlocation + qt6.qtwayland lxqt.qtermwidget qrencode libheif libde265 x265 - libirecovery libssh ffmpeg pugixml avahi avahi-compat - libimobiledevice - libirecovery libplist - usbmuxd libzip openssl ]; From 17aa3baf19fb6d76bf8e2e4122b63b8ece39b86b Mon Sep 17 00:00:00 2001 From: uncor3 Date: Sat, 7 Feb 2026 05:19:03 -0800 Subject: [PATCH 08/12] update README.md Replaced airplay link with UxPlay for AirPlay. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 22877e2..7fa9db0 100644 --- a/README.md +++ b/README.md @@ -268,7 +268,7 @@ You might get this pop-up on any platform this is because this app uses secure b - [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 From 106797ca3dcfd0d035488275e792f4e239b7339f Mon Sep 17 00:00:00 2001 From: uncor3 Date: Tue, 17 Feb 2026 20:46:57 +0000 Subject: [PATCH 09/12] update ipatool to v2.3.0 --- lib/ipatool-go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ipatool-go b/lib/ipatool-go index 6872f99..d4f0f34 160000 --- a/lib/ipatool-go +++ b/lib/ipatool-go @@ -1 +1 @@ -Subproject commit 6872f99821ee24c04d6ae816caae2e75a93449d7 +Subproject commit d4f0f3448a8dd3d2f4d372eb53fe82988635a1d4 From b02058220461fc4623904dbefdf1a616971c1eef Mon Sep 17 00:00:00 2001 From: uncor3 Date: Tue, 17 Feb 2026 20:51:15 +0000 Subject: [PATCH 10/12] update bug report template --- .github/ISSUE_TEMPLATE/bug_report.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 46355c4..858eb6f 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -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: From 55648e3a8cf4e89da25477d23979b04560981fdb Mon Sep 17 00:00:00 2001 From: uncor3 Date: Tue, 17 Feb 2026 20:54:26 +0000 Subject: [PATCH 11/12] update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7fa9db0..19cc2a5 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,7 @@ make sure to do "sudo pacman -Syu" otherwise it's not going to find libimobilede ## Good News! -### iDescriptor v0.3.0 will feature **WIRELESS CONNECTION** support! +### iDescriptor v0.4.0 will feature **WIRELESS CONNECTION** support! Learn more about our roadmap [here](#roadmap). @@ -126,7 +126,7 @@ Learn more about our roadmap [here](#roadmap). | 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.3.0 | +| Wireless Connection | ⚠️ Under Development | Currently under development, planned to be released in v0.4.0 | ### Tools @@ -300,7 +300,7 @@ You can also send a pr to main branch but it should be something related to buil ## Roadmap -**Planned Features for v0.3.0:** +**Planned Features for v0.4.0:** - Migrate to idevice-rs `99% done` - Wireless Connection Support `DONE` @@ -309,7 +309,7 @@ You can also send a pr to main branch but it should be something related to buil - 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.4.0) +- 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!** From 5a63709cbcae41e284d73be21734fa6bc718c97d Mon Sep 17 00:00:00 2001 From: uncor3 Date: Tue, 17 Feb 2026 20:55:15 +0000 Subject: [PATCH 12/12] bump project version to 0.3.0 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d57be51..a864e51 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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)