diff --git a/README.md b/README.md index 15865b7..c8b8267 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,8 @@ root helper. | WebDAV server | yes | yes | | `.deb` installer + apt/dpkg | yes | yes | | Terminal | — | full a-Shell command set | -| SSH server | — | mobile / root, password `alpine`, port 2222 | -| `mount`, `extract`, archive support | terminal only | yes | +| SSH server | mobile / root, password `alpine`, port 2222 | same | +| `mount`, `extract`, archive support | SSH / basic shell | yes | | `neofetch`, `respring` | — | yes | Release assets are named exactly: @@ -118,7 +118,7 @@ extract sample.zip -C out `./test` is a `#!/bin/dash` script; iOS does not allow executing Mach-O files from the app data container, so scripts are run through the bundled `dash`. -SSH (developer build): +SSH (both builds; developer also has the full terminal command set): ```sh ssh -p 2222 mobile@DEVICE_IP # password: alpine diff --git a/Tweak.m b/Tweak.m index a45267b..ab97e17 100644 --- a/Tweak.m +++ b/Tweak.m @@ -2118,8 +2118,7 @@ static NSString *hook_prefTitleForFooter(id self, SEL _cmd, UITableView *tableVi @"Running · %@ · users: mobile, root · password: alpine", WQSSHServerURL()]; } - return @"Enable SSH access for mobile and root (password alpine). " - @"Requires the developer build with libssh."; + return @"Enable SSH access for mobile and root (password alpine)."; } return orig_prefTitleForFooter ? ((NSString *(*)(id, SEL, UITableView *, NSInteger))orig_prefTitleForFooter)( diff --git a/scripts/build_wq_ipa.sh b/scripts/build_wq_ipa.sh index 2ac0751..9213bd9 100755 --- a/scripts/build_wq_ipa.sh +++ b/scripts/build_wq_ipa.sh @@ -118,6 +118,15 @@ mkdir -p "$APP/Frameworks" cp "$DYLIB" "$APP/Frameworks/FilzaApplySandboxExt.dylib" codesign --remove-signature "$APP/Frameworks/FilzaApplySandboxExt.dylib" 2>/dev/null || true +# SSH server runtime is included in both public and developer builds. +if [[ -f "$REPO_ROOT/vendor/libssh/libssh.4.dylib" ]]; then + cp "$REPO_ROOT/vendor/libssh/libssh.4.dylib" "$APP/Frameworks/libssh.4.dylib" +fi +if [[ -d "$REPO_ROOT/vendor/openssl.framework" ]]; then + rm -rf "$APP/Frameworks/openssl.framework" + cp -R "$REPO_ROOT/vendor/openssl.framework" "$APP/Frameworks/openssl.framework" +fi + if [[ "${WQ_TERMINAL:-0}" == "full" ]]; then ASHELL_IPA="${ASHELL_IPA:-$HOME/Downloads/Terminal.ipa}" "$REPO_ROOT/scripts/prepare_dev_terminal.sh" "$APP" "$ASHELL_IPA" diff --git a/vendor/openssl.framework/Info.plist b/vendor/openssl.framework/Info.plist new file mode 100644 index 0000000..20d9fad --- /dev/null +++ b/vendor/openssl.framework/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + openssl + CFBundleIdentifier + org.openssl.OpenSSL + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + openssl + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.1.123 + CFBundleVersion + 1 + MinimumOSVersion + 14.0 + + diff --git a/vendor/openssl.framework/_CodeSignature/CodeResources b/vendor/openssl.framework/_CodeSignature/CodeResources new file mode 100644 index 0000000..c14ea12 --- /dev/null +++ b/vendor/openssl.framework/_CodeSignature/CodeResources @@ -0,0 +1,101 @@ + + + + + files + + Info.plist + + FVnf8y74Ll+GghvlSKXTaKcT3i8= + + + files2 + + rules + + ^.* + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^.* + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Base\.lproj/ + + weight + 1010 + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/vendor/openssl.framework/openssl b/vendor/openssl.framework/openssl new file mode 100644 index 0000000..a9cb5e3 Binary files /dev/null and b/vendor/openssl.framework/openssl differ