iOS Principle:LLVMAndClang(下)

简介: iOS Principle:LLVMAndClang(下)

脚本编译打包


脚本化编译打包对于CI(持续集成)来说,十分有用。iOS开发中,编译打包必备的两个命令是:


//编译成.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

之前写的一套基于 Python 的编译打包脚本 (https://github.com/ReverseScale/AutoBuildScript/blob/master/autobuild.py)


提高项目编译速度


通常,当项目很大,源代码和三方库引入很多的时候,我们会发现编译的速度很慢。在了解了XCode的编译过程后,我们可以从以下角度来优化编译速度:


1)查看编译时间


我们需要一个途径,能够看到编译的时间,这样才能有个对比,知道我们的优化究竟有没有效果。


对于XCode 8,关闭XCode,终端输入以下指令


defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES

然后,重启XCode,然后编译,你会在这里看到编译时间。


image.png


2)代码层面的优化

2.1)forward declaration


所谓forward declaration,就是@class CLASSNAME,而不是#import CLASSNAME.h。这样,编译器能大大提高#import的替换速度。


2.2)对常用的工具类进行打包(Framework/.a)


打包成Framework或者静态库,这样编译的时候这部分代码就不需要重新编译了。

2.3)常用头文件放到预编译文件里


XCode的pch文件是预编译文件,这里的内容在执行XCode build之前就已经被预编译,并且引入到每一个.m文件里了。


3)编译器选项优化

3.1)Debug模式下,不生成dsym文件

上文提到了,dysm文件里存储了调试信息,在Debug模式下,我们可以借助XCode和LLDB进行调试。所以,不需要生成额外的dsym文件来降低编译速度。


3.2)Debug开启Build Active Architecture Only

在XCode -> Build Settings -> Build Active Architecture Only 改为YES。这样做,可以只编译当前的版本,比如arm7/arm64等等,记得只开启Debug模式。这个选项在高版本的XCode中自动开启了。


3.3)Debug模式下,关闭编译器优化

编译器优化


image.png


更多深入学习

关于 iOS 编译 Clang LLVM 相关的知识整理参见:深入剖析 iOS 编译 Clang LLVM


版权声明


此系列文章内容多为网上资料整理,文章结尾会列出参照链接,如有纰漏欢迎讨论🤗

以上文章整理自:https://my.oschina.net/u/2345393/blog/820141https://linuxtoy.org/archives/llvm-and-clang.htmlhttps://blog.csdn.net/hello_hwc/article/details/53557308https://github.com/ming1016/study/wiki/深入剖析-iOS-编译-Clang---LLVM


目录
相关文章
|
iOS开发
iOS Principle:CGAffineTransform
iOS Principle:CGAffineTransform
145 0
iOS Principle:CGAffineTransform
|
安全 Unix API
iOS Principle:CALayer(下)
iOS Principle:CALayer(下)
138 0
iOS Principle:CALayer(下)
|
iOS开发
iOS Principle:CALayer(中)
iOS Principle:CALayer(中)
121 0
iOS Principle:CALayer(中)
|
API C语言 iOS开发
iOS Principle:CALayer(上)
iOS Principle:CALayer(上)
144 0
iOS Principle:CALayer(上)
|
存储 缓存 iOS开发
iOS Principle:weak
iOS Principle:weak
120 0
iOS Principle:weak
|
存储 iOS开发
iOS Principle:Notification(下)
iOS Principle:Notification(下)
90 0
iOS Principle:Notification(下)
|
设计模式 iOS开发
iOS Principle:Notification(上)
iOS Principle:Notification(上)
101 0
iOS Principle:Notification(上)
|
Web App开发 JSON 移动开发
iOS Principle:ReactNative(下)
iOS Principle:ReactNative(下)
155 0
iOS Principle:ReactNative(下)
|
移动开发 前端开发 JavaScript
iOS Principle:ReactNative(中)
iOS Principle:ReactNative(中)
99 0
iOS Principle:ReactNative(中)
|
移动开发 开发框架 自然语言处理
iOS Principle:ReactNative(上)
iOS Principle:ReactNative(上)
121 0