接上一節(jié): iOS與unity交互混編, 閉包方式實(shí)現(xiàn)互相調(diào)用
插件添加到工程
如果插件只包含 .h/.m/.mm/.c/.cpp/.a 文件,直接放入 Unity Assets/Plugins/iOS 目錄即可维苔。在 Unity 導(dǎo)出 Xcode 工程時(shí)徘意,這些文件會(huì)放置在Unity-iPhone/Libraries/Plugins/iOS目錄。
如果插件包含 .framework/.bundle 文件净嘀,需要在 Unity 導(dǎo)出 XCode 工程之后报咳,手動(dòng)或利用unity的腳本功能,加入 Xcode 工程中挖藏。勾選Copy items if needed暑刃,選擇Create groups,勾選Add to targets: Unity-iPhone膜眠。
導(dǎo)出iOS工程之后的設(shè)置
如果每次導(dǎo)出 Xcode 之后手動(dòng)修改 PBXProject 和 Plist稍走,將會(huì)非常麻煩。UnityEditor 提供一個(gè)[PostProcessBuild]
標(biāo)簽柴底,可以幫助我們在導(dǎo)出 Xcode 之后執(zhí)行一些自動(dòng)化操作婿脸。
標(biāo)記 PostProcessBuild 方法
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
#if UNITY_IOS || UNITY_EDITOR
public class XcodeBuildPostprocessor
{
// 版本號
[PostProcessBuild(1)]
public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
{
if (buildTarget == BuildTarget.iOS)
{
UnityEngine.Debug.Log("XCodePostProcess: Starting to perform post build tasks for iOS platform.");
/*===projPath===*/
string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
PBXProject proj = new PBXProject();
proj.ReadFromFile(projPath);
string target = proj.TargetGuidByName("Unity-iPhone");
// ENABLE_BITCODE=False
proj.SetBuildProperty(target, "ENABLE_BITCODE", "false");
// add extra framework(s)
proj.AddFrameworkToProject(target, "Accelerate.framework", true);
proj.AddFrameworkToProject(target, "AddressBook.framework", true);
proj.AddFrameworkToProject(target, "AdSupport.framework", true);
proj.AddFrameworkToProject(target, "CoreTelephony.framework", true);
proj.AddFrameworkToProject(target, "ImageIO.framework", true);
proj.AddFrameworkToProject(target, "MessageUI.framework", true);
proj.AddFrameworkToProject(target, "MobileCoreServices.framework", true);
proj.AddFrameworkToProject(target, "libc++.tbd", true);
proj.AddFrameworkToProject(target, "libsqlite3.tbd", true);
proj.AddFrameworkToProject(target, "libxml2.tbd", true);
// rewrite to file
File.WriteAllText(projPath, proj.WriteToString());
/*====plist=====*/
string plistPath = path + "/Info.plist";
PlistDocument plist = new PlistDocument();
plist.ReadFromString(File.ReadAllText(plistPath));
// Get root
PlistElementDict rootDict = plist.root;
// 權(quán)限
rootDict.SetString("NSCameraUsageDescription", "請?jiān)试S打開攝像頭");
rootDict.SetString("NSMicrophoneUsageDescription", "請?jiān)试S打開麥克風(fēng)");
// 允許http
var atsKey = "NSAppTransportSecurity";
PlistElementDict dictTmp = rootDict.CreateDict(atsKey);
dictTmp.SetBoolean("NSAllowsArbitraryLoads", true);
// Write to file
File.WriteAllText(plistPath, plist.WriteToString());
}
}
}
#endif