bmall-mcp 1.4.3 → 1.6.0
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.
- package/.kiro/steering/bmall/iOS/1-foundation/component_rules.md +102 -0
- package/.kiro/steering/bmall/iOS/1-foundation/design_rules.md +375 -0
- package/.kiro/steering/bmall/iOS/1-foundation/naming_rules.md +156 -0
- package/.kiro/steering/bmall/iOS/1-foundation/objc_mvvm_rules.md +98 -0
- package/.kiro/steering/bmall/iOS/1-foundation/safety_rules.md +160 -0
- package/.kiro/steering/bmall/iOS/1-foundation/style_rules.md +65 -0
- package/.kiro/steering/bmall/iOS/1-foundation/third_party_rules.md +78 -0
- package/.kiro/steering/bmall/iOS/2-workflow/ai_workflow.md +53 -0
- package/.kiro/steering/bmall/iOS/2-workflow/coding_rules_index.md +226 -0
- package/.kiro/steering/bmall/iOS/2-workflow/git_push_workflow.md +175 -0
- package/.kiro/steering/bmall/iOS/2-workflow/mta_workflow.md +131 -0
- package/.kiro/steering/bmall/iOS/2-workflow/tech_design_workflow.md +85 -0
- package/.kiro/steering/bmall/iOS/3-scene/controller_rules.md +105 -0
- package/.kiro/steering/bmall/iOS/3-scene/input_processing.md +64 -0
- package/.kiro/steering/bmall/iOS/3-scene/model_rules.md +131 -0
- package/.kiro/steering/bmall/iOS/3-scene/network_rules.md +129 -0
- package/.kiro/steering/bmall/iOS/3-scene/view_rules.md +96 -0
- package/.kiro/steering/bmall/iOS/3-scene/viewmodel_rules.md +286 -0
- package/.kiro/steering/bmall/iOS/4-library/category_library.md +98 -0
- package/.kiro/steering/bmall/iOS/4-library/component_library.md +26 -0
- package/.kiro/steering/bmall/iOS/4-library/project_structure.md +415 -0
- package/.kiro/steering/bmall/iOS/4-library/utils_library.md +62 -0
- package/.kiro/steering/bmall/iOS/5-template/change_scope_template.md +62 -0
- package/.kiro/steering/bmall/iOS/5-template/controller_template.md +313 -0
- package/.kiro/steering/bmall/iOS/5-template/requirements_template.md +213 -0
- package/.kiro/steering/bmall/iOS/5-template/tech_design_template.md +151 -0
- package/.kiro/steering/bmall/iOS/5-template/view_template.md +240 -0
- package/.kiro/steering/bmall/iOS/5-template/viewmodel_template.md +287 -0
- package/.kiro/steering/bmall/iOS/README.md +273 -0
- package/README.md +50 -0
- package/dist/server/handlers.d.ts.map +1 -1
- package/dist/server/handlers.js +22 -0
- package/dist/server/handlers.js.map +1 -1
- package/dist/server/tools.d.ts +110 -0
- package/dist/server/tools.d.ts.map +1 -1
- package/dist/server/tools.js +72 -0
- package/dist/server/tools.js.map +1 -1
- package/dist/tools/requirements/analyzer.d.ts +13 -0
- package/dist/tools/requirements/analyzer.d.ts.map +1 -0
- package/dist/tools/requirements/analyzer.js +7 -0
- package/dist/tools/requirements/analyzer.js.map +1 -0
- package/dist/tools/requirements/generator.d.ts +11 -0
- package/dist/tools/requirements/generator.d.ts.map +1 -0
- package/dist/tools/requirements/generator.js +52 -0
- package/dist/tools/requirements/generator.js.map +1 -0
- package/dist/tools/requirements/index.d.ts +29 -0
- package/dist/tools/requirements/index.d.ts.map +1 -0
- package/dist/tools/requirements/index.js +254 -0
- package/dist/tools/requirements/index.js.map +1 -0
- package/dist/tools/requirements/reader/api.d.ts +2 -0
- package/dist/tools/requirements/reader/api.d.ts.map +1 -0
- package/dist/tools/requirements/reader/api.js +15 -0
- package/dist/tools/requirements/reader/api.js.map +1 -0
- package/dist/tools/requirements/reader/figma.d.ts +7 -0
- package/dist/tools/requirements/reader/figma.d.ts.map +1 -0
- package/dist/tools/requirements/reader/figma.js +13 -0
- package/dist/tools/requirements/reader/figma.js.map +1 -0
- package/dist/tools/requirements/reader/index.d.ts +8 -0
- package/dist/tools/requirements/reader/index.d.ts.map +1 -0
- package/dist/tools/requirements/reader/index.js +36 -0
- package/dist/tools/requirements/reader/index.js.map +1 -0
- package/dist/tools/requirements/requirement-processor.d.ts +31 -0
- package/dist/tools/requirements/requirement-processor.d.ts.map +1 -0
- package/dist/tools/requirements/requirement-processor.js +107 -0
- package/dist/tools/requirements/requirement-processor.js.map +1 -0
- package/docs/generate-requirements-usage.md +354 -0
- package/docs/requirements-workflow.md +289 -0
- package/package.json +2 -2
- package/src/server/handlers.ts +30 -0
- package/src/server/tools.ts +72 -0
- package/src/tools/requirements/index.ts +327 -0
- package/src/tools/requirements/requirement-processor.ts +146 -0
- package/test-requirements.md +42 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
inclusion: manual
|
|
3
|
+
---
|
|
4
|
+
# bmall UI 组件使用规范
|
|
5
|
+
|
|
6
|
+
> **说明**: 定义 bmall UI 组件的使用规范
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## JDBMToastView - 轻提示
|
|
11
|
+
|
|
12
|
+
### 基本规范
|
|
13
|
+
|
|
14
|
+
**[必须]** 引入头文件 `#import <JDBMUIKitModule/JDBMToastView.h>`
|
|
15
|
+
**[必须]** 文字不超过 20 个字
|
|
16
|
+
**[禁止]** 连续显示多个 Toast
|
|
17
|
+
|
|
18
|
+
### 常用示例
|
|
19
|
+
|
|
20
|
+
```objective-c
|
|
21
|
+
// 成功提示(居中)
|
|
22
|
+
[JDBMToastView showWithMessage:@"保存成功"
|
|
23
|
+
toastType:JDBMToastViewTypeSuccess
|
|
24
|
+
positionType:JDBMToastViewPositionTypeCenter];
|
|
25
|
+
|
|
26
|
+
// 错误提示(居中)
|
|
27
|
+
[JDBMToastView showWithMessage:@"网络连接失败"
|
|
28
|
+
toastType:JDBMToastViewTypeError
|
|
29
|
+
positionType:JDBMToastViewPositionTypeCenter];
|
|
30
|
+
|
|
31
|
+
// 普通提示(底部)
|
|
32
|
+
[JDBMToastView showWithMessage:@"已添加到购物车"
|
|
33
|
+
toastType:JDBMToastViewTypeTips
|
|
34
|
+
positionType:JDBMToastViewPositionTypeBottom];
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## JDBMProgressHUD - 网络加载框
|
|
40
|
+
|
|
41
|
+
### 基本规范
|
|
42
|
+
|
|
43
|
+
**[必须]** 引入头文件 `#import <JDBMUIKitModule/JDBMProgressHUD.h>`
|
|
44
|
+
**[必须]** 显示和隐藏必须成对出现
|
|
45
|
+
**[建议]** 在 ViewModel 的 loadingBlock 中控制显示/隐藏
|
|
46
|
+
**[禁止]** 长时间显示加载框(超过 30 秒)
|
|
47
|
+
|
|
48
|
+
### 常用示例
|
|
49
|
+
|
|
50
|
+
```objective-c
|
|
51
|
+
// 显示加载框
|
|
52
|
+
[JDBMProgressHUD showLoading];
|
|
53
|
+
|
|
54
|
+
// 隐藏加载框
|
|
55
|
+
[JDBMProgressHUD hideLoading];
|
|
56
|
+
|
|
57
|
+
// ✅ 推荐:在 Controller 的 bindViewModel 中使用
|
|
58
|
+
self.viewModel.loadingBlock = ^(BOOL isLoading) {
|
|
59
|
+
if (isLoading) {
|
|
60
|
+
[JDBMProgressHUD showLoading];
|
|
61
|
+
} else {
|
|
62
|
+
[JDBMProgressHUD hideLoading];
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## JDBMSimpleAlertView - 弹窗
|
|
70
|
+
|
|
71
|
+
### 基本规范
|
|
72
|
+
|
|
73
|
+
**[必须]** 引入头文件 `#import <JDBMUIKitModule/JDBMSimpleAlertView.h>`
|
|
74
|
+
**[必须]** 使用 `WEAK_SELF` 避免循环引用
|
|
75
|
+
**[建议]** 标题不超过 15 个字,详细说明放在 `contentStr`
|
|
76
|
+
**[禁止]** 在弹窗回调中再次弹窗
|
|
77
|
+
|
|
78
|
+
### 常用示例
|
|
79
|
+
|
|
80
|
+
```objective-c
|
|
81
|
+
// 确认操作(双按钮)
|
|
82
|
+
JDBMSimpleAlertView *alertView = [JDBMSimpleAlertView initWithTitle:@"确定删除吗?"
|
|
83
|
+
contentStr:@"删除后将无法恢复"
|
|
84
|
+
cancelStr:@"取消"
|
|
85
|
+
submitStr:@"确定"];
|
|
86
|
+
WEAK_SELF
|
|
87
|
+
[alertView setClickSubmitBlock:^{
|
|
88
|
+
[weakSelf.viewModel deleteItem];
|
|
89
|
+
}];
|
|
90
|
+
[alertView showAction];
|
|
91
|
+
|
|
92
|
+
// 提示信息(单按钮)
|
|
93
|
+
JDBMSimpleAlertView *alertView = [JDBMSimpleAlertView initWithTitle:@"操作成功"
|
|
94
|
+
contentStr:nil
|
|
95
|
+
cancelStr:nil
|
|
96
|
+
submitStr:@"确定"];
|
|
97
|
+
[alertView showAction];
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
---
|
|
2
|
+
inclusion: manual
|
|
3
|
+
---
|
|
4
|
+
# 设计规范使用规范
|
|
5
|
+
|
|
6
|
+
> **说明**: 一站式设计规范,AI 只需读这个文档就能实现 UI 代码
|
|
7
|
+
> **完整宏定义**: 查看源码 `JDBMUIKitModule/ColorMacro.h`、`FontMacro.h` 等
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 颜色使用规范
|
|
12
|
+
|
|
13
|
+
### 基本规范
|
|
14
|
+
|
|
15
|
+
**颜色使用原则**:
|
|
16
|
+
- **标准色使用宏定义**:优先使用 `ColorMacro.h` 中定义的 `tdd_color_xxx` 宏
|
|
17
|
+
- **非标色使用 Category**:设计稿中的非标准色使用 `UIColor (JDCategory)` 扩展
|
|
18
|
+
|
|
19
|
+
**具体规范**:
|
|
20
|
+
- **[必须]** 标准色必须使用 `ColorMacro.h` 中定义的常量
|
|
21
|
+
- **[必须]** 引入头文件 `#import <JDBMUIKitModule/ColorMacro.h>`
|
|
22
|
+
- **[重要]** `tdd_color_xxx` 宏定义已经是 `UIColor` 对象,可以直接使用
|
|
23
|
+
- **[必须]** 非标准色或需要透明度时,使用 `UIColor (JDCategory)` 扩展
|
|
24
|
+
- **[必须]** 引入头文件 `#import <JDUIColorCategoryModule/UIColorAdditions.h>`
|
|
25
|
+
- **[禁止]** 在代码中硬编码颜色值(如 `[UIColor colorWithRed:...]`)
|
|
26
|
+
|
|
27
|
+
### 常用颜色清单
|
|
28
|
+
|
|
29
|
+
**文本色**:
|
|
30
|
+
```objective-c
|
|
31
|
+
tdd_color_font_400 // #1A1A1A - 主要文本(标题、重要信息)
|
|
32
|
+
tdd_color_font_300 // #666666 - 次要文本(正文、描述)
|
|
33
|
+
tdd_color_font_200 // #999999 - 辅助文本(提示、说明)
|
|
34
|
+
tdd_color_font_100 // #CCCCCC - 禁用文本
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**品牌色**:
|
|
38
|
+
```objective-c
|
|
39
|
+
tdd_color_brand_normal // #F82C45 - 品牌色(按钮、强调)
|
|
40
|
+
tdd_color_brand_gradient_normal_1 // #FF4E63 - 渐变起点
|
|
41
|
+
tdd_color_brand_gradient_normal_2 // #F82C45 - 渐变终点
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**功能色**:
|
|
45
|
+
```objective-c
|
|
46
|
+
tdd_color_success_normal // #00C38F - 成功提示
|
|
47
|
+
tdd_color_error // #F82C45 - 错误提示
|
|
48
|
+
tdd_color_warning // #DE851C - 警告提示
|
|
49
|
+
tdd_color_nfos_normal // #4D84FE - 信息提示
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**填充色**:
|
|
53
|
+
```objective-c
|
|
54
|
+
tdd_color_fill_200 // #F4F6F6 - 页面背景
|
|
55
|
+
tdd_color_fill_100 // #FAFAFA - 卡片背景
|
|
56
|
+
tdd_color_white // #FFFFFF - 白色
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**线条色**:
|
|
60
|
+
```objective-c
|
|
61
|
+
tdd_color_line_100 // #F4F4F4 - 分割线
|
|
62
|
+
tdd_color_line_200 // #EBEBEB - 边框
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**黑色透明度**:
|
|
66
|
+
```objective-c
|
|
67
|
+
tdd_color_black_80 // 黑色 80% - 深色遮罩
|
|
68
|
+
tdd_color_black_50 // 黑色 50% - 遮罩
|
|
69
|
+
tdd_color_black_10 // 黑色 10% - 浅色遮罩
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
> 💡 **完整颜色清单**: 查看源码 `JDBMUIKitModule/ColorMacro.h`
|
|
73
|
+
|
|
74
|
+
### 完整示例
|
|
75
|
+
|
|
76
|
+
```objective-c
|
|
77
|
+
// 引入头文件
|
|
78
|
+
#import <JDBMUIKitModule/ColorMacro.h>
|
|
79
|
+
#import <JDUIColorCategoryModule/UIColorAdditions.h>
|
|
80
|
+
|
|
81
|
+
// ✅ 标准色:直接使用宏定义(已经是 UIColor 对象)
|
|
82
|
+
_titleLabel.textColor = tdd_color_font_400; // 主要文本色
|
|
83
|
+
_descLabel.textColor = tdd_color_font_300; // 次要文本色
|
|
84
|
+
_hintLabel.textColor = tdd_color_font_200; // 辅助文本色
|
|
85
|
+
_brandButton.backgroundColor = tdd_color_brand_normal; // 品牌色
|
|
86
|
+
|
|
87
|
+
// ✅ 非标色:使用 UIColor (JDCategory) 扩展
|
|
88
|
+
_customView.backgroundColor = [UIColor colorWithHex:@"#F5A623"]; // 设计稿中的非标准色
|
|
89
|
+
|
|
90
|
+
// ✅ 需要透明度:使用 UIColor (JDCategory) 扩展
|
|
91
|
+
_maskView.backgroundColor = [UIColor colorWithHex:@"#000000" alpha:0.5];
|
|
92
|
+
|
|
93
|
+
// ✅ 使用颜色工具宏(BMColor 是 ColorMacro.h 中定义的宏)
|
|
94
|
+
_anotherView.backgroundColor = BMColor(@"#F82C45");
|
|
95
|
+
|
|
96
|
+
// ❌ 禁止:硬编码颜色值
|
|
97
|
+
_label.textColor = [UIColor colorWithRed:26/255.0 green:26/255.0 blue:26/255.0 alpha:1.0];
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### 渐变色使用
|
|
101
|
+
|
|
102
|
+
```objective-c
|
|
103
|
+
// 引入头文件
|
|
104
|
+
#import <JDBMUIKitModule/ColorMacro.h>
|
|
105
|
+
|
|
106
|
+
// 品牌渐变按钮(tdd_color_xxx 已经是 UIColor 对象)
|
|
107
|
+
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
|
|
108
|
+
gradientLayer.colors = @[
|
|
109
|
+
(__bridge id)tdd_color_brand_gradient_normal_1.CGColor,
|
|
110
|
+
(__bridge id)tdd_color_brand_gradient_normal_2.CGColor
|
|
111
|
+
];
|
|
112
|
+
gradientLayer.startPoint = CGPointMake(0, 0);
|
|
113
|
+
gradientLayer.endPoint = CGPointMake(1, 0);
|
|
114
|
+
gradientLayer.frame = button.bounds;
|
|
115
|
+
[button.layer insertSublayer:gradientLayer atIndex:0];
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 字体使用规范
|
|
123
|
+
|
|
124
|
+
### 基本规范
|
|
125
|
+
|
|
126
|
+
**字体使用原则**:
|
|
127
|
+
- **标准字号使用宏定义**:优先使用 `FontMacro.h` 中定义的 `tdd_font_size_x` 宏
|
|
128
|
+
- **非标字号使用扩展类**:设计稿中的非标准字号使用 `UIFont (BMFont)` 扩展
|
|
129
|
+
|
|
130
|
+
**具体规范**:
|
|
131
|
+
- **[必须]** 标准字号必须使用 `FontMacro.h` 中定义的常量
|
|
132
|
+
- **[必须]** 引入头文件 `#import <JDBMUIKitModule/FontMacro.h>`
|
|
133
|
+
- **[必须]** 使用 `UIFont (BMFont)` 扩展设置字体(支持字重)
|
|
134
|
+
- **[必须]** 引入头文件 `#import <JDBMUIKitModule/UIFont+BMFont.h>`
|
|
135
|
+
- **[建议]** 使用 `BMFont(x)` 宏快速创建字体(默认 Regular 字重)
|
|
136
|
+
- **[建议]** 使用适配宏(`tdd_font_size_x_adapter`)以支持不同屏幕尺寸
|
|
137
|
+
- **[禁止]** 在代码中硬编码字体大小(如 `[UIFont systemFontOfSize:16]`)
|
|
138
|
+
|
|
139
|
+
### 常用字体大小清单
|
|
140
|
+
|
|
141
|
+
```objective-c
|
|
142
|
+
tdd_font_size_1 // 30pt - 超大标题
|
|
143
|
+
tdd_font_size_2 // 24pt - 大标题
|
|
144
|
+
tdd_font_size_3 // 20pt - 中标题
|
|
145
|
+
tdd_font_size_4 // 18pt - 小标题
|
|
146
|
+
tdd_font_size_5 // 16pt - 正文
|
|
147
|
+
tdd_font_size_6 // 14pt - 辅助文字
|
|
148
|
+
tdd_font_size_7 // 12pt - 小字
|
|
149
|
+
tdd_font_size_8 // 10pt - 极小字
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**适配宏(支持不同屏幕尺寸)**:
|
|
153
|
+
```objective-c
|
|
154
|
+
tdd_font_size_1_adapter // 30pt * 屏幕适配系数
|
|
155
|
+
tdd_font_size_2_adapter // 24pt * 屏幕适配系数
|
|
156
|
+
tdd_font_size_5_adapter // 16pt * 屏幕适配系数
|
|
157
|
+
// ... 其他适配宏
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
> 💡 **完整字体清单**: 查看源码 `JDBMUIKitModule/FontMacro.h`
|
|
161
|
+
|
|
162
|
+
### 完整示例
|
|
163
|
+
|
|
164
|
+
```objective-c
|
|
165
|
+
// 引入头文件
|
|
166
|
+
#import <JDBMUIKitModule/FontMacro.h>
|
|
167
|
+
#import <JDBMUIKitModule/UIFont+BMFont.h>
|
|
168
|
+
|
|
169
|
+
// ✅ 标准字号:使用 BMFont 宏(推荐,默认 Regular 字重)
|
|
170
|
+
_label.font = BMFont(tdd_font_size_5); // 16pt 正文
|
|
171
|
+
|
|
172
|
+
// ✅ 标准字号 + 指定字重
|
|
173
|
+
_titleLabel.font = [UIFont bm_fontWithType:BMFontTypePFSCSemibold size:tdd_font_size_2]; // 24pt 半粗体
|
|
174
|
+
_subtitleLabel.font = [UIFont bm_fontWithType:BMFontTypePFSCMedium size:tdd_font_size_4]; // 18pt 中等字重
|
|
175
|
+
_bodyLabel.font = [UIFont bm_fontWithType:BMFontTypePFSCRegular size:tdd_font_size_5]; // 16pt 正文
|
|
176
|
+
|
|
177
|
+
// ✅ 标准字号:使用适配宏(支持不同屏幕尺寸)
|
|
178
|
+
_adaptiveLabel.font = BMFont(tdd_font_size_5_adapter);
|
|
179
|
+
|
|
180
|
+
// ✅ 非标字号:使用 UIFont (BMFont) 扩展
|
|
181
|
+
_customLabel.font = [UIFont bm_fontWithType:BMFontTypePFSCRegular size:15]; // 设计稿中的非标准字号
|
|
182
|
+
_customBoldLabel.font = [UIFont bm_fontWithType:BMFontTypePFSCSemibold size:15]; // 非标字号 + 半粗体
|
|
183
|
+
|
|
184
|
+
// ✅ 非标字号:使用自适应字体
|
|
185
|
+
_adaptiveCustomLabel.font = [UIFont bm_fontWithType:BMFontTypePFSCRegular adapterSize:15];
|
|
186
|
+
|
|
187
|
+
// ❌ 禁止:硬编码字体大小
|
|
188
|
+
_label.font = [UIFont systemFontOfSize:16];
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
> 💡 **完整字体类型**: 参考 `../4-library/category_library.md`
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 间距使用规范
|
|
196
|
+
|
|
197
|
+
### 基本规范
|
|
198
|
+
|
|
199
|
+
- **[必须]** 间距遵循 8pt 网格系统
|
|
200
|
+
- **[必须]** 引入头文件 `#import <JDBMUIKitModule/RadiusMacro.h>`
|
|
201
|
+
- **[建议]** 使用 `space_x` 宏定义楼层卡片间隔
|
|
202
|
+
- **[建议]** 其他间距使用 8 的倍数(8、16、24、32)
|
|
203
|
+
|
|
204
|
+
### 常用间距清单
|
|
205
|
+
|
|
206
|
+
```objective-c
|
|
207
|
+
space_1 // 0pt - 无间隔
|
|
208
|
+
space_2 // 8pt - 小间距(楼层卡片间隔)
|
|
209
|
+
space_3 // 8pt - 小间距
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**标准间距值**(8pt 网格系统):
|
|
213
|
+
```objective-c
|
|
214
|
+
4pt // 元素内部微调
|
|
215
|
+
8pt // 相关元素之间(小间距)
|
|
216
|
+
16pt // 组件之间(中间距)
|
|
217
|
+
24pt // 区块之间(大间距)
|
|
218
|
+
32pt // 页面区域之间(超大间距)
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
> 💡 **完整间距清单**: 查看源码 `JDBMUIKitModule/RadiusMacro.h`
|
|
222
|
+
|
|
223
|
+
### 完整示例
|
|
224
|
+
|
|
225
|
+
```objective-c
|
|
226
|
+
// 引入头文件
|
|
227
|
+
#import <JDBMUIKitModule/RadiusMacro.h>
|
|
228
|
+
|
|
229
|
+
// ✅ 推荐:使用间距常量
|
|
230
|
+
[view mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
231
|
+
make.top.equalTo(superview).offset(space_2); // 8pt
|
|
232
|
+
make.left.equalTo(superview).offset(16); // 页面边距
|
|
233
|
+
make.right.equalTo(superview).offset(-16);
|
|
234
|
+
}];
|
|
235
|
+
|
|
236
|
+
// ✅ 推荐:使用 8 的倍数
|
|
237
|
+
[cardView mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
238
|
+
make.top.equalTo(titleLabel.mas_bottom).offset(24); // 大间距
|
|
239
|
+
make.left.right.equalTo(self.view).inset(16); // 页面边距
|
|
240
|
+
}];
|
|
241
|
+
|
|
242
|
+
// ❌ 禁止:使用非 8 的倍数
|
|
243
|
+
[view mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
244
|
+
make.top.equalTo(superview).offset(15); // 不符合 8pt 网格
|
|
245
|
+
}];
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## 圆角使用规范
|
|
255
|
+
|
|
256
|
+
### 基本规范
|
|
257
|
+
|
|
258
|
+
- **[必须]** 所有圆角必须使用 `RadiusMacro.h` 中定义的常量
|
|
259
|
+
- **[必须]** 引入头文件 `#import <JDBMUIKitModule/RadiusMacro.h>`
|
|
260
|
+
- **[建议]** 根据元素大小选择合适的圆角
|
|
261
|
+
|
|
262
|
+
### 常用圆角清单
|
|
263
|
+
|
|
264
|
+
```objective-c
|
|
265
|
+
tdd_border_radius_2 // 4pt - 小按钮、标签
|
|
266
|
+
tdd_border_radius_5 // 8pt - 中按钮、输入框、卡片
|
|
267
|
+
tdd_border_radius_10 // 6pt - 大卡片
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
> 💡 **完整圆角清单**: 查看源码 `JDBMUIKitModule/RadiusMacro.h`
|
|
271
|
+
|
|
272
|
+
### 完整示例
|
|
273
|
+
|
|
274
|
+
```objective-c
|
|
275
|
+
// 引入头文件
|
|
276
|
+
#import <JDBMUIKitModule/RadiusMacro.h>
|
|
277
|
+
|
|
278
|
+
// ✅ 推荐:使用圆角常量
|
|
279
|
+
view.layer.cornerRadius = tdd_border_radius_5; // 8pt
|
|
280
|
+
view.layer.masksToBounds = YES;
|
|
281
|
+
|
|
282
|
+
// ✅ 推荐:圆形按钮
|
|
283
|
+
button.layer.cornerRadius = button.frame.size.width / 2.0f;
|
|
284
|
+
button.layer.masksToBounds = YES;
|
|
285
|
+
|
|
286
|
+
// ❌ 禁止:硬编码圆角值
|
|
287
|
+
view.layer.cornerRadius = 8.0f;
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## 安全区域使用规范
|
|
295
|
+
|
|
296
|
+
### 基本规范
|
|
297
|
+
|
|
298
|
+
- **[必须]** 使用 `SizeMacro.h` 中定义的安全区域常量
|
|
299
|
+
- **[必须]** 引入头文件 `#import <JDBMUIKitModule/SizeMacro.h>`
|
|
300
|
+
- **[必须]** 适配全面屏和非全面屏
|
|
301
|
+
|
|
302
|
+
### 常用安全区域清单
|
|
303
|
+
|
|
304
|
+
```objective-c
|
|
305
|
+
kIsIphoneX_or_later // 判断是否是全面屏
|
|
306
|
+
kBottom_SafeHeight // 底部安全区域高度(全面屏: 34, 非全面屏: 0)
|
|
307
|
+
kNavStatusBarHeight // 导航栏+状态栏高度(全面屏: 88, 非全面屏: 64)
|
|
308
|
+
kStatusBarHeight // 状态栏高度(全面屏: 44, 非全面屏: 20)
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
> 💡 **完整尺寸清单**: 查看源码 `JDBMUIKitModule/SizeMacro.h`
|
|
312
|
+
|
|
313
|
+
### 完整示例
|
|
314
|
+
|
|
315
|
+
```objective-c
|
|
316
|
+
// 引入头文件
|
|
317
|
+
#import <JDBMUIKitModule/SizeMacro.h>
|
|
318
|
+
|
|
319
|
+
// ✅ 推荐:使用安全区域常量
|
|
320
|
+
[view mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
321
|
+
make.top.equalTo(superview).offset(kNavStatusBarHeight); // 导航栏高度
|
|
322
|
+
make.bottom.equalTo(superview).offset(-kBottom_SafeHeight); // 底部安全区域
|
|
323
|
+
}];
|
|
324
|
+
|
|
325
|
+
// ✅ 推荐:判断是否是全面屏
|
|
326
|
+
if (kIsIphoneX_or_later) {
|
|
327
|
+
// 全面屏特殊处理
|
|
328
|
+
}
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## 价格使用规范
|
|
336
|
+
|
|
337
|
+
### 基本规范
|
|
338
|
+
|
|
339
|
+
- **[必须]** 所有价格显示必须使用 `PriceMacro.h` 中定义的宏
|
|
340
|
+
- **[必须]** 引入头文件 `#import <JDBMUIKitModule/PriceMacro.h>`
|
|
341
|
+
- **[建议]** 根据场景选择合适的价格梯度
|
|
342
|
+
|
|
343
|
+
### 常用价格梯度清单
|
|
344
|
+
|
|
345
|
+
```objective-c
|
|
346
|
+
tdd_price_1(price) // 优惠券(字号:18 + 30 + 18)
|
|
347
|
+
tdd_price_2(price) // 商详主页(字号:14 + 20 + 20)
|
|
348
|
+
tdd_price_3(price) // 结算页底部(字号:14 + 24 + 14)
|
|
349
|
+
tdd_price_4(price) // 商详浮层(字号:12 + 16 + 16)
|
|
350
|
+
tdd_price_5(price) // 常用价格、搜索、购物车(字号:12 + 18 + 12)
|
|
351
|
+
tdd_price_6(price) // 订单、结算(字号:14 + 14 + 14)
|
|
352
|
+
tdd_price_7(price) // 促销场景(字号:12 + 12 + 12)
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
> 💡 **完整价格清单**: 查看源码 `JDBMUIKitModule/PriceMacro.h`
|
|
356
|
+
|
|
357
|
+
### 完整示例
|
|
358
|
+
|
|
359
|
+
```objective-c
|
|
360
|
+
// 引入头文件
|
|
361
|
+
#import <JDBMUIKitModule/PriceMacro.h>
|
|
362
|
+
|
|
363
|
+
// ✅ 推荐:使用价格宏
|
|
364
|
+
UILabel *priceLabel = tdd_price_5(@"99.00"); // 常用价格样式
|
|
365
|
+
[self.view addSubview:priceLabel];
|
|
366
|
+
|
|
367
|
+
// ✅ 推荐:设置价格颜色
|
|
368
|
+
priceLabel.textColor = tdd_color_brand_normal;
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
inclusion: manual
|
|
3
|
+
---
|
|
4
|
+
# iOS 命名规范
|
|
5
|
+
|
|
6
|
+
> **说明**: 定义类、方法、变量、常量的命名规则
|
|
7
|
+
> **项目前缀**: 参考 `../4-library/project_structure.md`
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 通用规则
|
|
12
|
+
|
|
13
|
+
- **[必须]** 使用清晰、描述性的名称
|
|
14
|
+
- **[必须]** 所有命名使用英文
|
|
15
|
+
- **[必须]** 避免使用系统保留词
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 类命名
|
|
20
|
+
|
|
21
|
+
### 基本规范
|
|
22
|
+
|
|
23
|
+
- **[必须]** 使用大驼峰命名法(UpperCamelCase)
|
|
24
|
+
- **[必须]** 使用项目前缀(BM、JDBM)
|
|
25
|
+
- **[必须]** 文件名与类名完全一致
|
|
26
|
+
- **[必须]** 一个文件只包含一个类
|
|
27
|
+
|
|
28
|
+
### 示例
|
|
29
|
+
|
|
30
|
+
```objective-c
|
|
31
|
+
// ✅ 正确
|
|
32
|
+
BMUser // 用户模型
|
|
33
|
+
BMLoginViewController // 登录控制器
|
|
34
|
+
BMUserViewModel // 用户视图模型
|
|
35
|
+
|
|
36
|
+
// ❌ 错误
|
|
37
|
+
User // 缺少前缀
|
|
38
|
+
BMLoginVC // 使用缩写
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 协议命名
|
|
42
|
+
|
|
43
|
+
```objective-c
|
|
44
|
+
// ✅ 正确
|
|
45
|
+
BMUserDelegate // 代理协议
|
|
46
|
+
BMCacheProtocol // 通用协议
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 方法命名
|
|
52
|
+
|
|
53
|
+
### 基本规范
|
|
54
|
+
|
|
55
|
+
- **[必须]** 使用小驼峰命名法(lowerCamelCase)
|
|
56
|
+
- **[必须]** 方法名是动词或动词短语
|
|
57
|
+
- **[必须]** 布尔方法以 `is`、`has`、`can`、`should` 开头
|
|
58
|
+
- **[必须]** 初始化方法以 `init` 开头
|
|
59
|
+
|
|
60
|
+
### 示例
|
|
61
|
+
|
|
62
|
+
```objective-c
|
|
63
|
+
// ✅ 正确
|
|
64
|
+
- (void)fetchUserDataWithID:(NSString *)userID;
|
|
65
|
+
- (BOOL)isSelected;
|
|
66
|
+
- (void)setupViews;
|
|
67
|
+
|
|
68
|
+
// ❌ 错误
|
|
69
|
+
- (void)getData; // 不够具体
|
|
70
|
+
- (BOOL)selected; // 布尔方法缺少 is 前缀
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## 变量与属性命名
|
|
76
|
+
|
|
77
|
+
### 基本规范
|
|
78
|
+
|
|
79
|
+
- **[必须]** 使用小驼峰命名法
|
|
80
|
+
- **[必须]** 布尔属性使用 `is`、`has`、`should` 前缀
|
|
81
|
+
- **[必须]** 私有实例变量使用下划线前缀
|
|
82
|
+
- **[必须]** 代理属性命名为 `delegate`
|
|
83
|
+
|
|
84
|
+
### 示例
|
|
85
|
+
|
|
86
|
+
```objective-c
|
|
87
|
+
// ✅ 正确
|
|
88
|
+
@property (nonatomic, strong) NSString *title;
|
|
89
|
+
@property (nonatomic, assign) BOOL isSelected;
|
|
90
|
+
@property (nonatomic, weak) id<BMViewDelegate> delegate;
|
|
91
|
+
NSMutableArray *_privateItems; // 私有变量
|
|
92
|
+
|
|
93
|
+
// ❌ 错误
|
|
94
|
+
@property (nonatomic, strong) NSString *titleString; // 包含类型信息
|
|
95
|
+
@property (nonatomic, assign) BOOL selected; // 缺少 is 前缀
|
|
96
|
+
UIButton *btn; // 使用缩写
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 常量与枚举命名
|
|
102
|
+
|
|
103
|
+
### 常量命名
|
|
104
|
+
|
|
105
|
+
```objective-c
|
|
106
|
+
// ✅ 正确
|
|
107
|
+
static NSString * const kBMDefaultUsername = @"guest";
|
|
108
|
+
static CGFloat const kBMDefaultPadding = 10.0f;
|
|
109
|
+
|
|
110
|
+
// ❌ 错误
|
|
111
|
+
#define DefaultUsername @"guest" // 应使用常量
|
|
112
|
+
static NSString * const kDefaultUsername = @"guest"; // 缺少前缀
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### 枚举命名
|
|
116
|
+
|
|
117
|
+
```objective-c
|
|
118
|
+
// ✅ 正确
|
|
119
|
+
typedef NS_ENUM(NSInteger, BMUserType) {
|
|
120
|
+
BMUserTypeRegular,
|
|
121
|
+
BMUserTypePremium,
|
|
122
|
+
BMUserTypeAdmin
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
// ❌ 错误
|
|
126
|
+
typedef enum {
|
|
127
|
+
Regular, // 缺少前缀
|
|
128
|
+
Premium
|
|
129
|
+
} UserType; // 应使用 NS_ENUM
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## 通知命名
|
|
135
|
+
|
|
136
|
+
```objective-c
|
|
137
|
+
// ✅ 正确
|
|
138
|
+
static NSString * const BMUserDidLoginNotification = @"BMUserDidLoginNotification";
|
|
139
|
+
|
|
140
|
+
// ❌ 错误
|
|
141
|
+
static NSString * const UserLoggedIn = @"UserLoggedIn"; // 缺少前缀
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## 图片资源命名
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
// ✅ 正确
|
|
150
|
+
bm_login_button_normal.png
|
|
151
|
+
bm_icon_settings.png
|
|
152
|
+
|
|
153
|
+
// ❌ 错误
|
|
154
|
+
loginBtn.png // 缺少前缀
|
|
155
|
+
BMLoginButton.png // 使用大写
|
|
156
|
+
```
|