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 工程中将此库删除并重新添加后又不报错了。

测试发现,在 Xcode Build 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。目前还没找到真正有效的解决方法,网上说是 Xcode bug,暂时这样解决。

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

使用 FaceBook SDK 时,它的有个头文件使用了@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 后它的头文件出现报错。

解决办法

Xcode Build 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 Phases Copy Bundle Resource 里将 Info.plist 删除。

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

如果不能解决可以去 Xcode File > 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{} 的地方出现这种报错。

解决办法

Xcode Build 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,然后点击信任就可以了。

问题:Command PhaseScriptExecution failed with a nonzero exit code

解决方法: chmod 777 *

sudo chmod -R 777 *

Xcode:** ARCHIVE FAILED ** (MapFileParser.sh: Permission denied:拒绝访问)解决方案
错误提示:Showing Recent Messages
/Users/xxx/Library/Developer/Xcode/DerivedData/Unity-iPhone-benvyhfnmrzfyofajxxcshvzcjtb/Build/Intermediates.noindex/ArchiveIntermediates/Unity-iPhone/IntermediateBuildFilesPath/Unity-iPhone.build/Release-iphoneos/Unity-iPhone.build/Script-033966F41B18B03000ECD701.sh: line 2: /Volumes/xxx/xxx/xxx/XcodeProj/MapFileParser.sh: Permission denied

解决方案:

自定义Shell脚本中,在执行 “$PROJECT_DIR/MapFileParser.sh” 之前,增加访问权限: “chmod a+x $PROJECT_DIR/MapFileParser.sh”
或者增加绝对路径: chmod a+x /Volumes/xxx/xxx/xxx/XcodeProj/MapFileParser.sh

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值