Class: PodPostIntegrate
- Inherits:
-
Object
- Object
- PodPostIntegrate
- Defined in:
- lib/cocoapods-bb-PodAssistant/babybus/installer/post_integrate_hooks.rb
Constant Summary collapse
- DEFAULT_SIMULATOR_UNSUPPORTED_BINARIES =
安装pod hook操作,处理最终生成的xcconfig 参数说明 lib 组件库 simulator_unsupported_binaries 过滤不支持模拟器二进制库,多个使用[],举例:['libRecorder.a','SingSound.framework']
[ # ttsdk 'RangersAppLog.framework', 'TTSDKFramework.framework', 'libRangersAppLog_CN_awesome_ios.a','libRangersAppLog_Core_awesome_ios.a','libRangersAppLog_Log_awesome_ios.a','libRangersAppLog_SG_awesome_ios.a','libRangersAppLog_VA_awesome_ios.a','libRangersAppLog_VOLC_awesome_ios.a', # mango 'EasyReporter.framework', 'MGPlayerFoundation.framework', 'MgtvInteractiveMediaAds.framework', 'MGTVMediaSSPForAD.framework', 'MGTVSSPDownload.framework', # um 'UMDevice.framework','UMRemoteConfig.framework','UMAPM.framework','UMCommon.framework', # baiduBCE 'BaiduBCEBasic.framework','BaiduBCEBOS.framework','BaiduBCESTS.framework','BaiduBCEVOD.framework', # record 'libRecorder.a', # singsound 'SingSound.framework', 'libmp3lame.a', 'libssound-71-ios-3.0.3-20230926103957-SSL.a', # share 'libWeiboSDK.a', 'QQSDK.framework', 'Bugly.framework', # 'cocos2dx.framework', # 'UnityFramework.framework', 'MediaPipeUnity.framework', ].freeze
Instance Method Summary collapse
-
#initialize(lib, simulator_unsupported_binaries = []) ⇒ PodPostIntegrate
constructor
A new instance of PodPostIntegrate.
- #run ⇒ Object
Constructor Details
#initialize(lib, simulator_unsupported_binaries = []) ⇒ PodPostIntegrate
Returns a new instance of PodPostIntegrate.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/cocoapods-bb-PodAssistant/babybus/installer/post_integrate_hooks.rb', line 35 def initialize(lib, simulator_unsupported_binaries = []) @lib = lib binaries = if simulator_unsupported_binaries.is_a?(Array) simulator_unsupported_binaries elsif simulator_unsupported_binaries.is_a?(String) [simulator_unsupported_binaries] else [] end unity_simulator_supported = ENV['UNITY_SIMULATOR_SUPPORTED'] == '1' # 业务方传入列表中: # 1. cocos2dx.framework 始终排除,避免被当成 Simulator 不支持库处理 # 2. Unity 支持 Simulator 时,UnityFramework.framework 也排除 binaries = binaries.reject do |binary| binary_name = File.basename(binary.to_s.strip) binary_name == 'cocos2dx.framework' || (unity_simulator_supported && binary_name == 'UnityFramework.framework') end # 默认不支持 Simulator 的二进制 + 外部传入的不支持二进制,过滤空值后统一去重。 @simulator_unsupported_binaries = ( DEFAULT_SIMULATOR_UNSUPPORTED_BINARIES + binaries ).reject { |binary| binary.to_s.strip.empty? }.uniq end |
Instance Method Details
#run ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/cocoapods-bb-PodAssistant/babybus/installer/post_integrate_hooks.rb', line 61 def run installer = @lib # 从 simulator_unsupported_binaries 中提取不支持 Simulator 的静态库名称 # 例如:libRecorder.a -> Recorder;SingSound.framework -> SingSound simulator_unsupported_libraries = @simulator_unsupported_binaries .select { |binary| File.extname(binary) == '.a' } .map { |binary| File.basename(binary, '.a').sub(/^lib/, '') } simulator_unsupported_frameworks = @simulator_unsupported_binaries .select { |binary| File.extname(binary) == '.framework' } .map { |binary| File.basename(binary, '.framework') } puts "post_integrate===simulator_unsupported_libraries:#{simulator_unsupported_libraries}" puts "post_integrate===simulator_unsupported_frameworks:#{simulator_unsupported_frameworks}" Dir.glob(File.join(installer.sandbox.root.to_s, 'Target Support Files', 'Pods-*', 'Pods-*.xcconfig')).each do |xcconfig_path| lines = File.readlines(xcconfig_path) other_ldflags_line = lines.find do |line| line.start_with?('OTHER_LDFLAGS = ') || line.start_with?('OTHER_LDFLAGS[sdk=iphoneos*] = ') || line.start_with?('OTHER_LDFLAGS[sdk=iphonesimulator*] = ') end next unless other_ldflags_line original_flags = other_ldflags_line.sub('OTHER_LDFLAGS = ', '').strip simulator_flags = original_flags.dup simulator_unsupported_libraries.each do |library| simulator_flags.gsub!(/-l"?#{Regexp.escape(library)}"?\s*/, '') end simulator_unsupported_frameworks.each do |framework| escaped_framework = Regexp.escape(framework) # 绝对匹配 framework 名称: # -framework "SingSound" 只匹配 SingSound,不能误匹配 SingSoundSDK。 # 同时兼容带引号和不带引号两种 OTHER_LDFLAGS 格式。 simulator_flags.gsub!( /(?:^|\s)-framework\s+(?:"#{escaped_framework}"|#{escaped_framework})(?=\s|$)/, '' ) end # 没有过滤掉任何linker flag 时,不改写xcconfig,避免pod install每次产生无意义文件变化 # if simulator_flags == original_flags # next # end device_setting = "OTHER_LDFLAGS[sdk=iphoneos*] = #{original_flags}\n" simulator_setting = "OTHER_LDFLAGS[sdk=iphonesimulator*] = #{simulator_flags}\n" lines.reject! do |line| line.start_with?('OTHER_LDFLAGS = ') || line.start_with?('OTHER_LDFLAGS[sdk=iphoneos*] = ') || line.start_with?('OTHER_LDFLAGS[sdk=iphonesimulator*] = ') end lines << device_setting lines << simulator_setting # Xcode去除EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64 支持Apple Silicon Simulator content = lines.join # content = File.read(xcconfig_path) updated = content.gsub(/^EXCLUDED_ARCHS\[sdk=iphonesimulator\*\]\s*=\s*(.*)$/) do archs = Regexp.last_match(1).split.reject { |arch| arch == 'arm64' } archs.empty? ? '' : "EXCLUDED_ARCHS[sdk=iphonesimulator*] = #{archs.join(' ')}" end File.write(xcconfig_path, updated) end end |