iOS开发编码规范与审核时的注意事项
一. 编码的排版格式
1 代码的缩进应使用空格(SPACE),不能使用制表符(TAB),并且缩进以2个字符为单位。
2 空格的使用
a) 关键字与其后的表达式之间要有空格,如:if (expr)或for (expr)
b) 单目操作符不应与它们的操作数分开(如’!’和’^’等)。
c) 除‘,’外,其它双目操作符应与它们的操作数用空格隔开。如:
i=i+1; //错误的写法,操作符两端没有空格
i =i + 1; //正确的写法,
if(a>b) //错误的写法,逻辑判断符号两端没有空格
if(a> b) //正确的写法
d).h中协议<>前面有一个空格。
e) .h中成员声明时,类型与变量之间有至少1个空格。*号靠近变量,不靠近类 型。
f) @property后留1个空格,()里面,逗号紧跟前一变量,与后一变量之间留1个空格。()外面,先留1个空格,再声明属性。
g) 方法的+,-后面与()之间留1个空格。
h) 返回类型与*之间留1个空格,方法参数中返回类型与*之间留1个空格。
i) 在多参数方法中,每个参数后面都有1个空格。
3 关于空行
a).h中的空行
1)、文件说明与头文件包含(#import)之间空1行
2)、头文件包含(#import)之间,如果需要分类区别,各类别之间空1行。
3)、头文件包含(#import)与@class之间空2行。
4)、@interface与@class之间空1行。
5)、头文件{}里面,空1行开始声明对象成员,如果需要分类区别,各类别之间空1行。
6)、头文件{}外,空1行书写属性,如果需要分类区别,各类别之间空1行。
7)、属性下面空1行开始写方法,如果需要分类区别,各类别之间空1行。
8)、方法完成后,空1行@end。
9)、如果需要声明protocol,空2行接着写。通常protocol写在@end后面,但是声明在@interface之前。
b).m中的空行
1)、文件说明与头文件包含(#import)之间空1行
2)、头文件包含(#import)之间,如果需要分类区别,各类别之间空1行。
3)、@implementation和@synthesize之间空1行, 如果需要分类区别,各类别之间空1行。
4)、@synthesize与方法之间空1行。
5)、方法与方法之间空1行。
c) 方法里面的空行
1)、变量声明后需要空1行,如果需要分类区别,各类别之间空1行。
2)、条件、循环和选择语句,整个语句结束,需要空1行。
3)、各功能快之间空1行。
4)、最后一个括弧之前不空行。
5)、注释与代码之间不空行。
6)、#pragma mark与方法之间空1行。
d) 每行代码最多不得操作100个字。设置如下:
Xcode=> Preferences => TextEditing => Page Guide at column /输入 100即可。
二.命名规范
1 类
1) 所有的类名,接口名(Protocol)均以大写字母开头,多单词组合时,后面的单词首字母大写。类,接口名必须是有意义的。
2) 继承自UIView的类以View结尾。
例如:OperatorUsersInfomationView,LabelView等。
3) 继承自ViewController的类以viewController结尾。
例如:HomePageViewController,LoginViewController等。其他类推。
4) 所有保存数据的实体以Model结尾。例如:UserModel
2 方法
1) 方法名首字母小写,多单词组合时,后面的单词首字母大写。方法的参数使用相同的规则。
2) 方法名+参数应尽量读起来像一句话。
3) getter的方法名和变量名应相同。不允许使用“get”前缀。如:
- (id) getDelegate; // 错误
- (id)delegate; // 正确
3 变量
1) 变量必须起有意义的名字,使其他组员可以很容易读懂变量所代表的意义,变量命名可以采用同义的英文命名,可使用几个英文单词,第一个单词首字母小写,其他单词首字母大写。
例如:NSString *userName;
2) 对于一些特殊类型的变量,命名时要带上类型,如NSArray 的变量命名为xxxArray,其他的如xxxDictionary,xxxSize等。这样就可以从名称上知道是什么类型的变量。千万不能将NSArray的变量命名为xxxDictionary。
3) 成员变量使用“_”作为前缀。
4 常量
1) 避免在程序中直接出现常数,使用超过一次的应以宏定义的形式来替代。
2) 常量的命名应当能够表达出它的用途,并且用大写字母表示。
三.iOS应用审核注意事项
基本要点
首先,你的应用程序:
● 不能导致手机故障(比如崩溃或屏幕问题)
● 长时间或过渡使用之后反应仍然很快
● 不要使用任何SDK里面的私人API
● 不要使用任何SDK文档里面没有列出的功能
● 不要提及用户设备上不存在的硬件功能
● 如果需要网络连接,在没有网络的情况下要告知用户
● 不要(过渡)模仿任何本地应用程序
● 不要(过渡)山寨某个本地应用的功能
● 运行若干次之后不要过期或停止工作
● 不要使用任何未经批准的硬件配件
● 不要“无意中”发生这样的事情:不受限制的网页浏览、显示歌词、未经过滤的图书
● 不要恶搞知名的公众人物,不管是死是活
● 不要包含能够执行下载文件的脚本解释器、插件或其它运行时(runtime)
● 不要使用连续震动
● 在每个输入区域使用相关的键盘(比如在输入手机号的地方要调出数字键盘)
● 在表格视图下,如果选中多行会调出另一个视图的话,那么应该取消选中当前视图中的行
● 仅在连接WiFi的情况下才能播放视频或下载其它大型文件
● 如需发送私人数据到服务器,需要告知用户,并提供取消选项
● 不要偷偷使用摄像头或话筒
● 使用GPS功能是为了给用户带来切实的好处,而不是仅仅是广告或跟踪
● 绝不要崩溃
遵守苹果的用户界面指南(HumanInterface Guidelines)
● 应用看上去设计精美、品质上乘
● 本地按钮图标与其本地动作保持一致
● 活动指示图标不能转个没完没了
● 触碰之后可以激活按钮
● 屏幕布局可以处理好高度加倍的状态栏(比如通话期间)
● 停止应用时应保存状态,下次启动时可以恢复
● 如果支持横屏模式,横屏设计也要很美
iPad特别注意事项:
● 你的应用应该从各个方向都能使用,如果仅支持横屏和竖屏,那么上下两个方向都要支持
● 弹出窗口里面不应该包含其它弹出窗口,也就是选择弹出窗口里面的东西不会激活另一个弹出窗口Y
● 一次不能弹出两个及以上窗口
提交应用程序文件时的细节:
● 程序文件名字和iTunes应用商店里面显示的名字要一致,或者是缩写
● iTunes中的描述要准确描述应用的功能,说到做到
● iTunes描述不包括价格信息
● iTunes描述中不能包括Android、黑莓等苹果竞争对手的名字
● iTunes描述不能提及尚未发布的iOS版本
● iTunes关键词要和应用功能相匹配
● iTunes关键词不能包含其他应用的名称
● 如果你的应用售价超过100美元或者应用内购买金额超过100美元,那么应该标记为17+
● 应用截屏不能包含错误状态,包括iAd的错误
● 应用分类与其功能相符
● 应用中的彩蛋无伤大雅,需要在演示账户中透露
● 提供各种尺寸的图标:57,72 (iPad),114,512
● 不同尺寸的图标都包含同样的内容
● 版本号大于等于1.0
● info.plist文件中所需要的设备功能和应用的实际需求相符
● 应用使用情况和操作系统版本兼容性相符
● NSZombieEnabled设为NO
● 如使用推送通知,需要在entitlements.plist中添加用于“aps-environment”授权信息
● 若使用推送通知,你的应用ID必须已经激活推送通知功能
● 在更新iTunes的“新功能”介绍时,内容要和应用实际变化相符
● 更新应用时,要做到名副其实,并且更新能够被用户发现
● 更新后的应用版本号要大于上个版本
杂项:
● 应用要有足够大的市场,比如不能直供小部分人私下里使用
● 应用里不能存在已经作废的和未来版本发布有关的按钮和功能
● 简化(Lite)版应用必须能用;也就是说也要做到名副其实
● 简化(Lite)版应用不能有时间限制
● 简化(Lite)版应用不得显示完整版应用的价格
● 作为应用的一部分,应用加载的网页必须是线上的,并且可用
● 任何相关的email地址都必须存在并且可用
● 所有应用升级和其他交易都必须通过苹果应用商店完成
● 应用不能是一个简单的浏览器窗口中的的网站
● 应用必须满足任何相关的管制规定,比如涉及医疗的应用
● 若使用加密,必须已经通过BIS注册,并能提供文档
● 如果你的应用需要登录,需要提供测试账户
● 如果应用使用MapKit,不得隐藏或掩饰GoogleLogo
● 如果使用摄像头,不得关闭快门声音
版权、商标、所有权
● 能证明你拥有或有权使用应用中的所有代码
● 能证明你拥有或有权使用应用中的所有作品
● 能证明你有权使用应用中的所有品牌名、公众人物名和其他商标材料
● 比如图片和图标不能有偏光效果的边界
● 比如图片和图标不能包含iPhone和其他苹果产品
● 你能证明拥有或有权使用应用中的所有视频、音乐和歌词