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 AppImage +
## 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