Unity打包iOS自动拷贝1024图标到xcode工程中(上架AppStore需要设置1024*1024图标)
前言
我们如果需要打iOS上架AppStore,则需要拷贝一张1024*1024的高清图标(不含alpha通道)到XCode工程中(目录:Unity-iPhone/Images.xcassets/AppIcon.appiconset),并修改json配置(Unity-iPhone/Images.xcassets/AppIcon.appiconset/Contents.json),可以手动拷贝过去,但是这样效率太低,我们可以用代码来实现打包的时候自动拷贝。
原理
[PostProcessBuild]属性会在Build完XCode工程后自动执行
拷贝图标到XCode工程目录中,并修改Contents.json配置文件
代码
using System;
using UnityEngine;
using UnityEditor;
using UnityEditor.XCodeEditor;
using System.IO;class XCodeCopy1024Icon
{const string kIconInDir = "Unity-iPhone/Images.xcassets/AppIcon.appiconset";const string kContentsJsonFilePath = "Unity-iPhone/Images.xcassets/AppIcon.appiconset/Contents.json";[PostProcessBuild(99)]public static void OnPostProcessBuild(BuildTarget target, string projDir){var iconPath = Path.Combine(Application.dataPath, "RawAssets/Texture/gameIcons/icon_1024.png");CopyIconFile(projDir, iconPath, "icon-1024.png");SetupContentsJsonFile(projDir, "icon-1024.png");}private static void CopyIconFile(string projDir, string iconFilePath, string newIconFileName){string d = Path.Combine (Path.Combine (projDir, kIconInDir), newIconFileName);File.Copy(iconFilePath, d);}private static void SetupContentsJsonFile(string projDir, string newIconFileName){string contentsJsonName = Path.Combine (projDir, kContentsJsonFilePath);string[] lines = File.ReadAllLines (contentsJsonName);string[] dest_lines = SetupTheIcon (lines, newIconFileName);WriteAllLine (dest_lines, contentsJsonName);}private static string [] SetupTheIcon(string[] lines, string iconFilename){int findpos = FindThePos(lines);if (findpos == -1)return AddTheObject (lines, iconFilename);elsereturn SetTheObjetFilename (lines, findpos, iconFilename);}private static string[] AddTheObject(string[] lines, string iconFilename){string t = string.Format (",{{\n\"size\" : \"1024x1024\",\n\"idiom\" : \"ios-marketing\",\n \"filename\" : \"{0}\",\n \"scale\" : \"1x\"\n }}",iconFilename);string[] dest = new string[lines.Length+1];int findpos = lines.Length - 9;for (int i = 0, d_i = 0; i < lines.Length; i++, d_i++) {if (i == findpos) {dest[d_i] = t;d_i++;}dest[ d_i ] = lines[i];}return dest;}private static string[] SetTheObjetFilename (string[] lines, int findpos, string iconFilename ){string[] dest = new string[lines.Length+1];for (int i = 0, d_i = 0; i < lines.Length; i++, d_i++) {if (i == findpos) {dest[d_i] = string.Format("\"filename\" : \"{0}\",", iconFilename);d_i++;}dest[ d_i ] = lines[i];}return dest;}private static int FindThePos(string[] lines){for (int i = 0; i < lines.Length; i++) {string line = lines[i];if (line.IndexOf("\"size\" : \"1024x1024\"") >= 0 ){var nx = lines[i+1];if (nx.IndexOf("\"idiom\" : \"ios-marketing\"") < 0)throw new Exception("XcodeAddIcon: ERROR ");return i+2;}}return -1;}private static void WriteAllLine(string[] lines, string filePath){var streamWriter = new StreamWriter(filePath);for (int i = 0; i < lines.Length; i++) {streamWriter.Write (lines[i]);streamWriter.Write ('\n');}streamWriter.Close();}
}
Unity打包iOS自动拷贝1024图标到xcode工程中(上架AppStore需要设置1024*1024图标)相关推荐
- Unity打包Ios相关权限和麦克风延迟问题的一种解决办法
Unity打包Ios相关权限和麦克风延迟问题 Hello 大家好我又来填坑了 问题一:调用 Microphone.Start()方法的时候主线程明显卡顿 问题二:IOS使用麦克风时声音不会从扬声器里发 ...
- 【Unity开发小技巧】Unity打包IOS端APP
目录 一:安装IOS的模块并打包 1.Hub可以添加IOS模块 2.项目内部下载安装ISO模块 3.添加我们需要打包的场景 二:XCode工程内部设置并打包 1.mac商店安装XCode软件并打开xc ...
- Unity 打包 iOS 工程 替换Native 和 Data 时出错
当我们用unity 打包x-code 工程时,一般会打包一个新的工程然后替换原始工程的 Native和Data文件夹.但是有时候替换会出现下图的问题! 在确定没有添加unity调用ios的方法或者有需 ...
- Unity打包IOS 发布app商城
Unity打包 Xcode工程, 如果是Windows 系统打包出的Xcode 工程, 会有意想不到的权限错误, 需要在mac终端上执行 chmod +x /路径 给Process_symbols.s ...
- 自动清理源计算机设备驱动,win10我的电脑中设备和驱动器位置出现空白图标删除不了怎么解决...
win10我的电脑中设备和驱动器位置出现空白图标删除不了怎么解决? 如下图所示: 打开我的电脑,在设备和驱动器位置有一个空白的图标,看着都让人感觉很难受,显得十分不和谐,右键删除后刷新或重启电脑又重新 ...
- Unity 打包IOS平台错误
1.Unity 下打包 Bulid Failed Assets/Plugins/uLua/x86_64/ulua.dll would be copied to /ulua.dll Plugin 'ul ...
- Unity打包 iOS屏幕镜像失败的解决方法
iOS11之前的项目,投屏的功能叫做AirPlay,之后就叫做了屏幕镜像,在做项目时,发现没升级系统前,投屏的功能可以很好的使用,升级之后,在投屏就很尴尬了,直接闪退,究竟生么什么原因引起的呢?经过一 ...
- 如何清除百度云管家计算机图标,Win10此电脑中多了个百度云管家图标如何清除...
百度云管家是百度云的客户端,一些用户为了更加方便地上传下载文件,都会在电脑中安装百度云管家.但是最近有Win10用户反馈,安装了百度云管家后,此电脑中就多了"百度云管家"的图标,怎 ...
- ios之Xcode工程中添加文件常用快捷键
1.Xcode某个工程中添加文件 有两种方式: 方式一:"command"+"n",弹出添加文件对话框. 方式二:在需要添加文件的工程目录下右键,选择" ...
最新文章
- 开源Web应用中最常见漏洞是XSS和SQLI漏洞
- 以下输出结果为16的python_作业 -- 几道简单的Python题
- frameworks/av/media/CedarX-Projects/CedarAndroidLib/LIB_KK44_/Android.mk: No such file or directory
- 经典线程同步 事件Event
- lua OOP实现对象的链式调用
- 在linux中,强行中断程序 kill命令
- 深度学习入门代码详解(附代码)
- Java二:计算机语言发展进程 以及 JAVA的发展、特性、版本介绍
- ubuntu 20.10 安装万能五笔(ibus模式)
- 设计模式(博客园精华集)
- android 在app内打开淘宝链接
- matlab误码率理论,PSK理论误码率与实际误码率MATLAB仿真程序
- Linux上一款强大的GIF录制软件,Peek
- wi ndows怎么自动编页,15个小技巧,让我的Windows电脑更好用了!
- 百万级别中文文本分类
- 套接字中的数据转换(大端模式/小端模式)
- PPP(Point to Point Protocol)——点对点协议
- 洛谷P1244青蛙过河题解
- linux java下载
- SpringBoot:简单使用RSocket的Demo