mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-11-07 08:04:04 +01:00
ci(macos): restore LibTorch.framework's symlinks before signing
torch_dart's prebuilt tarball stores the framework's Versions/Current, top-level binary and Resources as copies of Versions/A, and codesign refuses the result as an ambiguous bundle, failing the app's signature. relink_framework.sh puts the three symlinks back, after checking that every copy it replaces matches Versions/A byte for byte.
This commit is contained in:
@@ -169,6 +169,10 @@ jobs:
|
|||||||
tar -xzf torch_dart.tar.gz -C torch_dart
|
tar -xzf torch_dart.tar.gz -C torch_dart
|
||||||
rm torch_dart.tar.gz
|
rm torch_dart.tar.gz
|
||||||
popd
|
popd
|
||||||
|
# The tarball is packed on Linux with the framework's symlinks stored
|
||||||
|
# as copies, which codesign refuses as an ambiguous bundle.
|
||||||
|
scripts/macos/relink_framework.sh \
|
||||||
|
scripts/torch_dart/macos/LibTorch.xcframework/macos-arm64_x86_64/LibTorch.framework
|
||||||
|
|
||||||
- name: Fetch prebuilt reown_flutter
|
- name: Fetch prebuilt reown_flutter
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
Executable
+48
@@ -0,0 +1,48 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Restore the symlinks of a versioned macOS framework whose archive flattened them.
|
||||||
|
#
|
||||||
|
# Usage: relink_framework.sh <Name.framework>
|
||||||
|
#
|
||||||
|
# torch_dart's prebuilt tarball is packed on Linux, and tar there stores
|
||||||
|
# Versions/Current, the top-level binary and Resources as full copies of
|
||||||
|
# Versions/A. codesign then calls the bundle "ambiguous (could be app or
|
||||||
|
# framework)" and refuses to sign the app around it. A versioned framework
|
||||||
|
# needs exactly:
|
||||||
|
# Versions/Current -> A
|
||||||
|
# <Name> -> Versions/Current/<Name>
|
||||||
|
# Resources -> Versions/Current/Resources
|
||||||
|
# Every copy is compared with Versions/A before it is replaced, so this never
|
||||||
|
# throws away a file that differs.
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
[ $# -eq 1 ] || { echo "usage: $0 <Name.framework>" >&2; exit 64; }
|
||||||
|
fw=${1%/}
|
||||||
|
name=$(basename "$fw" .framework)
|
||||||
|
[ -f "$fw/Versions/A/$name" ] || {
|
||||||
|
echo "FATAL: $fw has no Versions/A/$name; not a versioned framework" >&2; exit 1; }
|
||||||
|
|
||||||
|
same() { # same <path> <reference>: the copy exists and matches Versions/A
|
||||||
|
[ -L "$1" ] && return 1
|
||||||
|
diff -r "$1" "$2" >/dev/null || {
|
||||||
|
echo "FATAL: $1 differs from $2; refusing to replace it with a symlink" >&2; exit 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
relink() { # relink <path> <target>
|
||||||
|
if [ -L "$fw/$1" ]; then
|
||||||
|
[ "$(readlink "$fw/$1")" = "$2" ] || {
|
||||||
|
echo "FATAL: $fw/$1 points at $(readlink "$fw/$1"), not $2" >&2; exit 1; }
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
rm -rf "${fw:?}/$1"
|
||||||
|
ln -s "$2" "$fw/$1"
|
||||||
|
echo "relinked $fw/$1 -> $2"
|
||||||
|
}
|
||||||
|
|
||||||
|
[ -e "$fw/Versions/Current" ] && ! [ -L "$fw/Versions/Current" ] && same "$fw/Versions/Current" "$fw/Versions/A"
|
||||||
|
relink Versions/Current A
|
||||||
|
[ -e "$fw/$name" ] && ! [ -L "$fw/$name" ] && same "$fw/$name" "$fw/Versions/A/$name"
|
||||||
|
relink "$name" "Versions/Current/$name"
|
||||||
|
if [ -d "$fw/Versions/A/Resources" ]; then
|
||||||
|
[ -e "$fw/Resources" ] && ! [ -L "$fw/Resources" ] && same "$fw/Resources" "$fw/Versions/A/Resources"
|
||||||
|
relink Resources Versions/Current/Resources
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user