pindo 4.7.0 → 4.7.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|