我的app从2015年上线至今,迭代版本无数,今天上传到appstore的时候突然得到这么个错误,让我也是一脸懵逼! 最主要的是除了这个提示以外没有任何邮件。经过网上的查阅,最后解决这个问题。
首先二进制文件错误到底是什么东西,苹果指南上解释如下:
如上所述,可能存在以上三种问题,首先我的版本是依次叠加的 ,不会出现CFBundleVersion不符合的情况。然后我的是利用Xcode打包,appuploder上传的,不会存在层级错误的情况,排除。在新添的内容中也没有如一所说的二进制图标不符合。 持续懵逼中。。。
最后找到答案,是由于此次更新项目需求中有一个 监听设备锁屏的操作,代码如下,
```
//监听锁屏事件CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),NULL, screenLockStateChanged, kNotificationLock,NULL,CFNotificationSuspensionBehaviorDeliverImmediately);//监听屏幕状态变化事件CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),NULL, screenLockStateChanged, kNotificationChange,NULL,CFNotificationSuspensionBehaviorDeliverImmediately);
```
而苹果在2017年5月左右的时候明确不让开发者监听设备锁屏的情况。如果出现二进制错误的小伙伴,可以去项目中搜索是否引入了CFNotificationCenterAddObserver。
那项目需要监听锁屏,又怎么办呢?
这里,判断二进制文件的错误是由于苹果机审没过,利用一个字符串拼接的小技巧便可。
如://监听锁屏状态
```
NSString *com = @"com";
NSString *apple = @"apple";
NSString *spring = @"spring";
NSString *board = @"board";
NSString *lock = @"lock";
NSString *state = @"complete";
self.lockCenterName = [NSString stringWithFormat:@"%@.%@.%@%@.%@%@",com,apple,spring,board,lock,state];
CFStringRef strRef = (__bridge CFStringRef)self.lockCenterName;
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, screenLockStateChanged, strRef, NULL, 2*2);
```
解决了这个问题,重新打包上传成功。欢迎有更好方法的小伙伴留言。
参考链接:https://help.apple.com/itc/apploader/?lang=zh-cn#/apdSe850405a
https://www.jianshu.com/p/7ee21fa85cfa