pindo 4.8.2 → 4.8.4

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.
@@ -8,77 +8,18 @@ module Pindo
8
8
  class XcodeResHandler
9
9
 
10
10
 
11
- def self.create_icon(icon_name:nil, new_icon_dir:nil, xcode_icon_json:nil)
12
- xcode_icon_json["images"].each do |image_data|
13
- width,height = image_data["size"].split("x")
14
- image_name = image_data["filename"]
15
- iNum = image_name.split("@").last.chomp(".png").chomp("x").to_f
16
- width = width.to_f * iNum
17
- height = height.to_f * iNum
18
-
19
- width = width.to_i
20
- height = height.to_i
21
-
22
- command = [
23
- 'sips',
24
- '--matchTo', '/System/Library/ColorSync/Profiles/sRGB Profile.icc',
25
- '-z', width.to_s, height.to_s,
26
- icon_name,
27
- '--out', File.join(new_icon_dir, image_name)
28
- ]
29
- Executable.capture_command('sips', command, capture: :out)
30
-
31
- # if !File.exist?(File.join(new_icon_dir, image_name))
32
- # raise Informative, "生成icon失败!"
33
- # end
34
- # system("sips --matchTo '/System/Library/ColorSync/Profiles/sRGB Profile.icc' -z #{width} #{height} #{icon_name} --out #{new_icon_dir}/#{image_name}")
35
- end
36
- File.open(File.join(new_icon_dir, "Contents.json"), "w") do |f|
37
- f.write(JSON.pretty_generate(xcode_icon_json))
38
- end
39
- end
40
-
41
-
42
- def self.create_imessage_icon(icon_name:nil, image_icon_name:nil, new_icon_dir:nil, xcode_icon_json:nil)
43
- xcode_icon_json["images"].each do |image_data|
44
-
45
- height, width = image_data["size"].split("x")
46
- image_name = image_data["filename"]
47
- iNum = image_name.split("@").last.chomp(".png").chomp("x").to_f
48
- width = width.to_f * iNum
49
- height = height.to_f * iNum
50
- width = width.to_i
51
- height = height.to_i
52
-
53
- icon_ori_name = image_icon_name
54
- if width.to_s.eql?(height.to_s)
55
- icon_ori_name = icon_name
56
- end
57
-
58
- command = [
59
- 'sips',
60
- '--matchTo', '/System/Library/ColorSync/Profiles/sRGB Profile.icc',
61
- '-z', width.to_s, height.to_s,
62
- icon_name,
63
- '--out', File.join(new_icon_dir, image_name)
64
- ]
65
- Executable.capture_command('sips', command, capture: :out)
66
- end
67
-
68
- File.open(File.join(new_icon_dir, "Contents.json"), "w") do |f|
69
- f.write(JSON.pretty_generate(xcode_icon_json))
70
- end
71
- end
72
-
73
11
  def initialize(proj_fullname:nil)
74
12
  @proj_fullname = proj_fullname
75
13
  @project_obj = Xcodeproj::Project.open(proj_fullname)
76
14
  end
77
15
 
78
- def get_xcodeproj_icon_path
16
+ def get_xcodeproj_icon_path()
79
17
 
80
18
  icon_path = nil
81
19
  select_target = @project_obj.targets.select { |target| target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application]) }.first
20
+
21
+ project_dir = @project_obj.project_dir
22
+
82
23
  if !select_target.nil?
83
24
  file_refs = select_target.resources_build_phase.files_references.select { |file| file.display_name.include?("Assets.xcassets") } || []
84
25
  file_refs.each do |file_ref|
@@ -90,6 +31,14 @@ module Pindo
90
31
  end
91
32
  end
92
33
  end
34
+ if icon_path.nil? || icon_path.empty? || !File.exist?(icon_path)
35
+ icon_path_array = Dir.glob(File.join(project_dir, "**", "AppIcon.appiconset"))
36
+ if icon_path_array.size > 1
37
+ icon_path = icon_path_array.select{ |filename| File.directory?(filename) && filename.include?("Assets.xcassets/AppIcon.appiconset")}
38
+ elsif icon_path_array.size == 1
39
+ icon_path = icon_path_array.first
40
+ end
41
+ end
93
42
 
94
43
  if icon_path.nil? || icon_path.empty? || !File.exist?(icon_path)
95
44
  raise Informative, "没有找到Xcode icon 目录"
@@ -99,7 +48,7 @@ module Pindo
99
48
  end
100
49
 
101
50
  def install_icon_res(new_icon_dir:nil)
102
- icon_path = get_xcodeproj_icon_path
51
+ icon_path = get_xcodeproj_icon_path()
103
52
  begin
104
53
  FileUtils.rm_rf(icon_path)
105
54
  FileUtils.mkdir_p(icon_path)
@@ -112,7 +61,7 @@ module Pindo
112
61
  end
113
62
 
114
63
  def validate_icon_res()
115
- icon_path = get_xcodeproj_icon_path
64
+ icon_path = get_xcodeproj_icon_path()
116
65
  xcode_ios_icon_json = XcodoeResConst.xcode_ios_icon_json
117
66
  xcode_ios_icon_json["images"].each do |image_data|
118
67
  image_name = image_data["filename"]
@@ -125,6 +74,7 @@ module Pindo
125
74
  def get_xcodeproj_imessage_icon_path
126
75
  icon_path = nil
127
76
  select_target = @project_obj.targets.select { |target| target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:messages_extension]) }.first
77
+ project_dir = @project_obj.project_dir
128
78
  if !select_target.nil?
129
79
  file_refs = select_target.resources_build_phase.files_references.select { |file| file.display_name.include?("Assets.xcassets") } || []
130
80
  file_refs.each do |file_ref|
@@ -136,6 +86,15 @@ module Pindo
136
86
  end
137
87
  end
138
88
 
89
+ if icon_path.nil? || icon_path.empty? || !File.exist?(icon_path)
90
+ icon_path_array = Dir.glob(File.join(project_dir, "**", "iMessage App Icon.stickersiconset"))
91
+ if icon_path_array.size > 1
92
+ icon_path = icon_path_array.select{ |filename| File.directory?(filename) && filename.include?("Assets.xcassets/iMessage App Icon.stickersiconset")}
93
+ elsif icon_path_array.size == 1
94
+ icon_path = icon_path_array.first
95
+ end
96
+ end
97
+
139
98
  if icon_path.nil? || icon_path.empty? || !File.exist?(icon_path)
140
99
  raise Informative, "没有找到Xcode iMessage icon 目录"
141
100
  end
@@ -173,50 +132,76 @@ module Pindo
173
132
  def get_xcodeproj_launchimg_path
174
133
 
175
134
  launchimg_path = nil
135
+ assets_path = nil
176
136
  select_target = @project_obj.targets.select { |target| target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application]) }.first
177
- file_ref = select_target.resources_build_phase.files_references.select { |file| file.display_name.include?("Assets.xcassets") }.first
137
+ project_dir = @project_obj.project_dir
138
+ if !select_target.nil?
139
+ assets_objs = select_target.resources_build_phase.files_references.select { |file| file.display_name.include?("Assets.xcassets") } || []
140
+ if assets_objs.size > 0
141
+ assets_path = assets_objs.first.real_path
142
+ if File.exist?(assets_path) && File.exist?(File.join(assets_path, "LaunchImage.imageset"))
143
+ launchimg_path = File.join(assets_path, "LaunchImage.imageset")
144
+ elsif File.exist?(assets_path) && File.exist?(File.join(assets_path, "LaunchImage.launchimage"))
145
+ launchimg_path = File.join(assets_path, "LaunchImage.launchimage")
146
+ end
147
+ end
148
+ end
178
149
 
179
- assets_path = file_ref.real_path
180
- if File.exist?(File.join(assets_path, "LaunchImage.imageset"))
181
- launchimg_path = File.join(assets_path, "LaunchImage.imageset")
182
- else
183
- launchimg_path = File.join(assets_path, "LaunchImage.launchimage")
150
+ if launchimg_path.nil? || launchimg_path.empty? || !File.exist?(launchimg_path)
151
+ launchimg_path_array = Dir.glob(File.join(project_dir, "**", "LaunchImage.imageset"))
152
+ if launchimg_path_array.size > 1
153
+ launchimg_path = launchimg_path_array.select{ |filename| File.directory?(filename) && filename.include?("Assets.xcassets/LaunchImage.imageset")}
154
+ elsif launchimg_path_array.size == 1
155
+ launchimg_path = launchimg_path_array.first
156
+ end
157
+ end
158
+
159
+ if launchimg_path.nil? || launchimg_path.empty? || !File.exist?(launchimg_path)
160
+ launchimg_path_array = Dir.glob(File.join(project_dir, "**", "LaunchImage.launchimage"))
161
+ if launchimg_path_array.size > 1
162
+ launchimg_path = launchimg_path_array.select{ |filename| File.directory?(filename) && filename.include?("Assets.xcassets/LaunchImage.launchimage")}
163
+ elsif launchimg_path_array.size == 1
164
+ launchimg_path = launchimg_path_array.first
165
+ end
184
166
  end
185
167
 
186
168
  return launchimg_path
187
169
  end
188
170
 
189
- def install_launchimg(launchimg_file:nil)
190
-
171
+ def install_launchimg(launchimg_pub_path:nil)
191
172
 
192
173
  xcodeproj_launchimg_path = get_xcodeproj_launchimg_path
193
- if xcodeproj_launchimg_path.nil? || !File.exist?(xcodeproj_launchimg_path)
194
- return
195
- end
196
-
197
- project_origin_launchimg = Dir.glob(File.join(xcodeproj_launchimg_path, "/*.png")).max_by {|f| File.mtime(f)}
174
+ pub_launchimg_files = Dir.glob(File.join(launchimg_pub_path, "*.{png,jpg}"))
198
175
 
199
- if project_origin_launchimg.nil? || !File.exist?(project_origin_launchimg)
176
+ if xcodeproj_launchimg_path.nil? || !File.exist?(xcodeproj_launchimg_path)
177
+ if !pub_launchimg_files.nil? && pub_launchimg_files.size > 0
178
+ raise Informative, "有需要替换的资源,但是未找到工程启动图目录,替换启动图失败!"
179
+ end
200
180
  return
201
181
  end
202
182
 
203
- if File.exist?(project_origin_launchimg) && !File.exist?(launchimg_file)
204
- raise Informative, "缺少启动文件:#{launchimg_file}"
205
- end
183
+ # if pub_launchimg_files.nil? || pub_launchimg_files.size == 0
184
+ # raise Informative, "有需要替换的资源,但是配置中未放置替换的启动图!"
185
+ # end
206
186
 
207
- begin
208
- FileUtils.rm_rf(xcodeproj_launchimg_path)
209
- FileUtils.mkdir_p(xcodeproj_launchimg_path)
210
- rescue StandardError => e
187
+ xcodeproj_launchimg_json_file = File.join(xcodeproj_launchimg_path, "Contents.json")
188
+ if !File.exist?(xcodeproj_launchimg_json_file)
189
+ raise Informative, "工程启动图目录缺少Contents.json,替换启动图失败!"
211
190
  end
212
191
 
213
- launch_json = XcodoeResConst.xcode_ios_launchimg_json
214
- file_name = launch_json["images"].select { |image| image["scale"].include?("2x") }.first["filename"]
215
- xcode_launchimg_name = File.join(xcodeproj_launchimg_path, file_name)
216
- FileUtils.cp(launchimg_file, xcode_launchimg_name)
217
-
218
- File.open(File.join(xcodeproj_launchimg_path, "Contents.json"), "w") do |f|
219
- f.write(JSON.pretty_generate(launch_json))
192
+ xcodeproj_launchimg_json = JSON.parse(File.read(xcodeproj_launchimg_json_file))
193
+ image_array = xcodeproj_launchimg_json["images"].select { |image| !image["filename"].nil? && !image["filename"].empty? }
194
+
195
+ if pub_launchimg_files.size == image_array.size
196
+ if image_array.size == 1
197
+ launchimg_filename = image_array.first["filename"]
198
+ launchimg_full_filename = File.join(xcodeproj_launchimg_path, launchimg_filename)
199
+ FileUtils.cp(pub_launchimg_files.first, launchimg_full_filename)
200
+ else
201
+ raise Informative, "启动图有多张,替换异常,遇到这种情况再处理!"
202
+ end
203
+ else
204
+ raise Informative, "工程中启动图数目和配置仓库的图片数目不一致"
220
205
  end
221
206
 
222
207
  end
@@ -108,10 +108,10 @@ module Pindo
108
108
  end
109
109
  end
110
110
 
111
- def self.install_launchimg(proj_dir:nil, launchimg_filename:nil)
111
+ def self.install_launchimg(proj_dir:nil, launchimg_pub_path:nil)
112
112
  xcodeproj_file_name = Dir.glob(File.join(proj_dir, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
113
113
  xcodereshandler = XcodeResHandler.new(proj_fullname: xcodeproj_file_name)
114
- xcodereshandler.install_launchimg(launchimg_file:launchimg_filename)
114
+ xcodereshandler.install_launchimg(launchimg_pub_path:launchimg_pub_path)
115
115
  end
116
116
 
117
117
  end
@@ -53,6 +53,7 @@ module Pindo
53
53
  attr_accessor :args_dev_flag
54
54
  attr_accessor :args_adhoc_flag
55
55
  attr_accessor :args_appstore_flag
56
+ attr_accessor :args_macos_flag
56
57
 
57
58
  attr_accessor :newconfuse_flag
58
59
  attr_accessor :oldconfuse_flag
@@ -69,6 +70,7 @@ module Pindo
69
70
  ['--dev', 'use dev build mode'],
70
71
  ['--adhoc', 'use adhoc build mode'],
71
72
  ['--appstore', 'use appstore build mode'],
73
+ ['--macos', 'use platform macos'],
72
74
 
73
75
  ['--nocreate', 'no create xcode project'],
74
76
 
@@ -92,6 +94,7 @@ module Pindo
92
94
  @args_dev_flag = argv.flag?('dev', false)
93
95
  @args_adhoc_flag = argv.flag?('adhoc', false)
94
96
  @args_appstore_flag = argv.flag?('appstore', false)
97
+ @args_macos_flag = argv.flag?('macos', false)
95
98
 
96
99
  @newconfuse_flag = argv.flag?('newconfuse', true)
97
100
  @oldconfuse_flag = argv.flag?('oldconfuse', false)
@@ -142,6 +145,11 @@ module Pindo
142
145
  mode_flag = "--appstore"
143
146
  end
144
147
  args_temp << mode_flag
148
+
149
+ if @args_macos_flag
150
+ args_temp << "--macos"
151
+ end
152
+ return args_temp
145
153
  end
146
154
 
147
155
  def get_confuse_type_args()
@@ -348,6 +356,7 @@ module Pindo
348
356
  puts "args_dev_flag = #{@args_dev_flag}"
349
357
  puts "args_adhoc_flag = #{@args_adhoc_flag}"
350
358
  puts "args_appstore_flag = #{@args_appstore_flag}"
359
+ puts "args_macos_flag = #{@args_macos_flag}"
351
360
 
352
361
  puts "\n***************************************************************************************"
353
362
  puts "=======================================================================================\n\n"
data/lib/pindo/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Pindo
2
2
 
3
- VERSION = "4.8.2"
3
+ VERSION = "4.8.4"
4
4
 
5
5
  class VersionCheck
6
6
 
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.8.2
4
+ version: 4.8.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - wade
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-05-29 00:00:00.000000000 Z
11
+ date: 2024-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: claide
@@ -365,7 +365,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
365
365
  - !ruby/object:Gem::Version
366
366
  version: '0'
367
367
  requirements: []
368
- rubygems_version: 3.4.10
368
+ rubygems_version: 3.5.23
369
369
  signing_key:
370
370
  specification_version: 3
371
371
  summary: easy work