gpt4 book ai didi

ios - 如何通过 CocoaPods 安装后 Hook 修改 OTHER_LDFLAGS?

转载 作者:IT王子 更新时间:2023-10-29 07:55:30 26 4
gpt4 key购买 nike

我的项目使用 CocoaPods 和自定义 xcconfig 文件。到目前为止,这还没有造成任何问题:我只需要在自定义配置的末尾#include CocoaPods 生成的配置。

但是,我遇到了一个问题,需要根据 xcconfig 有条件地指定 OTHER_LDFLAGS,但我不知道该怎么做。

一开始,我试过像这样简单地记录 OTHER_LDFLAGS,但实际上并没有记录标志:

post_install do |installer_representation|
installer_representation.project.targets.each do |target|
target.build_configurations.each do |config|

name = target.name
puts "Target Found: #{name}"

flags = config.build_settings['OTHER_LDFLAGS']
puts "OTHER_LDFLAGS Found: #{flags}"
end
end
end

输出看起来像这样:

Target Found: Pods-ProjectName-DependencyName1
OTHER_LDFLAGS Found: # nothing here...?
Target Found: Pods-ProjectName-DependencyName2
OTHER_LDFLAGS Found: # again nothing...
# etc...
Target Found: Pods-ProjectName # Cool, this is the main target pod
OTHER_LDFLAGS Found: # ...

如何通过 CocoaPods 安装后 Hook 实际修改 OTHER_LDFLAGS

最佳答案

我遇到了同样的问题。首先,我尝试用显而易见的方式修改 OTHER_LDFLAGS:

post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == "Pods-SomeTarget"
puts "Updating #{target.name} OTHER_LDFLAGS"
target.build_configurations.each do |config|
config.build_settings['OTHER_LDFLAGS'] ||= ['$(inherited)']
config.build_settings['OTHER_LDFLAGS'] << '-l"AFNetworking"'
end
end
end
end

但是没有用。相关的 xcconfig 没有得到改变。最终我找到了一个很好的解决方法——首先读取post_intall钩子(Hook)中的相关xcconfig文件内容,修改并写回:

v1.0

post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == "Pods-SomeTarget"
puts "Updating #{target.name} OTHER_LDFLAGS"
target.build_configurations.each do |config|
xcconfig_path = config.base_configuration_reference.real_path
xcconfig = File.read(xcconfig_path)
new_xcconfig = xcconfig.sub('OTHER_LDFLAGS = $(inherited)', 'OTHER_LDFLAGS = $(inherited) -l"AFNetworking"')
File.open(xcconfig_path, "w") { |file| file << new_xcconfig }
end
end
end
end

编辑:对 v1.0 的改进。不是直接对 xcconfig String 内容进行操作,而是将 xccconfig 读入一个 build_configuration Hash,修改 hash 然后刷新到 xcconfig。

v1.5

post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == "Pods-SomeTarget"
puts "Updating #{target.name} OTHER_LDFLAGS"
target.build_configurations.each do |config|
xcconfig_path = config.base_configuration_reference.real_path

# read from xcconfig to build_settings dictionary
build_settings = Hash[*File.read(xcconfig_path).lines.map{|x| x.split(/\s*=\s*/, 2)}.flatten]

# modify OTHER_LDFLAGS
build_settings['OTHER_LDFLAGS'] << '-l"AFNetworking"'

# write build_settings dictionary to xcconfig
build_settings.each do |key,value|
File.open(xcconfig_path, "a") {|file| file.puts key = value}
end
end
end
end
end

关于ios - 如何通过 CocoaPods 安装后 Hook 修改 OTHER_LDFLAGS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30244675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com