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 watch app
- change the app icon
- fakesign the output ipa/app
- fakesign the output ipa/tipa/app
- add custom entitlements to the main executable
- thin all binaries to arm64, it can LARGELY reduce app size sometimes!
- 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>
</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
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:
args.o = os.path.normpath(args.output)
if not (args.o.endswith(".app") or args.o.endswith(".ipa")):
print("[?] output's file extension not specified; will create ipa")
if not (
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"
else:
args.o = args.i
@@ -25,8 +29,9 @@ def main(parser: ArgumentParser) -> None:
if arg_err is not None:
parser.error(arg_err)
INPUT_IS_IPA = True if args.i.endswith(".ipa") else False
OUTPUT_IS_IPA = True if args.o.endswith(".ipa") else False
# mfw when "True if True else False" HAHAHAH
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():
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]:
if not (
args.i.endswith(".ipa")
or args.i.endswith(".app")
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):
return f"{args.i} does not exist"