diff --git a/FirebaseCore/CHANGELOG.md b/FirebaseCore/CHANGELOG.md index 79ec5d5f636..4337e81de12 100644 --- a/FirebaseCore/CHANGELOG.md +++ b/FirebaseCore/CHANGELOG.md @@ -1,3 +1,6 @@ +# Unreleased +- Fix validation issue for macOS and macCatalyst XCFrameworks. (#12505) + # Firebase 10.22.1 - [Swift Package Manager / CocoaPods] Fix app validation issues on Xcode 15.3 for those using the `FirebaseAnalyticsOnDeviceConversion` SDK. This issue was diff --git a/ReleaseTooling/Sources/ZipBuilder/FrameworkBuilder.swift b/ReleaseTooling/Sources/ZipBuilder/FrameworkBuilder.swift index 7c763834411..d322aa91ec4 100755 --- a/ReleaseTooling/Sources/ZipBuilder/FrameworkBuilder.swift +++ b/ReleaseTooling/Sources/ZipBuilder/FrameworkBuilder.swift @@ -674,7 +674,18 @@ struct FrameworkBuilder { let binaryName = frameworkPath.lastPathComponent.replacingOccurrences(of: ".framework", with: "") let fatBinary = frameworkPath.appendingPathComponent(binaryName).resolvingSymlinksInPath() - let infoPlist = frameworkPath.appendingPathComponent("Info.plist").resolvingSymlinksInPath() + let plistPathComponents = { + if platform == .catalyst || platform == .macOS { + // Frameworks for macOS and macCatalyst have a different directory + // structure so the framework-level `Info.plist` is found in a + // different spot. + return ["Versions", "A", "Resources", "Info.plist"] + } else { + return ["Info.plist"] + } + }() + let infoPlist = frameworkPath.appendingPathComponents(plistPathComponents) + .resolvingSymlinksInPath() let infoPlistDestination = platformFrameworkDir.appendingPathComponent("Info.plist") let fatBinaryDestination = platformFrameworkDir.appendingPathComponent(framework) do { @@ -698,7 +709,9 @@ struct FrameworkBuilder { try updatedPlistData.write(to: infoPlistDestination) } catch { - // The Catalyst and macos Info.plist's are in another location. Ignore failure. + fatalError( + "Could not copy framework-level plist to framework directory for \(framework): \(error)" + ) } // Use the appropriate moduleMaps