mirror of
				https://gitcode.com/gh_mirrors/re/react-native-pushy.git
				synced 2025-10-31 21:33:12 +08:00 
			
		
		
		
	improve podspec detection
This commit is contained in:
		| @@ -9,7 +9,6 @@ podspec_dir = File.dirname(__FILE__) | |||||||
| Pod::Spec.new do |s| | Pod::Spec.new do |s| | ||||||
|  |  | ||||||
|   is_expo_in_podfile = false |   is_expo_in_podfile = false | ||||||
|   is_version_sufficient = false |  | ||||||
|   begin |   begin | ||||||
|     # Check Podfile for use_expo_modules! |     # Check Podfile for use_expo_modules! | ||||||
|     podfile_path = File.join(Pod::Config.instance.installation_root, 'Podfile') |     podfile_path = File.join(Pod::Config.instance.installation_root, 'Podfile') | ||||||
| @@ -17,24 +16,67 @@ Pod::Spec.new do |s| | |||||||
|       podfile_content = File.read(podfile_path) |       podfile_content = File.read(podfile_path) | ||||||
|       is_expo_in_podfile = podfile_content.include?('use_expo_modules!') |       is_expo_in_podfile = podfile_content.include?('use_expo_modules!') | ||||||
|     end |     end | ||||||
|     # Check root package.json for Expo version >= 50 |   rescue => e | ||||||
|     root_package_json_path = File.join(podspec_dir, '..', '..', 'package.json') |      # Silently ignore errors during check | ||||||
|     if File.exist?(root_package_json_path) |   end | ||||||
|         pkg_json = JSON.parse(File.read(root_package_json_path)) |  | ||||||
|         expo_version_string = pkg_json['dependencies']&.[]('expo') || pkg_json['devDependencies']&.[]('expo') |   # Determine final validity by checking Podfile presence AND Expo version | ||||||
|         if expo_version_string |   valid_expo_project = false # Default | ||||||
|           match = expo_version_string.match(/\d+/) |   if is_expo_in_podfile | ||||||
|  |     # Only check expo version if use_expo_modules! is present | ||||||
|  |     is_version_sufficient = false | ||||||
|  |     begin | ||||||
|  |         expo_version_str = `node --print \"require('expo/package.json').version\"`.strip | ||||||
|  |         if expo_version_str && !expo_version_str.empty? | ||||||
|  |           match = expo_version_str.match(/^\d+/) | ||||||
|           if match |           if match | ||||||
|             major_version = match[0].to_i |             major_version = match[0].to_i | ||||||
|             is_version_sufficient = major_version >= 50 |             is_version_sufficient = major_version >= 50 | ||||||
|           end |           end | ||||||
|         end |         end | ||||||
|  |     rescue | ||||||
|  |         # Node command failed, version remains insufficient | ||||||
|     end |     end | ||||||
|   rescue => e |      | ||||||
|      # Silently ignore errors during check |     # Final check | ||||||
|  |     valid_expo_project = is_version_sufficient | ||||||
|   end |   end | ||||||
|   # Determine final validity |  | ||||||
|   valid_expo_project = is_expo_in_podfile && is_version_sufficient |   # Set platform based on whether it's a valid Expo project and if we can parse its target | ||||||
|  |   final_ios_deployment_target = '11.0' # Default target | ||||||
|  |  | ||||||
|  |   if valid_expo_project | ||||||
|  |     # --- Try to find and parse ExpoModulesCore.podspec only if it's an Expo project --- | ||||||
|  |     parsed_expo_ios_target = nil | ||||||
|  |     expo_modules_core_podspec_path = begin | ||||||
|  |         package_json_path = `node -p "require.resolve('expo-modules-core/package.json')"`.strip | ||||||
|  |         File.join(File.dirname(package_json_path), 'ExpoModulesCore.podspec') if $?.success? && package_json_path && !package_json_path.empty? | ||||||
|  |     rescue | ||||||
|  |         nil | ||||||
|  |     end | ||||||
|  |  | ||||||
|  |     if expo_modules_core_podspec_path && File.exist?(expo_modules_core_podspec_path) | ||||||
|  |       begin | ||||||
|  |         content = File.read(expo_modules_core_podspec_path) | ||||||
|  |         match = content.match(/s\.platforms\s*=\s*\{[\s\S]*?:ios\s*=>\s*'([^\']+)'/) # Match within s.platforms hash | ||||||
|  |         if match && match[1] | ||||||
|  |           parsed_expo_ios_target = match[1] | ||||||
|  |         else | ||||||
|  |           match = content.match(/s\.platform\s*=\s*:ios,\s*'([^\']+)'/) # Fallback to s.platform = :ios, 'version' | ||||||
|  |           if match && match[1] | ||||||
|  |             parsed_expo_ios_target = match[1] | ||||||
|  |           end | ||||||
|  |         end | ||||||
|  |       rescue => e | ||||||
|  |         # Pod::UI.warn "Failed to read or parse ExpoModulesCore.podspec content: #{e.message}" | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |     if parsed_expo_ios_target | ||||||
|  |         final_ios_deployment_target = parsed_expo_ios_target | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   s.platforms = { :ios => final_ios_deployment_target } | ||||||
|  |  | ||||||
|   s.name         = package['name'] |   s.name         = package['name'] | ||||||
|   s.version      = package['version'] |   s.version      = package['version'] | ||||||
| @@ -45,8 +87,7 @@ Pod::Spec.new do |s| | |||||||
|   s.homepage     = package['homepage'] |   s.homepage     = package['homepage'] | ||||||
|  |  | ||||||
|   s.cocoapods_version = '>= 1.6.0' |   s.cocoapods_version = '>= 1.6.0' | ||||||
|   # s.platform = :ios, "8.0" |  | ||||||
|   # s.platforms = { :ios => "11.0" } |  | ||||||
|   s.source = { :git => 'https://github.com/reactnativecn/react-native-update.git', :tag => '#{s.version}' } |   s.source = { :git => 'https://github.com/reactnativecn/react-native-update.git', :tag => '#{s.version}' } | ||||||
|  |  | ||||||
|   # Conditionally set source files |   # Conditionally set source files | ||||||
| @@ -92,20 +133,26 @@ Pod::Spec.new do |s| | |||||||
|   # Conditionally add Expo subspec and check ExpoModulesCore version |   # Conditionally add Expo subspec and check ExpoModulesCore version | ||||||
|   if valid_expo_project |   if valid_expo_project | ||||||
|     supports_bundle_url_final = false # Default |     supports_bundle_url_final = false # Default | ||||||
|     begin |  | ||||||
|       # Check installed ExpoModulesCore version for bundle URL support |     # 1. Try executing node to get the version string | ||||||
|       expo_core_package_json_path = File.join(podspec_dir, '..', 'expo-modules-core', 'package.json') |     expo_modules_core_version_str = begin | ||||||
|       if File.exist?(expo_core_package_json_path) |       # Use node to directly require expo-modules-core/package.json and get its version | ||||||
|           core_package_json = JSON.parse(File.read(expo_core_package_json_path)) |       `node --print \"require('expo-modules-core/package.json').version\"` # Execute, keep raw output | ||||||
|           installed_version_str = core_package_json['version'] |     rescue | ||||||
|           if installed_version_str |       # Node command failed (e.g., node not found, package not found). Return empty string. | ||||||
|             installed_version = Gem::Version.new(installed_version_str) |       '' | ||||||
|  |     end | ||||||
|  |  | ||||||
|  |     # 2. Process the obtained version string (if not empty) | ||||||
|  |     if expo_modules_core_version_str && !expo_modules_core_version_str.empty? | ||||||
|  |         begin | ||||||
|  |             # Compare versions using Gem::Version (handles trailing newline) | ||||||
|  |             installed_version = Gem::Version.new(expo_modules_core_version_str) | ||||||
|             target_version = Gem::Version.new('1.12.0') |             target_version = Gem::Version.new('1.12.0') | ||||||
|             supports_bundle_url_final = installed_version >= target_version |             supports_bundle_url_final = installed_version >= target_version | ||||||
|           end |         rescue ArgumentError | ||||||
|       end |             # If Gem::Version fails parsing, supports_bundle_url_final remains false. | ||||||
|     rescue JSON::ParserError, Errno::ENOENT, ArgumentError, StandardError => e |         end | ||||||
|       # Pod::UI.warn "Could not check ExpoModulesCore version: #{e.message}" |  | ||||||
|     end |     end | ||||||
|  |  | ||||||
|     s.subspec 'Expo' do |ss| |     s.subspec 'Expo' do |ss| | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 sunnylqm
					sunnylqm