Xcode常见报错及bug整理


1.头文件导入时报错

类似这种看关键词,是在编译时候发现了重复,可以全局搜索一下,

首先看看是不是导入头文件时候将   .h后缀误写成了.m

其次在Targets-Build Phases-Compile sources中查找错误提示中的类名,看是不是有两个完全重复的.m文件

2.使用三方库时报错


添加极光推送时按照网上的一些文章,没有细看极光的官网,少添加了一个 .tbd 文件,添加了libresovl.tbd后就可以了


这里的重点是: Undefined symbols 如果对真机和模拟器架构不是十分清楚的话容易被后面的架构所迷惑关于架构方面的可以参考这里链接感谢原作者

这种情况通常是用三方时候少加依赖库了,仔细看看官方文档,看看需要添加哪些库一般就可以解决了

3.  'libxml/tree.h' file not found

正确做法因该是Header Search Paths 设置为    ${SDKROOT}/usr/include/libxml2

4.在使用自己的写的动态库(Framework)时遇到的问题:

Could Not build module 'Social(或其它的名字xxxx)'

解决:change In target setting the "Allow Non-modular Includes in Framework modules" setting to YES(从stackoverflow查到的答案)

5.使用socket.io(swift写的) 时报错

描述:dyld: Library not loaded: @rpath/libswiftCore.dylib

Referenced from: /private/var/containers/Bundle/Application/76625E1A-5250-4FA4-807D-09B1877A3F13/X001.app/Frameworks/SocketIO.framework/SocketIO

Reason: image not found。

解决:1.将这个设置为 YES

2.如果是非苹果官方的库,要将embed那里进行设置,进行嵌入embed framework

6.单元测试

单元测试时因为是一个独立的工程,所以把Framework的路径重新配置一下,否则会报找不到framework,直接在Project里进行配置,单元测试的工程里就也有了。

这个地方有个坑:当你直接把framework拖过去的时,他生成 的是一个文件的路径,而不是文件夹的目录路径,所以要将最后面那个文件给手动删掉

参考连接 感谢作者的分享

7. 团队开发,git 提交不完成,导致找不到某个文件


没有该文件

背景:团队开发中,一个兄弟用了个三方库,里面包含了SDWebImage,他删除了工程中原来的SD库,然后在git提交时,自己的图片库中包含的SD没有提交,当时他忘记在蓝色文件夹前面打勾了,他以为那个没用,结果,其他人pull代码之后就发现问题了,找不到这个文件

解决方案:让那个同事将他没有提交的库,打上勾,提交一下,再pull下,就没问题了。

8. 关于代理的生命周期问题会出现的bug

背景:一个单例类CCODSeatManager,里面有个代理协议CCODSeatManagerDelegate,里面有针对登录登出,电话,IM 的相关代理方法,最典型的是登录,登出,初始化登录后,在登录页面有登录成功的代理回调,这个时候,这个单例被当前VC持有,代理的生命周期在登录这个VC里面 ,现在去 登出VC,里面也有这个单例的代理,然后登出的代理执行完之后,反初始化,然后再回到登录界面,进行初始化登录,相关的代理方法就不走了,因为当前的代理被登出VC持有,所以需要在登录中重新设置一下代理,所以这种情况,需要在viewWillAppear中设置一下。

9.电脑内存不够,导致莫名报错

因为公司电脑是128G的,导致有时候莫名的报错,因为xcode运行时候,需要运行空间,进行数据相关的备份和整理,这时候如果空间不够用,就会有各种问题,此时,要首先clean,删除derivedata,还不行,就要重启电脑,删一些东西,六点空闲空间出来。

10 library not found for -lstdc++.6.0.9 相关问题

首先需要下载相关的缺少的库 传送门,感谢作者

真机支持,找到真机路径:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib

将lstdc++.6.0.9  放到这个目录下;

模拟器支持,模拟器路径

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib

将下面的文件放到这个目录下


模拟器支持


还有一个路径

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/

将上面的那三个库也放到这三个路径下面

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别...
    吃瓜群众呀阅读 14,151评论 3 42
  • 仅以方便自己查阅记录前言1.静态库和动态库有什么异同?静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗...
    190CM阅读 9,810评论 0 4
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,376评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,399评论 19 139
  • 五色令人目盲,五音令人耳聋,五味令人口爽,驰骋畋猎令人心发狂,难得之货令人行妨。——老子《道德经·第三十四章》 英...
    6897e1c6fd79阅读 2,325评论 0 0