Files
byre/mac/phone.sh
T

102 lines
4.4 KiB
Bash
Raw Permalink Normal View History

#!/bin/sh
set -eu
mac=$(cd "$(dirname "$0")" && pwd)
root=$(dirname "$mac")
shared=$HOME/Library/Caches/byre/build
sdk=iphoneos
destination="generic/platform=iOS"
link=
if [ "${1:-}" = --simulator ]; then
sdk=iphonesimulator
destination="generic/platform=iOS Simulator"
link="-Xlinker -sectcreate -Xlinker __TEXT -Xlinker __entitlements -Xlinker $shared/mac/phone/byre.entitlements"
fi
build=$mac/.build/phone/$sdk
app=$build/Byre.app
svg=$mac/icon.svg
mkdir -p "$shared" "$build"
lockf -k "$shared.lock" sh -ec '
rsync -rlc --delete --exclude /mac/.build --exclude /mac/Frameworks --exclude /hands/.build "$1/mac" "$1/api" "$1/hands" "$2/"
sh "$2/mac/tailscalekit.sh" "$2"
cd "$2/mac"
xcodebuild build -quiet -scheme Byre -destination "$4" -configuration Release -derivedDataPath "$2/phone" -skipPackagePluginValidation -skipMacroValidation CODE_SIGNING_ALLOWED=NO "OTHER_LDFLAGS=\$(inherited) $6"
products=$2/phone/Build/Products/Release-$3
rm -rf "$5"
mkdir -p "$5/Frameworks"
cp "$products/Byre" "$5/Byre"
ditto "$products/TailscaleKit.framework" "$5/Frameworks/TailscaleKit.framework"
' sh "$root" "$shared" "$sdk" "$destination" "$app" "$link"
assets=$build/Assets.xcassets/AppIcon.appiconset
rm -rf "$build/Assets.xcassets"
mkdir -p "$assets"
rsvg-convert --width 1024 --height 1024 --output "$assets/icon.png" "$svg"
cat > "$assets/Contents.json" <<EOF
{"images":[{"filename":"icon.png","idiom":"universal","platform":"ios","size":"1024x1024"}],"info":{"author":"byre","version":1}}
EOF
xcrun actool --compile "$app" --platform "$sdk" --minimum-deployment-target 27.0 --target-device iphone --app-icon AppIcon --output-partial-info-plist "$build/icons.plist" --output-format human-readable-text "$build/Assets.xcassets"
plist=$app/Info.plist
cp "$mac/phone/Info.plist" "$plist"
plutil -insert CFBundleIcons -xml "$(plutil -extract CFBundleIcons xml1 -o - "$build/icons.plist")" "$plist"
plutil -insert ByreCommit -string "$(git -C "$root" rev-parse HEAD)" "$plist"
version=$(git -C "$root" describe --tags --abbrev=0)
plutil -insert CFBundleShortVersionString -string "${version#v}" "$plist"
plutil -insert CFBundleVersion -string "$(date -u +%Y%m%d.%H%M%S)" "$plist"
platform=$(xcrun --sdk "$sdk" --show-sdk-platform-version)
sdkbuild=$(xcrun --sdk "$sdk" --show-sdk-build-version)
plutil -insert CFBundleSupportedPlatforms -xml "<array><string>$(if [ "$sdk" = iphoneos ]; then echo iPhoneOS; else echo iPhoneSimulator; fi)</string></array>" "$plist"
plutil -insert DTPlatformName -string "$sdk" "$plist"
plutil -insert DTPlatformVersion -string "$platform" "$plist"
plutil -insert DTSDKName -string "$sdk$platform" "$plist"
plutil -insert DTSDKBuild -string "$sdkbuild" "$plist"
plutil -insert DTPlatformBuild -string "$sdkbuild" "$plist"
plutil -insert DTXcode -string "$(xcodebuild -version | awk 'NR == 1 { split($2, v, "."); printf "%d%d%d", v[1], v[2], v[3] }')" "$plist"
plutil -insert DTXcodeBuild -string "$(xcodebuild -version | awk 'NR == 2 { print $3 }')" "$plist"
plutil -insert DTCompiler -string com.apple.compilers.llvm.clang.1_0 "$plist"
mkdir -p "$app/fonts"
cp "$mac"/fonts/*.woff2 "$app/fonts/"
codesign --force --sign - "$app/Frameworks/TailscaleKit.framework"
if [ "$sdk" = iphonesimulator ]; then
codesign --force --sign - "$app"
echo "$app"
exit 0
fi
codesign --force --sign - --entitlements "$mac/phone/byre.entitlements" "$app"
archive=$build/Byre.xcarchive
rm -rf "$archive"
mkdir -p "$archive/Products/Applications"
ditto "$app" "$archive/Products/Applications/Byre.app"
cat > "$archive/Info.plist" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>ApplicationProperties</key>
<dict>
<key>ApplicationPath</key>
<string>Applications/Byre.app</string>
<key>Architectures</key>
<array>
<string>arm64</string>
</array>
<key>CFBundleIdentifier</key>
<string>$(plutil -extract CFBundleIdentifier raw "$plist")</string>
<key>CFBundleShortVersionString</key>
<string>$(plutil -extract CFBundleShortVersionString raw "$plist")</string>
<key>CFBundleVersion</key>
<string>$(plutil -extract CFBundleVersion raw "$plist")</string>
<key>Team</key>
<string>XDZ54KDM4W</string>
</dict>
<key>ArchiveVersion</key>
<integer>2</integer>
<key>CreationDate</key>
<date>$(date -u +%Y-%m-%dT%H:%M:%SZ)</date>
<key>Name</key>
<string>Byre</string>
<key>SchemeName</key>
<string>Byre</string>
</dict>
</plist>
EOF
echo "$archive"