Xcode8,你为什么这么坑

字数 472阅读 723

开启吐槽模式

为了迎合Xcode8所带来的更新,我是惊喜万分(奔溃至极)。丝毫不敢怠慢,生怕跟不上入坑的队伍😂

坑一:storyboard或xib部分图片真机显示不了

- (void)awakeFromNib {
    [super awakeFromNib];
    //加上这句
    [self layoutIfNeeded];
}

坑二:打包之后无法在开发者中间看到新构建的版本(或iOS10访问相机、相册等闪退)

原因是iOS10为了保护隐私,需要在 info.plist 里添加配置,包括定位、摄像头、麦克风、相册、相机等等。

plist文件

访问权限一览表

<!-- 相册 --> 
<key>NSPhotoLibraryUsageDescription</key> 
<string>App需要您的同意,才能访问相册</string> 
<!-- 相机 --> 
<key>NSCameraUsageDescription</key> 
<string>App需要您的同意,才能访问相机</string> 
<!-- 麦克风 --> 
<key>NSMicrophoneUsageDescription</key> 
<string>App需要您的同意,才能访问麦克风</string> 
<!-- 位置 --> 
<key>NSLocationUsageDescription</key> 
<string>App需要您的同意,才能访问位置</string> 
<!-- 在使用期间访问位置 --> 
<key>NSLocationWhenInUseUsageDescription</key> 
<string>App需要您的同意,才能在使用期间访问位置</string> 
<!-- 始终访问位置 --> 
<key>NSLocationAlwaysUsageDescription</key> 
<string>App需要您的同意,才能始终访问位置</string> 
<!-- 日历 --> 
<key>NSCalendarsUsageDescription</key> 
<string>App需要您的同意,才能访问日历</string> 
<!-- 提醒事项 --> 
<key>NSRemindersUsageDescription</key> 
<string>App需要您的同意,才能访问提醒事项</string> 
<!-- 运动与健身 --> 
<key>NSMotionUsageDescription</key> 
<string>App需要您的同意,才能访问运动与健身</string> 
<!-- 健康更新 --> 
<key>NSHealthUpdateUsageDescription</key> 
<string>App需要您的同意,才能访问健康更新 </string> 
<!-- 健康分享 --> 
<key>NSHealthShareUsageDescription</key> 
<string>App需要您的同意,才能访问健康分享</string> 
<!-- 蓝牙 --> 
<key>NSBluetoothPeripheralUsageDescription</key> 
<string>App需要您的同意,才能访问蓝牙</string> 
<!-- 媒体资料库 --> 
<key>NSAppleMusicUsageDescription</key> 
<string>App需要您的同意,才能访问媒体资料库</string>

如果不起作用,可以请求后台权限,类似于这样:

<key>UIBackgroundModes</key>
<array> 
<!-- 在这里写上你在后台模式下要使用权限对应的key --> 
<string>location</string>
...
</array>

或者在Xcode里选中当前的target,选择 Capabilities ,找到 Background Modes ,打开它,在里面选择对应权限

Background Modes

坑三:控制面板输出不完整

#define NSLog(format, ...) printf("\n[%s] %s [第%d行] %s\n", __TIME__, __FUNCTION__, __LINE__, [[NSString stringWithFormat:format, ## __VA_ARGS__] UTF8String]);

坑四:NSUserDefaults问题

NSUserDefaults问题

坑五:插件无法使用问题

如何优雅的使用Xcode8或iOS10 SDK

坑六:Xcode8之xib

Xcode8 打开Xib之后,Xcode7 无法打开

当我们使用Xcode8打开以前的旧工程的xib文件时,会弹窗提示我们选择设备。

选择设备

当我们选择之后虽然Xcode8可以查看xib文件,但是当我们使用旧版本Xcode打开查看xib文件是就会提示无法查看,需要使用高版本Xcode打开。

xib报警告

想要能够在低版本Xcode查看Xib,需要在Xcode8上面重新选择xib打开的版本为Xcode7.x

选择最低版本

Xcode8 打开Xib更新之后,约束报警告

被xib坑完之后,接下来就是崩溃的时刻,所有有涉及约束的视图全部报警告。我们需要更新所有存在警告视图的frame。

更新frame

坑七:应用提交AppStore失败

使用旧版本的Application Loader进行提交。

推荐阅读更多精彩内容