diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml new file mode 100644 index 0000000..fe4b2fa --- /dev/null +++ b/.gitea/workflows/build.yml @@ -0,0 +1,88 @@ +name: Build SwiftChat + +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + build: + name: Build .ipa and publish source + runs-on: macos + env: + # Per-app: the perlis dir name, .ipa name, and metadata filename. + # One variable so they can't drift. + APP_NAME: SwiftChat + # Point xcodebuild at full Xcode without sudo (sudo hangs in CI). + DEVELOPER_DIR: /Applications/Xcode.app/Contents/Developer + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Select Xcode + run: | + xcodebuild -version + + - name: Build unsigned .ipa + run: | + # The scheme is auto-generated from the SwiftChat target. Build with + # no signing — SideStore signs on-device. + xcodebuild \ + -project $APP_NAME.xcodeproj \ + -scheme $APP_NAME \ + -configuration Release \ + -sdk iphoneos \ + -destination 'generic/platform=iOS' \ + -derivedDataPath build \ + CODE_SIGNING_ALLOWED=NO \ + CODE_SIGNING_REQUIRED=NO \ + CODE_SIGN_IDENTITY="" \ + build + + # Locate the .app bundle + APP_PATH=$(find build/Build/Products -name "*.app" -type d | head -1) + echo "App bundle: $APP_PATH" + + # Package into an .ipa (Payload/App.app structure) + mkdir -p dist/Payload + cp -R "$APP_PATH" dist/Payload/ + cd dist + zip -r ../$APP_NAME.ipa Payload + cd .. + ls -la $APP_NAME.ipa + + - name: Generate app metadata + run: | + # Version from the built app so it can't drift from the pbxproj. + APP_PATH=$(find build/Build/Products -name "*.app" -type d | head -1) + VERSION=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "$APP_PATH/Info.plist") + SIZE=$(stat -f%z $APP_NAME.ipa) + DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") + cat > $APP_NAME.json <