From 8ff9b7542134c2bd8c2ed91de70ac1cd5d75dfe0 Mon Sep 17 00:00:00 2001 From: superrnovae Date: Wed, 31 Aug 2022 22:32:58 +0200 Subject: [PATCH 01/12] leftover parameter --- permasigner/bundled/constrictor/dpkg.py | 1 - 1 file changed, 1 deletion(-) diff --git a/permasigner/bundled/constrictor/dpkg.py b/permasigner/bundled/constrictor/dpkg.py index f81ec837..e8ecb123 100644 --- a/permasigner/bundled/constrictor/dpkg.py +++ b/permasigner/bundled/constrictor/dpkg.py @@ -30,7 +30,6 @@ def __init__(self, output_directory, executables, data_dirs, control, scripts): self.maintainer_scripts = scripts self.executables = executables self.seen_data_dirs = set() - self.seen_executables = set() self.working_dir = None @staticmethod From 0ec85d1d7a49bb903e5148a3b96ce3cc35850ce3 Mon Sep 17 00:00:00 2001 From: superrnovae Date: Wed, 31 Aug 2022 23:09:01 +0200 Subject: [PATCH 02/12] unused import --- permasigner/dpkg.py | 1 - 1 file changed, 1 deletion(-) diff --git a/permasigner/dpkg.py b/permasigner/dpkg.py index b18bde1f..5e4e76bf 100644 --- a/permasigner/dpkg.py +++ b/permasigner/dpkg.py @@ -1,4 +1,3 @@ -import array import subprocess import tarfile from pathlib import Path From 4af47e75243a7d1849fd673c52c4948c9e928700 Mon Sep 17 00:00:00 2001 From: superrnovae Date: Thu, 1 Sep 2022 09:59:36 +0200 Subject: [PATCH 03/12] fix dpkg-deb detection --- permasigner/permasigner.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/permasigner/permasigner.py b/permasigner/permasigner.py index 2a43ec17..0e564a9b 100644 --- a/permasigner/permasigner.py +++ b/permasigner/permasigner.py @@ -44,13 +44,13 @@ def main(self) -> None: # Check for dependencies logger.log("Checking for dependencies...", color=colors["yellow"]) self.ldid = utils.cmd_in_path('ldid') - if self.ldid is not None: + if self.ldid: logger.debug("ldid found!", self.args.debug) else: logger.debug("ldid not found in PATH, we will download it later if needed", self.args.debug) self.dpkg = utils.cmd_in_path('dpkg-deb') - if self.ldid: + if self.dpkg: logger.debug("dpkg-deb found!", self.args.debug) else: logger.debug("dpkg-deb not found in PATH, we will use constrictor instead", self.args.debug) From 1e12030d0a788e25787af14fffcbbb0f564803b6 Mon Sep 17 00:00:00 2001 From: superrnovae Date: Thu, 1 Sep 2022 12:33:14 +0200 Subject: [PATCH 04/12] test ldid signing without split --- permasigner/sign.py | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/permasigner/sign.py b/permasigner/sign.py index 332b663d..c1857d02 100644 --- a/permasigner/sign.py +++ b/permasigner/sign.py @@ -161,7 +161,7 @@ def __init__(self, cert: Path, bundle_path: Path, data_dir: Path, tmp: Path, arg self.args = args def sign_with_ldid(self, ldid: str) -> None: - """ Determine path to ldid and use it to sign the bundle """ + """ Sign the bundle with ldid """ if ldid: ldid_cmd = ldid @@ -173,14 +173,7 @@ def sign_with_ldid(self, ldid: str) -> None: f"Running command: {ldid_cmd} -S{self.tmp / 'entitlements.plist'} -M -K{self.cert} -Upassword '{self.bundle_path}'", self.args.debug) - subprocess.run([ - f"{ldid_cmd}", - f"-S{self.tmp / 'entitlements.plist'}", - "-M", - f"-K{self.cert}", - "-Upassword", - f"{self.bundle_path}"], - stdout=subprocess.DEVNULL) + subprocess.getstatusoutput(f"{ldid_cmd} -S{self.tmp / 'entitlements.plist'} -M -K{self.cert} -Upassword {self.bundle_path}") # Check if entitlements arg was passed # then, resign and merge the entitlements From 64b3b3dd2c20c518ff178d30aa950557526dd01b Mon Sep 17 00:00:00 2001 From: superrnovae Date: Thu, 1 Sep 2022 12:52:44 +0200 Subject: [PATCH 05/12] check exit code --- permasigner/sign.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/permasigner/sign.py b/permasigner/sign.py index c1857d02..b16d875f 100644 --- a/permasigner/sign.py +++ b/permasigner/sign.py @@ -173,7 +173,11 @@ def sign_with_ldid(self, ldid: str) -> None: f"Running command: {ldid_cmd} -S{self.tmp / 'entitlements.plist'} -M -K{self.cert} -Upassword '{self.bundle_path}'", self.args.debug) - subprocess.getstatusoutput(f"{ldid_cmd} -S{self.tmp / 'entitlements.plist'} -M -K{self.cert} -Upassword {self.bundle_path}") + code, output = subprocess.getstatusoutput(f"{ldid_cmd} -S{self.tmp / 'entitlements.plist'} -M -K{self.cert} -Upassword {self.bundle_path}") + + if code != 0: + logger.error(output) + exit(1) # Check if entitlements arg was passed # then, resign and merge the entitlements From 75f317f69f8efe8ea4dcfcacc71cc911b90e9e23 Mon Sep 17 00:00:00 2001 From: superrnovae Date: Thu, 1 Sep 2022 14:38:44 +0200 Subject: [PATCH 06/12] fix ssh installer commands --- permasigner/installer.py | 4 ++-- permasigner/sign.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/permasigner/installer.py b/permasigner/installer.py index 2f51115f..7d30beb8 100644 --- a/permasigner/installer.py +++ b/permasigner/installer.py @@ -184,7 +184,7 @@ def install_from_pc(path: Path, args: Namespace) -> bool: else: # Install with dpkg by invoking su as root user logger.debug(f"Running command: su root -c 'dpkg -i /var/mobile/Documents/{filename}", args.debug) - stdin, stdout, stderr = client.exec_command(f"su root -c 'dpkg -i /var/mobile/Documents/{filename}", get_pty=True) + stdin, stdout, stderr = client.exec_command(f"su root -c 'dpkg -i /var/mobile/Documents/{filename}'", get_pty=True) # Read output from the channel output = stdout.channel.recv(2048) @@ -226,7 +226,7 @@ def install_from_pc(path: Path, args: Namespace) -> bool: # Needed on elucuratus # to prevent half-installed state logger.debug(f"Running command: sudo apt-get install -f", args.debug) - stdin, stdout, stderr = client.exec_command('sudo apt-get install -f')[1] + stdin, stdout, stderr = client.exec_command('sudo apt-get install -f') # Block until we can read the output from stdout output = stdout.read().decode() diff --git a/permasigner/sign.py b/permasigner/sign.py index b16d875f..2c551035 100644 --- a/permasigner/sign.py +++ b/permasigner/sign.py @@ -176,7 +176,7 @@ def sign_with_ldid(self, ldid: str) -> None: code, output = subprocess.getstatusoutput(f"{ldid_cmd} -S{self.tmp / 'entitlements.plist'} -M -K{self.cert} -Upassword {self.bundle_path}") if code != 0: - logger.error(output) + logger.error(f'Failed to sign the bundle: {output}') exit(1) # Check if entitlements arg was passed From e0f854a0777e76aee04ef86f0635d00f6c6738f1 Mon Sep 17 00:00:00 2001 From: Nebula Date: Thu, 1 Sep 2022 10:35:16 -0400 Subject: [PATCH 07/12] add -P flag --- permasigner/__main__.py | 2 ++ permasigner/permasigner.py | 44 ++++++++++++++++++++++---------------- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/permasigner/__main__.py b/permasigner/__main__.py index 22ae5167..631ff1a0 100644 --- a/permasigner/__main__.py +++ b/permasigner/__main__.py @@ -46,6 +46,8 @@ def main(argv=None, in_package=None) -> None: help="disable ldid hash checking") parser.add_argument('-v', '--version', action='version', version=f'Permasigner v{utils.get_version()}', help='show current version and exit') + parser.add_argument('-P', '--skip-package', action='store_true', + help="skip packaging to a deb, output a .app instead") args = parser.parse_args() ps = permasigner.Permasigner(in_package, args) diff --git a/permasigner/permasigner.py b/permasigner/permasigner.py index 0e564a9b..a7d29b3e 100644 --- a/permasigner/permasigner.py +++ b/permasigner/permasigner.py @@ -49,11 +49,12 @@ def main(self) -> None: else: logger.debug("ldid not found in PATH, we will download it later if needed", self.args.debug) - self.dpkg = utils.cmd_in_path('dpkg-deb') - if self.dpkg: - logger.debug("dpkg-deb found!", self.args.debug) - else: - logger.debug("dpkg-deb not found in PATH, we will use constrictor instead", self.args.debug) + if not self.args.skip_package: + self.dpkg = utils.cmd_in_path('dpkg-deb') + if self.dpkg: + logger.debug("dpkg-deb found!", self.args.debug) + else: + logger.debug("dpkg-deb not found in PATH, we will use constrictor instead", self.args.debug) # Determine path to data directory # then, create dir if it doesn't exist @@ -95,7 +96,7 @@ def main(self) -> None: if not self.args.folder: out_dir = self.permasign() - if self.args.install: + if self.args.install and not self.args.skip_package: if utils.is_ios(): self.is_installed = install_on_ios(out_dir, self.args) else: @@ -144,17 +145,18 @@ def permasign(self) -> Path: (self.tmp / 'deb/Applications').mkdir(parents=True) (self.tmp / 'deb/DEBIAN').mkdir(parents=True) - # Copy control file and scripts into DEBIAN directory - print("Copying control file and maintainer scripts...") copier = Copier(bundle, self.in_package) - copier.copy_postinst(self.tmp / "deb/DEBIAN/postinst") - copier.copy_control(self.tmp / "deb/DEBIAN/control") - copier.copy_prerm(self.tmp / "deb/DEBIAN/prerm") - - # Set chmod 755 on prerm and postinst scripts - print("Changing deb file scripts permissions...") - utils.make_executable(self.tmp / "deb/DEBIAN/prerm") - utils.make_executable(self.tmp / "deb/DEBIAN/postinst") + if not self.args.skip_package: + # Copy control file and scripts into DEBIAN directory + print("Copying control file and maintainer scripts...") + copier.copy_postinst(self.tmp / "deb/DEBIAN/postinst") + copier.copy_control(self.tmp / "deb/DEBIAN/control") + copier.copy_prerm(self.tmp / "deb/DEBIAN/prerm") + + # Set chmod 755 on prerm and postinst scripts + print("Changing deb file scripts permissions...") + utils.make_executable(self.tmp / "deb/DEBIAN/prerm") + utils.make_executable(self.tmp / "deb/DEBIAN/postinst") # Copy entitlements to temporary directory copier.copy_entitlements(self.tmp / "entitlements.plist") @@ -187,9 +189,13 @@ def permasign(self) -> Path: signer.sign_with_ldid(self.ldid) # Package the deb file - logger.log("Packaging the deb file...", color=colors["yellow"]) - dpkg = Dpkg(bundle, executables, self.tmp, self.output_dir, self.dpkg, self.in_package, self.args.debug) - return dpkg.package() + if self.args.skip_package: + copytree(full_app_path, self.output_dir / f"{bundle_path.name}") + return self.output_dir / f"{bundle_path.name}" + else: + logger.log("Packaging the deb file...", color=colors["yellow"]) + dpkg = Dpkg(bundle, executables, self.tmp, self.output_dir, self.dpkg, self.in_package, self.args.debug) + return dpkg.package() def check_path_arguments(self) -> None: path = self.args.path.strip('"').strip("'").strip() From d04725ed2456704cd1c3a34c7ad14b3744cd8512 Mon Sep 17 00:00:00 2001 From: Nebula Date: Thu, 1 Sep 2022 10:39:49 -0400 Subject: [PATCH 08/12] edit docker entrypoint and optional flags docs page --- docker/entrypoint.sh | 8 ++++-- docs/information/optional-flags.md | 43 +++++++++++++++++++----------- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 0f315619..583a9f8b 100755 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -50,12 +50,16 @@ if [ ! -z "$ENTITLEMENTS" ]; then ARGS="$ARGS -e $ENTITLEMENTS" fi -if [ ! -z "$NOLDIDCHECK" ]; then +if [ ! -z "$NO_LDID_CHECK" ]; then ARGS="$ARGS -z" fi if [ ! -z "$VERSION" ]; then - ARGS="$ARGS -V" + ARGS="$ARGS -v" +fi + +if [ ! -z "$SKIP_PACKAGE" ]; then + ARGS="$ARGS -P" fi export PS_VERSION=$(cat .version) diff --git a/docs/information/optional-flags.md b/docs/information/optional-flags.md index 7772f945..9d7b4112 100644 --- a/docs/information/optional-flags.md +++ b/docs/information/optional-flags.md @@ -7,29 +7,35 @@ description: Flags you can pass through to change options. ## Command Arguments ``` -usage: main.py [-h] [-d] [-c] [-u URL] [-p PATH] [-i] [-n] [-o OUTPUT] [-b BUNDLEID] [-N NAME] [-m MINVER] [-v] [-l LDIDFORK] - [-f FOLDER] [-e ENTITLEMENTS] +usage: [-h] (-f FOLDER | -u URL | -p PATH) [-d] [-c] [-i] [-o OUTPUT] [-b BUNDLEID] [-n NAME] [-a AUTHOR] [-m MINVER] [-l LDIDFORK] [-t TCPRELAY] [-e ENTITLEMENTS] [-z] [-v] [-P] options: - -h, --help show help message and exit - -d, --debug shows some debug info, only useful for testing - -c, --codesign uses codesign instead of ldid + -h, --help show this help message and exit + -f FOLDER, --folder FOLDER + sign multiple IPAs from a direct path to a folder -u URL, --url URL the direct URL of the IPA to be signed -p PATH, --path PATH the direct local path of the IPA to be signed + -d, --debug shows some debug info, only useful for testing + -c, --codesign uses codesign instead of ldid -i, --install installs the application to your device - -n, --noinstall skips the install prompt -o OUTPUT, --output OUTPUT - specify output file + specify output path -b BUNDLEID, --bundleid BUNDLEID specify new bundle id - -N NAME, --name NAME specify new app name + -n NAME, --name NAME specify new app name + -a AUTHOR, --author AUTHOR + specify new app author -m MINVER, --minver MINVER specify new minimum app version (14.0 recommended) - -v, --version show current version and exit -l LDIDFORK, --ldidfork LDIDFORK specify a fork of ldid (eg. ProcursusTeam, permasigner [default]) + -t TCPRELAY, --tcprelay TCPRELAY + optional args for tcprelay (ex: 22:2222:localhost:/var/run/usbmuxd) -e ENTITLEMENTS, --entitlements ENTITLEMENTS path to entitlements file + -z, --no-ldid-check disable ldid hash checking + -v, --version show current version and exit + -P, --skip-package skip packaging to a deb, output a .app instead ``` ## Docker Options @@ -39,11 +45,16 @@ Use `-e ARGUMENTNAME="VALUE"` for strings, use `-e ARGUMENTNAME=1` to enable a f ### Currently supported arguments ``` -DEBUG shows some debug info, only useful for testing -URL the direct URL of the IPA to be signed -BUNDLEID specify new bundle id -NAME specify new app name -MINVER specify new minimum app version (14.0 recommended) -LDIDFORK specify a fork of ldid (eg. ProcursusTeam, permasigner [default]) -FOLDER sign multiple IPAs from a direct path to a folder ("ipas" recommended) +DEBUG shows some debug info, only useful for testing +URL the direct URL of the IPA to be signed +BUNDLEID specify new bundle id +NAME specify new app name +MINVER specify new minimum app version (14.0 recommended) +LDIDFORK specify a fork of ldid (eg. ProcursusTeam, permasigner [default]) +FOLDER sign multiple IPAs from a direct path to a folder ("ipas" recommended) +TCPRELAY optional args for tcprelay (ex: 22:2222:localhost:/var/run/usbmuxd) +ENTITLEMENTS path to entitlements file +NO_LDID_CHECK disable ldid hash checking +VERSION show current version and exit +SKIP_PACKAGE skip packaging to a deb, output a .app instead ``` From 2247023deb8e299c9eb1f1212ab5f50275222b5a Mon Sep 17 00:00:00 2001 From: Nebula Date: Thu, 1 Sep 2022 17:57:31 -0400 Subject: [PATCH 09/12] revert -P flag --- docker/entrypoint.sh | 4 --- docs/information/optional-flags.md | 2 -- permasigner/__main__.py | 2 -- permasigner/permasigner.py | 46 +++++++++++++----------------- 4 files changed, 20 insertions(+), 34 deletions(-) diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 583a9f8b..d3c49525 100755 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -58,10 +58,6 @@ if [ ! -z "$VERSION" ]; then ARGS="$ARGS -v" fi -if [ ! -z "$SKIP_PACKAGE" ]; then - ARGS="$ARGS -P" -fi - export PS_VERSION=$(cat .version) echo "Running Permasigner with args:$ARGS" diff --git a/docs/information/optional-flags.md b/docs/information/optional-flags.md index 9d7b4112..80bfc557 100644 --- a/docs/information/optional-flags.md +++ b/docs/information/optional-flags.md @@ -35,7 +35,6 @@ options: path to entitlements file -z, --no-ldid-check disable ldid hash checking -v, --version show current version and exit - -P, --skip-package skip packaging to a deb, output a .app instead ``` ## Docker Options @@ -56,5 +55,4 @@ TCPRELAY optional args for tcprelay (ex: 22:2222:localhost:/var/run/usbmux ENTITLEMENTS path to entitlements file NO_LDID_CHECK disable ldid hash checking VERSION show current version and exit -SKIP_PACKAGE skip packaging to a deb, output a .app instead ``` diff --git a/permasigner/__main__.py b/permasigner/__main__.py index 631ff1a0..22ae5167 100644 --- a/permasigner/__main__.py +++ b/permasigner/__main__.py @@ -46,8 +46,6 @@ def main(argv=None, in_package=None) -> None: help="disable ldid hash checking") parser.add_argument('-v', '--version', action='version', version=f'Permasigner v{utils.get_version()}', help='show current version and exit') - parser.add_argument('-P', '--skip-package', action='store_true', - help="skip packaging to a deb, output a .app instead") args = parser.parse_args() ps = permasigner.Permasigner(in_package, args) diff --git a/permasigner/permasigner.py b/permasigner/permasigner.py index a7d29b3e..16adc001 100644 --- a/permasigner/permasigner.py +++ b/permasigner/permasigner.py @@ -48,13 +48,12 @@ def main(self) -> None: logger.debug("ldid found!", self.args.debug) else: logger.debug("ldid not found in PATH, we will download it later if needed", self.args.debug) - - if not self.args.skip_package: - self.dpkg = utils.cmd_in_path('dpkg-deb') - if self.dpkg: - logger.debug("dpkg-deb found!", self.args.debug) - else: - logger.debug("dpkg-deb not found in PATH, we will use constrictor instead", self.args.debug) + + self.dpkg = utils.cmd_in_path('dpkg-deb') + if self.dpkg: + logger.debug("dpkg-deb found!", self.args.debug) + else: + logger.debug("dpkg-deb not found in PATH, we will use constrictor instead", self.args.debug) # Determine path to data directory # then, create dir if it doesn't exist @@ -96,7 +95,7 @@ def main(self) -> None: if not self.args.folder: out_dir = self.permasign() - if self.args.install and not self.args.skip_package: + if self.args.install: if utils.is_ios(): self.is_installed = install_on_ios(out_dir, self.args) else: @@ -145,18 +144,17 @@ def permasign(self) -> Path: (self.tmp / 'deb/Applications').mkdir(parents=True) (self.tmp / 'deb/DEBIAN').mkdir(parents=True) + # Copy control file and scripts into DEBIAN directory + print("Copying control file and maintainer scripts...") copier = Copier(bundle, self.in_package) - if not self.args.skip_package: - # Copy control file and scripts into DEBIAN directory - print("Copying control file and maintainer scripts...") - copier.copy_postinst(self.tmp / "deb/DEBIAN/postinst") - copier.copy_control(self.tmp / "deb/DEBIAN/control") - copier.copy_prerm(self.tmp / "deb/DEBIAN/prerm") - - # Set chmod 755 on prerm and postinst scripts - print("Changing deb file scripts permissions...") - utils.make_executable(self.tmp / "deb/DEBIAN/prerm") - utils.make_executable(self.tmp / "deb/DEBIAN/postinst") + copier.copy_postinst(self.tmp / "deb/DEBIAN/postinst") + copier.copy_control(self.tmp / "deb/DEBIAN/control") + copier.copy_prerm(self.tmp / "deb/DEBIAN/prerm") + + # Set chmod 755 on prerm and postinst scripts + print("Changing deb file scripts permissions...") + utils.make_executable(self.tmp / "deb/DEBIAN/prerm") + utils.make_executable(self.tmp / "deb/DEBIAN/postinst") # Copy entitlements to temporary directory copier.copy_entitlements(self.tmp / "entitlements.plist") @@ -189,13 +187,9 @@ def permasign(self) -> Path: signer.sign_with_ldid(self.ldid) # Package the deb file - if self.args.skip_package: - copytree(full_app_path, self.output_dir / f"{bundle_path.name}") - return self.output_dir / f"{bundle_path.name}" - else: - logger.log("Packaging the deb file...", color=colors["yellow"]) - dpkg = Dpkg(bundle, executables, self.tmp, self.output_dir, self.dpkg, self.in_package, self.args.debug) - return dpkg.package() + logger.log("Packaging the deb file...", color=colors["yellow"]) + dpkg = Dpkg(bundle, executables, self.tmp, self.output_dir, self.dpkg, self.in_package, self.args.debug) + return dpkg.package() def check_path_arguments(self) -> None: path = self.args.path.strip('"').strip("'").strip() From e73874d6c86d6c0207531e5c8dd70767e83d7dad Mon Sep 17 00:00:00 2001 From: itsnebulalol Date: Thu, 1 Sep 2022 21:57:55 +0000 Subject: [PATCH 10/12] Lint script with autopep8 --- permasigner/permasigner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/permasigner/permasigner.py b/permasigner/permasigner.py index 16adc001..0e564a9b 100644 --- a/permasigner/permasigner.py +++ b/permasigner/permasigner.py @@ -48,7 +48,7 @@ def main(self) -> None: logger.debug("ldid found!", self.args.debug) else: logger.debug("ldid not found in PATH, we will download it later if needed", self.args.debug) - + self.dpkg = utils.cmd_in_path('dpkg-deb') if self.dpkg: logger.debug("dpkg-deb found!", self.args.debug) From da48ac59ac658044fa726e56aefe0ed4df88c2d2 Mon Sep 17 00:00:00 2001 From: Nebula Date: Thu, 1 Sep 2022 18:06:15 -0400 Subject: [PATCH 11/12] docs changes --- docs/usage/run-in-docker.md | 1 - docs/usage/run-on-ios.md | 31 ++++++++++++++++++++++--------- docs/usage/run-on-linux.md | 23 ++++++++++++++++++----- docs/usage/run-on-macos.md | 25 ++++++++++++++++++------- docs/usage/run-on-windows.md | 15 ++++++++++++++- 5 files changed, 72 insertions(+), 23 deletions(-) diff --git a/docs/usage/run-in-docker.md b/docs/usage/run-in-docker.md index 733f6b2b..c7e338dc 100644 --- a/docs/usage/run-in-docker.md +++ b/docs/usage/run-in-docker.md @@ -31,4 +31,3 @@ description: Run Permasigner in the official Docker container. * The script can do that for you, you will be asked to input the user password for ssh access. * Airdropping the file is probably the easiest, but you can use something like Dropbox or Mega. Advanced users can use openssh-sftp-server from Procursus. * Reboot to stock, the app will still work! - diff --git a/docs/usage/run-on-ios.md b/docs/usage/run-on-ios.md index 20c8c175..88c56a6d 100644 --- a/docs/usage/run-on-ios.md +++ b/docs/usage/run-on-ios.md @@ -10,10 +10,19 @@ If asked, the default root password is `alpine`. * Install NewTerm 2 from [Chariz](https://repo.chariz.com) using your favorite package manager * Install permasigner with `python3 -m pip install permasigner` - * If this fails, install python3 with `su root -c apt install python3` and install pip with `python3 -m ensurepip`. + * If this fails, install python3 with `su root -c apt install python3` and install pip with `python3 -m ensurepip`. + +{% hint style="info" %} +If you have extra entitlements, append the `-e` flag when running the script. If you don't know what this means, you can ignore this. + +When running the script, you will notice the a `one of the arguments is required` error. You'll need to append the IPA to sign as an argument, like `-u https://example.com/app.ipa`, or `-p /Users/nebula/Downloads/app.ipa`, for example. + +You may also pass the `-i` argument to install the created deb file automagically :) +{% endhint %} + * Run the script with `python3 -m permasigner` * Install the newly created deb file - * Find it in Filza at `/var/mobile/.permasigner/output` + * Find it in Filza at `/var/mobile/.permasigner/output` * Reboot to stock, the app will still work! ## Run with Shortcut @@ -23,25 +32,29 @@ This will only work on Procursus jailbreaks for now. {% endhint %} * Import the shortcut from [here](https://routinehub.co/shortcut/12520/) - * Make sure to pay attention to the import questions. + * Make sure to pay attention to the import questions. * Run the shortcut - * It may seem like it's frozen in some parts, but it isn't. + * It may seem like it's frozen in some parts, but it isn't. * Choose one of the options and follow the prompts * The app will install if you choose! - * If you choose not to, it's in /var/mobile/.permasigner/src/output. + * If you choose not to, it's in /var/mobile/.permasigner/src/output. ## Run from Source * Install NewTerm 2 from [Chariz](https://repo.chariz.com) using your favorite package manager * Clone this repository with `git clone https://github.com/permasigner/permasigner && cd permasigner` - * If this fails, install git with `su root -c apt install git`. -* Run the script with `python3 -m permasigner` - * If this fails, install python3 with `su root -c apt install python3` and pip with `python3 -m ensurepip`. + * If this fails, install git with `su root -c apt install git`. {% hint style="info" %} If you have extra entitlements, append the `-e` flag when running the script. If you don't know what this means, you can ignore this. + +When running the script, you will notice the a `one of the arguments is required` error. You'll need to append the IPA to sign as an argument, like `-u https://example.com/app.ipa`, or `-p /Users/nebula/Downloads/app.ipa`, for example. + +You may also pass the `-i` argument to install the created deb file automagically :) {% endhint %} +* Run the script with `python3 -m permasigner` + * If this fails, install python3 with `su root -c apt install python3` and pip with `python3 -m ensurepip`. * Install the newly created deb file - * You can use something like Filza to find it, it's in /var/mobile/permasigner/output. + * You can use something like Filza to find it, it's in /var/mobile/permasigner/output. * Reboot to stock, the app will still work! diff --git a/docs/usage/run-on-linux.md b/docs/usage/run-on-linux.md index 341f219e..ce6c127c 100644 --- a/docs/usage/run-on-linux.md +++ b/docs/usage/run-on-linux.md @@ -7,10 +7,19 @@ description: Run Permasigner on Debian based Linux distros. * Open a terminal using Ctrl + Shift + T on most Linux distros * Install bzip2 and binutils using your package manager of choice; ex. `sudo apt install bzip2 binutils` * Install the package with `pip install permasigner` or `pip3 install permasigner` - * If this fails, install python3 with your package manager of choice; ex. `sudo apt install python3`. + * If this fails, install python3 with your package manager of choice; ex. `sudo apt install python3`. + +{% hint style="info" %} +If you have extra entitlements, append the `-e` flag when running the script. If you don't know what this means, you can ignore this. + +When running the script, you will notice the a `one of the arguments is required` error. You'll need to append the IPA to sign as an argument, like `-u https://example.com/app.ipa`, or `-p /Users/nebula/Downloads/app.ipa`, for example. + +You may also pass the `-i` argument to install the created deb on your connected device file automagically :) +{% endhint %} + * Run the script with `python -m permasigner` or `python3 -m permasigner` * Install the newly created deb file on your iDevice - * You can use something like Dropbox or Mega; advanced users can use `openssh-sftp-server` from Procursus. + * You can use something like Dropbox or Mega; advanced users can use `openssh-sftp-server` from Procursus. * Reboot to stock, the app will still work! ## Run from Source @@ -18,14 +27,18 @@ description: Run Permasigner on Debian based Linux distros. * Open a terminal using Ctrl + Shift + T on most Linux distros * Install bzip2 and binutils using your package manager of choice; ex. `sudo apt install bzip2 binutils` * Clone this repository with `git clone https://github.com/permasigner/permasigner && cd permasigner` - * If this fails, install git with your package manager of choice; ex. `sudo apt install git`. -* Run the script with `python -m permasigner` or `python3 -m permasigner` - * If this fails, install python3 with your package manager of choice; ex. `sudo apt install python3`. + * If this fails, install git with your package manager of choice; ex. `sudo apt install git`. {% hint style="info" %} If you have extra entitlements, append the `-e` flag when running the script. If you don't know what this means, you can ignore this. + +When running the script, you will notice the a `one of the arguments is required` error. You'll need to append the IPA to sign as an argument, like `-u https://example.com/app.ipa`, or `-p /Users/nebula/Downloads/app.ipa`, for example. + +You may also pass the `-i` argument to install the created deb on your connected device file automagically :) {% endhint %} +* Run the script with `python -m permasigner` or `python3 -m permasigner` + * If this fails, install python3 with your package manager of choice; ex. `sudo apt install python3`. * Install the newly created deb file on your iDevice * You can use something like Dropbox or Mega; advanced users can use `openssh-sftp-server` from Procursus. * Reboot to stock, the app will still work! diff --git a/docs/usage/run-on-macos.md b/docs/usage/run-on-macos.md index df76978b..163e09f7 100644 --- a/docs/usage/run-on-macos.md +++ b/docs/usage/run-on-macos.md @@ -8,27 +8,38 @@ description: Run Permasigner on macOS. * If you use a third-party terminal, it'll most likely work too. * Install dpkg using [brew](https://brew.sh) with `brew install dpkg` * Install all requirements with `pip install permasigner` or `pip3 install permasigner` - * If this fails, install python3 using brew with `brew install python3`. + * If this fails, install python3 using brew with `brew install python3`. + +{% hint style="info" %} +If you have extra entitlements, append the `-e` flag when running the script. If you don't know what this means, you can ignore this. + +When running the script, you will notice the a `one of the arguments is required` error. You'll need to append the IPA to sign as an argument, like `-u https://example.com/app.ipa`, or `-p /Users/nebula/Downloads/app.ipa`, for example. + +You may also pass the `-i` argument to install the created deb on your connected device file automagically :) +{% endhint %} + * Run the script with `python -m permasigner` or `python3 -m permasigner` * Install the newly created deb file on your iDevice - * Airdropping the file is probably the easiest. + * Airdropping the file is probably the easiest. * Reboot to stock, the app will still work! ## Run from Source * Open Terminal from the Utilities folder or spotlight. - * If you use a third-party terminal, it'll most likely work too. + * If you use a third-party terminal, it'll most likely work too. * Clone this repository with `git clone https://github.com/permasigner/permasigner && cd permasigner` - * If this fails, install git with Xcode dev tools on macOS. + * If this fails, install git with Xcode dev tools on macOS. * Install dpkg using [brew](https://brew.sh) with `brew install dpkg` -* Run the script with `python -m permasigner` or `python3 -m permasigner` - * If this fails, install python3 using brew with `brew install python3`. {% hint style="info" %} If you have extra entitlements, append the `-e` flag when running the script. If you don't know what this means, you can ignore this. + +When running the script, you will notice the a `one of the arguments is required` error. You'll need to append the IPA to sign as an argument, like `-u https://example.com/app.ipa`, or `-p /Users/nebula/Downloads/app.ipa`, for example. + +You may also pass the `-i` argument to install the created deb on your connected device file automagically :) {% endhint %} * Run the script with `python main.py` or `python3 main.py` * Install the newly created deb file on your iDevice - * Airdropping the file is probably the easiest. + * Airdropping the file is probably the easiest. * Reboot to stock, the app will still work! diff --git a/docs/usage/run-on-windows.md b/docs/usage/run-on-windows.md index 17ff69ac..9d8bc1fa 100644 --- a/docs/usage/run-on-windows.md +++ b/docs/usage/run-on-windows.md @@ -1,5 +1,5 @@ --- -description: Run Permasigner on Windows using WSL or Docker. +description: Run Permasigner on Windows natively, with WSL, or with Docker. --- ## Run from Package (Recommended) @@ -7,6 +7,15 @@ description: Run Permasigner on Windows using WSL or Docker. * Open a Powershell window from the start menu * Install the package with `python -m pip install permasigner` * If this fails, install the latest Python 3 version from [here](https://python.org). + +{% hint style="info" %} +If you have extra entitlements, append the `-e` flag when running the script. If you don't know what this means, you can ignore this. + +When running the script, you will notice the a `one of the arguments is required` error. You'll need to append the IPA to sign as an argument, like `-u https://example.com/app.ipa`, or `-p /Users/nebula/Downloads/app.ipa`, for example. + +You may also pass the `-i` argument to install the created deb on your connected device file automagically :) +{% endhint %} + * Run the script with `python -m permasigner` * Install the newly created deb file on your iDevice * You can use something like Dropbox or Mega; advanced users can use `openssh-sftp-server` from Procursus. @@ -20,6 +29,10 @@ description: Run Permasigner on Windows using WSL or Docker. {% hint style="info" %} If you have extra entitlements, append the `-e` flag when running the script. If you don't know what this means, you can ignore this. + +When running the script, you will notice the a `one of the arguments is required` error. You'll need to append the IPA to sign as an argument, like `-u https://example.com/app.ipa`, or `-p /Users/nebula/Downloads/app.ipa`, for example. + +You may also pass the `-i` argument to install the created deb on your connected device file automagically :) {% endhint %} * Run the script with `python -m permasigner` From 08ba14e58557f50ad004cfcf636eaa31f02fdec5 Mon Sep 17 00:00:00 2001 From: Nebula Date: Thu, 1 Sep 2022 18:16:27 -0400 Subject: [PATCH 12/12] bump version --- permasigner/__version__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/permasigner/__version__.py b/permasigner/__version__.py index 72f26f59..0b2f79db 100644 --- a/permasigner/__version__.py +++ b/permasigner/__version__.py @@ -1 +1 @@ -__version__ = "1.1.2" +__version__ = "1.1.3"