前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >扒虫篇-Bug日志 Ⅲ

扒虫篇-Bug日志 Ⅲ

作者头像
進无尽
发布2018-09-12 18:28:22
1.2K0
发布2018-09-12 18:28:22
举报
文章被收录于专栏:進无尽的文章進无尽的文章

1.一个警告点击后提示:Treating Unicode character as whitespace

对于追求完美的猿来说,解决警告有时也是必须的。

解决方法:可能是由于粘贴网页上的代码的时候两行之间的回车引起的,有未识别的回车或者换行,找到,删除掉就 OK了。

2.打包发布APP时验证的时候报错

Snip20170411_1.png

分析:照上面上面的提示就是说,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:

Paste_Image.png

问题解决。

4. 明明加了刷新了控件了,可是就是上拉没效果

这真是一个蛋疼的Bug,我使用的是 SDRefresh,一个Tb上明明加了上提加载的刷新,可是就是上提没有效果,还以为是什么问题了,折腾了2小时,研究底层,尝试了很多办法,还是不行, WTF !!!

解决办法:我之所以出现这样的现象是因为我的 Tb只有两条数据,只占到了Tb的1/3,当数据比较多时,数据铺满屏幕时,这个上提加载的效果就出来了,看来是 SDRefresh 的刷新机制是当数据比较少时,不触发刷新效果,这在情理之中又超出常规思维。

5. 真机调试,一处:Undefined symbols for architecture arm64:

Snip20170207_9.png

在集成 萤石SDK的时候,把应该添加的 系统类库都添加完了后,编译还是报这个错误,而原Dome中运行正常。

最后发现,原Dome里面的 openssl类库没有添加进来,才导致的这个错误。

OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。 其主要库是以C语言所写成,实现了基本的加密功能,实现了SSL与TLS协议。OpenSSL可以运行在绝大多数类Unix操作系统上。

OpenSSL了解更多

6. 真机调试,另一处:Undefined symbols for architecture arm64:

Snip20170208_2.png

这是使用SDWebImage 类库报的错,不知道什么原因,一样的代码在另一个工程中就不会出出现这样的报错,好无语。

解决办法: 导入 MapKit and ImageIO frameworks.即可。

7. #include "api/UserBind.h" 找不到

Snip20170216_1.png

导入了一个第三方文件夹,文件夹的目录是这样的:

Paste_Image.png

我们可以看到这是一个包含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 <string.h>,User Header Search Paths搜索目录下面的文件会覆盖系统的头文件。

C/C++ 头文件引用问题 include <> 引用编译器的类库路径下的头文件 include “” 引用工程目录的相对路径的头文件 include 是编译指令,在编译时,编译器会将相对路径替换成绝对路径,因此, 头文件绝对路径=搜索路径+相对路径。 Xcode Build Settings 下 Search Paths设置搜索路径 Header Search Paths:头文件搜索路径设置

(SRCROOT)宏和
(SRCROOT)宏和

(PROJECT_DIR)宏都指xxx.xcodeproj所在的父目录

Paste_Image.png

Paste_Image.png

Other Linker Flags:其他链接标签,当导入的静态库使用了类别,需要设为-ObjC。

Project的Building Settings中的设置默认并不被Targets继承,**只有当Targets的设置加入了

(inherited)时才被继承,**添加目录的时候写上 “
(inherited)时才被继承,**添加目录的时候写上 “

(inherited)” 就表示从frameworks里面读取。

*******************更新*******************

Paste_Image.png

Paste_Image.png

解决方法: Header Search Paths 设置

Paste_Image.png

这里要说一下,根据工程目录,我们可以看见有一层 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错误**
代码语言:javascript
复制
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
代码语言:javascript
复制
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 类库即可。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.01.16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.一个警告点击后提示:Treating Unicode character as whitespace
  • 2.打包发布APP时验证的时候报错
  • 3.使用[AVAudioPlayer play]会产生 libc++abi.dylib`__cxa_throw: 异常
  • 4. 明明加了刷新了控件了,可是就是上拉没效果
  • 5. 真机调试,一处:Undefined symbols for architecture arm64:
  • 6. 真机调试,另一处:Undefined symbols for architecture arm64:
  • 7. #include "api/UserBind.h" 找不到
  • 8. ....Podfile.lock:No such file or directory
    • 9.项目导入外部文件后编译运行出现Undefined symbols for architecture x86_64错误**
      • 10.编译报错_iconv
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档