pindo 5.10.4 → 5.10.6
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/command/deploy/build.rb +6 -1
- data/lib/pindo/command/deploy/cert.rb +2 -2
- data/lib/pindo/command/dev/autobuild.rb +1 -1
- data/lib/pindo/command/dev/build.rb +1 -1
- data/lib/pindo/command/ios/adhoc.rb +1 -1
- data/lib/pindo/command/ios/autobuild.rb +1 -1
- data/lib/pindo/command/ios/debug.rb +1 -1
- data/lib/pindo/command/ipa/autoresign.rb +2 -2
- data/lib/pindo/command/ipa/import.rb +1 -1
- data/lib/pindo/command/ipa/output.rb +1 -1
- data/lib/pindo/command/repo/login.rb +1 -1
- data/lib/pindo/command/utils/device.rb +4 -4
- data/lib/pindo/command/utils/renewcert.rb +1 -1
- data/lib/pindo/command/web/autobuild.rb +1 -1
- data/lib/pindo/module/cert/xcodecerthelper.rb +4 -3
- data/lib/pindo/module/pgyer/pgyerhelper.rb +5 -5
- data/lib/pindo/module/xcode/xcodebuildhelper.rb +81 -0
- data/lib/pindo/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cd33392e14ce3170db5963cd77255bc0b4f2c008c79a01579d726f8ef93037d0
|
|
4
|
+
data.tar.gz: 61fe09946921347ad84bc991512b29a0eb64e23e470961ca579b6247d8bdf166
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9147ffd74728ab059dd4a5dbb760715735c29426c9746826ec65d01a19e411257a9e4b438e9c008bdfc3b757a759713023759fc8d8e23c190dc8f816bc31ec54
|
|
7
|
+
data.tar.gz: '05328944fb21eb8f33617fe20c3eb68992d8eacc29f04d847edcd1f78c0441d61f7120cace4449c898b62fc4c96f264c6390234d8a6e19d71a30e66109cf98b6'
|
|
@@ -3,12 +3,14 @@ require 'fileutils'
|
|
|
3
3
|
require 'json'
|
|
4
4
|
require 'xcodeproj'
|
|
5
5
|
require 'gym'
|
|
6
|
+
require 'pindo/module/xcode/xcodebuildhelper'
|
|
6
7
|
|
|
7
8
|
module Pindo
|
|
8
9
|
class Command
|
|
9
10
|
class Deploy < Command
|
|
10
11
|
class Build < Deploy
|
|
11
12
|
|
|
13
|
+
include Pindo::XcodeBuildHelper
|
|
12
14
|
|
|
13
15
|
self.summary = '编译工程'
|
|
14
16
|
|
|
@@ -22,7 +24,7 @@ module Pindo
|
|
|
22
24
|
|
|
23
25
|
def self.options
|
|
24
26
|
[
|
|
25
|
-
['--proj', '指定上传到
|
|
27
|
+
['--proj', '指定上传到JPS对应的项目名称(大小写空格忽略),用法:pindo deploy build --proj=aichatv4'],
|
|
26
28
|
['--upload', '是否上传编译后的ipa(上传成功后会自动发送消息给自己), 用法:pindo deploy build --upload'],
|
|
27
29
|
['--send', '发送消息到项目群(注意:不带此参数也会发送给自己),用法:pindo deploy build --send'],
|
|
28
30
|
['--resign', '上传到之后是否重签名,用法:pindo deploy build --resign'],
|
|
@@ -72,6 +74,9 @@ module Pindo
|
|
|
72
74
|
new_project_dir = Dir.pwd
|
|
73
75
|
project_fullname = Dir.glob(File.join(new_project_dir, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
|
|
74
76
|
|
|
77
|
+
# 修复 Xcode 16 链接器兼容性问题
|
|
78
|
+
fix_xcode16_linker_flags(project_dir: new_project_dir)
|
|
79
|
+
|
|
75
80
|
if File.exist?(File.join(new_project_dir, "build"))
|
|
76
81
|
FileUtils.rm_rf(File.join(new_project_dir, "build"))
|
|
77
82
|
end
|
|
@@ -52,8 +52,8 @@ module Pindo
|
|
|
52
52
|
['--macos', 'macos平台证书'],
|
|
53
53
|
['--clean', '删除本地缓存的证书'],
|
|
54
54
|
['--cleangit', '删除远程仓库中的证书'],
|
|
55
|
-
['--upload', '生成上传
|
|
56
|
-
['--match', '生成上传
|
|
55
|
+
['--upload', '生成上传JPS的证书'],
|
|
56
|
+
['--match', '生成上传JPS的证书'],
|
|
57
57
|
['--renew', '重新生成证书']
|
|
58
58
|
].concat(super)
|
|
59
59
|
end
|
|
@@ -53,7 +53,7 @@ module Pindo
|
|
|
53
53
|
[
|
|
54
54
|
['--deploy', '默认用开发的bundle id,用法:pindo dev autobuild --deploy'],
|
|
55
55
|
['--adhoc', '默认用dev证书,使用--adhoc设置使用adhoc证书编译'],
|
|
56
|
-
['--proj', '指定上传到
|
|
56
|
+
['--proj', '指定上传到JPS对应的项目名称(大小写空格忽略)'],
|
|
57
57
|
['--upload', '是否上传编译后的ipa'],
|
|
58
58
|
['--send', '上传到之后是否发送测试信息'],
|
|
59
59
|
].concat(super)
|
|
@@ -42,7 +42,7 @@ module Pindo
|
|
|
42
42
|
|
|
43
43
|
def self.options
|
|
44
44
|
[
|
|
45
|
-
['--proj', '指定上传到
|
|
45
|
+
['--proj', '指定上传到JPS对应的项目名称(大小写空格忽略),用法:pindo dev build --proj=aichatv4'],
|
|
46
46
|
['--upload', '是否上传编译后的ipa, 用法:pindo dev build --upload'],
|
|
47
47
|
['--send', '上传到之后是否发送测试信息,用法:pindo dev build --send'],
|
|
48
48
|
].concat(super)
|
|
@@ -41,8 +41,8 @@ module Pindo
|
|
|
41
41
|
[
|
|
42
42
|
['--ipa', 'iap file name.'],
|
|
43
43
|
['--proj', '指定哪个项目(忽略大小写空格等等字符): --proj=\"prancksoundv4\"'],
|
|
44
|
-
['--upload', '编译完成后是否上传ipa到
|
|
45
|
-
['--send', '上传到
|
|
44
|
+
['--upload', '编译完成后是否上传ipa到JPS: --upload'],
|
|
45
|
+
['--send', '上传到JPS之后是否发送测试信息: --send'],
|
|
46
46
|
['--ipa', '强制指定重签名的ipa包,用法: --ipa=path/to/demo.ipa'],
|
|
47
47
|
['--dev', '使用dev证书,默认使用adhoc证书: --dev'],
|
|
48
48
|
['--test', '使用测试的bundle id, 默认是用发布bundle id,用法:--test'],
|
|
@@ -50,7 +50,7 @@ module Pindo
|
|
|
50
50
|
['--build', '修改完工程之后直接编译,用法:pindo ipa import --build'],
|
|
51
51
|
['--increase', '自动增加编译的app版本号,用法:pindo ipa import --increase'],
|
|
52
52
|
['--proj', '指定哪个项目(忽略大小写空格等等字符): --proj=\"prancksoundv4\"'],
|
|
53
|
-
['--upload', '编译完成后是否上传ipa到
|
|
53
|
+
['--upload', '编译完成后是否上传ipa到JPS: 用法:pindo ipa import --upload'],
|
|
54
54
|
['--send', '上传到之后是否发送测试信息,用法:pindo ipa import --send'],
|
|
55
55
|
['--resign', '上传到之后是否发送测试信息,用法:pindo ipa import --resign'],
|
|
56
56
|
|
|
@@ -51,7 +51,7 @@ module Pindo
|
|
|
51
51
|
def self.options
|
|
52
52
|
[
|
|
53
53
|
['--proj', '指定哪个项目(忽略大小写空格等等字符): --proj=\"prancksoundv4\"'],
|
|
54
|
-
['--upload', '编译完成后是否上传ipa到
|
|
54
|
+
['--upload', '编译完成后是否上传ipa到JPS: 用法:pindo ipa output --upload'],
|
|
55
55
|
['--send', '上传到之后是否发送测试信息,用法:pindo ipa output --send'],
|
|
56
56
|
['--increase', '自动增加编译的app版本号,用法:pindo ipa output --increase'],
|
|
57
57
|
|
|
@@ -19,7 +19,7 @@ module Pindo
|
|
|
19
19
|
- 支持iOS和Mac设备管理
|
|
20
20
|
- 读取本地CSV文件的设备数据
|
|
21
21
|
- 生成多种格式的设备列表
|
|
22
|
-
-
|
|
22
|
+
- 兼容JPS平台的设备格式
|
|
23
23
|
- 设备信息统一管理和对比
|
|
24
24
|
|
|
25
25
|
使用示例:
|
|
@@ -29,7 +29,7 @@ module Pindo
|
|
|
29
29
|
生成文件:
|
|
30
30
|
- new_devices_list.txt - App Store格式的设备列表
|
|
31
31
|
- new_user_devices_list.csv - 用户设备列表
|
|
32
|
-
-
|
|
32
|
+
- new_jps_devices_list.csv - JPS格式设备列表
|
|
33
33
|
DESC
|
|
34
34
|
|
|
35
35
|
class DeviceItem
|
|
@@ -199,7 +199,7 @@ DESC
|
|
|
199
199
|
|
|
200
200
|
def write_apppgyer_csv(devices:nil)
|
|
201
201
|
|
|
202
|
-
device_file = File.join(Dir.pwd, "
|
|
202
|
+
device_file = File.join(Dir.pwd, "new_jps_devices_list.csv");
|
|
203
203
|
|
|
204
204
|
devices.each do |key, item|
|
|
205
205
|
if item.device_type.to_s.eql?("ipad")
|
|
@@ -231,7 +231,7 @@ DESC
|
|
|
231
231
|
devices = {}
|
|
232
232
|
|
|
233
233
|
|
|
234
|
-
device_file = File.join(Dir.pwd, "
|
|
234
|
+
device_file = File.join(Dir.pwd, "jps_devices_list.csv");
|
|
235
235
|
if File.exist?(device_file)
|
|
236
236
|
line_num=0
|
|
237
237
|
CSV.foreach(device_file, headers:false) do |row|
|
|
@@ -292,20 +292,21 @@ module Pindo
|
|
|
292
292
|
info_plist_dict = Xcodeproj::Plist.read_from_path(plist_file_name)
|
|
293
293
|
|
|
294
294
|
if !icloud_id.nil?
|
|
295
|
-
|
|
295
|
+
# 需要设置 iCloud
|
|
296
296
|
temp_value = {}
|
|
297
297
|
if !info_plist_dict['NSUbiquitousContainers'].nil? && info_plist_dict['NSUbiquitousContainers'].is_a?(Hash)
|
|
298
298
|
info_plist_dict['NSUbiquitousContainers'].each do |key, value|
|
|
299
299
|
if key.include?("iCloud.")
|
|
300
300
|
temp_value = value
|
|
301
|
-
break
|
|
301
|
+
break
|
|
302
302
|
end
|
|
303
303
|
end
|
|
304
304
|
end
|
|
305
305
|
info_plist_dict['NSUbiquitousContainers'] = {}
|
|
306
306
|
info_plist_dict['NSUbiquitousContainers'][icloud_id] = temp_value || {}
|
|
307
307
|
else
|
|
308
|
-
|
|
308
|
+
# 不需要 iCloud,删除键(如果存在)
|
|
309
|
+
info_plist_dict.delete('NSUbiquitousContainers')
|
|
309
310
|
end
|
|
310
311
|
|
|
311
312
|
Xcodeproj::Plist.write_to_path(info_plist_dict, plist_file_name)
|
|
@@ -424,7 +424,7 @@ module Pindo
|
|
|
424
424
|
|
|
425
425
|
|
|
426
426
|
else
|
|
427
|
-
raise Informative, "请先登录
|
|
427
|
+
raise Informative, "请先登录JPS网站"
|
|
428
428
|
end
|
|
429
429
|
@proj_name = upload_proj_name
|
|
430
430
|
app_info_obj
|
|
@@ -893,7 +893,7 @@ module Pindo
|
|
|
893
893
|
|
|
894
894
|
if app_info_list.nil?
|
|
895
895
|
Funlog.instance.fancyinfo_error("拉取app信息列表失败!")
|
|
896
|
-
raise Informative, "
|
|
896
|
+
raise Informative, "JPS网络数据异常!!!"
|
|
897
897
|
end
|
|
898
898
|
|
|
899
899
|
|
|
@@ -1061,11 +1061,11 @@ module Pindo
|
|
|
1061
1061
|
puts
|
|
1062
1062
|
|
|
1063
1063
|
if comment_str.nil? || comment_str.empty?
|
|
1064
|
-
Funlog.instance.fancyinfo_error("没有找到git备注信息,无法修改
|
|
1064
|
+
Funlog.instance.fancyinfo_error("没有找到git备注信息,无法修改JPS备注!")
|
|
1065
1065
|
else
|
|
1066
|
-
Funlog.instance.fancyinfo_start("开始修复
|
|
1066
|
+
Funlog.instance.fancyinfo_start("开始修复JPS备注...")
|
|
1067
1067
|
@pgyer_client.update_project_package(projectId:app_info_obj["id"], id:version_item_obj["id"], comment:comment_str.strip)
|
|
1068
|
-
Funlog.instance.fancyinfo_start("
|
|
1068
|
+
Funlog.instance.fancyinfo_start("JPS备注已经修改!")
|
|
1069
1069
|
end
|
|
1070
1070
|
|
|
1071
1071
|
|
|
@@ -318,6 +318,87 @@ module Pindo
|
|
|
318
318
|
|
|
319
319
|
end
|
|
320
320
|
|
|
321
|
+
# 修复 Xcode 16 链接器兼容性问题
|
|
322
|
+
# 自动移除 -ld_classic 和 -ld64 标志
|
|
323
|
+
def fix_xcode16_linker_flags(project_dir: nil)
|
|
324
|
+
begin
|
|
325
|
+
# 查找所有 xcodeproj 文件
|
|
326
|
+
workspace_file = Dir.glob(File.join(project_dir, "*.xcworkspace")).first
|
|
327
|
+
project_files = []
|
|
328
|
+
|
|
329
|
+
if workspace_file && File.exist?(workspace_file)
|
|
330
|
+
# 如果存在 workspace,从中提取所有项目
|
|
331
|
+
workspace_data_file = File.join(workspace_file, "contents.xcworkspacedata")
|
|
332
|
+
if File.exist?(workspace_data_file)
|
|
333
|
+
require 'rexml/document'
|
|
334
|
+
doc = REXML::Document.new(File.read(workspace_data_file))
|
|
335
|
+
doc.elements.each('Workspace/FileRef') do |file_ref|
|
|
336
|
+
location = file_ref.attributes['location']
|
|
337
|
+
if location && location.start_with?('group:')
|
|
338
|
+
relative_path = location.sub('group:', '')
|
|
339
|
+
if relative_path.end_with?('.xcodeproj')
|
|
340
|
+
full_path = File.join(project_dir, relative_path)
|
|
341
|
+
project_files << full_path if File.exist?(full_path)
|
|
342
|
+
end
|
|
343
|
+
end
|
|
344
|
+
end
|
|
345
|
+
end
|
|
346
|
+
else
|
|
347
|
+
# 直接查找项目文件
|
|
348
|
+
project_files = Dir.glob(File.join(project_dir, "**/*.xcodeproj"))
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
return if project_files.empty?
|
|
352
|
+
|
|
353
|
+
fixed_count = 0
|
|
354
|
+
|
|
355
|
+
project_files.each do |project_path|
|
|
356
|
+
begin
|
|
357
|
+
project = Xcodeproj::Project.open(project_path)
|
|
358
|
+
project_modified = false
|
|
359
|
+
|
|
360
|
+
project.targets.each do |target|
|
|
361
|
+
target.build_configurations.each do |config|
|
|
362
|
+
ldflags = config.build_settings['OTHER_LDFLAGS']
|
|
363
|
+
next unless ldflags
|
|
364
|
+
|
|
365
|
+
original_flags = ldflags.dup
|
|
366
|
+
|
|
367
|
+
# 移除过时的链接器标志
|
|
368
|
+
if ldflags.is_a?(Array)
|
|
369
|
+
ldflags.delete('-ld_classic')
|
|
370
|
+
ldflags.delete('-ld64')
|
|
371
|
+
elsif ldflags.is_a?(String)
|
|
372
|
+
ldflags = ldflags.gsub(/-ld_classic|-ld64/, '').strip
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
if original_flags != ldflags
|
|
376
|
+
config.build_settings['OTHER_LDFLAGS'] = ldflags
|
|
377
|
+
project_modified = true
|
|
378
|
+
end
|
|
379
|
+
end
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
if project_modified
|
|
383
|
+
project.save
|
|
384
|
+
fixed_count += 1
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
rescue => e
|
|
388
|
+
# 静默处理错误,不中断构建
|
|
389
|
+
end
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
if fixed_count > 0
|
|
393
|
+
puts "✅ 修复 Xcode 16 链接器兼容性配置".green
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
rescue => error
|
|
397
|
+
puts "⚠️ 修复链接器标志时出现错误: #{error.message}".yellow
|
|
398
|
+
# 不中断构建流程
|
|
399
|
+
end
|
|
400
|
+
end
|
|
401
|
+
|
|
321
402
|
|
|
322
403
|
end
|
|
323
404
|
|
data/lib/pindo/version.rb
CHANGED