pindo 4.8.7 → 4.8.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pindo/base/githelper.rb +21 -0
  3. data/lib/pindo/client/pgyerclient.rb +34 -1
  4. data/lib/pindo/client/unityhelper.rb +179 -0
  5. data/lib/pindo/command/android/debug.rb +73 -0
  6. data/lib/pindo/command/android.rb +14 -0
  7. data/lib/pindo/command/deploy/build.rb +2 -3
  8. data/lib/pindo/command/dev/autobuild.rb +2 -0
  9. data/lib/pindo/command/dev/build.rb +4 -1
  10. data/lib/pindo/command/dev/debug.rb +25 -15
  11. data/lib/pindo/command/gplay/iap.rb +43 -0
  12. data/lib/pindo/command/gplay/itcapp.rb +41 -0
  13. data/lib/pindo/command/gplay/metadata.rb +43 -0
  14. data/lib/pindo/command/gplay/screenshots.rb +43 -0
  15. data/lib/pindo/command/gplay/upload.rb +40 -0
  16. data/lib/pindo/command/gplay.rb +17 -0
  17. data/lib/pindo/command/ios/adhoc.rb +190 -0
  18. data/lib/pindo/command/ios/applovin.rb +241 -0
  19. data/lib/pindo/command/ios/autoresign.rb +164 -0
  20. data/lib/pindo/command/ios/build.rb +115 -0
  21. data/lib/pindo/command/ios/cert.rb +164 -0
  22. data/lib/pindo/command/ios/debug.rb +195 -0
  23. data/lib/pindo/command/ios.rb +18 -0
  24. data/lib/pindo/command/pgyer/apptest.rb +5 -1
  25. data/lib/pindo/command/pgyer/upload.rb +4 -4
  26. data/lib/pindo/command/unity/apk.rb +78 -0
  27. data/lib/pindo/command/unity/ipa.rb +152 -0
  28. data/lib/pindo/command/unity.rb +16 -0
  29. data/lib/pindo/command.rb +3 -1
  30. data/lib/pindo/module/appselect.rb +4 -0
  31. data/lib/pindo/module/cert/xcodecerthelper.rb +2 -2
  32. data/lib/pindo/module/pgyer/pgyerhelper.rb +47 -7
  33. data/lib/pindo/module/xcode/xcodehelper.rb +1 -1
  34. data/lib/pindo/options/deployoptions.rb +4 -0
  35. data/lib/pindo/version.rb +1 -1
  36. data/lib/pindo.rb +1 -0
  37. metadata +22 -6
@@ -0,0 +1,152 @@
1
+ require 'highline/import'
2
+ require 'xcodeproj'
3
+ require 'find'
4
+ require 'fileutils'
5
+ require 'pindo/base/executable'
6
+ require 'pindo/client/unityhelper'
7
+
8
+ module Pindo
9
+ class Command
10
+ class Unity < Command
11
+ class Ipa < Unity
12
+
13
+ include Appselect
14
+
15
+ # Unity IPA包编译和上传命令
16
+ self.summary = '编译Unity工程生成iOS IPA并支持上传到测试平台'
17
+
18
+ # 详细说明
19
+ self.description = <<-DESC
20
+ 编译Unity工程生成iOS IPA并支持上传到测试平台。
21
+
22
+ 支持功能:
23
+
24
+ * 编译生成IPA
25
+
26
+ * 上传到测试平台
27
+
28
+ * 发送测试通知
29
+
30
+ 使用示例:
31
+
32
+ $ pindo unity ipa # 编译IPA
33
+
34
+ $ pindo unity ipa --upload # 编译并上传
35
+
36
+ $ pindo unity ipa --send # 编译上传并发送通知
37
+
38
+ $ pindo unity ipa --proj=myapp # 指定项目名称
39
+ DESC
40
+
41
+ # 命令参数
42
+ self.arguments = [
43
+ # 暂无参数
44
+ ]
45
+
46
+ # 命令选项
47
+ def self.options
48
+ [
49
+ ['--proj', '指定上传到测试平台的项目名称'],
50
+ ['--upload', '上传编译后的IPA到测试平台'],
51
+ ['--send', '上传成功后发送测试通知']
52
+ ].concat(super)
53
+ end
54
+
55
+
56
+ def initialize(argv)
57
+
58
+ @args_proj_name = argv.option('proj')
59
+ @args_upload_flag = argv.flag?('upload', false)
60
+ @args_send_flag = argv.flag?('send', false)
61
+ @args_deploy_flag = argv.flag?('deploy', false)
62
+
63
+ if @args_send_flag
64
+ @args_upload_flag = true
65
+ end
66
+
67
+ super
68
+ end
69
+
70
+ def export_ios_project(project_path)
71
+ begin
72
+ # 获取 UnityHelper 实例
73
+ unity_helper = Pindo::Client::UnityHelper.share_instance
74
+
75
+ # 准备额外的参数
76
+ additional_args = {
77
+ 'platform' => 'iOS'
78
+ }
79
+
80
+ # 执行Unity命令
81
+ result = unity_helper.execute_unity_command(
82
+ project_path,
83
+ 'GoodUnityBuild.BuildManager.BatchBuild',
84
+ additional_args
85
+ )
86
+
87
+ if result[:success]
88
+ puts "Unity iOS library build completed successfully"
89
+ puts "Unity version: #{result[:unity_version]}"
90
+ puts "Output:"
91
+ puts result[:stdout]
92
+ return true
93
+ else
94
+ puts "Unity iOS library build failed"
95
+ puts "Unity version: #{result[:unity_version]}"
96
+ puts "Error:"
97
+ puts result[:stderr]
98
+ raise "Build failed with status: #{result[:exit_status]}"
99
+ end
100
+
101
+ rescue => e
102
+ puts "Error during Unity build: #{e.message}"
103
+ puts e.backtrace
104
+ return false
105
+ end
106
+ end
107
+
108
+
109
+ def run
110
+
111
+ app_info_obj = nil
112
+ if @args_upload_flag
113
+ proj_name = @args_proj_name
114
+ app_info_obj = PgyerHelper.share_instace.prepare_upload(working_directory:Dir.pwd, proj_name:proj_name)
115
+ end
116
+ puts app_info_obj
117
+
118
+ mainapp_bundleid= nil
119
+ if @args_deploy_flag
120
+ mainapp_bundleid = get_selected_deploy_bundleid()
121
+ else
122
+ mainapp_bundleid = get_selected_dev_bundleid()
123
+ end
124
+
125
+ pindo_unity_project_dir = Dir.pwd
126
+ export_ios_project(pindo_unity_project_dir)
127
+
128
+
129
+ pindo_ios_project_dir = File.join(pindo_unity_project_dir, "Builds/iOS")
130
+ args_temp = []
131
+
132
+ args_temp << "--bundleid=#{mainapp_bundleid}"
133
+
134
+ if @args_upload_flag
135
+ args_temp << "--proj=#{app_info_obj["appName"]}"
136
+ args_temp << "--upload"
137
+ end
138
+ if @args_send_flag
139
+ args_temp << "--send"
140
+ end
141
+ Dir.chdir(pindo_ios_project_dir)
142
+
143
+ Pindo::Command::Ios::Debug::run(args_temp)
144
+
145
+
146
+ end
147
+
148
+
149
+ end
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,16 @@
1
+
2
+
3
+ require 'pindo/command/unity/ipa'
4
+ require 'pindo/command/unity/apk'
5
+
6
+
7
+ module Pindo
8
+ class Command
9
+
10
+ class Unity < Command
11
+ self.abstract_command = true
12
+ self.summary = 'Unity相关命令'
13
+ end
14
+
15
+ end
16
+ end
data/lib/pindo/command.rb CHANGED
@@ -47,7 +47,9 @@ module Pindo
47
47
  require 'pindo/command/upgrade'
48
48
  require 'pindo/command/ipa'
49
49
  require 'pindo/command/appstore'
50
-
50
+ require 'pindo/command/unity'
51
+ require 'pindo/command/ios'
52
+ require 'pindo/command/android'
51
53
 
52
54
  attr_accessor :args_help_flag
53
55
  alias_method :args_help_flag?, :args_help_flag
@@ -130,6 +130,10 @@ module Pindo
130
130
  puts
131
131
  puts "选择的bundle id是: #{menu_choice}"
132
132
  puts
133
+ if menu_choice.eql?("com.heroneverdie101.*")
134
+ menu_choice = "com.heroneverdie101"
135
+ end
136
+
133
137
  return menu_choice;
134
138
 
135
139
  end
@@ -160,7 +160,7 @@ module Pindo
160
160
  end
161
161
 
162
162
  if !provisioning_info.nil?
163
- config.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = provisioning_info["bundle_id"]
163
+ config.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = provisioning_info["bundle_id"] unless provisioning_info["bundle_id"].eql?("com.heroneverdie101.*")
164
164
  config.build_settings['PROVISIONING_PROFILE_SPECIFIER'] = provisioning_info['profile_name']
165
165
  config.build_settings['PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]'] = provisioning_info['profile_name']
166
166
  end
@@ -184,7 +184,7 @@ module Pindo
184
184
  config.build_settings['CODE_SIGN_IDENTITY[sdk=iphoneos*]'] = "Apple Distribution"
185
185
  end
186
186
  if !provisioning_info.nil?
187
- config.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = provisioning_info["bundle_id"]
187
+ config.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = provisioning_info["bundle_id"] unless provisioning_info["bundle_id"].eql?("com.heroneverdie101.*")
188
188
  config.build_settings['PROVISIONING_PROFILE_SPECIFIER'] = provisioning_info['profile_name']
189
189
  config.build_settings['PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]'] = provisioning_info['profile_name']
190
190
  end
@@ -168,24 +168,48 @@ module Pindo
168
168
  unless !ipa_file_upload.nil? && File.exist?(ipa_file_upload)
169
169
  return
170
170
  end
171
+
171
172
  args_ipa_file_dir = File.expand_path(File::dirname(ipa_file_upload))
172
173
  ipa_file_upload=File.join(args_ipa_file_dir, File.basename(ipa_file_upload))
173
174
  current_project_dir = Dir.pwd
174
- if description.nil? && File.exist?(File.join(current_project_dir, ".git"))
175
- description = git!(%W(-C #{current_project_dir} show -s --format=commit::%H)).strip
175
+ puts "+++++1 current_project_dir = #{current_project_dir}"
176
+
177
+ if description.nil? && is_git_directory?(local_repo_dir: current_project_dir)
178
+ puts "+++++2 current_project_dir = #{current_project_dir}"
179
+
180
+ current_git_root_path = git_root_directory(local_repo_dir: current_project_dir)
181
+ puts "+++++3 current_git_root_path = #{current_git_root_path}"
182
+
176
183
  xcodeproj_file_name = Dir.glob(File.join(current_project_dir, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
177
184
  if !xcodeproj_file_name.nil? && !xcodeproj_file_name.empty? && File.exist?(xcodeproj_file_name)
185
+ puts "+++++4 xcodeproj_file_name = #{xcodeproj_file_name}"
186
+
178
187
  project_obj = Xcodeproj::Project.open(xcodeproj_file_name)
179
188
  main_target = project_obj.targets.select { |target| target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application]) }.first
180
189
  provisioning_profile_name = main_target.build_configurations.first.build_settings['PROVISIONING_PROFILE_SPECIFIER'].downcase.split(" ")
181
190
  if provisioning_profile_name.include?("adhoc")
182
191
  description = git!(%W(-C #{current_project_dir} show -s --format=commit::%H)).strip
183
192
  elsif provisioning_profile_name.include?("development")
184
- if File.exist?(File.join(current_project_dir, ".release_info"))
185
- description = File.read(File.join(current_project_dir, ".release_info"))
193
+ cliff_toml_path = File.join(current_git_root_path, "cliff.toml")
194
+ if File.exist?(cliff_toml_path)
195
+ begin
196
+ `git-cliff --version`
197
+ git_cliff_installed = $?.success?
198
+ if git_cliff_installed
199
+ temp_dir = Dir.pwd
200
+ Dir.chdir(current_git_root_path)
201
+ description = `git-cliff -c #{cliff_toml_path} --latest -o -`.strip
202
+ description = " " if description.empty?
203
+ Dir.chdir(temp_dir)
204
+ else
205
+ description = " "
206
+ end
207
+ rescue StandardError => e
208
+ description = " "
209
+ end
186
210
  else
187
- description = git!(%W(-C #{current_project_dir} show -s --format=%h::%s)).strip
188
- end
211
+ description = " "
212
+ end
189
213
  elsif provisioning_profile_name.include?("appstore")
190
214
  description = "提交包重签名"
191
215
  end
@@ -215,7 +239,9 @@ module Pindo
215
239
  Dir.chdir current_project_dir
216
240
  end
217
241
 
218
-
242
+ if description.nil? || description.length <= 0
243
+ description = " "
244
+ end
219
245
  puts
220
246
  puts "上传项目: #{app_info_obj["appName"]}"
221
247
  print "上传备注: "
@@ -277,6 +303,20 @@ module Pindo
277
303
  wechat_msg_url
278
304
  end
279
305
 
306
+ def send_apptest_msg(appId:nil, appVersionId:nil, chatEnv: nil, receiveType:nil)
307
+
308
+ Funlog.instance.fancyinfo_start("正在发送飞书消息...")
309
+ result = @pgyer_client.post_message(appId:appId, appVersionId:appVersionId, chatEnv: chatEnv, receiveType:receiveType)
310
+
311
+ if !result.nil? && result["code"] == 200 && result["data"] == "success"
312
+ Funlog.instance.fancyinfo_success("测试信息已经发送飞书!")
313
+ return true
314
+ else
315
+ Funlog.instance.fancyinfo_error("未发送飞书测试信息!")
316
+ return false
317
+ end
318
+
319
+ end
280
320
 
281
321
  def send_apptest_wechat_msg(msg_data:nil, wechat_url:nil)
282
322
 
@@ -124,7 +124,7 @@ module Pindo
124
124
  config.build_settings['CODE_SIGN_IDENTITY'] = "iPhone Developer"
125
125
  config.build_settings['DEVELOPMENT_TEAM'] = "9WX2E4VC26"
126
126
  config.build_settings['PROVISIONING_PROFILE'] = ""
127
- config.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = bundle_id
127
+ config.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = bundle_id unless bundle_id.eql?("com.heroneverdie101.*")
128
128
  config.build_settings['PROVISIONING_PROFILE_SPECIFIER'] = "match Development " + bundle_id
129
129
  # config.build_settings['TARGETED_DEVICE_FAMILY'] = "1,2"
130
130
  if is_extention
@@ -61,6 +61,7 @@ module Pindo
61
61
  attr_accessor :config_json
62
62
  attr_accessor :additional_args
63
63
 
64
+
64
65
  def self.options
65
66
  [
66
67
  ['--u=', 'input apple id'],
@@ -200,6 +201,9 @@ module Pindo
200
201
 
201
202
  if @config_json['app_info'] && @config_json['app_info']['app_identifier']
202
203
  @deploy_identifier = @config_json['app_info']['app_identifier']
204
+ if @deploy_identifier.eql?("com.heroneverdie101")
205
+ @deploy_identifier = "com.heroneverdie101.*"
206
+ end
203
207
  end
204
208
 
205
209
  if @config_json['app_info'] && @config_json['app_info']['app_identifier_pushcontent']
data/lib/pindo/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Pindo
2
2
 
3
- VERSION = "4.8.7"
3
+ VERSION = "4.8.9"
4
4
 
5
5
  class VersionCheck
6
6
 
data/lib/pindo.rb CHANGED
@@ -13,6 +13,7 @@ module Pindo
13
13
  require 'pindo/command'
14
14
  require 'pindo/version'
15
15
 
16
+
16
17
  class PindoApp
17
18
 
18
19
  def run(argv)
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pindo
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.8.7
4
+ version: 4.8.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - wade
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-12-12 00:00:00.000000000 Z
10
+ date: 2025-02-19 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: claide
@@ -241,7 +240,10 @@ files:
241
240
  - lib/pindo/client/pgyerclient.rb
242
241
  - lib/pindo/client/pgyeruploadclient.rb
243
242
  - lib/pindo/client/tgateclient.rb
243
+ - lib/pindo/client/unityhelper.rb
244
244
  - lib/pindo/command.rb
245
+ - lib/pindo/command/android.rb
246
+ - lib/pindo/command/android/debug.rb
245
247
  - lib/pindo/command/appstore.rb
246
248
  - lib/pindo/command/appstore/iap.rb
247
249
  - lib/pindo/command/appstore/itcapp.rb
@@ -288,6 +290,19 @@ files:
288
290
  - lib/pindo/command/env/quarkenv.rb
289
291
  - lib/pindo/command/env/swarkenv.rb
290
292
  - lib/pindo/command/env/workhard.rb
293
+ - lib/pindo/command/gplay.rb
294
+ - lib/pindo/command/gplay/iap.rb
295
+ - lib/pindo/command/gplay/itcapp.rb
296
+ - lib/pindo/command/gplay/metadata.rb
297
+ - lib/pindo/command/gplay/screenshots.rb
298
+ - lib/pindo/command/gplay/upload.rb
299
+ - lib/pindo/command/ios.rb
300
+ - lib/pindo/command/ios/adhoc.rb
301
+ - lib/pindo/command/ios/applovin.rb
302
+ - lib/pindo/command/ios/autoresign.rb
303
+ - lib/pindo/command/ios/build.rb
304
+ - lib/pindo/command/ios/cert.rb
305
+ - lib/pindo/command/ios/debug.rb
291
306
  - lib/pindo/command/ipa.rb
292
307
  - lib/pindo/command/ipa/autoresign.rb
293
308
  - lib/pindo/command/ipa/import.rb
@@ -310,6 +325,9 @@ files:
310
325
  - lib/pindo/command/repo/login.rb
311
326
  - lib/pindo/command/repo/search.rb
312
327
  - lib/pindo/command/setup.rb
328
+ - lib/pindo/command/unity.rb
329
+ - lib/pindo/command/unity/apk.rb
330
+ - lib/pindo/command/unity/ipa.rb
313
331
  - lib/pindo/command/upgrade.rb
314
332
  - lib/pindo/command/utils.rb
315
333
  - lib/pindo/command/utils/boss.rb
@@ -350,7 +368,6 @@ homepage: https://gitee.com/test/pindo.git
350
368
  licenses:
351
369
  - MIT
352
370
  metadata: {}
353
- post_install_message:
354
371
  rdoc_options: []
355
372
  require_paths:
356
373
  - lib
@@ -365,8 +382,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
365
382
  - !ruby/object:Gem::Version
366
383
  version: '0'
367
384
  requirements: []
368
- rubygems_version: 3.5.23
369
- signing_key:
385
+ rubygems_version: 3.6.2
370
386
  specification_version: 3
371
387
  summary: easy work
372
388
  test_files: []