您的位置:首页 > 移动开发 > Unity3D

Unity 通过 www 下载 assetbundle , 在 iOS9 设备无法下载的问题

2015-12-03 14:51 627 查看
我们项目是通过 www 下载 Assetbundle 来实现热更新的, 在 iOS 8上一切正常,但在 iOS9 设备上发现无法下载,跟踪调试发现以下错误信息

“App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.”

原因是 iOS9 引入了新的 App Transport Security (ATS) 特性,禁止使用 http 协议传输。

但是我们可以通过修改 pList 文件来绕过这个问题:



当我们通过 Unity 导出 xCode 工程时,如果采用的是 "Replace" 模式, 则需要我们手动设置 pList 文件,

这样会非常麻烦,幸好 Unity 提供了修改 pList 文件的接口,自动设置相关代码如下:

using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using System.Collections;
using UnityEditor.iOS.Xcode;
using System.IO;

public class ChangPlistSetting {

[PostProcessBuild]
public static void ChangeXcodePlist(BuildTarget buildTarget, string pathToBuiltProject) {

if (buildTarget == BuildTarget.iOS)
{
// Get plist
string plistPath = pathToBuiltProject + "/Info.plist";
PlistDocument plist = new PlistDocument();
plist.ReadFromString(File.ReadAllText(plistPath));

// Get root
PlistElementDict rootDict = plist.root;

// Add value of NSAppTransportSecurity in Xcode plist
var atsKey = "NSAppTransportSecurity";

PlistElementDict dictTmp = rootDict.CreateDict( atsKey );
dictTmp.SetBoolean( "NSAllowsArbitraryLoads", true);

// Write to file
File.WriteAllText(plistPath, plist.WriteToString());

}
}
}


将该文件放入 Editor 目录下即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: