iOS开发总结-Xcode常见错误

时间:2021-08-28 17:48:38

iOS开发总结-Xcode常见错误

"file/file.h"filenotfound

如果遇到这种类型的问题报错,可以分为三部来解决,由简到复杂一步一步来,直到解决问题位置。

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 iOS4.2or laterclang: error: linker
command failed withexitcode1(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报了如下错误:

autopropertysynthesis is synthesizingpropertynot explicitly synthesized

解决方法:

project -> build settings -> Apple LLVM 6.0 - Warnings - Objective C -> Implicit Synthesized Properties -> NO.

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

thefile“XXX” couldnotbe opened because you don't have permissiontoviewit

今天使用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名称:

iOS开发总结-Xcode常见错误
iOS开发总结-Xcode常见错误

如果遇到上面的情况,还有一种方式解决:

Project —> Build Setting —> Build Options —> Compiler for C/C++/Objective-C中 修改这一项,变成Default Compiler(Apple LLVM 6.0)

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

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

propertytype‘id’isincompatiblewithtype‘id’inheritedfrom‘uitabbar’

iOS开发总结-Xcode常见错误

UIKit 代理

iOS开发总结-Xcode常见错误

自己定义的代理

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


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

iOS开发总结-Xcode常见错误

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

Warning: Attempttopresent ***on***whoseviewisnotinthewindow hierarchy!

大致分析一下,应该是这么回事情,在controller a的viewDidLoad里面直接跳转controller b,然后导致在显示controller b的时候也调用了controller a来显示,然后发现这个window的层次结构就错乱了。

在controller a中跳转的时候,要在viewDidLoad以及viewDidAppear之后才能跳转,所以可以自己想办法延时跳转,而不是直接跳转。也可以将这个方法写在其他位置,根据自身情况而定。

The document"ViewController.xib"couldnotbe opened. Unrecognizedfilecontent.


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

这个问题应该算是Xcode的一个bug,跟我们并没有关系。

import filenotfound

我们导入一个新的framework之后报file not found错误,或者当前framework导致其他framework报file not found错误,这都是因为路径导致的错误,我们需要指定一下程序的路径。

解决方法:在Build Settings -> Framework Search Paths添加路径,$(SRCROOT)/项目名称/文件路径/文件名.framework

storyboardd references cannot bethedestinationsofrelationship segues priortoios9.0

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

iOS开发总结-Xcode常见错误

Deployment Target

Thisapplication'sapplication-identifier
entitlementdoesnotmatchthatoftheinstalledapplication. These values must
matchforan upgradetobe allowed.

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

iOS开发总结-Xcode常见错误

Identifier

项目名doesnothave an architecturethat设备名 can execute.

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

iOS开发总结-Xcode常见错误

ARM指令集

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

failedtosendthehandshake ack

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

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

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

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

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

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

Unknowntypename‘ViewController’;

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

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

CouldnotfindDeveloper DiskImage

问题所在:

这种情况一般都是出现在真机调试的过程中,是因为测试设备系统版本比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.0—9.3.9的所有9.3开头的子版本号,对于其他系统版本同理。

Xcode升级策略:

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

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

iPhone6isbusy: Processing symbol filesXcode willcontinuewheniPhone6isfinished

iOS开发总结-Xcode常见错误

Processing symbol files

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

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

Charles无法抓包

Mac上下载Charles后,直接就可以抓包,而手机上配置代理后也可以抓包。

但是有的时候Charles会出现无法抓包的情况,重新卸载后再安装,还是无法抓包。

遇到这样的情况,可以按照下面的步骤,检查一下是否是配置的问题。

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

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

ld: library not foundfor-lBeeHiveclang: error: linker command failed withexitcode1(use -v to see invocation)

解决方案

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

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

[!] Themasterreporequires CocoaPods1.0.0-(currently using0.39.0)Update CocoaPods,orcheckout the appropriatetaginthe repo.

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

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

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

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

sudo geminstall-n /usr/local/bincocoapods

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

sudo geminstallcocoapods

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

[!] The dependency `ReactiveCocoa (=2.0)`isnotusedinany concrete target.

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

target “Project”dopod'ReactiveCocoa','2.0'end

iOS开发总结-Xcode常见错误的更多相关文章

  1. iOS开发之Xcode常见错误

    一."file/file.h" file not found 如果遇到这种类型的问题报错,可以分为三部来解决,由简到复杂一步一步来,直到解决问题位置.1. 点击Xcode -&gt ...

  2. 【三分钟视频教程】iOS开发中 Xcode 报 apple-o linker 错误的&num;解决方案&num;

      [三分钟视频教程]iOS开发中 Xcode 报 apple-o linker 错误的#解决方案#   同样的道理,指向同一库文件的代码语句如果重复书写,即使重复书写所在的文件名字不同,同样会造成这 ...

  3. iOS开发UI篇—常见的项目文件介绍

    iOS开发UI篇—常见的项目文件介绍 一.项目文件结构示意图 二.文件介绍 1.products文件夹:主要用于mac电脑开发的可执行文件,ios开发用不到这个文件 2.frameworks文件夹主要 ...

  4. iOS开发关于Block代码错误

    本文永久地址为http://www.cnblogs.com/ChenYilong/p/4052362.html ,转载请注明出处. iOS开发关于Block代码错误 Incompatible bloc ...

  5. iOS开发UI篇—IOS开发中Xcode的一些使用技巧

    iOS开发UI篇—IOS开发中Xcode的一些使用技巧 一.快捷键的使用 经常用到的快捷键如下: 新建 shift + cmd + n     新建项目 cmd + n             新建文 ...

  6. iOS开发 - CocoaPods的常见使用方式

    1 CocoaPods 的安装 1.1 作用: 帮助管理和维护第三方框架,快速的搜索到第三方框架, 然后自动集成到工程里面来, 并编译成一个libPod.a的静态库给我们项目用 1.2 理解:  1. ...

  7. 【汇总】iOS开发及Xcode使用中遇到的一些报错问题汇总

    这里整合下在开发过程中遇到过的一些报错问题和解决办法:(今天开始逐渐增加)   Xcode编译错误集锦:http://www.cnblogs.com/ios-wmm/p/3402261.html   ...

  8. IOS开发中Xcode常用插件安装与管理(转)

    XCode中插件管理工具:Alcatraz    转自http://www.cocoachina.com/industry/20140506/8325.html 苹果现在的成绩得益于其始终如一的坚持. ...

  9. javaweb开发中的常见错误

    Javaweb中的最常见错误及其解决方法 1.200:表示成功处理业务. 2.400 请求出错: 由于语法格式有误,服务器无法理解此请求.不作修改,客户程序就 无法重复此请求. 解决办法:,遇到400 ...

随机推荐

  1. Placeholder如何换行

    使用js动态添加标签充,处理换行问题 var placeholder = 'This is a line \nthis should be a new line'; $('textarea').att ...

  2. Lr中关于字符串的截取

    Action() { char separators[] = "\"processId\":\"";//截取条件 char * token; char ...

  3. 编译原理简单语法分析器(first&comma;follow&comma;分析表)源码下载

    编译原理(简单语法分析器下载) http://files.cnblogs.com/files/hujunzheng/%E5%8A%A0%E5%85%A5%E5%90%8C%E6%AD%A5%E7%AC ...

  4. Loadrunner:LR提交JSON格式的POST请求

    场景: 影视分发:影院客户端向管理平台发起取任务的操作,取任务接口getDispatchTask,为JSON格式的POST请求 Action() { web_custom_request(" ...

  5. Java学习笔记——多态性Polymorphism

    Java中实现多态的机制 Java中实现多态的机制靠的是父类或者接口定义的引用变量可以指向子类或者具体的实现类的实例对象,而程序调的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就 ...

  6. go使用rpc

    RPC是远程过程调用的缩写(Remote Procedure Call),通俗地说就是调用远处的一个函数,是分布式系统中不同节点间流行的通信方式.Go语言的标准库提供了一个简单的RPC实现 serve ...

  7. Python实现无向图最短路径

    一心想学习算法,很少去真正静下心来去研究,前几天趁着周末去了解了最短路径的资料,用python写了一个最短路径算法.算法是基于带权无向图去寻找两个点之间的最短路径,数据存储用邻接矩阵记录.首先画出一幅 ...

  8. Quartz动态添加,修改,删除任务&lpar;暂停,任务状态,恢复,最近触发时间&rpar;

    首页 博客 学院 下载 图文课 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye GitChat 写博客 小程序 消息 登录注册 关闭 quartz_Cron表达式一分钟教程 09-05 ...

  9. div 边框

    1.四个边框border-left 设置左边框,一般单独设置左边框样式使用border-right 设置右边框,一般单独设置右边框样式使用border-top 设置上边框,一般单独设置上边框样式使用b ...

  10. HTML5之新增的元素和废除的元素 (声明:内容节选自《HTML 5从入门到精通》)

    新增结构元素: section元素 section元素定义文档或应用程序中的一个区段,比如章节.页眉.页脚或文档中的其他部分.它可以与h1,h2,h3,h4,h5,h6元素结合起来使用,标示文档结构. ...