个中:[CP]开首的,就是CocoaPod插入的脚本。
- Check Pods Manifest.lock,用来检查cocoapod治理的三方库是否须要更新
- Embed Pods Framework,运行脚本来链接三方库的静态/动态库
- Copy Pods Resources,运行脚本来拷贝三方库的资本文件
而这些设备信息都存储在这个文件(.xcodeprog)里
到这里,CocoaPod的道理也就大年夜致搞清跋扈了,经由过程修改xcodeproject,然后设备编译期脚本,来包管三方库可以或许精确的编译连接。
同样,我们也可以插入本身的脚本,来做一些额外的工作。比如,每次进行archive的时刻,我们都必须手动调剂target的build版本,如不雅一不当心,就会忘记。这个过程,我们可以经由过程插入脚本主动化。
Object files
这段脚本其实很简单,攫取当前pist的build版本号,然后对其加一,从新写入。
应用起来也很简单:
- Xcode – 选中Target – 选中build phase
- 选择添加Run Script Phase
然后把这段脚本拷贝进去,并且勾选Run Script>
脚本编译打包
脚本化编译打包对于CI(持续集成)来说,十分有效。iOS开辟中,编译打包必备的两个敕令是:
不管是OC照样Swift,都是采取Clang作为编译器前端,LLVM(Low level vritual machine)作为编译器后端。所以简单的编译过程如图
- //编译成.app
- xcodebuild -workspace $projectName.xcworkspace -scheme $projectName -configuration $buildConfig clean build SYMROOT=$buildAppToDir
- //打包
- xcrun -sdk iphoneos PackageApplication -v $appDir/$projectName.app -o $appDir/$ipaName.ipa
- 经由过程info敕令,可以查看到具体的文档
- info xcodebuild
在本文最后的附录中,供给了我之前应用的一个主动打包的脚本。
进步项目编译速度
查看编译时光
我们须要一个门路,可以或许看到编译的时光,如许才能有个比较,知道我们的优化毕竟有没有效不雅。
插入脚本
对于XCode 8,封闭XCode,终端输入以下指令
- $ defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES
二进制文件的内容
然后,重启XCode,然后编译,你会在这里看到编译时光。
代码层面的优化
forward declaration
所谓forward declaration,就是@class CLASSNAME,而不是#import CLASSNAME.h。如许,编译器能大年夜大年夜进步#import的调换速度。
对常用的对象类进行打包(Framework/.a)
打包成Framework或者静态库,如许编译的时刻这部分代码就不须要从新编译了。
常用头文件放到预编译文件里
XCode的pch文件是预编译文件,这里的内容在履行XCode build之前就已经被预编译,并且惹人到每一个.m文件里了。
然后,拖动这个脚本的到Link Binary With Libraries下面
编译器选项优化
Debug模式下,不生成dsym文件
上文提到了,dysm文件里存储了调试信息,在Debug模式下,我们可以借助XCode和LLDB进行调试。所以,不须要生成额外的dsym文件来降低编译速度。
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wundeclared-selector"
- ///代码
- #pragma clang diagnostic pop
Debug开启Build Active Architecture>
放在声明分号“;”前面。
后续
- buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
- buildNumber=$(($buildNumber + 1))
- /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"
推荐阅读
早期进修 Node.js 的时刻 (2011-2012),有挺多是大年夜 PHP 转过来的,当时有部分人对于 Node.js 编辑完代码须要重启一下表示麻烦(PHP不须要这个过程),于是社区里的同伙就开端倡导应用 >>>详细阅读
本文标题:iOS编译过程的原理和应用
地址:http://www.17bianji.com/lsqh/34703.html
1/2 1