扒虫篇-Bug日志 Ⅲ

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:头文件搜索路径设置

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

Paste_Image.png

Paste_Image.png

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

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

(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错误**

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 类库即可。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏魏艾斯博客www.vpsss.net

解决 WordPress 插件更新“需要访问您网页服务器权限”的问题

36260
来自专栏大内老A

深入剖析ASP.NET的编译原理之二:预编译(Precompilation)

在本篇文章的第一部分:深入剖析ASP.NET的编译原理之一:动态编译(Dynamical Compilation),详细讨论了ASP.NET如何进行动态编译的,...

20270
来自专栏圣杰的专栏

IdentityServer4 知多少

现在的应用开发层出不穷,基于浏览器的网页应用,基于微信的公众号、小程序,基于IOS、Android的App,基于Windows系统的桌面应用和UWP应用等等,这...

30920
来自专栏有困难要上,没有困难创造困难也要上!

Windows 包管理器 Chocolatey

418100
来自专栏大内老A

深入剖析ASP.NET的编译原理之二:预编译(Precompilation)

在本篇文章的第一部分:深入剖析ASP.NET的编译原理之一:动态编译(Dynamical Compilation),详细讨论了ASP.NET如何进行动态编译的,...

25360
来自专栏Python专栏

用python来更改小伙伴的windows开机密码,不给10块不给开机

28760
来自专栏信安之路

Window 提权基础

再加上个人的理解写出的关于 Windows 提权基础的文章,其中有些地方因为不太实用所以做了适当修改,感谢 @hl0rey 的帮助和建议。

27900
来自专栏FreeBuf

Xdigger Framework:一款网络安全测试辅助框架

*本文作者、Xdigger Framework开发者:guyoung Xdigger Framework是一款基于.Net Framework的网络安全测试辅助...

22170
来自专栏张善友的专栏

ASP.NET Web API 支持 CORS

Cross-Origin Resource Sharing (CORS) 是W3C草案拟定的浏览器与服务端如何进行跨域请求的方式,其原理是用自定义HTTP头来让...

22150
来自专栏包子铺里聊IT

刷题外传之如何优雅的杀掉进程

进程(Process)是 Unix/Linux 系统下编程的核心知识。无论是小 Script 还是大 Daemon,启动后都是以进程的形势在 OS 中存在和执行...

39660

扫码关注云+社区

领取腾讯云代金券