Xcode 编译报错汇总

 

Xcode编译报错汇总//

Untiy导出的Xcode工程经常会遇到一些编译错误,这里记录下遇到的报错和解决办法。其中问题描述尽量使用文字,以后可以复制Xcode中的错误日志来搜索。解决办法则尽可能添加图片说明,方便不熟悉Xcode的人使用。

未定义符号

Undefined symbols for architecture arm64: “0BJC_CLASS_$_CLLocationmanager”, referenced from: objc-class-ref in libyim.a (Geographylocation.o)

这是出现过很多次的问题,一些SDK需要添加一些依赖库,但没有添加上。

解决办法

根据提示,说明libyim.a引用到了未定义的符号,所以先查找_CLLocationmanager的来源,发现属于CoreLocation.framwork,这是一个系统库。在Build Phases里添加依赖即可:

https://cdn.jsdelivr.net/gh/sunsetroads/sunsetroads.github.io@master/images/xcode/undefined_sym.png


Armv7的编译错误

B/bl/blx thumb2 branch out of range (71414688 max is+/-16MB)

Untiy开发人员反馈最近添加了libuwa.a库后出现这样的报错,但在Xcode工程中将此库删除并重新添加后又不报错了。

测试发现,在XcodeBuild Phases中将此库调整顺序后也不报错。

解决办法

最终在网上找到了原因,这是一个已知的armv7编译器链接错误,可以删除该库重新导入,或者将Xcode工程BuildSetting中的Architectures中的armv7删除掉:

https://cdn.jsdelivr.net/gh/sunsetroads/sunsetroads.github.io@master/images/xcode/armv7_error.png

参考:https://groups.google.com/forum/#!topic/pdfnet-sdk/b4EoBiH_zjc


Xcode控制台po text报错

error: Couldnt materialize: couldnt get the value of variable text: variable not available error: errored out in Doexecute, couldn’t Preparetoexecutejit Expression

Xcode调试时明明有值却显示nilpo命令报出现上面的提示。

解决办法

这是工程编译策略的问题,先找到运行的Build Configuration,这里是Debug

https://cdn.jsdelivr.net/gh/sunsetroads/sunsetroads.github.io@master/images/xcode/build_configtion.png

然后去Build Settings里搜索Optimization Level,将Debug选项中的fastest, Smallest[-Os]改为None

https://cdn.jsdelivr.net/gh/sunsetroads/sunsetroads.github.io@master/images/xcode/optimal_none.png


真机调试报错

iPhone has denied the launch request. Internal launch error: process launch failed: failed to get the task for process 1304

Xcode在手机上运行后卡在启动页,Xcode提示如上。

暂时的解决办法

Edit Scheme里将Executable改为Ask on Lanuch。目前还没找到真正有效的解决方法,网上说是Xcodebug,暂时这样解决。

https://cdn.jsdelivr.net/gh/sunsetroads/sunsetroads.github.io@master/images/xcode/edit_scheme.png

https://cdn.jsdelivr.net/gh/sunsetroads/sunsetroads.github.io@master/images/xcode/exec.png


C++混编使用@import错误

use of @import when modules are disabled

使用FaceBookSDK时,它的有个头文件使用了@import的写法,编译时出现这个报错。

解决办法

这是因为我们工程中存在.mm后缀的C++文件,需要在Xcode工程Build Settings Enable Modules设置为Yes

https://cdn.jsdelivr.net/gh/sunsetroads/sunsetroads.github.io@master/images/xcode/enable_module.png

然后搜索other c++ flags,添加-fcxx-modules-fmodules符号。

https://cdn.jsdelivr.net/gh/sunsetroads/sunsetroads.github.io@master/images/xcode/module-error.png


Xcode中使用动态库

dyld: Library not loaded: @rpath/AdjustSdk.framework/AdjustSdk Referenced from: /private/var/containers/Bundle/Application/AD1BBE93-2E11-462B-AA2E-F5161C99345F/yjcq.app/Frameworks/npplaygamesdk.framework/npplaygamesdk Reason: image not found

直接往Xcode工程中拖入一个库,编译虽然可以通过,但运行时会报一个image not found的错误,然后闪退。

解决办法

这是因为AdjustSdk.framework是一个动态库,往Xcode添加动态库时需要去General中找到该库,将Do not Emebd改为Embed & sign

https://cdn.jsdelivr.net/gh/sunsetroads/sunsetroads.github.io@master/images/xcode/embed.png


区分动态库和静态库

打开终端,使用cd命令进入xxx.framework,然后使用file命令查看该二进制文件,动态库会有 Mach-O dynamicallly 的标识。

https://cdn.jsdelivr.net/gh/sunsetroads/sunsetroads.github.io@master/images/xcode/dym.png


Modules报错

Include of non-modular header inside framework module

导入一个framework后它的头文件出现报错。

解决办法

XcodeBuild Setting中将此项改为Yes

https://cdn.jsdelivr.net/gh/sunsetroads/sunsetroads.github.io@master/images/xcode/allow.png


Xcode新的Build System问题

Multiple commands produce’/Users/zhangning/LibraryDeveloper/Xcode/DerivedData/UnityiPhone-beisrzhtuoxouebivefvjbofagvBuid/Products/Debug-iphoneos/test.app/Info.pist’…

操作大概是删除了工程中的Info.plist再重新添加进去,然后报上面的错。

解决办法

Build PhasesCopy Bundle Resource里将Info.plist删除。

https://cdn.jsdelivr.net/gh/sunsetroads/sunsetroads.github.io@master/images/xcode/bundle_res.png

如果不能解决可以去XcodeFile > Project Settings中选择使用旧的Legacy Build System

https://cdn.jsdelivr.net/gh/sunsetroads/sunsetroads.github.io@master/images/xcode/build_system.png


使用@try捕获异常

Cannot use ‘@try’ with Objective-C exceptions disabled

OC中使用@try{} @catch{} @finally{}的地方出现这种报错。

解决办法

XcodeBuild Setting中将Enable Objective-C Exception改为Yes

https://cdn.jsdelivr.net/gh/sunsetroads/sunsetroads.github.io@master/images/xcode/exception.png

iOS中很少见人用这个,大家普遍使用NSError来处理异常。据说Arc下使用Exception不安全,存在内存管理问题,暂未详细了解。

不能修改“System Roots”钥匙串 要更改根证书是否会被信任,请在“钥匙串访问”中打开它,然后修改它的信任设置

问题:

在做 ios 开发 安装 根证书时 遇到如下提示: 
不能修改“System Roots”钥匙串 
要更改根证书是否会被信任,请在“钥匙串访问”中打开它,然后修改它的信任设置


解决方法:

1、点击“钥匙串访问”页面左侧“种类”中的“登陆”或“login”,然后把药安装的 根证书 拖进去,就行啦。 
2、若“种类”中没有“登陆”或“login”,如下图一样: 
这里写图片描述 
解决方法: 
这里写图片描述 
这里写图片描述 
这里写图片描述
就会出现如下图所示: 
这里写图片描述 
然后,把要安装的根证书,拖拽到有测列表中,就行了。 
这里写图片描述

iOS12-Xcode10 真机调试时,弹出框“codesign想要访问您的钥匙串中的密钥access”,点了拒绝怎么办?

在iOS真机调试时,如果出现这样的弹出框,我们是要先输入Mac开机密码并点始终允许的,但可能有些同学操作比较犀利,点成拒绝了,这时候App死活运行不起来了,怎么办?

 

 

解决方案:

1.打开钥匙串App:

 

2.点登录和我的证书:

屏幕快照 2019-06-19 下午8.50.11.png

 

3.找到右边有个iPhone Developer:XXXX@mail.com(XXXX)的证书,右击删除

4.重新打开Xcode编译并运行(Command+R),会再次弹出codesign那个弹出框,输入Mac开机密码并点始终允许即可

///

ios 开发中用新的得开发者账号去给项目打包的时候经常弹出

 

,然后你觉得以前项目不会弹啊,,,

因为新的开发者证书默认权限是访问的时候需要确认,打开钥匙串访问界面,不会的点击上面的问号,进入之后先解锁左上角的登录钥匙。如图:

然后点击下面“我的证书”,然后在右边栏里面找到你正在用到的开发者账号,点击三角形扩展按钮,下面的钥匙双击会出现以下界面:

默认选中第二个,改成第一个就行,这里会让你输入登录密码确认。

然后就不会弹出来了

//

iOS真机调试程序,报如下错误信息:failed to get the task for process XXX

真机调试运行,弹窗:process launch failed: failed to get the task for process XXXX,XXXX代表每次运行最后的数字。

原因:

证书问题,真机调试 targets的证书都必须是开发证书,若是ADHOC的证书会出现此问题。

提示这个错误的原因:

配置文件出错。真机运行的profile不能使用分发的配置文件例如ADHOC或者发布至AppStore的配置文件,而应该使用自动配置或者开发模式的配置文件。

解决方案:

project和targets的证书使用开发证书。(Xcode8 Automatic)


其他:

iphone5s的时候会出现:process launch failed: security

这时候,应该app其实已经安装成功了,你只需要在iphone上启动app,然后点击信任就可以了。