Skip to content

Commit 6976209

Browse files
committed
将原 performAndWait 改成 performAndWaitWithResult 以解决 Xcode 26 beta 5 后的兼容性问题
1 parent 506cb1e commit 6976209

8 files changed

Lines changed: 281 additions & 10 deletions

File tree

.swiftformat

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
--acronyms ID,URL,UUID
2+
# 指定首字母缩写词,防止它们被错误格式化为驼峰
3+
--allman false
4+
# 指定是否使用 Allman 风格的花括号
5+
--anonymousforeach convert
6+
# 将匿名的 forEach 转换为更具可读性的形式
7+
--assetliterals visual-width
8+
# 设置资产文字的视觉宽度
9+
--beforemarks
10+
# 在标记之前添加空行
11+
--binarygrouping 4,8
12+
# 指定二进制数字的分组方式
13+
--callsiteparen same-line
14+
# 设置调用位置的括号风格
15+
--categorymark "MARK: %c"
16+
# 自定义类别标记的格式
17+
--classthreshold 0
18+
# 设置类的阈值
19+
--closingparen same-line
20+
# 指定闭合括号与前一行在同一行
21+
--closurevoid remove
22+
# 移除闭包的 void 类型
23+
--commas always
24+
# 始终在参数列表中使用逗号
25+
--complexattrs preserve
26+
# 保留复杂属性
27+
--computedvarattrs preserve
28+
# 保留计算属性的属性
29+
--condassignment after-property
30+
# 将条件赋值放在属性之后
31+
--conflictmarkers reject
32+
# 拒绝冲突标记
33+
--dateformat system
34+
# 使用系统日期格式
35+
--decimalgrouping 3,6
36+
# 指定十进制数字的分组方式
37+
--doccomments before-declarations
38+
# 在声明之前添加文档注释
39+
--elseposition same-line
40+
# 指定 else 语句与 if 在同一行
41+
--emptybraces no-space
42+
# 在空花括号中不添加空格
43+
--enumnamespaces always
44+
# 始终使用命名空间的枚举
45+
--enumthreshold 0
46+
# 设置枚举的阈值
47+
--exponentcase lowercase
48+
# 指定指数部分使用小写字母
49+
--exponentgrouping disabled
50+
# 禁用指数分组
51+
--extensionacl on-declarations
52+
# 在声明上启用扩展 ACL
53+
--extensionlength 0
54+
# 设置扩展的长度
55+
--extensionmark "MARK: - %t + %c"
56+
# 自定义扩展标记的格式
57+
--fractiongrouping disabled
58+
# 禁用分数分组
59+
--fragment false
60+
# 禁用片段格式化
61+
--funcattributes preserve
62+
# 保留函数属性
63+
--groupedextension "MARK: %c"
64+
# 自定义分组扩展的格式
65+
--guardelse auto
66+
# 自动处理 guard-else 语句
67+
--header ignore
68+
# 忽略头部格式化
69+
--hexgrouping 4,8
70+
# 指定十六进制数字的分组方式
71+
--hexliteralcase uppercase
72+
# 指定十六进制字面量使用大写字母
73+
--ifdef indent
74+
# 在条件编译指令中使用缩进
75+
--importgrouping alpha
76+
# 按字母顺序分组导入
77+
--indent 4
78+
# 设置缩进为 4 个空格
79+
--indentcase true
80+
# 对 switch case 进行缩进
81+
--indentstrings true
82+
# 对字符串进行缩进
83+
--initcodernil false
84+
# 不在初始化时使用 nil
85+
--lineaftermarks true
86+
# 在标记后添加空行
87+
--linebreaks lf
88+
# 使用 LF 作为换行符
89+
--markcategories true
90+
# 启用标记类别
91+
--markextensions always
92+
# 始终标记扩展
93+
--marktypes always
94+
# 始终标记类型
95+
--maxwidth 100
96+
# 设置最大宽度为 100 字符
97+
--modifierorder
98+
# 设置修饰符顺序
99+
#--nevertrailing
100+
# 禁用尾随逗号
101+
--nilinit remove
102+
# 移除 nil 初始化
103+
--nospaceoperators
104+
# 禁用操作符之间的空格
105+
--nowrapoperators
106+
# 禁用操作符换行
107+
--octalgrouping 4,8
108+
# 指定八进制数字的分组方式
109+
--onelineforeach ignore
110+
# 忽略单行 forEach 格式
111+
--operatorfunc spaced
112+
# 在操作符函数中使用空格
113+
--organizationmode visibility
114+
# 按可见性组织代码
115+
--organizetypes actor,class,enum,struct
116+
# 按类型组织代码
117+
--patternlet hoist
118+
# 提升模式 let 变量
119+
--ranges spaced
120+
# 在范围中使用空格
121+
--redundanttype infer-locals-only
122+
# 仅推断局部变量的类型
123+
--self remove
124+
# 移除 self 关键字
125+
--semicolons inline
126+
# 使用行内分号
127+
--shortoptionals always
128+
# 始终使用短选项
129+
--smarttabs enabled
130+
# 启用智能制表符
131+
--someany false
132+
# 启用 some 和 any 的使用
133+
--storedvarattrs preserve
134+
# 保留存储属性的属性
135+
--stripunusedargs always
136+
# 始终剥离未使用的参数
137+
--structthreshold 0
138+
# 设置结构的阈值
139+
--tabwidth unspecified
140+
# 制表符宽度未指定
141+
--timezone system
142+
# 使用系统时区
143+
--trailingclosures
144+
# 启用尾随闭包
145+
--trimwhitespace always
146+
# 始终修剪多余空白
147+
--typeattributes preserve
148+
# 保留类型属性
149+
--typedelimiter space-after
150+
# 在类型分隔符后添加空格
151+
--typemark "MARK: - %t"
152+
# 自定义类型标记的格式
153+
--voidtype void
154+
# 指定 void 类型
155+
--wraparguments before-first
156+
# 在第一个参数之前换行
157+
--wrapcollections before-first
158+
# 集合的换行格式
159+
--wrapconditions preserve
160+
# 保留条件的换行格式
161+
--wrapeffects preserve
162+
# 保留效果的换行格式
163+
--wrapenumcases always
164+
# 始终换行枚举案例
165+
--wrapparameters before-first
166+
# 在第一个参数之前换行
167+
--wrapreturntype preserve
168+
# 保留返回类型的换行格式
169+
--wrapternary default
170+
# 默认换行三元表达式
171+
--wraptypealiases preserve
172+
# 保留类型别名的换行格式
173+
--xcodeindentation enabled
174+
# 启用 Xcode 缩进
175+
#--yodaswap always
176+
# 始终交换 Yoda 条件
177+
--disable blankLineAfterImports,blankLinesBetweenChainedFunctions
178+
# 禁用导入后的空行和链式函数之间的空行
179+
--enable isEmpty
180+
# 启用 isEmpty 检查
181+
--disable unusedArguments
182+
# 禁用未使用参数的警告
183+
184+
185+

.swiftlint.yml

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
opt_in_rules:
2+
- empty_count
3+
- missing_docs
4+
5+
disabled_rules:
6+
- opening_brace
7+
8+
included:
9+
- Domain/Sources
10+
- Persistent/Sources
11+
# 如果需要包含测试,添加:
12+
# - Domain/Tests
13+
# - Persistent/Tests
14+
15+
excluded:
16+
- .build
17+
- .swiftpm
18+
- Generated
19+
- Domain/Tests
20+
- Persistent/Test
21+
22+
missing_docs:
23+
severity: warning
24+
included: [public, open]
25+
required_declarations:
26+
- type
27+
- method
28+
- property
29+
30+
trailing_comma:
31+
mandatory_comma: true # ✅ 多行结构必须添加尾随逗号
32+
severity: warning # or error
33+
34+
line_length:
35+
warning: 120
36+
error: 130
37+
ignores_comments: true
38+
39+
force_cast: warning
40+
force_try:
41+
severity: warning
42+
43+
file_length:
44+
warning: 500
45+
error: 1200
46+
47+
type_body_length:
48+
- 300 # warning
49+
- 400 # error
50+
51+
type_name:
52+
min_length: 3
53+
max_length:
54+
warning: 40
55+
error: 50
56+
excluded:
57+
- ID
58+
59+
identifier_name:
60+
allowed_symbols: "_"
61+
min_length:
62+
error: 3
63+
excluded:
64+
- id
65+
- URL
66+
- GlobalAPIKey
67+
- i
68+
- x
69+
- y
70+
- z
71+
- by
72+
73+
nesting:
74+
type_level:
75+
warning: 3
76+
error: 6
77+
78+
cyclomatic_complexity:
79+
warning: 15
80+
error: 25
81+
82+
switch_case_alignment:
83+
severity: warning
84+
indented_cases: true # 允许 case 缩进
85+
86+
reporter: "xcode"

Sources/PersistentHistoryTrackingKit/Cleaner.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ struct Cleaner: TransactionCleanerProtocol {
2828

2929
func cleanTransaction(before timestamp: Date?) throws {
3030
guard let timestamp = timestamp else { return }
31-
try backgroundContext.performAndWait {
31+
try backgroundContext.performAndWaitWithResult {
3232
if let request = getPersistentStoreRequest(before: timestamp, for: authors) {
3333
try backgroundContext.execute(request)
3434
}

Sources/PersistentHistoryTrackingKit/Extensions.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import Foundation
1515

1616
extension NSManagedObjectContext {
1717
@discardableResult
18-
func performAndWait<T>(_ block: () throws -> T) throws -> T {
18+
func performAndWaitWithResult<T>(_ block: () throws -> T) throws -> T {
1919
var result: Result<T, Error>?
2020
performAndWait {
2121
result = Result { try block() }
@@ -24,7 +24,7 @@ extension NSManagedObjectContext {
2424
}
2525

2626
@discardableResult
27-
func performAndWait<T>(_ block: () -> T) -> T {
27+
func performAndWaitWithResult<T>(_ block: () -> T) -> T {
2828
var result: T?
2929
performAndWait {
3030
result = block()

Tests/PersistentHistoryTrackingKitTests/CleanerTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ class CleanerTests: XCTestCase {
9595
viewContext.saveIfChanged()
9696
}
9797

98-
try batchContext.performAndWait {
98+
try batchContext.performAndWaitWithResult {
9999
var count = 0
100100

101101
let batchInsert = NSBatchInsertRequest(entity: Event.entity()) { (dictionary: NSMutableDictionary) in

Tests/PersistentHistoryTrackingKitTests/FetcherTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,13 @@ class FetcherTest: XCTestCase {
105105
allAuthors: [AppActor.app1.rawValue, AppActor.app2.rawValue])
106106

107107
// when insert by batch
108-
viewContext.performAndWait {
108+
viewContext.performAndWaitWithResult {
109109
let event = Event(context: viewContext)
110110
event.timestamp = Date()
111111
viewContext.saveIfChanged()
112112
}
113113

114-
try batchContext.performAndWait {
114+
try batchContext.performAndWaitWithResult {
115115
var count = 0
116116

117117
let batchInsert = NSBatchInsertRequest(entity: Event.entity()) { (dictionary: NSMutableDictionary) in

Tests/PersistentHistoryTrackingKitTests/MergerTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ class MergerTests: XCTestCase {
8989

9090
let merger = Merger()
9191
// insert by batch
92-
try batchContext.performAndWait {
92+
try batchContext.performAndWaitWithResult {
9393
var count = 0
9494

9595
let batchInsert = NSBatchInsertRequest(entity: Event.entity()) { (dictionary: NSMutableDictionary) in
@@ -109,7 +109,7 @@ class MergerTests: XCTestCase {
109109
fatalError()
110110
}
111111
viewContext.retainsRegisteredObjects = true
112-
viewContext.performAndWait {
112+
viewContext.performAndWaitWithResult {
113113
XCTAssertNil(viewContext.registeredObject(for: objectID))
114114
}
115115
// when

Tests/PersistentHistoryTrackingKitTests/TestsHelper/Extension.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ extension NSManagedObjectContext {
2626

2727
extension NSManagedObjectContext {
2828
@discardableResult
29-
func performAndWait<T>(_ block: () throws -> T) throws -> T {
29+
func performAndWaitWithResult<T>(_ block: () throws -> T) throws -> T {
3030
var result: Result<T, Error>?
3131
performAndWait {
3232
result = Result { try block() }
@@ -35,7 +35,7 @@ extension NSManagedObjectContext {
3535
}
3636

3737
@discardableResult
38-
func performAndWait<T>(_ block: () -> T) -> T {
38+
func performAndWaitWithResult<T>(_ block: () -> T) -> T {
3939
var result: T?
4040
performAndWait {
4141
result = block()

0 commit comments

Comments
 (0)