前言

我们如果需要打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图标)相关推荐

  1. Unity打包Ios相关权限和麦克风延迟问题的一种解决办法

    Unity打包Ios相关权限和麦克风延迟问题 Hello 大家好我又来填坑了 问题一:调用 Microphone.Start()方法的时候主线程明显卡顿 问题二:IOS使用麦克风时声音不会从扬声器里发 ...

  2. 【Unity开发小技巧】Unity打包IOS端APP

    目录 一:安装IOS的模块并打包 1.Hub可以添加IOS模块 2.项目内部下载安装ISO模块 3.添加我们需要打包的场景 二:XCode工程内部设置并打包 1.mac商店安装XCode软件并打开xc ...

  3. Unity 打包 iOS 工程 替换Native 和 Data 时出错

    当我们用unity 打包x-code 工程时,一般会打包一个新的工程然后替换原始工程的 Native和Data文件夹.但是有时候替换会出现下图的问题! 在确定没有添加unity调用ios的方法或者有需 ...

  4. Unity打包IOS 发布app商城

    Unity打包 Xcode工程, 如果是Windows 系统打包出的Xcode 工程, 会有意想不到的权限错误, 需要在mac终端上执行 chmod +x /路径 给Process_symbols.s ...

  5. 自动清理源计算机设备驱动,win10我的电脑中设备和驱动器位置出现空白图标删除不了怎么解决...

    win10我的电脑中设备和驱动器位置出现空白图标删除不了怎么解决? 如下图所示: 打开我的电脑,在设备和驱动器位置有一个空白的图标,看着都让人感觉很难受,显得十分不和谐,右键删除后刷新或重启电脑又重新 ...

  6. Unity 打包IOS平台错误

    1.Unity 下打包 Bulid Failed Assets/Plugins/uLua/x86_64/ulua.dll would be copied to /ulua.dll Plugin 'ul ...

  7. Unity打包 iOS屏幕镜像失败的解决方法

    iOS11之前的项目,投屏的功能叫做AirPlay,之后就叫做了屏幕镜像,在做项目时,发现没升级系统前,投屏的功能可以很好的使用,升级之后,在投屏就很尴尬了,直接闪退,究竟生么什么原因引起的呢?经过一 ...

  8. 如何清除百度云管家计算机图标,Win10此电脑中多了个百度云管家图标如何清除...

    百度云管家是百度云的客户端,一些用户为了更加方便地上传下载文件,都会在电脑中安装百度云管家.但是最近有Win10用户反馈,安装了百度云管家后,此电脑中就多了"百度云管家"的图标,怎 ...

  9. ios之Xcode工程中添加文件常用快捷键

    1.Xcode某个工程中添加文件 有两种方式: 方式一:"command"+"n",弹出添加文件对话框. 方式二:在需要添加文件的工程目录下右键,选择" ...

最新文章

  1. 开源Web应用中最常见漏洞是XSS和SQLI漏洞
  2. 以下输出结果为16的python_作业 -- 几道简单的Python题
  3. frameworks/av/media/CedarX-Projects/CedarAndroidLib/LIB_KK44_/Android.mk: No such file or directory
  4. 经典线程同步 事件Event
  5. lua OOP实现对象的链式调用
  6. 在linux中,强行中断程序 kill命令
  7. 深度学习入门代码详解(附代码)
  8. Java二:计算机语言发展进程 以及 JAVA的发展、特性、版本介绍
  9. ubuntu 20.10 安装万能五笔(ibus模式)
  10. 设计模式(博客园精华集)
  11. android 在app内打开淘宝链接
  12. matlab误码率理论,PSK理论误码率与实际误码率MATLAB仿真程序
  13. Linux上一款强大的GIF录制软件,Peek
  14. wi ndows怎么自动编页,15个小技巧,让我的Windows电脑更好用了!
  15. 百万级别中文文本分类
  16. 套接字中的数据转换(大端模式/小端模式)
  17. PPP(Point to Point Protocol)——点对点协议
  18. 洛谷P1244青蛙过河题解
  19. linux java下载
  20. SpringBoot:简单使用RSocket的Demo

热门文章

  1. PE文件格式详细解析(二)
  2. 构建高性能网站的14条法则:减少HTTP请求
  3. Redis缓存击穿问题及解决思路
  4. 用 flomo 管理自己的奇思妙想瀑布流
  5. 微信小程序设置button禁用时的样式disabled
  6. 阿里 mysql建表规范_阿里的Mysql规范 MySQL库表设计规范
  7. 关键词词云怎么做_《excle词云怎么制作》 除了tableau ,还有什么数据工具可以制作词云啊?...
  8. 复试面试时,导师都会问什么问题?
  9. 你有成为互联网团队管理者的潜力吗?
  10. 用小觅双目相机跑ORB-SLAM2