前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >让Xcode 在 Release 场景下默认开启NSAssert

让Xcode 在 Release 场景下默认开启NSAssert

作者头像
酷酷的哀殿
发布2020-12-02 11:44:27
1.2K0
发布2020-12-02 11:44:27
举报
文章被收录于专栏:酷酷的哀殿酷酷的哀殿

经常用 NSAssert 的同学会发现如下现象:通过 Xcode 创建工程会默认在 Release 模式关闭 NSAssert

为了方便避免歧义,后续 Release模式统一用 Configuration-Release 场景代替

本篇文章会简单介绍 Xcode 的内部工作方式,并提供一种让XcodeConfiguration-Release 场景 默认开启NSAssert 的方案。

Xcode 的内部工作方式

1、Demo 工程

如下所示,当开发者创建新的工程时 ,Xcode 会创建 ssxxss.xcodeproj/project.pbxproj 文件:

ssxxss.xcodeproj/project.pbxproj 文件会有如下配置:

Xcode 的 Build Settings 页面显示如下:

  • <span Configuration-Release 场景ENABLE_NS_ASSERTIONS = YES
  • <span Configuration-Release场景ENABLE_NS_ASSERTIONS = NO

2、默认配置文件

实际上,上面的配置来源是 XcodeTemplateInfo.plist 模板文件:

代码语言:javascript
复制
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project\ Templates/Base/Base_ProjectSettings.xctemplate/TemplateInfo.plist

如下,TemplateInfo.plist 存在一个默认的配置,在Project Configurations Release 路径下,存在默认的配置项:

代码语言:javascript
复制
ENABLE_NS_ASSERTIONS = NO

该配置项的含义是:

  • <span Configuration-Release 场景 下,增加配置项 ENABLE_NS_ASSERTIONS = NO

2、Clang LLVM 1.0.xcspec

构建系统 (BuildSystem)运行时,Xcode 会读取下面路径的配置文件:

代码语言:javascript
复制
/Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Clang\ LLVM\ 1.0.xcplugin/Contents/Resources/Clang\ LLVM\ 1.0.xcspec

如下,Clang LLVM 1.0.xcspec 存在如下与NS_BLOCK_ASSERTIONS 相关的配置:

该配置的含义是:1、 在 预处理阶段Preprocessing,对于文件类型 sourcecode.c.objcsourcecode.cpp.objcpp,增加新的命令行参数。2、默认的命令行参数是 空字符串3、当 Configuration-* 场景存在 ENABLE_NS_ASSERTIONS = NO 的配置时,命令行参数是 -DNS_BLOCK_ASSERTIONS=1

3、NSAssert

SDK 的头文件中,NSAssert 会通过宏判断 NS_BLOCK_ASSERTIONS 是否被定义。如果定义不存在,会将 NSAssert 重写为真正的断言处理逻辑否则,会重写为空逻辑do {} while (0)

通过 Xcode 创建工程会默认在 Release 模式关闭 NSAssert

通过对 Xcode 工作原理的简单讲解,我们可以猜测修改TemplateInfo.plist 模板文件后,就可以实现本文的目录。

1、修改配置文件

代码语言:javascript
复制
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project\ Templates/Base/Base_ProjectSettings.xctemplate/TemplateInfo.plist

2、验证

新建工程后,打开 Xcode 的 Build Settings 页面:

  • <span Configuration-Release 场景ENABLE_NS_ASSERTIONS = YES
  • <span Configuration-Release场景ENABLE_NS_ASSERTIONS = YES

总结

本篇文章通过简单介绍 Xcode 的内部工作方式,并提供一种让XcodeConfiguration-Release 场景 默认开启NSAssert 的方案。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 酷酷的哀殿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Xcode 的内部工作方式
    • 1、Demo 工程
      • 2、默认配置文件
        • 2、Clang LLVM 1.0.xcspec
        • 3、NSAssert
        • 通过 Xcode 创建工程会默认在 Release 模式关闭 NSAssert
          • 1、修改配置文件
            • 2、验证
            • 总结
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档