feat(release): production Apple builds — notarized macOS dmg + iOS TestFlight
release.yml (v* tags / dispatch, macos-arm64 runner): universal mac +
iOS xcframework -> xcodebuild archive -> Developer ID export ->
notarytool + staple -> dmg on the Gitea release; iOS archive uploads
to TestFlight (app-store-connect/upload). Per-run throwaway keychain;
ASC API key authenticates notarization, upload, and automatic-signing
profile fetch. macOS App Store lane deferred (needs App Sandbox);
tvOS deferred (tier-3 Rust targets).
All app targets now share bundle ID io.unom.punktfunk — ONE App Store
listing with universal purchase (decided pre-submission; effectively
unchangeable after). ITSAppUsesNonExemptEncryption=false declared
(standard-algorithm AES-GCM, exempt).
build-xcframework.sh resolves Apple toolchains itself: cargo's HOST
artifacts (proc-macros, build scripts) are loaded by the running OS,
and a newer-than-OS beta Xcode ld emits LINKEDIT layouts dyld rejects
("mis-aligned LINKEDIT string pool" -> misleading E0463) — so prefer
a non-beta Xcode for everything, fall back to CLT for mac-only slices
(env untouched: an explicit DEVELOPER_DIR=<CLT> trips xcrun's license
check), refuse iOS/tvOS without a real Xcode (CLT has no iOS SDK).
The runner plist no longer injects DEVELOPER_DIR for the same reason.
punktfunk_Logo.icon: dropped the Xcode-27-beta-only Icon Composer
features (refractivity, specular-location) — 26.5's actool crashes on
them, and store builds must use release Xcode. Visual delta is the
refraction/specular nuance only; re-author when 27 ships.
Validated on home-mac-mini-1 with Xcode 26.5: mac+iOS xcframework
slices, unified bundle IDs, signing-free app build.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,108 +1,87 @@
|
||||
{
|
||||
"features" : [
|
||||
"refractivity",
|
||||
"specular-location"
|
||||
],
|
||||
"fill" : {
|
||||
"automatic-gradient" : "display-p3:0.39502,0.30640,0.96338,1.00000"
|
||||
"fill": {
|
||||
"automatic-gradient": "display-p3:0.39502,0.30640,0.96338,1.00000"
|
||||
},
|
||||
"groups" : [
|
||||
"groups": [
|
||||
{
|
||||
"layers" : [
|
||||
"layers": [
|
||||
{
|
||||
"image-name" : "punktfunk_Minimal_Icon-Composer_Layer-3.svg",
|
||||
"name" : "punktfunk_Minimal_Icon-Composer_Layer-3"
|
||||
"image-name": "punktfunk_Minimal_Icon-Composer_Layer-3.svg",
|
||||
"name": "punktfunk_Minimal_Icon-Composer_Layer-3"
|
||||
}
|
||||
],
|
||||
"name" : "Group",
|
||||
"refractivity" : {
|
||||
"depth" : 0.0419921875,
|
||||
"enabled" : true,
|
||||
"strength" : 0.5463671875
|
||||
"name": "Group",
|
||||
"shadow": {
|
||||
"kind": "neutral",
|
||||
"opacity": 0.6
|
||||
},
|
||||
"shadow" : {
|
||||
"kind" : "neutral",
|
||||
"opacity" : 0.6
|
||||
},
|
||||
"translucency" : {
|
||||
"enabled" : true,
|
||||
"value" : 0.6
|
||||
"translucency": {
|
||||
"enabled": true,
|
||||
"value": 0.6
|
||||
}
|
||||
},
|
||||
{
|
||||
"blur-material" : null,
|
||||
"layers" : [
|
||||
"blur-material": null,
|
||||
"layers": [
|
||||
{
|
||||
"image-name" : "punktfunk_Minimal_Icon-Composer_Layer-2 2.svg",
|
||||
"name" : "punktfunk_Minimal_Icon-Composer_Layer-2"
|
||||
"image-name": "punktfunk_Minimal_Icon-Composer_Layer-2 2.svg",
|
||||
"name": "punktfunk_Minimal_Icon-Composer_Layer-2"
|
||||
}
|
||||
],
|
||||
"lighting" : "individual",
|
||||
"name" : "Group",
|
||||
"refractivity" : {
|
||||
"depth" : 0.1,
|
||||
"enabled" : false,
|
||||
"strength" : 0.57
|
||||
"lighting": "individual",
|
||||
"name": "Group",
|
||||
"shadow": {
|
||||
"kind": "layer-color",
|
||||
"opacity": 0.56
|
||||
},
|
||||
"shadow" : {
|
||||
"kind" : "layer-color",
|
||||
"opacity" : 0.56
|
||||
},
|
||||
"specular" : true,
|
||||
"translucency" : {
|
||||
"enabled" : true,
|
||||
"value" : 1
|
||||
"specular": true,
|
||||
"translucency": {
|
||||
"enabled": true,
|
||||
"value": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"blur-material" : 0,
|
||||
"layers" : [
|
||||
"blur-material": 0,
|
||||
"layers": [
|
||||
{
|
||||
"fill-specializations" : [
|
||||
"fill-specializations": [
|
||||
{
|
||||
"appearance" : "dark",
|
||||
"value" : {
|
||||
"automatic-gradient" : "display-p3:0.44238,0.34595,0.99951,1.00000"
|
||||
"appearance": "dark",
|
||||
"value": {
|
||||
"automatic-gradient": "display-p3:0.44238,0.34595,0.99951,1.00000"
|
||||
}
|
||||
}
|
||||
],
|
||||
"image-name" : "punktfunk_Minimal_Icon-Composer_Layer-1 2.svg",
|
||||
"name" : "punktfunk_Minimal_Icon-Composer_Layer-1"
|
||||
"image-name": "punktfunk_Minimal_Icon-Composer_Layer-1 2.svg",
|
||||
"name": "punktfunk_Minimal_Icon-Composer_Layer-1"
|
||||
}
|
||||
],
|
||||
"refractivity" : {
|
||||
"depth" : 0.5808984375,
|
||||
"enabled" : true,
|
||||
"strength" : 0.2508984375
|
||||
"shadow": {
|
||||
"kind": "neutral",
|
||||
"opacity": 0.6
|
||||
},
|
||||
"shadow" : {
|
||||
"kind" : "neutral",
|
||||
"opacity" : 0.6
|
||||
},
|
||||
"specular" : "outside",
|
||||
"translucency" : {
|
||||
"enabled" : true,
|
||||
"value" : 0.53
|
||||
"specular": true,
|
||||
"translucency": {
|
||||
"enabled": true,
|
||||
"value": 0.53
|
||||
}
|
||||
},
|
||||
{
|
||||
"layers" : [
|
||||
|
||||
],
|
||||
"shadow" : {
|
||||
"kind" : "neutral",
|
||||
"opacity" : 0.6
|
||||
"layers": [],
|
||||
"shadow": {
|
||||
"kind": "neutral",
|
||||
"opacity": 0.6
|
||||
},
|
||||
"translucency" : {
|
||||
"enabled" : true,
|
||||
"value" : 0.2
|
||||
"translucency": {
|
||||
"enabled": true,
|
||||
"value": 0.2
|
||||
}
|
||||
}
|
||||
],
|
||||
"supported-platforms" : {
|
||||
"circles" : [
|
||||
"supported-platforms": {
|
||||
"circles": [
|
||||
"watchOS"
|
||||
],
|
||||
"squares" : "shared"
|
||||
"squares": "shared"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user