chore: add support for .tipa

This commit is contained in:
zx
2024-10-14 21:08:34 -04:00
parent 4e05892e1d
commit 5f37ab3f23
3 changed files with 14 additions and 10 deletions

View File

@@ -14,7 +14,7 @@ you can open an issue to request a feature :D !! also see my [recommended flags]
- remove UISupportedDevices - remove UISupportedDevices
- remove watch app - remove watch app
- change the app icon - change the app icon
- fakesign the output ipa/app - fakesign the output ipa/tipa/app
- add custom entitlements to the main executable - add custom entitlements to the main executable
- thin all binaries to arm64, it can LARGELY reduce app size sometimes! - thin all binaries to arm64, it can LARGELY reduce app size sometimes!
- remove all app extensions (or just encrypted ones!) - remove all app extensions (or just encrypted ones!)
@@ -48,8 +48,6 @@ the `zip` and `unzip` commands are *optional* dependencies, they may [fix issues
</ol> </ol>
</details> </details>
note: if you installed cyan before v1.1.3 using `pip`, make sure you `pip uninstall cyan`, then verify you have the latest version with `cyan --version`
## making cyan files ## making cyan files
cyan comes bundled with the `cgen` command, which lets you generate `.cyan` files to pass to `-z`/`--cyan` ! cyan comes bundled with the `cgen` command, which lets you generate `.cyan` files to pass to `-z`/`--cyan` !

View File

@@ -13,8 +13,12 @@ def main(parser: ArgumentParser) -> None:
if args.output is not None: if args.output is not None:
args.o = os.path.normpath(args.output) args.o = os.path.normpath(args.output)
if not (args.o.endswith(".app") or args.o.endswith(".ipa")): if not (
print("[?] output's file extension not specified; will create ipa") args.o.endswith(".app")
or args.o.endswith(".ipa")
or args.o.endswith(".tipa")
):
print("[?] valid file extension not found; will create ipa")
args.o += ".ipa" args.o += ".ipa"
else: else:
args.o = args.i args.o = args.i
@@ -25,8 +29,9 @@ def main(parser: ArgumentParser) -> None:
if arg_err is not None: if arg_err is not None:
parser.error(arg_err) parser.error(arg_err)
INPUT_IS_IPA = True if args.i.endswith(".ipa") else False # mfw when "True if True else False" HAHAHAH
OUTPUT_IS_IPA = True if args.o.endswith(".ipa") else False INPUT_IS_IPA = args.i.endswith(".ipa") or args.i.endswith(".tipa")
OUTPUT_IS_IPA = args.o.endswith(".ipa") or args.o.endswith(".tipa")
with TemporaryDirectory() as tmpdir, tbhtypes.LeavingCM(): with TemporaryDirectory() as tmpdir, tbhtypes.LeavingCM():
app_path = tbhutils.get_app(args.i, tmpdir, INPUT_IS_IPA) app_path = tbhutils.get_app(args.i, tmpdir, INPUT_IS_IPA)

View File

@@ -17,10 +17,11 @@ HAS_UNZIP = shutil.which("unzip") is not None
def validate_inputs(args: Namespace) -> Optional[str]: def validate_inputs(args: Namespace) -> Optional[str]:
if not ( if not (
args.i.endswith(".ipa") args.i.endswith(".app")
or args.i.endswith(".app") or args.i.endswith(".ipa")
or args.i.endswith(".tipa")
): ):
return "the input file must be an ipa/app" return "the input file must be an ipa/tipa/app"
if not os.path.exists(args.i): if not os.path.exists(args.i):
return f"{args.i} does not exist" return f"{args.i} does not exist"