0%

iOS13 UI & 功能适配

环境:Xcode11 beta + iOS13
Xcode11 beta和iOS13刚公布不久,自己做了一下小白鼠,顺便对公司的APP进行了一次简单的适配,总结如下,后续发现新的问题会继续补充。

功能问题

适配过程中出现了一些比较严重的问题,诸如崩溃、白屏etc.也许是beta版本的问题,也许是所用API的实现已经永久改变了,这里先逐一记录下来。

新浪weibo SDK启动崩溃

解决办法:升级SDK到3.2.5.1;

接口验签失败

这个断点定位了一下,发现其实是老同学留下的坑,这里是想把NSData转换成16进制文本,做法是对data.description进行操作,iOS13后description的实现发生了改变,输出变成了”length=xxx data=xxxx”,导致问题发生,因此修改办法也很简单,如下参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// NSData成16进制小写字母字符串
NSString *stringWithHexBytes2(NSData *sender) {
static const char hexdigits[] = "0123456789ABCDEF";
const size_t numBytes = [sender length];
const unsigned char* bytes = [sender bytes];
char *strbuf = (char *)malloc(numBytes * 2 + 1);
char *hex = strbuf;
NSString *hexBytes = nil;

for (int i = 0; i<numBytes; ++i) {
const unsigned char c = *bytes++;
*hex++ = hexdigits[(c >> 4) & 0xF];
*hex++ = hexdigits[(c ) & 0xF];
}

*hex = 0;
hexBytes = [NSString stringWithUTF8String:strbuf];

free(strbuf);

return hexBytes.lowercaseString;
}

白屏问题

这个问题比较隐晦,断点发现没有调用ViewController的viewDidLoad和viewWillAppear等方法,

  • 因为用到了MMDrawerContoller这个开源项目,怀疑是兼容问题,直接设置self.window.rootViewController = homeViewController,界面出来了,但各种显示异常,而且无法push;
  • 设置self.window.rootViewController = navigationController,navigationController类型是VSNavigationController,这个类是继承UINavigationController并override了很多方法,包装homeViewController显示,白屏问题复现;
  • 排除MMDrawerContoller问题,查看VSNavigationController实现,通过逐段屏蔽代码的方法定位到pushViewController这个override的方法异常,fixed后问题排除;

发票PDF显示乱码

当前我们存储服务器对所有文件请求都是返回content-type:application/octet-stream,应该是iOS13后webkit对文件类型做了判断,都是以二进制形式显示导致乱码。
解决办法:通过ngnix配置content-type返回:application/pdf。其他的文件类型也做类似修改即可;

待续。。。

UI问题

以下均是使用Xcode11 + iOS13,并且在设置开启暗黑模式后发现的问题

  1. 未设置BackgroundColor的UI控件底色变成黑色;
    Black background

  2. Present效果发生变化,需要适配;
    Present

  3. 文字变成白色,跟背景混合在一齐;

  4. 待续。。。

References

Xcode11 release notes: https://developer.apple.com/documentation/xcode_release_notes/xcode_11_beta_release_notes
Dark mode: https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/dark-mode/