mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-23 04:02:36 -05:00
M16: add Japanese UI localization and isolated local macOS packaging
Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
1 parent
294012742e
commit
7c799a9acf
43 files changed
+2145
-539
No files matched your search
@@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Package the locally built arm64 app with an independent name and bundle identifier."""
|
||||
import argparse
|
||||
import pathlib
|
||||
import plistlib
|
||||
import shutil
|
||||
import subprocess
|
||||
|
||||
root = pathlib.Path(__file__).resolve().parents[1]
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--output", type=pathlib.Path, required=True)
|
||||
options = parser.parse_args()
|
||||
app = options.output.resolve()
|
||||
if app.exists():
|
||||
raise SystemExit(f"Output already exists: {app}")
|
||||
for name in ("lightcraft", "lightcraft-cli"):
|
||||
if not (root / "target/release" / name).is_file():
|
||||
raise SystemExit(f"Build {name} first with cargo build --release")
|
||||
|
||||
macos = app / "Contents/MacOS"
|
||||
resources = app / "Contents/Resources"
|
||||
macos.mkdir(parents=True)
|
||||
resources.mkdir(parents=True)
|
||||
template = (root / "packaging/macos/Info.plist.in").read_text()
|
||||
revision = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=root, text=True).strip()
|
||||
template = template.replace("@VERSION@", "0.2.0-ja.1").replace("@SHORT_VERSION@", "0.2.0").replace("@BUILD_SHA@", revision)
|
||||
info = plistlib.loads(template.encode())
|
||||
info.update({
|
||||
"CFBundleDevelopmentRegion": "ja",
|
||||
"CFBundleDisplayName": "LightCraft 日本語",
|
||||
"CFBundleName": "LightCraft 日本語",
|
||||
"CFBundleIdentifier": "local.taigi.lightcraft.japanese",
|
||||
"CFBundleLocalizations": ["ja", "en"],
|
||||
"NSHumanReadableCopyright": "Based on LightCraft by its contributors. Japanese localization added locally. MIT OR Apache-2.0.",
|
||||
})
|
||||
# This local build is an editor, not a competing system document-type owner.
|
||||
info.pop("UTExportedTypeDeclarations", None)
|
||||
info.pop("UTImportedTypeDeclarations", None)
|
||||
(app / "Contents/Info.plist").write_bytes(plistlib.dumps(info))
|
||||
shutil.copy2(root / "target/release/lightcraft", macos / "LightCraft")
|
||||
shutil.copy2(root / "target/release/lightcraft-cli", macos / "lightcraft-cli")
|
||||
shutil.copy2(root / "assets/app-icon/lightcraft.icns", resources / "LightCraft.icns")
|
||||
licenses = resources / "Licenses"
|
||||
licenses.mkdir()
|
||||
for source in ("LICENSE-MIT", "LICENSE-APACHE", "NOTICE", "assets/fonts/OFL-Inter.txt", "assets/fonts/OFL-BIZUDGothic.txt", "assets/app-icon/LICENSE.txt"):
|
||||
shutil.copy2(root / source, licenses / ("Icon-LICENSE.txt" if source == "assets/app-icon/LICENSE.txt" else pathlib.Path(source).name))
|
||||
shutil.copy2(root / "docs/localization-ja.md", resources / "日本語版について.md")
|
||||
subprocess.run(["codesign", "--force", "--sign", "-", "--timestamp=none", str(macos / "lightcraft-cli")], check=True)
|
||||
subprocess.run(["codesign", "--force", "--sign", "-", "--timestamp=none", str(app)], check=True)
|
||||
subprocess.run(["codesign", "--verify", "--deep", "--strict", str(app)], check=True)
|
||||
print(app)
|
||||
Reference in new issue
Block a user