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)

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 [email protected]
svn: E200009: '[email protected]': a peg revision is not allowed here
$ svn delete [email protected]@
D         [email protected]

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 问题

编译器错误:directory not found for option

查询 Library 报错

错误内容:"directory not found for option '-L/..."

解决方法:Project -> targets -> Build Setting -> Library Search Paths 删除该路径。

查询 Framework 报错

错误内容:"directory not found for option '-F/..."

解决方法:Project -> targets -> Build Setting -> Framework Search Paths 删除该路径。

参考

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

你可能感兴趣的:(iOS 编程:日常开发问题及解决方法汇总)