iOS 活死人对象调节和测量检验

2019-09-15 19:12 来源:未知
一、 在Xcode8下包容iOS10,大家会在调控台境遇下边那么些警示错误:
nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK failed: [42] Protocol not available, dumping backtrace:

图片 1截图 1.png

标题陈说

多年来,发掘Xcode的模拟器更加的不靠不住了,应用开辟完,在模拟器下面各样流畅种种运维得飞起,可是安装到真机之后,就崩溃了,是闪退啊!~~o(>_<)o ~~

在模拟器上边没不平时,然则装到真机的时候,开掘闪退,那样比较难定位到原因。办法依旧有个别,难题也总能化解的。方法一:大家恐怕通过搜集手提式有线电话机的日志,查看崩溃日志;方法二:通过集成第三方的插件来追踪bug(举个例子:Tencent的bugly、友盟),可是提议只用一家的,因为多家的一齐用,或然会有别的题目;方法三:真机调节和测量检验。

为了赶快定位并消除难题,最后依旧采用了方法三,何况最后化解了问题。

上述都足以把没有须求的app项目删除。只怕定时删除旧的类型。

杀鸡取蛋措施:

跻身Product -> Scheme -> Edit Scheme,然后 Run -> Arguments,在Environment Variables上边加多

OS_ACTIVITY_MODE = disable

如图所示:

图片 2截图 2.png

在意:增多这几个将来,当您在Xcode上用真机调节和测验的时候,纵然你设置的是debug状态,但在调控台仍旧不会打字与印刷日志,那说不定会影响你调节和测验,所以在须要真机调节和测验的时候,能够一时把钩去掉。

如上消除措施参照他事他说加以考察这里。

2. 哪些调度丧尸对象

由此地点的真机调节和测验之后,开掘大家的前后相继崩在了三个格局里,况兼报错 “Thread 1:EXC_BAD_ACCESS(code=1,address=0x6000)”,这种不当平常是内部存款和储蓄器管理的标题,一般是拜谒了一度刑释的靶子形成的,可以张开丧尸对象(Zombie Objects)来定位难题。

首先步:依然张开Xcode 选用显示屏左上角Xcode-> PReferencese,不过大家这一次是要安装一下出口消息,调节和测量检验的时候输出越多的音讯,如下截图,勾上:

图片 3设置.png

其次步:再对情状变量进行设置:菜单Product > Scheme > Edit Scheme

把绿蓝圈里面包车型客车多个挑选都勾上

图片 4勾上

张开该选用后,程序在运作时,假设访谈了曾经出狱的指标,则会交到较标准的定势音信,可以扶助鲜明难题所在。

该意义的法则是,在对象释放(retainCount为0)时,使用叁个置于的Zombie对象,代替原先被放飞的靶子。无论向该对象发送什么音信,都会接触万分,抛出调节和测量试验音讯。

纪念在标题被修复后,关闭该成效!!

其三步:设置好后调节和测验程序,在输出分界面发现了-[CFString retain]: message sent to deallocated instance错误日志

到此处,就早就很分明看出来是哪些来头促成程序崩溃的了,然后再去分析代码,静下心来料定能消除难题的了。

自己那边是因为向贰个空的NSString类型发送消息导致崩溃的,不过那么些主题材料只在iOS9本子崩溃,iOS10就没难点,那个还值得搜求。

----------------2016年12月22日更新---------------

二、 missing file的警告

该警告出现的由来只怕是你剔除了无需的文书后,缓存中还是存在这一个记录,所以,化解格局是删除缓存:1.开采终端2.切换至近期文件夹3.施行上面包车型地铁两行命令

git rm -r --cached . #删除所有缓存git add . 

1. 真机调节和测量检验

从Xcode7之后,真机调节和测量试验已经是绝非其余秘籍了,我们只须要登记多少个苹果的开拓者账号就可以以无证件也得以真机调节和测验,操作如下:

首先步、张开Xcode 选用显示器左上角Xcode-> PReferencese

图片 5设置.png

第二步:选拔Account 点击左下角的 开关登录Apple ID第三步:登入你的Apple ID第四步:登录成功今后,在左边会突显小同伴的账号在iOS和Mac上都以free的,双击这一列(恐怕点击选拔view details)第五步:这里供给自然时间获得你的Apple ID的开荒者音讯,点击iOS Development 前面包车型客车create ,然后稍等片刻,直到create开关不见了。

图片 6添加Apple ID.png

第六步:到了那边基本上已经收尾----初步真机测量试验:展开须求真机测验的门类插上手提式无线电话机(Xcode第一回链接手提式有线电话机缘非常慢,可以挑选Xcode菜单栏中的window->devices查看手提式有线电电话机是或不是希图妥贴了),选拔品种文件-> General - > Team -> 选择你属于你的Apple ID ,再点击Team 上边包车型大巴fix issue修复Team 正下方的警示。

第七步:最终二个标题,你最终会开掘Xcode会弹出三个框(process launch failed: Security),这里须求开发你手提式有线电话机的安装->通用- > 描述文件-> 采取你的Apple ID - > 点击信任

由来,真机调节和测量检验的经过就做好了,是还是不是比原先轻巧多了

----------------------------------- 

3. 例子

为了能够越来越详实地证实调试丧尸对象,并牢固到崩溃的原由,下边列出二个简易的事例来注解:

先创制多少个DebugViewController,然后里面成立三个数组,然后释放,在Controller将在出现的时候,向该数组发送七个音信:

<pre>#import "DebugViewController.h"@interface DebugViewController ()@end@implementation DebugViewController/*定义一个数组*/static NSMutableArray*array;-viewDidLoad{[super viewDidLoad];array= [[NSMutableArray alloc]initWithCapacity:5];[array release];//释放掉该数组}

  • viewWillAppear:animated{[array addObject:@"Hello"];//使用释放掉的数组}@end</pre>

在我们预料之中,程序崩溃了,报错音信如下:

图片 7崩溃音讯.png

我们用LLDB po大家的数组array对象,一样未有回到

图片 8po数组对象

开荒“活动监视器”,在进度列表中找到测量检验应用程式对应的历程号PID(Xcode启用调节和测验后会在经过列表中找到对应应用程式的进度)

图片 9活动监视器.png

从上边标下划线的地点,大家收获多个根本的音信:

APP进程ID:21122

崩溃地址:0x陆仟8170cfd0

开荒“终端”,输入以下命令:

sudo malloc_history 21122 0x60008170cfd0

获得错误日志,那样就能够固定到结尾调用的那行代码

图片 10终端.png

正是我们地点的release释放掉了array对象产生的。

3.Xcode品类模拟器上png格式的本地图片寻常呈现,真机调试不突显:

1.模拟器的目录:

10.报错如:“No matching provisioning profile found: Your build settings specify a provisioning.....”,

方法②:

 

  • a.点击Build Phases,假诺是非常不够的xxx是类名,则在Complie Sources中步入该文件。若贫乏类库,则在Link Binary With Libraries中投入该类库。比方图中是贫乏“BJGKPaintMapViewController”,这一个是类名。
  • b.只怕直接把须要援引这几个干枯类/库的最早的小说件去掉引用,小编正是多调用了BJGKPaintCommand类文件,所以把它去掉,也就无需补上BJGKPaintMapViewController类的援用了。

(1).图片的发端状态,不是png的,被自个儿平素就改成png了。那样效仿器OK,真机就有标题。

 

 

“Link Binary With Libraries”中式糕点击 “ ”,点“Add Other”,那时候按下“Command Shift G”,输入“/usr/lib”进行寻觅,能够看来 “libsqlite3.dylib”,双击增多完结。

"_OBJC_CLASS_$_ASIHTTPRequest",先反省上述的重视代码是或不是已加入编写翻译列表,如未加入,依次点击Target->Build Phases->Compile Sources,点击尾巴部分“ ”增添上述代码。 

 

 **更新-->**

      点击“Finder->前往->资源库->Developer->Xcode->DerivedData”,

选择 Build Settings 菜单,把compress PNG files 改成NO。

上边的野趣是Link Binary With Libraries 中从未加多“libsqlite3.dylib”,但是Xcode7中独有对应的“*.tbd”,而没有“*.dylib库”,怎么做吧?

”``/Users/你当前登陆的用户名/Library/Application Support/iPhone Simulator/``“

答:点击链接->【Xcode7打包,iOS9真机闪退,如何减轻】

2、ld:framework not found IOKit

将libstdc .dylib换到libstdc .6.0.9.dylib就能够了。

(2).真机上文件名是分别轻重缓急写的,而模拟器下面是不区分的,所以模拟器能够,真机不行;

  

3如下查找 Library Search 帕特hs 和 Framework Search Paths, 删掉编写翻译报warning的路径即OK。图片 11图片 12图片 13

4、假诺境遇编写翻译错误类似:Undefined symbols for architecture armv7: 

 

或者点击“Finder->前往->前往文件夹”,输入:

图片 14

b.连接真机生成的公文,能够整个删掉或许把一时用的版本删掉,再一次连接装置会自动生成:

相遇类似以下报错:

按一下:Product -> Clean ,应该是去掉一下再编写翻译;

解决:

  "std::__basic_file<char>::is_open() const", referenced from:...

下载并设置provisioning profile文件;然后就行了。

2选择 Build Settings 菜单

施工方案:项目名 -> Build Phases -> Link Binary With Libraries,

**8.Xcode7打包,iOS9真机闪退,如何化解?
**

2.Xcode创设项目多,内部存款和储蓄器占用大,若是排除缓存?

二、常见难点:

图片 15

删完以后重新展开项目运作,你就能够开掘错误提示没了,接下去运维工程,联网状态下Xcode会本身

4.体系更动一部分能源仍旧修改部分多少后,再一次运转模拟器依旧原先的效应,未有爆发变化:(比方提醒找不到一点头文件。)

a.App被XCode Build在这里:

sudo ln -s Versions/A/IOKit .

Undefined symbols for architecture i386:

**更新-->**

下一场前面一大堆的以“std:”起先的汇报...

9.报错如下:

图片 16

1取舍工程, 编写翻译的 (targets)

c.然后在文件中找找“PROVISIONING_PROFILE",找到以它开始的那一行代码并删除了。

不常已经从品类中剔除了文件和文件夹照旧报那些警示,固然尚未发出错误,然而望着很不舒服。。

把不需要的app项目删除。或者定时删除旧的项目。

日记类似:(缺乏BJGKPaintMapViewController文件的引用)

 

cd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/IOKit.framework 

 

缓和方案:

终端输入以下2行内容:

一、报错与警报

  "_sqlite3_bind_blob", referenced from:
  -[FMDatabase bindObject:toColumn:inStatement:] in FMDatabase.o
  "_sqlite3_bind_double", referenced from:
  -[FMDatabase bindObject:toColumn:inStatement:] in FMDatabase.o
  "_sqlite3_bind_int", referenced from:
  -[FMDatabase bindObject:toColumn:inStatement:] in FMDatabase.o
  "_sqlite3_bind_int64", referenced from:
  -[FMDatabase bindObject:toColumn:inStatement:] in FMDatabase.o
  "_sqlite3_bind_null", referenced from:
  -[FMDatabase bindObject:toColumn:inStatement:] in FMDatabase.o
  "_sqlite3_bind_parameter_count", referenced from:
  -[FMDatabase executeQuery:withArgumentsInArray:orDictionary:orVAList:] in FMDatabase.o
  -[FMDatabase executeUpdate:error:withArgumentsInArray:orDictionary:orVAList:] in FMDatabase.o
.........

-----2016年06月03日更新-----

可能有2个原因:   

或者“std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::find(wchar_t const, unsigned long, unsigned long) const", referenced from*:”...

c.app打包生成的文本,能够删掉不须求的品类打包文件:

身处/Users/你计算机名/Library/Developer/Xcode/DerivedData  下的缓存文件占十分大的缓存空间,假诺长日子不删除xcode下的缓存文件,就能够促成硬盘空间更加小直到Directory not empty。删除了缓存文件再运维就不会再报错。

"~/Library/Developer/Xcode/Archives"。

5.but did not return a nonzero exit code to indicate failure

----------------2016年7月1日更新---------------

缘由:xcode项目import文件时,会依靠project.pbxproj来寻找,查找不到文件的援用则会有上述的谬误。图中正是BJGKPaintCommand文件对BJGKPaintMapViewController类的援用找不到。平时在三人合营开辟的时候,svn提交不专门的学业导致的project.pbxproj产生错误,使得文件的援用不在project.pbxproj文件中。

日记类似:

Undefined symbols for architecture i386:

当中,假如那么些,从文件夹中慢慢打开看下路线对不对,假若像有修改Xcode名称的,注意如 “xcode 5”  [有空格" “的回想在终端中加上 “”那几个符号];

 

"~/Library/Developer/Xcode/iOS DeviceSupport"

【参考:

历次提醒指定UUID的provisioning profile,即便出现开关“Fix Issue”点击也未有化解?

去掉警告的法子如下:

老是项目有数据修改,重国民党的新生活运动行前,小编都会clean一下,幸免因为缓存出现的错误...那么些经常用,可是clean真正的意趣作者还没读懂.

 

或者点击“Finder->前往->前往文件夹”,输入: “/Users/你当前登陆的用户名/Library/Developer/Xcode/DerivedData”(冒号没有的)

7、难题: ld/ warning/ directory not found for option从品类中剔除了有个别目录、文件之后,编写翻译出现警示音讯: ***ld: warning: directory not found for option“XXXXXX”:***

点击“Finder->前往->资源库->Developer->Xcode->DerivedData**”**,【看不到“财富库”?点击“前往”,看到菜单栏时,按“Option”就见到了.】

a.找到项目中的 "xxx项目名.xcodeproj" 文件,右键展开包内容;

点项目,TAGERT -> Build Setting -> Lingking -> Other Linker Flag ,在里头增加一行字符: “-lsqlite3”。 加多达成。

build 那么些target的时候命令行报错。能够在 build setting 中,找出bitcode,并吧 enable bitcode 设置为 NO.

 

 

即便遇上编写翻译错误类似:Undefined symbols for architecture armv7:   "_inflateEnd", referenced from,则应当是非常不够注重libz.dylib,增加方式:依次点击Target->Build Phases->Compile Sources,点击底部“ ”,在弹出的列表中输入libz,增添寻觅结果中新型版本就可以。 

1、错误代码:No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=armv7 armv7s)

方法①:

6.Undefined symbols for architecture i386:

能够运用Mac 系统自带的图样预览导出一下,(正是双击图片,点击左上角:文件->导出->png格式),再再也导入就行了。

还是,直接clean一回就足以了。

b.然后找到project.pbxproj文件,双击张开;

 

3、程序没问题,运营报错:Directory not empty

---第6点 2016年08月25日补充---

建设方案:

版权声明:本文由彩民之家高手论坛发布于编程技术,转载请注明出处:iOS 活死人对象调节和测量检验