build: 55712324-398e-4334-a254-fc30c84b2e47
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
#!/usr/bin/env ruby
|
||||
# configure_xcode.rb — stamped fresh from template on every build (see gitea.service.ts)
|
||||
# Handles all Xcode project modifications at build time:
|
||||
# 1. Adds GoogleService-Info.plist to the App target if present
|
||||
# 2. Scans Swift sources for Firebase imports and links matching SPM products
|
||||
|
||||
require 'xcodeproj'
|
||||
|
||||
PROJECT_PATH = 'ios/App/App.xcodeproj'
|
||||
TARGET_NAME = 'App'
|
||||
PLIST_SRC = 'ios/App/App/GoogleService-Info.plist'
|
||||
|
||||
project = Xcodeproj::Project.open(PROJECT_PATH)
|
||||
target = project.targets.find { |t| t.name == TARGET_NAME }
|
||||
abort "Target '#{TARGET_NAME}' not found in #{PROJECT_PATH}" unless target
|
||||
|
||||
# ── 1. GoogleService-Info.plist ───────────────────────────────────────────────
|
||||
if File.exist?(PLIST_SRC)
|
||||
app_group = project.main_group['App']
|
||||
unless app_group&.files&.find { |f| f.path == 'GoogleService-Info.plist' }
|
||||
file_ref = app_group.new_reference('GoogleService-Info.plist')
|
||||
target.resources_build_phase.add_file_reference(file_ref)
|
||||
puts "Added GoogleService-Info.plist to target"
|
||||
end
|
||||
end
|
||||
|
||||
# ── 2. Scan Swift sources for Firebase imports ────────────────────────────────
|
||||
swift_files = Dir['ios/App/App/**/*.swift']
|
||||
firebase_imports = swift_files
|
||||
.flat_map { |f| File.readlines(f) rescue [] }
|
||||
.grep(/^\s*import\s+Firebase\w+/)
|
||||
.map { |l| l.strip.split(/\s+/).last }
|
||||
.uniq
|
||||
.sort
|
||||
|
||||
if firebase_imports.empty?
|
||||
puts "No Firebase imports found — skipping SPM linking"
|
||||
project.save
|
||||
exit 0
|
||||
end
|
||||
|
||||
puts "Firebase imports detected: #{firebase_imports.join(', ')}"
|
||||
|
||||
# ── 3. Find firebase-ios-sdk package reference ────────────────────────────────
|
||||
firebase_pkg = project.root_object.package_references.find do |p|
|
||||
p.respond_to?(:repositoryURL) && p.repositoryURL.to_s.include?('firebase-ios-sdk')
|
||||
end
|
||||
|
||||
unless firebase_pkg
|
||||
warn "WARNING: firebase-ios-sdk not registered in project — cannot auto-link products"
|
||||
project.save
|
||||
exit 0
|
||||
end
|
||||
|
||||
# ── 4. Link helper ────────────────────────────────────────────────────────────
|
||||
def link_spm_product(project, target, package_ref, product_name)
|
||||
return if target.package_product_dependencies.any? { |d| d.product_name == product_name }
|
||||
|
||||
dep = project.new(Xcodeproj::Project::Object::XCSwiftPackageProductDependency)
|
||||
dep.product_name = product_name
|
||||
dep.package = package_ref
|
||||
target.package_product_dependencies << dep
|
||||
|
||||
build_file = project.new(Xcodeproj::Project::Object::PBXBuildFile)
|
||||
build_file.product_ref = dep
|
||||
target.frameworks_build_phase.files << build_file
|
||||
|
||||
puts "Linked #{product_name}"
|
||||
end
|
||||
|
||||
# FirebaseCore is a prerequisite for all other Firebase products
|
||||
link_spm_product(project, target, firebase_pkg, 'FirebaseCore')
|
||||
|
||||
firebase_imports.each do |product|
|
||||
next if product == 'FirebaseCore' # already linked above
|
||||
next if product == 'Firebase' # umbrella import, not a linkable product
|
||||
link_spm_product(project, target, firebase_pkg, product)
|
||||
end
|
||||
|
||||
project.save
|
||||
puts "Xcode project configured"
|
||||
Reference in New Issue
Block a user