天天看點

(0003) iOS 開發之App 适配iOS 10

iOS  10 給開發者帶來的變化

順便加一句:我是第一時間更新Xcode 8正式版的,一切正常,注釋快捷鍵也沒有網上說的問題。運作速度更快了,不容易崩潰了!

App 做了哪些相容:

1.UI 相容,沒想到好的方法,一處一處改了。不過再保留思考。

2.權限相容。info.plist 中添加 (以下僅列取使用到的:)

相機權限: Privacy - Camera Usage Description 是否允許此App使用你的相機?

相冊權限: Privacy - Photo Library Usage Description 是否允許此App通路你的媒體資料庫?

通訊錄權限: Privacy - Contacts Usage Description 是否允許此App通路你的通訊錄?

月曆權限:Privacy - Calendars Usage Description 是否允許此App使用月曆?

定位權限:Privacy - Location When In Use Usage Description 我們需要通過您的地理位置資訊擷取您周邊的相關資料

3.背景模式

或者在Xcode裡選中目前的

target

,選擇

Capabilities

,找到

Background Modes

,打開它,在裡面選擇對應權限.

我的app裡隻用到RemoteNotification ,打勾即可!

4. UIApplication對象中openUrl被廢iOS 做了相容

-iOS 10 幹掉了所有系統設定的 URL Scheme,這意味着你再也不可能直接跳轉到系統設定頁面(比如 WiFi、蜂窩資料、定位等)。

在iOS 10.0以前,我們要想使用應用程式去打開一個網頁或者進行跳轉,直接使用[[UIApplication sharedApplication] openURL 方法。

在iOS 10全新的推出了[UIApplication sharedApplication] openURL:nil options:nil completionHandler:^(BOOL success);有一個成功的回調block 可以進行監視。暫時不知道怎麼用!

根據系統版本号<10.0的正常跳轉。否則提示使用者自己去設定裡設定即可。

-對于app用到的其他(例如:相機,定位,通訊錄等)的跳轉設定開關。直接使用:

+ (void)openSettingsURLString

{

    NSURL *url = [NSURLURLWithString:UIApplicationOpenSettingsURLString];

    if([[UIApplicationsharedApplication]canOpenURL:url]) {

        [[UIApplicationsharedApplication]openURL:url];

    }

}

5. User Notifications 使用者通知

iOS 10 中以前雜亂的和通知相關的 API 都被統一了,現在開發者可以使用獨立的 UserNotifications.framework 來集中管理和使用 iOS 系統中通知的功能。在 iOS 10 中,開發者的伺服器有機會在本地或者遠端通知發送給使用者之前再進行修改。在此基礎上,Apple 還增加了撤回單條通知,更新已展示通知,中途修改通知内容,在通知中展示圖檔視訊,自定義通知 UI 等一系列新功能,非常強大。

6. 屏蔽雜亂無章的log

更新Xcode8之後,建立立工程,都會列印一堆莫名其妙看不懂的Log.

屏蔽的方法如下:Xcode8裡邊 Edit Scheme-> Run -> Arguments, 在Environment Variables裡邊添加OS_ACTIVITY_MODE = Disable

真機調試時,控制台有沒有列印,又把OS_ACTIVITY_MODE 前面的對勾去掉。運作真機測試,控制台列印出來了!哈哈哈,,,

7.WWDC 15 提出的 ATS (App Transport Security)是 Apple在推進網絡通訊安全的一個重要方式。在 iOS 9和 OS X 10.11中,預設情況下非 HTTPS的網絡通路是被禁止的。當然,因為這樣的推進影響面非常廣,作為緩沖,我們可以在 Info.plist中添加NSAppTransportSecurity字典并且将NSAllowsArbitraryLoads設定為YES來禁用 ATS。不過,WWDC 16中,Apple表示将繼續在 iOS 10和 macOS 10.12裡收緊對普通 HTTP的通路限制。從 2017年 1月 1日起,所有的新送出 app預設是不允許使用NSAllowsArbitraryLoads來繞過 ATS限制的,也就是說,我們最好保證 app的所有網絡請求都是 HTTPS加密的,否則可能會在應用稽核時遇到麻煩。

總結一下就是,對于 API 請求,基本上是必須使用 HTTPS的;我們的伺服器已經是HTTPS了。這裡也暫不改變。

8.iOS 10之前沒添加白名單,分享正常,iOS 10後分享遇到問題:

報:-22005 之類的錯誤。

解決辦法:添加白名單。

當你的應用使用

QQ/QQ空間/支付寶/微信SDK

的相關能力(分享、收藏、支付、登入等)時,

需要在“Info.plist”裡增加如下代碼:(根據自己的平台需要添加:)

<key>LSApplicationQueriesSchemes</key>
 <array>
    <!-- 微信 URL Scheme 白名單-->
    <string>wechat</string>
    <string>weixin</string>

    <!-- 新浪微網誌 URL Scheme 白名單-->
    <string>sinaweibohd</string>
    <string>sinaweibo</string>
    <string>sinaweibosso</string>
    <string>weibosdk</string>
    <string>weibosdk2.5</string>

    <!-- QQ、Qzone URL Scheme 白名單-->
    <string>mqqapi</string>
    <string>mqq</string>
    <string>mqqOpensdkSSoLogin</string>
    <string>mqqconnect</string>
    <string>mqqopensdkdataline</string>
    <string>mqqopensdkgrouptribeshare</string>
    <string>mqqopensdkfriend</string>
    <string>mqqopensdkapi</string>
    <string>mqqopensdkapiV2</string>
    <string>mqqopensdkapiV3</string>
    <string>mqzoneopensdk</string>
    <string>wtloginmqq</string>
    <string>wtloginmqq2</string>
    <string>mqqwpa</string>
    <string>mqzone</string>
    <string>mqzonev2</string>
    <string>mqzoneshare</string>
    <string>wtloginqzone</string>
    <string>mqzonewx</string>
    <string>mqzoneopensdkapiV2</string>
    <string>mqzoneopensdkapi19</string>
    <string>mqzoneopensdkapi</string>
    <string>mqzoneopensdk</string>

    <!-- 支付寶  URL Scheme 白名單-->
    <string>alipay</string>
    <string>alipayshare</string>

</array>