一. 开发工具
1. CocoaPods
CocoaPods是项目依赖管理工具--提供第三方开源库的管理。如:
- 不需要对某些开源库设置特殊编译参数-fno-objc-arc。
- 不需要手动添加相对应系统依赖库framework.
- 方便开源库的更新
1.1 安装CocoaPods
在终端运行下面命令:
- sudo gem install cocoapods
- pod setup
另外mac自带的ruby的软件源rubygems.org因为使用亚马逊的云服务,所以被屏蔽了,需要更新一下ruby的源,如下:
- gem sources --remove https://rubygems.org/
- gem sources -a http://ruby.taobao.org/
- gem sources -l
使用CocoaPods只需要把用到的第三方开源库放到项目目录下的Podfile文件中,即:

然后在终端cd 到项目目录下,再执行 pod install 安装就可以了。每次更改了Podfile文件,都需要重新执行一次pod update命名(如果遇到项目冲突,可以使用:pod update --verbose --no-repo-update)
2. 网络封包分析工具Charles
2.1 Charles 主要功能
- 支持SSL代理。可以截取分析SSL的请求。(SSL--有相关证书加密的链接).
- 支持流量控制。可以模拟慢速网络,以及等待时间较长的请求。
- 支持AJAX调试。可以自动将jsons或者xml数据格式化,方便查看。
- 支持AMF调试,可以将Flash Remoting或Flex Remoting信息格式化,方便查看。
- 支持重发网络请求,方便后端调试。
- 支持修改网络请求参数。
- 支持网络请求的截取和动态修改。
- 检查HTML、CSS和RSS内容是否符合W3C标准(validator.w3.org/).
传送门:关于charles 对于app开发的具体功能操作 --唐巧博客。
3.马克鳗(Mark man 传送门:www.getmarkman.com)
是一款免费标注的工具,使用它可以方便地输出设计图稿上的元素的大小、颜色、边距、说明等。如下图:

二. 开发实践
1. UIWebView或WKWebView(iOS8.0)的混合编程
基于WebView的混合编程是同时使用原生的控件和WebView来展现应用界面的。
1.1 什么时候应该用webView?
- 排版复杂。包括图文混排,链接支持点击。
- 界面的变化需求频繁
- 界面对用户的交互需求不复杂
2. 混合编程模块渲染引擎
在实际开发中,webView控件接受一个HTML内容,用于呈现相应的界面。
2.1 方法一:[NSString stringWithFormat:] <img scr=http::////////> <strong> wwwww </strong> <p sssdsdsd> </p>
NSString *webContent = [NSString stringWithFormat:@"<html><head></head><body>%@</body></html>",webContent]; baseURL:nil];[_webView loadHTMLString:webContent];
- 模糊内容和代码混在一起,不方便阅读,也不方便更改。
- 模板的渲染逻辑使用简单的[NSString stringWithFormat:]来完成,功能单一(表现在数据的二次处理)。
2.2.1 MGTemplateEngine(传送门:mattgemmell.com/mgtemplatee…),它的模块渲染引擎比较重量级,可以自定义Filter。它需要依赖RegexKit,RegexKit是一个正在正则表达式工具类,提供强大的正则表达式匹配和替换功能。
2.2.2 GRMustache渲染因轻量级,匹配和替换规则是作者提供。(传送门:下载地址)
- 把GRMustache 接入项目,建议用pod。
- 创建html,css,js对应文件。填写各文件功能。
创建文件名为test.html
<html>
<head>
css--->%@
</head>
<body>
<h1>
{{ title }}
</h1>
<p>
{{ content }}
</p>
js->%@
</body>
</html>然后再代码中把该文件读取到内存中,在使用GRMustache的renderObject方法生成渲染后的HTML内容。上代码:
NSURL *urlPath = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"html"];
NSString *html = [NSString stringWithContentsOfURL:urlPath encoding:NSUTF8StringEncoding error:nil];
NSDictionary *renderObject = @{@"title":@"我是标题",@"content":@"我是内容"};
NSString *content = [GRMustacheTemplate renderObject:renderObject fromString:html error: nil];
[_webView loadHTMLString:content baseURL:nil];
这样,我们使用GRMustache模块引擎成功完成了HTML内容渲染工作。
注:renderObject的key必须和html设置的值一一对应。
三. 开发技巧
3.1 删除未使用的图片
app经过多次迭代,会残留一些被更换了的图片。如何知道自己的工程有哪些图片资源未被使用的呢?提供一个小工具,
链接地址:jeffhodnett-Unused 或者 LSUnusedResources(github链接)
下载完成后运行工程跟着操作即可。
3.2 打包ipa包
按照Xcode文档正常的操作打包是非常慢的,为了提供效率我提供2个方法。这2个方法的原理是一样的。
- 项目里面的所有断点去掉,command+B 编译程序
- 创建一个名为Payload文件
- 找到项目目录Pruducts->xxx.app (show in finder) 把该目录下的程序拷贝到Payload文件里面,压缩文件夹,更改后缀名为ipa。
另一个方法是有脚本进行打包。用sublime工具创建build_app.sh文件
mkdir ${appName}
mkdir ${appName}/Payload
cp -r ${appName}.app ${appName}/Payload/${appName}.app
cp Icon.png ${appName}/iTunesArtwork
cd ${appName}
zip -r ${appName}.ipa Payload iTunesArtwork
ipaName=Gemall_${version}_${environmental}_`date +20%y%m%d`_01.ipa
mv $project_path/${appName}/${appName}.ipa $project_path/${ipaName}
rm -rf $project_path/${appName}
exit 0
##
#appName 项目名字
#version 版本号
#environment 接口环境
#project_path 项目的绝对路径
在终端运行 sh build_app.sh即可打包。
3.3 修复线上不知名奔溃
3.3.1 奔溃Application received signal SIGABRT
原理:在 Xcode 8 中,当你资源文件中[含有16位图]或者[图片显示模式γ值为'P3']且iOS targets设定为iOS 9.3以下就会出现这个问题. 如果你的app需要支持广色域显示的话,那你必须得把target设置成iOS 9.3+,相反,如果你的app不需要支持广色域且你想兼容 iOS 9.3 之前的项目,你就得把所有的16位的或者显示模式为'P3'图片全都替换成8位模式的SRGB颜色的图片。步骤:- 找到项目目录Pruducts->xxx.app (show in finder)
- 在终端cd .../your.app
- find . -name 'Assets.car'
- sudo xcrun --sdk iphoneos assetutil --info Assets.car > /tmp/Assets.json
- open /tmp/Assets.json
打开assets.json并查找包含有 “DisplayGamut" : “P3” 或者相关的内容.如果有,叫UI重新切一份。
四.开发分享
关于iOS 性能优化梳理: 基本工具、业务优化、内存优化、卡顿优化、布局优化、电量优化、 安装包瘦身、启动优化、网络优化等---分享连接