0%

iOS 日常开发问题及解决方法汇总

说明:该列表用于记录日常开发中遇到的编译问题和解决方法!

1. 编译器错误:Unsupported compiler ‘com.apple.compilers.llvmgcc42’ selected for architecture ‘armv7’

解决方法:
Build Settings - Build Options - Compile for C/C++/Objective-C 选项卡设置为:Default compiler(Apple LLVM 9.0)
Jietu20171222-165112.png

2. Missing .entitlements file 导致代码签名失败无法编译问题

此问题产生的原因是我在项目中 New Group with Flower 时无意间对名为 XXX.entitlements 的文件进行了移动。
导致 Targets - Build Settings - Signing - Code Signing Entitlements 这里提示找不到 .entitlements 的文件。

解决方法:重新设置 .entitlements 文件的完整路径。一开始我不知道是哪里有问题,就把 Code Signing Entitlements 这一栏的值清空了,然后去 TARGETS - General - Signing 中重新勾选 Automatically manage signing,Team 一栏空缺的话就重新勾选。然后 Capabilities 中 Push Notifications 如果有⚠️警告之类的提示就点击 fix 按钮。最后也可以解决问题,编译成功。

3. EXC_BAD_ACCESS 问题

参考: EXC_BAD_ACCESS 的本质详解以及僵尸模式调试原理

4. Xcode 8、9 屏蔽控制台多余的 Log 日志

Xcode 菜单栏 > Product > Scheme > Edit Scheme > Run > Arguments > Environment Variables 设置:
OS_ACTIVITY_MODE = disable

💡Tips
设置 DYLD_PRINT_STATISTICS = YES 可以在控制台打印加载时长。

参考:Xcode8 屏蔽控制台多余的 Log 日志

5. Xcode 升级到 8.2.1 后编辑区域码字意外退出

解决方法:查看意外退出报告,Finder 前往 plug-ins 目录,删除相关文件(KSImageNamed.ideplugin)。

参考:“Xcode” 意外退出 (无限意外退出) 问题的解决方法

6. Xcode 升级后插件失效错误分析与解决方案

参考 1参考 2

7. Xcode 删除文件后 Issue 导航栏 missing file 警告

解决方法:运行终端,执行命令行 cd 进入 missing file 目录,然后运行:
svn delete nameOfMissingFile
参考:Xcode 删除文件后 missing file 警告

某次删除图片文件显示警告: a peg revision is not allowed here
解决方法是加 @ 后缀:

$svn delete main_normal@2x-1.png
svn: E200009: 'main_normal@2x-1.png': a peg revision is not allowed here
$ svn delete main_normal@2x-1.png@
D         main_normal@2x-1.png

8. 真机调试 NSLog 无法打印

解决方法:使用 printf() 方法。或者使用 DDLog 日志框架。

#ifdef DEBUG

#define MYString [NSString stringWithFormat:@"%s", __FILE__].lastPathComponent
#define NSLog(...) printf("%s 第%d行: %s\n\n",[MYString UTF8String] ,__LINE__, [[NSString stringWithFormat:__VA_ARGS__] UTF8String]);

#else
#define NSLog(...)
#endif

参考:Xcode 8 解决真机测试 Log 被屏蔽的问题

9. 在 Storyboard 上修改了 Text 的文字,真机上调试并没有生效的问题

解决方法:汉化问题,Storyboard 下还有一个中文版副本
参考:IOS StoryBoard 修改对于真机无效的问题

10. 项目编译运行通过,断点在 main 函数上 breakpoint 1.2

解决方法:首先修改添加的 All Exception breakpoint:

再去控制台定位问题。

11. 调试打印方法名

// 在控制台打印方法名
NSLog(@"%s",__func__);
NSLog(@"%s",__FUNCTION__);
NSLog(@"%s",__PRETTY_FUNCTION__);
NSLog(@"%@",NSStringFromSelector(_cmd));

12. 自动布局约束发生歧义

解决方法:使用 _autolayoutTrance 方法
① 在视图控制器的 viewWillAppear: 方法中设置一个断点。
② 当程序在断点处停下来之后,在控制台输入:

(lldb) po [[UIWindow keyWindow] _autolayoutTrance]

如果应用界面与期望的方式不一致,同时也无法确定问题的原因,就可以使用该方法找出有歧义布局的视图。

13 设置严格选择器匹配

Build Settings:

-Wstrict-selector-match

14 iOS 解决 CUICatalog: Invalid asset name supplied 问题

参考

  • 多年 iOS 开发经验总结 (一) @杂雾无尘
  • 多年 iOS 开发经验总结 (二) @杂雾无尘
  • iOS - 常见问题的整理 (一) @重庆妹子在霾都
  • iOS - 常见问题的整理 (二) @重庆妹子在霾都

欢迎关注我的其它发布渠道