1.一个警告点击后提示:Treating Unicode character as whitespace
对于追求完美的猿来说,解决警告有时也是必须的。
解决方法:可能是由于粘贴网页上的代码的时候两行之间的回车引起的,有未识别的回车或者换行,找到,删除掉就 OK了。
2.打包发布APP时验证的时候报错
分析:照上面上面的提示就是说,Bundle Identifier 和配置文件中的 ID是不一致的,可是我确认了很多次,确认是没问题,也重新打包了很多次,再次验证还是有这个问题。WTF?
解决办法:关闭其它所有工程,退出 Xcode文件,再重新打开目标工程(注意,只打开这一个工程,不要打开其他的工程),再次Archive ,验证,就没问题啦。这是由于打开多个工程造车的Bug,目前推测这是Xode 内部的Bug。
3.使用[AVAudioPlayer play]会产生 libc++abi.dylib`__cxa_throw: 异常
我调用AVAudioPlayer play方法,会莫名的产生__cxa_throw异常, 只是简单的调用系统的api,有时候可以,有时候会异常。
解决方案
由于xcode中设置了当所有异常出现时的全局断点,这是问题的关键。
解决办法是将all改为Objective-C:
问题解决。
4. 明明加了刷新了控件了,可是就是上拉没效果
这真是一个蛋疼的Bug,我使用的是 SDRefresh,一个Tb上明明加了上提加载的刷新,可是就是上提没有效果,还以为是什么问题了,折腾了2小时,研究底层,尝试了很多办法,还是不行, WTF !!!
解决办法:我之所以出现这样的现象是因为我的 Tb只有两条数据,只占到了Tb的1/3,当数据比较多时,数据铺满屏幕时,这个上提加载的效果就出来了,看来是 SDRefresh 的刷新机制是当数据比较少时,不触发刷新效果,这在情理之中又超出常规思维。
5. 真机调试,一处:Undefined symbols for architecture arm64:
在集成 萤石SDK的时候,把应该添加的 系统类库都添加完了后,编译还是报这个错误,而原Dome中运行正常。
最后发现,原Dome里面的 openssl类库没有添加进来,才导致的这个错误。
OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。
其主要库是以C语言所写成,实现了基本的加密功能,实现了SSL与TLS协议。OpenSSL可以运行在绝大多数类Unix操作系统上。
OpenSSL了解更多
6. 真机调试,另一处:Undefined symbols for architecture arm64:
这是使用SDWebImage 类库报的错,不知道什么原因,一样的代码在另一个工程中就不会出出现这样的报错,好无语。
解决办法: 导入 MapKit and ImageIO frameworks.即可。
7. #include "api/UserBind.h" 找不到
导入了一个第三方文件夹,文件夹的目录是这样的:
我们可以看到这是一个包含C/C++文件的文件夹。这就是问题所在,对于导入的 OC文件是不需要这样设置也可以搜索到的,因为是C/C++文件,才需要设置路径。
首先我们来了解下,有关iOS开发中的Search Paths设置问题:
添加目录的时候写上 “$(inherited)” 就表示从frameworks里面读取。
Library Search Paths
附加到项目中的第三方Library(.a files)的搜索路径,Xcode会自动设置拖拽到Xcode中的.a文件的路
Always Search User Paths
如果设置了Always Search User Paths为YES,编译器会优先搜索User Header Search Paths配置的路径,在这种情况下#include,User Header Search Paths搜索目录下面的文件会覆盖系统的头文件。
C/C++ 头文件引用问题
include <> 引用编译器的类库路径下的头文件
include “” 引用工程目录的相对路径的头文件
include 是编译指令,在编译时,编译器会将相对路径替换成绝对路径,因此,
头文件绝对路径=搜索路径+相对路径。
Xcode Build Settings 下 Search Paths设置搜索路径
Header Search Paths:头文件搜索路径设置
(PROJECT_DIR)宏都指xxx.xcodeproj所在的父目录
Other Linker Flags:其他链接标签,当导入的静态库使用了类别,需要设为-ObjC。
Project的Building Settings中的设置默认并不被Targets继承,**只有当Targets的设置加入了(inherited)” 就表示从frameworks里面读取。
*******************更新*******************
解决方法:
Header Search Paths 设置
这里要说一下,根据工程目录,我们可以看见有一层 Third,但是我们搜索路径中并未设置这一层,是因为,Third是虚拟目录,实际上并不存在的,而且我们不能设置为 ..../Pay/openssl 不能加上 /openssl,否则会仍然报错,因为报错图片中已经自带了一层 /openssl路径。
8. ....Podfile.lock:No such file or directory
心得:越诡异的Bug越有可能是最低级的手误造成的,比如新建A,对A初始化设置,实际使用的时候,又新建了B,使用了B,没有对B设置,这就造成了莫名其秒的Bug了。
开始的时候用pod install/update各种都没有用。后来试了这种方法,重新build就ok。
在工程设置中的Build Phases下删除Check Pods Manifest.lock及Copy Pods Resources
然后我删除了pods 工程,运行原工程时,报错,找不到一个路径。
最后在这发现了一个红色的文件,删除之,再次编辑就行啦。
9.项目导入外部文件后编译运行出现Undefined symbols for architecture x86_64错误**
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_Person", referenced from:
objc-class-ref in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
这说明编译没有问题,连接的时候出错了,找不到导入的目标文件。
遇到这种问题,首先想到的是导入文件编译环境发生了变化,所以先选择Product-Clean将项目缓存清理一下,Xcode清理项目缓存。但是这样做还是不行,那怎么办呢?
解决方案:
我们应该这样做,看项目有没有编译导入的文件,在这个位置查看:
选择项目-Build Phases选项卡-Compile Sources Xcode查看项目编译项目
这里只有一个main.m,Person.m没有被编译,当然错误了,将Person.m添加进去就OK了。点击下面的”+”添加,注意只添加.m文件,不添加头文件!
10.编译报错_iconv
Undefined symbols for architecture i386:
"_iconv", referenced from:
_mail_iconv in libmailcore.a(charconv.o)
"_iconv_open", referenced from:
_charconv in libmailcore.a(charconv.o)
_charconv_buffer in libmailcore.a(charconv.o)
"_iconv_close", referenced from:
_charconv in libmailcore.a(charconv.o)
_charconv_buffer in libmailcore.a(charconv.o)
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
解决办法:导入系统的 libiconv.tbd 类库即可。