美文网首页iOS程序猿iOS启蒙
iOS 10 与Xcode 8 新特性

iOS 10 与Xcode 8 新特性

作者: PHM | 来源:发表于2016-09-18 20:31 被阅读258次

    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(通知)

    • 所有相关通知被统一到了UserNotifications.framework框架中。
    • 增加了撤销、更新、中途还可以修改通知的内容。
    • 通知中可以加入视频、图片,自定义通知的展示等等。
    • 相对之前的通知来说更加好用易于管理,并且进行了大规模优化。
    • 对于权限问题进行了优化,申请权限就比较简单了(本地与远程通知集成在一个方法中)。
      通知相关参考

    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

    • (UIStatusBarStyle)preferredStatusBarStyle NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED; // Defaults to UIStatusBarStyleDefault
    • (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.
    • (UIStatusBarAnimation)preferredStatusBarUpdateAnimation NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED; // Defaults to UIStatusBarAnimationFade

    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)

    相关文章

      网友评论

        本文标题:iOS 10 与Xcode 8 新特性

        本文链接:https://www.haomeiwen.com/subject/amdgettx.html