pindo 4.7.0 → 4.7.1
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.
- checksums.yaml +4 -4
- data/lib/pindo/base/aeshelper.rb +31 -2
- data/lib/pindo/base/githelper.rb +7 -8
- data/lib/pindo/client/aws3sclient.rb +1 -1
- data/lib/pindo/client/bossconfigclient.rb +3 -3
- data/lib/pindo/client/pgyerclient.rb +97 -102
- data/lib/pindo/command/deploy/build.rb +1 -1
- data/lib/pindo/command/deploy/cert.rb +21 -17
- data/lib/pindo/command/dev/autobuild.rb +17 -2
- data/lib/pindo/command/dev/autoresign.rb +4 -0
- data/lib/pindo/command/dev/build.rb +94 -0
- data/lib/pindo/command/dev.rb +1 -0
- data/lib/pindo/command/ipa/autoresign.rb +4 -0
- data/lib/pindo/command/ipa/import.rb +1 -1
- data/lib/pindo/command/ipa/output.rb +5 -0
- data/lib/pindo/command/lib/update.rb +8 -8
- data/lib/pindo/config/pindoconfig.rb +27 -0
- data/lib/pindo/module/appselect.rb +9 -8
- data/lib/pindo/module/cert/certhelper.rb +32 -21
- data/lib/pindo/module/cert/keychainhelper.rb +25 -13
- data/lib/pindo/module/cert/provisioninghelper.rb +1 -1
- data/lib/pindo/module/cert/xcodecerthelper.rb +61 -36
- data/lib/pindo/module/pgyer/pgyerhelper.rb +18 -19
- data/lib/pindo/module/xcode/xcodereshandler.rb +1 -1
- data/lib/pindo/module/xcode/xcodereshelper.rb +2 -3
- data/lib/pindo/options/deployoptions.rb +1 -2
- data/lib/pindo/version.rb +1 -1
- metadata +3 -2
@@ -69,12 +69,17 @@ module Pindo
|
|
69
69
|
|
70
70
|
new_project_obj.targets.each do |target|
|
71
71
|
|
72
|
+
if target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:framework]) || target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:dynamic_library]) ||
|
73
|
+
target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:static_library]) || target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:bundle])
|
74
|
+
next
|
75
|
+
end
|
72
76
|
provisioning_info = nil
|
73
77
|
|
74
78
|
if target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application])
|
75
79
|
bundle_id_map_key = target_map["MainTarget"]
|
76
80
|
provisioning_info = provisioning_info_array.select { |s| s["type"].to_s.eql?(bundle_id_map_key.to_s) }.first
|
77
|
-
|
81
|
+
else
|
82
|
+
|
78
83
|
target_map.each do |k, v|
|
79
84
|
if target.name.to_s.end_with?(k)
|
80
85
|
bundle_id_map_key = v.to_s
|
@@ -83,29 +88,34 @@ module Pindo
|
|
83
88
|
end
|
84
89
|
end
|
85
90
|
|
86
|
-
target.
|
87
|
-
target_atts_obj[target.uuid] = target_atts_obj[target.uuid] || {}
|
88
|
-
target_atts_obj[target.uuid]['DevelopmentTeam'] = team_id_vaule
|
89
|
-
target_atts_obj[target.uuid]['ProvisioningStyle'] = "Manual"
|
90
|
-
config.build_settings['DEVELOPMENT_TEAM'] = team_id_vaule
|
91
|
-
config.build_settings['DEVELOPMENT_TEAM[sdk=iphoneos*]'] = team_id_vaule
|
92
|
-
config.build_settings['CODE_SIGN_STYLE'] = "Manual"
|
93
|
-
|
94
|
-
config.build_settings['CODE_SIGN_IDENTITY'] = "Apple Distribution"
|
95
|
-
config.build_settings['CODE_SIGN_IDENTITY[sdk=iphoneos*]'] = "Apple Distribution"
|
96
|
-
|
97
|
-
if cert_type == "development"
|
98
|
-
config.build_settings['CODE_SIGN_IDENTITY'] = "Apple Development"
|
99
|
-
config.build_settings['CODE_SIGN_IDENTITY[sdk=iphoneos*]'] = "Apple Development"
|
100
|
-
end
|
91
|
+
# puts "=====1 target name: #{target.name.to_s} bundle_id_map_key: #{bundle_id_map_key} provisioning_info: #{provisioning_info}"
|
101
92
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
93
|
+
if !provisioning_info.nil?
|
94
|
+
target.build_configurations.each do |config|
|
95
|
+
target_atts_obj[target.uuid] = target_atts_obj[target.uuid] || {}
|
96
|
+
target_atts_obj[target.uuid]['DevelopmentTeam'] = team_id_vaule
|
97
|
+
target_atts_obj[target.uuid]['ProvisioningStyle'] = "Manual"
|
98
|
+
config.build_settings['DEVELOPMENT_TEAM'] = team_id_vaule
|
99
|
+
config.build_settings['DEVELOPMENT_TEAM[sdk=iphoneos*]'] = team_id_vaule
|
100
|
+
config.build_settings['CODE_SIGN_STYLE'] = "Manual"
|
101
|
+
|
102
|
+
config.build_settings['CODE_SIGN_IDENTITY'] = "Apple Distribution"
|
103
|
+
config.build_settings['CODE_SIGN_IDENTITY[sdk=iphoneos*]'] = "Apple Distribution"
|
104
|
+
|
105
|
+
if cert_type == "development"
|
106
|
+
config.build_settings['CODE_SIGN_IDENTITY'] = "Apple Development"
|
107
|
+
config.build_settings['CODE_SIGN_IDENTITY[sdk=iphoneos*]'] = "Apple Development"
|
108
|
+
end
|
109
|
+
|
110
|
+
if !provisioning_info.nil?
|
111
|
+
config.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = provisioning_info["bundle_id"]
|
112
|
+
config.build_settings['PROVISIONING_PROFILE_SPECIFIER'] = provisioning_info['profile_name']
|
113
|
+
config.build_settings['PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]'] = provisioning_info['profile_name']
|
114
|
+
|
115
|
+
end
|
107
116
|
end
|
108
117
|
end
|
118
|
+
|
109
119
|
|
110
120
|
end
|
111
121
|
new_project_obj.save
|
@@ -120,6 +130,11 @@ module Pindo
|
|
120
130
|
|
121
131
|
project_obj.targets.each do |target|
|
122
132
|
|
133
|
+
if target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:framework]) || target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:dynamic_library]) ||
|
134
|
+
target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:static_library]) || target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:bundle])
|
135
|
+
next
|
136
|
+
end
|
137
|
+
|
123
138
|
temp_entitlements_file = target.build_configurations.first.build_settings['CODE_SIGN_ENTITLEMENTS']
|
124
139
|
if !temp_entitlements_file.nil? && !temp_entitlements_file.empty?
|
125
140
|
entitlements_plist_path = File.join(new_project_dir, temp_entitlements_file)
|
@@ -127,27 +142,37 @@ module Pindo
|
|
127
142
|
if !File.exist?(entitlements_plist_path)
|
128
143
|
raise Informative, "Target: #{target.name.to_s} 找不到文件 #{entitlements_plist_path}"
|
129
144
|
end
|
130
|
-
end
|
131
145
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
146
|
+
if !group_id.nil?
|
147
|
+
modify_entitlements_plist(entitlements_plist_path:entitlements_plist_path, group_id:group_id)
|
148
|
+
end
|
149
|
+
|
150
|
+
if target.product_type.to_s.eql?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application]) then
|
151
|
+
add_swark_entitlement(entitlements_plist_path:entitlements_plist_path, bundle_id_dict:provisioning_info_array)
|
152
|
+
if !icloud_id.nil?
|
153
|
+
modify_entitlements_plist(entitlements_plist_path:entitlements_plist_path, icloud_id:icloud_id)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
136
157
|
end
|
137
158
|
|
159
|
+
temp_info = target.build_configurations.first.build_settings['INFOPLIST_FILE']
|
160
|
+
if !temp_info.nil? && !temp_info.empty?
|
161
|
+
info_plist_path = File.join(new_project_dir, temp_info)
|
162
|
+
if !File.exist?(info_plist_path)
|
163
|
+
raise Informative, "Missing Target #{target.name.to_s} Info.plist!!! #{info_plist_path} Modify Info.plist Error !!!"
|
164
|
+
end
|
138
165
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
modify_info_plist_icloud(plist_file_name:info_plist_path, icloud_id:nil)
|
166
|
+
if target.product_type.to_s.eql?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application]) then
|
167
|
+
if !icloud_id.nil?
|
168
|
+
modify_info_plist_icloud(plist_file_name:info_plist_path, icloud_id:icloud_id)
|
169
|
+
else
|
170
|
+
modify_info_plist_icloud(plist_file_name:info_plist_path, icloud_id:nil)
|
171
|
+
end
|
146
172
|
end
|
173
|
+
|
147
174
|
end
|
148
|
-
|
149
|
-
modify_entitlements_plist(entitlements_plist_path:entitlements_plist_path, group_id:group_id)
|
150
|
-
end
|
175
|
+
|
151
176
|
end
|
152
177
|
|
153
178
|
end
|
@@ -36,7 +36,7 @@ module Pindo
|
|
36
36
|
def login
|
37
37
|
@pgyer_client = PgyerClient.new
|
38
38
|
if @force_login || !@has_login
|
39
|
-
@has_login = @pgyer_client.do_login(force_login:@force_login)
|
39
|
+
@has_login = @pgyer_client.do_login(force_login:@force_login)
|
40
40
|
@force_login = false
|
41
41
|
end
|
42
42
|
return @has_login
|
@@ -50,7 +50,7 @@ module Pindo
|
|
50
50
|
if !proj_name.nil?
|
51
51
|
app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:upload_proj_name)
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
if !app_info_obj.nil?
|
55
55
|
return app_info_obj
|
56
56
|
end
|
@@ -58,35 +58,35 @@ module Pindo
|
|
58
58
|
proj_name_array = []
|
59
59
|
if File.exist?(File.join(working_directory, "config.json"))
|
60
60
|
config_json = JSON.parse(File.read(File.join(working_directory, "config.json")))
|
61
|
-
proj_name_array << config_json["project_info"]["project_name"]
|
61
|
+
proj_name_array << config_json["project_info"]["project_name"]
|
62
62
|
end
|
63
63
|
|
64
64
|
xcodeproj_file_name = Dir.glob(File.join(Dir.pwd, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
|
65
65
|
upload_proj_name = File.basename(xcodeproj_file_name, ".xcodeproj") if xcodeproj_file_name
|
66
66
|
if !upload_proj_name.nil? && !upload_proj_name.empty?
|
67
|
-
proj_name_array << upload_proj_name
|
67
|
+
proj_name_array << upload_proj_name
|
68
68
|
end
|
69
|
-
|
69
|
+
|
70
70
|
puts
|
71
71
|
dir_base_name = File.basename(working_directory)
|
72
72
|
unless ["Desktop", "Documents", "Downloads"].include?(dir_base_name)
|
73
73
|
proj_name_array << dir_base_name
|
74
74
|
end
|
75
|
-
|
75
|
+
|
76
76
|
proj_name_array << "自定义输入Pyger上的App代号"
|
77
77
|
|
78
78
|
if proj_name_array.size > 1
|
79
79
|
cli = HighLine.new
|
80
80
|
upload_proj_name = cli.choose do |menu|
|
81
|
-
menu.prompt = "
|
81
|
+
menu.prompt = "请选择Pgyer上的App代号:"
|
82
82
|
menu.choices(*proj_name_array)
|
83
83
|
end
|
84
84
|
if upload_proj_name.include?("自定义输入")
|
85
|
-
upload_proj_name = ask('
|
85
|
+
upload_proj_name = ask('请输入Pyger上的App代号(大小写空格忽略):') || nil
|
86
86
|
upload_proj_name = upload_proj_name.strip
|
87
87
|
end
|
88
88
|
else
|
89
|
-
upload_proj_name = ask('
|
89
|
+
upload_proj_name = ask('请输入Pyger上的App代号(大小写空格忽略):') || nil
|
90
90
|
upload_proj_name = upload_proj_name.strip
|
91
91
|
end
|
92
92
|
|
@@ -94,14 +94,16 @@ module Pindo
|
|
94
94
|
app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:upload_proj_name)
|
95
95
|
|
96
96
|
if app_info_obj.nil?
|
97
|
-
upload_proj_name = ask('
|
97
|
+
upload_proj_name = ask('没有找到结果,请重新输入Pyger上的App代号(大小写空格忽略):') || nil
|
98
98
|
upload_proj_name = upload_proj_name.strip
|
99
99
|
app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:upload_proj_name)
|
100
100
|
end
|
101
101
|
|
102
102
|
if app_info_obj.nil?
|
103
|
-
raise Informative, "#{upload_proj_name}
|
103
|
+
raise Informative, "#{upload_proj_name} 名称错误, 请输入正确的App代号,Pgyer网站没有该App!!!"
|
104
104
|
end
|
105
|
+
else
|
106
|
+
raise Informative, "请先登录Pgyer网站"
|
105
107
|
end
|
106
108
|
app_info_obj
|
107
109
|
end
|
@@ -112,13 +114,10 @@ module Pindo
|
|
112
114
|
ipa_file_upload=File.join(args_ipa_file_dir, File.basename(ipa_file_upload))
|
113
115
|
|
114
116
|
current_project_dir = Dir.pwd
|
115
|
-
puts "current_project_dir : #{current_project_dir}"
|
116
|
-
puts description
|
117
|
-
puts File.exist?(File.join(current_project_dir, ".git"))
|
118
117
|
if description.nil? && File.exist?(File.join(current_project_dir, ".git"))
|
119
118
|
commit_id_info = git_latest_commit_id(local_repo_dir:current_project_dir)
|
120
119
|
if commit_id_info
|
121
|
-
description = "commit " + commit_id_info
|
120
|
+
description = "commit " + commit_id_info
|
122
121
|
end
|
123
122
|
end
|
124
123
|
|
@@ -264,7 +263,7 @@ module Pindo
|
|
264
263
|
req.headers['Content-Type'] = 'application/json'
|
265
264
|
req.body = body_data.to_json
|
266
265
|
end
|
267
|
-
|
266
|
+
|
268
267
|
|
269
268
|
body_data = {
|
270
269
|
msgtype:"text",
|
@@ -387,7 +386,7 @@ module Pindo
|
|
387
386
|
Funlog.instance.fancyinfo_error("拉取app信息列表失败!")
|
388
387
|
raise Informative, "Pgyer网络数据异常!!!"
|
389
388
|
end
|
390
|
-
|
389
|
+
|
391
390
|
|
392
391
|
return app_info_list
|
393
392
|
end
|
@@ -424,7 +423,7 @@ module Pindo
|
|
424
423
|
app_incId_index = ask('请选择上面的Build号:')
|
425
424
|
|
426
425
|
end
|
427
|
-
|
426
|
+
|
428
427
|
Funlog.instance.fancyinfo_success("拉取app上传记录完成!")
|
429
428
|
|
430
429
|
version_item_obj = nil
|
@@ -508,7 +507,7 @@ module Pindo
|
|
508
507
|
return true
|
509
508
|
else
|
510
509
|
Funlog.instance.fancyinfo_error("重签名失败!")
|
511
|
-
return false
|
510
|
+
return false
|
512
511
|
end
|
513
512
|
|
514
513
|
end
|
@@ -109,7 +109,7 @@ module Pindo
|
|
109
109
|
def get_xcodeproj_imessage_icon_path
|
110
110
|
icon_path = nil
|
111
111
|
select_target = @project_obj.targets.select { |target| target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:messages_extension]) }.first
|
112
|
-
if select_target.nil?
|
112
|
+
if !select_target.nil?
|
113
113
|
file_ref = select_target.resources_build_phase.files_references.select { |file| file.display_name.include?("Assets.xcassets") }.first
|
114
114
|
icon_path = File.join(file_ref.real_path,"iMessage App Icon.stickersiconset")
|
115
115
|
end
|
@@ -63,7 +63,7 @@ module Pindo
|
|
63
63
|
'sips',
|
64
64
|
'--matchTo', '/System/Library/ColorSync/Profiles/sRGB Profile.icc',
|
65
65
|
'-z', width.to_s, height.to_s,
|
66
|
-
|
66
|
+
icon_ori_name,
|
67
67
|
'--out', File.join(new_icon_dir, image_name)
|
68
68
|
]
|
69
69
|
Executable.capture_command('sips', command, capture: :out)
|
@@ -83,7 +83,6 @@ module Pindo
|
|
83
83
|
create_icon(icon_name: icon_name, new_icon_dir: new_icon_dir, xcode_icon_json: XcodoeResConst.xcode_ios_icon_json)
|
84
84
|
icon_dir = File.dirname(icon_name)
|
85
85
|
imessage_icon = File.join(icon_dir, "icon1024_768.png")
|
86
|
-
|
87
86
|
new_imessage_icon_dir = File.join(new_icon_dir, "imessage")
|
88
87
|
|
89
88
|
if File.exist?(imessage_icon)
|
@@ -92,7 +91,7 @@ module Pindo
|
|
92
91
|
rescue => e
|
93
92
|
puts e
|
94
93
|
end
|
95
|
-
create_imessage_icon(icon_name:
|
94
|
+
create_imessage_icon(icon_name: icon_name, image_icon_name:imessage_icon, new_icon_dir: new_imessage_icon_dir, xcode_icon_json: XcodoeResConst.xcode_ios_imessage_icon_json)
|
96
95
|
end
|
97
96
|
end
|
98
97
|
|
@@ -105,7 +105,6 @@ module Pindo
|
|
105
105
|
|
106
106
|
def validate!
|
107
107
|
super
|
108
|
-
|
109
108
|
if !@args_appconfig.empty? && File::file?(@args_appconfig)
|
110
109
|
@args_appconfig_dir=File::expand_path(File::dirname(@args_appconfig))
|
111
110
|
@args_appconfig_fullname=File::join(@args_appconfig_dir, File::basename(@args_appconfig))
|
@@ -274,7 +273,7 @@ module Pindo
|
|
274
273
|
|
275
274
|
unless @args_bundle_id.nil?
|
276
275
|
@bundle_id = @args_bundle_id.nil? ? @deploy_identifier : @args_bundle_id
|
277
|
-
@group_id = @deploy_group_id.nil? ? @
|
276
|
+
@group_id = @deploy_group_id.nil? ? @deploy_group_id : ("group." + @bundle_id)
|
278
277
|
@icloud_id = @deploy_icloud_id.nil? ? @deploy_icloud_id : ("iCloud." + @bundle_id)
|
279
278
|
@bundle_id_pushcontent = @deploy_identifier_pushcontent.nil? ? @deploy_identifier_pushcontent : (@bundle_id+".content")
|
280
279
|
@bundle_id_pushservice = @deploy_identifier_pushservice.nil? ? @deploy_identifier_pushservice : (@bundle_id+".service")
|
data/lib/pindo/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pindo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.7.
|
4
|
+
version: 4.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- wade
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: claide
|
@@ -280,6 +280,7 @@ files:
|
|
280
280
|
- lib/pindo/command/dev.rb
|
281
281
|
- lib/pindo/command/dev/autobuild.rb
|
282
282
|
- lib/pindo/command/dev/autoresign.rb
|
283
|
+
- lib/pindo/command/dev/build.rb
|
283
284
|
- lib/pindo/command/dev/confusecode.rb
|
284
285
|
- lib/pindo/command/dev/confuseproj.rb
|
285
286
|
- lib/pindo/command/dev/createbuild.rb
|