粗谈Xcode build setting 和build phaese

相信很多人写iOS项目仅仅是按照默认醒目生成的配置去写代码,没有去深究过哪些编译配置是什么。这里来介绍总结一下一些相关的配置选项,还有我近来工作的碰到的一些问题,以及最后的解决。

build setting :

顾名思义,这是项目编译前的一些配置。说道项目的编译过程,大家都知道是将源文件(.c , .m等)通过编译转化为目标文件(.o),再通过链接器将.o文件转化为可执行文件。链接的过程就是把醒目里的一些引用库 连进来。有点扯远了。。。  言归正传,这个栏目里的设置很多,就说说一些常见的吧。

Architecture:

Valid Architecture:意思是项目所支持的手机的CPU架构,目前常用的也就是arm64,armv7,armv7s。

armv7设备 : iPhone 4, iPhone 4S

armv7s设备:iPhone 5,iPhone 5s, iPhone 5c

arm64设备:iPhone 5s iPhone 6 iPhone 6s ,iPhone 6p iPhone 7,iPhone 7p

build options:

Enable Bitcode:bitcode是被编译程序的一种中间形式的代码。包含bitcode配置的程序将会在App store上被编译和链接。bitcode允许苹果在后期重新优化程序的二进制文件,而不需要重新提交一个新的版本到App store上。这一项是与ipa包有关系,具体不会影响到性能,但是有的第三方是不支持这一项的,例如 大家熟知的JSONKit 所以需要把这个默认的yes改为no。

Enable Testbility:这是单元测试有关选项,项目里如果没有单元测试 就关了吧。之前先项目里转到(iOS 10 xcode 8)有个问题,不知道有没有使用face++做活体和人脸识别的,这个选项如果是yes会报编译错误,但是(iOS 9,xcode 7)没有问题。原因我也不晓得了。。。如果有人知道的话,欢迎留言。

Linking :

Other Link Flags :这是XCode的链接器参数,有-ObjC ,-all_load, -force_load等取值。

-ObjC:是将项目里的OC类和分类在最后链接到可执行文件中

-all_load:是项目的将所有都链接到可执行文件中,哪怕是一个txt文件。。。

-force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载。

默认是只加载 OC 类文件,这个在写项目时没什么影响,但当你写的是.a或者framwork的时候。不加-ObjC或者-all_load,而.a中又有 分类的话 就会报错,因为这个分类并不会被编译到.a中。

Signing:

code sign identity:证书的描述文件,开发用开发的。打包的时候用企业的。

development Team:证书所属的单位。

Prefix header: pch文件。这个不用多讲了吧。。。

Search Path:

User header search paths 和header search path:Library / Header Search Paths是一定会去搜索的。而User Header Search Paths只有在Always Search User Paths为Yes时才会被搜索。编码时候通过 #include 引入头文件的方式有两种 <> 和 ""。<> 是只从 Header Search Paths 中搜索, 而 "" 则能从  Header Search Paths 和 User Header Search Paths 中搜索。换言之 ,假如你把 路径加到  User Header Search Paths 中,那么 你用 #include的方式去引入对应的头文件,就会报错。 如果加到  Header Search Paths,  就没有问题了。

$(SRCROOT) 这个是 当前工程的意思,添加的项目前需要加$(SRCROOT)/...   当然 项目默认是从项目路径下查找,但是项目里有多个target的时候,这个地方就是设置的关键了。

-------------------------------------------华丽的分割线-------------------------------------------

build phaese :

build phaese选项卡

Target Dependencies :就是项目中有多个 target ,而当前的target 需要依赖其他的target,这些target 最后的product是 .a活着framwork。

Compile Sources :

1.是项目里要编译的.m文件,这里有个细节:当编译.a文件的时候可以从这里把你不想编译到.a的文件去掉,但是在原来的.a项目里不会出现编译错误。当把.a导入其他项目调用时 ,会报错误,说那个你去掉的文件例如a.o文件不存在,这说明没有编译进去。如果你的项目里有a.m就不会报错啦。
这个用处就是:给别的项目打包.a的时候很容易出现文件冲突,因为各种泛滥的第三方。。。像afn,sdwebimage等,这时就可以通过去掉.a里对应的文件,前提是 你们使用的版本不要有太大的区别。当然啦,最好不要再.a文件中引用第三方啦,或者 自己去把类名修改成全世界都不会重复的一份,哈哈哈 至少是用的人不会重复。那我就顺便把一个可以统一修改类名的方法的链接贴出来 .

2. 有的是用MRC写的第三方库例如 JSONKit,需要在后边的 compile flags加上-fno-objc-arc表示不启用ARC。

Link Binary With Libraries:   这里是项目用到的第三方类库和系统类库。没啥可说的了

Copy Bundle Resources:这是项目用的资源文件。



下期预告 把我设计sdk的过程和心得叙述一下,多阅读好的源码,才会有更快的进步。







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

推荐阅读更多精彩内容

  • 仅以方便自己查阅记录前言1.静态库和动态库有什么异同?静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗...
    190CM阅读 4,151评论 0 4
  • 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别...
    吃瓜群众呀阅读 11,845评论 3 42
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,566评论 18 139
  • 读诗 读诗 你看到的是一个个隽美方块 我看到的是方块间隙半躲半露饥饿的挣扎的灵魂 垂吊在蓝色网线的另一头 用比特的...
    舒己怀_Frank阅读 746评论 30 39
  • 何谓傻子?在我看来,傻子与弱智、脑残不同,他们身上有着两种极端的性格特征,一方面他们知识浅薄,阅历不深,还未形成扎...
    颜牧之阅读 3,102评论 15 24