Stemify iOS 1.1 and WebUI updates, repo restructure into desktop/ios/server/web
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
894dd5a695
commit
df5d847169
157 files changed
+3935
-742
No files matched your search
+35
-33
@@ -1,44 +1,36 @@
|
||||
#!/bin/bash
|
||||
# Builds build/stemify-<version>.ipa on a Mac: unsigned, for re-signing with Sideloadly/AltStore.
|
||||
# Builds build/public/stemify-<version>.ipa on a Mac: ad-hoc signed, for releases and re-signing with Sideloadly/AltStore.
|
||||
# With prov/Stemify.mobileprovision, prov/key.p12 and P12_PASS set, it also writes a signed
|
||||
# prov/stemify-<version>-signed.ipa (keeps CarPlay/Siri) for the owner's own device.
|
||||
# Uses swiftc directly so it works even when xcodebuild/actool need -runFirstLaunch.
|
||||
# build/prov/stemify-<version>-signed.ipa (keeps CarPlay/Siri) for the owner's own device.
|
||||
# Finished IPAs are kept per version; build/work is scratch and is wiped each run.
|
||||
# ios/scripts/build-remote.sh runs this on White-M1 and copies build/public and build/prov back to DevOps.
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
export PATH=/opt/homebrew/bin:$PATH
|
||||
OUT=build; APP=$OUT/Payload/Stemify.app
|
||||
rm -rf $OUT && mkdir -p $APP
|
||||
SDK=$(xcrun --sdk iphoneos --show-sdk-path)
|
||||
# Version and build number come from project.yml.
|
||||
B=build; OUT=$B/work; APP=$OUT/Payload/Stemify.app; EXT=$APP/PlugIns/StemifyWidgets.appex
|
||||
rm -rf $OUT && mkdir -p $OUT/Payload $B/public $B/prov
|
||||
VERSION=$(sed -nE 's/^ *MARKETING_VERSION: "(.*)"/\1/p' project.yml)
|
||||
BUILD=$(sed -nE 's/^ *CURRENT_PROJECT_VERSION: "(.*)"/\1/p' project.yml)
|
||||
|
||||
xcrun -sdk iphoneos swiftc -target arm64-apple-ios17.0 -sdk "$SDK" -O -wmo -swift-version 5 \
|
||||
-module-name Stemify -parse-as-library $(find Stemify -name '*.swift') -o $APP/Stemify
|
||||
|
||||
# Info.plist: xcodegen's generated one with the build settings filled in.
|
||||
# xcodebuild compiles the app, the widget extension, the asset catalog and the App Intents metadata.
|
||||
xcodegen generate -q
|
||||
sed -e 's/$(DEVELOPMENT_LANGUAGE)/en/; s/$(EXECUTABLE_NAME)/Stemify/; s/$(PRODUCT_BUNDLE_IDENTIFIER)/org.cdnutter.stemify/' \
|
||||
-e "s/\$(PRODUCT_NAME)/Stemify/; s/\$(MARKETING_VERSION)/$VERSION/; s/\$(CURRENT_PROJECT_VERSION)/$BUILD/" \
|
||||
-e 's/$(PRODUCT_MODULE_NAME)/Stemify/' Stemify/Info.plist > $APP/Info.plist
|
||||
P=$APP/Info.plist
|
||||
plutil -insert MinimumOSVersion -string 17.0 $P
|
||||
plutil -insert CFBundleSupportedPlatforms -json '["iPhoneOS"]' $P
|
||||
plutil -insert UIDeviceFamily -json '[1]' $P
|
||||
plutil -insert UIRequiredDeviceCapabilities -json '["arm64"]' $P
|
||||
plutil -insert DTPlatformName -string iphoneos $P
|
||||
plutil -insert CFBundleIcons -json '{"CFBundlePrimaryIcon":{"CFBundleIconFiles":["AppIcon60x60"]}}' $P
|
||||
plutil -lint $P
|
||||
printf 'APPL????' > $APP/PkgInfo
|
||||
xcodebuild -project Stemify.xcodeproj -scheme Stemify -configuration Release -sdk iphoneos \
|
||||
-destination generic/platform=iOS -derivedDataPath $B/dd CODE_SIGNING_ALLOWED=NO -quiet build
|
||||
cp -R $B/dd/Build/Products/Release-iphoneos/Stemify.app $APP
|
||||
[ -d $EXT ] || { echo "widget extension missing" >&2; exit 1; }
|
||||
|
||||
# Loose icon files, since actool also needs -runFirstLaunch.
|
||||
SRC=Stemify/Resources/Assets.xcassets/AppIcon.appiconset/icon.png
|
||||
sips -z 120 120 $SRC --out $APP/AppIcon60x60@2x.png >/dev/null
|
||||
sips -z 180 180 $SRC --out $APP/AppIcon60x60@3x.png >/dev/null
|
||||
# Ad-hoc signature carrying only the App Group, so Sideloadly/AltStore keep the widgets' shared data when re-signing.
|
||||
cat > $OUT/group.plist <<PL
|
||||
<?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>com.apple.security.application-groups</key><array><string>group.org.cdnutter.stemify</string></array></dict></plist>
|
||||
PL
|
||||
codesign -f -s - --entitlements $OUT/group.plist $EXT
|
||||
codesign -f -s - --entitlements $OUT/group.plist $APP
|
||||
|
||||
# Unsigned build, for the releases and AltStore/Sideloadly.
|
||||
(cd $OUT && zip -qry stemify-$VERSION.ipa Payload)
|
||||
echo "$OUT/stemify-$VERSION.ipa"
|
||||
# Public build, for the releases and AltStore/Sideloadly.
|
||||
rm -f $B/public/stemify-$VERSION.ipa
|
||||
(cd $OUT && zip -qry ../public/stemify-$VERSION.ipa Payload)
|
||||
echo "$B/public/stemify-$VERSION.ipa"
|
||||
|
||||
if [ -f prov/Stemify.mobileprovision ] && [ -f prov/key.p12 ] && [ -n "${P12_PASS:-}" ]; then
|
||||
KC=$PWD/$OUT/sign.keychain-db; KP=$(uuidgen)
|
||||
@@ -54,12 +46,22 @@ if [ -f prov/Stemify.mobileprovision ] && [ -f prov/key.p12 ] && [ -n "${P12_PAS
|
||||
ID=$(security find-identity -v -p codesigning $KC | sed -nE 's/.*"(Apple Development:.*)"/\1/p' | head -1)
|
||||
security cms -D -i prov/Stemify.mobileprovision > $OUT/prov.plist
|
||||
/usr/libexec/PlistBuddy -x -c 'Print :Entitlements' $OUT/prov.plist > $OUT/ent.plist
|
||||
# The widgets need their own profile (org.cdnutter.stemify.widgets with the App Group). Without one they're left out.
|
||||
if [ -f prov/StemifyWidgets.mobileprovision ]; then
|
||||
security cms -D -i prov/StemifyWidgets.mobileprovision > $OUT/wprov.plist
|
||||
/usr/libexec/PlistBuddy -x -c 'Print :Entitlements' $OUT/wprov.plist > $OUT/went.plist
|
||||
cp prov/StemifyWidgets.mobileprovision $EXT/embedded.mobileprovision
|
||||
codesign -f -s "$ID" --entitlements $OUT/went.plist --timestamp=none $EXT
|
||||
else
|
||||
rm -rf $APP/PlugIns
|
||||
fi
|
||||
cp prov/Stemify.mobileprovision $APP/embedded.mobileprovision
|
||||
codesign -f -s "$ID" --entitlements $OUT/ent.plist --timestamp=none $APP
|
||||
security list-keychains -d user -s $(security list-keychains -d user | tr -d "\"" | grep -v sign.keychain)
|
||||
security delete-keychain $KC
|
||||
# Personal build for this device only: stays in prov/ (gitignored), never released.
|
||||
# Personal build for this device only: stays in build/prov (gitignored), never released.
|
||||
rm -f $B/prov/stemify-$VERSION-signed.ipa
|
||||
(cd $OUT && zip -qry ../prov/stemify-$VERSION-signed.ipa Payload)
|
||||
echo "prov/stemify-$VERSION-signed.ipa (signed as $ID)"
|
||||
echo "$B/prov/stemify-$VERSION-signed.ipa (signed as $ID)"
|
||||
fi
|
||||
|
||||
Reference in new issue
Block a user