Add macOS framework conversion for Developer ID distribution

This commit implements a workaround for MPVKit shipping frameworks as
shallow bundles, which are incompatible with macOS Developer ID
distribution requirements.

Changes:

1. Raised macOS deployment target to 14.0
   - Matches MPVKit's minimum requirement
   - Previous: 11.0
   - New: 14.0

2. Added Run Script phase to convert frameworks
   - Converts MPVKit frameworks from shallow to versioned bundles
   - Required for macOS Developer ID code signing
   - Runs after framework embedding
   - Converts all 28 MPVKit frameworks during build

3. Modified fastlane build process
   - Build and archive without export
   - Create PKG directly from archive
   - Avoids extended attribute issues from export process

4. Pinned MPVKit to specific commit
   - Commit: e7e914a70e943f0d4f050c9ede793af8f6e74ad7
   - Ensures consistent framework structure

Known Issues:
- Some frameworks (Libplacebo, Libluajit) have signature issues after
  conversion that still prevent successful notarization
- This is a workaround; the root issue should be fixed in MPVKit by
  providing macOS-compatible versioned bundle frameworks

See minimal reproduction project at:
/tmp/MPVKit-Notarization-Issue/MPVKitNotarizationTest/

Related: MPVKit should provide macOS-specific XCFrameworks with
versioned bundles for proper Developer ID distribution support.

🤖 Generated with Claude Code (https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Arkadiusz Fal
2025-11-10 12:32:32 +01:00
parent 469e9a4eb9
commit bf40f527ea
3 changed files with 27 additions and 19 deletions

View File

@@ -254,20 +254,28 @@ platform :mac do
api_key: api_key
)
build_mac_app(
# Build and archive, but skip export to avoid extended attribute issues
gym(
scheme: "#{APP_NAME} (macOS)",
output_directory: "fastlane/builds/#{version}-#{build}/macOS",
output_name: "#{APP_NAME}",
export_method: "developer-id",
export_options: {
provisioningProfiles: {
"#{DEVELOPER_APP_IDENTIFIER}" => "match Direct #{DEVELOPER_APP_IDENTIFIER} macos"
}
}
skip_package_pkg: true,
skip_archive: false
)
# Get the app from the archive's InstallationBuildProductsLocation
archive_path = lane_context[SharedValues::XCODEBUILD_ARCHIVE]
app_path = "#{archive_path}/Products/Applications/#{APP_NAME}.app"
UI.message("Archive path: #{archive_path}")
UI.message("App path: #{app_path}")
# Create PKG directly from the archived app (before any export processing)
pkg_path = File.expand_path("builds/#{version}-#{build}/macOS/#{APP_NAME}.pkg", File.dirname(__FILE__))
UI.message("Creating PKG installer from archived app...")
sh("productbuild --component '#{app_path}' /Applications --sign 'Developer ID Installer: Arkadiusz Fal (78Z5H3M6RJ)' '#{pkg_path}'")
UI.success("Created PKG: #{pkg_path}")
notarize(
package: "fastlane/builds/#{version}-#{build}/macOS/#{APP_NAME}.app",
package: pkg_path,
bundle_id: "#{DEVELOPER_APP_IDENTIFIER}",
api_key: api_key,
print_log: true