Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 44 additions & 60 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ jobs:
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6

- name: Set up .NET SDK from global.json
uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0
with:
global-json-file: mauverse_mobile/global.json

Expand Down Expand Up @@ -177,23 +177,15 @@ jobs:
compression-level: 0

ios-release-unsigned:
name: iPhone Release configuration (unsigned)
name: Native SwiftUI iPhone Release (unsigned)
runs-on: macos-26
timeout-minutes: 60
timeout-minutes: 35
env:
NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages
defaults:
run:
working-directory: mauverse_mobile
MAUVERSE_SCHEDULE_TOKEN: ${{ secrets.MAUVERSE_SCHEDULE_TOKEN }}
steps:
- name: Check out sources
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6

- name: Set up .NET SDK from global.json
uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5
with:
global-json-file: mauverse_mobile/global.json

- name: Select Xcode 26.5
shell: bash
run: |
Expand All @@ -202,56 +194,48 @@ jobs:
test -d "$developer_dir"
sudo xcode-select --switch "$developer_dir"

- name: Report Apple toolchain
- name: Install project generator
run: brew install xcodegen

- name: Generate native Xcode project
working-directory: MauverseIOS
run: xcodegen generate --spec project.yml

- name: Report Apple toolchain and project
shell: bash
run: |
set -euo pipefail
xcodebuild -version
xcrun --sdk iphoneos --show-sdk-version
dotnet --info
xcodegen --version
xcodebuild -project MauverseIOS/MAUverse.xcodeproj -list

- name: Restore NuGet cache
uses: actions/cache@caa296126883cff596d87d8935842f9db880ef25 # v5
with:
path: ${{ env.NUGET_PACKAGES }}
key: ${{ runner.os }}-ios-nuget-${{ hashFiles('mauverse_mobile/global.json', 'mauverse_mobile/mau.csproj') }}
restore-keys: |
${{ runner.os }}-ios-nuget-
${{ runner.os }}-nuget-

- name: Install MAUI iOS workload
run: dotnet workload install maui-ios --version 10.0.300.3

- name: Restore iPhone target
run: >-
dotnet restore mau.csproj
-p:TargetFramework=net10.0-ios
-p:RuntimeIdentifier=ios-arm64

- name: Publish unsigned iPhone application
run: >-
dotnet publish mau.csproj
--configuration Release
--framework net10.0-ios
--runtime ios-arm64
--no-restore
--warnaserror
-p:ArchiveOnBuild=false
-p:BuildIpa=false
-p:CodesignRequireProvisioningProfile=false
-p:ContinuousIntegrationBuild=true
-p:CreatePackage=false
-p:EnableCodeSigning=false
-p:EnableDefaultCodesignEntitlements=false
-maxcpucount:1
- name: Build native iPhone application without signing
shell: bash
run: |
set -euo pipefail
test -n "$MAUVERSE_SCHEDULE_TOKEN"
xcodebuild \
-project MauverseIOS/MAUverse.xcodeproj \
-scheme MAUverse \
-configuration Release \
-sdk iphoneos \
-destination 'generic/platform=iOS' \
-derivedDataPath "$PWD/build/DerivedData" \
CODE_SIGNING_ALLOWED=NO \
CODE_SIGNING_REQUIRED=NO \
CODE_SIGN_IDENTITY="" \
DEVELOPMENT_TEAM="" \
MAUVERSE_SCHEDULE_TOKEN="$MAUVERSE_SCHEDULE_TOKEN" \
clean build

- name: Verify and package unsigned application
shell: bash
run: |
set -euo pipefail

publish_dir="bin/Release/net10.0-ios/ios-arm64/publish"
app_path="$(find "$publish_dir" -maxdepth 1 -type d -name '*.app' -print -quit)"
products_dir="build/DerivedData/Build/Products/Release-iphoneos"
app_path="$(find "$products_dir" -maxdepth 1 -type d -name '*.app' -print -quit)"
test -n "$app_path"

if codesign --verify "$app_path" >/dev/null 2>&1; then
Expand All @@ -267,39 +251,39 @@ jobs:
exit 1
fi

artifact_dir="bin/Release/net10.0-ios/unsigned-artifact"
artifact_dir="build/unsigned-artifact"
payload_dir="$artifact_dir/Payload"
mkdir -p "$payload_dir"
ditto "$app_path" "$payload_dir/$(basename "$app_path")"

(
cd "$artifact_dir"
/usr/bin/zip -qry "../mauverce-ios-arm64-unsigned.ipa" Payload
/usr/bin/zip -qry "../mauverse-native-ios-arm64-unsigned.ipa" Payload
)

{
echo "commit=${GITHUB_SHA}"
echo "target=net10.0-ios"
echo "target=native-swiftui"
echo "runtime=ios-arm64"
echo "signed=false"
echo "provisioning_profile=false"
echo "xcode=$(xcodebuild -version | tr '\n' ' ')"
echo "iphoneos_sdk=$(xcrun --sdk iphoneos --show-sdk-version)"
} > "bin/Release/net10.0-ios/build-metadata.txt"
} > "build/build-metadata.txt"

(
cd bin/Release/net10.0-ios
shasum -a 256 mauverce-ios-arm64-unsigned.ipa > checksums.txt
cd build
shasum -a 256 mauverse-native-ios-arm64-unsigned.ipa > checksums.txt
)

- name: Upload unsigned iPhone artifact
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: mauverce-ios-arm64-release-unsigned
name: mauverse-native-ios-arm64-release-unsigned
path: |
mauverse_mobile/bin/Release/net10.0-ios/mauverce-ios-arm64-unsigned.ipa
mauverse_mobile/bin/Release/net10.0-ios/checksums.txt
mauverse_mobile/bin/Release/net10.0-ios/build-metadata.txt
build/mauverse-native-ios-arm64-unsigned.ipa
build/checksums.txt
build/build-metadata.txt
if-no-files-found: error
retention-days: 14
compression-level: 0
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,11 @@
*.log
.DS_Store
Thumbs.db

# Native iOS (XcodeGen output and local builds)
MauverseIOS/*.xcodeproj/
MauverseIOS/*.xcworkspace/
build/
**/DerivedData/
*.xcuserstate
xcuserdata/
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"images": [
{
"filename": "AppIcon.png",
"idiom": "universal",
"platform": "ios",
"size": "1024x1024"
}
],
"info": {
"author": "xcode",
"version": 1
}
}

7 changes: 7 additions & 0 deletions MauverseIOS/Resources/Assets.xcassets/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"info": {
"author": "xcode",
"version": 1
}
}

34 changes: 34 additions & 0 deletions MauverseIOS/Resources/Info.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?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>CFBundleDevelopmentRegion</key>
<string>ru</string>
<key>CFBundleDisplayName</key>
<string>MAUverse</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>MAUverseScheduleToken</key>
<string>$(MAUVERSE_SCHEDULE_TOKEN)</string>
<key>UILaunchScreen</key>
<dict/>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
</dict>
</plist>
13 changes: 13 additions & 0 deletions MauverseIOS/Resources/PrivacyInfo.xcprivacy
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?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>NSPrivacyAccessedAPITypes</key>
<array/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
</dict>
</plist>

Loading
Loading