坑逼的 iOS 11数组语法糖

作者: 游城十代2dai | 来源:发表于2018-01-22 18:02 被阅读80次

    0x00 题记

    最近老板买了一套直播代码, 在运行 iOS 端的时候一堆问题, 主要是因为 iOS 11的, 有一些是后台问题(域名接入问题), 还有一些是 SDK 比较老了, 老的原因还是因为 iOS 11默默的改了底层内容, 然后比较贴近的错误就是数组语法糖取值问题!!!


    0x01 简单说些其他问题

    • A _这个 select 方法需要声明:
    错误内容: Declaration of 'select' must be imported from module 'Darwin.POSIX.sys.time'
    解决办法: 引入头文件   #include <sys/time.h>
    原因是:   Xcode 9 放弃了 select 方法, 必须引入 sys/time.h
    
    • B _在七牛SDK 中的报错


    错误内容: check_compile_time() expected parameter declarator
    解决办法: 将 check_compile_time 修改为 __Check_Compile_Time
    原因是:  Xcode 9 中 usr/include/AssertMacros.h 这个路径文件内的宏不一样了原始写法为 __Check_Compile_Time
    
    • C _iOS 11 navigationBar 透明问题

    在项目中, 对 navigationBar 的子视图遍历 hidden 了一遍, 但是 iOS 11 的时候就出问题了, 结果查找发现 iOS 11可以不管 _UIbarBackground 的 alpha, 其本身就是透明色, 改变其 subview 的 alpha 就好了

    UIView * barBackground = self.navigationController.navigationBar.subviews.firstObject;
    if (@available(iOS 11.0, *)) {
       [barBackground.subviews setValue:@(0) forKeyPath:@"alpha"];
    } else {
       barBackground.alpha = 0;
    }
    

    0x02 数组语法糖问题

    • 事件: 在 iOS 11之前的语法糖取值实际上执行的方法是: objectAtIndex, 然而在 iOS 11执行的是 objectAtIndexedSubscript 方法:

      如图对比
    • 起因: 这套代码中做了很多数组越界等处理, 非常不错, 很多地方可以很安逸的使用, 但是 mmp 的 iOS 11不行了, 有人说是 Xcode 9 的问题, 不管是谁的问题...

      Runtime 处理异常
    • 经过: 百度查了一堆 "废话", 同样的 keyword 在 Google 上就是不一样😂

      百度结果
      Google 结果
    • 结果: 通过版本判断一下进行更换的方法, 天知道 iOS 12 抑或 Xcode 10 或不会在有什么改变呢😂


    2018年03月30日 由于 HOOK 出现莫名的 crash

    // 错误信息
    -[UIKeyboardLayoutStar release]: message sent to deallocated instance 0x1489ab450
    // crash 场景, 使用 Runtime 处理异常, 所有用到键盘的地方, 使用键盘后, 在用 home 键进入后台, 就是报这个错误, 控制台是有的
    

    这个错误是因为使用了 HOOK 导致 ARC 大姨妈了, 所以需要将使用到的 Runtime 处理异常代码文件用 -fno-objc-arc 标记起来, 这样就不会 crash 了

    还有标记后, build 可能报下面这个错误:

    // 我这里是 RAC 的几个文件出现的错误, 解决办法如下
    Cannot create __weak reference in file using manual reference counting
    

    相关文章

      网友评论

        本文标题:坑逼的 iOS 11数组语法糖

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