5 Commits
v1.2 ... v1.2.2

Author SHA1 Message Date
zx
4e05892e1d chore: bump version to v1.2.2 2024-10-12 14:56:32 -04:00
zx
54359e0935 fix: don't zip hidden files (lol @whoeevee) 2024-10-12 14:53:42 -04:00
zx
46752d0a26 chore: update orion to v1.0.2 2024-09-30 20:16:19 -04:00
zx
ce20baae4a chore: bump version to v1.2.1
fuck my life
2024-09-18 22:03:48 -04:00
zx
91494bc3a3 turns out ldid can already do this... 2024-09-18 22:02:51 -04:00
7 changed files with 13 additions and 29 deletions

View File

@@ -99,7 +99,7 @@ def main() -> None:
) )
parser.add_argument( parser.add_argument(
"--version", action="version", version="cyan v1.2" "--version", action="version", version="cyan v1.2.2"
) )
from cyan import logic from cyan import logic

View File

@@ -12,7 +12,7 @@
<string>Orion</string> <string>Orion</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>1.0.1</string> <string>1.0.2</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>1</string> <string>1</string>

Binary file not shown.

View File

@@ -61,8 +61,8 @@ def main(parser: ArgumentParser) -> None:
app.plist.change_minimum_version(args.m) app.plist.change_minimum_version(args.m)
if args.k is not None: if args.k is not None:
app.change_icon(args.k, tmpdir) app.change_icon(args.k, tmpdir)
if args.x is not None: # `validate_inputs()` made it a dict if args.x is not None:
app.executable.merge_entitlements(args.x, tmpdir) app.executable.merge_entitlements(args.x)
if args.remove_supported_devices: if args.remove_supported_devices:
app.plist.remove_uisd() app.plist.remove_uisd()

View File

@@ -1,9 +1,6 @@
import os import os
import shutil import shutil
import plistlib
import subprocess import subprocess
from typing import Any
from plistlib import dump as pdump
from cyan import tbhutils from cyan import tbhutils
from .executable import Executable from .executable import Executable
@@ -98,27 +95,12 @@ class MainExecutable(Executable):
self.sign_with_entitlements(ENT_PATH) self.sign_with_entitlements(ENT_PATH)
print("[*] restored entitlements") print("[*] restored entitlements")
def merge_entitlements( def merge_entitlements(self, entitlements: str) -> None:
self, entitlements: dict[str, Any], tmpdir: str self.sign_with_entitlements(entitlements)
) -> None: print("[*] merged new entitlements")
ENT_PATH = f"{tmpdir}/new.entitlements"
existing: dict[str, Any]
if self.write_entitlements(ENT_PATH): # has entitlements
with open(ENT_PATH, "rb") as f:
existing = plistlib.load(f)
else:
existing = {}
new = existing | entitlements
with open(ENT_PATH, "wb") as f2:
pdump(new, f2)
self.sign_with_entitlements(ENT_PATH)
print("[*] modified entitlement keys:", ", ".join(entitlements))
def sign_with_entitlements(self, entitlements: str) -> bool: def sign_with_entitlements(self, entitlements: str) -> bool:
return subprocess.run( return subprocess.run(
[self.ldid, f"-S{entitlements}", self.path] [self.ldid, f"-S{entitlements}", "-M", self.path]
).returncode == 0 ).returncode == 0

View File

@@ -75,7 +75,7 @@ def validate_inputs(args: Namespace) -> Optional[str]:
try: try:
with open(args.x, "rb") as f: with open(args.x, "rb") as f:
args.x = pload(f) pload(f)
except Exception: except Exception:
sys.exit("[!] couldn't parse given entitlements file") sys.exit("[!] couldn't parse given entitlements file")
@@ -208,8 +208,10 @@ def make_ipa(tmpdir: str, output: str, level: int) -> None:
except FileNotFoundError: except FileNotFoundError:
pass pass
# don't zip hidden files to fix an installd error sometimes
# thanks a lot eevee 😭
subprocess.run( subprocess.run(
["zip", f"-{level}", "-r", output, "Payload"], ["zip", f"-{level}", "-r", output, "Payload", "-x", "*/.*"],
stdout=subprocess.DEVNULL stdout=subprocess.DEVNULL
) )
else: else:

View File

@@ -4,7 +4,7 @@ from setuptools import setup
setup( setup(
name="cyan", name="cyan",
version="1.2", version="1.2.2",
description="finally, pyzule doesn't suck", description="finally, pyzule doesn't suck",
author="zx", author="zx",
author_email="zx@hrzn.email", author_email="zx@hrzn.email",