Feng's Notes

周海锋的个人博客

0%

iOS自动化集成

1.安装环境

1.1 环境说明

  • 搭建机器:Mac mini
  • 开发工具:XCode v8.2.1
  • Mac系统: OS X 10.12.5
  • jenkins版:2.46
  • sonarqube : 6.2
  • fastlane : 2.9.1
  • oclint : 0.11.1

1.2 安装jenkins

通过brew安装

brew install jenkins

Mac上开机自启动方法

# 设置开机自启动配置文件
ln -sfv /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents
# 载入配置文件
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
# jenkins服务的启动|停止
brew services [start|stop] jenkins

1.2 安装fastlane

# rubychina的 fastlane 上面的落后好几个版本,所以这里我们先把rubygems的源加回来
gem source -a https://rubygems.org/
gem install fastlane  

1.3 安装oclint

# 不走下面的命令直接install oclint的话, 下载的版本不是最新版, 文档将不能正常生成
brew tap oclint/formulae
brew install oclint

直接写在可能很慢,也可以通过迅雷等工具下载完以后,讲zip包放到brew cache 目录

# 查看brew cache目录
brew --cache
# 拷贝oclint-0.11.1.tar.gz 到目录以后,执行可以马上安装
brew install oclint

1.4 安装sonar

网上很多通过源码zip安装的方法,这里我们也通过brew 来安装

1.4.1 通过brew安装

brew install sonarqube

1.4.2 设置数据库用户

CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;

1.4.3 修改 /conf/sonar.properties

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
# 这里原来是localhost的,无法连接,改成127.0.0.1以后连接成功
sonar.jdbc.url=jdbc:mysql://127.0.0.1:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance

1.4.5 sonar汉化

汉化包下载地址

# 下载 sonar-l10n-zh-plugin-1.14.jar
# 下载后放到 /usr/local/Cellar/sonarqube/6.2/libexec/extensions/plugins 路径下,重启sonar即可

brew services restart sonarqube

1.4.6 Objective-C插件下载

Objective-C插件

# 下载 sonar-objective-c-plugin-0.5.0-SNAPSHOT.jar
# 放到 /usr/local/Cellar/sonarqube/6.2/libexec/extensions/plugins 路径下,重启sonar即可
brew services restart sonarqube

1.4.7 安装 sonar-scanner

jdk8下载

网上的教程里面只有 sonar-runner,但是官方那边只有sonar-scanner 可以下载,看了配置信息,应该是2.4版本以后改名了。

# 注意:sonar-scanner 需要 jre 1.8以上版本,也可以直接下载jdk 
brew install sonar-scanner

配置sonar-scanner

# 配置信息文件, 配置和sonarqube相同即可
/usr/local/Cellar/sonar-scanner/2.8/libexec/conf/sonar-scanner.properties

参考

iOS 开发规范

命名规范

统一要求

  • 尽量使用英文命名,同一个含义的不出现多个不同的单词
  • 命名才用驼峰命名法

    类名采用大驼峰(UpperCamelCase)
    类成员、方法小驼峰(lowerCamelCase)
    局部变量大小写首选小驼峰

视图命名

  • ViewController 不要采用VC这样的缩写,统一简化为Controller
  • UIView 级别的组件不要以 Controller 或 Displayer 结尾,如果起到管理作用可以使用 control 结尾
  • 大模块中的View 带上模块缩写 例如: MeiPai -> MPXXXView

协议命名

  • 好的协议名应能立刻让人分辨出这不是一个类名,除了以常用的 Delegate、DateSource 做结尾外

通知命名

基本命名格式是:[与通知相关的类名] + [Did | Will] + [UniquePartOfName] + Notification

NSApplicationDidBecomeActiveNotification
NSWindowDidMiniaturizeNotification
NSTextViewDidChangeSelectionNotification

临时变量命名

  • 临时变量可以写得很短,如 i、k、vc 这样;
  • 临时变量可以使用匈牙利前缀,但数据类型不可以作为前缀:

    // OK
    wCell, vcMaster, vToolbar
    // 糟糕,数据类型作为前缀
    bool_switchState, floatBoxHeight

缩写

可以使用广泛使用的缩写,如 URL、JSON,并且缩写要大写。但像将download简写为dl这种是不可以的。

// OK
URL,JSON, Password,  Animate
// 糟糕
Url, json,  psw,   anim
destinationSelection       
// OK
destSel                    
// 糟糕
setBackgroundColor:        
// OK
setBkgdColor:              
// 糟糕

代码格式

常量

常量定义示例:

  • 常量字符串

    NSString *const
    // 头文件
    extern ushort APIFetchPageSizeDefault; // 无const,可在外部修改

枚举

  • 采用Objective-C 规范的枚举
    typedef NS_ENUM(NSUInteger, DeviceType) {
    kDeviceTypeiOS,
    kDeviceTypeAndroid,
    kDeviceTypeUnkown
    }

空格

  • 类方法声明在方法类型与返回类型之间要有空格。
    // 糟糕
    -(void)methodName:(NSString *)string; 
    // OK
    - (void)methodName:(NSString *)string;
    // 条件判断的括号内侧不应有空格。
    
    // 糟糕
    if ( a < b ) {
    // something
    }
    
    // OK
    if (a < b) {
    // something
    }
    // 关系运算符(如 >=、!=)和逻辑运算符(如 &&、||)两边要有空格。
    
    // OK
    (someValue > 100) ? YES : NO
    
    // OK
    (items)?: @[]

花括号

  • 方法开始,if, for 等的花括号不要另起一行
    - (void)methodName:(NSString *)string {
    ↑空格                      ↑空格    ↑空格,花括号不要另起一行
    if (xxxx) {
    空格↑      ↑空格,花括号不要另起一行
    } else {
    空格↑   ↑空格,花括号不要另起一行
    }    
    }

    注释

变量注释

/** 应用ID */
@property (nonatomic, copy) NSString *appid;

方法注释

/** 设置UI */
- (void)setupUI;

/** 
* 设置UI 
* @params animate 是否带动画
*/
- (void)setupUI:(BOOL)animate;

文件组织

Config

存放基础配置信息,定义常用开发宏,和变量的地方

Common

常用的方法,扩展,类别、帮助类

Datas

统一管理 全局对象、数据存储,数据统计的地方

Network

我们采用集约式的Api请求方式,所有的Api请求都通过调用Network的方法来获取回调。

Classes

Classes 主要业务放置的地方,里面再按照模块划分,模块下面再根据MVC进行分类

SDK

这个目录放第三方的SDK,如UMeng、WeiboSDK、WeixinSDK等等

Vendor

原则上第三方库优先采用 Cocoapods 形式引入。部分不提供Pod接入,或者是需要在第三方库基础上进行修改的,则采用源码方式接入,放置在Vendor目录下面。

Resources

声音图片,配置信息等放置在Resources中