Xcode 9.0之后,时不时会遇到以下问题
- 使用Xcode 9.0编译静的态库在Xcode 8.3.2报错,如下所示:
ld: framework not found FileProvider for architecture arm64
解决方案一:使用Xcode 8.3.2编译器重新编译静态库,然后在Xcode 8.3.2和Xcode 9.0都可编译通过。
但可能存在隐患,因为Xcode 8.3.2只能支持到iOS 10.x版本,所以需要将库放到iOS 11中检测一下,防止编译失败情况。方案二:解决高版本编译静态库在低版本Xcode中使用
Targets - Build Settings - Link Frameworks Automatically 设置为NO
此方案编译后的静态库.a文件,在使用时需要将静态库中用到的library添加到工程的库文件中,否则会报错,找不到静态库中的类库
参考:Xcode编译报错
- 下载新版xcode
- 在xCode 中找到code.app,显示包内容
- 到以下目录:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/- 将报错的.framework拷贝至Xcode8.app
FileProvider.framework 。。。
IOSurface.framework。。。- 重启xcode,clean工程并重新编译
- 方案三:xCode报错
- 在Xcode 9.0和Xcode 8.x之间来回切换编译,导致选择不到模拟器
解决方案:将两个版本的Xcode和模拟器都退出,然后重新打开运行即可。
若还不可以,则清理下工程command+shit+k 或 command+alt+shit+k,然后退出Xcode重新打开。
- 使用静态库或.bundle资源文件时报错
ld:symbol(s) not found for architecture arm64
原本以为是库文件不支持arm64,其实不然。
以前在Xcode中通过右键拷贝文件,会自动将库文件导入到工程中,并会添加到Build Phases-Link Binary With
Librarire库中或Copy Bundle Resources中,但貌似升级到Xcode 9.0后,又出现此bug,在之前Xcode中曾也有bug,估计后续可能会修复。
导入库文件或资源文件时,注意检查以下两个地方是否已添加,若系统没有添加,需要找到对应文件,添加进来。
- swift文件编译报错
use of unresolved identifier 'xxx.swift'
xxx.swift文件是导入到工程中,而且选择了copy到工程,但仍然报错。
产生原因:感觉是XCode的bug,没有将文件导入到编译源文件中
解决方法:Target -> Build Phases -> Compile Sources -> 点击+号,将相应的文件加入即可。
- Xcode 9.0支持无线调试
这个感觉比较鸡肋,以方便支持特别差,对网络貌似有要求,而且不稳定,经常导致设备看似连接着,但实际一直等待连接状态。当然也可能跟我的环境有关,不过我已经放弃此功能了,至少现在这个版本没法用。
解决方案有两个:
-
关闭无线连接
使用网段IP连接
至于能不能连接上,看人品了。
以下为其他Xcode 问题
- 编译Xcode总是报以下错误
ld: warning: directory not found for option '-L/XXX'
ld: warning: directory not found for option '-F/XXX'
参考:Xcode问题
产生原因:之前导入的第三方类库路径改变,导致编译器找不到,故报警告信息
解决方案:
Project -> targets -> Build Setting -> Library Search Paths 删除工程中没有使用到的静态库路径
Project -> targets -> Build Setting -> Framework Search Paths 删除工程中没有使用到的Framework路径