Fix iOS TestFlight build: remove hardcoded signing identity, clean up plist injection#411
Fix iOS TestFlight build: remove hardcoded signing identity, clean up plist injection#411
Conversation
…ean up plist targets The iOS build was failing because InjectIOSPrivacyKeys had a hardcoded codesign exec using 'Apple Development: Jakub Florkowski (8MT3Q77PP8)', which doesn't exist in the CI keychain (should be Gerald Versluis). The manual codesign is unnecessary — dotnet publish re-signs after Build targets complete. Changes: - Remove the hardcoded codesign --force --sign exec from csproj - Merge duplicate InjectMacCatalystPrivacyKeys + InjectIOSPrivacyKeys into a single _InjectPrivacyKeys target with conditional plist path - Extract privacy description strings into shared properties (DRY) - Extract plist path into a property to reduce line length Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… plist targets The iOS build was failing because InjectIOSPrivacyKeys had a hardcoded codesign exec using 'Apple Development: Jakub Florkowski (8MT3Q77PP8)', which doesn't exist in the CI keychain (should be Gerald Versluis's identity passed via -p:CodesignKey). The manual codesign is unnecessary because dotnet publish re-signs the app after Build targets complete. Note: the PlistBuddy injection IS still required — verified that MAUI still strips NS*UsageDescription keys from the output Info.plist in .NET 10, even though they exist in the source Platforms/*/Info.plist. Changes: - Remove the hardcoded codesign --force --sign exec from csproj - Merge duplicate InjectMacCatalystPrivacyKeys + InjectIOSPrivacyKeys into a single _InjectPrivacyKeys target with conditional plist path - Extract privacy description strings into shared properties (DRY) - Extract plist path into a property to reduce line length - Update comment to clarify why injection is still needed Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The _InjectPrivacyKeys target (and the earlier InjectMacCatalystPrivacyKeys + InjectIOSPrivacyKeys targets) was a workaround for an old MAUI behavior that stripped NS*UsageDescription keys from Info.plist during build. Verified with a fully clean build (rm -rf bin/ obj/) on .NET 10 that the CompileAppManifest task in dotnet/macios now preserves all keys from the source Platforms/*/Info.plist — the post-build PlistBuddy injection is no longer needed. The privacy keys (NSMicrophoneUsageDescription, NSSpeechRecognitionUsageDescription) are already defined in both Platforms/iOS/Info.plist and Platforms/MacCatalyst/Info.plist and survive the build pipeline. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PR #411 Review — Fix iOS TestFlight build: remove hardcoded signing identity, clean up plist injectionCI: SummaryPure deletion PR (22 lines removed, 0 added) — removes two MSBuild post-build targets from
Findings (Consensus Filter: 2+ models required)None. 5/5 models confirmed the change is correct and safe. AnalysisHardcoded codesign removal — correct. The PlistBuddy injection removal — correct. Verified that both privacy keys are present in the source files:
The injection was a workaround for an older MAUI behavior where App Store compliance risk: None — the strings remain in the source plists and will flow through the standard build pipeline. Test CoverageThis PR modifies only the build system (MSBuild targets). No source code changed; no unit tests needed. Verdict: ✅ ApproveThe change correctly removes a developer-specific signing identity that was blocking CI for all non-Jakub developers, along with the now-redundant plist injection workaround it required. Clean deletion with no regressions. Co-reviewed by: Copilot 223556219+Copilot@users.noreply.github.com |
Problem
The iOS build has been failing on TestFlight CI (run #23331578098) with:
Root Cause
The csproj had a post-build target (
InjectIOSPrivacyKeys) with a hardcoded codesign exec using Jakub Florkowski's signing identity. This was part of a workaround that re-injected NS*UsageDescription privacy keys into Info.plist after build, then re-signed the app.Fix
Removed the entire PlistBuddy injection mechanism (both
InjectMacCatalystPrivacyKeysandInjectIOSPrivacyKeystargets + the hardcoded codesign).The injection was a workaround for an old MAUI behavior that stripped
NS*UsageDescriptionkeys from the output Info.plist. This is no longer the case — verified with a fully clean build (rm -rf bin/ obj/) on .NET 10 that theCompileAppManifesttask indotnet/maciosnow preserves all source plist keys.The privacy keys (
NSMicrophoneUsageDescription,NSSpeechRecognitionUsageDescription) are already defined in bothPlatforms/iOS/Info.plistandPlatforms/MacCatalyst/Info.plistand survive the build pipeline untouched.Verification
.app/Contents/Info.plistwithout any injectionCompileAppManifestsource code reads full source plist and doesn't strip NS* keys