一."file/file.h" file not found

如果遇到这种类型的问题报错,可以分为三部来解决,由简到复杂一步一步来,直到解决问题位置。
1. 点击Xcode -> Project -> Clean清除缓存或者使用⌘ + ⇧ + k快捷键来清除。
2. 点击Xcode -> Window -> Projects 清除Derived Data的缓存,在清除缓存之前先彻底退出Xcode,然后直接删除缓存文件夹。
3. 再Build Settings -> Header Search Paths 添加路径,$(SRCROOT)/项目名称/文件路径。

如果上面这三种方法都没有解决问题,就要考虑一下文件是否存在或者导入方式是否有错误了。例如:# include<># include""# import<># import""的导入方式是否有错误。


ld: -pie can only be used when targeting iOS 4.2 or later
clang: error: linker command failed with exit code 1 (use -v to see invocation)

首先注意:-pie can only be used when targeting iOS 4.2 or later -pie只能在ios4.2或更高版本上使用,所以你可以更改工程Deployment Info —> Depoyment Target


如果你的IDE报了如下错误:

auto property synthesis is synthesizing property not explicitly synthesized

解决方法:
project -> build settings -> Apple LLVM 6.0 - Warnings - Objective C -> Implicit Synthesized Properties -> NO.

这样就会消除所有的property警告了。


二.the file “XXX” could not be opened because you don't have permission to view it

今天使用Xcode6,突然提示我"the file “XXX” could not be opened because you don't have permission to view it" 说我没有权限。
可以在Build settings->Product Name项修改.Product Name项默认是$(TARGET_NAME),可以修改任意app名称:


如果遇到上面的情况,还有一种方式解决:
Project —> Build Setting —> Build Options —> Compiler for C/C++/Objective-C中 修改这一项,变成Default Compiler(Apple LLVM 6.0)

这种方法可以解决很多因为编译器引发的问题。


有的时候会遇到这样类型的错误:

三.property type ‘id <maintabbardelegate>’ is incompatible with type ‘id <uitabbardelegate>’ inherited from ‘uitabbar’

UIKit 代理

自己定义的代理

这是因为自己的代理属性名和继承的父类代理属性名重名了,这种情况只需要把自己代理属性名更改就可以。

但是这种方法还不是很好的解决方式,最好的解决方式是在定义代理的时候,继承自父类的代理。这样做的好处是,符合Objective-C中的继承的特性;而且外界使用当前类的代理的时候,可以通过遵守当前类的代理,达到将父类的代理也遵守,更加方便外界使用。而且苹果官方也是这样做的。


四.在storyboard中,由controller A跳转到controller B的时候然后报错:

Warning: Attempt to present *** on *** whose view is not in the window hierarchy!

大致分析一下,应该是这么回事情,在controller aviewDidLoad里面直接跳转controller b,然后导致在显示controller b的时候也调用了controller a来显示,然后发现这个window的层次结构就错乱了。
controller a中跳转的时候,要在viewDidLoad以及viewDidAppear之后才能跳转,所以可以自己想办法延时跳转,而不是直接跳转。也可以将这个方法写在其他位置,根据自身情况而定。


The document "ViewController.xib" could not be opened. Unrecognized file content.

很多情况都会造成这个错误,最常见的是因为svn或者git等版本控制工具进行代码update的时候造成的。我们解决完冲突之后将Xcode退出,删除缓存,然后在右边的列表里找到Open AS -> Interface Builder XIB Documents就可以了。
这个问题应该算是Xcode的一个bug,跟我们并没有关系。


import <framework/framework.h> file not found

我们导入一个新的framework之后报file not found错误,或者当前framework导致其他frameworkfile not found错误,这都是因为路径导致的错误,我们需要指定一下程序的路径。
解决方法:在Build Settings -> Framework Search Paths 添加路径,$(SRCROOT)/项目名称/文件路径/文件名.framework


五.storyboardd references cannot be the destinations of relationship segues prior to ios 9.0

iOS9之后苹果添加了一个新特性-Storyboard References,这个特性如果报以上错误,是因为这个新特性只支持iOS9及以上版本,需要将Xcode编译最低版本设置为iOS9。

Deployment Target

This application's application-identifier entitlement does not match that of the installed application. These values must match for an upgrade to be allowed.

设备上已经有一个和当前运行程序相同identifier程序,需要将设备上相同identifier的程序删除,或者修改当前运行程序的Identifier,然后在重新运行即可。

Identifier

六.项目名 does not have an architecture that 设备名 can execute.

这个问题主要是因为项目设置的ARM指令集,比设备指令集高,也就是项目没有兼容低版本设备的指令集导致的。所以需要我们设置更低的指令集来兼容低版本设备,这个设备版本不是iOS系统版本,而是硬件的版本,例如iPhone5、iPhone6这样的设备。

ARM指令集

如果重新设置了设备指令集,还是不能正常运行程序,并且出现下面的错误:

七.failed to send the handshake ack

如果从错误信息上来看,是一个握手符号发送失败,但是并不是这样的,也不是因为网的问题。这主要是因为我们出现上面ARM指令集错误之后导致的,需要我们手动还原系统设置。

具体操作 : 通用 -> 还原 -> 还原所有设置 (这个操作越狱机慎重)

Variables View (控制台变量) 不显示变量的值和内存地址,很多对象都显示为nil,而实际上是有值的。

这主要是因为我们将当前工程的Edit SchemeBuild Configuration设置为了release模式,在release模式下编译器会模拟真机运行状态,会对一些调试参数进行优化,包括不显示Variables View变量。

所以解决方案就是我们将Build Configurationrelease模式改为debug模式,变量值和内存地址就出来了。


八.Unknown type name ‘ViewController’;did you mean ‘UIViewController’?

Unknown type name ‘ViewController’;

这是因为在代码中的两个类,使用#import直接或间接的循环引用导致的,这个错误是发生在编译期的。例如classA#importclassBclassB#importclassA,或中间隔了几层的循环引用。

解决方式是找到循环引用的类,然后在产生循环引用的任意一个类的.h文件中使用@class的方式引用,然后在类的.m中使用#import引用就可以解决。


九.Could not find Developer Disk Image

问题所在:
这种情况一般都是出现在真机调试的过程中,是因为测试设备系统版本比Xcode的可运行版本高,所以导致Xcode找不到对应的磁盘映射文件。

解决方法1:
对于这样的问题,我们可以通过升级Xcode来解决,只要把Xcode升级到最高版本这个问题就解决了。因为最新的Xcode可运行版本始终都是比最新的iOS系统高或持平,所以这种方法可以解决,而且这也是苹果希望的。

但是升级Xcode的过程中会导致不能打开Xcode,严重影响我们的工作,而且Xcode体积比较大,升级过程对网速的要求比较高。而且下载一个Xcode之后也不一定立刻能用,有时候Xcode升级了,但是Mac操作系统版本不能支持Xcode,还要升级Mac操作系统,又是一天过去了。。。

解决方法2:(个人推荐)
对于这个问题,我们可以考虑添加iOS系统对应的 DeveloperDiskImage文件解决,这也就是上面我们说的Xcode磁盘映射文件,下载并添加这个文件就可以了。

具体文件可以直接Google下载一个,下载之后直接放在下面的目录即可。例如我现在要运行iOS9.3.1的系统,我就下载一个文件名为9.3 (13E230)的文件,然后放在这个目录,就可以正常运行真机了。
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/

一个DeveloperDiskImage文件可以运行当前中等版本号的所有子版本号,例如这次更新的9.3.1系统的DeveloperDiskImage文件,就可以运行9.3.09.3.9的所有9.3开头的子版本号,对于其他系统版本同理。

Xcode升级策略:
对于Xcode的升级,我自己的想法是只有在6.xx7.xx这样的大版本更新,我才会升级Xcode,其他小版本我都不会去升级。为了保证真机运行,每次更新iOS系统后,我都会采用上面的方式来升级Xcode磁盘映射文件,但Xcode我不会去升级。

这主要还是因为Xcode体积比较大,升级一次确实不容易,而且频繁升级Xcode也没有什么大的变化。一般在6.xx7.xx这样的大版本更新,Xcode才会有比较大的变化,这时候我才会选择升级Xcode


十.iPhone6 is busy: Processing symbol files
Xcode will continue when iPhone6 is finished

Processing symbol files

真机运行时,经常会出现上面的错误,但是项目的配置、证书、设备什么的都没问题啊。

其实从Xcode上面的进度信息也可以看到,Xcode正在处理符号文件。Xcode每次连接新设备后,都会进行这步操作,只有第一次连接会这样,之后就不会了。所以我们要做的就是,等。。。


十一.Charles无法抓包

在Mac上下载Charles后,直接就可以抓包,而手机上配置代理后也可以抓包。
但是有的时候Charles会出现无法抓包的情况,重新卸载后再安装,还是无法抓包。
遇到这样的情况,可以按照下面的步骤,检查一下是否是配置的问题。

1. 查看Charles下面两个选项是否勾选,如果勾选将其取消。
Proxy -> Proxy Settings -> Enable transparent HTTP proxying
Proxy -> SSL Proxying Settings -> ->SSL Proxying -> Enable SSL Proxying 2. 查看Charles下面选项是否勾选
Proxy -> Mac OS X Proxy 3. 如果用过Lantern或者其他翻墙工具,需要检查下面选项是否勾选,很多翻墙工具会配置下面选项。
系统偏好设置 -> 网络 -> 高级 -> 自动代理配置

我不能使用Charles就是因为第三种情况,我做的就是直接将其取消,测试了一下还可以照常翻墙。


十二.ld: library not found for -lBeeHive
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解决方案

这种问题一般都是缺少库文件所导致的,例如使用某个第三方库,但没有导入其文件,就会报这样的错。所以需要根据提示信息,找到缺失的库文件,并将其拖入工程中即可。

如果使用了CocoaPods,那就是没有更新podfile文件所导致的,执行pod命令并重新打开工程即可。


十三.[!] The master repo requires CocoaPods 1.0.0 -(currently using 0.39.0)
Update CocoaPods, or checkout the appropriate tag in the repo.

升级Xcode 8Mac10.12之后,在pod update的时候发现报这个错误。

按照错误提示来说是升级CocoaPods,尝试之后升级失败。后来以为是gem的问题,打印了一下gem的地址,也没什么问题。

http://ruby.taobao.org/
https://ruby.taobao.org/

赶快Google查了一下是什么问题。后来查到在Mac10.11之后,系统会把CocoaPods移到/usr/local/bin路径下。所以又重新安装了一遍CocoaPods,并指定了路径,就可以了。

sudo gem install -n /usr/local/bin cocoapods

之前一般都是通过不指定路径的方式安装的,所以会安装到CocoaPods默认路径下。

sudo gem install cocoapods

如果重新安装CocoaPods之后,还是报下面的错误,那就需要改一下Podfile文件。

[!] The dependency `ReactiveCocoa (= 2.0)` is not used in any concrete target.

Podfile文件添加上target,再运行pod update就没问题了。

target “Project” do
pod 'ReactiveCocoa' , '2.0'
end

iOS开发之Xcode常见错误的更多相关文章

  1. 李洪强iOS开发之OC常见错误汇总

    // //  main.m //  16 - 常见错误汇总 // //  Created by vic fan on 16/7/13. //  Copyright © 2016年 李洪强. All r ...

  2. iOS开发之Xcode常用调试技巧总结

    转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...

  3. iOS开发之Xcode常用调试(Debug)技巧总结

    一.Xcode调试技巧之:NSLog 上面也提到了,在我们日常的开发过程中最常见的Debug方式就是打Log.而在OC语言中,打Log是采用NSLog方法.但是NSLog效率低下,具体原因可以看这篇博 ...

  4. 李洪强iOS开发之Xcode快捷键

    14个Xcode中常用的快捷键操作   在Xcode 6中有许多快捷键的设定可以使得你的编程工作更为高效,对于在代码文件中快速导航.定位Bug以及新增应用特性都是极有效的. 当然,你戳进这篇文章的目的 ...

  5. iOS开发之Xcode 6更新默认不支持armv7s架构

    最近一次的Xcode 6更新默认不再支持arm7s架构,究竟是要废除不用呢还是仅仅只是一个疏忽? 目前的Xcode 6配置里定义${ARCHS_STANDARD}为armv7, arm64,当然这个定 ...

  6. iOS开发之 Xcode 6 创建一个Empty Application

    参考链接http://jingyan.baidu.com/article/2a138328bd73f2074b134f6d.html Xcode 6 正式版如何创建一个Empty Applicatio ...

  7. IOS开发之xcode 快捷键

    IOS开发也有一年多了,发现Xcode快捷键,还不熟,恶补一下.要不然真影响工作效率,呵呵! 1. 文件 CMD + N: 新文件 CMD + SHIFT + N: 新项目 CMD + O: 打开 C ...

  8. iOS开发之Xcode 相对路径与绝对路径

    iOS开发之 相对路径与绝对路径 https://developer.apple.com/library/mac/documentation/DeveloperTools/Reference/Xcod ...

  9. iOS开发之Xcode 如何使用API帮助

    内容转载自<iOS开发指南 2.6.2 如何使用API帮助> 对于一个初学者来说,学会在Xcode中使用API帮助文档是非常重要的.下面我们通过一个例子来介绍API帮助文档的用法.在编写H ...

随机推荐

  1. 彻底抛弃脚本录制,LR脚本之使用web_custom_request函数自定义http请求

    初学性能测试时候,第一步必学脚本录制,但一路下来各种录制失败.回放脚本失败的问题层出不穷,究其原因一是LR本身存在对测试环境的兼容性问题导致录制失败,更深层次的原因是录制者不清楚LR录制脚本的原理,或 ...

  2. 数据库选型之亿级数据量并发访问(MySQL集群)

    刘 勇  Email:lyssym@sina.com 简介 针对实际应用中并发访问MySQL的场景,本文采用多线程对MySQL进行并发读取访问,其中以返回用户所需的数据并显示在终端为测试结束节点,即将 ...

  3. Android蓝牙A2DP连接实现

    代码地址如下:http://www.demodashi.com/demo/14624.html 开发环境: 开发工具:Androidstudio 适配机型:honor8(Android6.0), 坚果 ...

  4. springmvc ModelAndView 和 Model

    @RequestMapping("") public ModelAndView index(HttpSession session) { Object data = session ...

  5. 【微信小程序】 引用公共js里的方法

    一个小程序页面由四个文件组成,一个小程序页面的四个文件具有相同路径与文件名,由此我们可知一个小程序页面对应着一个跟页面同名的js文件.可是当有些公共方法,我们想抽离出来成为一个独立公共的js文件.我们 ...

  6. idea搭建简易ssm项目

    按照http://www.cnblogs.com/hackyo/p/6646051.html来搭建ssm框架,一步成功,特此记录一下. 本机环境: idea2017.3 jdk1.8 mysql5.5 ...

  7. (一)Linux Shell编程——简介、变量、字符串、数组

    1. Shell简介 1.1 Shell出现背景 Shell 既是一种脚本编程语言,也是一个连接内核和用户的软件. 对于图形界面,用户点击某个图标就能启动某个程序:对于命令行,用户输入某个程序的名字( ...

  8. Wunderlist 云端任务管理(Todo list)工具

    Wunderlist 是一个云端任务管理(Todo list)工具,支持 iPhone, iPad, Android, Windows, Mac OSX 以及 Web 端轻松同步,实现了真正意义上的跨 ...

  9. linux创建新用户及权限

    在Linux中添加普通新用户 ,超级用户(也称为“root”)是一个具有修改系统中任何文件权力的特别账号.在日常工作中,最好不要使用超级用户账号进入系统,因为任何错误操作都可能导致巨大的损失.由于超级 ...

  10. 通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的脾气秉性(二)。 异步委托 微信小程序支付证书及SSL证书使用 SqlServer无备份下误删数据恢复 把list集合的内容写入到Xml中,通过XmlDocument方式写入Xml文件中 通过XDocument方式把List写入Xml文件

    通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的脾气秉性(二).   前言 读完上篇<通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的本质(一).>,相信大家对sp ...