iOS开发进阶观后-上篇(辅助工具篇)
简介
- 本篇主要内容是ios开发中常用的辅助工具总结,分为目前已使用辅助工具和将要使用工具二个方面,在此过程中还会涉及一些相关的打包脚本,持续化集成等等。
前言
-
由于篇幅问题,会分三篇描述对应不同内容。辅助工具,底层原理,开发中要注意问题三个方面,谈谈对应的总结。本人觉得书只是一个索引,特别对于技术类书籍,基本都是通过书籍引入一些观点,然后在通过其它第三方途径进行扩展。所以本文描述内容不一定就是书本内容,会与自身实践经验,还有部分内容精简和拓展。有些基础概念第三方描述已足够详细,实例也足够详细,本文仅仅提出一些个人总结理解,不在重复描述具体功能原理。
-
文字不如图片直观,所以先上一张本系列描述的观点的思维导图,梳理脉络。红色部分为本文内容梳理。
目前使用辅助工具
1 CocoaPods、Carthage
-
CocoaPods 相信做IOS的必须用上也没有什么可以说的,而Carthage可以说与CocoaPods同类,但是有更具轻量级, 特别对于一些CocoaPods暂时未更新到的版本,使用Carthage生成库更高效,并且不需要要引入各种依赖之类的。可以作为一种补充手段。
-
Carthage 参考《项目路径》
-
Carthage 参考《如何使用Carthage管理iOS依赖库》
-
Carthage 有个小坑,打包上传AppStore要注意frameworks包含的类型,如动态库中含有x86_64,i386…类型必须去除,会在这系列的其他篇幅细说内容。 参考《使用Embedded Framework(动态库)打包发布时遇到的错误,及解决方案》
2 Reveal
-
Reveal这个我从Xcode8版本就开始用了,其中在多本相关介绍IOS开发的说中都提及了,对于xcode自带的UI工具,强太多太多了,这个对于所有UI层级都清晰描述,并且对代码完全不需要修改。
-
Reveal 是一个界面调试工具。使用Reveal,我们可以在iOS开发时动态地查看和修改应用程序的界面。它类似Chrome的“审查元素”功能,我们不但可以在运行时看到iOS程序的界面层级关系,还可以实时地修改程序界面,不用重新运行程序就可以看到修改之后的效果。
-
如何下载,如何破解,请自行百度。
-
具体使用参考: 《iOS开发中集成Reveal》
-
不建议采用参考文章的配置方法,可以使用全局软断点处理:
UIApplicationMain
expr (Class)NSClassFromString(@"IBARevealLoader") == nil ? (void *)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 0x2) : ((void*)0)
3 json->model
- 暂时找不到web版json转oc模型的工具,所有找了一个开源转换软件极大简化了复杂json转模型问题,该软件需要自己编译。《码云-链接》
计划引入辅助工具
1 xctool/xcbuild/xcodebuild
-
书本有点过时,只说了xctool做打包。实际上,xctool是谷歌的打包工具这没错,但是那是Xcode8之前,xcode8之后拆分为xctool和xcbuild。前者专注测试用来跑用测试用例,后者专注于打包,相比xcodebuild,增量打包速度据网友测试,有明显优势。但是在本人使用过程中,pod引入的部分第三方库会有文件丢失问题,相比xcodebuild兼容性确实差了点。《xcbuild可用性分析报告 》
-
打算有时间的话,会写写单元测试,采用xctool做持续测试集成。
-
这是公司的一款XX直播助手的打包脚本使用的是xcodebuild,含上传蒲公英。DevelopmentExportOptionsPlist.plist和releaseBuild.sh都是放在工程根目录,生成文件按时间分类放在桌面。
DevelopmentExportOptionsPlist.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>teamID</key>
<string>6MQB4*****</string>
<key>method</key>
<string>development</string>
<key>compileBitcode</key>
<false/>
<key>uploadSymbols</key>
<true/>
<key>provisioningProfiles</key>
<dict>
<key>com.*.*</key>
<string>*</string>
</dict>
</dict>
</plist>
releaseBuild.sh
#工程名
project_name=*****
#打包模式 Debug/Release
development_mode= Debug
#scheme名
scheme_name=****
#plist文件所在路径
exportOptionsPlistPath=./DevelopmentExportOptionsPlist.plist
buildTime=$(date +%Y%m%d-%H%M)
#导出.ipa文件所在文件夹路径
exportFilePath=~/Desktop/$project_name-ipa/${development_mode}-${buildTime}
#导出.ipa路径想
exportIpaPath=${exportFilePath}/${project_name}.ipa
#上传描述
PgyerUpdateDescription=${1:- }
PgyerUKey="***"
PgyerApiKey="***"
#计时
SECONDS=0
echo '*** 正在 清理工程 ***'
xcodebuild \
clean -configuration ${development_mode} -quiet || exit
echo '*** 清理完成 ***'
echo '*** 正在 编译工程 For '${development_mode}
xcodebuild \
archive -workspace ${project_name}.xcworkspace \
-scheme ${scheme_name} \
-configuration ${development_mode} \
-archivePath build/${project_name}.xcarchive -quiet || exit
echo '*** 编译完成 ***'
echo '*** 正在 打包 ***'
xcodebuild -exportArchive -archivePath build/${project_name}.xcarchive \
-configuration ${development_mode} \
-exportPath ${exportFilePath} \
-exportOptionsPlist ${exportOptionsPlistPath} \
-quiet || exit
# 删除build包
if [[ -d build ]]; then
rm -rf build -r
fi
if [ -e $exportFilePath/$scheme_name.ipa ]; then
echo "*** .ipa文件已导出 ***"
cd ${exportFilePath}
echo "*** 开始上传.ipa文件 *** ${exportIpaPath}"
#此处上传分发应用
curl -F "file=@${exportIpaPath}" -F "updateDescription=${PgyerUpdateDescription}" -F "uKey=${PgyerUKey}" -F "_api_key=${PgyerApiKey}" https://www.pgyer.com/apiv1/app/upload --progress
echo "*** .ipa文件上传成功 ***"
else
echo "*** 创建.ipa文件失败 ***"
fi
echo "*** 打包完成 *** Total time: ${SECONDS}s"
2 ImageOptim
-
ImageOptim是个GUI,他实际上调用了很多命令行程序来实现压缩。其使用了多个图片库 PNGOUT, AdvPNG, Pngcrush, OptiPNG, JpegOptim, MozJPEG, jpegtran, Gifsicle and SVGO……,会选最优图片,以减小体积。《png 图片压缩工具ImageOptim是如何压缩图片的?》
-
图片压缩对APP大小体积有十分十分明显影响,所以这部分也是要抽时间去做处理。