57e7f9fe25
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>
88 lines
1.8 KiB
JSON
88 lines
1.8 KiB
JSON
{
|
|
"fill": {
|
|
"automatic-gradient": "display-p3:0.39502,0.30640,0.96338,1.00000"
|
|
},
|
|
"groups": [
|
|
{
|
|
"layers": [
|
|
{
|
|
"image-name": "punktfunk_Minimal_Icon-Composer_Layer-3.svg",
|
|
"name": "punktfunk_Minimal_Icon-Composer_Layer-3"
|
|
}
|
|
],
|
|
"name": "Group",
|
|
"shadow": {
|
|
"kind": "neutral",
|
|
"opacity": 0.6
|
|
},
|
|
"translucency": {
|
|
"enabled": true,
|
|
"value": 0.6
|
|
}
|
|
},
|
|
{
|
|
"blur-material": null,
|
|
"layers": [
|
|
{
|
|
"image-name": "punktfunk_Minimal_Icon-Composer_Layer-2 2.svg",
|
|
"name": "punktfunk_Minimal_Icon-Composer_Layer-2"
|
|
}
|
|
],
|
|
"lighting": "individual",
|
|
"name": "Group",
|
|
"shadow": {
|
|
"kind": "layer-color",
|
|
"opacity": 0.56
|
|
},
|
|
"specular": true,
|
|
"translucency": {
|
|
"enabled": true,
|
|
"value": 1
|
|
}
|
|
},
|
|
{
|
|
"blur-material": 0,
|
|
"layers": [
|
|
{
|
|
"fill-specializations": [
|
|
{
|
|
"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"
|
|
}
|
|
],
|
|
"shadow": {
|
|
"kind": "neutral",
|
|
"opacity": 0.6
|
|
},
|
|
"specular": true,
|
|
"translucency": {
|
|
"enabled": true,
|
|
"value": 0.53
|
|
}
|
|
},
|
|
{
|
|
"layers": [],
|
|
"shadow": {
|
|
"kind": "neutral",
|
|
"opacity": 0.6
|
|
},
|
|
"translucency": {
|
|
"enabled": true,
|
|
"value": 0.2
|
|
}
|
|
}
|
|
],
|
|
"supported-platforms": {
|
|
"circles": [
|
|
"watchOS"
|
|
],
|
|
"squares": "shared"
|
|
}
|
|
}
|