mirror of
https://github.com/iDescriptor/iDescriptor.git
synced 2026-06-21 19:35:49 +08:00
Merge branch 'main' into dev
This commit is contained in:
@@ -11,9 +11,10 @@ assignees: ''
|
|||||||
A clear and concise description of what the bug is.
|
A clear and concise description of what the bug is.
|
||||||
|
|
||||||
**OS and iDevice info (please complete the following information):**
|
**OS and iDevice info (please complete the following information):**
|
||||||
- Version [e.g. 22]
|
- iDescriptor Version [e.g. v2.0.0]
|
||||||
- Device: [e.g. iPhone6]
|
- Device: [e.g. iPhone 14 - iOS26]
|
||||||
- OS: [e.g. iOS8.1]
|
- Is it the AppImage version ? (Linux only): [Yes/No]
|
||||||
|
- OS: [e.g. Windows 11, macOS 14, Arch Linux]
|
||||||
|
|
||||||
**To Reproduce**
|
**To Reproduce**
|
||||||
Steps to reproduce the behavior:
|
Steps to reproduce the behavior:
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
project(iDescriptor VERSION 0.2.0 LANGUAGES CXX)
|
project(iDescriptor VERSION 0.3.0 LANGUAGES CXX)
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
set(PKG_CONFIG_EXECUTABLE "C:/msys64/mingw64/bin/pkg-config.exe" CACHE FILEPATH "" FORCE)
|
set(PKG_CONFIG_EXECUTABLE "C:/msys64/mingw64/bin/pkg-config.exe" CACHE FILEPATH "" FORCE)
|
||||||
|
|||||||
@@ -76,7 +76,7 @@
|
|||||||
Open the `.dmg` and drag iDescriptor to Applications.
|
Open the `.dmg` and drag iDescriptor to Applications.
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
After moving the app to Applications, run the code below
|
After moving the app to Applications, run the code below
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
```shell
|
```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/>
|
<img src="./resources/repo/crossplatform.png"><br/>
|
||||||
</p>
|
</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
|
## Features
|
||||||
|
|
||||||
### Connection
|
### Connection
|
||||||
|
|
||||||
| Feature | Status | Notes |
|
| Feature | Status | Notes |
|
||||||
| --------------------------- | -------------------- | --------------------------------------------- |
|
| ------------------- | -------------------- | ------------------------------------------------------------- |
|
||||||
| USB Connection | ✅ Implemented | Fully supported on Windows, macOS, and Linux. |
|
| USB Connection | ✅ Implemented | Fully supported on Windows, macOS, and Linux. |
|
||||||
| Wireless Connection (Wi‑Fi) | ⚠️ Under development | - |
|
| Wireless Connection | ⚠️ Under Development | Currently under development, planned to be released in v0.4.0 |
|
||||||
|
|
||||||
### Tools
|
### 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
|
## 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"/>
|
<img src="https://img.shields.io/badge/OpenCollective-1F87FF?style=for-the-badge&logo=OpenCollective&logoColor=white" alt="AppImage"/>
|
||||||
</a>
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
## Thanks
|
## Thanks
|
||||||
|
|
||||||
- [libimobiledevice](https://libimobiledevice.org/)
|
- [libimobiledevice](https://libimobiledevice.org/)
|
||||||
- [ipatool](https://github.com/majd/ipatool) - We use a modified version [here](https://github.com/uncor3/libipatool-go)
|
- [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)
|
- [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
|
## Linux Udev Rules
|
||||||
|
|
||||||
@@ -283,13 +299,24 @@ sudo udevadm trigger
|
|||||||
|
|
||||||
Contributions are welcome!
|
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
|
## Damaged Error on macOS
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
+1
-1
Submodule lib/ipatool-go updated: 6872f99821...d4f0f3448a
@@ -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 ];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -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
@@ -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";
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user