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
199 0
iOS Principle:CGAffineTransform
|
安全 Unix API
iOS Principle:CALayer(下)
iOS Principle:CALayer(下)
188 0
iOS Principle:CALayer(下)
|
iOS开发
iOS Principle:CALayer(中)
iOS Principle:CALayer(中)
165 0
iOS Principle:CALayer(中)
|
API C语言 iOS开发
iOS Principle:CALayer(上)
iOS Principle:CALayer(上)
200 0
iOS Principle:CALayer(上)
|
存储 缓存 iOS开发
iOS Principle:weak
iOS Principle:weak
229 0
iOS Principle:weak
|
存储 iOS开发
iOS Principle:Notification(下)
iOS Principle:Notification(下)
132 0
iOS Principle:Notification(下)
|
设计模式 iOS开发
iOS Principle:Notification(上)
iOS Principle:Notification(上)
158 0
iOS Principle:Notification(上)
|
Web App开发 JSON 移动开发
iOS Principle:ReactNative(下)
iOS Principle:ReactNative(下)
211 0
iOS Principle:ReactNative(下)
|
移动开发 前端开发 JavaScript
iOS Principle:ReactNative(中)
iOS Principle:ReactNative(中)
136 0
iOS Principle:ReactNative(中)
|
移动开发 开发框架 自然语言处理
iOS Principle:ReactNative(上)
iOS Principle:ReactNative(上)
157 0

热门文章

最新文章

  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 2
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 3
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 4
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 5
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 6
    iOS各个证书生成细节
  • 7
    iOS开发-UIScrollView原理
  • 8
    iOS - Swift NSPoint 位置
  • 9
    【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记5 Data Structures、Methods、Properties
  • 10
    iOS:应用程序的线程安全性