pindo 4.6.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. checksums.yaml +7 -0
  2. data/bin/pindo +35 -0
  3. data/lib/pindo/base/aeshelper.rb +31 -0
  4. data/lib/pindo/base/deviceinfo.rb +90 -0
  5. data/lib/pindo/base/executable.rb +224 -0
  6. data/lib/pindo/base/githelper.rb +489 -0
  7. data/lib/pindo/base/hashhelper.rb +134 -0
  8. data/lib/pindo/base/plaininformative.rb +15 -0
  9. data/lib/pindo/base/plistbuddyexecutable.rb +121 -0
  10. data/lib/pindo/base/standarderror.rb +14 -0
  11. data/lib/pindo/client/applovinclient.rb +156 -0
  12. data/lib/pindo/client/aws3sclient.rb +183 -0
  13. data/lib/pindo/client/bossclient.rb +229 -0
  14. data/lib/pindo/client/bossconfigclient.rb +175 -0
  15. data/lib/pindo/client/giteeclient.rb +65 -0
  16. data/lib/pindo/client/httpclient.rb +40 -0
  17. data/lib/pindo/client/pgyerclient.rb +439 -0
  18. data/lib/pindo/client/tgateclient.rb +103 -0
  19. data/lib/pindo/command.rb +101 -0
  20. data/lib/pindo/config/pindoconfig.rb +439 -0
  21. data/lib/pindo/config/pindouserlocalconfig.rb +81 -0
  22. data/lib/pindo/deploy/Fastfile +233 -0
  23. data/lib/pindo/deploy/build.rb +167 -0
  24. data/lib/pindo/deploy/bundleid.rb +245 -0
  25. data/lib/pindo/deploy/cert.rb +508 -0
  26. data/lib/pindo/deploy/check.rb +79 -0
  27. data/lib/pindo/deploy/configproj.rb +89 -0
  28. data/lib/pindo/deploy/confusecode.rb +248 -0
  29. data/lib/pindo/deploy/confuseproj.rb +112 -0
  30. data/lib/pindo/deploy/fabric.rb +58 -0
  31. data/lib/pindo/deploy/getitcinfo.rb +248 -0
  32. data/lib/pindo/deploy/iap.rb +796 -0
  33. data/lib/pindo/deploy/initconfig.rb +128 -0
  34. data/lib/pindo/deploy/itcapp.rb +147 -0
  35. data/lib/pindo/deploy/itcinfo.rb +369 -0
  36. data/lib/pindo/deploy/pem.rb +55 -0
  37. data/lib/pindo/deploy/pullconfig.rb +46 -0
  38. data/lib/pindo/deploy/pushconfig.rb +83 -0
  39. data/lib/pindo/deploy/quswark.rb +146 -0
  40. data/lib/pindo/deploy/quswauth.rb +67 -0
  41. data/lib/pindo/deploy/reportbug.rb +135 -0
  42. data/lib/pindo/deploy/resign.rb +338 -0
  43. data/lib/pindo/deploy/tag.rb +108 -0
  44. data/lib/pindo/deploy/updateconfig.rb +129 -0
  45. data/lib/pindo/deploy/uploadipa.rb +63 -0
  46. data/lib/pindo/deploy.rb +44 -0
  47. data/lib/pindo/dev/autobuild.rb +204 -0
  48. data/lib/pindo/dev/autoresign.rb +186 -0
  49. data/lib/pindo/dev/confusecode.rb +127 -0
  50. data/lib/pindo/dev/confuseproj.rb +111 -0
  51. data/lib/pindo/dev/createbuild.rb +159 -0
  52. data/lib/pindo/dev/debug.rb +141 -0
  53. data/lib/pindo/dev/pub.rb +171 -0
  54. data/lib/pindo/dev/renewcert.rb +142 -0
  55. data/lib/pindo/dev.rb +23 -0
  56. data/lib/pindo/env/dreamstudio.rb +53 -0
  57. data/lib/pindo/env/flutter.rb +59 -0
  58. data/lib/pindo/env/flutter.sh +116 -0
  59. data/lib/pindo/env/quarkenv.rb +58 -0
  60. data/lib/pindo/env/swarkenv.rb +62 -0
  61. data/lib/pindo/env/workhard.rb +56 -0
  62. data/lib/pindo/env.rb +17 -0
  63. data/lib/pindo/ipa/autoresign.rb +188 -0
  64. data/lib/pindo/ipa/import.rb +261 -0
  65. data/lib/pindo/ipa/output.rb +396 -0
  66. data/lib/pindo/ipa.rb +22 -0
  67. data/lib/pindo/lib/forcepush.rb +159 -0
  68. data/lib/pindo/lib/lint.rb +115 -0
  69. data/lib/pindo/lib/push.rb +143 -0
  70. data/lib/pindo/lib/update.rb +75 -0
  71. data/lib/pindo/lib.rb +18 -0
  72. data/lib/pindo/module/appselect.rb +200 -0
  73. data/lib/pindo/module/appstore_in_app_purchase.rb +1803 -0
  74. data/lib/pindo/module/appstore_metadata_connect_api_helper.rb +12 -0
  75. data/lib/pindo/module/appstore_metadata_fastlane_helper.rb +922 -0
  76. data/lib/pindo/module/buildconfighelper.rb +13 -0
  77. data/lib/pindo/module/buildhelper.rb +76 -0
  78. data/lib/pindo/module/commonconfuseproj.rb +271 -0
  79. data/lib/pindo/module/config_project.sh +143 -0
  80. data/lib/pindo/module/configprojhelper.rb +631 -0
  81. data/lib/pindo/module/iap_tier.json +813 -0
  82. data/lib/pindo/module/icon_contents.json +116 -0
  83. data/lib/pindo/module/imessage_icon.json +91 -0
  84. data/lib/pindo/module/imgset_contents.json +21 -0
  85. data/lib/pindo/module/launchimg_contents.json +21 -0
  86. data/lib/pindo/module/pemcreate.rb +63 -0
  87. data/lib/pindo/module/pgyerhelper.rb +339 -0
  88. data/lib/pindo/module/xcodebuildpre.rb +258 -0
  89. data/lib/pindo/module/xcodehelper.rb +521 -0
  90. data/lib/pindo/options/appconfigoptions.rb +23 -0
  91. data/lib/pindo/options/deployoptions.rb +363 -0
  92. data/lib/pindo/pgyer/apptest.rb +104 -0
  93. data/lib/pindo/pgyer/comment.rb +95 -0
  94. data/lib/pindo/pgyer/download.rb +105 -0
  95. data/lib/pindo/pgyer/login.rb +61 -0
  96. data/lib/pindo/pgyer/upload.rb +234 -0
  97. data/lib/pindo/pgyer.rb +17 -0
  98. data/lib/pindo/repo/clone.rb +78 -0
  99. data/lib/pindo/repo/create.rb +55 -0
  100. data/lib/pindo/repo/login.rb +64 -0
  101. data/lib/pindo/repo/search.rb +60 -0
  102. data/lib/pindo/repo.rb +16 -0
  103. data/lib/pindo/setup.rb +60 -0
  104. data/lib/pindo/upgrade.rb +56 -0
  105. data/lib/pindo/utils/applovin.rb +213 -0
  106. data/lib/pindo/utils/boss.rb +209 -0
  107. data/lib/pindo/utils/clearcert.rb +60 -0
  108. data/lib/pindo/utils/device.rb +279 -0
  109. data/lib/pindo/utils/icon.rb +91 -0
  110. data/lib/pindo/utils/icon.sh +133 -0
  111. data/lib/pindo/utils/podindex.rb +56 -0
  112. data/lib/pindo/utils/podindex.sh +30 -0
  113. data/lib/pindo/utils/renewproj.rb +146 -0
  114. data/lib/pindo/utils/tgate.rb +159 -0
  115. data/lib/pindo/utils/xcassets.rb +46 -0
  116. data/lib/pindo/utils/xcassets.sh +88 -0
  117. data/lib/pindo/utils.rb +29 -0
  118. data/lib/pindo/version.rb +110 -0
  119. data/lib/pindo.rb +34 -0
  120. metadata +364 -0
@@ -0,0 +1,146 @@
1
+
2
+ require 'xcodeproj'
3
+ require 'find'
4
+ require 'fileutils'
5
+
6
+ module Pindo
7
+ class Command
8
+ class Utils < Command
9
+ class Renewproj < Utils
10
+
11
+ include Command::DeployOptions
12
+
13
+ include XcodeHelper
14
+
15
+ self.summary = '重新创建Xcode工程'
16
+
17
+ self.description = <<-DESC
18
+ 重新创建Xcode工程
19
+ DESC
20
+
21
+ self.arguments = [
22
+ CLAide::Argument.new('path/to/config.json', true),
23
+ ]
24
+
25
+ def self.options
26
+ [
27
+ ['--n=', 'input project name'],
28
+ ['--nocreate', 'no create xcode project'],
29
+ ].concat(super)
30
+ end
31
+
32
+ def initialize(argv)
33
+ @project_name = argv.option('n')
34
+ @args_nocreate_flag = argv.flag?('nocreate')
35
+ super
36
+ end
37
+
38
+ def validate!
39
+ super
40
+ if @project_name.nil? || @project_name.empty?
41
+ if @config_json['project_info'] && @config_json['project_info']['project_name']
42
+ @project_name = @config_json['project_info']['project_name']
43
+ end
44
+ end
45
+
46
+ if @project_name.nil?
47
+ @project_name = ask('Project Name: ')
48
+ end
49
+
50
+ @project_name = "Example" if @project_name.nil? || @project_name.empty?
51
+ @project_name = @project_name.gsub(/ /, '');
52
+ @project_name = @project_name.gsub(/\'/, '');
53
+
54
+ puts "project_name = #{@project_name}"
55
+ end
56
+
57
+ def create_project(new_proj_name:nil, new_proj_path:nil, old_proj_name:nil, old_proj_path:nil)
58
+
59
+ new_proj_fullname = File.join(new_proj_path, new_proj_name) + ".xcodeproj"
60
+ Xcodeproj::Project.new(new_proj_fullname).save
61
+ new_proj_obj = Xcodeproj::Project.open(new_proj_fullname)
62
+
63
+ old_proj_fullname = File.join(old_proj_path, old_proj_name) + ".xcodeproj"
64
+ old_proj_obj = Xcodeproj::Project.open(old_proj_fullname)
65
+
66
+ copy_to_newproject(new_proj_path:new_proj_path, new_proj_name:new_proj_name, old_proj_path:old_proj_path, old_proj_name:old_proj_name)
67
+
68
+ create_project_target(new_proj_name:new_proj_name, new_proj_path:new_proj_path, new_proj_obj:new_proj_obj, old_proj_name:old_proj_name, old_proj_path:old_proj_path, old_proj_obj:old_proj_obj)
69
+
70
+ add_file_to_target(new_proj_name:new_proj_name, new_proj_path:new_proj_path, new_proj_obj:new_proj_obj, old_proj_name:old_proj_name, old_proj_path:old_proj_path, old_proj_obj:old_proj_obj)
71
+
72
+ config_project_target(new_proj_name:new_proj_name, new_proj_path:new_proj_path, new_proj_obj:new_proj_obj, old_proj_name:old_proj_name, old_proj_path:old_proj_path, old_proj_obj:old_proj_obj)
73
+
74
+ setting_new_project(new_proj_name:new_proj_name, new_proj_path:new_proj_path, new_proj_obj:new_proj_obj, old_proj_name:old_proj_name, old_proj_path:old_proj_path, old_proj_obj:old_proj_obj)
75
+
76
+ end
77
+
78
+
79
+ def run
80
+ system 'pod deintegrate'
81
+ current_dir = Dir.pwd
82
+ old_project_dir = current_dir
83
+ old_proj_name = get_old_proj_name(old_proj_path:current_dir)
84
+
85
+
86
+ if @args_nocreate_flag
87
+ puts "2=================="
88
+ new_proj_name = old_proj_name
89
+ new_project_dir = old_project_dir
90
+ ENV['pindo_new_project_dir'] = old_project_dir
91
+ else
92
+ new_proj_name = @project_name
93
+ if new_proj_name.nil?
94
+ puts "Please input a new project name."
95
+ return
96
+ end
97
+ new_project_dir = get_new_proj_path
98
+ ENV['pindo_new_project_dir'] = new_project_dir
99
+ create_project(new_proj_name:new_proj_name, new_proj_path:new_project_dir, old_proj_name:old_proj_name, old_proj_path:old_project_dir)
100
+ end
101
+
102
+ if File.exist?(File.join(new_project_dir, 'Podfile.lock'))
103
+ FileUtils.rm_rf(File.join(new_project_dir, 'Podfile.lock'))
104
+ end
105
+ system "open #{new_project_dir}"
106
+ puts "New Project Dir: #{new_project_dir}"
107
+ puts "Done !"
108
+ end
109
+
110
+ def get_new_proj_path
111
+
112
+ current_dir = Dir.pwd
113
+
114
+ temp_dir_name = @project_name + '_' +Time.now.strftime('%y%m%d_%H%M%S')
115
+ new_project_dir = File.join(File::expand_path(current_dir + "/../") , temp_dir_name)
116
+
117
+ if File.exist?(new_project_dir)
118
+ system 'sh rm -rf ' + new_project_dir
119
+ FileUtils.rm_rf(new_project_dir)
120
+ end
121
+ FileUtils.mkdir(new_project_dir)
122
+
123
+ return new_project_dir
124
+ end
125
+
126
+ def get_old_proj_name(old_proj_path:nil)
127
+
128
+
129
+ old_project_fullname = ""
130
+ Dir.foreach(old_proj_path) do |file|
131
+ if file =~ /(.*).xcodeproj/
132
+ old_project_fullname = file
133
+ break;
134
+ end
135
+ end
136
+
137
+ old_proj_name = File.basename(old_project_fullname, ".xcodeproj")
138
+ return old_proj_name
139
+
140
+ end
141
+
142
+
143
+ end
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,159 @@
1
+
2
+
3
+ require 'highline/import'
4
+ require 'fileutils'
5
+ require 'json'
6
+ require 'faraday'
7
+ require 'pindo/client/tgateclient'
8
+
9
+
10
+
11
+ module Pindo
12
+ class Command
13
+ class Utils < Command
14
+ class Tgate < Utils
15
+
16
+ self.summary = 'tGate的命令行终端工具'
17
+
18
+ self.description = <<-DESC
19
+ tGate的命令行终端工具. 用法:查看状态 pindo utils tgate --env=dev --type=device --deviceid=XXX-XX
20
+ 修改tgate状态,例如设置dev环境当前ip为超白: pindo utils tgate --env=dev --type=ip --status=super_white
21
+ DESC
22
+
23
+ self.arguments = [
24
+
25
+ ]
26
+
27
+ def self.options
28
+ [
29
+ ['--env', '指定的dev或者prod环境: --env=dev / prod'],
30
+ ['--type', '指定的type类型: --type=ip / device'],
31
+ ['--status', '指定需要修改状态: --status=normal / black / super_white '],
32
+ ['--deviceid', '指定手机设备deviceid: --deviceid=newvalue'],
33
+ ['--idfa', '指定手机设备idfa: --idfa=newvalue'],
34
+ ['--sbsid', '指定手机设备sbsid: --sbsid=newvalue'],
35
+ ['--sutid', '指定手机设备sutid: --sutid=newvalue'],
36
+ ['--tzlid', '指定手机设备tzlid: --tzlid=newvalue'],
37
+ ].concat(super)
38
+ end
39
+
40
+
41
+ def initialize(argv)
42
+
43
+ @args_env_options = argv.option('env')
44
+ @args_type_options = argv.option('type')
45
+ @args_status_options = argv.option('status')
46
+ @args_deviceid_options = argv.option('deviceid')
47
+ @args_idfa_options = argv.option('idfa')
48
+ @args_sbsid_options = argv.option('sbsid')
49
+ @args_sutid_options = argv.option('sutid')
50
+ @args_tzlid_options = argv.option('tzlid')
51
+
52
+
53
+ super(argv)
54
+ @additional_args = argv.remainder!
55
+ end
56
+
57
+ def validate!
58
+
59
+ super
60
+ end
61
+
62
+ def run
63
+
64
+ @tgate_client = TgateClient.new(base_usrl:pindo_single_config.tgate_base_url, req_config:pindo_single_config.tgate_req_config)
65
+
66
+
67
+ current_device_info = Pindo::DeviceInfo.new
68
+
69
+ if !@args_deviceid_options.nil?
70
+ current_device_info.device_id = @args_deviceid_options
71
+ end
72
+
73
+ if !@args_idfa_options.nil?
74
+ current_device_info.device_id = @args_idfa_options
75
+ end
76
+
77
+ if !@args_sbsid_options.nil?
78
+ current_device_info.device_id = @args_sbsid_options
79
+ end
80
+ if !@args_sutid_options.nil?
81
+ current_device_info.device_id = @args_sutid_options
82
+ end
83
+ if !@args_tzlid_options.nil?
84
+ current_device_info.device_id = @args_tzlid_options
85
+ end
86
+
87
+
88
+ puts
89
+ puts
90
+ puts "========================================================================================================="
91
+ puts "========================================================================================================="
92
+ puts
93
+
94
+
95
+
96
+ puts "111"
97
+ if !@args_status_options.nil?
98
+
99
+ puts @args_status_options
100
+ puts "112"
101
+ env = "dev"
102
+ if !@args_env_options.nil?
103
+ env = @args_env_options
104
+ end
105
+
106
+ type = "ip"
107
+ if !@args_type_options.nil? && @args_type_options.eql?("device")
108
+ type = @args_type_options
109
+ end
110
+
111
+ to_status = "normal"
112
+ if !@args_status_options.nil?
113
+ to_status = @args_status_options
114
+ end
115
+
116
+
117
+
118
+ puts "当前设备信息:"
119
+ puts JSON.pretty_generate(JSON.parse(current_device_info.to_json))
120
+ puts
121
+
122
+ @tgate_client.post_update_gate_status(env_mode:env, type:type, to_status:to_status, device_info:current_device_info)
123
+
124
+
125
+ else
126
+
127
+ puts "当前设备信息:"
128
+ puts JSON.pretty_generate(JSON.parse(current_device_info.to_json))
129
+ puts
130
+ end
131
+
132
+
133
+
134
+ # current_device_info = Pindo::DeviceInfo.new
135
+ # Tgate.post_update_gate_status(env_mode:"dev", type:"ip", to_status:"normal", device_info:current_device_info)
136
+ # Tgate.post_update_gate_status(env_mode:"dev", type:"device", to_status:"normal", device_info:current_device_info)
137
+ # Tgate.post_update_gate_status(env_mode:"prod", type:"ip", to_status:"normal", device_info:current_device_info)
138
+ # Tgate.post_update_gate_status(env_mode:"prod", type:"device", to_status:"normal", device_info:current_device_info)
139
+
140
+
141
+ response_data = @tgate_client.get_gate_status(device_info:current_device_info)
142
+ puts JSON.pretty_generate(response_data)
143
+ puts
144
+ puts "========================================================================================================="
145
+ puts "========================================================================================================="
146
+ puts
147
+
148
+ end
149
+
150
+ end
151
+ end
152
+ end
153
+ end
154
+
155
+
156
+
157
+
158
+
159
+
@@ -0,0 +1,46 @@
1
+
2
+
3
+ require 'highline/import'
4
+
5
+ module Pindo
6
+ class Command
7
+ class Utils < Command
8
+ class Xcasserts < Utils
9
+
10
+ self.summary = '获取Assets.xcassets中所有图片,并检查是否有缺失图片'
11
+
12
+ self.description = <<-DESC
13
+ 获取Assets.xcassets中所有图片,并检查是否有缺失图片
14
+ DESC
15
+
16
+
17
+ self.arguments = [
18
+
19
+ ]
20
+
21
+ def self.options
22
+ [
23
+
24
+ ].concat(super)
25
+ end
26
+
27
+ def initialize(argv)
28
+ super(argv)
29
+ @additional_args = argv.remainder!
30
+ end
31
+
32
+ def validate!
33
+ super
34
+ end
35
+
36
+ def run
37
+ current_dir = Dir.pwd;
38
+
39
+ command = 'sh ' + File.join(File.expand_path('./', __dir__), 'xcassets.sh') + " #{current_dir}"
40
+ system command
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,88 @@
1
+ #!/bin/bash
2
+
3
+ #当前脚本目录
4
+
5
+ IMAGESET_SCRIPT_DIR=$(cd `dirname $0`; pwd)
6
+
7
+ if [ "$1" == "" ]; then
8
+ echo "Please input resource dir!!!"
9
+ exit 1
10
+ else
11
+ ALL_IMAGE_DIR=$1
12
+ fi
13
+
14
+
15
+ function proc_imagesets()
16
+ {
17
+ TEMP_XCASSETS_DIR=$1
18
+ TEMP_XCASSETS_BUNDLE_DIR=$2
19
+
20
+ echo $TEMP_XCASSETS_DIR
21
+
22
+ for IMAGESET_DIR in $( find $TEMP_XCASSETS_DIR -name "*.imageset" )
23
+
24
+ do
25
+ IMAGESET_NAME=${IMAGESET_DIR##*/}
26
+ NEW_IMAGE_BASE_NAME=${IMAGESET_NAME%.imageset*}
27
+
28
+ find $IMAGESET_DIR -type f -name "*.[pPjJ][nNpP][gG]" | while read ORIGIN_IMAGE_FILE
29
+ do
30
+
31
+ ORIGIN_IMAGE_NAME=${ORIGIN_IMAGE_FILE##*/}
32
+ ORIGIN_IMAGE_BASE_NAME=${ORIGIN_IMAGE_NAME%.[pPjJ][nNpP][gG]*}
33
+ ORIGIN_IMAGE_BASE_NAME=${ORIGIN_IMAGE_BASE_NAME%@[123]x*}
34
+
35
+ NEW_IMAGE_NAME=${ORIGIN_IMAGE_NAME/${ORIGIN_IMAGE_BASE_NAME}/${NEW_IMAGE_BASE_NAME}}
36
+ NEW_IMAGE_FILE=${ORIGIN_IMAGE_FILE/${ORIGIN_IMAGE_NAME}/${NEW_IMAGE_NAME}}
37
+
38
+
39
+ if [ "$NEW_IMAGE_BASE_NAME" != "$ORIGIN_IMAGE_BASE_NAME" ]; then
40
+
41
+ echo
42
+ echo
43
+ echo 图片路径:
44
+ echo 旧:$ORIGIN_IMAGE_FILE
45
+ echo 新:$NEW_IMAGE_FILE
46
+
47
+ echo 图片名称:
48
+ echo 旧:$ORIGIN_IMAGE_NAME
49
+ echo 新:$NEW_IMAGE_NAME
50
+
51
+ mv "$ORIGIN_IMAGE_FILE" "$NEW_IMAGE_FILE"
52
+ sed -i "" "s/$ORIGIN_IMAGE_NAME/$NEW_IMAGE_NAME/g" $IMAGESET_DIR/Contents.json
53
+
54
+ fi
55
+
56
+ cp $NEW_IMAGE_FILE $TEMP_XCASSETS_BUNDLE_DIR
57
+ done
58
+ done
59
+ }
60
+
61
+
62
+ for XCASSETS_DIR in $( find $ALL_IMAGE_DIR -name "*.xcassets" )
63
+
64
+ do
65
+
66
+ XCASSETS_NAME=${XCASSETS_DIR##*/}
67
+ XCASSETS_FATHER_DIR=${XCASSETS_DIR%/*}
68
+
69
+ XCASSETS_BASE_NAME=${XCASSETS_NAME%.xcassets*}
70
+
71
+ XCASSETS_BUNDLE_DIR=${XCASSETS_FATHER_DIR}/${XCASSETS_BASE_NAME}.bundle
72
+ if [[ -d ${XCASSETS_BUNDLE_DIR} ]]; then
73
+ rm -rf ${XCASSETS_BUNDLE_DIR}
74
+ fi
75
+
76
+ mkdir ${XCASSETS_BUNDLE_DIR}
77
+
78
+ proc_imagesets $XCASSETS_DIR ${XCASSETS_BUNDLE_DIR}
79
+ done
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
@@ -0,0 +1,29 @@
1
+
2
+ require 'pindo/utils/icon'
3
+ require 'pindo/utils/renewproj'
4
+ require 'pindo/utils/clearcert'
5
+ require 'pindo/utils/xcassets'
6
+ require 'pindo/utils/podindex'
7
+ require 'pindo/utils/device'
8
+ require 'pindo/utils/applovin'
9
+ require 'pindo/utils/tgate'
10
+ require 'pindo/utils/boss'
11
+
12
+
13
+ module Pindo
14
+ class Command
15
+
16
+ class Utils < Command
17
+
18
+
19
+ self.abstract_command = true
20
+
21
+ self.summary = '其他工具类的相关命令'
22
+
23
+ self.description = '其他工具类的相关命令'
24
+
25
+
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,110 @@
1
+ module Pindo
2
+
3
+ VERSION = "4.6.9"
4
+
5
+ class VersionCheck
6
+
7
+ def self.check_pindo_new_version
8
+
9
+ puts
10
+ puts "pindo #{Pindo::VERSION}"
11
+
12
+ begin
13
+
14
+ pindo_dir = File.expand_path(ENV['PINDO_DIR'] || '~/.pindo')
15
+ pindo_common_configdir = File.join(pindo_dir, "pindo_common_config")
16
+ pindo_common_configfile_fullname = File.join(pindo_common_configdir, "pindo_config.json")
17
+ pindo_common_config_json = JSON.parse(File.read(pindo_common_configfile_fullname))
18
+
19
+ pindo_latest_version = pindo_common_config_json["pindo_latest_version"]
20
+ pindo_mini_version = pindo_common_config_json["pindo_mini_version"]
21
+ pindo_force_upgrade = pindo_common_config_json["pindo_force_upgrade"]
22
+ pindo_lates_update_info = pindo_common_config_json["pindo_lates_update_info"]
23
+
24
+ pindo_current_version = Pindo::VERSION
25
+
26
+ if pindo_force_upgrade
27
+ compare_num = Pindo::VersionCheck::version_greater_than(version_string1:pindo_current_version, version_string2:pindo_latest_version)
28
+ if compare_num < 0
29
+ # answer = agree("有可用的新版本,是否升级?(Y/n:")
30
+ # if answer
31
+ # Pindo::Command::Env::Upgrade::run([])
32
+ # end
33
+ puts
34
+ puts "最新版本是#{pindo_latest_version}目前可用, 可使用pindo upgrade 升级"
35
+ puts
36
+ puts pindo_lates_update_info
37
+ puts
38
+ end
39
+
40
+ end
41
+
42
+ rescue Exception => e
43
+ puts "有异常错误,请使用pindo upgrade 升级"
44
+ puts
45
+
46
+ end
47
+ end
48
+
49
+ def self.check_pindo_force_upgrade
50
+
51
+ begin
52
+
53
+ pindo_dir = File.expand_path(ENV['PINDO_DIR'] || '~/.pindo')
54
+ pindo_common_configdir = File.join(pindo_dir, "pindo_common_config")
55
+ pindo_common_configfile_fullname = File.join(pindo_common_configdir, "pindo_config.json")
56
+ pindo_common_config_json = JSON.parse(File.read(pindo_common_configfile_fullname))
57
+
58
+ pindo_latest_version = pindo_common_config_json["pindo_latest_version"]
59
+ pindo_mini_version = pindo_common_config_json["pindo_mini_version"]
60
+ pindo_force_upgrade = pindo_common_config_json["pindo_force_upgrade"]
61
+ pindo_current_version = Pindo::VERSION
62
+
63
+ if pindo_force_upgrade
64
+ compare_num = Pindo::VersionCheck::version_greater_than(version_string1:pindo_current_version, version_string2:pindo_mini_version)
65
+ if compare_num < 0
66
+ puts "当前pindo版本 #{Pindo::VERSION}"
67
+ puts "最新版本 #{pindo_latest_version}"
68
+ puts "要求最低版本 #{pindo_mini_version}"
69
+ raise Informative, "请使用pindo upgrade 升级!"
70
+ end
71
+ end
72
+
73
+ rescue Exception => e
74
+ raise Informative, "有异常错误,请使用pindo upgrade 升级!"
75
+ end
76
+ end
77
+
78
+ def self.version_greater_than(version_string1: nil, version_string2: nil)
79
+ return 0 if version_string1.nil? && version_string2.nil?
80
+ return -1 if version_string1.nil?
81
+ return 1 if version_string2.nil?
82
+
83
+ version_string1_array = version_string1.split('.') || []
84
+ version_string2_array = version_string2.split('.') || []
85
+
86
+ array_max_length = [version_string1_array.size, version_string2_array.size].max
87
+
88
+ version_string1_array += ['0'] * (array_max_length - version_string1_array.size)
89
+ version_string2_array += ['0'] * (array_max_length - version_string2_array.size)
90
+
91
+ compare_num = 0
92
+ (0..array_max_length).each do |i|
93
+ if version_string1_array[i] == version_string2_array[i]
94
+ compare_num = 0
95
+ elsif version_string1_array[i].to_i > version_string2_array[i].to_i
96
+ compare_num = 1
97
+ break
98
+ else
99
+ compare_num = -1
100
+ break
101
+ end
102
+ end
103
+
104
+ compare_num
105
+ end
106
+
107
+ end
108
+
109
+
110
+ end
data/lib/pindo.rb ADDED
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'claide'
5
+
6
+ module Pindo
7
+
8
+ autoload :VersionCheck, 'pindo/version'
9
+ autoload :Command, 'pindo/command'
10
+ autoload :Executable, 'pindo/base/executable'
11
+ autoload :Plistbuddyexecutable, 'pindo/base/plistbuddyexecutable'
12
+
13
+ require 'pindo/command'
14
+ require 'pindo/version'
15
+
16
+ class PindoApp
17
+
18
+ def run(argv)
19
+
20
+ Pindo::VersionCheck::check_pindo_new_version()
21
+ Pindo::Command.run(argv)
22
+
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+
29
+
30
+
31
+
32
+
33
+
34
+