iOS主工程修改后一键同步Pod的ruby脚本(进阶一)
2020/7/8 9:26:33
本文主要是介绍iOS主工程修改后一键同步Pod的ruby脚本(进阶一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Example是壳工程,当需求涉及到多个模块的修改时,为了方便提交各个Pod的代码,写了个ruby脚本
- 规则1:目录结构如下
- 规则2:提交日志以
PodSync:
开头 - 修改下work_path的取值,脚本就可以配置在持续集成服务器上。
- TODO1:执行状态通知,因为各个Pod同步后commit就变了,壳工程应该
pod update
- TODO2:利用Gitlab Api 直接提交代码,就不用clone了
├── Podfile ├── Podfile.lock ├── Pods │ ├── ABCPods1 │ │ └── Code1.m │ ├── ABCPods2 │ │ └── Code2.m │ ├── ABCPods3 │ │ └── Code3.m │ ├── Headers │ ├── Local Podspecs │ ├── Manifest.lock │ ├── Pods.xcodeproj │ └── Target Support Files ├── Example │ ├── AppDelegate.h │ └── AppDelegate.m ├── Example.xcodeproj └── Example.xcworkspace 复制代码
ABCPods都是用pod lib create 创建的,目录结构一致 ,ABCPods下有同名ABCPods下是模块代码,类似:
├── ABCPods1 │ ├── ABCPods1 │ │ └── Code1.m 复制代码
自动同步的ruby脚本如下:
# frozen_string_literal: true require 'pathname' require 'git' require 'fileutils' work_path = Pathname.new '.../path/to/Example' url_config = { 'ABCPods1' => 'http://example.com/ios_code/ABCPods1.git', 'ABCPods2' => 'http://example.com/ios_code/ABCPods2.git', 'ABCPods3' => 'http://example.com/ios_code/ABCPods3.git' } Git.configure do |config| config.binary_path = '/usr/local/bin/git' end g = Git.open work_path current_branch = g.current_branch puts "current_branch:#{current_branch}" commits = g.log(2) # 获取最新两次提交 first_commit = commits.first last_commit = commits.last puts "本次提交id: #{first_commit}" puts first_commit.message puts "上次提交id: #{last_commit}" # 提交日志约定以 PodSync: 开头 unless first_commit.message.include? 'PodSync:' puts '提交日志没有 PodSync: 开头' exit 0 end if first_commit.parents.size > 1 puts '这是一个合并提交,不能同步合并提交' exit 1 end file_list = g.diff(first_commit, commits.last).name_status.map(&:first) # 需要排除一些文件 Local Podspecs Manifest.lock Headers 等 pod_file_list = file_list.select do |e| next if e.end_with? 'Manifest.lock' next if e.start_with? 'Pods/Local Podspecs' next if e.start_with? 'Pods/Target Support Files' next if e.start_with? 'Pods/Headers' e.start_with? 'Pods/' end puts "pod_file_list#{pod_file_list}" # 转换成Pod名 pod_file_list_map = pod_file_list.map { |e| e.split('/')[1] } # 去掉重复的,得到修改的Pod数组 pod_file_list_set = pod_file_list_map.uniq puts pod_file_list_set Dir.mktmpdir do |dir| pod_file_list_set.each do |item| begin puts "Clone: #{url_config[item]}, dir #{item}, branch : #{current_branch}" g = Git.clone(url_config[item], item, path: dir, branch: current_branch) rescue StandardError => e puts e exit 1 end src = work_path + 'Pods' + item + item dest = Pathname.new(dir) + item + item puts "#{src} copy to #{dest}" FileUtils.rm_r(dest, force: true) FileUtils.cp_r(src, dest.parent) # puts g.status.changed 状态貌似有缓存 还是命令行准确 status_output = `git -C #{dest.parent} status` puts status_output unless status_output.include? 'working tree clean' # 提交&推送 `git -C #{dest.parent} commit -a -m 'Over PodSync'` `git -C #{dest.parent} push` end end 复制代码
这篇关于iOS主工程修改后一键同步Pod的ruby脚本(进阶一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12Axios库资料:新手入门必读教程
- 2024-11-11Axios库项目实战:新手入门教程
- 2024-09-29Axios库教程:初学者必备指南
- 2024-08-29Axios库资料:新手入门指南与基本使用教程
- 2024-03-14system bios shadowed
- 2024-03-14gabios
- 2024-02-07iOS应用提交上架的最新流程
- 2024-02-06打包 iOS 的 IPA 文件
- 2023-12-07uniapp打包iOS应用并通过审核:代码混淆的终极解决方案 ?
- 2023-11-25uniapp IOS从打包到上架流程(详细简单) 原创