diff --git a/tvos/Runner.xcodeproj/project.pbxproj b/tvos/Runner.xcodeproj/project.pbxproj index 4a121e74..8d5d595c 100644 --- a/tvos/Runner.xcodeproj/project.pbxproj +++ b/tvos/Runner.xcodeproj/project.pbxproj @@ -287,6 +287,7 @@ B1C48839AB6C24EF099DDFA3 /* Sources */, 43E2EE359822E384AD7E8A2E /* Frameworks */, 64CEA7DE6B9394CE88783302 /* Resources */, + E2B5A6D75C9F4D1B9E8C7A63 /* Sync Version */, ); buildRules = ( ); @@ -436,6 +437,20 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + E2B5A6D75C9F4D1B9E8C7A63 /* Sync Version */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Sync Version"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/bash \"$SOURCE_ROOT/scripts/xcode_appletv.sh\" sync_version\n"; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; diff --git a/tvos/scripts/wire_top_shelf.rb b/tvos/scripts/wire_top_shelf.rb index 46364352..32652349 100644 --- a/tvos/scripts/wire_top_shelf.rb +++ b/tvos/scripts/wire_top_shelf.rb @@ -51,6 +51,17 @@ def ensure_framework(target, file_ref) phase.add_file_reference(file_ref, true) end +def ensure_shell_script(target, name, script) + phase = target.shell_script_build_phases.find { |p| p.name == name } + unless phase + phase = target.new_shell_script_build_phase(name) + end + + phase.shell_path = '/bin/sh' + phase.shell_script = script + phase +end + system_shelf_ref = ensure_file(runner_group, 'SystemShelfPlugin.swift') ensure_source(runner, system_shelf_ref) ensure_file(runner_group, 'Runner.entitlements') @@ -141,5 +152,11 @@ extension_target.build_configurations.each do |config| settings['TVOS_DEPLOYMENT_TARGET'] = '14.0' end +ensure_shell_script( + extension_target, + 'Sync Version', + '/bin/bash "$SOURCE_ROOT/scripts/xcode_appletv.sh" sync_version' + "\n" +) + project.save puts 'Saved Top Shelf wiring' diff --git a/tvos/scripts/xcode_appletv.sh b/tvos/scripts/xcode_appletv.sh index eb76765c..b5e1739b 100755 --- a/tvos/scripts/xcode_appletv.sh +++ b/tvos/scripts/xcode_appletv.sh @@ -21,11 +21,8 @@ else fi ReadPubspecVersion() { - if [[ -n "${FLUTTER_BUILD_NAME:-}" && -n "${FLUTTER_BUILD_NUMBER:-}" ]]; then - export FLUTTER_BUILD_NAME - export FLUTTER_BUILD_NUMBER - return 0 - fi + local fallback_build_name="${FLUTTER_BUILD_NAME:-}" + local fallback_build_number="${FLUTTER_BUILD_NUMBER:-}" local app_path="${FLUTTER_APPLICATION_PATH:-}" if [[ -z "$app_path" ]]; then @@ -65,8 +62,8 @@ ReadPubspecVersion() { FLUTTER_BUILD_NUMBER="1" fi else - FLUTTER_BUILD_NAME="${FLUTTER_BUILD_NAME:-1.0.0}" - FLUTTER_BUILD_NUMBER="${FLUTTER_BUILD_NUMBER:-1}" + FLUTTER_BUILD_NAME="${fallback_build_name:-1.0.0}" + FLUTTER_BUILD_NUMBER="${fallback_build_number:-1}" fi export FLUTTER_BUILD_NAME @@ -78,13 +75,31 @@ SetPlistString() { local key="$2" local value="$3" - if /usr/libexec/PlistBuddy -c "Print :$key" "$plist" >/dev/null 2>&1; then - /usr/libexec/PlistBuddy -c "Set :$key $value" "$plist" + local current="" + if current="$(/usr/libexec/PlistBuddy -c "Print :$key" "$plist" 2>/dev/null)"; then + if [[ "$current" != "$value" ]]; then + /usr/libexec/PlistBuddy -c "Set :$key $value" "$plist" + fi else /usr/libexec/PlistBuddy -c "Add :$key string $value" "$plist" fi } +ValidatePlistVersion() { + local plist="$1" + local label="$2" + local build_name="" + local build_number="" + + build_name="$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "$plist" 2>/dev/null || true)" + build_number="$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$plist" 2>/dev/null || true)" + + if [[ "$build_name" != "$FLUTTER_BUILD_NAME" || "$build_number" != "$FLUTTER_BUILD_NUMBER" ]]; then + echo " └─ERROR: $label Info.plist version is $build_name ($build_number), expected $FLUTTER_BUILD_NAME ($FLUTTER_BUILD_NUMBER)" + return 1 + fi +} + SyncRunnerVersion() { ReadPubspecVersion @@ -101,15 +116,18 @@ SyncRunnerVersion() { return 1 fi - echo " └─Syncing Runner version $FLUTTER_BUILD_NAME ($FLUTTER_BUILD_NUMBER)" + local bundle_label="${TARGET_NAME:-Runner}" + echo " └─Syncing $bundle_label version $FLUTTER_BUILD_NAME ($FLUTTER_BUILD_NUMBER)" SetPlistString "$plist" CFBundleShortVersionString "$FLUTTER_BUILD_NAME" SetPlistString "$plist" CFBundleVersion "$FLUTTER_BUILD_NUMBER" + ValidatePlistVersion "$plist" "$bundle_label" local top_shelf_plist="$TARGET_BUILD_DIR/$WRAPPER_NAME/PlugIns/TopShelfExtension.appex/Info.plist" if [[ -f "$top_shelf_plist" ]]; then echo " └─Syncing TopShelfExtension version $FLUTTER_BUILD_NAME ($FLUTTER_BUILD_NUMBER)" SetPlistString "$top_shelf_plist" CFBundleShortVersionString "$FLUTTER_BUILD_NAME" SetPlistString "$top_shelf_plist" CFBundleVersion "$FLUTTER_BUILD_NUMBER" + ValidatePlistVersion "$top_shelf_plist" "TopShelfExtension" fi }