雖然 iOS 9 上了一陣子了,可能 Unity 在 iOS 9 上面的問題大家都遇過或是解過了,但是就還是在這裡整理一下我遇過的問題。

效能問題

12002792_1238718452808763_4812507160374360059_n第一個最明顯的就是一樣的 build 在 iOS 9 上面效能變低很多,然後 profiler 開起來是這個非常誇張的鋸齒狀。

這個問題在論壇上面有討論了一陣子:

http://forum.unity3d.com/threads/unity-5-2-ios-performance-issues.353646/

我自己亂試的結果是把 Graphics API 從 Automatic 改成 Force OpenGL ES2,就能避開。猜測是 Unity 跟 iOS 9 上面的 Metal 不合,開到 Metal 的時候效能就會崩潰。目前針對 5.2 的用戶官方建議把 5.1.2 的 shader 塞到 5.2 裡面跑,然後等 5.3 上市。至於 4.6.X 有沒有要解決好像就沒有提了,我是就設成 OpenGL ES2 當作 workaround 掉。

App Transport Security

在 iOS 9 上面 Apple 實做了新的安全機制 App Transport Security 。主要的影響一個是要求 App 從網路上獲取資料的時候要走 HTTPS 或是加白名單,另一個是要跳轉到別的 App 的時候也要有加白名單。這個跟 Unity 關係最密切的就是 Facebook 整合會爆掉。Twitter 方面要看實作,Prime31 好像是走 iOS 內建的 twitter.framework ,升級  iOS 9 後還是正常運作。但是 Facebook 就是要依照官方的指示改 info.plist

https://developers.facebook.com/docs/ios/ios9

我本來以為 Prime31 的作者會在新版本裡面加入修改 info.plist 的選項,不過他老兄很霸氣的說應該是 Facebook 的責任要自己把連線修成 HTTPS ,所以現在還是得自己加:

http://support.prime31.com/22777/social-networking-plugin-on-ios-9?show=22777#q22777

以我之前的 Xcode Postprocessing 教學的當作基底,可以用完全一樣的 PlistDocument 操作把這些設定加到 info.plist 。Code 大概像是:

如果你沒有辦法列舉所有網站的網域,例如說你接的廣告是走 HTTP 然後每次來的網域都不一樣。Apple 是有提供把 HTTPS 檢查整個關掉的選項,但是就是後果自負:

http://stackoverflow.com/questions/30739473/nsurlsession-nsurlconnection-http-load-failed-on-ios-9

選項的名稱是

設定成 true 就會關掉要求 HTTPS 的防護。目前還沒有聽到有人開這個送審被 Apple 刁難的。不過未來還是沒有個準,如果主機是自己的,還是趕快找時間改走 HTTPS 吧。

BITcode

如果有 plug-in 沒有用支援 Bitcode 的選項建置,那在 Xcode 7 裡面開啟 Bitcode 就會建置失敗。這個問題在之前的 Xcode 腳本教學就有提過了,因為 Bitcode 而建置不出來的人請參考這篇

以上