commit adf102655176e1484c1f36bdada5522c41a8da62
parent 7861fcb3b0c26bb05b074591069bf1cbce45d93c
Author: Jean Schurger <jean@schurger.org>
Date: Fri, 16 Oct 2026 14:42:31 -0400
TestFlight: App Store profile via sigh, manual export signing, upload; opaque icon
- The release lane gets (or creates) the App Store profile with the ASC API
key and exports with manual signing: the key can't use cloud signing
- It now uploads the IPA to TestFlight (it only exported it before)
- App Store Connect rejects an app icon with an alpha channel: the 1024
icon is flattened, its semi-transparent shapes composited over the gradient
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0141Zm4UQq8PATQAG98MdNCc
Diffstat:
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/iosApp/Assets.xcassets/AppIcon.appiconset/icon_1024.png b/iosApp/Assets.xcassets/AppIcon.appiconset/icon_1024.png
Binary files differ.
diff --git a/iosApp/fastlane/Fastfile b/iosApp/fastlane/Fastfile
@@ -5,6 +5,16 @@ platform :ios do
lane :release do
sh("cd .. && xcodegen generate")
+ api_key = app_store_connect_api_key(
+ key_id: ENV["UBI2_ASC_KEY_ID"],
+ issuer_id: ENV["UBI2_ASC_ISSUER_ID"],
+ key_filepath: ENV["UBI2_ASC_KEY_PATH"],
+ )
+
+ # App Store profile (downloaded or created): the export signs manually with it
+ sigh(app_identifier: "ubi2.sonodrill", api_key: api_key)
+ profile_name = lane_context[SharedValues::SIGH_NAME]
+
build_number = Time.now.strftime("%Y%m%d%H%M")
increment_build_number(
xcodeproj: "iosApp.xcodeproj",
@@ -24,7 +34,14 @@ platform :ios do
<key>method</key>
<string>app-store-connect</string>
<key>signingStyle</key>
- <string>automatic</string>
+ <string>manual</string>
+ <key>signingCertificate</key>
+ <string>Apple Distribution</string>
+ <key>provisioningProfiles</key>
+ <dict>
+ <key>ubi2.sonodrill</key>
+ <string>#{profile_name}</string>
+ </dict>
<key>teamID</key>
<string>8CH9CCT4MH</string>
<key>uploadSymbols</key>
@@ -59,6 +76,12 @@ platform :ios do
"-authenticationKeyIssuerID", ENV["UBI2_ASC_ISSUER_ID"],
)
+ upload_to_testflight(
+ api_key: api_key,
+ ipa: File.join(output_dir, "Sonodrill.ipa"),
+ skip_waiting_for_build_processing: true,
+ )
+
UI.success("Upload complete! Check TestFlight for build #{build_number}")
end
end