Xcode10 New Build System必须知道的五点

翻译自:Five Things You Must Know About Xcode 10 New Build System
发布日期是:Oct 26, 2018。现在很多问题都已经解决了。

New Build System,下文统一简称为NBS。

Apple在Xcode9中,以预览模式发布了NBS。那时候,NBS默认不激活。但是,在Xcode10中,NBS默认是激活的,在已有的iOS项目中,采用NBS,你可能会引发一些问题。Apple意识到了其中的一些问题,并单独为NBS发布了日志。他们还对一些已经发现的问题,提出了可能的解决方法。你可以阅读Apple的关于NBS的完整的发布日志Xcode New Build System。在之前发布的博客Blog中,我们已经介绍了NBS的内部细节。在这篇博客中,我们将会介绍iOS开发者面临的,但是Apple发布日志没有介绍的最普遍的五个问题。

Xcode 10: New Build System

回顾一下Xcode10的NBS,它可以Files-> Project/Workspace配置里激活,并且可以在新旧Build System之间来任意选择。

0_r8CjJs0AD_nz0uMj.gif

可以查看上一篇关于Build System的博客Blog,获得关于Build System的详细信息。如果你是用命令行的xcodebuild指令来build iOS项目,必须要传递额外的参数 UseModernBuildSystem=YES,它会强制Xcode使用NBS。新的构建系统称为xcbuild。 Apple的xcbuild二进制文件位于下面提到的路径中:
/Applications/Xcode.app/Contents/SharedFrameworks/XCBuild.framework/Versions/A/Support/xcbuild
NBS并行的构建Targets和Build Phases,以加快Swift项目的整体构建速度。一旦在Xcode里激活NBS,在享受到快速构建的好处时,我们也会面临NBS的相关问题。这里将会介绍一些NBS引发的最常见的问题,并同时提供这些问题可能的解决方法。我们根据在iOS项目里受影响的方面,将这些问题分类。

Info.plist

当iOS项目使用NBS时,一些关于info.plist的问题就开始出现了。这里关于NBS和info.plist文件的规则,你必须知道。
1.在任何Target的build phase里,Copy Bundle Resources里不应该包含任何plist文件,否则,NBS将无法构建app。同样,某个Bundle里文件被拷贝多次,NBS也无法工作。
2.NBS在执行Clean和增量构建时,运行Info.plist有不同的优先级。在Clean是,运行info.plist是在处理资源文件后,在关联storyboards之前,而增量构建是在签名之前。
3.如果Target只是拥有Info.plist文件,但是Info.plist文件不在任何Xcode关联的文件中时,NBS会运行失败。

CocoaPods

在iOS项目里使用CocoaPods,会引入一些问题,其中一些常见的如下:
1.开发模式的Pods不能更新,除非执行Clean。在Build Phase里嵌入的pods framework 不能可靠的执行。Github上的这个问题 here
2.项目的Archive可能会失败,或者因为一些与CocoaPods相关的build phase 脚本不能可靠的执行而导致的一些令人迷惑的行为。
总而言之,Cocoapods与NBS不能很好的协同工作。

Run Script Phase

使用NBS时,你可能会在运行脚本阶段失败或者抛出令人迷惑的结果。不要着急,原因如下:

在Xcode10,运行脚本阶段改进了很多,但是我们必须在运行脚本阶段,为构建系统指定输入文件。我们是否为run script阶段指定输入文件,对构建系统决定是否执行Target的脚本很重要。Xcode 构建系统尝试平行运行多个任务,如果运行脚本时,脚本依赖的输入文件还没有生成,构建系统就会产生困惑并失败。在任何可行的情况下,最好将输入文件提供给脚本。当输入文件的数量很多,Xcode10给我们提供了一种方式,在.xcfilelist格式的文件中指定所有的输入文件,然后将这个文件添加到build phase里。当没有输入文件,更改的输入文件或缺少输出文件时,Xcode构建系统将始终运行此构建阶段。添加这些文件非常重要,以避免在不需要时为所有增量构建运行此阶段。

Clean Build Folder Action

伴随着NBS,Xcode的Clean操作废弃了,引入了Clean Build Folder操作。新引入的操作会删除iOS应用程序的所有派生数据,从而导致从头开始构建更清洁的版本。这意味着如果你使用Cocoapods,这个操作会从头开始构建所有的frameworks,这将会导致构建iOS项目的巨大延迟。如果你使用重新构建frameworks的Carthage(另一种库管理工具),这个操作不会有太多的影响。如果你有Clean的习惯,你需要对这种延迟更加小心。你同样可能会面临缓慢的Xcode索引问题。

XCCONFIG Files

绝大部分开发者可能使用.xcconfig 文件,管理特殊Targets的Xcode build settings。在xcconfig文件里的条件变量赋值也会有问题,它们可能会超乎预料,引发构建失败。为了检查你的xcconfig文件,Apple建议运行如下命令:
defaults write com.apple.dt.XCBuild EnableCompatibilityWarningsForXCBuildTransition -bool YES
如果这条命令显示了警告和错误,我们需要修复它们以获得稳定的构建。

Conclusion

Apple设计了NBS是为了提升Swift构建的性能,稳定性和可靠性。在应用的开发前期,它可能会导致一些配置错误。NBS在Xcode10已经默认激活了,之后我们必须升级我们的构建过程去适应NBS。当然,NBS会为APP带来很多配置增强。你是否已经迁移到了NBS?你体验到了些什么?你是否遇到了这篇Blog里没有提到的问题呢?

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342