Release 3.8.2.13: iOS Packet Tunnel client and Clash URL subscriptions.
ci / test (macos-latest) (push) Canceled after 0s
ci / test (ubuntu-latest) (push) Canceled after 0s
ci / test (windows-latest) (push) Canceled after 0s

Add SwiftUI + Network Extension (LibXray/hev), parse Clash Meta YAML from subscription URLs into vless/trojan/hy2 share links, keep the selected server on connect, and ship Navis-3.8.2.13.ipa with versioned changelog.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
M4
2026-08-01 22:46:32 +03:00
co-authored by Cursor
parent 8b564110d5
commit 7ceb3a5148
44 changed files with 4165 additions and 72 deletions
+41
View File
@@ -12,6 +12,11 @@ VERSIONINFO = ROOT / "versioninfo.json"
BUILD_BAT = ROOT / "build-macos.bat"
ANDROID_GRADLE = ROOT / "android" / "app" / "build.gradle.kts"
INDEX_HTML = ROOT / "internal" / "appui" / "index.html"
IOS_README = ROOT / "ios" / "README.md"
IOS_PLISTS = (
ROOT / "ios" / "Navis" / "Info.plist",
ROOT / "ios" / "NavisTunnel" / "Info.plist",
)
def read_consts() -> tuple[str, int]:
@@ -77,6 +82,42 @@ def main() -> None:
else:
print("index.html badge already in sync")
for plist in IOS_PLISTS:
if not plist.exists():
continue
p = plist.read_text(encoding="utf-8")
p2 = re.sub(
r"(<key>CFBundleShortVersionString</key>\s*<string>)[^<]+",
rf"\g<1>{ver}",
p,
count=1,
)
p2 = re.sub(
r"(<key>CFBundleVersion</key>\s*<string>)[^<]+",
rf"\g<1>{full}",
p2,
count=1,
)
if p2 != p:
plist.write_text(p2, encoding="utf-8")
print("updated", plist, "->", ver, full)
else:
print(plist.name, "already in sync")
if IOS_README.exists():
r = IOS_README.read_text(encoding="utf-8")
r2 = re.sub(
r"(Версия:\s*\*\*)[^*]+(\*\*)",
rf"\g<1>{display}\2",
r,
count=1,
)
if r2 != r:
IOS_README.write_text(r2, encoding="utf-8")
print("updated", IOS_README, "->", display)
else:
print("ios/README.md already in sync")
if __name__ == "__main__":
main()