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:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7b8ebd5..16d2d0f 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)
diff --git a/README.md b/README.md
index 64ed1dc..68aba83 100644
--- a/README.md
+++ b/README.md
@@ -76,7 +76,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
@@ -111,14 +111,28 @@ make sure to do "sudo pacman -Syu" otherwise it's not going to find libimobilede

+
+
+
+
+## Good News!
+
+### iDescriptor v0.4.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) | ⚠️ 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
+
+
You can become a sponsor from GitHub Sponsors or
+
## 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
diff --git a/default.nix b/default.nix
new file mode 100644
index 0000000..3c438de
--- /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 = "0yqfa6rx8md81bcn4szfp0hjq2f3h9i8zjzhqqyfqdkrj5559nmw";
+ }
+) {
+ src = ./.;
+}).defaultNix
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..f75f263
--- /dev/null
+++ b/flake.lock
@@ -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
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..e115c65
--- /dev/null
+++ b/flake.nix
@@ -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;
+ };
+ };
+ };
+}
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
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..8c8af1c
--- /dev/null
+++ b/nix/package.nix
@@ -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";
+ };
+}
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