iOS 开发中的常见问题记录

Xcode

❌ Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)

出现这个问题,说明你访问了已经释放的内存。

报错行如果有使用到参数,可以看看参数是不是已经为 NULL 了。

报错行如果没有参数,那需要看调用这个方法的对象是不是已经被释放了。

❌ No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64)

原因是模拟器缺少 x86_64 指令集,在 VALID_ARCHS 中 Debug 模式下添加如下:

❌ Building for iOS Simulator, but the linked library ‘***’ was built for iOS.

Xcode -> File -> Workspace Settings -> Build System 选择 Legacy Build System,当然这个只能做临时解决方案,因为这套编译系统在新版本 Xcode 中已经废弃了,不同的开发人员应该选择同一套编译系统。

❌ Multiple commands produce *** Info.plist

检查一下 Build Phases -> Copy Bundle resources 中是否把 Info.plist 作为资源文件进行管理了,如果可以搜到,把这一行的引用删除。

❌ Property xxx cannot be found in forward class object xxx

出现这类错误,通常由于头文件引起的:

  • 没有引入相应的头文件;

  • 某头文件出现了循环引用:A引用B,B引用C,C引用A 。

是不是没想到自己居然会犯引用的错误,哈哈哈~

❌ ISO C++17 does not allow ‘register’ storage class specifier

C++ 中的关键字 register 在 2011 年(C++11)被弃用,自那以后 register 已经没有意义,现在已经被删除。如果在使用基于 C++ 的三方库时提示了这个错误,可以尝试修改 Xcode 中的 Build Settings -> C++ Language DialectC++ Standard LibraryCompiler Default

我的项目中把 C++ Language DialectGUN++17 降为 GUN++11 一定程度解决了 C++ 语法上的错误。

❌ -[NSKeyedUnarchiver validateAllowedClass:forKey:]

1
2
3
4
-[NSKeyedUnarchiver validateAllowedClass:forKey:]: NSSecureCoding allowed classes list contains [NSObject class], which bypasses security by allowing any Objective-C class to be implicitly decoded. Consider reducing the scope of allowed classes during decoding by listing only the classes you expect to decode, or a more specific base class than NSObject. This will become an error in the future. Allowed class list: {(

"'NSObject' (0x7fff862bc6e8) [/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib]"

Pod

pod install

1
2
3
4
5
6
7
RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
# 或:

error: RPC failed; curl 18 transfer closed with outstanding read data remaining
# 或:

fatal: the remote end hung up unexpectedly

出现此类问题,大部分都是网络导致的,毕竟我们天朝的网络可是很不一般的……

如果,我是说如果你有科学上网的话,可以尝试下面的配置:

1
git config --global http.https://github.com.proxy socks5://127.0.0.1:10086

取消代理:

1
git config --global --unset http.https://github.com.proxy

或者是这种错误:

1
LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443

查看一下已有的代理是否配置的有问题,unset 一下。

1
git config --global --list