给Cocoapods加点料-显示当前pod版本
对比了一圈 iOS开发 还是Cocoapods最靠谱。
闲着没事 看看Cocoapods的issues列表,看看有哪个简单的解决一下
然后就发现了这个需求,给Xcode里的pod文件夹增加当前版本号
github.com/CocoaPods/C…
如图:
理一下思路
- 要显示版本号首先要获取,从哪里获取? 我知道了从Podfile.lock里获取
- Podfile.lock怎么读取,yaml格式
- 读取到version信息后 怎么修改Xcode的显示?显示和path是两个值,可以修改,利用xcodeproj就可以
- 修改好以后保存
开始
- 其他先不管,先实现核心功能,就是要读取Podfile.lock
# 指定 Podfile.lock 文件的路径
podfile_lock_path = "/Users/some/Developer/Caiyun/Podfile.lock"
# 读取 Podfile.lock 文件内容
podfile_lock_content = File.read(podfile_lock_path)
# 解析 YAML
podfile_lock_yaml = YAML.safe_load(podfile_lock_content)
# 根据文件结构 获取 PODS 部分的信息
pods_info = podfile_lock_yaml["PODS"].map do |pod|
# puts "pod #{pod}" 发现居然有两种类型
if pod.is_a?(String)
pod
elsif pod.is_a?(Hash)
pod.keys.first
else
nil # 处理其他类型,如果有的话
end
end
读取结果是一个 这样的列表,第一步✅
Alamofire (5.8.0)
Kingfisher (7.9.1)
Moya (15.0.0)
- 第二个核心功能 就是修改显示名称,经过一步步观察调试,可以实现✅
project_path = "/Users/some/Developer/Caiyun/Pods/Pods.xcodeproj"
project = Xcodeproj::Project.open(project_path)
# puts project.root_object.main_group.methods
pods_group = project.root_object.main_group.children.find do |ele|
ele.name == "Pods"
end
pods_group.children.each do |ee|
# puts ee.methods
ee.name = "#{ee.name}123"
end
project.save()
- 第三步,把上面两个核心功能结合起来,边边角角、修修补补
- 解决Podfile.lock路径问题的过程中发现,cocoapods自己有读取其内容,类型为
Pod::Lockfile
,这就方便多了。pod_versions
也可以直接获取,而不用自己解析和拆分字符串了。
结果🏅
source 'https://cdn.cocoapods.org/'
platform :ios, '15.0'
# install! 'cocoapods', preserve_pod_file_structure: true, lock_pod_sources: false
target 'xuexivideo' do
use_frameworks!
pod "Kingfisher"
pod "SnapKit"
post_integrate do |installer|
podfile_lock = installer.config.lockfile # Pod::Lockfile
unless podfile_lock.nil?
pods_info = podfile_lock.send(:pod_versions)
project = installer.pods_project
pods_group = project.root_object.main_group.children.find { |ele| ele.name == "Pods" }
pods_group.children.each do |a_pod_group|
found_item = pods_info.find { |key, _value| key == a_pod_group.path }
if found_item
a_pod_group.name = "#{a_pod_group.path}🔒(#{found_item.last.version})"
end
puts a_pod_group.name
end
project.save if pods_group
end
end
end