unity 编译后执行,自动配置 Xcode 项目的方法
来源:互联网 发布:问道手游源码服务端 编辑:程序博客网 时间:2024/05/19 08:23
unity中,实现编译后继续操作Xcode文件夹的主要方法是使用
PostProcessBuildAttribute
官方文档:
https://docs.unity3d.com/ScriptReference/Callbacks.PostProcessBuildAttribute.html
用法十分简单,只有1个参数,作用是规定有多个后执行方法时,这些方法的执行顺序。
被 [PostProcessBuildAttribute] 标记的静态方法,会在编辑器编译好项目后被调用,这个时候我们就可以进行很多操作了。
就例如ios被unity编译出来时是一个xcode项目的文件夹,但是这个xcode项目很多时候我们是不能拿来直接用的。
比如我们配置了分享,第三方登录这种sdk时,就可能需要对xcode项目挂在的库文件,oc代码,plist配置文件等等进行修改,这时候就需要用这种方法来进行实现了。
这里举例怎么对 xcode 项目下的 plist 文件进行修改:
首先是我们的入口类,也就是用 PostProcessBuildAttribute 来启动的类(记得把这个脚本丢在 Editor 文件夹下,因为它是个编辑器类)
Code:
using UnityEngine;using System.Collections;using UnityEditor;using UnityEditor.Callbacks;using System.IO;namespace PostProcessBuilder{ public class SDKPostProcessBuild { [PostProcessBuildAttribute] private static void OnBuild_1(BuildTarget target, string pathToBuiltProject) { // xcode工程路径 string path = Path.GetFullPath(pathToBuiltProject); Debug.Log("xcode工程路径 = " + path); if (target == BuildTarget.iOS) { // 编辑plist 文件 EditorPlist(path); } } private static void EditorPlist(string filePath) { using (IOS.IOSPlist plist = new IOS.IOSPlist(filePath)) { string bundle = "com.xxx.xxx"; string PlistAdd = @" <key>MyTestKey</key> <string>123456</string>"; //在plist里面增加一行 plist.AddKey(PlistAdd); //在plist里面替换一行 plist.ReplaceKey("<string>com.xxx.${PRODUCT_NAME}</string>", "<string>" + bundle + "</string>"); //保存 plist.Save(); } } }}
处理 plist 内容的类,这个类就不用非放在Editor文件夹下了,因为它并没有使用编辑器的方法
Code:
using UnityEngine;using System.Collections;using System.Collections.Generic;using System.IO;namespace PostProcessBuilder.IOS{ public partial class IOSPlist : System.IDisposable { private List<string> m_contentList; private string m_filePath; public IOSPlist(string path) { m_contentList = new List<string>(); m_filePath = Path.Combine(path, "info.plist"); if (!System.IO.File.Exists(m_filePath)) { Debug.LogError(m_filePath + "路径下文件不存在"); return; } FileInfo projectFileInfo = new FileInfo(m_filePath); StreamReader sr = projectFileInfo.OpenText(); while (sr.Peek() >= 0) { m_contentList.Add(sr.ReadLine()); } sr.Close(); } // 回收 void System.IDisposable.Dispose() { if (m_contentList != null) { m_contentList.Clear(); m_contentList = null; } } public void AddKey(string key) { if (m_contentList.Count < 2) return; m_contentList.Insert(m_contentList.Count - 2, key); } public void ReplaceKey(string key, string replace) { for (int i = 0; i < m_contentList.Count; i++) { if (m_contentList[i].IndexOf(key) != -1) { m_contentList[i] = m_contentList[i].Replace(key, replace); } } } public void Save() { StreamWriter saveFile = File.CreateText(m_filePath); foreach (string line in m_contentList) saveFile.WriteLine(line); saveFile.Close(); } }}
最后生成的 plist 文件:
可以看到我们自己添加的key节点已经存在了,操作plist文件就是这么简单,本质上就是根据 plist 所规定的格式,直接读写文件。
PS:这里举一个自动配置Xcode项目的例子,后面整理一下配库,buildPhase的方法再单独说说~
- unity 编译后执行,自动配置 Xcode 项目的方法
- Unity编译至Xcode工程后自动添加文件和库的方法
- Unity编译至Xcode工程后自动添加文件和库的方法
- Unity编译至Xcode工程后自动添加文件和库的方法
- Unity编译至Xcode工程后自动添加文件和库的方法
- Unity编译至Xcode工程后自动添加文件和库的方法
- Unity-导出Xcode工程时的自动配置
- Unity编译到Xcode自动添加AppIcon
- Unity iOS 自动修改Xcode配置
- Unity导出xcode自动配置工具
- Xcode Instruments通过命令行执行UI自动测试的方法
- 【iOS-cocos2d-X 游戏开发之十六】配置你的Cocos2dx项目编译后的Android自动使用(-hd)高清图&设置Android自适应屏幕、缩放比例方法!
- unity Instantiate后立刻SetActive(false)会执行的方法
- editplus编译执行java的配置方法
- editplus编译执行java的配置方法
- Editplus编译执行java的配置方法
- 关闭 XCode 的自动编译
- unity编译时自动结束项目运行
- 分布式计算第四周实验:RESTful Webservice 编程
- 微信自定义菜单以及自动回复
- 微信公众号开发
- Laravel学习笔记2
- 面向对象OOP的三个基本特征
- unity 编译后执行,自动配置 Xcode 项目的方法
- ucos学习笔记1
- Centos 7 安装后设置
- JAVASE 学习day1(未完)
- codeforces 353B
- C/C++程序的存储空间布局
- [Leetcode] Binary Tree Level Order Traversal II
- [绍棠] iOS 四种保存数据的方式!
- {题解}[jzoj4799]【NOIP2016提高A组模拟9.24】我的快乐时代