论坛项目Xcode 9/iOS 11 适配
上个礼拜,用Xcode8.3.3上传APP到 iTunes connect的时候突然产生一个错误:
No accounts with iTunes Connect access
iTunes Connect access for "Team-Name" is required. Add an account in the Accounts preference plane.
网上的帖子讨论,一致任务这是苹果的bug,所以一直希望苹果修复。不过等了一个多礼拜,都没有看到效果,而另外又有帖子说,升级Xcode 9可以解决这个问题,所以打算升级到Xcode9和iOS 11。
升级之后,确实可以上传到iTunes connect了。可以看到上传的流程有所改变,这可能就是Xcode8.3.3出错的原因吧。
那么接下来就开始折腾Xcode 9/iOS 11的适配吧。
主要是论坛项目,编译运行之后,就发现,点击Tabbar没反应了。Tabbar我是自定义过的,弃用了系统的TabbarItem,而是在Tabbar的位置上添加了5个UIButton,通过这5个Button来触发切换Controller。
研究后发现
Xcode 9和之前版本的差异,是self.tabbar.subviews出现了差异。Xcode 9之前,self.tabbar.subviews返回了系统的TabbarItem对应的UITabbarButton。
而Xcode9中,self.tabbar.subviews并不返回系统的TabbarItem对应的UITabbarButton。
我在自定义Tabbar的代码中,调用了如下代码,相当于把系统的Button给删除了。
for (UIView* obj in self.tabBar.subviews) {
if (obj != 自定义的tabbar sub view) {
[obj removeFromSuperview];
}
}
而Xcode9的变动,导致系统的Button并没有删除,所以点击时直接调用了系统的按钮,而忽略了自定义的按钮及其事件。
修改,添加如下代码,让系统的UIBarButtonItem 失效。
for (UIBarButtonItem * buttonItem in self.tabBar.items) {
[buttonItem setEnabled:NO];
}
今天又发现一个问题,向Toolbar上添加Button,但点击Button并不会触发Button对应的事件。最后的修改方案在这里:
https://stackoverflow.com/questions/46107640/ios11-uitoolbar-contentview