xworkmate-app/macos/Podfile
Haitao Pan 6357f620c5
ci: TestFlight opt-in toggle + Xcode 27 build fixes (#54) (#56)
* ci: gate TestFlight behind opt-in toggle + Xcode 27 build fixes

TestFlight is now opt-in (default OFF). A workflow_dispatch boolean
`enable_testflight` (or the `ENABLE_TESTFLIGHT` repo variable) drives a
`prepare.outputs.testflight_enabled` flag that gates the macOS
app-store-pkg build leg and both testflight_ios/testflight_macos upload
legs. Missing Apple signing secrets no longer fail the normal DMG/IPA
release path (package-macos-app-store-pkg.sh hard-exits without them).

Xcode 27 build compatibility:
- Align Apple deployment targets so no pod sits below the app minimum
  (Xcode 27 rejects this): macOS pods + RunnerTests -> 15.6, iOS pods
  -> 15.5 to match the Runner targets.
- Add a `lipo` shim (scripts/xcode-tools/lipo) wired onto PATH in the
  iOS/macOS build phases; Xcode 27 only accepts one `-verify_arch`
  architecture per call while Flutter passes them all at once.
- macOS project hygiene: correct PrivacyInfo.xcprivacy path, set app
  display name + LSApplicationCategoryType.



* test: make temp-dir cleanup resilient to concurrent-write races

The assistant execution target tests deleted their temp HOME/workspace
dirs with a raw recursive delete in addTearDown. A background flush
(e.g. controller dispose still persisting state) can keep writing into
the dir while the delete walks it, so the delete races and fails with
"Directory not empty" (errno 39), failing the test on CI.

Route all unguarded teardown deletes through the existing
_resilientDelete helper (re-check existence + retry), and harden that
helper so its final fallback never re-throws — a temp-dir cleanup
failure must never fail a test.



---------

Co-authored-by: Haitao Pan <manbuzhe2009@qq.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 08:32:58 +08:00

128 lines
4.4 KiB
Ruby

platform :osx, '15.6'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}
def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__)
unless File.exist?(generated_xcode_build_settings_path)
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first"
end
File.foreach(generated_xcode_build_settings_path) do |line|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
return matches[1].strip if matches
end
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\""
end
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
flutter_macos_podfile_setup
target 'Runner' do
use_frameworks!
flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))
target 'RunnerTests' do
inherit! :search_paths
end
end
post_install do |installer|
append_ignored_attributes_suppression = lambda do |build_settings|
other_cflags = build_settings['OTHER_CFLAGS'] || '$(inherited)'
other_cxxflags = build_settings['OTHER_CPLUSPLUSFLAGS'] || '$(inherited)'
updated = false
unless other_cflags.include?('-Wno-ignored-attributes')
build_settings['OTHER_CFLAGS'] =
"#{other_cflags} -Wno-ignored-attributes"
updated = true
end
unless other_cxxflags.include?('-Wno-ignored-attributes')
build_settings['OTHER_CPLUSPLUSFLAGS'] =
"#{other_cxxflags} -Wno-ignored-attributes"
updated = true
end
updated
end
append_deprecation_suppression = lambda do |build_settings|
other_cflags = build_settings['OTHER_CFLAGS'] || '$(inherited)'
other_cxxflags = build_settings['OTHER_CPLUSPLUSFLAGS'] || '$(inherited)'
unless other_cflags.include?('-Wno-strict-prototypes')
build_settings['OTHER_CFLAGS'] =
"#{other_cflags} -Wno-strict-prototypes"
end
unless other_cflags.include?('-Wno-deprecated-declarations')
build_settings['OTHER_CFLAGS'] =
"#{other_cflags} -Wno-deprecated-declarations"
end
unless other_cxxflags.include?('-Wno-deprecated-declarations')
build_settings['OTHER_CPLUSPLUSFLAGS'] =
"#{other_cxxflags} -Wno-deprecated-declarations"
end
end
append_linker_warning_suppression = lambda do |build_settings|
other_ldflags = build_settings['OTHER_LDFLAGS'] || '$(inherited)'
return if other_ldflags.include?('-Wl,-w')
build_settings['OTHER_LDFLAGS'] =
"#{other_ldflags} -Wl,-w"
end
normalize_system_framework_refs = lambda do |project|
project.files.each do |file|
next unless file.path&.include?('/System/Library/Frameworks/')
next unless file.path.include?('Platforms/MacOSX.platform/Developer/SDKs/')
file.path = "System/Library/Frameworks/#{File.basename(file.path)}"
file.source_tree = 'SDKROOT'
end
end
installer.pods_project.targets.each do |target|
flutter_additional_macos_build_settings(target)
target.build_configurations.each do |config|
# Xcode 27 rejects dependency targets below the app's 15.6 minimum.
config.build_settings['MACOSX_DEPLOYMENT_TARGET'] = '15.6'
next unless ['Pods-Runner', 'Pods-RunnerTests', 'WebRTC-SDK', 'flutter_webrtc'].include?(target.name)
append_ignored_attributes_suppression.call(config.build_settings)
append_deprecation_suppression.call(config.build_settings)
append_linker_warning_suppression.call(config.build_settings)
config.build_settings['GCC_WARN_INHIBIT_ALL_WARNINGS'] = 'YES'
config.build_settings['SWIFT_SUPPRESS_WARNINGS'] = 'YES'
end
end
installer.aggregate_targets.each do |aggregate_target|
aggregate_target.user_project.targets.each do |target|
next unless ['Runner', 'RunnerTests'].include?(target.name)
target.build_configurations.each do |config|
append_ignored_attributes_suppression.call(config.build_settings)
append_linker_warning_suppression.call(config.build_settings)
end
end
aggregate_target.user_project.save
end
normalize_system_framework_refs.call(installer.pods_project)
installer.pods_project.save
end