美文网首页
10.在多个苹果平台和设备以及64位体系结构上运行应用

10.在多个苹果平台和设备以及64位体系结构上运行应用

作者: LucXion | 来源:发表于2021-12-01 09:48 被阅读0次

开发多平台应用(iOS的不同版本)

  • Base SDK 编译器使用该版本的SDK来编译和构建应用。一般使用最新的SDK,苹果会处理API的废弃。
  • Deployment Target 控制运行应用需要的最低操作系统版本。
  • 支持多个SDK时的注意事项
    • 框架:采用弱连接(weak-link),缺失的符号会自动变成空指针。(Build Phasea->Link Binary With Libraies->由Required改为Optional)
  • info.plist中的UIRequiredDeviceCapabilities可以控制应用只能在拥有指定硬件功能的设备上运行。

新提交的应用,必须也能在应用更新前支持的设备上运行。比如1.0版本支持iPhone和iPad,那么更新后不能只支持iPhone。

调试

Build Settings -> Build Optional -> Debug Infomation Formate : 设置自动生成的调试文件格式

NSZombieEnabled: scheme->Enable Zombie Object : 用一个僵尸实现替换dealloc实现,对象引用计数为0时,会用一个僵尸对象代替该对象,僵尸对象的作用在于你向它发送消息,会显示一段日志并跳入调试器。

不同的崩溃类型

  • EXC_BAD_ACCESS :访问一个已释放的对象或向它发送消息。常见于初始化方法中初始化对象用错了所有权修饰符
  • SIGSEGV:段错误信号,当硬件出现错误、访问不可读的内存地址、向受保护的内存地址写入数据时发生。常见于不正确的类型转换。
  • SIGBUS访问内存中的无效地址,地址指向的位置不是物理内存地址,可能是某个硬件芯片地址。

SIGSEGV、SIGBUS都是EXC_BAD_ACCESS的子类

  • SIGTRAP:代表陷阱信号,并不是真正的崩溃信号。会在处理器执行trap指令时发送。LLDB通常会处理这个信号,并在指定的断点处停止运行。如果收到了不明原因的SIGTRAP,先清除上次输入,重新构建一般能解决问题。
  • EXC_ARITHMETIC:当要除0时发送。
  • SIGILL:非法指令信号,当函数指针传给另一个函数时,由于某些原因该函数指针是坏的,指向了一个已经释放的内存或者数据段,有时你会收到EXC_BAD_INSTRUCTION而不是SIGILL,但它们是一回事。

EXC_*信号不依赖体系结构

  • SIGABRT:中止信号,cocos2d或UIKit框架通常在特定前提条件没满足或一些糟糕的情况出现时,调用C函数的abort来发送SIGABRT信号。通常通过LLDB的bt命令回溯信息,来找出原因。

看门狗超时,固定错误码0x8badf00d(Ate bad food)。见于同步网络调用导致主线程阻塞。

自定义错误信号处理 NSUncaughtExceptionHandler

相关文章

网友评论

      本文标题:10.在多个苹果平台和设备以及64位体系结构上运行应用

      本文链接:https://www.haomeiwen.com/subject/llmlxrtx.html