Build VoidLink IPA / Build .ipa and publish source (push) Successful in 4m1s
Debug config produces com.voidlink.tf.debug10.iOS, which mismatches the com.voidlink.tf.iOS declared in VoidLink.json, so SideStore rejects the install. Release produces the matching com.voidlink.tf.iOS.
89 lines
3.3 KiB
YAML
89 lines
3.3 KiB
YAML
name: Build VoidLink IPA
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- Integration
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
build:
|
|
name: Build .ipa and publish source
|
|
runs-on: macos
|
|
env:
|
|
# Per-app: change APP_NAME for each app repo. Used everywhere so the
|
|
# perlis dir name and file names always match (no hardcoded drift).
|
|
APP_NAME: VoidLink
|
|
# Point xcodebuild at full Xcode without sudo (sudo hangs in CI).
|
|
# DEVELOPER_DIR overrides the active developer directory for all steps.
|
|
DEVELOPER_DIR: /Applications/Xcode.app/Contents/Developer
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Checkout submodules
|
|
run: git submodule update --init --recursive
|
|
|
|
- name: Select Xcode
|
|
run: xcodebuild -version
|
|
|
|
- name: Build unsigned .ipa
|
|
run: |
|
|
# Build the app (no signing — SideStore signs on-device).
|
|
# VoidLink's scheme is auto-generated from the VoidLink target.
|
|
# Release config → bundle id com.voidlink.tf.iOS (Debug uses
|
|
# com.voidlink.tf.debug10.iOS), so the .ipa matches the metadata.
|
|
xcodebuild \
|
|
-scheme VoidLink \
|
|
-sdk iphoneos \
|
|
-configuration Release \
|
|
archive \
|
|
-archivePath $PWD/build/VoidLink.xcarchive \
|
|
CODE_SIGN_IDENTITY="" \
|
|
CODE_SIGNING_REQUIRED="NO" \
|
|
CODE_SIGN_ENTITLEMENTS="" \
|
|
CODE_SIGNING_ALLOWED="NO"
|
|
|
|
# Package the .app bundle into an .ipa (Payload/App.app structure)
|
|
mkdir -p build/IPA/Payload
|
|
cp -R build/VoidLink.xcarchive/Products/Applications/VoidLink.app build/IPA/Payload/VoidLink.app
|
|
cd build/IPA
|
|
zip -r ../../$APP_NAME.ipa Payload
|
|
cd ../..
|
|
ls -la $APP_NAME.ipa
|
|
|
|
- name: Generate app metadata
|
|
run: |
|
|
VERSION="1.0"
|
|
SIZE=$(stat -f%z $APP_NAME.ipa)
|
|
DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
# Per-app metadata file. The perlis aggregator folds this into the
|
|
# root source.json at https://apps.bueso.eu/source.json.
|
|
cat > $APP_NAME.json <<EOF
|
|
{
|
|
"name": "VoidLink",
|
|
"bundleIdentifier": "com.voidlink.tf.iOS",
|
|
"developerName": "Luis",
|
|
"localizedDescription": "VoidLink (Moonlight fork) - stream from your PC. Built via Gitea Actions.",
|
|
"iconURL": "https://apps.bueso.eu/$APP_NAME/icon.png",
|
|
"downloadURL": "https://apps.bueso.eu/$APP_NAME/$APP_NAME.ipa",
|
|
"version": "$VERSION",
|
|
"versionDate": "$DATE",
|
|
"size": $SIZE,
|
|
"permissions": []
|
|
}
|
|
EOF
|
|
cat $APP_NAME.json
|
|
|
|
- name: Upload to source host (perlis)
|
|
run: |
|
|
# Upload .ipa + per-app metadata + icon to perlis via SSH.
|
|
# PERLIS_SSH_HOST is the Tailscale MagicDNS name (perlis.bueso.loc),
|
|
# reachable from the iMac runner over the Tailscale mesh.
|
|
ssh -o StrictHostKeyChecking=no \
|
|
"${{ secrets.PERLIS_SSH_USER }}@${{ secrets.PERLIS_SSH_HOST }}" \
|
|
"mkdir -p /mnt/appdata/ios-apps/$APP_NAME"
|
|
scp -o StrictHostKeyChecking=no \
|
|
$APP_NAME.ipa $APP_NAME.json icon.png \
|
|
"${{ secrets.PERLIS_SSH_USER }}@${{ secrets.PERLIS_SSH_HOST }}:/mnt/appdata/ios-apps/$APP_NAME/"
|