iOS程序猿iOS启蒙

iOS 10 与Xcode 8 新特性

2016-09-18  本文已影响258人  PHM

iOS 10


1. 访问权限崩溃问题

如果打开APP后点击有关权限访问后直接Crash了则需要在需要在info.plist文件中进行相关配置(蓝牙,日历,相机,相册,相机,联系人,健康等权限...)

权限配置步骤:

  1. 打开项目中的info.plist文件
  2. 在info.plist文件Add Row一行后选择相应的权限进行添加
  3. 先去相应的Key,Value 应该可以随便填写
配置地方

如果一个个添加嫌麻烦可以全部添加到plist文件中



打开plist源文件后添加如

<key>NSBluetoothPeripheralUsageDescription</key>
<string>App需要您的同意,才能访问蓝牙</string> 
<key>NSCalendarsUsageDescription</key>
<string>App需要您的同意,才能访问日历</string>
<key>NSCameraUsageDescription</key>
<string>App需要您的同意,才能访问相机</string>
<key>NSHealthShareUsageDescription</key>
<string>App需要您的同意,才能访问健康分享</string>
<key>NSHealthUpdateUsageDescription</key>
<string>App需要您的同意,才能访问健康更新 </string>
<key>NSHomeKitUsageDescription</key>
<string>App需要您的同意,才能访问家庭 </string>
<key>NSContactsUsageDescription</key>
<string>App需要您的同意,才能访问通讯录 </string>
<key>NSLocationAlwaysUsageDescription</key>
<string>App需要您的同意,才能始终访问位置</string>
<key>NSLocationUsageDescription</key>
<string>App需要您的同意,才能访问位置</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>App需要您的同意,才能在使用期间访问位置</string>
<key>NSAppleMusicUsageDescription</key> 
<string>App需要您的同意,才能访问媒体资料库</string>
<key>NSMicrophoneUsageDescription</key>    
<string>App需要您的同意,才能访问麦克风</string>
<key>NSMotionUsageDescription</key>
<string>App需要您的同意,才能访问运动与健身</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>App需要您的同意,才能访问相册</string>
<key>NSRemindersUsageDescription</key>   
<string>App需要您的同意,才能访问提醒事项</string>
<key>NSSiriUsageDescription</key>
<string>App需要您的同意,才能访问Siri</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>App需要您的同意,才能访问语音识别</string>
<key>NSVideoSubscriberAccountUsageDescription</key>
<string>App需要您的同意,才能访问视频用户账户</string>```

#2. nullable报错问题
使用Xcode8之后,需要删除nullable否则报错

-(void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error```

3. ATS(App Transport Security) 网络适配问题

  1. iOS 9时,默认HTTS的网络是被禁止的, 但可以通过向info.plist文件中添加NSAppTransportSecurity,并将NSAllowsArbitraryLoads设置为YES来禁用ATS。但是,从2017年1月1日起,所有新提交的APP默认不允许配置NSAllowsArbitraryLoads来绕过ATS的限制,所以你的APP应尽早使用HTTPS进行内容访问,以避免APP被拒绝风险。
  2. 如果APP中如果集成了第三方的SDK,则可以通过NSAppTransportSecurity中NSExceptionDomains设置白名单的方式对特定的域名开放HTTP内容来通过审核。
    NSExceptionDomains设置方法
  3. 在NSAppTransportSecurity 中新加入了NSAllowsArbitraryLoadsInWebContent键,允许任意web页面加载,同时苹果会用 ATS 来保护你的app。

4.新增UIViewPropertyAnimator类

类特点:

1.可中断性
2.可擦除
3.可反转性
4.丰富的动画时间控制功能

//初始化属性动画器
UIViewPropertyAnimator *viewPropertyAnimator = [[UIViewPropertyAnimator alloc] initWithDuration:5.f curve:UIViewAnimationCurveLinear animations:^{
    [self.view setAlpha:0.3];
}];
[viewPropertyAnimator startAnimation];

5.Notification(通知)

6.UIStatusBar方法过期

过期方法:

// Setting the statusBarStyle does nothing if your application is using the default UIViewController-based status bar system.
@property(readwrite, nonatomic) UIStatusBarStyle statusBarStyle NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]") __TVOS_PROHIBITED;
- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle animated:(BOOL)animated NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]") __TVOS_PROHIBITED;

// Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
@property(readwrite, nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_DEPRECATED_IOS(3_2, 9_0, "Use -[UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;```
新方法:

if UIKIT_DEFINE_AS_PROPERTIES

@property(nonatomic, readonly) UIStatusBarStyle preferredStatusBarStyle NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED; // Defaults to UIStatusBarStyleDefault
@property(nonatomic, readonly) BOOL prefersStatusBarHidden NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED; // Defaults to NO
// Override to return the type of animation that should be used for status bar changes for this view controller. This currently only affects changes to prefersStatusBarHidden.
@property(nonatomic, readonly) UIStatusBarAnimation preferredStatusBarUpdateAnimation NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED; // Defaults to UIStatusBarAnimationFade

else

endif```

上面这个新方法在UIViewController.h文件中,只需要在viewController里调用即可。

- (BOOL)prefersStatusBarHidden{ 
  return YES;
}

- (UIStatusBarStyle)preferredStatusBarStyle{  
  return UIStatusBarStyleDefault;
}```

##7.插件取消
Xcode8取消了三方插件的功能,好多教程破解可以继续使用,但是可能app上线可能会被拒。

#Xcode 8 
---
Xcode 8 可以创建iPhone,iPad,Apple Watch,Mac,Apple TV 等平台的应用程序。

![Xcode 8 首界面](https://img.haomeiwen.com/i2529977/c4a3f37cef2c061e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

##1. Swift 3
Swift 3对大量语法进行了优化及更新,会对Swift 3以前的版本会有影响,为解决此问题Xcode 8在编译设置中支持开发者选择Swift 2或Swift 2.3 进行编译。
如果一个目标(Target)需要支持Swift 2.3, 需要在目标(Target)的编译设置里把Use Legacy Swift Language Version 设置成Yes
![支持Swift语言以往版本](https://img.haomeiwen.com/i2529977/6b613df856043023.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

##2. 证书管理
Xcode 8添加了自动管理证书功能。
建议勾选这个选项Automatically manage signing
如未设置开发者账号,则需要在xcode->preferences->Accounts中添加

![自动管理证书](https://img.haomeiwen.com/i2529977/81d200dcecac3fa6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


#Xcode 8问题解决
---
##1. 代码注释快捷功能不能使用
解决方法
打开终端 - 输入命令运行:sudo /usr/libexec/xpccachectl
重启计算机

##2. 出现杂乱的Debug
会在Debug窗口出现如下信息
>2016-10-10 16:12:37.746003 HHRouterExample[9121:339626] subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0

屏蔽方法
选择Product-> Scheme -> Edit Scheme -> Run -> Arguments 然后在Environment Variables里添加`OS_ACTIVITY_MODE = Disable`
![屏蔽方法](https://img.haomeiwen.com/i2529977/df319775614e7154.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
##官方链接地址
---
[UserNotifications](https://developer.apple.com/reference/usernotifications)
上一篇 下一篇

猜你喜欢

热点阅读