iOS开发编译报错、常见问题(实时更新)
一、报错与警报
1、错误代码:No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=armv7 armv7s)
build 这个target的时候命令行报错。可以在 build setting 中,搜索bitcode,并吧 enable bitcode 设置为 NO.

2、ld:framework not found IOKit
终端输入以下2行内容:
cd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/IOKit.framework
sudo ln -s Versions/A/IOKit .
其中,如果不行,从文件夹中慢慢打开看下路径对不对,如果像有修改Xcode名称的,注意如 “xcode 5” [有空格" “的记得在终端中加上 “\”这个符号];
3、程序没问题,运行报错:Directory not empty
位于/Users/你电脑名/Library/Developer/Xcode/DerivedData 下的缓存文件占很大的缓存空间,如果长时间不删除xcode下的缓存文件,就会导致硬盘空间越来越小直到Directory not empty。删除了缓存文件再运行就不会再报错。
或者,直接clean一次就可以了。
4、如果遇到编译错误类似:Undefined symbols for architecture armv7:
"_OBJC_CLASS_$_ASIHTTPRequest",先检查上述的依赖代码是否已加入编译列表,如未加入,依次点击Target->Build Phases->Compile Sources,点击底部“+”添加上述代码。
如果遇到编译错误类似:Undefined symbols for architecture armv7: "_inflateEnd", referenced from,则应该是缺少依赖libz.dylib,添加方法:依次点击Target->Build Phases->Compile Sources,点击底部“+”,在弹出的列表中输入libz,添加搜索结果中最新版本即可。
5.but did not return a nonzero exit code to indicate failure
日志类似:

解决:
选择 Build Settings 菜单,把compress PNG files 改成NO。
6.Undefined symbols for architecture i386:
日志类似:(缺少BJGKPaintMapViewController文件的引用)

原因:xcode项目import文件时,会根据project.pbxproj来查找,查找不到文件的引用则会有上述的错误。图中就是BJGKPaintCommand文件对BJGKPaintMapViewController类的引用找不到。常常在多人合作开发的时候,svn提交不规范导致的project.pbxproj发生错误,使得文件的引用不在project.pbxproj文件中。
解决方案:
- a.点击Build Phases,如果是缺少的xxx是类名,则在Complie Sources中加入该文件。若缺少类库,则在Link Binary With Libraries中加入该类库。例如图中是缺少 “BJGKPaintMapViewController”,这个是类名。
- b.或者直接把需要引用这个缺少类/库的原文件去掉引用,笔者就是多调用了BJGKPaintCommand类文件,所以把它去掉,也就不需要补上BJGKPaintMapViewController类的引用了。
---第6点 2016年08月25日补充---
遇到类似以下报错:
Undefined symbols for architecture i386:
"_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
.........
上面的意思是Link Binary With Libraries 中没有添加 “libsqlite3.dylib”,但是Xcode7中只有对应的“*.tbd”,而没有“*.dylib库”,怎么办呢?
方法①:
“Link Binary With Libraries”中点击 “+”,点“Add Other”,这时候按下“Command+Shift+G”,输入“/usr/lib”进行搜索,可以看到 “libsqlite3.dylib”,双击添加完毕。
方法②:
点项目,TAGERT -> Build Setting -> Lingking -> Other Linker Flag ,在里面添加一行字符: “-lsqlite3”。 添加完毕。
7、问题: ld/ warning/ directory not found for option从项目中删除了某个目录、文件以后,编译出现警告信息: ld: warning: directory not found for option“XXXXXX”:
有时候已经从项目中删除了文件和文件夹还是报这个警告,虽然没有发生错误,但是看着很不舒服。。
去掉警告的办法如下:
1选择工程, 编译的 (targets)
2选择 Build Settings 菜单
3如下查找 Library Search Paths 和 Framework Search Paths, 删掉编译报warning的路径即OK。


更新-->
8.Xcode7打包,iOS9真机闪退,如何解决?
答:点击链接->【Xcode7打包,iOS9真机闪退,如何解决】
----------------2016年7月1日更新---------------
9.报错如下:
Undefined symbols for architecture i386:
"std::__basic_file<char>::is_open() const", referenced from:...
或者“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:”...
然后后面一大堆的以“std:”开头的描述...
解决方案:项目名 -> Build Phases -> Link Binary With Libraries,
将libstdc++.dylib换成libstdc++.6.0.9.dylib就可以了。
----------------2016年12月22日更新---------------
10.报错如:“No matching provisioning profile found: Your build settings specify a provisioning.....”,
老是提示指定UUID的provisioning profile,即使出现按钮“Fix Issue”点击也没有解决?
解决方案:
a.找到项目中的 "xxx项目名.xcodeproj" 文件,右键打开包内容;
b.然后找到project.pbxproj文件,双击打开;
c.然后在文本中搜索“PROVISIONING_PROFILE",找到以它开头的那一行代码并删除了。
删完以后重新打开项目运行,你就会发现错误提示没了,接下来运行工程,联网情况下Xcode会自己
下载并安装provisioning profile文件;然后就行了。
【参考:http://stackoverflow.com/questions/1760518/codesign-error-provisioning-profile-cannot-be-found-after-deleting-expired-prof】
二、常见问题:
1.模拟器的目录:
点击“Finder->前往->资源库->Developer->Xcode->DerivedData”,【看不到“资源库”?点击“前往”,看到菜单栏时,按“Option”就看到了.】
或者点击“Finder->前往->前往文件夹”,输入:
”/Users/你当前登陆的用户名/Library/Application Support/iPhone Simulator/“
2.Xcode构建项目多,内存占用大,如果清除缓存?
a.App被XCode Build在这里:
点击“Finder->前往->资源库->Developer->Xcode->DerivedData”,
或者点击“Finder->前往->前往文件夹”,输入: “/Users/你当前登陆的用户名/Library/Developer/Xcode/DerivedData”(冒号没有的)
把不需要的app项目删除。或者定时删除旧的项目。
-----2016年06月03日更新-----
b.连接真机生成的文件,可以全部删掉或者把不常用的版本删掉,再次连接设备会自动生成:
"~/Library/Developer/Xcode/iOS DeviceSupport"
c.app打包生成的文件,可以删掉不需要的项目打包文件:
"~/Library/Developer/Xcode/Archives"。
以上都可以把不需要的app项目删除。或者定时删除旧的项目。
-----------------------------------
3.Xcode项目模拟器上png格式的本地图片正常显示,真机调试不显示:
可能有2个原因:
(1).图片的初始状态,不是png的,被自己直接就改成png了。这样模拟器OK,真机就有问题。
可以使用Mac 系统自带的图片预览导出一下,(就是双击图片,点击左上角:文件->导出->png格式),再重新导入就行了。
(2).真机上文件名是区分大小写的,而模拟器上面是不区分的,所以模拟器可以,真机不行;
更新-->
4.项目更改一部分资源或者修改部分数据后,再次运行模拟器还是原来的效果,没有发生变化:(例如提示找不到某些头文件。)
按一下:Product -> Clean ,应该是清除一下再编译;
每次项目有数据修改,重新运行前,我都会clean一下,避免因为缓存出现的错误...这个经常用,但是clean真正的意思我还没读懂.
iOS开发编译报错、常见问题(实时更新)的更多相关文章
- 【转】 IOS开发xcode报错之has been modified since the precompiled header was built
本文转载自 IOS开发xcode报错之has been modified since the precompiled header was built 其实我是升级xcode到4.6.3的时候遇到的 ...
- IOS开发 xcode报错之has been modified since the precompiled header was built
转载的文章 很实用 IOS开发xcode报错之has been modified since the precompiled header was built 今天做百度地图的时候第一次发现下面错误 ...
- iOS开发——打包报错error: linker command failed with exit code 1
真机运行没问题,打包报错: clang: error: linker command failed with exit code 1 (use -v to see invocation) 原因:在Xc ...
- iOS 开发笔记-报错处理
1.xcode7报错:does not contain bitcode 解决方法:Build Settings 搜索 bitcode 将Enable Bitcode更改为NO即可 2.Code Si ...
- c++ 编译报错汇总(随时更新)
1.invalid new-expression of abstract class type ‘×××ב 这个报错代表一个尝试在实例化一个抽象类,也就是说父类的接口中有纯虚函数在子类中没有实现: ...
- iOS开发xcode报错:"xxxxxx"has been modified since the precompiled header was built
最近做iOS开发,老是遇到这种问题,正好我有两个版本的Xcode,换了另一个,就正常了,所以也一直没解决. 今天又遇到这个问题,就查了一下资料,找到了解决办法,在次记录一下方便查找,就是在Xcode中 ...
- iOS Xcode编译报错问题解决办法汇总
1. 编译出现错误:linker command failed with exit code 1 第一种方法:找到Build settings->Linking->Other Linker ...
- 【微信】微信小程序 微信开发工具中新创建的json文件,编译报错VM1781:2 pages/module/module.json 文件解析错误 SyntaxError: Unexpected end of JSON input
如果新创建报错:编译报错VM1781:2 pages/module/module.json 文件解析错误 SyntaxError: Unexpected end of JSON input 解决方法 ...
- ios 12 xcode10 新升级的编译报错libstdc++.6.0.9 Multiple commands produce
问题一 编译报错 Showing Recent Messages :-1: Multiple commands produce '/Users/duning/Library/Developer/Xco ...
随机推荐
- python3批量删除豆瓣分组下的好友
python3批量删除豆瓣分组下的好友 """ python3批量删除豆瓣分组下的好友 2016年6月7日 03:43:42 codegay 我两年前一时冲动在豆瓣关注了 ...
- sqoop连接oracle与mysql&mariadb的错误
错误说明: 由于我的hadoop的集群是用cloudera manager在线自动安装的,因此他们的安装路径必须遵循cloudera的规则,这里只有查看cloudera的官方文档了,请参考:http: ...
- 应用容器Application container
应用容器是最基本的组件,用于布局的容器. 属性 样式 事件 默认白边各24像素,默认为浏览器大小可以设置整体背景 边距等. 根应用文件就是第一个加载的文件.
- java堆、栈、堆栈的区别
1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度比堆要快,仅次于直接位于CP ...
- hdu 2087
ps:感觉就是字符串处理...好像没什么好讲的...直接上代码 代码: #include "stdio.h" #include "string.h" ]; ]; ...
- 团队开发——冲刺2.b
冲刺阶段二(第二天) 1.昨天做了什么? 收集游戏图片:开始.暂停.继续.重新开始.退出……为了界面的后期美工做准备. 2.今天准备做什么? 把“开始游戏”.“退出游戏”.“取消”等文字按钮加工成游戏 ...
- H5版俄罗斯方块(2)---游戏的基本框架和实现
前言: 上文中谈到了H5版俄罗斯方块的需求和目标, 这次要实现一个可玩的版本. 但饭要一口一口吃, 很多东西并非一蹴而就. 本文将简单实现一个可玩的俄罗斯方块版本. 下一步会引入AI, 最终采用coc ...
- hdu2191 悼念512汶川大地震 ——多重背包
link:http://acm.hdu.edu.cn/showproblem.php?pid=2191 最简单的那种 #include <iostream> #include <cs ...
- POJ 1006 中国剩余定理
#include <cstdio> int main() { // freopen("in.txt","r",stdin); ; while(sca ...
- andriod学习之一
今天安装了Android Studio, 但PinyinIME没有导入成功.然后看了Android的一些基础. 知道了Android的基本组件: Activity,服务,内容提供程序,广播接收器. 大 ...