iOS 使用 Python 发布 pod 组件
2020-10-29 本文已影响0人
BlackStar暗星
Pod基础 友情链接
iOS - 封装的工具类上传到cocoapods
iOS - Pod组件化踩坑记录
因为最近在学Python,打算使用 Python 来做些辅助性工作,所以第一个实践就是这个了。下面是具体代码,改注释的地方我都注释了。
上菜
#!/usr/bin/python3
# -*- coding:utf-8 -*-
"""
*****************************************************************
脚本说明:
目录:需要放在pod工程的根目录下,即和 .podspec 文件同一目录
执行脚本可选参数有
--auto : 自增版本号,只增加最后一位(只有自增版本号时,才会自动打tag,否则手动打tag)
--auto-remove : 删除当前tag并重新打tag,不修改podspec的版本号
--use-libraries : 使用 --use-libraries
--verbose : 使用 ---verbose (发布时将显示所有log)
--allow-warnings: 使用 --allow-warnings (是否忽略警告,大多数都需要此参数)
--push : 表示直接上传到pod (默认为 验证 ,即 pod lib lint)
repo= : 暂时无用,准备做私有库发布的,目前没写
完整示例:
python auto.py --auto --use-libraries --verbose --allow-warnings --push
*****************************************************************
"""
import os, sys
import fileinput
import time
# print('\n')
# print('=================== 参数 ==================')
# print('argvs = %s'%sys.argv)
# print('===========================================')
# print('\n\n')
# mygit = 'https://github.com/blackstar_lang@163.com/BSFrameworks.git'
# sources = ['https://github.com/CocoaPods/Specs.git']
# 是否是正式发布, False 为验证
is_release_push = False
# 是否自动修改tag 和 .podspec的 version
auto_tag = ''
# podspec 和 git tag 的版本号
tag_version = ''
# 用于接收 --use-libraries 参数
use_libraries = ''
# 用于接收 --verbose 参数
verbose = ''
# 用于接收 --allow-warnings 参数
allow_warnings = ''
# .podspec 的名称
spec_name = ''
# .podspec 的名称
repo_name = ''
# 获取参数
def get_args():
global auto_tag
global use_libraries
global verbose
global allow_warnings
global repo_name
global is_release_push
for arg in sys.argv:
if arg == '--auto' or arg == '--auto-remove':
auto_tag = arg
elif arg == '--use-libraries':
use_libraries = '{}{}'.format(' ', arg)
elif arg == '--verbose':
verbose = ' %s' % (arg)
elif arg == '--allow-warnings':
allow_warnings = ' ' + arg
elif arg.startswith('repo='):
liarg = arg.split('=', 1)
repo_name = liarg[1]
elif arg == '--push':
is_release_push = True
elif arg == '--retag':
is_release_push = True
print('\n======== 解析参数,赋值给全局变量 ==========')
if auto_tag == '--auto':
print('=== auto_tag : %s (自动增加版本号)' % auto_tag)
elif auto_tag == '--auto-remove':
print('=== auto_tag : %s (删除当前tag并重新打tag)' % auto_tag)
else:
print('=== auto_tag : 不处理版本号和 git tag')
print('=== use_libraries : %s' % use_libraries)
print('=== verbose : %s' % verbose)
print('=== allow_warnings : %s' % allow_warnings)
print('=== spec_name : %s' % repo_name)
print('==========================================\n')
# ============================
# 获取spec路径
# ============================
def get_spec_filepath():
global spec_name
# 获取 podspec文件路径和文件名
work_path = os.getcwd()
list_file = os.path.split(work_path)
spec_name = list_file[-1]+'.podspec'
spec_full_path = work_path + '/' + spec_name
return (spec_full_path)
# ============================
# 修改 spec 的 version,
# 并同步给tag_version
# ============================
def edit_spec_version():
filepath = get_spec_filepath()
print('================ spec 路径 ==================')
print(filepath)
print('============================================')
print('\n')
global auto_tag
global tag_version
file = open(filepath, 'r+')
all_line = file.readlines()
for i,line in enumerate(all_line):
if line.find('s.version') != -1:
# 获取整个版本号,并trip掉空格和单引号
version_full = line.split('=')[1]
trip_version = version_full.replace(' ', '')
trip_version = trip_version.replace('\'', '')
if auto_tag == '--auto':
# 获取版本号的最后一位
versionWrap = trip_version.split('.')
version_last_value = versionWrap[2]
# 获取 +1 后的版本号
new_last_version = int(version_last_value) + 1
versionWrap[2] = str(new_last_version)
# 得到最新版本号,并赋给 tag_version
new_version = str.join('.',versionWrap)
tag_version = new_version
# 修改当前行的版本内容,为写入做准备,需要有回车
# 样例 line = s.version = '0.1.8' + 回车
write_version = ' \'%s\'\n'%(new_version)
line = line.replace(version_full, write_version)
all_line[i] = line
else:
tag_version = trip_version
break
file.close()
with open(filepath ,'w') as wfile:
wfile.writelines(all_line)
wfile.close()
def commit_and_push_git():
global tag_version
global auto_tag
# commit 命令
ctime = time.strftime("%Y-%m-%d %H:%M%:%S",time.localtime())
commit_command = 'git commit -m "AUTO_VERSION 最新上传日期:%s 版本号:%s"' % (ctime,tag_version)
# 获取当前分支名称, push命令
git_head = os.popen('git symbolic-ref --short -q HEAD')
current_branch = git_head.read()
git_head.close()
push_command = 'git push origin %s'%(current_branch)
if auto_tag == '--auto-remove':
remove_localtag_command = 'git tag -d %s'%(tag_version)
remove_tag_command = 'git push origin :refs/tags/%s' % (tag_version)
print('\n')
print('---------- git tag -d ----------')
os.system(remove_localtag_command)
os.system(remove_tag_command)
# tag 命令
git_tag_command_local = 'git tag -m "%s %s" %s'%('version :',tag_version,tag_version)
git_tag_command_remote = 'git push --tag'
# 调用 git 命令
os.system('git add .')
commit_open = os.popen(commit_command)
commit_rsp = commit_open.read()
commit_open.close()
print('\n---------- git commit ----------')
print(commit_rsp)
print('\n---------- git push ----------')
push_open = os.popen(push_command)
push_rsp = push_open.read()
push_open.close()
print('\n---------- git tag ----------')
local_tag_open = os.popen(git_tag_command_local)
local_tag_rsp = local_tag_open.read()
local_tag_open.close()
remote_tag_open = os.popen(git_tag_command_remote)
remote_tag_rsp = remote_tag_open.read()
remote_tag_open.close()
# pod 验证
def pod_spc_lint():
pod_lint_command = 'pod spec lint %s%s%s%s' % (
spec_name, allow_warnings, use_libraries, verbose)
print('\n======== %s ========' % pod_lint_command)
os.system(pod_lint_command)
# pod 发布
def pod_trunk_push():
pod_push_command = 'pod trunk push %s%s%s%s' % (
spec_name, allow_warnings, use_libraries, verbose)
print('\n======== %s ========' % pod_push_command)
os.system(pod_push_command)
# ========================================
# 程序启动入口
# ========================================
if __name__ == "__main__":
#获取参数后,修改version,修改后,提交代码导git,然后发布
get_args()
edit_spec_version()
# 如果自动更改版本号,则提交代码
if auto_tag == '--auto' or auto_tag == '--auto-remove':
commit_and_push_git()
if is_release_push == True:
pod_trunk_push()
else:
pod_spc_lint()
测试
python auto.py --use-libraries --allow-warnings --push
终端输出
======== 解析参数,赋值给全局变量 ==========
=== auto_tag : (不处理版本号和 git tag)
=== use_libraries : --use-libraries
=== verbose :
=== allow_warnings : --allow-warnings
=== spec_name :
==========================================
================ spec 路径 ==================
/Users/blackstar/Downloads/MyWorks/BSFrameworks/BSFrameworks.podspec
============================================
======== pod trunk push BSFrameworks.podspec --allow-warnings --use-libraries ========
Updating spec repo `trunk`
CocoaPods 1.10.0 is available.
To update use: `sudo gem install cocoapods`
For more information, see https://blog.cocoapods.org and the CHANGELOG for this version at https://github.com/CocoaPods/CocoaPods/releases/tag/1.10.0
Validating podspec
-> BSFrameworks (0.1.5)
- NOTE | [BSFrameworks/BSCategory, BSFrameworks/BSPhotoFramework, BSFrameworks/BSLooperView, and more...] xcodebuild: note: Using new build system
- NOTE | [BSFrameworks/BSCategory, BSFrameworks/BSPhotoFramework, BSFrameworks/BSLooperView, and more...] xcodebuild: note: Building targets in parallel
- NOTE | [BSFrameworks/BSCategory, BSFrameworks/BSPhotoFramework, BSFrameworks/BSLooperView, and more...] xcodebuild: note: Using codesigning identity override: -
- NOTE | [BSFrameworks/BSCategory, BSFrameworks/BSPhotoFramework, BSFrameworks/BSLooperView, and more...] xcodebuild: note: Planning build
- NOTE | [BSFrameworks/BSCategory, BSFrameworks/BSPhotoFramework, BSFrameworks/BSLooperView, and more...] xcodebuild: note: Constructing build description
- NOTE | [BSFrameworks/BSCategory, BSFrameworks/BSPhotoFramework, BSFrameworks/BSLooperView, and more...] xcodebuild: warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 14.1.99. (in target 'SDWebImage' from project 'Pods')
- NOTE | [BSFrameworks/BSCategory, BSFrameworks/BSPhotoFramework, BSFrameworks/BSLooperView, and more...] xcodebuild: warning: Skipping code signing because the target does not have an Info.plist file and one is not being generated automatically. (in target 'App' from project 'App')
- WARN | [BSFrameworks/BSPhotoFramework] xcodebuild: BSFrameworks/BSFrameworks/Classes/PhotoFramework/ViewController/BSPhotoPreviewController.m:101:62: warning: values of type 'NSUInteger' should not be used as format arguments; add an explicit cast to 'unsigned long' instead [-Wformat]
- WARN | [BSFrameworks/BSPhotoFramework] xcodebuild: BSFrameworks/BSFrameworks/Classes/PhotoFramework/ViewController/BSPhotoPreviewController.m:160:74: warning: values of type 'NSUInteger' should not be used as format arguments; add an explicit cast to 'unsigned long' instead [-Wformat]
- WARN | [BSFrameworks/BSPhotoFramework] xcodebuild: BSFrameworks/BSFrameworks/Classes/PhotoFramework/ViewController/BSPhotoListController.m:101:62: warning: values of type 'NSUInteger' should not be used as format arguments; add an explicit cast to 'unsigned long' instead [-Wformat]
- WARN | [BSFrameworks/BSPhotoFramework] xcodebuild: BSFrameworks/BSFrameworks/Classes/PhotoFramework/ViewController/BSPhotoListController.m:165:62: warning: values of type 'NSUInteger' should not be used as format arguments; add an explicit cast to 'unsigned long' instead [-Wformat]
- WARN | [BSFrameworks/BSPhotoFramework] xcodebuild: BSFrameworks/BSFrameworks/Classes/PhotoFramework/ViewController/BSPhotoListController.m:214:70: warning: values of type 'NSUInteger' should not be used as format arguments; add an explicit cast to 'unsigned long' instead [-Wformat]
- WARN | [BSFrameworks/BSPhotoFramework] xcodebuild: BSFrameworks/BSFrameworks/Classes/PhotoFramework/ViewController/BSPhotoListController.m:237:62: warning: values of type 'NSUInteger' should not be used as format arguments; add an explicit cast to 'unsigned long' instead [-Wformat]
- NOTE | [BSFrameworks/BSCategory, BSFrameworks/BSPhotoFramework, BSFrameworks/BSLooperView, and more...] xcodebuild: warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 6.0, but the range of supported deployment target versions is 9.0 to 14.1.99. (in target 'Masonry' from project 'Pods')
Updating spec repo `trunk`
CocoaPods 1.10.0 is available.
To update use: `sudo gem install cocoapods`
For more information, see https://blog.cocoapods.org and the CHANGELOG for this version at https://github.com/CocoaPods/CocoaPods/releases/tag/1.10.0
--------------------------------------------------------------------------------
🎉 Congrats
🚀 BSFrameworks (0.1.5) successfully published
📅 October 28th, 20:45
🌎 https://cocoapods.org/pods/BSFrameworks
👍 Tell your friends!
--------------------------------------------------------------------------------